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

; 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.3 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [141 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP = external hidden unnamed_addr constant [85 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [67 x i8], align 1

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeRefine1SidedP(ptr noundef %0, ptr noundef %1, ptr noundef %2, float noundef %3, i32 noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca float, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store float %3, ptr %9, align 4, !tbaa !9
  store i32 %4, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %49)
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 17
  %52 = load i32, ptr %51, align 8, !tbaa !13
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graph_t, ptr %53, i32 0, i32 20
  %55 = load ptr, ptr %54, align 8, !tbaa !15
  %56 = getelementptr inbounds i32, ptr %55, i64 2
  %57 = load i32, ptr %56, align 4, !tbaa !11
  %58 = icmp eq i32 %52, %57
  br i1 %58, label %73, label %59

59:                                               ; preds = %5
  %60 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef 251, ptr noundef @.str.4)
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.graph_t, ptr %61, i32 0, i32 17
  %63 = load i32, ptr %62, align 8, !tbaa !13
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.graph_t, ptr %64, i32 0, i32 20
  %66 = load ptr, ptr %65, align 8, !tbaa !15
  %67 = getelementptr inbounds i32, ptr %66, i64 2
  %68 = load i32, ptr %67, align 4, !tbaa !11
  %69 = icmp eq i32 %63, %68
  br i1 %69, label %70, label %71

70:                                               ; preds = %59
  br label %72

71:                                               ; preds = %59
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.4, i32 noundef 251, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

72:                                               ; preds = %70
  br label %73

73:                                               ; preds = %72, %5
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.graph_t, ptr %74, i32 0, i32 0
  %76 = load i32, ptr %75, align 8, !tbaa !16
  store i32 %76, ptr %17, align 4, !tbaa !11
  %77 = load ptr, ptr %7, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.graph_t, ptr %77, i32 0, i32 3
  %79 = load ptr, ptr %78, align 8, !tbaa !17
  store ptr %79, ptr %23, align 8, !tbaa !5
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.graph_t, ptr %80, i32 0, i32 6
  %82 = load ptr, ptr %81, align 8, !tbaa !18
  store ptr %82, ptr %25, align 8, !tbaa !5
  %83 = load ptr, ptr %7, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.graph_t, ptr %83, i32 0, i32 4
  %85 = load ptr, ptr %84, align 8, !tbaa !19
  store ptr %85, ptr %24, align 8, !tbaa !5
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.graph_t, ptr %86, i32 0, i32 23
  %88 = load ptr, ptr %87, align 8, !tbaa !20
  store ptr %88, ptr %29, align 8, !tbaa !5
  %89 = load ptr, ptr %7, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.graph_t, ptr %89, i32 0, i32 22
  %91 = load ptr, ptr %90, align 8, !tbaa !21
  store ptr %91, ptr %30, align 8, !tbaa !5
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.graph_t, ptr %92, i32 0, i32 19
  %94 = load ptr, ptr %93, align 8, !tbaa !22
  store ptr %94, ptr %26, align 8, !tbaa !5
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.graph_t, ptr %95, i32 0, i32 20
  %97 = load ptr, ptr %96, align 8, !tbaa !15
  store ptr %97, ptr %27, align 8, !tbaa !5
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.graph_t, ptr %98, i32 0, i32 28
  %100 = load ptr, ptr %99, align 8, !tbaa !23
  store ptr %100, ptr %36, align 8, !tbaa !5
  %101 = load i32, ptr %17, align 4, !tbaa !11
  %102 = sext i32 %101 to i64
  %103 = call ptr @libmetis__rpqCreate(i64 noundef %102)
  store ptr %103, ptr %35, align 8, !tbaa !5
  %104 = load i32, ptr %17, align 4, !tbaa !11
  %105 = sext i32 %104 to i64
  %106 = load ptr, ptr %6, align 8, !tbaa !5
  %107 = load i32, ptr %17, align 4, !tbaa !11
  %108 = call ptr @libmetis__iwspacemalloc(ptr noundef %106, i32 noundef %107)
  %109 = call ptr @libmetis__iset(i64 noundef %105, i32 noundef -1, ptr noundef %108)
  store ptr %109, ptr %34, align 8, !tbaa !5
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = load i32, ptr %17, align 4, !tbaa !11
  %112 = call ptr @libmetis__iwspacemalloc(ptr noundef %110, i32 noundef %111)
  store ptr %112, ptr %33, align 8, !tbaa !5
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = load i32, ptr %17, align 4, !tbaa !11
  %115 = add nsw i32 %114, 1
  %116 = call ptr @libmetis__iwspacemalloc(ptr noundef %113, i32 noundef %115)
  store ptr %116, ptr %31, align 8, !tbaa !5
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = load i32, ptr %17, align 4, !tbaa !11
  %119 = mul nsw i32 2, %118
  %120 = call ptr @libmetis__iwspacemalloc(ptr noundef %117, i32 noundef %119)
  store ptr %120, ptr %32, align 8, !tbaa !5
  %121 = load float, ptr %9, align 4, !tbaa !9
  %122 = load ptr, ptr %27, align 8, !tbaa !5
  %123 = getelementptr inbounds i32, ptr %122, i64 0
  %124 = load i32, ptr %123, align 4, !tbaa !11
  %125 = load ptr, ptr %27, align 8, !tbaa !5
  %126 = getelementptr inbounds i32, ptr %125, i64 1
  %127 = load i32, ptr %126, align 4, !tbaa !11
  %128 = icmp sge i32 %124, %127
  br i1 %128, label %129, label %133

129:                                              ; preds = %73
  %130 = load ptr, ptr %27, align 8, !tbaa !5
  %131 = getelementptr inbounds i32, ptr %130, i64 0
  %132 = load i32, ptr %131, align 4, !tbaa !11
  br label %137

133:                                              ; preds = %73
  %134 = load ptr, ptr %27, align 8, !tbaa !5
  %135 = getelementptr inbounds i32, ptr %134, i64 1
  %136 = load i32, ptr %135, align 4, !tbaa !11
  br label %137

137:                                              ; preds = %133, %129
  %138 = phi i32 [ %132, %129 ], [ %136, %133 ]
  %139 = sitofp i32 %138 to float
  %140 = fmul float %121, %139
  %141 = fptosi float %140 to i32
  store i32 %141, ptr %46, align 4, !tbaa !11
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.ctrl_t, ptr %142, i32 0, i32 2
  %144 = load i32, ptr %143, align 8, !tbaa !24
  %145 = and i32 %144, 8
  %146 = icmp ne i32 %145, 0
  br i1 %146, label %147, label %165

147:                                              ; preds = %137
  %148 = load ptr, ptr %27, align 8, !tbaa !5
  %149 = getelementptr inbounds i32, ptr %148, i64 0
  %150 = load i32, ptr %149, align 4, !tbaa !11
  %151 = load ptr, ptr %27, align 8, !tbaa !5
  %152 = getelementptr inbounds i32, ptr %151, i64 1
  %153 = load i32, ptr %152, align 4, !tbaa !11
  %154 = load ptr, ptr %7, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.graph_t, ptr %154, i32 0, i32 0
  %156 = load i32, ptr %155, align 8, !tbaa !16
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.graph_t, ptr %157, i32 0, i32 21
  %159 = load i32, ptr %158, align 8, !tbaa !28
  %160 = load i32, ptr %46, align 4, !tbaa !11
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.graph_t, ptr %161, i32 0, i32 17
  %163 = load i32, ptr %162, align 8, !tbaa !13
  %164 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef %150, i32 noundef %153, i32 noundef %156, i32 noundef %159, i32 noundef %160, i32 noundef %163)
  br label %165

165:                                              ; preds = %147, %137
  %166 = load ptr, ptr %27, align 8, !tbaa !5
  %167 = getelementptr inbounds i32, ptr %166, i64 0
  %168 = load i32, ptr %167, align 4, !tbaa !11
  %169 = load ptr, ptr %27, align 8, !tbaa !5
  %170 = getelementptr inbounds i32, ptr %169, i64 1
  %171 = load i32, ptr %170, align 4, !tbaa !11
  %172 = icmp slt i32 %168, %171
  %173 = zext i1 %172 to i64
  %174 = select i1 %172, i32 1, i32 0
  store i32 %174, ptr %44, align 4, !tbaa !11
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %175

175:                                              ; preds = %1289, %165
  %176 = load i32, ptr %42, align 4, !tbaa !11
  %177 = load i32, ptr %10, align 4, !tbaa !11
  %178 = icmp slt i32 %176, %177
  br i1 %178, label %179, label %1292

179:                                              ; preds = %175
  %180 = load i32, ptr %44, align 4, !tbaa !11
  store i32 %180, ptr %43, align 4, !tbaa !11
  %181 = load i32, ptr %43, align 4, !tbaa !11
  %182 = add nsw i32 %181, 1
  %183 = srem i32 %182, 2
  store i32 %183, ptr %44, align 4, !tbaa !11
  %184 = load ptr, ptr %35, align 8, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %184)
  store i32 -1, ptr %41, align 4, !tbaa !11
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.graph_t, ptr %185, i32 0, i32 17
  %187 = load i32, ptr %186, align 8, !tbaa !13
  store i32 %187, ptr %39, align 4, !tbaa !11
  store i32 %187, ptr %40, align 4, !tbaa !11
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.graph_t, ptr %188, i32 0, i32 21
  %190 = load i32, ptr %189, align 8, !tbaa !28
  store i32 %190, ptr %18, align 4, !tbaa !11
  %191 = load i32, ptr %18, align 4, !tbaa !11
  %192 = load ptr, ptr %33, align 8, !tbaa !5
  %193 = load i32, ptr %18, align 4, !tbaa !11
  call void @libmetis__irandArrayPermute(i32 noundef %191, ptr noundef %192, i32 noundef %193, i32 noundef 1)
  store i32 0, ptr %12, align 4, !tbaa !11
  br label %194

194:                                              ; preds = %266, %179
  %195 = load i32, ptr %12, align 4, !tbaa !11
  %196 = load i32, ptr %18, align 4, !tbaa !11
  %197 = icmp slt i32 %195, %196
  br i1 %197, label %198, label %269

198:                                              ; preds = %194
  %199 = load ptr, ptr %29, align 8, !tbaa !5
  %200 = load ptr, ptr %33, align 8, !tbaa !5
  %201 = load i32, ptr %12, align 4, !tbaa !11
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds i32, ptr %200, i64 %202
  %204 = load i32, ptr %203, align 4, !tbaa !11
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %199, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !11
  store i32 %207, ptr %11, align 4, !tbaa !11
  %208 = load ptr, ptr %26, align 8, !tbaa !5
  %209 = load i32, ptr %11, align 4, !tbaa !11
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %208, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !11
  %213 = icmp eq i32 %212, 2
  br i1 %213, label %225, label %214

214:                                              ; preds = %198
  %215 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef 294, ptr noundef @.str.4)
  %216 = load ptr, ptr %26, align 8, !tbaa !5
  %217 = load i32, ptr %11, align 4, !tbaa !11
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds i32, ptr %216, i64 %218
  %220 = load i32, ptr %219, align 4, !tbaa !11
  %221 = icmp eq i32 %220, 2
  br i1 %221, label %222, label %223

222:                                              ; preds = %214
  br label %224

223:                                              ; preds = %214
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.4, i32 noundef 294, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

224:                                              ; preds = %222
  br label %225

225:                                              ; preds = %224, %198
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = load i32, ptr %11, align 4, !tbaa !11
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds i32, ptr %226, i64 %228
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = icmp eq i32 %230, -1
  br i1 %231, label %240, label %232

232:                                              ; preds = %225
  %233 = load ptr, ptr %8, align 8, !tbaa !5
  %234 = load i32, ptr %11, align 4, !tbaa !11
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %233, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !11
  %238 = load i32, ptr %44, align 4, !tbaa !11
  %239 = icmp eq i32 %237, %238
  br i1 %239, label %240, label %265

240:                                              ; preds = %232, %225
  %241 = load ptr, ptr %35, align 8, !tbaa !5
  %242 = load i32, ptr %11, align 4, !tbaa !11
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = load i32, ptr %11, align 4, !tbaa !11
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %243, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !11
  %248 = load ptr, ptr %36, align 8, !tbaa !5
  %249 = load i32, ptr %11, align 4, !tbaa !11
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds %struct.nrinfo_t, ptr %248, i64 %250
  %252 = getelementptr inbounds %struct.nrinfo_t, ptr %251, i32 0, i32 0
  %253 = load i32, ptr %43, align 4, !tbaa !11
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds [2 x i32], ptr %252, i64 0, i64 %254
  %256 = load i32, ptr %255, align 4, !tbaa !11
  %257 = sub nsw i32 %247, %256
  %258 = sitofp i32 %257 to float
  %259 = call i32 @libmetis__rpqInsert(ptr noundef %241, i32 noundef %242, float noundef %258)
  %260 = load i32, ptr %42, align 4, !tbaa !11
  %261 = load ptr, ptr %34, align 8, !tbaa !5
  %262 = load i32, ptr %11, align 4, !tbaa !11
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %261, i64 %263
  store i32 %260, ptr %264, align 4, !tbaa !11
  br label %265

265:                                              ; preds = %240, %232
  br label %266

266:                                              ; preds = %265
  %267 = load i32, ptr %12, align 4, !tbaa !11
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %12, align 4, !tbaa !11
  br label %194, !llvm.loop !29

269:                                              ; preds = %194
  %270 = load ptr, ptr %35, align 8, !tbaa !5
  %271 = call i64 @libmetis__rpqLength(ptr noundef %270)
  %272 = trunc i64 %271 to i32
  store i32 %272, ptr %22, align 4, !tbaa !11
  %273 = load ptr, ptr %7, align 8, !tbaa !5
  %274 = load i32, ptr %18, align 4, !tbaa !11
  %275 = call i32 @libmetis__CheckNodeBnd(ptr noundef %273, i32 noundef %274)
  %276 = icmp ne i32 %275, 0
  br i1 %276, label %286, label %277

277:                                              ; preds = %269
  %278 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 302, ptr noundef @.str.4)
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = load i32, ptr %18, align 4, !tbaa !11
  %281 = call i32 @libmetis__CheckNodeBnd(ptr noundef %279, i32 noundef %280)
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %283, label %284

283:                                              ; preds = %277
  br label %285

284:                                              ; preds = %277
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 302, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

285:                                              ; preds = %283
  br label %286

286:                                              ; preds = %285, %269
  %287 = load ptr, ptr %7, align 8, !tbaa !5
  %288 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %287)
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %298, label %290

290:                                              ; preds = %286
  %291 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef 303, ptr noundef @.str.4)
  %292 = load ptr, ptr %7, align 8, !tbaa !5
  %293 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %292)
  %294 = icmp ne i32 %293, 0
  br i1 %294, label %295, label %296

295:                                              ; preds = %290
  br label %297

296:                                              ; preds = %290
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 303, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

297:                                              ; preds = %295
  br label %298

298:                                              ; preds = %297, %286
  %299 = load i32, ptr %18, align 4, !tbaa !11
  store i32 %299, ptr %45, align 4, !tbaa !11
  store i32 0, ptr %21, align 4, !tbaa !11
  store i32 0, ptr %20, align 4, !tbaa !11
  %300 = load ptr, ptr %31, align 8, !tbaa !5
  %301 = getelementptr inbounds i32, ptr %300, i64 0
  store i32 0, ptr %301, align 4, !tbaa !11
  %302 = load ptr, ptr %27, align 8, !tbaa !5
  %303 = getelementptr inbounds i32, ptr %302, i64 0
  %304 = load i32, ptr %303, align 4, !tbaa !11
  %305 = load ptr, ptr %27, align 8, !tbaa !5
  %306 = getelementptr inbounds i32, ptr %305, i64 1
  %307 = load i32, ptr %306, align 4, !tbaa !11
  %308 = sub nsw i32 %304, %307
  %309 = call i32 @llvm.abs.i32(i32 %308, i1 true)
  store i32 %309, ptr %47, align 4, !tbaa !11
  store i32 0, ptr %19, align 4, !tbaa !11
  br label %310

310:                                              ; preds = %884, %298
  %311 = load i32, ptr %19, align 4, !tbaa !11
  %312 = load i32, ptr %17, align 4, !tbaa !11
  %313 = icmp slt i32 %311, %312
  br i1 %313, label %314, label %887

314:                                              ; preds = %310
  %315 = load ptr, ptr %35, align 8, !tbaa !5
  %316 = call i32 @libmetis__rpqGetTop(ptr noundef %315)
  store i32 %316, ptr %37, align 4, !tbaa !11
  %317 = icmp eq i32 %316, -1
  br i1 %317, label %318, label %319

318:                                              ; preds = %314
  br label %887

319:                                              ; preds = %314
  %320 = load ptr, ptr %30, align 8, !tbaa !5
  %321 = load i32, ptr %37, align 4, !tbaa !11
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i32, ptr %320, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !11
  %325 = icmp ne i32 %324, -1
  br i1 %325, label %337, label %326

326:                                              ; preds = %319
  %327 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 316, ptr noundef @.str.4)
  %328 = load ptr, ptr %30, align 8, !tbaa !5
  %329 = load i32, ptr %37, align 4, !tbaa !11
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %328, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !11
  %333 = icmp ne i32 %332, -1
  br i1 %333, label %334, label %335

334:                                              ; preds = %326
  br label %336

335:                                              ; preds = %326
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 316, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

336:                                              ; preds = %334
  br label %337

337:                                              ; preds = %336, %319
  %338 = load i32, ptr %20, align 4, !tbaa !11
  %339 = load ptr, ptr %23, align 8, !tbaa !5
  %340 = load i32, ptr %37, align 4, !tbaa !11
  %341 = add nsw i32 %340, 1
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %339, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !11
  %345 = add nsw i32 %338, %344
  %346 = load ptr, ptr %23, align 8, !tbaa !5
  %347 = load i32, ptr %37, align 4, !tbaa !11
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds i32, ptr %346, i64 %348
  %350 = load i32, ptr %349, align 4, !tbaa !11
  %351 = sub nsw i32 %345, %350
  %352 = load i32, ptr %17, align 4, !tbaa !11
  %353 = mul nsw i32 2, %352
  %354 = sub nsw i32 %353, 1
  %355 = icmp sge i32 %351, %354
  br i1 %355, label %356, label %357

356:                                              ; preds = %337
  br label %887

357:                                              ; preds = %337
  %358 = load ptr, ptr %34, align 8, !tbaa !5
  %359 = load i32, ptr %37, align 4, !tbaa !11
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i32, ptr %358, i64 %360
  store i32 -1, ptr %361, align 4, !tbaa !11
  %362 = load ptr, ptr %27, align 8, !tbaa !5
  %363 = load i32, ptr %44, align 4, !tbaa !11
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds i32, ptr %362, i64 %364
  %366 = load i32, ptr %365, align 4, !tbaa !11
  %367 = load ptr, ptr %24, align 8, !tbaa !5
  %368 = load i32, ptr %37, align 4, !tbaa !11
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds i32, ptr %367, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !11
  %372 = add nsw i32 %366, %371
  %373 = load i32, ptr %46, align 4, !tbaa !11
  %374 = icmp sgt i32 %372, %373
  br i1 %374, label %375, label %384

375:                                              ; preds = %357
  %376 = load i32, ptr %21, align 4, !tbaa !11
  %377 = add nsw i32 %376, 1
  store i32 %377, ptr %21, align 4, !tbaa !11
  %378 = load i32, ptr %45, align 4, !tbaa !11
  %379 = icmp sgt i32 %376, %378
  br i1 %379, label %380, label %381

380:                                              ; preds = %375
  br label %887

381:                                              ; preds = %375
  %382 = load i32, ptr %19, align 4, !tbaa !11
  %383 = add nsw i32 %382, -1
  store i32 %383, ptr %19, align 4, !tbaa !11
  br label %884

384:                                              ; preds = %357
  %385 = load ptr, ptr %24, align 8, !tbaa !5
  %386 = load i32, ptr %37, align 4, !tbaa !11
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %385, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !11
  %390 = load ptr, ptr %36, align 8, !tbaa !5
  %391 = load i32, ptr %37, align 4, !tbaa !11
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds %struct.nrinfo_t, ptr %390, i64 %392
  %394 = getelementptr inbounds %struct.nrinfo_t, ptr %393, i32 0, i32 0
  %395 = load i32, ptr %43, align 4, !tbaa !11
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds [2 x i32], ptr %394, i64 0, i64 %396
  %398 = load i32, ptr %397, align 4, !tbaa !11
  %399 = sub nsw i32 %389, %398
  %400 = load ptr, ptr %27, align 8, !tbaa !5
  %401 = getelementptr inbounds i32, ptr %400, i64 2
  %402 = load i32, ptr %401, align 4, !tbaa !11
  %403 = sub nsw i32 %402, %399
  store i32 %403, ptr %401, align 4, !tbaa !11
  %404 = load ptr, ptr %27, align 8, !tbaa !5
  %405 = load i32, ptr %44, align 4, !tbaa !11
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %404, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !11
  %409 = load ptr, ptr %24, align 8, !tbaa !5
  %410 = load i32, ptr %37, align 4, !tbaa !11
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i32, ptr %409, i64 %411
  %413 = load i32, ptr %412, align 4, !tbaa !11
  %414 = add nsw i32 %408, %413
  %415 = load ptr, ptr %27, align 8, !tbaa !5
  %416 = load i32, ptr %43, align 4, !tbaa !11
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i32, ptr %415, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !11
  %420 = load ptr, ptr %36, align 8, !tbaa !5
  %421 = load i32, ptr %37, align 4, !tbaa !11
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds %struct.nrinfo_t, ptr %420, i64 %422
  %424 = getelementptr inbounds %struct.nrinfo_t, ptr %423, i32 0, i32 0
  %425 = load i32, ptr %43, align 4, !tbaa !11
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds [2 x i32], ptr %424, i64 0, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !11
  %429 = sub nsw i32 %419, %428
  %430 = sub nsw i32 %414, %429
  %431 = call i32 @llvm.abs.i32(i32 %430, i1 true)
  store i32 %431, ptr %48, align 4, !tbaa !11
  %432 = load ptr, ptr %27, align 8, !tbaa !5
  %433 = getelementptr inbounds i32, ptr %432, i64 2
  %434 = load i32, ptr %433, align 4, !tbaa !11
  %435 = load i32, ptr %39, align 4, !tbaa !11
  %436 = icmp slt i32 %434, %435
  br i1 %436, label %447, label %437

437:                                              ; preds = %384
  %438 = load ptr, ptr %27, align 8, !tbaa !5
  %439 = getelementptr inbounds i32, ptr %438, i64 2
  %440 = load i32, ptr %439, align 4, !tbaa !11
  %441 = load i32, ptr %39, align 4, !tbaa !11
  %442 = icmp eq i32 %440, %441
  br i1 %442, label %443, label %453

443:                                              ; preds = %437
  %444 = load i32, ptr %48, align 4, !tbaa !11
  %445 = load i32, ptr %47, align 4, !tbaa !11
  %446 = icmp slt i32 %444, %445
  br i1 %446, label %447, label %453

447:                                              ; preds = %443, %384
  %448 = load ptr, ptr %27, align 8, !tbaa !5
  %449 = getelementptr inbounds i32, ptr %448, i64 2
  %450 = load i32, ptr %449, align 4, !tbaa !11
  store i32 %450, ptr %39, align 4, !tbaa !11
  %451 = load i32, ptr %19, align 4, !tbaa !11
  store i32 %451, ptr %41, align 4, !tbaa !11
  %452 = load i32, ptr %48, align 4, !tbaa !11
  store i32 %452, ptr %47, align 4, !tbaa !11
  store i32 0, ptr %21, align 4, !tbaa !11
  br label %479

453:                                              ; preds = %443, %437
  %454 = load i32, ptr %21, align 4, !tbaa !11
  %455 = add nsw i32 %454, 1
  store i32 %455, ptr %21, align 4, !tbaa !11
  %456 = load i32, ptr %45, align 4, !tbaa !11
  %457 = icmp sgt i32 %454, %456
  br i1 %457, label %458, label %478

458:                                              ; preds = %453
  %459 = load ptr, ptr %24, align 8, !tbaa !5
  %460 = load i32, ptr %37, align 4, !tbaa !11
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i32, ptr %459, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !11
  %464 = load ptr, ptr %36, align 8, !tbaa !5
  %465 = load i32, ptr %37, align 4, !tbaa !11
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds %struct.nrinfo_t, ptr %464, i64 %466
  %468 = getelementptr inbounds %struct.nrinfo_t, ptr %467, i32 0, i32 0
  %469 = load i32, ptr %43, align 4, !tbaa !11
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds [2 x i32], ptr %468, i64 0, i64 %470
  %472 = load i32, ptr %471, align 4, !tbaa !11
  %473 = sub nsw i32 %463, %472
  %474 = load ptr, ptr %27, align 8, !tbaa !5
  %475 = getelementptr inbounds i32, ptr %474, i64 2
  %476 = load i32, ptr %475, align 4, !tbaa !11
  %477 = add nsw i32 %476, %473
  store i32 %477, ptr %475, align 4, !tbaa !11
  br label %887

478:                                              ; preds = %453
  br label %479

479:                                              ; preds = %478, %447
  br label %480

480:                                              ; preds = %479
  %481 = load ptr, ptr %30, align 8, !tbaa !5
  %482 = load i32, ptr %37, align 4, !tbaa !11
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %481, i64 %483
  %485 = load i32, ptr %484, align 4, !tbaa !11
  %486 = icmp ne i32 %485, -1
  br i1 %486, label %498, label %487

487:                                              ; preds = %480
  %488 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 350, ptr noundef @.str.4)
  %489 = load ptr, ptr %30, align 8, !tbaa !5
  %490 = load i32, ptr %37, align 4, !tbaa !11
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %489, i64 %491
  %493 = load i32, ptr %492, align 4, !tbaa !11
  %494 = icmp ne i32 %493, -1
  br i1 %494, label %495, label %496

495:                                              ; preds = %487
  br label %497

496:                                              ; preds = %487
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 350, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

497:                                              ; preds = %495
  br label %498

498:                                              ; preds = %497, %480
  %499 = load ptr, ptr %29, align 8, !tbaa !5
  %500 = load i32, ptr %18, align 4, !tbaa !11
  %501 = add nsw i32 %500, -1
  store i32 %501, ptr %18, align 4, !tbaa !11
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %499, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !11
  %505 = load ptr, ptr %29, align 8, !tbaa !5
  %506 = load ptr, ptr %30, align 8, !tbaa !5
  %507 = load i32, ptr %37, align 4, !tbaa !11
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds i32, ptr %506, i64 %508
  %510 = load i32, ptr %509, align 4, !tbaa !11
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds i32, ptr %505, i64 %511
  store i32 %504, ptr %512, align 4, !tbaa !11
  %513 = load ptr, ptr %30, align 8, !tbaa !5
  %514 = load i32, ptr %37, align 4, !tbaa !11
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds i32, ptr %513, i64 %515
  %517 = load i32, ptr %516, align 4, !tbaa !11
  %518 = load ptr, ptr %30, align 8, !tbaa !5
  %519 = load ptr, ptr %29, align 8, !tbaa !5
  %520 = load i32, ptr %18, align 4, !tbaa !11
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i32, ptr %519, i64 %521
  %523 = load i32, ptr %522, align 4, !tbaa !11
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds i32, ptr %518, i64 %524
  store i32 %517, ptr %525, align 4, !tbaa !11
  %526 = load ptr, ptr %30, align 8, !tbaa !5
  %527 = load i32, ptr %37, align 4, !tbaa !11
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds i32, ptr %526, i64 %528
  store i32 -1, ptr %529, align 4, !tbaa !11
  br label %530

530:                                              ; preds = %498
  br label %531

531:                                              ; preds = %530
  %532 = load ptr, ptr %24, align 8, !tbaa !5
  %533 = load i32, ptr %37, align 4, !tbaa !11
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds i32, ptr %532, i64 %534
  %536 = load i32, ptr %535, align 4, !tbaa !11
  %537 = load ptr, ptr %27, align 8, !tbaa !5
  %538 = load i32, ptr %44, align 4, !tbaa !11
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds i32, ptr %537, i64 %539
  %541 = load i32, ptr %540, align 4, !tbaa !11
  %542 = add nsw i32 %541, %536
  store i32 %542, ptr %540, align 4, !tbaa !11
  %543 = load i32, ptr %44, align 4, !tbaa !11
  %544 = load ptr, ptr %26, align 8, !tbaa !5
  %545 = load i32, ptr %37, align 4, !tbaa !11
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds i32, ptr %544, i64 %546
  store i32 %543, ptr %547, align 4, !tbaa !11
  %548 = load i32, ptr %37, align 4, !tbaa !11
  %549 = load ptr, ptr %33, align 8, !tbaa !5
  %550 = load i32, ptr %19, align 4, !tbaa !11
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds i32, ptr %549, i64 %551
  store i32 %548, ptr %552, align 4, !tbaa !11
  %553 = load ptr, ptr %23, align 8, !tbaa !5
  %554 = load i32, ptr %37, align 4, !tbaa !11
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds i32, ptr %553, i64 %555
  %557 = load i32, ptr %556, align 4, !tbaa !11
  store i32 %557, ptr %13, align 4, !tbaa !11
  br label %558

558:                                              ; preds = %833, %531
  %559 = load i32, ptr %13, align 4, !tbaa !11
  %560 = load ptr, ptr %23, align 8, !tbaa !5
  %561 = load i32, ptr %37, align 4, !tbaa !11
  %562 = add nsw i32 %561, 1
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds i32, ptr %560, i64 %563
  %565 = load i32, ptr %564, align 4, !tbaa !11
  %566 = icmp slt i32 %559, %565
  br i1 %566, label %567, label %836

567:                                              ; preds = %558
  %568 = load ptr, ptr %25, align 8, !tbaa !5
  %569 = load i32, ptr %13, align 4, !tbaa !11
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds i32, ptr %568, i64 %570
  %572 = load i32, ptr %571, align 4, !tbaa !11
  store i32 %572, ptr %14, align 4, !tbaa !11
  %573 = load ptr, ptr %26, align 8, !tbaa !5
  %574 = load i32, ptr %14, align 4, !tbaa !11
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds i32, ptr %573, i64 %575
  %577 = load i32, ptr %576, align 4, !tbaa !11
  %578 = icmp eq i32 %577, 2
  br i1 %578, label %579, label %595

579:                                              ; preds = %567
  %580 = load ptr, ptr %24, align 8, !tbaa !5
  %581 = load i32, ptr %37, align 4, !tbaa !11
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds i32, ptr %580, i64 %582
  %584 = load i32, ptr %583, align 4, !tbaa !11
  %585 = load ptr, ptr %36, align 8, !tbaa !5
  %586 = load i32, ptr %14, align 4, !tbaa !11
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds %struct.nrinfo_t, ptr %585, i64 %587
  %589 = getelementptr inbounds %struct.nrinfo_t, ptr %588, i32 0, i32 0
  %590 = load i32, ptr %44, align 4, !tbaa !11
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds [2 x i32], ptr %589, i64 0, i64 %591
  %593 = load i32, ptr %592, align 4, !tbaa !11
  %594 = add nsw i32 %593, %584
  store i32 %594, ptr %592, align 4, !tbaa !11
  br label %832

595:                                              ; preds = %567
  %596 = load ptr, ptr %26, align 8, !tbaa !5
  %597 = load i32, ptr %14, align 4, !tbaa !11
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i32, ptr %596, i64 %598
  %600 = load i32, ptr %599, align 4, !tbaa !11
  %601 = load i32, ptr %43, align 4, !tbaa !11
  %602 = icmp eq i32 %600, %601
  br i1 %602, label %603, label %831

603:                                              ; preds = %595
  %604 = load ptr, ptr %30, align 8, !tbaa !5
  %605 = load i32, ptr %14, align 4, !tbaa !11
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds i32, ptr %604, i64 %606
  %608 = load i32, ptr %607, align 4, !tbaa !11
  %609 = icmp eq i32 %608, -1
  br i1 %609, label %634, label %610

610:                                              ; preds = %603
  %611 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 365, ptr noundef @.str.4)
  %612 = load i32, ptr %14, align 4, !tbaa !11
  %613 = load ptr, ptr %30, align 8, !tbaa !5
  %614 = load i32, ptr %14, align 4, !tbaa !11
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds i32, ptr %613, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !11
  %618 = load ptr, ptr %26, align 8, !tbaa !5
  %619 = load i32, ptr %14, align 4, !tbaa !11
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds i32, ptr %618, i64 %620
  %622 = load i32, ptr %621, align 4, !tbaa !11
  %623 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef %612, i32 noundef %617, i32 noundef %622)
  %624 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  %625 = load ptr, ptr %30, align 8, !tbaa !5
  %626 = load i32, ptr %14, align 4, !tbaa !11
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds i32, ptr %625, i64 %627
  %629 = load i32, ptr %628, align 4, !tbaa !11
  %630 = icmp eq i32 %629, -1
  br i1 %630, label %631, label %632

631:                                              ; preds = %610
  br label %633

632:                                              ; preds = %610
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.4, i32 noundef 365, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

633:                                              ; preds = %631
  br label %634

634:                                              ; preds = %633, %603
  br label %635

635:                                              ; preds = %634
  %636 = load ptr, ptr %30, align 8, !tbaa !5
  %637 = load i32, ptr %14, align 4, !tbaa !11
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %636, i64 %638
  %640 = load i32, ptr %639, align 4, !tbaa !11
  %641 = icmp eq i32 %640, -1
  br i1 %641, label %653, label %642

642:                                              ; preds = %635
  %643 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 366, ptr noundef @.str.4)
  %644 = load ptr, ptr %30, align 8, !tbaa !5
  %645 = load i32, ptr %14, align 4, !tbaa !11
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %644, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !11
  %649 = icmp eq i32 %648, -1
  br i1 %649, label %650, label %651

650:                                              ; preds = %642
  br label %652

651:                                              ; preds = %642
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.4, i32 noundef 366, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

652:                                              ; preds = %650
  br label %653

653:                                              ; preds = %652, %635
  %654 = load i32, ptr %14, align 4, !tbaa !11
  %655 = load ptr, ptr %29, align 8, !tbaa !5
  %656 = load i32, ptr %18, align 4, !tbaa !11
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds i32, ptr %655, i64 %657
  store i32 %654, ptr %658, align 4, !tbaa !11
  %659 = load i32, ptr %18, align 4, !tbaa !11
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %18, align 4, !tbaa !11
  %661 = load ptr, ptr %30, align 8, !tbaa !5
  %662 = load i32, ptr %14, align 4, !tbaa !11
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds i32, ptr %661, i64 %663
  store i32 %659, ptr %664, align 4, !tbaa !11
  br label %665

665:                                              ; preds = %653
  br label %666

666:                                              ; preds = %665
  %667 = load i32, ptr %14, align 4, !tbaa !11
  %668 = load ptr, ptr %32, align 8, !tbaa !5
  %669 = load i32, ptr %20, align 4, !tbaa !11
  %670 = add nsw i32 %669, 1
  store i32 %670, ptr %20, align 4, !tbaa !11
  %671 = sext i32 %669 to i64
  %672 = getelementptr inbounds i32, ptr %668, i64 %671
  store i32 %667, ptr %672, align 4, !tbaa !11
  %673 = load ptr, ptr %26, align 8, !tbaa !5
  %674 = load i32, ptr %14, align 4, !tbaa !11
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i32, ptr %673, i64 %675
  store i32 2, ptr %676, align 4, !tbaa !11
  %677 = load ptr, ptr %24, align 8, !tbaa !5
  %678 = load i32, ptr %14, align 4, !tbaa !11
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds i32, ptr %677, i64 %679
  %681 = load i32, ptr %680, align 4, !tbaa !11
  %682 = load ptr, ptr %27, align 8, !tbaa !5
  %683 = load i32, ptr %43, align 4, !tbaa !11
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds i32, ptr %682, i64 %684
  %686 = load i32, ptr %685, align 4, !tbaa !11
  %687 = sub nsw i32 %686, %681
  store i32 %687, ptr %685, align 4, !tbaa !11
  %688 = load ptr, ptr %36, align 8, !tbaa !5
  %689 = load i32, ptr %14, align 4, !tbaa !11
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds %struct.nrinfo_t, ptr %688, i64 %690
  %692 = getelementptr inbounds %struct.nrinfo_t, ptr %691, i32 0, i32 0
  %693 = getelementptr inbounds [2 x i32], ptr %692, i64 0, i64 0
  store ptr %693, ptr %28, align 8, !tbaa !5
  %694 = load ptr, ptr %28, align 8, !tbaa !5
  %695 = getelementptr inbounds i32, ptr %694, i64 1
  store i32 0, ptr %695, align 4, !tbaa !11
  %696 = load ptr, ptr %28, align 8, !tbaa !5
  %697 = getelementptr inbounds i32, ptr %696, i64 0
  store i32 0, ptr %697, align 4, !tbaa !11
  %698 = load ptr, ptr %23, align 8, !tbaa !5
  %699 = load i32, ptr %14, align 4, !tbaa !11
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds i32, ptr %698, i64 %700
  %702 = load i32, ptr %701, align 4, !tbaa !11
  store i32 %702, ptr %15, align 4, !tbaa !11
  br label %703

703:                                              ; preds = %791, %666
  %704 = load i32, ptr %15, align 4, !tbaa !11
  %705 = load ptr, ptr %23, align 8, !tbaa !5
  %706 = load i32, ptr %14, align 4, !tbaa !11
  %707 = add nsw i32 %706, 1
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds i32, ptr %705, i64 %708
  %710 = load i32, ptr %709, align 4, !tbaa !11
  %711 = icmp slt i32 %704, %710
  br i1 %711, label %712, label %794

712:                                              ; preds = %703
  %713 = load ptr, ptr %25, align 8, !tbaa !5
  %714 = load i32, ptr %15, align 4, !tbaa !11
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds i32, ptr %713, i64 %715
  %717 = load i32, ptr %716, align 4, !tbaa !11
  store i32 %717, ptr %16, align 4, !tbaa !11
  %718 = load ptr, ptr %26, align 8, !tbaa !5
  %719 = load i32, ptr %16, align 4, !tbaa !11
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds i32, ptr %718, i64 %720
  %722 = load i32, ptr %721, align 4, !tbaa !11
  %723 = icmp ne i32 %722, 2
  br i1 %723, label %724, label %740

724:                                              ; preds = %712
  %725 = load ptr, ptr %24, align 8, !tbaa !5
  %726 = load i32, ptr %16, align 4, !tbaa !11
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds i32, ptr %725, i64 %727
  %729 = load i32, ptr %728, align 4, !tbaa !11
  %730 = load ptr, ptr %28, align 8, !tbaa !5
  %731 = load ptr, ptr %26, align 8, !tbaa !5
  %732 = load i32, ptr %16, align 4, !tbaa !11
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %731, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !11
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds i32, ptr %730, i64 %736
  %738 = load i32, ptr %737, align 4, !tbaa !11
  %739 = add nsw i32 %738, %729
  store i32 %739, ptr %737, align 4, !tbaa !11
  br label %790

740:                                              ; preds = %712
  %741 = load ptr, ptr %24, align 8, !tbaa !5
  %742 = load i32, ptr %16, align 4, !tbaa !11
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds i32, ptr %741, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !11
  %746 = load ptr, ptr %36, align 8, !tbaa !5
  %747 = load i32, ptr %16, align 4, !tbaa !11
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds %struct.nrinfo_t, ptr %746, i64 %748
  %750 = getelementptr inbounds %struct.nrinfo_t, ptr %749, i32 0, i32 0
  %751 = load i32, ptr %43, align 4, !tbaa !11
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds [2 x i32], ptr %750, i64 0, i64 %752
  %754 = load i32, ptr %753, align 4, !tbaa !11
  %755 = sub nsw i32 %745, %754
  store i32 %755, ptr %38, align 4, !tbaa !11
  %756 = load ptr, ptr %24, align 8, !tbaa !5
  %757 = load i32, ptr %14, align 4, !tbaa !11
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds i32, ptr %756, i64 %758
  %760 = load i32, ptr %759, align 4, !tbaa !11
  %761 = load ptr, ptr %36, align 8, !tbaa !5
  %762 = load i32, ptr %16, align 4, !tbaa !11
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds %struct.nrinfo_t, ptr %761, i64 %763
  %765 = getelementptr inbounds %struct.nrinfo_t, ptr %764, i32 0, i32 0
  %766 = load i32, ptr %43, align 4, !tbaa !11
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds [2 x i32], ptr %765, i64 0, i64 %767
  %769 = load i32, ptr %768, align 4, !tbaa !11
  %770 = sub nsw i32 %769, %760
  store i32 %770, ptr %768, align 4, !tbaa !11
  %771 = load ptr, ptr %34, align 8, !tbaa !5
  %772 = load i32, ptr %16, align 4, !tbaa !11
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i32, ptr %771, i64 %773
  %775 = load i32, ptr %774, align 4, !tbaa !11
  %776 = load i32, ptr %42, align 4, !tbaa !11
  %777 = icmp eq i32 %775, %776
  br i1 %777, label %778, label %789

778:                                              ; preds = %740
  %779 = load ptr, ptr %35, align 8, !tbaa !5
  %780 = load i32, ptr %16, align 4, !tbaa !11
  %781 = load i32, ptr %38, align 4, !tbaa !11
  %782 = load ptr, ptr %24, align 8, !tbaa !5
  %783 = load i32, ptr %14, align 4, !tbaa !11
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds i32, ptr %782, i64 %784
  %786 = load i32, ptr %785, align 4, !tbaa !11
  %787 = add nsw i32 %781, %786
  %788 = sitofp i32 %787 to float
  call void @libmetis__rpqUpdate(ptr noundef %779, i32 noundef %780, float noundef %788)
  br label %789

789:                                              ; preds = %778, %740
  br label %790

790:                                              ; preds = %789, %724
  br label %791

791:                                              ; preds = %790
  %792 = load i32, ptr %15, align 4, !tbaa !11
  %793 = add nsw i32 %792, 1
  store i32 %793, ptr %15, align 4, !tbaa !11
  br label %703, !llvm.loop !31

794:                                              ; preds = %703
  %795 = load ptr, ptr %8, align 8, !tbaa !5
  %796 = load i32, ptr %14, align 4, !tbaa !11
  %797 = sext i32 %796 to i64
  %798 = getelementptr inbounds i32, ptr %795, i64 %797
  %799 = load i32, ptr %798, align 4, !tbaa !11
  %800 = icmp eq i32 %799, -1
  br i1 %800, label %809, label %801

801:                                              ; preds = %794
  %802 = load ptr, ptr %8, align 8, !tbaa !5
  %803 = load i32, ptr %14, align 4, !tbaa !11
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds i32, ptr %802, i64 %804
  %806 = load i32, ptr %805, align 4, !tbaa !11
  %807 = load i32, ptr %44, align 4, !tbaa !11
  %808 = icmp eq i32 %806, %807
  br i1 %808, label %809, label %830

809:                                              ; preds = %801, %794
  %810 = load ptr, ptr %35, align 8, !tbaa !5
  %811 = load i32, ptr %14, align 4, !tbaa !11
  %812 = load ptr, ptr %24, align 8, !tbaa !5
  %813 = load i32, ptr %14, align 4, !tbaa !11
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %812, i64 %814
  %816 = load i32, ptr %815, align 4, !tbaa !11
  %817 = load ptr, ptr %28, align 8, !tbaa !5
  %818 = load i32, ptr %43, align 4, !tbaa !11
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds i32, ptr %817, i64 %819
  %821 = load i32, ptr %820, align 4, !tbaa !11
  %822 = sub nsw i32 %816, %821
  %823 = sitofp i32 %822 to float
  %824 = call i32 @libmetis__rpqInsert(ptr noundef %810, i32 noundef %811, float noundef %823)
  %825 = load i32, ptr %42, align 4, !tbaa !11
  %826 = load ptr, ptr %34, align 8, !tbaa !5
  %827 = load i32, ptr %14, align 4, !tbaa !11
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i32, ptr %826, i64 %828
  store i32 %825, ptr %829, align 4, !tbaa !11
  br label %830

830:                                              ; preds = %809, %801
  br label %831

831:                                              ; preds = %830, %595
  br label %832

832:                                              ; preds = %831, %579
  br label %833

833:                                              ; preds = %832
  %834 = load i32, ptr %13, align 4, !tbaa !11
  %835 = add nsw i32 %834, 1
  store i32 %835, ptr %13, align 4, !tbaa !11
  br label %558, !llvm.loop !32

836:                                              ; preds = %558
  %837 = load i32, ptr %20, align 4, !tbaa !11
  %838 = load ptr, ptr %31, align 8, !tbaa !5
  %839 = load i32, ptr %19, align 4, !tbaa !11
  %840 = add nsw i32 %839, 1
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds i32, ptr %838, i64 %841
  store i32 %837, ptr %842, align 4, !tbaa !11
  %843 = load ptr, ptr %6, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.ctrl_t, ptr %843, i32 0, i32 2
  %845 = load i32, ptr %844, align 8, !tbaa !24
  %846 = and i32 %845, 32
  %847 = icmp ne i32 %846, 0
  br i1 %847, label %848, label %883

848:                                              ; preds = %836
  %849 = load i32, ptr %37, align 4, !tbaa !11
  %850 = load i32, ptr %44, align 4, !tbaa !11
  %851 = load ptr, ptr %24, align 8, !tbaa !5
  %852 = load i32, ptr %37, align 4, !tbaa !11
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !11
  %856 = load ptr, ptr %36, align 8, !tbaa !5
  %857 = load i32, ptr %37, align 4, !tbaa !11
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds %struct.nrinfo_t, ptr %856, i64 %858
  %860 = getelementptr inbounds %struct.nrinfo_t, ptr %859, i32 0, i32 0
  %861 = load i32, ptr %43, align 4, !tbaa !11
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds [2 x i32], ptr %860, i64 0, i64 %862
  %864 = load i32, ptr %863, align 4, !tbaa !11
  %865 = sub nsw i32 %855, %864
  %866 = load ptr, ptr %24, align 8, !tbaa !5
  %867 = load i32, ptr %37, align 4, !tbaa !11
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds i32, ptr %866, i64 %868
  %870 = load i32, ptr %869, align 4, !tbaa !11
  %871 = load ptr, ptr %27, align 8, !tbaa !5
  %872 = getelementptr inbounds i32, ptr %871, i64 0
  %873 = load i32, ptr %872, align 4, !tbaa !11
  %874 = load ptr, ptr %27, align 8, !tbaa !5
  %875 = getelementptr inbounds i32, ptr %874, i64 1
  %876 = load i32, ptr %875, align 4, !tbaa !11
  %877 = load ptr, ptr %27, align 8, !tbaa !5
  %878 = getelementptr inbounds i32, ptr %877, i64 2
  %879 = load i32, ptr %878, align 4, !tbaa !11
  %880 = load i32, ptr %19, align 4, !tbaa !11
  %881 = load i32, ptr %45, align 4, !tbaa !11
  %882 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef %849, i32 noundef %850, i32 noundef %865, i32 noundef %870, i32 noundef %873, i32 noundef %876, i32 noundef %879, i32 noundef %880, i32 noundef %881)
  br label %883

883:                                              ; preds = %848, %836
  br label %884

884:                                              ; preds = %883, %381
  %885 = load i32, ptr %19, align 4, !tbaa !11
  %886 = add nsw i32 %885, 1
  store i32 %886, ptr %19, align 4, !tbaa !11
  br label %310, !llvm.loop !33

887:                                              ; preds = %458, %380, %356, %318, %310
  %888 = load i32, ptr %19, align 4, !tbaa !11
  %889 = add nsw i32 %888, -1
  store i32 %889, ptr %19, align 4, !tbaa !11
  br label %890

890:                                              ; preds = %1233, %887
  %891 = load i32, ptr %19, align 4, !tbaa !11
  %892 = load i32, ptr %41, align 4, !tbaa !11
  %893 = icmp sgt i32 %891, %892
  br i1 %893, label %894, label %1236

894:                                              ; preds = %890
  %895 = load ptr, ptr %33, align 8, !tbaa !5
  %896 = load i32, ptr %19, align 4, !tbaa !11
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds i32, ptr %895, i64 %897
  %899 = load i32, ptr %898, align 4, !tbaa !11
  store i32 %899, ptr %37, align 4, !tbaa !11
  %900 = load ptr, ptr %7, align 8, !tbaa !5
  %901 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %900)
  %902 = icmp ne i32 %901, 0
  br i1 %902, label %911, label %903

903:                                              ; preds = %894
  %904 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef 412, ptr noundef @.str.4)
  %905 = load ptr, ptr %7, align 8, !tbaa !5
  %906 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %905)
  %907 = icmp ne i32 %906, 0
  br i1 %907, label %908, label %909

908:                                              ; preds = %903
  br label %910

909:                                              ; preds = %903
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 412, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

910:                                              ; preds = %908
  br label %911

911:                                              ; preds = %910, %894
  %912 = load ptr, ptr %26, align 8, !tbaa !5
  %913 = load i32, ptr %37, align 4, !tbaa !11
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds i32, ptr %912, i64 %914
  %916 = load i32, ptr %915, align 4, !tbaa !11
  %917 = load i32, ptr %44, align 4, !tbaa !11
  %918 = icmp eq i32 %916, %917
  br i1 %918, label %931, label %919

919:                                              ; preds = %911
  %920 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef 413, ptr noundef @.str.4)
  %921 = load ptr, ptr %26, align 8, !tbaa !5
  %922 = load i32, ptr %37, align 4, !tbaa !11
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds i32, ptr %921, i64 %923
  %925 = load i32, ptr %924, align 4, !tbaa !11
  %926 = load i32, ptr %44, align 4, !tbaa !11
  %927 = icmp eq i32 %925, %926
  br i1 %927, label %928, label %929

928:                                              ; preds = %919
  br label %930

929:                                              ; preds = %919
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.4, i32 noundef 413, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

930:                                              ; preds = %928
  br label %931

931:                                              ; preds = %930, %911
  br label %932

932:                                              ; preds = %931
  %933 = load ptr, ptr %24, align 8, !tbaa !5
  %934 = load i32, ptr %37, align 4, !tbaa !11
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds i32, ptr %933, i64 %935
  %937 = load i32, ptr %936, align 4, !tbaa !11
  %938 = load ptr, ptr %27, align 8, !tbaa !5
  %939 = getelementptr inbounds i32, ptr %938, i64 2
  %940 = load i32, ptr %939, align 4, !tbaa !11
  %941 = add nsw i32 %940, %937
  store i32 %941, ptr %939, align 4, !tbaa !11
  %942 = load ptr, ptr %24, align 8, !tbaa !5
  %943 = load i32, ptr %37, align 4, !tbaa !11
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i32, ptr %942, i64 %944
  %946 = load i32, ptr %945, align 4, !tbaa !11
  %947 = load ptr, ptr %27, align 8, !tbaa !5
  %948 = load i32, ptr %44, align 4, !tbaa !11
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds i32, ptr %947, i64 %949
  %951 = load i32, ptr %950, align 4, !tbaa !11
  %952 = sub nsw i32 %951, %946
  store i32 %952, ptr %950, align 4, !tbaa !11
  br label %953

953:                                              ; preds = %932
  br label %954

954:                                              ; preds = %953
  %955 = load ptr, ptr %26, align 8, !tbaa !5
  %956 = load i32, ptr %37, align 4, !tbaa !11
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds i32, ptr %955, i64 %957
  store i32 2, ptr %958, align 4, !tbaa !11
  br label %959

959:                                              ; preds = %954
  %960 = load ptr, ptr %30, align 8, !tbaa !5
  %961 = load i32, ptr %37, align 4, !tbaa !11
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds i32, ptr %960, i64 %962
  %964 = load i32, ptr %963, align 4, !tbaa !11
  %965 = icmp eq i32 %964, -1
  br i1 %965, label %977, label %966

966:                                              ; preds = %959
  %967 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, i32 noundef 417, ptr noundef @.str.4)
  %968 = load ptr, ptr %30, align 8, !tbaa !5
  %969 = load i32, ptr %37, align 4, !tbaa !11
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds i32, ptr %968, i64 %970
  %972 = load i32, ptr %971, align 4, !tbaa !11
  %973 = icmp eq i32 %972, -1
  br i1 %973, label %974, label %975

974:                                              ; preds = %966
  br label %976

975:                                              ; preds = %966
  call void @__assert_fail(ptr noundef @.str.23, ptr noundef @.str.4, i32 noundef 417, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

976:                                              ; preds = %974
  br label %977

977:                                              ; preds = %976, %959
  %978 = load i32, ptr %37, align 4, !tbaa !11
  %979 = load ptr, ptr %29, align 8, !tbaa !5
  %980 = load i32, ptr %18, align 4, !tbaa !11
  %981 = sext i32 %980 to i64
  %982 = getelementptr inbounds i32, ptr %979, i64 %981
  store i32 %978, ptr %982, align 4, !tbaa !11
  %983 = load i32, ptr %18, align 4, !tbaa !11
  %984 = add nsw i32 %983, 1
  store i32 %984, ptr %18, align 4, !tbaa !11
  %985 = load ptr, ptr %30, align 8, !tbaa !5
  %986 = load i32, ptr %37, align 4, !tbaa !11
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds i32, ptr %985, i64 %987
  store i32 %983, ptr %988, align 4, !tbaa !11
  br label %989

989:                                              ; preds = %977
  br label %990

990:                                              ; preds = %989
  %991 = load ptr, ptr %36, align 8, !tbaa !5
  %992 = load i32, ptr %37, align 4, !tbaa !11
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds %struct.nrinfo_t, ptr %991, i64 %993
  %995 = getelementptr inbounds %struct.nrinfo_t, ptr %994, i32 0, i32 0
  %996 = getelementptr inbounds [2 x i32], ptr %995, i64 0, i64 0
  store ptr %996, ptr %28, align 8, !tbaa !5
  %997 = load ptr, ptr %28, align 8, !tbaa !5
  %998 = getelementptr inbounds i32, ptr %997, i64 1
  store i32 0, ptr %998, align 4, !tbaa !11
  %999 = load ptr, ptr %28, align 8, !tbaa !5
  %1000 = getelementptr inbounds i32, ptr %999, i64 0
  store i32 0, ptr %1000, align 4, !tbaa !11
  %1001 = load ptr, ptr %23, align 8, !tbaa !5
  %1002 = load i32, ptr %37, align 4, !tbaa !11
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds i32, ptr %1001, i64 %1003
  %1005 = load i32, ptr %1004, align 4, !tbaa !11
  store i32 %1005, ptr %13, align 4, !tbaa !11
  br label %1006

1006:                                             ; preds = %1060, %990
  %1007 = load i32, ptr %13, align 4, !tbaa !11
  %1008 = load ptr, ptr %23, align 8, !tbaa !5
  %1009 = load i32, ptr %37, align 4, !tbaa !11
  %1010 = add nsw i32 %1009, 1
  %1011 = sext i32 %1010 to i64
  %1012 = getelementptr inbounds i32, ptr %1008, i64 %1011
  %1013 = load i32, ptr %1012, align 4, !tbaa !11
  %1014 = icmp slt i32 %1007, %1013
  br i1 %1014, label %1015, label %1063

1015:                                             ; preds = %1006
  %1016 = load ptr, ptr %25, align 8, !tbaa !5
  %1017 = load i32, ptr %13, align 4, !tbaa !11
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds i32, ptr %1016, i64 %1018
  %1020 = load i32, ptr %1019, align 4, !tbaa !11
  store i32 %1020, ptr %14, align 4, !tbaa !11
  %1021 = load ptr, ptr %26, align 8, !tbaa !5
  %1022 = load i32, ptr %14, align 4, !tbaa !11
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds i32, ptr %1021, i64 %1023
  %1025 = load i32, ptr %1024, align 4, !tbaa !11
  %1026 = icmp eq i32 %1025, 2
  br i1 %1026, label %1027, label %1043

1027:                                             ; preds = %1015
  %1028 = load ptr, ptr %24, align 8, !tbaa !5
  %1029 = load i32, ptr %37, align 4, !tbaa !11
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds i32, ptr %1028, i64 %1030
  %1032 = load i32, ptr %1031, align 4, !tbaa !11
  %1033 = load ptr, ptr %36, align 8, !tbaa !5
  %1034 = load i32, ptr %14, align 4, !tbaa !11
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds %struct.nrinfo_t, ptr %1033, i64 %1035
  %1037 = getelementptr inbounds %struct.nrinfo_t, ptr %1036, i32 0, i32 0
  %1038 = load i32, ptr %44, align 4, !tbaa !11
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds [2 x i32], ptr %1037, i64 0, i64 %1039
  %1041 = load i32, ptr %1040, align 4, !tbaa !11
  %1042 = sub nsw i32 %1041, %1032
  store i32 %1042, ptr %1040, align 4, !tbaa !11
  br label %1059

1043:                                             ; preds = %1015
  %1044 = load ptr, ptr %24, align 8, !tbaa !5
  %1045 = load i32, ptr %14, align 4, !tbaa !11
  %1046 = sext i32 %1045 to i64
  %1047 = getelementptr inbounds i32, ptr %1044, i64 %1046
  %1048 = load i32, ptr %1047, align 4, !tbaa !11
  %1049 = load ptr, ptr %28, align 8, !tbaa !5
  %1050 = load ptr, ptr %26, align 8, !tbaa !5
  %1051 = load i32, ptr %14, align 4, !tbaa !11
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds i32, ptr %1050, i64 %1052
  %1054 = load i32, ptr %1053, align 4, !tbaa !11
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds i32, ptr %1049, i64 %1055
  %1057 = load i32, ptr %1056, align 4, !tbaa !11
  %1058 = add nsw i32 %1057, %1048
  store i32 %1058, ptr %1056, align 4, !tbaa !11
  br label %1059

1059:                                             ; preds = %1043, %1027
  br label %1060

1060:                                             ; preds = %1059
  %1061 = load i32, ptr %13, align 4, !tbaa !11
  %1062 = add nsw i32 %1061, 1
  store i32 %1062, ptr %13, align 4, !tbaa !11
  br label %1006, !llvm.loop !34

1063:                                             ; preds = %1006
  %1064 = load ptr, ptr %31, align 8, !tbaa !5
  %1065 = load i32, ptr %19, align 4, !tbaa !11
  %1066 = sext i32 %1065 to i64
  %1067 = getelementptr inbounds i32, ptr %1064, i64 %1066
  %1068 = load i32, ptr %1067, align 4, !tbaa !11
  store i32 %1068, ptr %13, align 4, !tbaa !11
  br label %1069

1069:                                             ; preds = %1229, %1063
  %1070 = load i32, ptr %13, align 4, !tbaa !11
  %1071 = load ptr, ptr %31, align 8, !tbaa !5
  %1072 = load i32, ptr %19, align 4, !tbaa !11
  %1073 = add nsw i32 %1072, 1
  %1074 = sext i32 %1073 to i64
  %1075 = getelementptr inbounds i32, ptr %1071, i64 %1074
  %1076 = load i32, ptr %1075, align 4, !tbaa !11
  %1077 = icmp slt i32 %1070, %1076
  br i1 %1077, label %1078, label %1232

1078:                                             ; preds = %1069
  %1079 = load ptr, ptr %32, align 8, !tbaa !5
  %1080 = load i32, ptr %13, align 4, !tbaa !11
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds i32, ptr %1079, i64 %1081
  %1083 = load i32, ptr %1082, align 4, !tbaa !11
  store i32 %1083, ptr %14, align 4, !tbaa !11
  %1084 = load ptr, ptr %26, align 8, !tbaa !5
  %1085 = load i32, ptr %14, align 4, !tbaa !11
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds i32, ptr %1084, i64 %1086
  %1088 = load i32, ptr %1087, align 4, !tbaa !11
  %1089 = icmp eq i32 %1088, 2
  br i1 %1089, label %1101, label %1090

1090:                                             ; preds = %1078
  %1091 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, i32 noundef 432, ptr noundef @.str.4)
  %1092 = load ptr, ptr %26, align 8, !tbaa !5
  %1093 = load i32, ptr %14, align 4, !tbaa !11
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds i32, ptr %1092, i64 %1094
  %1096 = load i32, ptr %1095, align 4, !tbaa !11
  %1097 = icmp eq i32 %1096, 2
  br i1 %1097, label %1098, label %1099

1098:                                             ; preds = %1090
  br label %1100

1099:                                             ; preds = %1090
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.4, i32 noundef 432, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

1100:                                             ; preds = %1098
  br label %1101

1101:                                             ; preds = %1100, %1078
  %1102 = load i32, ptr %43, align 4, !tbaa !11
  %1103 = load ptr, ptr %26, align 8, !tbaa !5
  %1104 = load i32, ptr %14, align 4, !tbaa !11
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds i32, ptr %1103, i64 %1105
  store i32 %1102, ptr %1106, align 4, !tbaa !11
  br label %1107

1107:                                             ; preds = %1101
  %1108 = load ptr, ptr %24, align 8, !tbaa !5
  %1109 = load i32, ptr %14, align 4, !tbaa !11
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds i32, ptr %1108, i64 %1110
  %1112 = load i32, ptr %1111, align 4, !tbaa !11
  %1113 = load ptr, ptr %27, align 8, !tbaa !5
  %1114 = load i32, ptr %43, align 4, !tbaa !11
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds i32, ptr %1113, i64 %1115
  %1117 = load i32, ptr %1116, align 4, !tbaa !11
  %1118 = add nsw i32 %1117, %1112
  store i32 %1118, ptr %1116, align 4, !tbaa !11
  %1119 = load ptr, ptr %24, align 8, !tbaa !5
  %1120 = load i32, ptr %14, align 4, !tbaa !11
  %1121 = sext i32 %1120 to i64
  %1122 = getelementptr inbounds i32, ptr %1119, i64 %1121
  %1123 = load i32, ptr %1122, align 4, !tbaa !11
  %1124 = load ptr, ptr %27, align 8, !tbaa !5
  %1125 = getelementptr inbounds i32, ptr %1124, i64 2
  %1126 = load i32, ptr %1125, align 4, !tbaa !11
  %1127 = sub nsw i32 %1126, %1123
  store i32 %1127, ptr %1125, align 4, !tbaa !11
  br label %1128

1128:                                             ; preds = %1107
  br label %1129

1129:                                             ; preds = %1128
  br label %1130

1130:                                             ; preds = %1129
  %1131 = load ptr, ptr %30, align 8, !tbaa !5
  %1132 = load i32, ptr %14, align 4, !tbaa !11
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds i32, ptr %1131, i64 %1133
  %1135 = load i32, ptr %1134, align 4, !tbaa !11
  %1136 = icmp ne i32 %1135, -1
  br i1 %1136, label %1148, label %1137

1137:                                             ; preds = %1130
  %1138 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, i32 noundef 435, ptr noundef @.str.4)
  %1139 = load ptr, ptr %30, align 8, !tbaa !5
  %1140 = load i32, ptr %14, align 4, !tbaa !11
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds i32, ptr %1139, i64 %1141
  %1143 = load i32, ptr %1142, align 4, !tbaa !11
  %1144 = icmp ne i32 %1143, -1
  br i1 %1144, label %1145, label %1146

1145:                                             ; preds = %1137
  br label %1147

1146:                                             ; preds = %1137
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.4, i32 noundef 435, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

1147:                                             ; preds = %1145
  br label %1148

1148:                                             ; preds = %1147, %1130
  %1149 = load ptr, ptr %29, align 8, !tbaa !5
  %1150 = load i32, ptr %18, align 4, !tbaa !11
  %1151 = add nsw i32 %1150, -1
  store i32 %1151, ptr %18, align 4, !tbaa !11
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr inbounds i32, ptr %1149, i64 %1152
  %1154 = load i32, ptr %1153, align 4, !tbaa !11
  %1155 = load ptr, ptr %29, align 8, !tbaa !5
  %1156 = load ptr, ptr %30, align 8, !tbaa !5
  %1157 = load i32, ptr %14, align 4, !tbaa !11
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds i32, ptr %1156, i64 %1158
  %1160 = load i32, ptr %1159, align 4, !tbaa !11
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr inbounds i32, ptr %1155, i64 %1161
  store i32 %1154, ptr %1162, align 4, !tbaa !11
  %1163 = load ptr, ptr %30, align 8, !tbaa !5
  %1164 = load i32, ptr %14, align 4, !tbaa !11
  %1165 = sext i32 %1164 to i64
  %1166 = getelementptr inbounds i32, ptr %1163, i64 %1165
  %1167 = load i32, ptr %1166, align 4, !tbaa !11
  %1168 = load ptr, ptr %30, align 8, !tbaa !5
  %1169 = load ptr, ptr %29, align 8, !tbaa !5
  %1170 = load i32, ptr %18, align 4, !tbaa !11
  %1171 = sext i32 %1170 to i64
  %1172 = getelementptr inbounds i32, ptr %1169, i64 %1171
  %1173 = load i32, ptr %1172, align 4, !tbaa !11
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds i32, ptr %1168, i64 %1174
  store i32 %1167, ptr %1175, align 4, !tbaa !11
  %1176 = load ptr, ptr %30, align 8, !tbaa !5
  %1177 = load i32, ptr %14, align 4, !tbaa !11
  %1178 = sext i32 %1177 to i64
  %1179 = getelementptr inbounds i32, ptr %1176, i64 %1178
  store i32 -1, ptr %1179, align 4, !tbaa !11
  br label %1180

1180:                                             ; preds = %1148
  br label %1181

1181:                                             ; preds = %1180
  %1182 = load ptr, ptr %23, align 8, !tbaa !5
  %1183 = load i32, ptr %14, align 4, !tbaa !11
  %1184 = sext i32 %1183 to i64
  %1185 = getelementptr inbounds i32, ptr %1182, i64 %1184
  %1186 = load i32, ptr %1185, align 4, !tbaa !11
  store i32 %1186, ptr %15, align 4, !tbaa !11
  br label %1187

1187:                                             ; preds = %1225, %1181
  %1188 = load i32, ptr %15, align 4, !tbaa !11
  %1189 = load ptr, ptr %23, align 8, !tbaa !5
  %1190 = load i32, ptr %14, align 4, !tbaa !11
  %1191 = add nsw i32 %1190, 1
  %1192 = sext i32 %1191 to i64
  %1193 = getelementptr inbounds i32, ptr %1189, i64 %1192
  %1194 = load i32, ptr %1193, align 4, !tbaa !11
  %1195 = icmp slt i32 %1188, %1194
  br i1 %1195, label %1196, label %1228

1196:                                             ; preds = %1187
  %1197 = load ptr, ptr %25, align 8, !tbaa !5
  %1198 = load i32, ptr %15, align 4, !tbaa !11
  %1199 = sext i32 %1198 to i64
  %1200 = getelementptr inbounds i32, ptr %1197, i64 %1199
  %1201 = load i32, ptr %1200, align 4, !tbaa !11
  store i32 %1201, ptr %16, align 4, !tbaa !11
  %1202 = load ptr, ptr %26, align 8, !tbaa !5
  %1203 = load i32, ptr %16, align 4, !tbaa !11
  %1204 = sext i32 %1203 to i64
  %1205 = getelementptr inbounds i32, ptr %1202, i64 %1204
  %1206 = load i32, ptr %1205, align 4, !tbaa !11
  %1207 = icmp eq i32 %1206, 2
  br i1 %1207, label %1208, label %1224

1208:                                             ; preds = %1196
  %1209 = load ptr, ptr %24, align 8, !tbaa !5
  %1210 = load i32, ptr %14, align 4, !tbaa !11
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds i32, ptr %1209, i64 %1211
  %1213 = load i32, ptr %1212, align 4, !tbaa !11
  %1214 = load ptr, ptr %36, align 8, !tbaa !5
  %1215 = load i32, ptr %16, align 4, !tbaa !11
  %1216 = sext i32 %1215 to i64
  %1217 = getelementptr inbounds %struct.nrinfo_t, ptr %1214, i64 %1216
  %1218 = getelementptr inbounds %struct.nrinfo_t, ptr %1217, i32 0, i32 0
  %1219 = load i32, ptr %43, align 4, !tbaa !11
  %1220 = sext i32 %1219 to i64
  %1221 = getelementptr inbounds [2 x i32], ptr %1218, i64 0, i64 %1220
  %1222 = load i32, ptr %1221, align 4, !tbaa !11
  %1223 = add nsw i32 %1222, %1213
  store i32 %1223, ptr %1221, align 4, !tbaa !11
  br label %1224

1224:                                             ; preds = %1208, %1196
  br label %1225

1225:                                             ; preds = %1224
  %1226 = load i32, ptr %15, align 4, !tbaa !11
  %1227 = add nsw i32 %1226, 1
  store i32 %1227, ptr %15, align 4, !tbaa !11
  br label %1187, !llvm.loop !35

1228:                                             ; preds = %1187
  br label %1229

1229:                                             ; preds = %1228
  %1230 = load i32, ptr %13, align 4, !tbaa !11
  %1231 = add nsw i32 %1230, 1
  store i32 %1231, ptr %13, align 4, !tbaa !11
  br label %1069, !llvm.loop !36

1232:                                             ; preds = %1069
  br label %1233

1233:                                             ; preds = %1232
  %1234 = load i32, ptr %19, align 4, !tbaa !11
  %1235 = add nsw i32 %1234, -1
  store i32 %1235, ptr %19, align 4, !tbaa !11
  br label %890, !llvm.loop !37

1236:                                             ; preds = %890
  %1237 = load i32, ptr %39, align 4, !tbaa !11
  %1238 = load ptr, ptr %27, align 8, !tbaa !5
  %1239 = getelementptr inbounds i32, ptr %1238, i64 2
  %1240 = load i32, ptr %1239, align 4, !tbaa !11
  %1241 = icmp eq i32 %1237, %1240
  br i1 %1241, label %1252, label %1242

1242:                                             ; preds = %1236
  %1243 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef 444, ptr noundef @.str.4)
  %1244 = load i32, ptr %39, align 4, !tbaa !11
  %1245 = load ptr, ptr %27, align 8, !tbaa !5
  %1246 = getelementptr inbounds i32, ptr %1245, i64 2
  %1247 = load i32, ptr %1246, align 4, !tbaa !11
  %1248 = icmp eq i32 %1244, %1247
  br i1 %1248, label %1249, label %1250

1249:                                             ; preds = %1242
  br label %1251

1250:                                             ; preds = %1242
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.4, i32 noundef 444, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #6
  unreachable

1251:                                             ; preds = %1249
  br label %1252

1252:                                             ; preds = %1251, %1236
  %1253 = load ptr, ptr %6, align 8, !tbaa !5
  %1254 = getelementptr inbounds %struct.ctrl_t, ptr %1253, i32 0, i32 2
  %1255 = load i32, ptr %1254, align 8, !tbaa !24
  %1256 = and i32 %1255, 8
  %1257 = icmp ne i32 %1256, 0
  br i1 %1257, label %1258, label %1270

1258:                                             ; preds = %1252
  %1259 = load i32, ptr %39, align 4, !tbaa !11
  %1260 = load i32, ptr %41, align 4, !tbaa !11
  %1261 = load ptr, ptr %27, align 8, !tbaa !5
  %1262 = getelementptr inbounds i32, ptr %1261, i64 0
  %1263 = load i32, ptr %1262, align 4, !tbaa !11
  %1264 = load ptr, ptr %27, align 8, !tbaa !5
  %1265 = getelementptr inbounds i32, ptr %1264, i64 1
  %1266 = load i32, ptr %1265, align 4, !tbaa !11
  %1267 = load i32, ptr %18, align 4, !tbaa !11
  %1268 = load i32, ptr %22, align 4, !tbaa !11
  %1269 = call i32 (ptr, ...) @printf(ptr noundef @.str.30, i32 noundef %1259, i32 noundef %1260, i32 noundef %1263, i32 noundef %1266, i32 noundef %1267, i32 noundef %1268)
  br label %1270

1270:                                             ; preds = %1258, %1252
  %1271 = load i32, ptr %39, align 4, !tbaa !11
  %1272 = load ptr, ptr %7, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.graph_t, ptr %1272, i32 0, i32 17
  store i32 %1271, ptr %1273, align 8, !tbaa !13
  %1274 = load i32, ptr %18, align 4, !tbaa !11
  %1275 = load ptr, ptr %7, align 8, !tbaa !5
  %1276 = getelementptr inbounds %struct.graph_t, ptr %1275, i32 0, i32 21
  store i32 %1274, ptr %1276, align 8, !tbaa !28
  %1277 = load i32, ptr %42, align 4, !tbaa !11
  %1278 = srem i32 %1277, 2
  %1279 = icmp eq i32 %1278, 1
  br i1 %1279, label %1280, label %1288

1280:                                             ; preds = %1270
  %1281 = load i32, ptr %41, align 4, !tbaa !11
  %1282 = icmp eq i32 %1281, -1
  br i1 %1282, label %1287, label %1283

1283:                                             ; preds = %1280
  %1284 = load i32, ptr %39, align 4, !tbaa !11
  %1285 = load i32, ptr %40, align 4, !tbaa !11
  %1286 = icmp sge i32 %1284, %1285
  br i1 %1286, label %1287, label %1288

1287:                                             ; preds = %1283, %1280
  br label %1292

1288:                                             ; preds = %1283, %1270
  br label %1289

1289:                                             ; preds = %1288
  %1290 = load i32, ptr %42, align 4, !tbaa !11
  %1291 = add nsw i32 %1290, 1
  store i32 %1291, ptr %42, align 4, !tbaa !11
  br label %175, !llvm.loop !38

1292:                                             ; preds = %1287, %175
  %1293 = load ptr, ptr %35, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1293)
  %1294 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1294)
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  ret void
}

declare void @libmetis__wspacepush(ptr noundef) #1

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

declare ptr @libmetis__rpqCreate(i64 noundef) #1

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

declare void @libmetis__rpqReset(ptr noundef) #1

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

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

declare i64 @libmetis__rpqLength(ptr noundef) #1

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) #1

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

declare i32 @libmetis__rpqGetTop(ptr noundef) #1

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

declare void @libmetis__rpqDestroy(ptr noundef) #1

declare void @libmetis__wspacepop(ptr noundef) #1

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


; 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.3 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [141 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP = external hidden unnamed_addr constant [85 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [67 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeRefine1SidedP(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, float noundef %3, i32 noundef %4) local_unnamed_addr #2 {
  tail call void @libmetis__wspacepush(ptr noundef %0) #6
  %6 = getelementptr inbounds i8, ptr %1, i64 112
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 128
  %9 = load ptr, ptr %8, align 8, !tbaa !11
  %10 = getelementptr inbounds i8, ptr %9, i64 8
  %11 = load i32, ptr %10, align 4, !tbaa !12
  %12 = icmp eq i32 %7, %11
  br i1 %12, label %21, label %13

13:                                               ; preds = %5
  %14 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef 251, ptr noundef nonnull @.str.4)
  %15 = load i32, ptr %6, align 8, !tbaa !5
  %16 = load ptr, ptr %8, align 8, !tbaa !11
  %17 = getelementptr inbounds i8, ptr %16, i64 8
  %18 = load i32, ptr %17, align 4, !tbaa !12
  %19 = icmp eq i32 %15, %18
  br i1 %19, label %21, label %20

20:                                               ; preds = %13
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, i32 noundef 251, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

21:                                               ; preds = %13, %5
  %22 = phi ptr [ %16, %13 ], [ %9, %5 ]
  %23 = load i32, ptr %1, align 8, !tbaa !13
  %24 = getelementptr inbounds i8, ptr %1, i64 16
  %25 = load ptr, ptr %24, align 8, !tbaa !14
  %26 = getelementptr inbounds i8, ptr %1, i64 40
  %27 = load ptr, ptr %26, align 8, !tbaa !15
  %28 = getelementptr inbounds i8, ptr %1, i64 24
  %29 = load ptr, ptr %28, align 8, !tbaa !16
  %30 = getelementptr inbounds i8, ptr %1, i64 152
  %31 = load ptr, ptr %30, align 8, !tbaa !17
  %32 = getelementptr inbounds i8, ptr %1, i64 144
  %33 = load ptr, ptr %32, align 8, !tbaa !18
  %34 = getelementptr inbounds i8, ptr %1, i64 120
  %35 = load ptr, ptr %34, align 8, !tbaa !19
  %36 = getelementptr inbounds i8, ptr %1, i64 192
  %37 = load ptr, ptr %36, align 8, !tbaa !20
  %38 = sext i32 %23 to i64
  %39 = tail call ptr @libmetis__rpqCreate(i64 noundef %38) #6
  %40 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %23) #6
  %41 = tail call ptr @libmetis__iset(i64 noundef %38, i32 noundef -1, ptr noundef %40) #6
  %42 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %23) #6
  %43 = add nsw i32 %23, 1
  %44 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %43) #6
  %45 = shl nsw i32 %23, 1
  %46 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %45) #6
  %47 = load i32, ptr %22, align 4, !tbaa !12
  %48 = getelementptr inbounds i8, ptr %22, i64 4
  %49 = load i32, ptr %48, align 4, !tbaa !12
  %. = tail call i32 @llvm.smax.i32(i32 %47, i32 %49)
  %50 = sitofp i32 %. to float
  %51 = fmul float %50, %3
  %52 = fptosi float %51 to i32
  %53 = getelementptr inbounds i8, ptr %0, i64 8
  %54 = load i32, ptr %53, align 8, !tbaa !21
  %55 = and i32 %54, 8
  %.not450 = icmp eq i32 %55, 0
  br i1 %.not450, label %62, label %56

56:                                               ; preds = %21
  %57 = load i32, ptr %1, align 8, !tbaa !13
  %58 = getelementptr inbounds i8, ptr %1, i64 136
  %59 = load i32, ptr %58, align 8, !tbaa !26
  %60 = load i32, ptr %6, align 8, !tbaa !5
  %61 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef %47, i32 noundef %49, i32 noundef %57, i32 noundef %59, i32 noundef %52, i32 noundef %60)
  br label %62

62:                                               ; preds = %56, %21
  %63 = icmp sgt i32 %4, 0
  br i1 %63, label %.lr.ph594, label %._crit_edge595

.lr.ph594:                                        ; preds = %62
  %64 = load i32, ptr %22, align 4, !tbaa !12
  %65 = load i32, ptr %48, align 4, !tbaa !12
  %66 = icmp slt i32 %64, %65
  %67 = zext i1 %66 to i32
  %68 = getelementptr inbounds i8, ptr %1, i64 136
  %invariant.gep534 = getelementptr i8, ptr %44, i64 4
  %69 = icmp sgt i32 %23, 0
  %70 = add nsw i32 %45, -1
  %71 = getelementptr inbounds i8, ptr %22, i64 8
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph594
  %.0416592 = phi i32 [ %67, %.lr.ph594 ], [ %73, %.backedge.backedge ]
  %.0419591 = phi i32 [ 0, %.lr.ph594 ], [ %.0419591.be, %.backedge.backedge ]
  %72 = and i32 %.0416592, 1
  %73 = xor i32 %72, 1
  tail call void @libmetis__rpqReset(ptr noundef %39) #6
  %74 = load i32, ptr %6, align 8, !tbaa !5
  %75 = load i32, ptr %68, align 8, !tbaa !26
  tail call void @libmetis__irandArrayPermute(i32 noundef %75, ptr noundef %42, i32 noundef %75, i32 noundef 1) #6
  %76 = icmp sgt i32 %75, 0
  br i1 %76, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.backedge
  %77 = zext nneg i32 %.0416592 to i64
  %invariant.gep = getelementptr [2 x i32], ptr %37, i64 0, i64 %77
  %wide.trip.count = zext nneg i32 %75 to i64
  br label %78

78:                                               ; preds = %.lr.ph, %106
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %106 ]
  %79 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv
  %80 = load i32, ptr %79, align 4, !tbaa !12
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds i32, ptr %31, i64 %81
  %83 = load i32, ptr %82, align 4, !tbaa !12
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds i32, ptr %35, i64 %84
  %86 = load i32, ptr %85, align 4, !tbaa !12
  %87 = icmp eq i32 %86, 2
  br i1 %87, label %93, label %88

88:                                               ; preds = %78
  %89 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef 294, ptr noundef nonnull @.str.4)
  %90 = load i32, ptr %85, align 4, !tbaa !12
  %91 = icmp eq i32 %90, 2
  br i1 %91, label %93, label %92

92:                                               ; preds = %88
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.4, i32 noundef 294, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

93:                                               ; preds = %88, %78
  %94 = getelementptr inbounds i32, ptr %2, i64 %84
  %95 = load i32, ptr %94, align 4, !tbaa !12
  %96 = icmp eq i32 %95, -1
  %97 = icmp eq i32 %95, %73
  %or.cond = select i1 %96, i1 true, i1 %97
  br i1 %or.cond, label %98, label %106

98:                                               ; preds = %93
  %99 = getelementptr inbounds i32, ptr %29, i64 %84
  %100 = load i32, ptr %99, align 4, !tbaa !12
  %gep = getelementptr %struct.nrinfo_t, ptr %invariant.gep, i64 %84
  %101 = load i32, ptr %gep, align 4, !tbaa !12
  %102 = sub nsw i32 %100, %101
  %103 = sitofp i32 %102 to float
  %104 = tail call i32 @libmetis__rpqInsert(ptr noundef %39, i32 noundef %83, float noundef %103) #6
  %105 = getelementptr inbounds i32, ptr %41, i64 %84
  store i32 %.0419591, ptr %105, align 4, !tbaa !12
  br label %106

106:                                              ; preds = %93, %98
  %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 %78, !llvm.loop !27

._crit_edge:                                      ; preds = %106, %.backedge
  %107 = tail call i64 @libmetis__rpqLength(ptr noundef %39) #6
  %108 = trunc i64 %107 to i32
  %109 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %75) #6
  %.not451 = icmp eq i32 %109, 0
  br i1 %.not451, label %110, label %114

110:                                              ; preds = %._crit_edge
  %111 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 302, ptr noundef nonnull @.str.4)
  %112 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %75) #6
  %.not452 = icmp eq i32 %112, 0
  br i1 %.not452, label %113, label %114

113:                                              ; preds = %110
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 302, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

114:                                              ; preds = %110, %._crit_edge
  %115 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not453 = icmp eq i32 %115, 0
  br i1 %.not453, label %116, label %120

116:                                              ; preds = %114
  %117 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef 303, ptr noundef nonnull @.str.4)
  %118 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not454 = icmp eq i32 %118, 0
  br i1 %.not454, label %119, label %120

119:                                              ; preds = %116
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 303, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

120:                                              ; preds = %116, %114
  store i32 0, ptr %44, align 4, !tbaa !12
  br i1 %69, label %.lr.ph544, label %.loopexit477

.lr.ph544:                                        ; preds = %120
  %121 = load i32, ptr %22, align 4, !tbaa !12
  %122 = load i32, ptr %48, align 4, !tbaa !12
  %123 = sub nsw i32 %121, %122
  %124 = tail call i32 @llvm.abs.i32(i32 %123, i1 true)
  %125 = zext nneg i32 %73 to i64
  %126 = getelementptr inbounds i32, ptr %22, i64 %125
  %127 = zext nneg i32 %.0416592 to i64
  %invariant.gep564 = getelementptr [2 x i32], ptr %37, i64 0, i64 %127
  %128 = getelementptr inbounds i32, ptr %22, i64 %127
  %invariant.gep525 = getelementptr [2 x i32], ptr %37, i64 0, i64 %125
  br label %129

129:                                              ; preds = %.lr.ph544, %304
  %.0412542 = phi i32 [ %124, %.lr.ph544 ], [ %.2, %304 ]
  %.0420541 = phi i32 [ -1, %.lr.ph544 ], [ %.2422, %304 ]
  %.0423540 = phi i32 [ %74, %.lr.ph544 ], [ %.2425, %304 ]
  %.0426539 = phi i32 [ %75, %.lr.ph544 ], [ %.3, %304 ]
  %.0429538 = phi i32 [ 0, %.lr.ph544 ], [ %305, %304 ]
  %.0432537 = phi i32 [ 0, %.lr.ph544 ], [ %.3435, %304 ]
  %.0436536 = phi i32 [ 0, %.lr.ph544 ], [ %.2438, %304 ]
  %130 = tail call i32 @libmetis__rpqGetTop(ptr noundef %39) #6
  %131 = icmp eq i32 %130, -1
  br i1 %131, label %.loopexit477, label %132

132:                                              ; preds = %129
  %133 = sext i32 %130 to i64
  %134 = getelementptr inbounds i32, ptr %33, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !12
  %.not455 = icmp eq i32 %135, -1
  br i1 %.not455, label %136, label %140

136:                                              ; preds = %132
  %137 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 316, ptr noundef nonnull @.str.4)
  %138 = load i32, ptr %134, align 4, !tbaa !12
  %.not456 = icmp eq i32 %138, -1
  br i1 %.not456, label %139, label %140

139:                                              ; preds = %136
  tail call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 316, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

140:                                              ; preds = %136, %132
  %141 = getelementptr i32, ptr %25, i64 %133
  %142 = getelementptr i8, ptr %141, i64 4
  %143 = load i32, ptr %142, align 4, !tbaa !12
  %144 = add nsw i32 %143, %.0432537
  %145 = load i32, ptr %141, align 4, !tbaa !12
  %146 = sub i32 %144, %145
  %.not457 = icmp slt i32 %146, %70
  br i1 %.not457, label %147, label %.loopexit477

147:                                              ; preds = %140
  %148 = getelementptr inbounds i32, ptr %41, i64 %133
  store i32 -1, ptr %148, align 4, !tbaa !12
  %149 = load i32, ptr %126, align 4, !tbaa !12
  %150 = getelementptr inbounds i32, ptr %29, i64 %133
  %151 = load i32, ptr %150, align 4, !tbaa !12
  %152 = add nsw i32 %151, %149
  %153 = icmp sgt i32 %152, %52
  br i1 %153, label %154, label %159

154:                                              ; preds = %147
  %155 = icmp sgt i32 %.0436536, %75
  br i1 %155, label %.loopexit477, label %156

156:                                              ; preds = %154
  %157 = add nsw i32 %.0436536, 1
  %158 = add nsw i32 %.0429538, -1
  br label %304

159:                                              ; preds = %147
  %gep565 = getelementptr %struct.nrinfo_t, ptr %invariant.gep564, i64 %133
  %160 = load i32, ptr %gep565, align 4, !tbaa !12
  %.neg = sub i32 %160, %151
  %161 = load i32, ptr %71, align 4, !tbaa !12
  %162 = add i32 %.neg, %161
  store i32 %162, ptr %71, align 4, !tbaa !12
  %163 = load i32, ptr %150, align 4, !tbaa !12
  %164 = load i32, ptr %128, align 4, !tbaa !12
  %165 = load i32, ptr %gep565, align 4, !tbaa !12
  %.neg458 = add i32 %163, %149
  %166 = sub i32 %.neg458, %164
  %167 = add i32 %166, %165
  %168 = tail call i32 @llvm.abs.i32(i32 %167, i1 true)
  %169 = icmp slt i32 %162, %.0423540
  br i1 %169, label %179, label %170

170:                                              ; preds = %159
  %171 = icmp eq i32 %162, %.0423540
  %172 = icmp slt i32 %168, %.0412542
  %or.cond470 = select i1 %171, i1 %172, i1 false
  br i1 %or.cond470, label %179, label %173

173:                                              ; preds = %170
  %174 = add nsw i32 %.0436536, 1
  %175 = icmp sgt i32 %.0436536, %75
  br i1 %175, label %176, label %179

176:                                              ; preds = %173
  %177 = add i32 %163, %162
  %178 = sub i32 %177, %165
  store i32 %178, ptr %71, align 4, !tbaa !12
  br label %.loopexit477

179:                                              ; preds = %159, %170, %173
  %.1437 = phi i32 [ %174, %173 ], [ 0, %170 ], [ 0, %159 ]
  %.1424 = phi i32 [ %.0423540, %173 ], [ %.0423540, %170 ], [ %162, %159 ]
  %.1421 = phi i32 [ %.0420541, %173 ], [ %.0429538, %170 ], [ %.0429538, %159 ]
  %.1 = phi i32 [ %.0412542, %173 ], [ %168, %170 ], [ %168, %159 ]
  %180 = load i32, ptr %134, align 4, !tbaa !12
  %.not459 = icmp eq i32 %180, -1
  br i1 %.not459, label %181, label %185

181:                                              ; preds = %179
  %182 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 350, ptr noundef nonnull @.str.4)
  %183 = load i32, ptr %134, align 4, !tbaa !12
  %.not460 = icmp eq i32 %183, -1
  br i1 %.not460, label %184, label %185

184:                                              ; preds = %181
  tail call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 350, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

185:                                              ; preds = %181, %179
  %186 = phi i32 [ %183, %181 ], [ %180, %179 ]
  %187 = add nsw i32 %.0426539, -1
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %31, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !12
  %191 = sext i32 %186 to i64
  %192 = getelementptr inbounds i32, ptr %31, i64 %191
  store i32 %190, ptr %192, align 4, !tbaa !12
  %193 = load i32, ptr %134, align 4, !tbaa !12
  %194 = sext i32 %190 to i64
  %195 = getelementptr inbounds i32, ptr %33, i64 %194
  store i32 %193, ptr %195, align 4, !tbaa !12
  store i32 -1, ptr %134, align 4, !tbaa !12
  %196 = load i32, ptr %150, align 4, !tbaa !12
  %197 = load i32, ptr %126, align 4, !tbaa !12
  %198 = add nsw i32 %197, %196
  store i32 %198, ptr %126, align 4, !tbaa !12
  %199 = getelementptr inbounds i32, ptr %35, i64 %133
  store i32 %73, ptr %199, align 4, !tbaa !12
  %200 = sext i32 %.0429538 to i64
  %201 = getelementptr inbounds i32, ptr %42, i64 %200
  store i32 %130, ptr %201, align 4, !tbaa !12
  %202 = load i32, ptr %141, align 4, !tbaa !12
  %203 = load i32, ptr %142, align 4, !tbaa !12
  %204 = icmp slt i32 %202, %203
  br i1 %204, label %.lr.ph531.preheader, label %._crit_edge532

.lr.ph531.preheader:                              ; preds = %185
  %205 = sext i32 %202 to i64
  br label %.lr.ph531

.lr.ph531:                                        ; preds = %.lr.ph531.preheader, %290
  %indvars.iv628 = phi i64 [ %205, %.lr.ph531.preheader ], [ %indvars.iv.next629, %290 ]
  %.1427528 = phi i32 [ %187, %.lr.ph531.preheader ], [ %.2428, %290 ]
  %.1433527 = phi i32 [ %.0432537, %.lr.ph531.preheader ], [ %.2434, %290 ]
  %206 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv628
  %207 = load i32, ptr %206, align 4, !tbaa !12
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i32, ptr %35, i64 %208
  %210 = load i32, ptr %209, align 4, !tbaa !12
  %211 = icmp eq i32 %210, 2
  br i1 %211, label %212, label %216

212:                                              ; preds = %.lr.ph531
  %213 = load i32, ptr %150, align 4, !tbaa !12
  %gep526 = getelementptr %struct.nrinfo_t, ptr %invariant.gep525, i64 %208
  %214 = load i32, ptr %gep526, align 4, !tbaa !12
  %215 = add nsw i32 %214, %213
  store i32 %215, ptr %gep526, align 4, !tbaa !12
  br label %290

216:                                              ; preds = %.lr.ph531
  %217 = icmp eq i32 %210, %.0416592
  br i1 %217, label %218, label %290

218:                                              ; preds = %216
  %219 = getelementptr inbounds i32, ptr %33, i64 %208
  %220 = load i32, ptr %219, align 4, !tbaa !12
  %221 = icmp eq i32 %220, -1
  br i1 %221, label %231, label %222

222:                                              ; preds = %218
  %223 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 365, ptr noundef nonnull @.str.4)
  %224 = load i32, ptr %219, align 4, !tbaa !12
  %225 = load i32, ptr %209, align 4, !tbaa !12
  %226 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %207, i32 noundef %224, i32 noundef %225)
  %227 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17)
  %228 = load i32, ptr %219, align 4, !tbaa !12
  %229 = icmp eq i32 %228, -1
  br i1 %229, label %231, label %230

230:                                              ; preds = %222
  tail call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.4, i32 noundef 365, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

231:                                              ; preds = %222, %218
  %232 = sext i32 %.1427528 to i64
  %233 = getelementptr inbounds i32, ptr %31, i64 %232
  store i32 %207, ptr %233, align 4, !tbaa !12
  %234 = add nsw i32 %.1427528, 1
  store i32 %.1427528, ptr %219, align 4, !tbaa !12
  %235 = add nsw i32 %.1433527, 1
  %236 = sext i32 %.1433527 to i64
  %237 = getelementptr inbounds i32, ptr %46, i64 %236
  store i32 %207, ptr %237, align 4, !tbaa !12
  store i32 2, ptr %209, align 4, !tbaa !12
  %238 = getelementptr inbounds i32, ptr %29, i64 %208
  %239 = load i32, ptr %238, align 4, !tbaa !12
  %240 = load i32, ptr %128, align 4, !tbaa !12
  %241 = sub nsw i32 %240, %239
  store i32 %241, ptr %128, align 4, !tbaa !12
  %242 = getelementptr inbounds %struct.nrinfo_t, ptr %37, i64 %208
  %243 = getelementptr inbounds i8, ptr %242, i64 4
  store i32 0, ptr %243, align 4, !tbaa !12
  store i32 0, ptr %242, align 4, !tbaa !12
  %244 = getelementptr inbounds i32, ptr %25, i64 %208
  %245 = load i32, ptr %244, align 4, !tbaa !12
  %246 = getelementptr i8, ptr %244, i64 4
  %247 = load i32, ptr %246, align 4, !tbaa !12
  %248 = icmp slt i32 %245, %247
  br i1 %248, label %.lr.ph523.preheader, label %._crit_edge524

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

.lr.ph523:                                        ; preds = %.lr.ph523.preheader, %274
  %indvars.iv625 = phi i64 [ %249, %.lr.ph523.preheader ], [ %indvars.iv.next626, %274 ]
  %250 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv625
  %251 = load i32, ptr %250, align 4, !tbaa !12
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %35, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !12
  %.not462 = icmp eq i32 %254, 2
  %255 = getelementptr inbounds i32, ptr %29, i64 %252
  %256 = load i32, ptr %255, align 4, !tbaa !12
  br i1 %.not462, label %262, label %257

257:                                              ; preds = %.lr.ph523
  %258 = sext i32 %254 to i64
  %259 = getelementptr inbounds i32, ptr %242, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !12
  %261 = add nsw i32 %260, %256
  store i32 %261, ptr %259, align 4, !tbaa !12
  br label %274

262:                                              ; preds = %.lr.ph523
  %gep520 = getelementptr %struct.nrinfo_t, ptr %invariant.gep564, i64 %252
  %263 = load i32, ptr %gep520, align 4, !tbaa !12
  %264 = load i32, ptr %238, align 4, !tbaa !12
  %265 = sub nsw i32 %263, %264
  store i32 %265, ptr %gep520, align 4, !tbaa !12
  %266 = getelementptr inbounds i32, ptr %41, i64 %252
  %267 = load i32, ptr %266, align 4, !tbaa !12
  %268 = icmp eq i32 %267, %.0419591
  br i1 %268, label %269, label %274

269:                                              ; preds = %262
  %270 = sub i32 %256, %263
  %271 = load i32, ptr %238, align 4, !tbaa !12
  %272 = add nsw i32 %270, %271
  %273 = sitofp i32 %272 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %39, i32 noundef %251, float noundef %273) #6
  br label %274

274:                                              ; preds = %257, %269, %262
  %indvars.iv.next626 = add nsw i64 %indvars.iv625, 1
  %275 = load i32, ptr %246, align 4, !tbaa !12
  %276 = sext i32 %275 to i64
  %277 = icmp slt i64 %indvars.iv.next626, %276
  br i1 %277, label %.lr.ph523, label %._crit_edge524, !llvm.loop !29

._crit_edge524:                                   ; preds = %274, %231
  %278 = getelementptr inbounds i32, ptr %2, i64 %208
  %279 = load i32, ptr %278, align 4, !tbaa !12
  %280 = icmp eq i32 %279, -1
  %281 = icmp eq i32 %279, %73
  %or.cond471 = select i1 %280, i1 true, i1 %281
  br i1 %or.cond471, label %282, label %290

282:                                              ; preds = %._crit_edge524
  %283 = load i32, ptr %238, align 4, !tbaa !12
  %284 = getelementptr inbounds i32, ptr %242, i64 %127
  %285 = load i32, ptr %284, align 4, !tbaa !12
  %286 = sub nsw i32 %283, %285
  %287 = sitofp i32 %286 to float
  %288 = tail call i32 @libmetis__rpqInsert(ptr noundef %39, i32 noundef %207, float noundef %287) #6
  %289 = getelementptr inbounds i32, ptr %41, i64 %208
  store i32 %.0419591, ptr %289, align 4, !tbaa !12
  br label %290

290:                                              ; preds = %._crit_edge524, %212, %282, %216
  %.2434 = phi i32 [ %.1433527, %212 ], [ %235, %282 ], [ %.1433527, %216 ], [ %235, %._crit_edge524 ]
  %.2428 = phi i32 [ %.1427528, %212 ], [ %234, %282 ], [ %.1427528, %216 ], [ %234, %._crit_edge524 ]
  %indvars.iv.next629 = add nsw i64 %indvars.iv628, 1
  %291 = load i32, ptr %142, align 4, !tbaa !12
  %292 = sext i32 %291 to i64
  %293 = icmp slt i64 %indvars.iv.next629, %292
  br i1 %293, label %.lr.ph531, label %._crit_edge532, !llvm.loop !30

._crit_edge532:                                   ; preds = %290, %185
  %.1433.lcssa = phi i32 [ %.0432537, %185 ], [ %.2434, %290 ]
  %.1427.lcssa = phi i32 [ %187, %185 ], [ %.2428, %290 ]
  %gep535 = getelementptr i32, ptr %invariant.gep534, i64 %200
  store i32 %.1433.lcssa, ptr %gep535, align 4, !tbaa !12
  %294 = load i32, ptr %53, align 8, !tbaa !21
  %295 = and i32 %294, 32
  %.not461 = icmp eq i32 %295, 0
  br i1 %.not461, label %304, label %296

296:                                              ; preds = %._crit_edge532
  %297 = load i32, ptr %150, align 4, !tbaa !12
  %298 = load i32, ptr %gep565, align 4, !tbaa !12
  %299 = sub nsw i32 %297, %298
  %300 = load i32, ptr %22, align 4, !tbaa !12
  %301 = load i32, ptr %48, align 4, !tbaa !12
  %302 = load i32, ptr %71, align 4, !tbaa !12
  %303 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef %130, i32 noundef %73, i32 noundef %299, i32 noundef %297, i32 noundef %300, i32 noundef %301, i32 noundef %302, i32 noundef %.0429538, i32 noundef %75)
  br label %304

304:                                              ; preds = %._crit_edge532, %296, %156
  %.2438 = phi i32 [ %157, %156 ], [ %.1437, %296 ], [ %.1437, %._crit_edge532 ]
  %.3435 = phi i32 [ %.0432537, %156 ], [ %.1433.lcssa, %296 ], [ %.1433.lcssa, %._crit_edge532 ]
  %.1430 = phi i32 [ %158, %156 ], [ %.0429538, %296 ], [ %.0429538, %._crit_edge532 ]
  %.3 = phi i32 [ %.0426539, %156 ], [ %.1427.lcssa, %296 ], [ %.1427.lcssa, %._crit_edge532 ]
  %.2425 = phi i32 [ %.0423540, %156 ], [ %.1424, %296 ], [ %.1424, %._crit_edge532 ]
  %.2422 = phi i32 [ %.0420541, %156 ], [ %.1421, %296 ], [ %.1421, %._crit_edge532 ]
  %.2 = phi i32 [ %.0412542, %156 ], [ %.1, %296 ], [ %.1, %._crit_edge532 ]
  %305 = add nsw i32 %.1430, 1
  %306 = icmp slt i32 %305, %23
  br i1 %306, label %129, label %.loopexit477, !llvm.loop !31

.loopexit477:                                     ; preds = %304, %129, %140, %154, %120, %176
  %.0429510 = phi i32 [ %.0429538, %176 ], [ 0, %120 ], [ %305, %304 ], [ %.0429538, %129 ], [ %.0429538, %140 ], [ %.0429538, %154 ]
  %.0426505 = phi i32 [ %.0426539, %176 ], [ %75, %120 ], [ %.3, %304 ], [ %.0426539, %129 ], [ %.0426539, %140 ], [ %.0426539, %154 ]
  %.0423500 = phi i32 [ %.0423540, %176 ], [ %74, %120 ], [ %.2425, %304 ], [ %.0423540, %129 ], [ %.0423540, %140 ], [ %.0423540, %154 ]
  %.0420495 = phi i32 [ %.0420541, %176 ], [ -1, %120 ], [ %.2422, %304 ], [ %.0420541, %129 ], [ %.0420541, %140 ], [ %.0420541, %154 ]
  %.2431583 = add nsw i32 %.0429510, -1
  %307 = icmp sgt i32 %.2431583, %.0420495
  br i1 %307, label %.lr.ph588, label %._crit_edge589

.lr.ph588:                                        ; preds = %.loopexit477
  %308 = zext nneg i32 %73 to i64
  %309 = getelementptr inbounds i32, ptr %22, i64 %308
  %invariant.gep566 = getelementptr [2 x i32], ptr %37, i64 0, i64 %308
  %310 = zext nneg i32 %.0416592 to i64
  %311 = getelementptr inbounds i32, ptr %22, i64 %310
  %invariant.gep572 = getelementptr [2 x i32], ptr %37, i64 0, i64 %310
  %312 = sext i32 %.0429510 to i64
  %313 = add nsw i64 %312, -1
  %314 = sext i32 %.0420495 to i64
  br label %317

.loopexit.loopexit:                               ; preds = %._crit_edge577
  %315 = trunc nsw i64 %indvars.iv.next640 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %._crit_edge571
  %.5.lcssa = phi i32 [ %354, %._crit_edge571 ], [ %315, %.loopexit.loopexit ]
  %indvars.iv.next645 = add nsw i64 %indvars.iv644, -1
  %316 = icmp sgt i64 %indvars.iv.next645, %314
  %indvars.iv.next647 = add nsw i64 %indvars.iv646, -1
  br i1 %316, label %317, label %._crit_edge589, !llvm.loop !32

317:                                              ; preds = %.lr.ph588, %.loopexit
  %indvars.iv646 = phi i64 [ %312, %.lr.ph588 ], [ %indvars.iv.next647, %.loopexit ]
  %indvars.iv644 = phi i64 [ %313, %.lr.ph588 ], [ %indvars.iv.next645, %.loopexit ]
  %.4585 = phi i32 [ %.0426505, %.lr.ph588 ], [ %.5.lcssa, %.loopexit ]
  %318 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv644
  %319 = load i32, ptr %318, align 4, !tbaa !12
  %320 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not466 = icmp eq i32 %320, 0
  br i1 %.not466, label %321, label %325

321:                                              ; preds = %317
  %322 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef 412, ptr noundef nonnull @.str.4)
  %323 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not467 = icmp eq i32 %323, 0
  br i1 %.not467, label %324, label %325

324:                                              ; preds = %321
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 412, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

325:                                              ; preds = %321, %317
  %326 = sext i32 %319 to i64
  %327 = getelementptr inbounds i32, ptr %35, i64 %326
  %328 = load i32, ptr %327, align 4, !tbaa !12
  %329 = icmp eq i32 %328, %73
  br i1 %329, label %335, label %330

330:                                              ; preds = %325
  %331 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef 413, ptr noundef nonnull @.str.4)
  %332 = load i32, ptr %327, align 4, !tbaa !12
  %333 = icmp eq i32 %332, %73
  br i1 %333, label %335, label %334

334:                                              ; preds = %330
  tail call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.4, i32 noundef 413, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

335:                                              ; preds = %325, %330
  %336 = getelementptr inbounds i32, ptr %29, i64 %326
  %337 = load i32, ptr %336, align 4, !tbaa !12
  %338 = load i32, ptr %71, align 4, !tbaa !12
  %339 = add nsw i32 %338, %337
  store i32 %339, ptr %71, align 4, !tbaa !12
  %340 = load i32, ptr %336, align 4, !tbaa !12
  %341 = load i32, ptr %309, align 4, !tbaa !12
  %342 = sub nsw i32 %341, %340
  store i32 %342, ptr %309, align 4, !tbaa !12
  store i32 2, ptr %327, align 4, !tbaa !12
  %343 = getelementptr inbounds i32, ptr %33, i64 %326
  %344 = load i32, ptr %343, align 4, !tbaa !12
  %345 = icmp eq i32 %344, -1
  br i1 %345, label %351, label %346

346:                                              ; preds = %335
  %347 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, i32 noundef 417, ptr noundef nonnull @.str.4)
  %348 = load i32, ptr %343, align 4, !tbaa !12
  %349 = icmp eq i32 %348, -1
  br i1 %349, label %351, label %350

350:                                              ; preds = %346
  tail call void @__assert_fail(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.4, i32 noundef 417, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

351:                                              ; preds = %346, %335
  %352 = sext i32 %.4585 to i64
  %353 = getelementptr inbounds i32, ptr %31, i64 %352
  store i32 %319, ptr %353, align 4, !tbaa !12
  %354 = add i32 %.4585, 1
  store i32 %.4585, ptr %343, align 4, !tbaa !12
  %355 = getelementptr inbounds %struct.nrinfo_t, ptr %37, i64 %326
  %356 = getelementptr inbounds i8, ptr %355, i64 4
  store i32 0, ptr %356, align 4, !tbaa !12
  store i32 0, ptr %355, align 4, !tbaa !12
  %357 = getelementptr inbounds i32, ptr %25, i64 %326
  %358 = load i32, ptr %357, align 4, !tbaa !12
  %359 = getelementptr i8, ptr %357, i64 4
  %360 = load i32, ptr %359, align 4, !tbaa !12
  %361 = icmp slt i32 %358, %360
  br i1 %361, label %.lr.ph570.preheader, label %._crit_edge571

.lr.ph570.preheader:                              ; preds = %351
  %362 = sext i32 %358 to i64
  br label %.lr.ph570

.lr.ph570:                                        ; preds = %.lr.ph570.preheader, %380
  %indvars.iv631 = phi i64 [ %362, %.lr.ph570.preheader ], [ %indvars.iv.next632, %380 ]
  %363 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv631
  %364 = load i32, ptr %363, align 4, !tbaa !12
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i32, ptr %35, i64 %365
  %367 = load i32, ptr %366, align 4, !tbaa !12
  %368 = icmp eq i32 %367, 2
  br i1 %368, label %369, label %373

369:                                              ; preds = %.lr.ph570
  %370 = load i32, ptr %336, align 4, !tbaa !12
  %gep567 = getelementptr %struct.nrinfo_t, ptr %invariant.gep566, i64 %365
  %371 = load i32, ptr %gep567, align 4, !tbaa !12
  %372 = sub nsw i32 %371, %370
  store i32 %372, ptr %gep567, align 4, !tbaa !12
  br label %380

373:                                              ; preds = %.lr.ph570
  %374 = getelementptr inbounds i32, ptr %29, i64 %365
  %375 = load i32, ptr %374, align 4, !tbaa !12
  %376 = sext i32 %367 to i64
  %377 = getelementptr inbounds i32, ptr %355, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !12
  %379 = add nsw i32 %378, %375
  store i32 %379, ptr %377, align 4, !tbaa !12
  br label %380

380:                                              ; preds = %369, %373
  %indvars.iv.next632 = add nsw i64 %indvars.iv631, 1
  %381 = load i32, ptr %359, align 4, !tbaa !12
  %382 = sext i32 %381 to i64
  %383 = icmp slt i64 %indvars.iv.next632, %382
  br i1 %383, label %.lr.ph570, label %._crit_edge571, !llvm.loop !33

._crit_edge571:                                   ; preds = %380, %351
  %384 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv644
  %385 = load i32, ptr %384, align 4, !tbaa !12
  %386 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv646
  %387 = load i32, ptr %386, align 4, !tbaa !12
  %388 = icmp slt i32 %385, %387
  br i1 %388, label %.lr.ph581.preheader, label %.loopexit

.lr.ph581.preheader:                              ; preds = %._crit_edge571
  %389 = sext i32 %385 to i64
  %390 = sext i32 %354 to i64
  br label %.lr.ph581

.lr.ph581:                                        ; preds = %.lr.ph581.preheader, %._crit_edge577
  %indvars.iv639 = phi i64 [ %390, %.lr.ph581.preheader ], [ %indvars.iv.next640, %._crit_edge577 ]
  %indvars.iv637 = phi i64 [ %389, %.lr.ph581.preheader ], [ %indvars.iv.next638, %._crit_edge577 ]
  %391 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv637
  %392 = load i32, ptr %391, align 4, !tbaa !12
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds i32, ptr %35, i64 %393
  %395 = load i32, ptr %394, align 4, !tbaa !12
  %396 = icmp eq i32 %395, 2
  br i1 %396, label %402, label %397

397:                                              ; preds = %.lr.ph581
  %398 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, i32 noundef 432, ptr noundef nonnull @.str.4)
  %399 = load i32, ptr %394, align 4, !tbaa !12
  %400 = icmp eq i32 %399, 2
  br i1 %400, label %402, label %401

401:                                              ; preds = %397
  tail call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.4, i32 noundef 432, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

402:                                              ; preds = %397, %.lr.ph581
  store i32 %.0416592, ptr %394, align 4, !tbaa !12
  %403 = getelementptr inbounds i32, ptr %29, i64 %393
  %404 = load i32, ptr %403, align 4, !tbaa !12
  %405 = load i32, ptr %311, align 4, !tbaa !12
  %406 = add nsw i32 %405, %404
  store i32 %406, ptr %311, align 4, !tbaa !12
  %407 = load i32, ptr %403, align 4, !tbaa !12
  %408 = load i32, ptr %71, align 4, !tbaa !12
  %409 = sub nsw i32 %408, %407
  store i32 %409, ptr %71, align 4, !tbaa !12
  %410 = getelementptr inbounds i32, ptr %33, i64 %393
  %411 = load i32, ptr %410, align 4, !tbaa !12
  %.not468 = icmp eq i32 %411, -1
  br i1 %.not468, label %412, label %416

412:                                              ; preds = %402
  %413 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, i32 noundef 435, ptr noundef nonnull @.str.4)
  %414 = load i32, ptr %410, align 4, !tbaa !12
  %.not469 = icmp eq i32 %414, -1
  br i1 %.not469, label %415, label %416

415:                                              ; preds = %412
  tail call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.4, i32 noundef 435, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

416:                                              ; preds = %412, %402
  %417 = phi i32 [ %414, %412 ], [ %411, %402 ]
  %indvars.iv.next640 = add nsw i64 %indvars.iv639, -1
  %418 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next640
  %419 = load i32, ptr %418, align 4, !tbaa !12
  %420 = sext i32 %417 to i64
  %421 = getelementptr inbounds i32, ptr %31, i64 %420
  store i32 %419, ptr %421, align 4, !tbaa !12
  %422 = load i32, ptr %410, align 4, !tbaa !12
  %423 = sext i32 %419 to i64
  %424 = getelementptr inbounds i32, ptr %33, i64 %423
  store i32 %422, ptr %424, align 4, !tbaa !12
  store i32 -1, ptr %410, align 4, !tbaa !12
  %425 = getelementptr inbounds i32, ptr %25, i64 %393
  %426 = load i32, ptr %425, align 4, !tbaa !12
  %427 = getelementptr i8, ptr %425, i64 4
  %428 = load i32, ptr %427, align 4, !tbaa !12
  %429 = icmp slt i32 %426, %428
  br i1 %429, label %.lr.ph576.preheader, label %._crit_edge577

.lr.ph576.preheader:                              ; preds = %416
  %430 = sext i32 %426 to i64
  br label %.lr.ph576

.lr.ph576:                                        ; preds = %.lr.ph576.preheader, %442
  %431 = phi i32 [ %428, %.lr.ph576.preheader ], [ %443, %442 ]
  %indvars.iv634 = phi i64 [ %430, %.lr.ph576.preheader ], [ %indvars.iv.next635, %442 ]
  %432 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv634
  %433 = load i32, ptr %432, align 4, !tbaa !12
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds i32, ptr %35, i64 %434
  %436 = load i32, ptr %435, align 4, !tbaa !12
  %437 = icmp eq i32 %436, 2
  br i1 %437, label %438, label %442

438:                                              ; preds = %.lr.ph576
  %439 = load i32, ptr %403, align 4, !tbaa !12
  %gep573 = getelementptr %struct.nrinfo_t, ptr %invariant.gep572, i64 %434
  %440 = load i32, ptr %gep573, align 4, !tbaa !12
  %441 = add nsw i32 %440, %439
  store i32 %441, ptr %gep573, align 4, !tbaa !12
  %.pre = load i32, ptr %427, align 4, !tbaa !12
  br label %442

442:                                              ; preds = %.lr.ph576, %438
  %443 = phi i32 [ %431, %.lr.ph576 ], [ %.pre, %438 ]
  %indvars.iv.next635 = add nsw i64 %indvars.iv634, 1
  %444 = sext i32 %443 to i64
  %445 = icmp slt i64 %indvars.iv.next635, %444
  br i1 %445, label %.lr.ph576, label %._crit_edge577, !llvm.loop !34

._crit_edge577:                                   ; preds = %442, %416
  %indvars.iv.next638 = add nsw i64 %indvars.iv637, 1
  %446 = load i32, ptr %386, align 4, !tbaa !12
  %447 = sext i32 %446 to i64
  %448 = icmp slt i64 %indvars.iv.next638, %447
  br i1 %448, label %.lr.ph581, label %.loopexit.loopexit, !llvm.loop !35

._crit_edge589:                                   ; preds = %.loopexit, %.loopexit477
  %.4.lcssa = phi i32 [ %.0426505, %.loopexit477 ], [ %.5.lcssa, %.loopexit ]
  %449 = load i32, ptr %71, align 4, !tbaa !12
  %450 = icmp eq i32 %.0423500, %449
  br i1 %450, label %456, label %451

451:                                              ; preds = %._crit_edge589
  %452 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef 444, ptr noundef nonnull @.str.4)
  %453 = load i32, ptr %71, align 4, !tbaa !12
  %454 = icmp eq i32 %.0423500, %453
  br i1 %454, label %456, label %455

455:                                              ; preds = %451
  tail call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.4, i32 noundef 444, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1SidedP) #7
  unreachable

456:                                              ; preds = %451, %._crit_edge589
  %457 = load i32, ptr %53, align 8, !tbaa !21
  %458 = and i32 %457, 8
  %.not463 = icmp eq i32 %458, 0
  br i1 %.not463, label %463, label %459

459:                                              ; preds = %456
  %460 = load i32, ptr %22, align 4, !tbaa !12
  %461 = load i32, ptr %48, align 4, !tbaa !12
  %462 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.30, i32 noundef %.0423500, i32 noundef %.0420495, i32 noundef %460, i32 noundef %461, i32 noundef %.4.lcssa, i32 noundef %108)
  br label %463

463:                                              ; preds = %459, %456
  store i32 %.0423500, ptr %6, align 8, !tbaa !5
  store i32 %.4.lcssa, ptr %68, align 8, !tbaa !26
  %464 = and i32 %.0419591, 1
  %.not464 = icmp eq i32 %464, 0
  br i1 %.not464, label %469, label %465

465:                                              ; preds = %463
  %466 = icmp ne i32 %.0420495, -1
  %.not465 = icmp slt i32 %.0423500, %74
  %or.cond472 = select i1 %466, i1 %.not465, i1 false
  %467 = add nuw nsw i32 %.0419591, 1
  %468 = icmp slt i32 %467, %4
  %or.cond598 = select i1 %or.cond472, i1 %468, i1 false
  br i1 %or.cond598, label %.backedge.backedge, label %._crit_edge595

469:                                              ; preds = %463
  %.old = or disjoint i32 %.0419591, 1
  %.old597 = icmp slt i32 %.old, %4
  br i1 %.old597, label %.backedge.backedge, label %._crit_edge595

.backedge.backedge:                               ; preds = %469, %465
  %.0419591.be = phi i32 [ %.old, %469 ], [ %467, %465 ]
  br label %.backedge, !llvm.loop !36

._crit_edge595:                                   ; preds = %469, %465, %62
  tail call void @libmetis__rpqDestroy(ptr noundef %39) #6
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #6
  ret void
}

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #0

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

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #0

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

declare void @libmetis__rpqReset(ptr noundef) local_unnamed_addr #0

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

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

declare i64 @libmetis__rpqLength(ptr noundef) local_unnamed_addr #0

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) local_unnamed_addr #0

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

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #0

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

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #0

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #0

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

attributes #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 = { 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 #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 112}
!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 128}
!12 = !{!7, !7, i64 0}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !10, i64 16}
!15 = !{!6, !10, i64 40}
!16 = !{!6, !10, i64 24}
!17 = !{!6, !10, i64 152}
!18 = !{!6, !10, i64 144}
!19 = !{!6, !10, i64 120}
!20 = !{!6, !10, i64 192}
!21 = !{!22, !7, i64 8}
!22 = !{!"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, !23, i64 96, !10, i64 104, !10, i64 112, !10, 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, !10, i64 232, !25, i64 240, !25, i64 248, !25, 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}
!23 = !{!"float", !8, i64 0}
!24 = !{!"double", !8, i64 0}
!25 = !{!"long", !8, i64 0}
!26 = !{!6, !7, i64 136}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}
!33 = distinct !{!33, !28}
!34 = distinct !{!34, !28}
!35 = distinct !{!35, !28}
!36 = distinct !{!36, !28}


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