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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.graph_t = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.ctrl_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, float, ptr, ptr, ptr, float, double, double, double, double, double, double, double, double, double, double, double, double, ptr, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.nrinfo_t = type { [2 x i32] }

@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [136 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [52 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided = external hidden unnamed_addr constant [67 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [20 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 void @libmetis__wspacepush(ptr noundef) #1

declare ptr @libmetis__rpqCreate(i64 noundef) #1

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

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

declare void @libmetis__rpqReset(ptr noundef) #1

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

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

declare i32 @libmetis__rpqInsert(ptr noundef, i32 noundef, float 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) #3

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

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

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

113:                                              ; preds = %3
  %114 = load ptr, ptr %22, align 8, !tbaa !5
  %115 = getelementptr inbounds i32, ptr %114, i64 0
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = load ptr, ptr %22, align 8, !tbaa !5
  %118 = getelementptr inbounds i32, ptr %117, i64 1
  %119 = load i32, ptr %118, align 4, !tbaa !9
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.graph_t, ptr %120, i32 0, i32 0
  %122 = load i32, ptr %121, align 8, !tbaa !11
  %123 = load ptr, ptr %5, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.graph_t, ptr %123, i32 0, i32 21
  %125 = load i32, ptr %124, align 8, !tbaa !28
  %126 = load ptr, ptr %5, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.graph_t, ptr %126, i32 0, i32 17
  %128 = load i32, ptr %127, align 8, !tbaa !29
  %129 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, i32 noundef %116, i32 noundef %119, i32 noundef %122, i32 noundef %125, i32 noundef %128)
  br label %130

130:                                              ; preds = %113, %3
  %131 = load ptr, ptr %22, align 8, !tbaa !5
  %132 = getelementptr inbounds i32, ptr %131, i64 0
  %133 = load i32, ptr %132, align 4, !tbaa !9
  %134 = load ptr, ptr %22, align 8, !tbaa !5
  %135 = getelementptr inbounds i32, ptr %134, i64 1
  %136 = load i32, ptr %135, align 4, !tbaa !9
  %137 = icmp slt i32 %133, %136
  %138 = zext i1 %137 to i64
  %139 = select i1 %137, i32 1, i32 0
  store i32 %139, ptr %36, align 4, !tbaa !9
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %1297, %130
  %141 = load i32, ptr %35, align 4, !tbaa !9
  %142 = load i32, ptr %6, align 4, !tbaa !9
  %143 = mul nsw i32 2, %142
  %144 = icmp slt i32 %141, %143
  br i1 %144, label %145, label %1300

145:                                              ; preds = %140
  %146 = load i32, ptr %36, align 4, !tbaa !9
  store i32 %146, ptr %37, align 4, !tbaa !9
  %147 = load i32, ptr %36, align 4, !tbaa !9
  %148 = add nsw i32 %147, 1
  %149 = srem i32 %148, 2
  store i32 %149, ptr %36, align 4, !tbaa !9
  %150 = load ptr, ptr %29, align 8, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %150)
  store i32 -1, ptr %34, align 4, !tbaa !9
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.graph_t, ptr %151, i32 0, i32 17
  %153 = load i32, ptr %152, align 8, !tbaa !29
  store i32 %153, ptr %32, align 4, !tbaa !9
  store i32 %153, ptr %33, align 4, !tbaa !9
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.graph_t, ptr %154, i32 0, i32 21
  %156 = load i32, ptr %155, align 8, !tbaa !28
  store i32 %156, ptr %14, align 4, !tbaa !9
  %157 = load i32, ptr %14, align 4, !tbaa !9
  %158 = load ptr, ptr %28, align 8, !tbaa !5
  %159 = load i32, ptr %14, align 4, !tbaa !9
  call void @libmetis__irandArrayPermute(i32 noundef %157, ptr noundef %158, i32 noundef %159, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %160

160:                                              ; preds = %211, %145
  %161 = load i32, ptr %8, align 4, !tbaa !9
  %162 = load i32, ptr %14, align 4, !tbaa !9
  %163 = icmp slt i32 %161, %162
  br i1 %163, label %164, label %214

164:                                              ; preds = %160
  %165 = load ptr, ptr %24, align 8, !tbaa !5
  %166 = load ptr, ptr %28, align 8, !tbaa !5
  %167 = load i32, ptr %8, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i32, ptr %166, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds i32, ptr %165, i64 %171
  %173 = load i32, ptr %172, align 4, !tbaa !9
  store i32 %173, ptr %7, align 4, !tbaa !9
  %174 = load ptr, ptr %21, align 8, !tbaa !5
  %175 = load i32, ptr %7, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i32, ptr %174, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = icmp eq i32 %178, 2
  br i1 %179, label %191, label %180

180:                                              ; preds = %164
  %181 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef 315, ptr noundef @.str.2)
  %182 = load ptr, ptr %21, align 8, !tbaa !5
  %183 = load i32, ptr %7, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds i32, ptr %182, i64 %184
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp eq i32 %186, 2
  br i1 %187, label %188, label %189

188:                                              ; preds = %180
  br label %190

189:                                              ; preds = %180
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 315, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

190:                                              ; preds = %188
  br label %191

191:                                              ; preds = %190, %164
  %192 = load ptr, ptr %29, align 8, !tbaa !5
  %193 = load i32, ptr %7, align 4, !tbaa !9
  %194 = load ptr, ptr %19, align 8, !tbaa !5
  %195 = load i32, ptr %7, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i32, ptr %194, i64 %196
  %198 = load i32, ptr %197, align 4, !tbaa !9
  %199 = load ptr, ptr %30, align 8, !tbaa !5
  %200 = load i32, ptr %7, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds %struct.nrinfo_t, ptr %199, i64 %201
  %203 = getelementptr inbounds %struct.nrinfo_t, ptr %202, i32 0, i32 0
  %204 = load i32, ptr %37, align 4, !tbaa !9
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds [2 x i32], ptr %203, i64 0, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !9
  %208 = sub nsw i32 %198, %207
  %209 = sitofp i32 %208 to float
  %210 = call i32 @libmetis__rpqInsert(ptr noundef %192, i32 noundef %193, float noundef %209)
  br label %211

211:                                              ; preds = %191
  %212 = load i32, ptr %8, align 4, !tbaa !9
  %213 = add nsw i32 %212, 1
  store i32 %213, ptr %8, align 4, !tbaa !9
  br label %160, !llvm.loop !30

214:                                              ; preds = %160
  %215 = load ptr, ptr %5, align 8, !tbaa !5
  %216 = load i32, ptr %14, align 4, !tbaa !9
  %217 = call i32 @libmetis__CheckNodeBnd(ptr noundef %215, i32 noundef %216)
  %218 = icmp ne i32 %217, 0
  br i1 %218, label %228, label %219

219:                                              ; preds = %214
  %220 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef 319, ptr noundef @.str.2)
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = load i32, ptr %14, align 4, !tbaa !9
  %223 = call i32 @libmetis__CheckNodeBnd(ptr noundef %221, i32 noundef %222)
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %226

225:                                              ; preds = %219
  br label %227

226:                                              ; preds = %219
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.2, i32 noundef 319, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

227:                                              ; preds = %225
  br label %228

228:                                              ; preds = %227, %214
  %229 = load ptr, ptr %5, align 8, !tbaa !5
  %230 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %229)
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %240, label %232

232:                                              ; preds = %228
  %233 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef 320, ptr noundef @.str.2)
  %234 = load ptr, ptr %5, align 8, !tbaa !5
  %235 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %234)
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %237, label %238

237:                                              ; preds = %232
  br label %239

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

239:                                              ; preds = %237
  br label %240

240:                                              ; preds = %239, %228
  %241 = load ptr, ptr %4, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.ctrl_t, ptr %241, i32 0, i32 13
  %243 = load i32, ptr %242, align 4, !tbaa !32
  %244 = icmp ne i32 %243, 0
  br i1 %244, label %245, label %255

245:                                              ; preds = %240
  %246 = load i32, ptr %14, align 4, !tbaa !9
  %247 = mul nsw i32 5, %246
  %248 = icmp sge i32 %247, 500
  br i1 %248, label %249, label %250

249:                                              ; preds = %245
  br label %253

250:                                              ; preds = %245
  %251 = load i32, ptr %14, align 4, !tbaa !9
  %252 = mul nsw i32 5, %251
  br label %253

253:                                              ; preds = %250, %249
  %254 = phi i32 [ 500, %249 ], [ %252, %250 ]
  br label %265

255:                                              ; preds = %240
  %256 = load i32, ptr %14, align 4, !tbaa !9
  %257 = mul nsw i32 3, %256
  %258 = icmp sge i32 %257, 300
  br i1 %258, label %259, label %260

259:                                              ; preds = %255
  br label %263

260:                                              ; preds = %255
  %261 = load i32, ptr %14, align 4, !tbaa !9
  %262 = mul nsw i32 3, %261
  br label %263

263:                                              ; preds = %260, %259
  %264 = phi i32 [ 300, %259 ], [ %262, %260 ]
  br label %265

265:                                              ; preds = %263, %253
  %266 = phi i32 [ %254, %253 ], [ %264, %263 ]
  store i32 %266, ptr %38, align 4, !tbaa !9
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.ctrl_t, ptr %267, i32 0, i32 2
  %269 = load i32, ptr %268, align 8, !tbaa !27
  %270 = and i32 %269, 2
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %278

272:                                              ; preds = %265
  %273 = call double @gk_CPUSeconds()
  %274 = load ptr, ptr %4, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.ctrl_t, ptr %274, i32 0, i32 38
  %276 = load double, ptr %275, align 8, !tbaa !33
  %277 = fsub double %276, %273
  store double %277, ptr %275, align 8, !tbaa !33
  br label %278

278:                                              ; preds = %272, %265
  store i32 0, ptr %16, align 4, !tbaa !9
  %279 = load ptr, ptr %26, align 8, !tbaa !5
  %280 = getelementptr inbounds i32, ptr %279, i64 0
  store i32 0, ptr %280, align 4, !tbaa !9
  %281 = load ptr, ptr %22, align 8, !tbaa !5
  %282 = getelementptr inbounds i32, ptr %281, i64 0
  %283 = load i32, ptr %282, align 4, !tbaa !9
  %284 = load ptr, ptr %22, align 8, !tbaa !5
  %285 = getelementptr inbounds i32, ptr %284, i64 1
  %286 = load i32, ptr %285, align 4, !tbaa !9
  %287 = sub nsw i32 %283, %286
  %288 = call i32 @llvm.abs.i32(i32 %287, i1 true)
  store i32 %288, ptr %40, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %289

289:                                              ; preds = %856, %278
  %290 = load i32, ptr %15, align 4, !tbaa !9
  %291 = load i32, ptr %13, align 4, !tbaa !9
  %292 = icmp slt i32 %290, %291
  br i1 %292, label %293, label %859

293:                                              ; preds = %289
  %294 = load ptr, ptr %29, align 8, !tbaa !5
  %295 = call i32 @libmetis__rpqGetTop(ptr noundef %294)
  store i32 %295, ptr %31, align 4, !tbaa !9
  %296 = icmp eq i32 %295, -1
  br i1 %296, label %297, label %298

297:                                              ; preds = %293
  br label %859

298:                                              ; preds = %293
  %299 = load ptr, ptr %25, align 8, !tbaa !5
  %300 = load i32, ptr %31, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %299, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = icmp ne i32 %303, -1
  br i1 %304, label %316, label %305

305:                                              ; preds = %298
  %306 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 334, ptr noundef @.str.2)
  %307 = load ptr, ptr %25, align 8, !tbaa !5
  %308 = load i32, ptr %31, align 4, !tbaa !9
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %307, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !9
  %312 = icmp ne i32 %311, -1
  br i1 %312, label %313, label %314

313:                                              ; preds = %305
  br label %315

314:                                              ; preds = %305
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 334, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

315:                                              ; preds = %313
  br label %316

316:                                              ; preds = %315, %298
  %317 = load i32, ptr %16, align 4, !tbaa !9
  %318 = load ptr, ptr %18, align 8, !tbaa !5
  %319 = load i32, ptr %31, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %318, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = add nsw i32 %317, %323
  %325 = load ptr, ptr %18, align 8, !tbaa !5
  %326 = load i32, ptr %31, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %325, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !9
  %330 = sub nsw i32 %324, %329
  %331 = load i32, ptr %13, align 4, !tbaa !9
  %332 = mul nsw i32 2, %331
  %333 = sub nsw i32 %332, 1
  %334 = icmp sge i32 %330, %333
  br i1 %334, label %335, label %336

335:                                              ; preds = %316
  br label %859

336:                                              ; preds = %316
  %337 = load ptr, ptr %22, align 8, !tbaa !5
  %338 = load i32, ptr %36, align 4, !tbaa !9
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds i32, ptr %337, i64 %339
  %341 = load i32, ptr %340, align 4, !tbaa !9
  %342 = load ptr, ptr %19, align 8, !tbaa !5
  %343 = load i32, ptr %31, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %342, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = add nsw i32 %341, %346
  %348 = load i32, ptr %39, align 4, !tbaa !9
  %349 = icmp sgt i32 %347, %348
  br i1 %349, label %350, label %351

350:                                              ; preds = %336
  br label %859

351:                                              ; preds = %336
  %352 = load ptr, ptr %19, align 8, !tbaa !5
  %353 = load i32, ptr %31, align 4, !tbaa !9
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %352, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !9
  %357 = load ptr, ptr %30, align 8, !tbaa !5
  %358 = load i32, ptr %31, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds %struct.nrinfo_t, ptr %357, i64 %359
  %361 = getelementptr inbounds %struct.nrinfo_t, ptr %360, i32 0, i32 0
  %362 = load i32, ptr %37, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds [2 x i32], ptr %361, i64 0, i64 %363
  %365 = load i32, ptr %364, align 4, !tbaa !9
  %366 = sub nsw i32 %356, %365
  %367 = load ptr, ptr %22, align 8, !tbaa !5
  %368 = getelementptr inbounds i32, ptr %367, i64 2
  %369 = load i32, ptr %368, align 4, !tbaa !9
  %370 = sub nsw i32 %369, %366
  store i32 %370, ptr %368, align 4, !tbaa !9
  %371 = load ptr, ptr %22, align 8, !tbaa !5
  %372 = load i32, ptr %36, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i32, ptr %371, i64 %373
  %375 = load i32, ptr %374, align 4, !tbaa !9
  %376 = load ptr, ptr %19, align 8, !tbaa !5
  %377 = load i32, ptr %31, align 4, !tbaa !9
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i32, ptr %376, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !9
  %381 = add nsw i32 %375, %380
  %382 = load ptr, ptr %22, align 8, !tbaa !5
  %383 = load i32, ptr %37, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %382, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  %387 = load ptr, ptr %30, align 8, !tbaa !5
  %388 = load i32, ptr %31, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds %struct.nrinfo_t, ptr %387, i64 %389
  %391 = getelementptr inbounds %struct.nrinfo_t, ptr %390, i32 0, i32 0
  %392 = load i32, ptr %37, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds [2 x i32], ptr %391, i64 0, i64 %393
  %395 = load i32, ptr %394, align 4, !tbaa !9
  %396 = sub nsw i32 %386, %395
  %397 = sub nsw i32 %381, %396
  %398 = call i32 @llvm.abs.i32(i32 %397, i1 true)
  store i32 %398, ptr %41, align 4, !tbaa !9
  %399 = load ptr, ptr %22, align 8, !tbaa !5
  %400 = getelementptr inbounds i32, ptr %399, i64 2
  %401 = load i32, ptr %400, align 4, !tbaa !9
  %402 = load i32, ptr %32, align 4, !tbaa !9
  %403 = icmp slt i32 %401, %402
  br i1 %403, label %414, label %404

404:                                              ; preds = %351
  %405 = load ptr, ptr %22, align 8, !tbaa !5
  %406 = getelementptr inbounds i32, ptr %405, i64 2
  %407 = load i32, ptr %406, align 4, !tbaa !9
  %408 = load i32, ptr %32, align 4, !tbaa !9
  %409 = icmp eq i32 %407, %408
  br i1 %409, label %410, label %420

410:                                              ; preds = %404
  %411 = load i32, ptr %41, align 4, !tbaa !9
  %412 = load i32, ptr %40, align 4, !tbaa !9
  %413 = icmp slt i32 %411, %412
  br i1 %413, label %414, label %420

414:                                              ; preds = %410, %351
  %415 = load ptr, ptr %22, align 8, !tbaa !5
  %416 = getelementptr inbounds i32, ptr %415, i64 2
  %417 = load i32, ptr %416, align 4, !tbaa !9
  store i32 %417, ptr %32, align 4, !tbaa !9
  %418 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %418, ptr %34, align 4, !tbaa !9
  %419 = load i32, ptr %41, align 4, !tbaa !9
  store i32 %419, ptr %40, align 4, !tbaa !9
  br label %463

420:                                              ; preds = %410, %404
  %421 = load i32, ptr %15, align 4, !tbaa !9
  %422 = load i32, ptr %34, align 4, !tbaa !9
  %423 = sub nsw i32 %421, %422
  %424 = load i32, ptr %38, align 4, !tbaa !9
  %425 = mul nsw i32 3, %424
  %426 = icmp sgt i32 %423, %425
  br i1 %426, label %442, label %427

427:                                              ; preds = %420
  %428 = load i32, ptr %15, align 4, !tbaa !9
  %429 = load i32, ptr %34, align 4, !tbaa !9
  %430 = sub nsw i32 %428, %429
  %431 = load i32, ptr %38, align 4, !tbaa !9
  %432 = icmp sgt i32 %430, %431
  br i1 %432, label %433, label %462

433:                                              ; preds = %427
  %434 = load ptr, ptr %22, align 8, !tbaa !5
  %435 = getelementptr inbounds i32, ptr %434, i64 2
  %436 = load i32, ptr %435, align 4, !tbaa !9
  %437 = sitofp i32 %436 to double
  %438 = load i32, ptr %32, align 4, !tbaa !9
  %439 = sitofp i32 %438 to double
  %440 = fmul double 1.100000e+00, %439
  %441 = fcmp ogt double %437, %440
  br i1 %441, label %442, label %462

442:                                              ; preds = %433, %420
  %443 = load ptr, ptr %19, align 8, !tbaa !5
  %444 = load i32, ptr %31, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds i32, ptr %443, i64 %445
  %447 = load i32, ptr %446, align 4, !tbaa !9
  %448 = load ptr, ptr %30, align 8, !tbaa !5
  %449 = load i32, ptr %31, align 4, !tbaa !9
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds %struct.nrinfo_t, ptr %448, i64 %450
  %452 = getelementptr inbounds %struct.nrinfo_t, ptr %451, i32 0, i32 0
  %453 = load i32, ptr %37, align 4, !tbaa !9
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds [2 x i32], ptr %452, i64 0, i64 %454
  %456 = load i32, ptr %455, align 4, !tbaa !9
  %457 = sub nsw i32 %447, %456
  %458 = load ptr, ptr %22, align 8, !tbaa !5
  %459 = getelementptr inbounds i32, ptr %458, i64 2
  %460 = load i32, ptr %459, align 4, !tbaa !9
  %461 = add nsw i32 %460, %457
  store i32 %461, ptr %459, align 4, !tbaa !9
  br label %859

462:                                              ; preds = %433, %427
  br label %463

463:                                              ; preds = %462, %414
  br label %464

464:                                              ; preds = %463
  %465 = load ptr, ptr %25, align 8, !tbaa !5
  %466 = load i32, ptr %31, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %465, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = icmp ne i32 %469, -1
  br i1 %470, label %482, label %471

471:                                              ; preds = %464
  %472 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 360, ptr noundef @.str.2)
  %473 = load ptr, ptr %25, align 8, !tbaa !5
  %474 = load i32, ptr %31, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %473, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !9
  %478 = icmp ne i32 %477, -1
  br i1 %478, label %479, label %480

479:                                              ; preds = %471
  br label %481

480:                                              ; preds = %471
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 360, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

481:                                              ; preds = %479
  br label %482

482:                                              ; preds = %481, %464
  %483 = load ptr, ptr %24, align 8, !tbaa !5
  %484 = load i32, ptr %14, align 4, !tbaa !9
  %485 = add nsw i32 %484, -1
  store i32 %485, ptr %14, align 4, !tbaa !9
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds i32, ptr %483, i64 %486
  %488 = load i32, ptr %487, align 4, !tbaa !9
  %489 = load ptr, ptr %24, align 8, !tbaa !5
  %490 = load ptr, ptr %25, align 8, !tbaa !5
  %491 = load i32, ptr %31, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds i32, ptr %490, i64 %492
  %494 = load i32, ptr %493, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i32, ptr %489, i64 %495
  store i32 %488, ptr %496, align 4, !tbaa !9
  %497 = load ptr, ptr %25, align 8, !tbaa !5
  %498 = load i32, ptr %31, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i32, ptr %497, i64 %499
  %501 = load i32, ptr %500, align 4, !tbaa !9
  %502 = load ptr, ptr %25, align 8, !tbaa !5
  %503 = load ptr, ptr %24, align 8, !tbaa !5
  %504 = load i32, ptr %14, align 4, !tbaa !9
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds i32, ptr %503, i64 %505
  %507 = load i32, ptr %506, align 4, !tbaa !9
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds i32, ptr %502, i64 %508
  store i32 %501, ptr %509, align 4, !tbaa !9
  %510 = load ptr, ptr %25, align 8, !tbaa !5
  %511 = load i32, ptr %31, align 4, !tbaa !9
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds i32, ptr %510, i64 %512
  store i32 -1, ptr %513, align 4, !tbaa !9
  br label %514

514:                                              ; preds = %482
  br label %515

515:                                              ; preds = %514
  %516 = load ptr, ptr %19, align 8, !tbaa !5
  %517 = load i32, ptr %31, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = load ptr, ptr %22, align 8, !tbaa !5
  %522 = load i32, ptr %36, align 4, !tbaa !9
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds i32, ptr %521, i64 %523
  %525 = load i32, ptr %524, align 4, !tbaa !9
  %526 = add nsw i32 %525, %520
  store i32 %526, ptr %524, align 4, !tbaa !9
  %527 = load i32, ptr %36, align 4, !tbaa !9
  %528 = load ptr, ptr %21, align 8, !tbaa !5
  %529 = load i32, ptr %31, align 4, !tbaa !9
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds i32, ptr %528, i64 %530
  store i32 %527, ptr %531, align 4, !tbaa !9
  %532 = load i32, ptr %31, align 4, !tbaa !9
  %533 = load ptr, ptr %28, align 8, !tbaa !5
  %534 = load i32, ptr %15, align 4, !tbaa !9
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds i32, ptr %533, i64 %535
  store i32 %532, ptr %536, align 4, !tbaa !9
  %537 = load ptr, ptr %4, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.ctrl_t, ptr %537, i32 0, i32 2
  %539 = load i32, ptr %538, align 8, !tbaa !27
  %540 = and i32 %539, 2
  %541 = icmp ne i32 %540, 0
  br i1 %541, label %542, label %548

542:                                              ; preds = %515
  %543 = call double @gk_CPUSeconds()
  %544 = load ptr, ptr %4, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.ctrl_t, ptr %544, i32 0, i32 36
  %546 = load double, ptr %545, align 8, !tbaa !34
  %547 = fsub double %546, %543
  store double %547, ptr %545, align 8, !tbaa !34
  br label %548

548:                                              ; preds = %542, %515
  %549 = load ptr, ptr %18, align 8, !tbaa !5
  %550 = load i32, ptr %31, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds i32, ptr %549, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  store i32 %553, ptr %9, align 4, !tbaa !9
  br label %554

554:                                              ; preds = %793, %548
  %555 = load i32, ptr %9, align 4, !tbaa !9
  %556 = load ptr, ptr %18, align 8, !tbaa !5
  %557 = load i32, ptr %31, align 4, !tbaa !9
  %558 = add nsw i32 %557, 1
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds i32, ptr %556, i64 %559
  %561 = load i32, ptr %560, align 4, !tbaa !9
  %562 = icmp slt i32 %555, %561
  br i1 %562, label %563, label %796

563:                                              ; preds = %554
  %564 = load ptr, ptr %20, align 8, !tbaa !5
  %565 = load i32, ptr %9, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i32, ptr %564, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !9
  store i32 %568, ptr %10, align 4, !tbaa !9
  %569 = load ptr, ptr %21, align 8, !tbaa !5
  %570 = load i32, ptr %10, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds i32, ptr %569, i64 %571
  %573 = load i32, ptr %572, align 4, !tbaa !9
  %574 = icmp eq i32 %573, 2
  br i1 %574, label %575, label %591

575:                                              ; preds = %563
  %576 = load ptr, ptr %19, align 8, !tbaa !5
  %577 = load i32, ptr %31, align 4, !tbaa !9
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds i32, ptr %576, i64 %578
  %580 = load i32, ptr %579, align 4, !tbaa !9
  %581 = load ptr, ptr %30, align 8, !tbaa !5
  %582 = load i32, ptr %10, align 4, !tbaa !9
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds %struct.nrinfo_t, ptr %581, i64 %583
  %585 = getelementptr inbounds %struct.nrinfo_t, ptr %584, i32 0, i32 0
  %586 = load i32, ptr %36, align 4, !tbaa !9
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds [2 x i32], ptr %585, i64 0, i64 %587
  %589 = load i32, ptr %588, align 4, !tbaa !9
  %590 = add nsw i32 %589, %580
  store i32 %590, ptr %588, align 4, !tbaa !9
  br label %792

591:                                              ; preds = %563
  %592 = load ptr, ptr %21, align 8, !tbaa !5
  %593 = load i32, ptr %10, align 4, !tbaa !9
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds i32, ptr %592, i64 %594
  %596 = load i32, ptr %595, align 4, !tbaa !9
  %597 = load i32, ptr %37, align 4, !tbaa !9
  %598 = icmp eq i32 %596, %597
  br i1 %598, label %599, label %791

599:                                              ; preds = %591
  %600 = load ptr, ptr %25, align 8, !tbaa !5
  %601 = load i32, ptr %10, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds i32, ptr %600, i64 %602
  %604 = load i32, ptr %603, align 4, !tbaa !9
  %605 = icmp eq i32 %604, -1
  br i1 %605, label %630, label %606

606:                                              ; preds = %599
  %607 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 377, ptr noundef @.str.2)
  %608 = load i32, ptr %10, align 4, !tbaa !9
  %609 = load ptr, ptr %25, align 8, !tbaa !5
  %610 = load i32, ptr %10, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds i32, ptr %609, i64 %611
  %613 = load i32, ptr %612, align 4, !tbaa !9
  %614 = load ptr, ptr %21, align 8, !tbaa !5
  %615 = load i32, ptr %10, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds i32, ptr %614, i64 %616
  %618 = load i32, ptr %617, align 4, !tbaa !9
  %619 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %608, i32 noundef %613, i32 noundef %618)
  %620 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %621 = load ptr, ptr %25, align 8, !tbaa !5
  %622 = load i32, ptr %10, align 4, !tbaa !9
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds i32, ptr %621, i64 %623
  %625 = load i32, ptr %624, align 4, !tbaa !9
  %626 = icmp eq i32 %625, -1
  br i1 %626, label %627, label %628

627:                                              ; preds = %606
  br label %629

628:                                              ; preds = %606
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.2, i32 noundef 377, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

629:                                              ; preds = %627
  br label %630

630:                                              ; preds = %629, %599
  br label %631

631:                                              ; preds = %630
  %632 = load ptr, ptr %25, align 8, !tbaa !5
  %633 = load i32, ptr %10, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds i32, ptr %632, i64 %634
  %636 = load i32, ptr %635, align 4, !tbaa !9
  %637 = icmp eq i32 %636, -1
  br i1 %637, label %649, label %638

638:                                              ; preds = %631
  %639 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 378, ptr noundef @.str.2)
  %640 = load ptr, ptr %25, align 8, !tbaa !5
  %641 = load i32, ptr %10, align 4, !tbaa !9
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds i32, ptr %640, i64 %642
  %644 = load i32, ptr %643, align 4, !tbaa !9
  %645 = icmp eq i32 %644, -1
  br i1 %645, label %646, label %647

646:                                              ; preds = %638
  br label %648

647:                                              ; preds = %638
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.2, i32 noundef 378, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

648:                                              ; preds = %646
  br label %649

649:                                              ; preds = %648, %631
  %650 = load i32, ptr %10, align 4, !tbaa !9
  %651 = load ptr, ptr %24, align 8, !tbaa !5
  %652 = load i32, ptr %14, align 4, !tbaa !9
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds i32, ptr %651, i64 %653
  store i32 %650, ptr %654, align 4, !tbaa !9
  %655 = load i32, ptr %14, align 4, !tbaa !9
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %14, align 4, !tbaa !9
  %657 = load ptr, ptr %25, align 8, !tbaa !5
  %658 = load i32, ptr %10, align 4, !tbaa !9
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds i32, ptr %657, i64 %659
  store i32 %655, ptr %660, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %649
  br label %662

662:                                              ; preds = %661
  %663 = load i32, ptr %10, align 4, !tbaa !9
  %664 = load ptr, ptr %27, align 8, !tbaa !5
  %665 = load i32, ptr %16, align 4, !tbaa !9
  %666 = add nsw i32 %665, 1
  store i32 %666, ptr %16, align 4, !tbaa !9
  %667 = sext i32 %665 to i64
  %668 = getelementptr inbounds i32, ptr %664, i64 %667
  store i32 %663, ptr %668, align 4, !tbaa !9
  %669 = load ptr, ptr %21, align 8, !tbaa !5
  %670 = load i32, ptr %10, align 4, !tbaa !9
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds i32, ptr %669, i64 %671
  store i32 2, ptr %672, align 4, !tbaa !9
  %673 = load ptr, ptr %19, align 8, !tbaa !5
  %674 = load i32, ptr %10, align 4, !tbaa !9
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i32, ptr %673, i64 %675
  %677 = load i32, ptr %676, align 4, !tbaa !9
  %678 = load ptr, ptr %22, align 8, !tbaa !5
  %679 = load i32, ptr %37, align 4, !tbaa !9
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds i32, ptr %678, i64 %680
  %682 = load i32, ptr %681, align 4, !tbaa !9
  %683 = sub nsw i32 %682, %677
  store i32 %683, ptr %681, align 4, !tbaa !9
  %684 = load ptr, ptr %30, align 8, !tbaa !5
  %685 = load i32, ptr %10, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds %struct.nrinfo_t, ptr %684, i64 %686
  %688 = getelementptr inbounds %struct.nrinfo_t, ptr %687, i32 0, i32 0
  %689 = getelementptr inbounds [2 x i32], ptr %688, i64 0, i64 0
  store ptr %689, ptr %23, align 8, !tbaa !5
  %690 = load ptr, ptr %23, align 8, !tbaa !5
  %691 = getelementptr inbounds i32, ptr %690, i64 1
  store i32 0, ptr %691, align 4, !tbaa !9
  %692 = load ptr, ptr %23, align 8, !tbaa !5
  %693 = getelementptr inbounds i32, ptr %692, i64 0
  store i32 0, ptr %693, align 4, !tbaa !9
  %694 = load ptr, ptr %18, align 8, !tbaa !5
  %695 = load i32, ptr %10, align 4, !tbaa !9
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds i32, ptr %694, i64 %696
  %698 = load i32, ptr %697, align 4, !tbaa !9
  store i32 %698, ptr %11, align 4, !tbaa !9
  %699 = load ptr, ptr %18, align 8, !tbaa !5
  %700 = load i32, ptr %10, align 4, !tbaa !9
  %701 = add nsw i32 %700, 1
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds i32, ptr %699, i64 %702
  %704 = load i32, ptr %703, align 4, !tbaa !9
  store i32 %704, ptr %17, align 4, !tbaa !9
  br label %705

705:                                              ; preds = %772, %662
  %706 = load i32, ptr %11, align 4, !tbaa !9
  %707 = load i32, ptr %17, align 4, !tbaa !9
  %708 = icmp slt i32 %706, %707
  br i1 %708, label %709, label %775

709:                                              ; preds = %705
  %710 = load ptr, ptr %20, align 8, !tbaa !5
  %711 = load i32, ptr %11, align 4, !tbaa !9
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds i32, ptr %710, i64 %712
  %714 = load i32, ptr %713, align 4, !tbaa !9
  store i32 %714, ptr %12, align 4, !tbaa !9
  %715 = load ptr, ptr %21, align 8, !tbaa !5
  %716 = load i32, ptr %12, align 4, !tbaa !9
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds i32, ptr %715, i64 %717
  %719 = load i32, ptr %718, align 4, !tbaa !9
  %720 = icmp ne i32 %719, 2
  br i1 %720, label %721, label %737

721:                                              ; preds = %709
  %722 = load ptr, ptr %19, align 8, !tbaa !5
  %723 = load i32, ptr %12, align 4, !tbaa !9
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %722, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !9
  %727 = load ptr, ptr %23, align 8, !tbaa !5
  %728 = load ptr, ptr %21, align 8, !tbaa !5
  %729 = load i32, ptr %12, align 4, !tbaa !9
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds i32, ptr %728, i64 %730
  %732 = load i32, ptr %731, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %727, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !9
  %736 = add nsw i32 %735, %726
  store i32 %736, ptr %734, align 4, !tbaa !9
  br label %771

737:                                              ; preds = %709
  %738 = load ptr, ptr %19, align 8, !tbaa !5
  %739 = load i32, ptr %10, align 4, !tbaa !9
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds i32, ptr %738, i64 %740
  %742 = load i32, ptr %741, align 4, !tbaa !9
  %743 = load ptr, ptr %30, align 8, !tbaa !5
  %744 = load i32, ptr %12, align 4, !tbaa !9
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds %struct.nrinfo_t, ptr %743, i64 %745
  %747 = getelementptr inbounds %struct.nrinfo_t, ptr %746, i32 0, i32 0
  %748 = load i32, ptr %37, align 4, !tbaa !9
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds [2 x i32], ptr %747, i64 0, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !9
  %752 = sub nsw i32 %751, %742
  store i32 %752, ptr %750, align 4, !tbaa !9
  %753 = load ptr, ptr %29, align 8, !tbaa !5
  %754 = load i32, ptr %12, align 4, !tbaa !9
  %755 = load ptr, ptr %19, align 8, !tbaa !5
  %756 = load i32, ptr %12, align 4, !tbaa !9
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds i32, ptr %755, i64 %757
  %759 = load i32, ptr %758, align 4, !tbaa !9
  %760 = load ptr, ptr %30, align 8, !tbaa !5
  %761 = load i32, ptr %12, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds %struct.nrinfo_t, ptr %760, i64 %762
  %764 = getelementptr inbounds %struct.nrinfo_t, ptr %763, i32 0, i32 0
  %765 = load i32, ptr %37, align 4, !tbaa !9
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds [2 x i32], ptr %764, i64 0, i64 %766
  %768 = load i32, ptr %767, align 4, !tbaa !9
  %769 = sub nsw i32 %759, %768
  %770 = sitofp i32 %769 to float
  call void @libmetis__rpqUpdate(ptr noundef %753, i32 noundef %754, float noundef %770)
  br label %771

771:                                              ; preds = %737, %721
  br label %772

772:                                              ; preds = %771
  %773 = load i32, ptr %11, align 4, !tbaa !9
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %11, align 4, !tbaa !9
  br label %705, !llvm.loop !35

775:                                              ; preds = %705
  %776 = load ptr, ptr %29, align 8, !tbaa !5
  %777 = load i32, ptr %10, align 4, !tbaa !9
  %778 = load ptr, ptr %19, align 8, !tbaa !5
  %779 = load i32, ptr %10, align 4, !tbaa !9
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds i32, ptr %778, i64 %780
  %782 = load i32, ptr %781, align 4, !tbaa !9
  %783 = load ptr, ptr %23, align 8, !tbaa !5
  %784 = load i32, ptr %37, align 4, !tbaa !9
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds i32, ptr %783, i64 %785
  %787 = load i32, ptr %786, align 4, !tbaa !9
  %788 = sub nsw i32 %782, %787
  %789 = sitofp i32 %788 to float
  %790 = call i32 @libmetis__rpqInsert(ptr noundef %776, i32 noundef %777, float noundef %789)
  br label %791

791:                                              ; preds = %775, %591
  br label %792

792:                                              ; preds = %791, %575
  br label %793

793:                                              ; preds = %792
  %794 = load i32, ptr %9, align 4, !tbaa !9
  %795 = add nsw i32 %794, 1
  store i32 %795, ptr %9, align 4, !tbaa !9
  br label %554, !llvm.loop !36

796:                                              ; preds = %554
  %797 = load i32, ptr %16, align 4, !tbaa !9
  %798 = load ptr, ptr %26, align 8, !tbaa !5
  %799 = load i32, ptr %15, align 4, !tbaa !9
  %800 = add nsw i32 %799, 1
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds i32, ptr %798, i64 %801
  store i32 %797, ptr %802, align 4, !tbaa !9
  %803 = load ptr, ptr %4, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.ctrl_t, ptr %803, i32 0, i32 2
  %805 = load i32, ptr %804, align 8, !tbaa !27
  %806 = and i32 %805, 2
  %807 = icmp ne i32 %806, 0
  br i1 %807, label %808, label %814

808:                                              ; preds = %796
  %809 = call double @gk_CPUSeconds()
  %810 = load ptr, ptr %4, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.ctrl_t, ptr %810, i32 0, i32 36
  %812 = load double, ptr %811, align 8, !tbaa !34
  %813 = fadd double %812, %809
  store double %813, ptr %811, align 8, !tbaa !34
  br label %814

814:                                              ; preds = %808, %796
  %815 = load ptr, ptr %4, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.ctrl_t, ptr %815, i32 0, i32 2
  %817 = load i32, ptr %816, align 8, !tbaa !27
  %818 = and i32 %817, 32
  %819 = icmp ne i32 %818, 0
  br i1 %819, label %820, label %855

820:                                              ; preds = %814
  %821 = load i32, ptr %31, align 4, !tbaa !9
  %822 = load i32, ptr %36, align 4, !tbaa !9
  %823 = load ptr, ptr %19, align 8, !tbaa !5
  %824 = load i32, ptr %31, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds i32, ptr %823, i64 %825
  %827 = load i32, ptr %826, align 4, !tbaa !9
  %828 = load ptr, ptr %30, align 8, !tbaa !5
  %829 = load i32, ptr %31, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds %struct.nrinfo_t, ptr %828, i64 %830
  %832 = getelementptr inbounds %struct.nrinfo_t, ptr %831, i32 0, i32 0
  %833 = load i32, ptr %37, align 4, !tbaa !9
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds [2 x i32], ptr %832, i64 0, i64 %834
  %836 = load i32, ptr %835, align 4, !tbaa !9
  %837 = sub nsw i32 %827, %836
  %838 = load ptr, ptr %19, align 8, !tbaa !5
  %839 = load i32, ptr %31, align 4, !tbaa !9
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds i32, ptr %838, i64 %840
  %842 = load i32, ptr %841, align 4, !tbaa !9
  %843 = load ptr, ptr %22, align 8, !tbaa !5
  %844 = getelementptr inbounds i32, ptr %843, i64 0
  %845 = load i32, ptr %844, align 4, !tbaa !9
  %846 = load ptr, ptr %22, align 8, !tbaa !5
  %847 = getelementptr inbounds i32, ptr %846, i64 1
  %848 = load i32, ptr %847, align 4, !tbaa !9
  %849 = load ptr, ptr %22, align 8, !tbaa !5
  %850 = getelementptr inbounds i32, ptr %849, i64 2
  %851 = load i32, ptr %850, align 4, !tbaa !9
  %852 = load i32, ptr %15, align 4, !tbaa !9
  %853 = load i32, ptr %38, align 4, !tbaa !9
  %854 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, i32 noundef %821, i32 noundef %822, i32 noundef %837, i32 noundef %842, i32 noundef %845, i32 noundef %848, i32 noundef %851, i32 noundef %852, i32 noundef %853)
  br label %855

855:                                              ; preds = %820, %814
  br label %856

856:                                              ; preds = %855
  %857 = load i32, ptr %15, align 4, !tbaa !9
  %858 = add nsw i32 %857, 1
  store i32 %858, ptr %15, align 4, !tbaa !9
  br label %289, !llvm.loop !37

859:                                              ; preds = %442, %350, %335, %297, %289
  %860 = load ptr, ptr %4, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.ctrl_t, ptr %860, i32 0, i32 2
  %862 = load i32, ptr %861, align 8, !tbaa !27
  %863 = and i32 %862, 2
  %864 = icmp ne i32 %863, 0
  br i1 %864, label %865, label %871

865:                                              ; preds = %859
  %866 = call double @gk_CPUSeconds()
  %867 = load ptr, ptr %4, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.ctrl_t, ptr %867, i32 0, i32 38
  %869 = load double, ptr %868, align 8, !tbaa !33
  %870 = fadd double %869, %866
  store double %870, ptr %868, align 8, !tbaa !33
  br label %871

871:                                              ; preds = %865, %859
  %872 = load ptr, ptr %4, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.ctrl_t, ptr %872, i32 0, i32 2
  %874 = load i32, ptr %873, align 8, !tbaa !27
  %875 = and i32 %874, 2
  %876 = icmp ne i32 %875, 0
  br i1 %876, label %877, label %883

877:                                              ; preds = %871
  %878 = call double @gk_CPUSeconds()
  %879 = load ptr, ptr %4, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.ctrl_t, ptr %879, i32 0, i32 37
  %881 = load double, ptr %880, align 8, !tbaa !38
  %882 = fsub double %881, %878
  store double %882, ptr %880, align 8, !tbaa !38
  br label %883

883:                                              ; preds = %877, %871
  %884 = load i32, ptr %15, align 4, !tbaa !9
  %885 = add nsw i32 %884, -1
  store i32 %885, ptr %15, align 4, !tbaa !9
  br label %886

886:                                              ; preds = %1230, %883
  %887 = load i32, ptr %15, align 4, !tbaa !9
  %888 = load i32, ptr %34, align 4, !tbaa !9
  %889 = icmp sgt i32 %887, %888
  br i1 %889, label %890, label %1233

890:                                              ; preds = %886
  %891 = load ptr, ptr %28, align 8, !tbaa !5
  %892 = load i32, ptr %15, align 4, !tbaa !9
  %893 = sext i32 %892 to i64
  %894 = getelementptr inbounds i32, ptr %891, i64 %893
  %895 = load i32, ptr %894, align 4, !tbaa !9
  store i32 %895, ptr %31, align 4, !tbaa !9
  %896 = load ptr, ptr %5, align 8, !tbaa !5
  %897 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %896)
  %898 = icmp ne i32 %897, 0
  br i1 %898, label %907, label %899

899:                                              ; preds = %890
  %900 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef 421, ptr noundef @.str.2)
  %901 = load ptr, ptr %5, align 8, !tbaa !5
  %902 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %901)
  %903 = icmp ne i32 %902, 0
  br i1 %903, label %904, label %905

904:                                              ; preds = %899
  br label %906

905:                                              ; preds = %899
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.2, i32 noundef 421, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

906:                                              ; preds = %904
  br label %907

907:                                              ; preds = %906, %890
  %908 = load ptr, ptr %21, align 8, !tbaa !5
  %909 = load i32, ptr %31, align 4, !tbaa !9
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds i32, ptr %908, i64 %910
  %912 = load i32, ptr %911, align 4, !tbaa !9
  %913 = load i32, ptr %36, align 4, !tbaa !9
  %914 = icmp eq i32 %912, %913
  br i1 %914, label %927, label %915

915:                                              ; preds = %907
  %916 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, i32 noundef 422, ptr noundef @.str.2)
  %917 = load ptr, ptr %21, align 8, !tbaa !5
  %918 = load i32, ptr %31, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds i32, ptr %917, i64 %919
  %921 = load i32, ptr %920, align 4, !tbaa !9
  %922 = load i32, ptr %36, align 4, !tbaa !9
  %923 = icmp eq i32 %921, %922
  br i1 %923, label %924, label %925

924:                                              ; preds = %915
  br label %926

925:                                              ; preds = %915
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.2, i32 noundef 422, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

926:                                              ; preds = %924
  br label %927

927:                                              ; preds = %926, %907
  br label %928

928:                                              ; preds = %927
  %929 = load ptr, ptr %19, align 8, !tbaa !5
  %930 = load i32, ptr %31, align 4, !tbaa !9
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds i32, ptr %929, i64 %931
  %933 = load i32, ptr %932, align 4, !tbaa !9
  %934 = load ptr, ptr %22, align 8, !tbaa !5
  %935 = getelementptr inbounds i32, ptr %934, i64 2
  %936 = load i32, ptr %935, align 4, !tbaa !9
  %937 = add nsw i32 %936, %933
  store i32 %937, ptr %935, align 4, !tbaa !9
  %938 = load ptr, ptr %19, align 8, !tbaa !5
  %939 = load i32, ptr %31, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i32, ptr %938, i64 %940
  %942 = load i32, ptr %941, align 4, !tbaa !9
  %943 = load ptr, ptr %22, align 8, !tbaa !5
  %944 = load i32, ptr %36, align 4, !tbaa !9
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds i32, ptr %943, i64 %945
  %947 = load i32, ptr %946, align 4, !tbaa !9
  %948 = sub nsw i32 %947, %942
  store i32 %948, ptr %946, align 4, !tbaa !9
  br label %949

949:                                              ; preds = %928
  br label %950

950:                                              ; preds = %949
  %951 = load ptr, ptr %21, align 8, !tbaa !5
  %952 = load i32, ptr %31, align 4, !tbaa !9
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds i32, ptr %951, i64 %953
  store i32 2, ptr %954, align 4, !tbaa !9
  br label %955

955:                                              ; preds = %950
  %956 = load ptr, ptr %25, align 8, !tbaa !5
  %957 = load i32, ptr %31, align 4, !tbaa !9
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds i32, ptr %956, i64 %958
  %960 = load i32, ptr %959, align 4, !tbaa !9
  %961 = icmp eq i32 %960, -1
  br i1 %961, label %973, label %962

962:                                              ; preds = %955
  %963 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 426, ptr noundef @.str.2)
  %964 = load ptr, ptr %25, align 8, !tbaa !5
  %965 = load i32, ptr %31, align 4, !tbaa !9
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds i32, ptr %964, i64 %966
  %968 = load i32, ptr %967, align 4, !tbaa !9
  %969 = icmp eq i32 %968, -1
  br i1 %969, label %970, label %971

970:                                              ; preds = %962
  br label %972

971:                                              ; preds = %962
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.2, i32 noundef 426, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

972:                                              ; preds = %970
  br label %973

973:                                              ; preds = %972, %955
  %974 = load i32, ptr %31, align 4, !tbaa !9
  %975 = load ptr, ptr %24, align 8, !tbaa !5
  %976 = load i32, ptr %14, align 4, !tbaa !9
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds i32, ptr %975, i64 %977
  store i32 %974, ptr %978, align 4, !tbaa !9
  %979 = load i32, ptr %14, align 4, !tbaa !9
  %980 = add nsw i32 %979, 1
  store i32 %980, ptr %14, align 4, !tbaa !9
  %981 = load ptr, ptr %25, align 8, !tbaa !5
  %982 = load i32, ptr %31, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds i32, ptr %981, i64 %983
  store i32 %979, ptr %984, align 4, !tbaa !9
  br label %985

985:                                              ; preds = %973
  br label %986

986:                                              ; preds = %985
  %987 = load ptr, ptr %30, align 8, !tbaa !5
  %988 = load i32, ptr %31, align 4, !tbaa !9
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds %struct.nrinfo_t, ptr %987, i64 %989
  %991 = getelementptr inbounds %struct.nrinfo_t, ptr %990, i32 0, i32 0
  %992 = getelementptr inbounds [2 x i32], ptr %991, i64 0, i64 0
  store ptr %992, ptr %23, align 8, !tbaa !5
  %993 = load ptr, ptr %23, align 8, !tbaa !5
  %994 = getelementptr inbounds i32, ptr %993, i64 1
  store i32 0, ptr %994, align 4, !tbaa !9
  %995 = load ptr, ptr %23, align 8, !tbaa !5
  %996 = getelementptr inbounds i32, ptr %995, i64 0
  store i32 0, ptr %996, align 4, !tbaa !9
  %997 = load ptr, ptr %18, align 8, !tbaa !5
  %998 = load i32, ptr %31, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds i32, ptr %997, i64 %999
  %1001 = load i32, ptr %1000, align 4, !tbaa !9
  store i32 %1001, ptr %9, align 4, !tbaa !9
  br label %1002

1002:                                             ; preds = %1056, %986
  %1003 = load i32, ptr %9, align 4, !tbaa !9
  %1004 = load ptr, ptr %18, align 8, !tbaa !5
  %1005 = load i32, ptr %31, align 4, !tbaa !9
  %1006 = add nsw i32 %1005, 1
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds i32, ptr %1004, i64 %1007
  %1009 = load i32, ptr %1008, align 4, !tbaa !9
  %1010 = icmp slt i32 %1003, %1009
  br i1 %1010, label %1011, label %1059

1011:                                             ; preds = %1002
  %1012 = load ptr, ptr %20, align 8, !tbaa !5
  %1013 = load i32, ptr %9, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds i32, ptr %1012, i64 %1014
  %1016 = load i32, ptr %1015, align 4, !tbaa !9
  store i32 %1016, ptr %10, align 4, !tbaa !9
  %1017 = load ptr, ptr %21, align 8, !tbaa !5
  %1018 = load i32, ptr %10, align 4, !tbaa !9
  %1019 = sext i32 %1018 to i64
  %1020 = getelementptr inbounds i32, ptr %1017, i64 %1019
  %1021 = load i32, ptr %1020, align 4, !tbaa !9
  %1022 = icmp eq i32 %1021, 2
  br i1 %1022, label %1023, label %1039

1023:                                             ; preds = %1011
  %1024 = load ptr, ptr %19, align 8, !tbaa !5
  %1025 = load i32, ptr %31, align 4, !tbaa !9
  %1026 = sext i32 %1025 to i64
  %1027 = getelementptr inbounds i32, ptr %1024, i64 %1026
  %1028 = load i32, ptr %1027, align 4, !tbaa !9
  %1029 = load ptr, ptr %30, align 8, !tbaa !5
  %1030 = load i32, ptr %10, align 4, !tbaa !9
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds %struct.nrinfo_t, ptr %1029, i64 %1031
  %1033 = getelementptr inbounds %struct.nrinfo_t, ptr %1032, i32 0, i32 0
  %1034 = load i32, ptr %36, align 4, !tbaa !9
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds [2 x i32], ptr %1033, i64 0, i64 %1035
  %1037 = load i32, ptr %1036, align 4, !tbaa !9
  %1038 = sub nsw i32 %1037, %1028
  store i32 %1038, ptr %1036, align 4, !tbaa !9
  br label %1055

1039:                                             ; preds = %1011
  %1040 = load ptr, ptr %19, align 8, !tbaa !5
  %1041 = load i32, ptr %10, align 4, !tbaa !9
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds i32, ptr %1040, i64 %1042
  %1044 = load i32, ptr %1043, align 4, !tbaa !9
  %1045 = load ptr, ptr %23, align 8, !tbaa !5
  %1046 = load ptr, ptr %21, align 8, !tbaa !5
  %1047 = load i32, ptr %10, align 4, !tbaa !9
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds i32, ptr %1046, i64 %1048
  %1050 = load i32, ptr %1049, align 4, !tbaa !9
  %1051 = sext i32 %1050 to i64
  %1052 = getelementptr inbounds i32, ptr %1045, i64 %1051
  %1053 = load i32, ptr %1052, align 4, !tbaa !9
  %1054 = add nsw i32 %1053, %1044
  store i32 %1054, ptr %1052, align 4, !tbaa !9
  br label %1055

1055:                                             ; preds = %1039, %1023
  br label %1056

1056:                                             ; preds = %1055
  %1057 = load i32, ptr %9, align 4, !tbaa !9
  %1058 = add nsw i32 %1057, 1
  store i32 %1058, ptr %9, align 4, !tbaa !9
  br label %1002, !llvm.loop !39

1059:                                             ; preds = %1002
  %1060 = load ptr, ptr %26, align 8, !tbaa !5
  %1061 = load i32, ptr %15, align 4, !tbaa !9
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds i32, ptr %1060, i64 %1062
  %1064 = load i32, ptr %1063, align 4, !tbaa !9
  store i32 %1064, ptr %9, align 4, !tbaa !9
  br label %1065

1065:                                             ; preds = %1226, %1059
  %1066 = load i32, ptr %9, align 4, !tbaa !9
  %1067 = load ptr, ptr %26, align 8, !tbaa !5
  %1068 = load i32, ptr %15, align 4, !tbaa !9
  %1069 = add nsw i32 %1068, 1
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds i32, ptr %1067, i64 %1070
  %1072 = load i32, ptr %1071, align 4, !tbaa !9
  %1073 = icmp slt i32 %1066, %1072
  br i1 %1073, label %1074, label %1229

1074:                                             ; preds = %1065
  %1075 = load ptr, ptr %27, align 8, !tbaa !5
  %1076 = load i32, ptr %9, align 4, !tbaa !9
  %1077 = sext i32 %1076 to i64
  %1078 = getelementptr inbounds i32, ptr %1075, i64 %1077
  %1079 = load i32, ptr %1078, align 4, !tbaa !9
  store i32 %1079, ptr %10, align 4, !tbaa !9
  %1080 = load ptr, ptr %21, align 8, !tbaa !5
  %1081 = load i32, ptr %10, align 4, !tbaa !9
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds i32, ptr %1080, i64 %1082
  %1084 = load i32, ptr %1083, align 4, !tbaa !9
  %1085 = icmp eq i32 %1084, 2
  br i1 %1085, label %1097, label %1086

1086:                                             ; preds = %1074
  %1087 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i32 noundef 441, ptr noundef @.str.2)
  %1088 = load ptr, ptr %21, align 8, !tbaa !5
  %1089 = load i32, ptr %10, align 4, !tbaa !9
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds i32, ptr %1088, i64 %1090
  %1092 = load i32, ptr %1091, align 4, !tbaa !9
  %1093 = icmp eq i32 %1092, 2
  br i1 %1093, label %1094, label %1095

1094:                                             ; preds = %1086
  br label %1096

1095:                                             ; preds = %1086
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 441, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

1096:                                             ; preds = %1094
  br label %1097

1097:                                             ; preds = %1096, %1074
  %1098 = load i32, ptr %37, align 4, !tbaa !9
  %1099 = load ptr, ptr %21, align 8, !tbaa !5
  %1100 = load i32, ptr %10, align 4, !tbaa !9
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds i32, ptr %1099, i64 %1101
  store i32 %1098, ptr %1102, align 4, !tbaa !9
  br label %1103

1103:                                             ; preds = %1097
  %1104 = load ptr, ptr %19, align 8, !tbaa !5
  %1105 = load i32, ptr %10, align 4, !tbaa !9
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds i32, ptr %1104, i64 %1106
  %1108 = load i32, ptr %1107, align 4, !tbaa !9
  %1109 = load ptr, ptr %22, align 8, !tbaa !5
  %1110 = load i32, ptr %37, align 4, !tbaa !9
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds i32, ptr %1109, i64 %1111
  %1113 = load i32, ptr %1112, align 4, !tbaa !9
  %1114 = add nsw i32 %1113, %1108
  store i32 %1114, ptr %1112, align 4, !tbaa !9
  %1115 = load ptr, ptr %19, align 8, !tbaa !5
  %1116 = load i32, ptr %10, align 4, !tbaa !9
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds i32, ptr %1115, i64 %1117
  %1119 = load i32, ptr %1118, align 4, !tbaa !9
  %1120 = load ptr, ptr %22, align 8, !tbaa !5
  %1121 = getelementptr inbounds i32, ptr %1120, i64 2
  %1122 = load i32, ptr %1121, align 4, !tbaa !9
  %1123 = sub nsw i32 %1122, %1119
  store i32 %1123, ptr %1121, align 4, !tbaa !9
  br label %1124

1124:                                             ; preds = %1103
  br label %1125

1125:                                             ; preds = %1124
  br label %1126

1126:                                             ; preds = %1125
  %1127 = load ptr, ptr %25, align 8, !tbaa !5
  %1128 = load i32, ptr %10, align 4, !tbaa !9
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds i32, ptr %1127, i64 %1129
  %1131 = load i32, ptr %1130, align 4, !tbaa !9
  %1132 = icmp ne i32 %1131, -1
  br i1 %1132, label %1144, label %1133

1133:                                             ; preds = %1126
  %1134 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef 444, ptr noundef @.str.2)
  %1135 = load ptr, ptr %25, align 8, !tbaa !5
  %1136 = load i32, ptr %10, align 4, !tbaa !9
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds i32, ptr %1135, i64 %1137
  %1139 = load i32, ptr %1138, align 4, !tbaa !9
  %1140 = icmp ne i32 %1139, -1
  br i1 %1140, label %1141, label %1142

1141:                                             ; preds = %1133
  br label %1143

1142:                                             ; preds = %1133
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.2, i32 noundef 444, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

1143:                                             ; preds = %1141
  br label %1144

1144:                                             ; preds = %1143, %1126
  %1145 = load ptr, ptr %24, align 8, !tbaa !5
  %1146 = load i32, ptr %14, align 4, !tbaa !9
  %1147 = add nsw i32 %1146, -1
  store i32 %1147, ptr %14, align 4, !tbaa !9
  %1148 = sext i32 %1147 to i64
  %1149 = getelementptr inbounds i32, ptr %1145, i64 %1148
  %1150 = load i32, ptr %1149, align 4, !tbaa !9
  %1151 = load ptr, ptr %24, align 8, !tbaa !5
  %1152 = load ptr, ptr %25, align 8, !tbaa !5
  %1153 = load i32, ptr %10, align 4, !tbaa !9
  %1154 = sext i32 %1153 to i64
  %1155 = getelementptr inbounds i32, ptr %1152, i64 %1154
  %1156 = load i32, ptr %1155, align 4, !tbaa !9
  %1157 = sext i32 %1156 to i64
  %1158 = getelementptr inbounds i32, ptr %1151, i64 %1157
  store i32 %1150, ptr %1158, align 4, !tbaa !9
  %1159 = load ptr, ptr %25, align 8, !tbaa !5
  %1160 = load i32, ptr %10, align 4, !tbaa !9
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr inbounds i32, ptr %1159, i64 %1161
  %1163 = load i32, ptr %1162, align 4, !tbaa !9
  %1164 = load ptr, ptr %25, align 8, !tbaa !5
  %1165 = load ptr, ptr %24, align 8, !tbaa !5
  %1166 = load i32, ptr %14, align 4, !tbaa !9
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds i32, ptr %1165, i64 %1167
  %1169 = load i32, ptr %1168, align 4, !tbaa !9
  %1170 = sext i32 %1169 to i64
  %1171 = getelementptr inbounds i32, ptr %1164, i64 %1170
  store i32 %1163, ptr %1171, align 4, !tbaa !9
  %1172 = load ptr, ptr %25, align 8, !tbaa !5
  %1173 = load i32, ptr %10, align 4, !tbaa !9
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds i32, ptr %1172, i64 %1174
  store i32 -1, ptr %1175, align 4, !tbaa !9
  br label %1176

1176:                                             ; preds = %1144
  br label %1177

1177:                                             ; preds = %1176
  %1178 = load ptr, ptr %18, align 8, !tbaa !5
  %1179 = load i32, ptr %10, align 4, !tbaa !9
  %1180 = sext i32 %1179 to i64
  %1181 = getelementptr inbounds i32, ptr %1178, i64 %1180
  %1182 = load i32, ptr %1181, align 4, !tbaa !9
  store i32 %1182, ptr %11, align 4, !tbaa !9
  %1183 = load ptr, ptr %18, align 8, !tbaa !5
  %1184 = load i32, ptr %10, align 4, !tbaa !9
  %1185 = add nsw i32 %1184, 1
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds i32, ptr %1183, i64 %1186
  %1188 = load i32, ptr %1187, align 4, !tbaa !9
  store i32 %1188, ptr %17, align 4, !tbaa !9
  br label %1189

1189:                                             ; preds = %1222, %1177
  %1190 = load i32, ptr %11, align 4, !tbaa !9
  %1191 = load i32, ptr %17, align 4, !tbaa !9
  %1192 = icmp slt i32 %1190, %1191
  br i1 %1192, label %1193, label %1225

1193:                                             ; preds = %1189
  %1194 = load ptr, ptr %20, align 8, !tbaa !5
  %1195 = load i32, ptr %11, align 4, !tbaa !9
  %1196 = sext i32 %1195 to i64
  %1197 = getelementptr inbounds i32, ptr %1194, i64 %1196
  %1198 = load i32, ptr %1197, align 4, !tbaa !9
  store i32 %1198, ptr %12, align 4, !tbaa !9
  %1199 = load ptr, ptr %21, align 8, !tbaa !5
  %1200 = load i32, ptr %12, align 4, !tbaa !9
  %1201 = sext i32 %1200 to i64
  %1202 = getelementptr inbounds i32, ptr %1199, i64 %1201
  %1203 = load i32, ptr %1202, align 4, !tbaa !9
  %1204 = icmp eq i32 %1203, 2
  br i1 %1204, label %1205, label %1221

1205:                                             ; preds = %1193
  %1206 = load ptr, ptr %19, align 8, !tbaa !5
  %1207 = load i32, ptr %10, align 4, !tbaa !9
  %1208 = sext i32 %1207 to i64
  %1209 = getelementptr inbounds i32, ptr %1206, i64 %1208
  %1210 = load i32, ptr %1209, align 4, !tbaa !9
  %1211 = load ptr, ptr %30, align 8, !tbaa !5
  %1212 = load i32, ptr %12, align 4, !tbaa !9
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds %struct.nrinfo_t, ptr %1211, i64 %1213
  %1215 = getelementptr inbounds %struct.nrinfo_t, ptr %1214, i32 0, i32 0
  %1216 = load i32, ptr %37, align 4, !tbaa !9
  %1217 = sext i32 %1216 to i64
  %1218 = getelementptr inbounds [2 x i32], ptr %1215, i64 0, i64 %1217
  %1219 = load i32, ptr %1218, align 4, !tbaa !9
  %1220 = add nsw i32 %1219, %1210
  store i32 %1220, ptr %1218, align 4, !tbaa !9
  br label %1221

1221:                                             ; preds = %1205, %1193
  br label %1222

1222:                                             ; preds = %1221
  %1223 = load i32, ptr %11, align 4, !tbaa !9
  %1224 = add nsw i32 %1223, 1
  store i32 %1224, ptr %11, align 4, !tbaa !9
  br label %1189, !llvm.loop !40

1225:                                             ; preds = %1189
  br label %1226

1226:                                             ; preds = %1225
  %1227 = load i32, ptr %9, align 4, !tbaa !9
  %1228 = add nsw i32 %1227, 1
  store i32 %1228, ptr %9, align 4, !tbaa !9
  br label %1065, !llvm.loop !41

1229:                                             ; preds = %1065
  br label %1230

1230:                                             ; preds = %1229
  %1231 = load i32, ptr %15, align 4, !tbaa !9
  %1232 = add nsw i32 %1231, -1
  store i32 %1232, ptr %15, align 4, !tbaa !9
  br label %886, !llvm.loop !42

1233:                                             ; preds = %886
  %1234 = load ptr, ptr %4, align 8, !tbaa !5
  %1235 = getelementptr inbounds %struct.ctrl_t, ptr %1234, i32 0, i32 2
  %1236 = load i32, ptr %1235, align 8, !tbaa !27
  %1237 = and i32 %1236, 2
  %1238 = icmp ne i32 %1237, 0
  br i1 %1238, label %1239, label %1245

1239:                                             ; preds = %1233
  %1240 = call double @gk_CPUSeconds()
  %1241 = load ptr, ptr %4, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.ctrl_t, ptr %1241, i32 0, i32 37
  %1243 = load double, ptr %1242, align 8, !tbaa !38
  %1244 = fadd double %1243, %1240
  store double %1244, ptr %1242, align 8, !tbaa !38
  br label %1245

1245:                                             ; preds = %1239, %1233
  %1246 = load i32, ptr %32, align 4, !tbaa !9
  %1247 = load ptr, ptr %22, align 8, !tbaa !5
  %1248 = getelementptr inbounds i32, ptr %1247, i64 2
  %1249 = load i32, ptr %1248, align 4, !tbaa !9
  %1250 = icmp eq i32 %1246, %1249
  br i1 %1250, label %1261, label %1251

1251:                                             ; preds = %1245
  %1252 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, i32 noundef 454, ptr noundef @.str.2)
  %1253 = load i32, ptr %32, align 4, !tbaa !9
  %1254 = load ptr, ptr %22, align 8, !tbaa !5
  %1255 = getelementptr inbounds i32, ptr %1254, i64 2
  %1256 = load i32, ptr %1255, align 4, !tbaa !9
  %1257 = icmp eq i32 %1253, %1256
  br i1 %1257, label %1258, label %1259

1258:                                             ; preds = %1251
  br label %1260

1259:                                             ; preds = %1251
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.2, i32 noundef 454, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

1260:                                             ; preds = %1258
  br label %1261

1261:                                             ; preds = %1260, %1245
  %1262 = load ptr, ptr %4, align 8, !tbaa !5
  %1263 = getelementptr inbounds %struct.ctrl_t, ptr %1262, i32 0, i32 2
  %1264 = load i32, ptr %1263, align 8, !tbaa !27
  %1265 = and i32 %1264, 8
  %1266 = icmp ne i32 %1265, 0
  br i1 %1266, label %1267, label %1278

1267:                                             ; preds = %1261
  %1268 = load i32, ptr %32, align 4, !tbaa !9
  %1269 = load i32, ptr %34, align 4, !tbaa !9
  %1270 = load ptr, ptr %22, align 8, !tbaa !5
  %1271 = getelementptr inbounds i32, ptr %1270, i64 0
  %1272 = load i32, ptr %1271, align 4, !tbaa !9
  %1273 = load ptr, ptr %22, align 8, !tbaa !5
  %1274 = getelementptr inbounds i32, ptr %1273, i64 1
  %1275 = load i32, ptr %1274, align 4, !tbaa !9
  %1276 = load i32, ptr %14, align 4, !tbaa !9
  %1277 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i32 noundef %1268, i32 noundef %1269, i32 noundef %1272, i32 noundef %1275, i32 noundef %1276)
  br label %1278

1278:                                             ; preds = %1267, %1261
  %1279 = load i32, ptr %32, align 4, !tbaa !9
  %1280 = load ptr, ptr %5, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.graph_t, ptr %1280, i32 0, i32 17
  store i32 %1279, ptr %1281, align 8, !tbaa !29
  %1282 = load i32, ptr %14, align 4, !tbaa !9
  %1283 = load ptr, ptr %5, align 8, !tbaa !5
  %1284 = getelementptr inbounds %struct.graph_t, ptr %1283, i32 0, i32 21
  store i32 %1282, ptr %1284, align 8, !tbaa !28
  %1285 = load i32, ptr %35, align 4, !tbaa !9
  %1286 = srem i32 %1285, 2
  %1287 = icmp eq i32 %1286, 1
  br i1 %1287, label %1288, label %1296

1288:                                             ; preds = %1278
  %1289 = load i32, ptr %34, align 4, !tbaa !9
  %1290 = icmp eq i32 %1289, -1
  br i1 %1290, label %1295, label %1291

1291:                                             ; preds = %1288
  %1292 = load i32, ptr %32, align 4, !tbaa !9
  %1293 = load i32, ptr %33, align 4, !tbaa !9
  %1294 = icmp sge i32 %1292, %1293
  br i1 %1294, label %1295, label %1296

1295:                                             ; preds = %1291, %1288
  br label %1300

1296:                                             ; preds = %1291, %1278
  br label %1297

1297:                                             ; preds = %1296
  %1298 = load i32, ptr %35, align 4, !tbaa !9
  %1299 = add nsw i32 %1298, 1
  store i32 %1299, ptr %35, align 4, !tbaa !9
  br label %140, !llvm.loop !43

1300:                                             ; preds = %1295, %140
  %1301 = load ptr, ptr %29, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1301)
  %1302 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1302)
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  ret void
}

declare double @gk_CPUSeconds() #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 = { 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nounwind }
attributes #6 = { noreturn nounwind }

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

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


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

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

@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [136 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [52 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided = external hidden unnamed_addr constant [67 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [20 x i8], align 1

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #0

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #0

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

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

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

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

declare i32 @libmetis__rpqInsert(ptr noundef, i32 noundef, float 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) #3

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: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeRefine1Sided(ptr noundef %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #4 {
  tail call void @libmetis__wspacepush(ptr noundef %0) #5
  %4 = load i32, ptr %1, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 16
  %6 = load ptr, ptr %5, align 8, !tbaa !11
  %7 = getelementptr inbounds i8, ptr %1, i64 40
  %8 = load ptr, ptr %7, align 8, !tbaa !12
  %9 = getelementptr inbounds i8, ptr %1, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %1, i64 152
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %1, i64 144
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %1, i64 120
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %1, i64 128
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %1, i64 192
  %20 = load ptr, ptr %19, align 8, !tbaa !18
  %21 = sext i32 %4 to i64
  %22 = tail call ptr @libmetis__rpqCreate(i64 noundef %21) #5
  %23 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %4) #5
  %24 = add nsw i32 %4, 1
  %25 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %24) #5
  %26 = shl nsw i32 %4, 1
  %27 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %26) #5
  %28 = getelementptr inbounds i8, ptr %0, i64 104
  %29 = load ptr, ptr %28, align 8, !tbaa !19
  %30 = load float, ptr %29, align 4, !tbaa !24
  %31 = fmul float %30, 5.000000e-01
  %32 = load i32, ptr %18, align 4, !tbaa !25
  %33 = getelementptr inbounds i8, ptr %18, i64 4
  %34 = load i32, ptr %33, align 4, !tbaa !25
  %35 = add nsw i32 %34, %32
  %36 = getelementptr inbounds i8, ptr %18, i64 8
  %37 = load i32, ptr %36, align 4, !tbaa !25
  %38 = add nsw i32 %35, %37
  %39 = sitofp i32 %38 to float
  %40 = fmul float %31, %39
  %41 = fptosi float %40 to i32
  %42 = getelementptr inbounds i8, ptr %0, i64 8
  %43 = load i32, ptr %42, align 8, !tbaa !26
  %44 = and i32 %43, 8
  %.not = icmp eq i32 %44, 0
  br i1 %.not, label %52, label %45

45:                                               ; preds = %3
  %46 = load i32, ptr %1, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %1, i64 136
  %48 = load i32, ptr %47, align 8, !tbaa !27
  %49 = getelementptr inbounds i8, ptr %1, i64 112
  %50 = load i32, ptr %49, align 8, !tbaa !28
  %51 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, i32 noundef %32, i32 noundef %34, i32 noundef %46, i32 noundef %48, i32 noundef %50)
  br label %52

52:                                               ; preds = %45, %3
  %53 = shl nsw i32 %2, 1
  %54 = icmp sgt i32 %2, 0
  br i1 %54, label %.lr.ph567, label %._crit_edge568

.lr.ph567:                                        ; preds = %52
  %55 = load i32, ptr %18, align 4, !tbaa !25
  %56 = load i32, ptr %33, align 4, !tbaa !25
  %57 = icmp slt i32 %55, %56
  %58 = zext i1 %57 to i32
  %59 = getelementptr inbounds i8, ptr %1, i64 112
  %60 = getelementptr inbounds i8, ptr %1, i64 136
  %61 = getelementptr inbounds i8, ptr %0, i64 52
  %62 = getelementptr inbounds i8, ptr %0, i64 224
  %63 = icmp sgt i32 %4, 0
  %64 = add nsw i32 %26, -1
  %65 = getelementptr inbounds i8, ptr %0, i64 208
  %66 = getelementptr inbounds i8, ptr %0, i64 216
  %wide.trip.count608 = zext nneg i32 %4 to i64
  %invariant.gep735 = getelementptr i8, ptr %8, i64 4
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph567
  %.0404565 = phi i32 [ %58, %.lr.ph567 ], [ %68, %.backedge.backedge ]
  %.0405564 = phi i32 [ 0, %.lr.ph567 ], [ %.0405564.be, %.backedge.backedge ]
  %67 = and i32 %.0404565, 1
  %68 = xor i32 %67, 1
  tail call void @libmetis__rpqReset(ptr noundef %22) #5
  %69 = load i32, ptr %59, align 8, !tbaa !28
  %70 = load i32, ptr %60, align 8, !tbaa !27
  tail call void @libmetis__irandArrayPermute(i32 noundef %70, ptr noundef %23, i32 noundef %70, i32 noundef 1) #5
  %71 = icmp sgt i32 %70, 0
  br i1 %71, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.backedge
  %72 = zext nneg i32 %.0404565 to i64
  %invariant.gep = getelementptr [2 x i32], ptr %20, i64 0, i64 %72
  %wide.trip.count = zext nneg i32 %70 to i64
  br label %73

73:                                               ; preds = %.lr.ph, %88
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %88 ]
  %74 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv
  %75 = load i32, ptr %74, align 4, !tbaa !25
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds i32, ptr %12, i64 %76
  %78 = load i32, ptr %77, align 4, !tbaa !25
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %16, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !25
  %82 = icmp eq i32 %81, 2
  br i1 %82, label %88, label %83

83:                                               ; preds = %73
  %84 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef 315, ptr noundef nonnull @.str.2)
  %85 = load i32, ptr %80, align 4, !tbaa !25
  %86 = icmp eq i32 %85, 2
  br i1 %86, label %88, label %87

87:                                               ; preds = %83
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 315, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

88:                                               ; preds = %83, %73
  %89 = getelementptr inbounds i32, ptr %10, i64 %79
  %90 = load i32, ptr %89, align 4, !tbaa !25
  %gep = getelementptr %struct.nrinfo_t, ptr %invariant.gep, i64 %79
  %91 = load i32, ptr %gep, align 4, !tbaa !25
  %92 = sub nsw i32 %90, %91
  %93 = sitofp i32 %92 to float
  %94 = tail call i32 @libmetis__rpqInsert(ptr noundef %22, i32 noundef %78, float noundef %93) #5
  %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 %73, !llvm.loop !29

._crit_edge:                                      ; preds = %88, %.backedge
  %95 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %70) #5
  %.not426 = icmp eq i32 %95, 0
  br i1 %.not426, label %96, label %100

96:                                               ; preds = %._crit_edge
  %97 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef 319, ptr noundef nonnull @.str.2)
  %98 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %70) #5
  %.not427 = icmp eq i32 %98, 0
  br i1 %.not427, label %99, label %100

99:                                               ; preds = %96
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, i32 noundef 319, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

100:                                              ; preds = %96, %._crit_edge
  %101 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #5
  %.not428 = icmp eq i32 %101, 0
  br i1 %.not428, label %102, label %106

102:                                              ; preds = %100
  %103 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef 320, ptr noundef nonnull @.str.2)
  %104 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #5
  %.not429 = icmp eq i32 %104, 0
  br i1 %.not429, label %105, label %106

105:                                              ; preds = %102
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.2, i32 noundef 320, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

106:                                              ; preds = %102, %100
  %107 = load i32, ptr %61, align 4, !tbaa !31
  %.not430 = icmp eq i32 %107, 0
  %108 = icmp sgt i32 %70, 99
  %. = select i1 %.not430, i32 3, i32 5
  %.659 = select i1 %.not430, i32 300, i32 500
  %109 = mul nsw i32 %70, %.
  %110 = select i1 %108, i32 %.659, i32 %109
  %111 = load i32, ptr %42, align 8, !tbaa !26
  %112 = and i32 %111, 2
  %.not431 = icmp eq i32 %112, 0
  br i1 %.not431, label %117, label %113

113:                                              ; preds = %106
  %114 = tail call double @gk_CPUSeconds() #5
  %115 = load double, ptr %62, align 8, !tbaa !32
  %116 = fsub double %115, %114
  store double %116, ptr %62, align 8, !tbaa !32
  br label %117

117:                                              ; preds = %113, %106
  store i32 0, ptr %25, align 4, !tbaa !25
  br i1 %63, label %.lr.ph517, label %.loopexit456

.lr.ph517:                                        ; preds = %117
  %118 = load i32, ptr %18, align 4, !tbaa !25
  %119 = load i32, ptr %33, align 4, !tbaa !25
  %120 = sub nsw i32 %118, %119
  %121 = tail call i32 @llvm.abs.i32(i32 %120, i1 true)
  %122 = zext nneg i32 %68 to i64
  %123 = getelementptr inbounds i32, ptr %18, i64 %122
  %124 = zext nneg i32 %.0404565 to i64
  %invariant.gep537 = getelementptr [2 x i32], ptr %20, i64 0, i64 %124
  %125 = getelementptr inbounds i32, ptr %18, i64 %124
  %126 = mul nsw i32 %110, 3
  %invariant.gep501 = getelementptr [2 x i32], ptr %20, i64 0, i64 %122
  br label %127

127:                                              ; preds = %.lr.ph517, %305
  %indvars.iv605 = phi i64 [ 0, %.lr.ph517 ], [ %indvars.iv.next606, %305 ]
  %.0400515 = phi i32 [ %121, %.lr.ph517 ], [ %.1401, %305 ]
  %.0406514 = phi i32 [ -1, %.lr.ph517 ], [ %.1407, %305 ]
  %.0408513 = phi i32 [ %70, %.lr.ph517 ], [ %.1409.lcssa, %305 ]
  %.0411512 = phi i32 [ %69, %.lr.ph517 ], [ %.1412, %305 ]
  %.0415510 = phi i32 [ 0, %.lr.ph517 ], [ %.1416.lcssa, %305 ]
  %128 = tail call i32 @libmetis__rpqGetTop(ptr noundef %22) #5
  %129 = icmp eq i32 %128, -1
  %130 = trunc nuw nsw i64 %indvars.iv605 to i32
  br i1 %129, label %.loopexit456, label %131

131:                                              ; preds = %127
  %132 = sext i32 %128 to i64
  %133 = getelementptr inbounds i32, ptr %14, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !25
  %.not432 = icmp eq i32 %134, -1
  br i1 %.not432, label %135, label %139

135:                                              ; preds = %131
  %136 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 334, ptr noundef nonnull @.str.2)
  %137 = load i32, ptr %133, align 4, !tbaa !25
  %.not433 = icmp eq i32 %137, -1
  br i1 %.not433, label %138, label %139

138:                                              ; preds = %135
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 334, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

139:                                              ; preds = %135, %131
  %140 = getelementptr i32, ptr %6, i64 %132
  %141 = getelementptr i8, ptr %140, i64 4
  %142 = load i32, ptr %141, align 4, !tbaa !25
  %143 = add nsw i32 %142, %.0415510
  %144 = load i32, ptr %140, align 4, !tbaa !25
  %145 = sub i32 %143, %144
  %.not434 = icmp slt i32 %145, %64
  br i1 %.not434, label %146, label %.loopexit456

146:                                              ; preds = %139
  %147 = load i32, ptr %123, align 4, !tbaa !25
  %148 = getelementptr inbounds i32, ptr %10, i64 %132
  %149 = load i32, ptr %148, align 4, !tbaa !25
  %150 = add nsw i32 %149, %147
  %151 = icmp sgt i32 %150, %41
  br i1 %151, label %.loopexit456, label %152

152:                                              ; preds = %146
  %gep538 = getelementptr %struct.nrinfo_t, ptr %invariant.gep537, i64 %132
  %153 = load i32, ptr %gep538, align 4, !tbaa !25
  %.neg = sub i32 %153, %149
  %154 = load i32, ptr %36, align 4, !tbaa !25
  %155 = add i32 %.neg, %154
  store i32 %155, ptr %36, align 4, !tbaa !25
  %156 = load i32, ptr %148, align 4, !tbaa !25
  %157 = load i32, ptr %125, align 4, !tbaa !25
  %158 = load i32, ptr %gep538, align 4, !tbaa !25
  %.neg435 = add i32 %156, %147
  %159 = sub i32 %.neg435, %157
  %160 = add i32 %159, %158
  %161 = tail call i32 @llvm.abs.i32(i32 %160, i1 true)
  %162 = icmp slt i32 %155, %.0411512
  br i1 %162, label %179, label %163

163:                                              ; preds = %152
  %164 = icmp eq i32 %155, %.0411512
  %165 = icmp slt i32 %161, %.0400515
  %or.cond = select i1 %164, i1 %165, i1 false
  br i1 %or.cond, label %179, label %166

166:                                              ; preds = %163
  %167 = sub nsw i32 %130, %.0406514
  %168 = icmp sgt i32 %167, %126
  br i1 %168, label %176, label %169

169:                                              ; preds = %166
  %170 = icmp sgt i32 %167, %110
  br i1 %170, label %171, label %179

171:                                              ; preds = %169
  %172 = sitofp i32 %155 to double
  %173 = sitofp i32 %.0411512 to double
  %174 = fmul double %173, 1.100000e+00
  %175 = fcmp olt double %174, %172
  br i1 %175, label %176, label %179

176:                                              ; preds = %171, %166
  %177 = add i32 %156, %155
  %178 = sub i32 %177, %158
  store i32 %178, ptr %36, align 4, !tbaa !25
  br label %.loopexit456

179:                                              ; preds = %152, %163, %171, %169
  %.1412 = phi i32 [ %.0411512, %171 ], [ %.0411512, %169 ], [ %.0411512, %163 ], [ %155, %152 ]
  %.1407 = phi i32 [ %.0406514, %171 ], [ %.0406514, %169 ], [ %130, %163 ], [ %130, %152 ]
  %.1401 = phi i32 [ %.0400515, %171 ], [ %.0400515, %169 ], [ %161, %163 ], [ %161, %152 ]
  %180 = load i32, ptr %133, align 4, !tbaa !25
  %.not436 = icmp eq i32 %180, -1
  br i1 %.not436, label %181, label %185

181:                                              ; preds = %179
  %182 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 360, ptr noundef nonnull @.str.2)
  %183 = load i32, ptr %133, align 4, !tbaa !25
  %.not437 = icmp eq i32 %183, -1
  br i1 %.not437, label %184, label %185

184:                                              ; preds = %181
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 360, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

185:                                              ; preds = %181, %179
  %186 = phi i32 [ %183, %181 ], [ %180, %179 ]
  %187 = add nsw i32 %.0408513, -1
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %12, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !25
  %191 = sext i32 %186 to i64
  %192 = getelementptr inbounds i32, ptr %12, i64 %191
  store i32 %190, ptr %192, align 4, !tbaa !25
  %193 = load i32, ptr %133, align 4, !tbaa !25
  %194 = sext i32 %190 to i64
  %195 = getelementptr inbounds i32, ptr %14, i64 %194
  store i32 %193, ptr %195, align 4, !tbaa !25
  store i32 -1, ptr %133, align 4, !tbaa !25
  %196 = load i32, ptr %148, align 4, !tbaa !25
  %197 = load i32, ptr %123, align 4, !tbaa !25
  %198 = add nsw i32 %197, %196
  store i32 %198, ptr %123, align 4, !tbaa !25
  %199 = getelementptr inbounds i32, ptr %16, i64 %132
  store i32 %68, ptr %199, align 4, !tbaa !25
  %200 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv605
  store i32 %128, ptr %200, align 4, !tbaa !25
  %201 = load i32, ptr %42, align 8, !tbaa !26
  %202 = and i32 %201, 2
  %.not438 = icmp eq i32 %202, 0
  br i1 %.not438, label %207, label %203

203:                                              ; preds = %185
  %204 = tail call double @gk_CPUSeconds() #5
  %205 = load double, ptr %65, align 8, !tbaa !33
  %206 = fsub double %205, %204
  store double %206, ptr %65, align 8, !tbaa !33
  br label %207

207:                                              ; preds = %203, %185
  %208 = load i32, ptr %140, align 4, !tbaa !25
  %209 = load i32, ptr %141, align 4, !tbaa !25
  %210 = icmp slt i32 %208, %209
  br i1 %210, label %.lr.ph507.preheader, label %._crit_edge508

.lr.ph507.preheader:                              ; preds = %207
  %211 = sext i32 %208 to i64
  br label %.lr.ph507

.lr.ph507:                                        ; preds = %.lr.ph507.preheader, %283
  %indvars.iv602 = phi i64 [ %211, %.lr.ph507.preheader ], [ %indvars.iv.next603, %283 ]
  %.1409504 = phi i32 [ %187, %.lr.ph507.preheader ], [ %.2410, %283 ]
  %.1416503 = phi i32 [ %.0415510, %.lr.ph507.preheader ], [ %.2417, %283 ]
  %212 = getelementptr inbounds i32, ptr %8, i64 %indvars.iv602
  %213 = load i32, ptr %212, align 4, !tbaa !25
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds i32, ptr %16, i64 %214
  %216 = load i32, ptr %215, align 4, !tbaa !25
  %217 = icmp eq i32 %216, 2
  br i1 %217, label %218, label %222

218:                                              ; preds = %.lr.ph507
  %219 = load i32, ptr %148, align 4, !tbaa !25
  %gep502 = getelementptr %struct.nrinfo_t, ptr %invariant.gep501, i64 %214
  %220 = load i32, ptr %gep502, align 4, !tbaa !25
  %221 = add nsw i32 %220, %219
  store i32 %221, ptr %gep502, align 4, !tbaa !25
  br label %283

222:                                              ; preds = %.lr.ph507
  %223 = icmp eq i32 %216, %.0404565
  br i1 %223, label %224, label %283

224:                                              ; preds = %222
  %225 = getelementptr inbounds i32, ptr %14, i64 %214
  %226 = load i32, ptr %225, align 4, !tbaa !25
  %227 = icmp eq i32 %226, -1
  br i1 %227, label %237, label %228

228:                                              ; preds = %224
  %229 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef 377, ptr noundef nonnull @.str.2)
  %230 = load i32, ptr %225, align 4, !tbaa !25
  %231 = load i32, ptr %215, align 4, !tbaa !25
  %232 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %213, i32 noundef %230, i32 noundef %231)
  %233 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %234 = load i32, ptr %225, align 4, !tbaa !25
  %235 = icmp eq i32 %234, -1
  br i1 %235, label %237, label %236

236:                                              ; preds = %228
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.2, i32 noundef 377, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

237:                                              ; preds = %228, %224
  %238 = sext i32 %.1409504 to i64
  %239 = getelementptr inbounds i32, ptr %12, i64 %238
  store i32 %213, ptr %239, align 4, !tbaa !25
  %240 = add nsw i32 %.1409504, 1
  store i32 %.1409504, ptr %225, align 4, !tbaa !25
  %241 = add nsw i32 %.1416503, 1
  %242 = sext i32 %.1416503 to i64
  %243 = getelementptr inbounds i32, ptr %27, i64 %242
  store i32 %213, ptr %243, align 4, !tbaa !25
  store i32 2, ptr %215, align 4, !tbaa !25
  %244 = getelementptr inbounds i32, ptr %10, i64 %214
  %245 = load i32, ptr %244, align 4, !tbaa !25
  %246 = load i32, ptr %125, align 4, !tbaa !25
  %247 = sub nsw i32 %246, %245
  store i32 %247, ptr %125, align 4, !tbaa !25
  %248 = getelementptr inbounds %struct.nrinfo_t, ptr %20, i64 %214
  %249 = getelementptr inbounds i8, ptr %248, i64 4
  store i32 0, ptr %249, align 4, !tbaa !25
  store i32 0, ptr %248, align 4, !tbaa !25
  %250 = getelementptr inbounds i32, ptr %6, i64 %214
  %251 = load i32, ptr %250, align 4, !tbaa !25
  %252 = getelementptr i8, ptr %250, i64 4
  %253 = load i32, ptr %252, align 4, !tbaa !25
  %254 = icmp slt i32 %251, %253
  br i1 %254, label %.lr.ph499.preheader, label %._crit_edge500

.lr.ph499.preheader:                              ; preds = %237
  %255 = sext i32 %251 to i64
  br label %.lr.ph499

.lr.ph499:                                        ; preds = %.lr.ph499.preheader, %276
  %indvars.iv598 = phi i64 [ %255, %.lr.ph499.preheader ], [ %indvars.iv.next599, %276 ]
  %256 = getelementptr inbounds i32, ptr %8, i64 %indvars.iv598
  %257 = load i32, ptr %256, align 4, !tbaa !25
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds i32, ptr %16, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !25
  %.not441 = icmp eq i32 %260, 2
  br i1 %.not441, label %268, label %261

261:                                              ; preds = %.lr.ph499
  %262 = getelementptr inbounds i32, ptr %10, i64 %258
  %263 = load i32, ptr %262, align 4, !tbaa !25
  %264 = sext i32 %260 to i64
  %265 = getelementptr inbounds i32, ptr %248, i64 %264
  %266 = load i32, ptr %265, align 4, !tbaa !25
  %267 = add nsw i32 %266, %263
  store i32 %267, ptr %265, align 4, !tbaa !25
  br label %276

268:                                              ; preds = %.lr.ph499
  %269 = load i32, ptr %244, align 4, !tbaa !25
  %gep496 = getelementptr %struct.nrinfo_t, ptr %invariant.gep537, i64 %258
  %270 = load i32, ptr %gep496, align 4, !tbaa !25
  %271 = sub nsw i32 %270, %269
  store i32 %271, ptr %gep496, align 4, !tbaa !25
  %272 = getelementptr inbounds i32, ptr %10, i64 %258
  %273 = load i32, ptr %272, align 4, !tbaa !25
  %274 = sub nsw i32 %273, %271
  %275 = sitofp i32 %274 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %22, i32 noundef %257, float noundef %275) #5
  br label %276

276:                                              ; preds = %261, %268
  %indvars.iv.next599 = add nsw i64 %indvars.iv598, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next599 to i32
  %exitcond601.not = icmp eq i32 %253, %lftr.wideiv
  br i1 %exitcond601.not, label %._crit_edge500, label %.lr.ph499, !llvm.loop !34

._crit_edge500:                                   ; preds = %276, %237
  %277 = load i32, ptr %244, align 4, !tbaa !25
  %278 = getelementptr inbounds i32, ptr %248, i64 %124
  %279 = load i32, ptr %278, align 4, !tbaa !25
  %280 = sub nsw i32 %277, %279
  %281 = sitofp i32 %280 to float
  %282 = tail call i32 @libmetis__rpqInsert(ptr noundef %22, i32 noundef %213, float noundef %281) #5
  br label %283

283:                                              ; preds = %218, %._crit_edge500, %222
  %.2417 = phi i32 [ %.1416503, %218 ], [ %241, %._crit_edge500 ], [ %.1416503, %222 ]
  %.2410 = phi i32 [ %.1409504, %218 ], [ %240, %._crit_edge500 ], [ %.1409504, %222 ]
  %indvars.iv.next603 = add nsw i64 %indvars.iv602, 1
  %284 = load i32, ptr %141, align 4, !tbaa !25
  %285 = sext i32 %284 to i64
  %286 = icmp slt i64 %indvars.iv.next603, %285
  br i1 %286, label %.lr.ph507, label %._crit_edge508, !llvm.loop !35

._crit_edge508:                                   ; preds = %283, %207
  %.1416.lcssa = phi i32 [ %.0415510, %207 ], [ %.2417, %283 ]
  %.1409.lcssa = phi i32 [ %187, %207 ], [ %.2410, %283 ]
  %indvars.iv.next606 = add nuw nsw i64 %indvars.iv605, 1
  %287 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv.next606
  store i32 %.1416.lcssa, ptr %287, align 4, !tbaa !25
  %288 = load i32, ptr %42, align 8, !tbaa !26
  %289 = and i32 %288, 2
  %.not439 = icmp eq i32 %289, 0
  br i1 %.not439, label %294, label %290

290:                                              ; preds = %._crit_edge508
  %291 = tail call double @gk_CPUSeconds() #5
  %292 = load double, ptr %65, align 8, !tbaa !33
  %293 = fadd double %291, %292
  store double %293, ptr %65, align 8, !tbaa !33
  %.pre = load i32, ptr %42, align 8, !tbaa !26
  br label %294

294:                                              ; preds = %290, %._crit_edge508
  %295 = phi i32 [ %.pre, %290 ], [ %288, %._crit_edge508 ]
  %296 = and i32 %295, 32
  %.not440 = icmp eq i32 %296, 0
  br i1 %.not440, label %305, label %297

297:                                              ; preds = %294
  %298 = load i32, ptr %148, align 4, !tbaa !25
  %299 = load i32, ptr %gep538, align 4, !tbaa !25
  %300 = sub nsw i32 %298, %299
  %301 = load i32, ptr %18, align 4, !tbaa !25
  %302 = load i32, ptr %33, align 4, !tbaa !25
  %303 = load i32, ptr %36, align 4, !tbaa !25
  %304 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, i32 noundef %128, i32 noundef %68, i32 noundef %300, i32 noundef %298, i32 noundef %301, i32 noundef %302, i32 noundef %303, i32 noundef %130, i32 noundef %110)
  br label %305

305:                                              ; preds = %294, %297
  %exitcond609.not = icmp eq i64 %indvars.iv.next606, %wide.trip.count608
  br i1 %exitcond609.not, label %.loopexit456, label %127, !llvm.loop !36

.loopexit456:                                     ; preds = %305, %127, %139, %146, %117, %176
  %.0413478 = phi i32 [ %130, %176 ], [ 0, %117 ], [ %4, %305 ], [ %130, %127 ], [ %130, %139 ], [ %130, %146 ]
  %.0411473 = phi i32 [ %.0411512, %176 ], [ %69, %117 ], [ %.1412, %305 ], [ %.0411512, %127 ], [ %.0411512, %139 ], [ %.0411512, %146 ]
  %.0408468 = phi i32 [ %.0408513, %176 ], [ %70, %117 ], [ %.1409.lcssa, %305 ], [ %.0408513, %127 ], [ %.0408513, %139 ], [ %.0408513, %146 ]
  %.0406463 = phi i32 [ %.0406514, %176 ], [ -1, %117 ], [ %.1407, %305 ], [ %.0406514, %127 ], [ %.0406514, %139 ], [ %.0406514, %146 ]
  %306 = load i32, ptr %42, align 8, !tbaa !26
  %307 = and i32 %306, 2
  %.not442 = icmp eq i32 %307, 0
  br i1 %.not442, label %.thread, label %308

308:                                              ; preds = %.loopexit456
  %309 = tail call double @gk_CPUSeconds() #5
  %310 = load double, ptr %62, align 8, !tbaa !32
  %311 = fadd double %309, %310
  store double %311, ptr %62, align 8, !tbaa !32
  %.pre628 = load i32, ptr %42, align 8, !tbaa !26
  %.pre629 = and i32 %.pre628, 2
  %.not443 = icmp eq i32 %.pre629, 0
  br i1 %.not443, label %.thread, label %312

312:                                              ; preds = %308
  %313 = tail call double @gk_CPUSeconds() #5
  %314 = load double, ptr %66, align 8, !tbaa !37
  %315 = fsub double %314, %313
  store double %315, ptr %66, align 8, !tbaa !37
  br label %.thread

.thread:                                          ; preds = %.loopexit456, %312, %308
  %.1414556 = add nsw i32 %.0413478, -1
  %316 = icmp sgt i32 %.1414556, %.0406463
  br i1 %316, label %.lr.ph561, label %._crit_edge562

.lr.ph561:                                        ; preds = %.thread
  %317 = zext nneg i32 %68 to i64
  %318 = getelementptr inbounds i32, ptr %18, i64 %317
  %invariant.gep539 = getelementptr [2 x i32], ptr %20, i64 0, i64 %317
  %319 = zext nneg i32 %.0404565 to i64
  %320 = getelementptr inbounds i32, ptr %18, i64 %319
  %invariant.gep545 = getelementptr [2 x i32], ptr %20, i64 0, i64 %319
  %321 = sext i32 %.1414556 to i64
  %322 = sext i32 %.0406463 to i64
  br label %326

.loopexit.loopexit:                               ; preds = %._crit_edge550
  %323 = trunc nsw i64 %indvars.iv.next621 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %._crit_edge544
  %.4.lcssa = phi i32 [ %363, %._crit_edge544 ], [ %323, %.loopexit.loopexit ]
  %indvars.iv.next626 = add nsw i64 %indvars.iv625, -1
  %324 = icmp sgt i64 %indvars.iv.next626, %322
  %325 = trunc nsw i64 %indvars.iv625 to i32
  br i1 %324, label %326, label %._crit_edge562, !llvm.loop !38

326:                                              ; preds = %.lr.ph561, %.loopexit
  %indvars.iv625 = phi i64 [ %321, %.lr.ph561 ], [ %indvars.iv.next626, %.loopexit ]
  %.3558 = phi i32 [ %.0408468, %.lr.ph561 ], [ %.4.lcssa, %.loopexit ]
  %.1414.in557 = phi i32 [ %.0413478, %.lr.ph561 ], [ %325, %.loopexit ]
  %327 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv625
  %328 = load i32, ptr %327, align 4, !tbaa !25
  %329 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #5
  %.not448 = icmp eq i32 %329, 0
  br i1 %.not448, label %330, label %334

330:                                              ; preds = %326
  %331 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef 421, ptr noundef nonnull @.str.2)
  %332 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #5
  %.not449 = icmp eq i32 %332, 0
  br i1 %.not449, label %333, label %334

333:                                              ; preds = %330
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.2, i32 noundef 421, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

334:                                              ; preds = %330, %326
  %335 = sext i32 %328 to i64
  %336 = getelementptr inbounds i32, ptr %16, i64 %335
  %337 = load i32, ptr %336, align 4, !tbaa !25
  %338 = icmp eq i32 %337, %68
  br i1 %338, label %344, label %339

339:                                              ; preds = %334
  %340 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, i32 noundef 422, ptr noundef nonnull @.str.2)
  %341 = load i32, ptr %336, align 4, !tbaa !25
  %342 = icmp eq i32 %341, %68
  br i1 %342, label %344, label %343

343:                                              ; preds = %339
  tail call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.2, i32 noundef 422, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

344:                                              ; preds = %334, %339
  %345 = getelementptr inbounds i32, ptr %10, i64 %335
  %346 = load i32, ptr %345, align 4, !tbaa !25
  %347 = load i32, ptr %36, align 4, !tbaa !25
  %348 = add nsw i32 %347, %346
  store i32 %348, ptr %36, align 4, !tbaa !25
  %349 = load i32, ptr %345, align 4, !tbaa !25
  %350 = load i32, ptr %318, align 4, !tbaa !25
  %351 = sub nsw i32 %350, %349
  store i32 %351, ptr %318, align 4, !tbaa !25
  store i32 2, ptr %336, align 4, !tbaa !25
  %352 = getelementptr inbounds i32, ptr %14, i64 %335
  %353 = load i32, ptr %352, align 4, !tbaa !25
  %354 = icmp eq i32 %353, -1
  br i1 %354, label %360, label %355

355:                                              ; preds = %344
  %356 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 426, ptr noundef nonnull @.str.2)
  %357 = load i32, ptr %352, align 4, !tbaa !25
  %358 = icmp eq i32 %357, -1
  br i1 %358, label %360, label %359

359:                                              ; preds = %355
  tail call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.2, i32 noundef 426, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

360:                                              ; preds = %355, %344
  %361 = sext i32 %.3558 to i64
  %362 = getelementptr inbounds i32, ptr %12, i64 %361
  store i32 %328, ptr %362, align 4, !tbaa !25
  %363 = add i32 %.3558, 1
  store i32 %.3558, ptr %352, align 4, !tbaa !25
  %364 = getelementptr inbounds %struct.nrinfo_t, ptr %20, i64 %335
  %365 = getelementptr inbounds i8, ptr %364, i64 4
  store i32 0, ptr %365, align 4, !tbaa !25
  store i32 0, ptr %364, align 4, !tbaa !25
  %366 = getelementptr inbounds i32, ptr %6, i64 %335
  %367 = load i32, ptr %366, align 4, !tbaa !25
  %368 = getelementptr i8, ptr %366, i64 4
  %369 = load i32, ptr %368, align 4, !tbaa !25
  %370 = icmp slt i32 %367, %369
  br i1 %370, label %.lr.ph543.preheader, label %._crit_edge544

.lr.ph543.preheader:                              ; preds = %360
  %371 = sext i32 %367 to i64
  br label %.lr.ph543

.lr.ph543:                                        ; preds = %.lr.ph543.preheader, %389
  %indvars.iv610 = phi i64 [ %371, %.lr.ph543.preheader ], [ %indvars.iv.next611, %389 ]
  %372 = getelementptr inbounds i32, ptr %8, i64 %indvars.iv610
  %373 = load i32, ptr %372, align 4, !tbaa !25
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %16, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !25
  %377 = icmp eq i32 %376, 2
  br i1 %377, label %378, label %382

378:                                              ; preds = %.lr.ph543
  %379 = load i32, ptr %345, align 4, !tbaa !25
  %gep540 = getelementptr %struct.nrinfo_t, ptr %invariant.gep539, i64 %374
  %380 = load i32, ptr %gep540, align 4, !tbaa !25
  %381 = sub nsw i32 %380, %379
  store i32 %381, ptr %gep540, align 4, !tbaa !25
  br label %389

382:                                              ; preds = %.lr.ph543
  %383 = getelementptr inbounds i32, ptr %10, i64 %374
  %384 = load i32, ptr %383, align 4, !tbaa !25
  %385 = sext i32 %376 to i64
  %386 = getelementptr inbounds i32, ptr %364, i64 %385
  %387 = load i32, ptr %386, align 4, !tbaa !25
  %388 = add nsw i32 %387, %384
  store i32 %388, ptr %386, align 4, !tbaa !25
  br label %389

389:                                              ; preds = %378, %382
  %indvars.iv.next611 = add nsw i64 %indvars.iv610, 1
  %390 = load i32, ptr %368, align 4, !tbaa !25
  %391 = sext i32 %390 to i64
  %392 = icmp slt i64 %indvars.iv.next611, %391
  br i1 %392, label %.lr.ph543, label %._crit_edge544, !llvm.loop !39

._crit_edge544:                                   ; preds = %389, %360
  %393 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv625
  %394 = load i32, ptr %393, align 4, !tbaa !25
  %395 = sext i32 %.1414.in557 to i64
  %396 = getelementptr inbounds i32, ptr %25, i64 %395
  %397 = load i32, ptr %396, align 4, !tbaa !25
  %398 = icmp slt i32 %394, %397
  br i1 %398, label %.lr.ph554.preheader, label %.loopexit

.lr.ph554.preheader:                              ; preds = %._crit_edge544
  %399 = sext i32 %394 to i64
  %400 = sext i32 %363 to i64
  br label %.lr.ph554

.lr.ph554:                                        ; preds = %.lr.ph554.preheader, %._crit_edge550
  %indvars.iv620 = phi i64 [ %400, %.lr.ph554.preheader ], [ %indvars.iv.next621, %._crit_edge550 ]
  %indvars.iv618 = phi i64 [ %399, %.lr.ph554.preheader ], [ %indvars.iv.next619, %._crit_edge550 ]
  %401 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv618
  %402 = load i32, ptr %401, align 4, !tbaa !25
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds i32, ptr %16, i64 %403
  %405 = load i32, ptr %404, align 4, !tbaa !25
  %406 = icmp eq i32 %405, 2
  br i1 %406, label %412, label %407

407:                                              ; preds = %.lr.ph554
  %408 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i32 noundef 441, ptr noundef nonnull @.str.2)
  %409 = load i32, ptr %404, align 4, !tbaa !25
  %410 = icmp eq i32 %409, 2
  br i1 %410, label %412, label %411

411:                                              ; preds = %407
  tail call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 441, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

412:                                              ; preds = %407, %.lr.ph554
  store i32 %.0404565, ptr %404, align 4, !tbaa !25
  %413 = getelementptr inbounds i32, ptr %10, i64 %403
  %414 = load i32, ptr %413, align 4, !tbaa !25
  %415 = load i32, ptr %320, align 4, !tbaa !25
  %416 = add nsw i32 %415, %414
  store i32 %416, ptr %320, align 4, !tbaa !25
  %417 = load i32, ptr %413, align 4, !tbaa !25
  %418 = load i32, ptr %36, align 4, !tbaa !25
  %419 = sub nsw i32 %418, %417
  store i32 %419, ptr %36, align 4, !tbaa !25
  %420 = getelementptr inbounds i32, ptr %14, i64 %403
  %421 = load i32, ptr %420, align 4, !tbaa !25
  %.not450 = icmp eq i32 %421, -1
  br i1 %.not450, label %422, label %426

422:                                              ; preds = %412
  %423 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef 444, ptr noundef nonnull @.str.2)
  %424 = load i32, ptr %420, align 4, !tbaa !25
  %.not451 = icmp eq i32 %424, -1
  br i1 %.not451, label %425, label %426

425:                                              ; preds = %422
  tail call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.2, i32 noundef 444, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

426:                                              ; preds = %422, %412
  %427 = phi i32 [ %424, %422 ], [ %421, %412 ]
  %indvars.iv.next621 = add nsw i64 %indvars.iv620, -1
  %428 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv.next621
  %429 = load i32, ptr %428, align 4, !tbaa !25
  %430 = sext i32 %427 to i64
  %431 = getelementptr inbounds i32, ptr %12, i64 %430
  store i32 %429, ptr %431, align 4, !tbaa !25
  %432 = load i32, ptr %420, align 4, !tbaa !25
  %433 = sext i32 %429 to i64
  %434 = getelementptr inbounds i32, ptr %14, i64 %433
  store i32 %432, ptr %434, align 4, !tbaa !25
  store i32 -1, ptr %420, align 4, !tbaa !25
  %435 = getelementptr inbounds i32, ptr %6, i64 %403
  %436 = load i32, ptr %435, align 4, !tbaa !25
  %437 = getelementptr i8, ptr %435, i64 4
  %438 = load i32, ptr %437, align 4, !tbaa !25
  %439 = icmp slt i32 %436, %438
  br i1 %439, label %.lr.ph549.preheader, label %._crit_edge550

.lr.ph549.preheader:                              ; preds = %426
  %440 = sext i32 %436 to i64
  %wide.trip.count616 = sext i32 %438 to i64
  %441 = sub nsw i64 %wide.trip.count616, %440
  %xtraiter = and i64 %441, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph549.prol.loopexit, label %.lr.ph549.prol

.lr.ph549.prol:                                   ; preds = %.lr.ph549.preheader
  %442 = getelementptr inbounds i32, ptr %8, i64 %440
  %443 = load i32, ptr %442, align 4, !tbaa !25
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %16, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !25
  %447 = icmp eq i32 %446, 2
  br i1 %447, label %448, label %.lr.ph549.prol.loopexit.unr-lcssa

448:                                              ; preds = %.lr.ph549.prol
  %449 = load i32, ptr %413, align 4, !tbaa !25
  %gep546.prol = getelementptr %struct.nrinfo_t, ptr %invariant.gep545, i64 %444
  %450 = load i32, ptr %gep546.prol, align 4, !tbaa !25
  %451 = add nsw i32 %450, %449
  store i32 %451, ptr %gep546.prol, align 4, !tbaa !25
  br label %.lr.ph549.prol.loopexit.unr-lcssa

.lr.ph549.prol.loopexit.unr-lcssa:                ; preds = %448, %.lr.ph549.prol
  %indvars.iv.next614.prol = add nsw i64 %440, 1
  br label %.lr.ph549.prol.loopexit

.lr.ph549.prol.loopexit:                          ; preds = %.lr.ph549.prol.loopexit.unr-lcssa, %.lr.ph549.preheader
  %indvars.iv613.unr = phi i64 [ %440, %.lr.ph549.preheader ], [ %indvars.iv.next614.prol, %.lr.ph549.prol.loopexit.unr-lcssa ]
  %452 = add nsw i64 %wide.trip.count616, -1
  %453 = icmp eq i64 %452, %440
  br i1 %453, label %._crit_edge550, label %.lr.ph549

.lr.ph549:                                        ; preds = %.lr.ph549.prol.loopexit, %473
  %indvars.iv613 = phi i64 [ %indvars.iv.next614.1, %473 ], [ %indvars.iv613.unr, %.lr.ph549.prol.loopexit ]
  %454 = getelementptr inbounds i32, ptr %8, i64 %indvars.iv613
  %455 = load i32, ptr %454, align 4, !tbaa !25
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds i32, ptr %16, i64 %456
  %458 = load i32, ptr %457, align 4, !tbaa !25
  %459 = icmp eq i32 %458, 2
  br i1 %459, label %460, label %.lr.ph549.1

460:                                              ; preds = %.lr.ph549
  %461 = load i32, ptr %413, align 4, !tbaa !25
  %gep546 = getelementptr %struct.nrinfo_t, ptr %invariant.gep545, i64 %456
  %462 = load i32, ptr %gep546, align 4, !tbaa !25
  %463 = add nsw i32 %462, %461
  store i32 %463, ptr %gep546, align 4, !tbaa !25
  br label %.lr.ph549.1

.lr.ph549.1:                                      ; preds = %.lr.ph549, %460
  %gep736 = getelementptr i32, ptr %invariant.gep735, i64 %indvars.iv613
  %464 = load i32, ptr %gep736, align 4, !tbaa !25
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds i32, ptr %16, i64 %465
  %467 = load i32, ptr %466, align 4, !tbaa !25
  %468 = icmp eq i32 %467, 2
  br i1 %468, label %469, label %473

469:                                              ; preds = %.lr.ph549.1
  %470 = load i32, ptr %413, align 4, !tbaa !25
  %gep546.1 = getelementptr %struct.nrinfo_t, ptr %invariant.gep545, i64 %465
  %471 = load i32, ptr %gep546.1, align 4, !tbaa !25
  %472 = add nsw i32 %471, %470
  store i32 %472, ptr %gep546.1, align 4, !tbaa !25
  br label %473

473:                                              ; preds = %469, %.lr.ph549.1
  %indvars.iv.next614.1 = add nsw i64 %indvars.iv613, 2
  %exitcond617.not.1 = icmp eq i64 %indvars.iv.next614.1, %wide.trip.count616
  br i1 %exitcond617.not.1, label %._crit_edge550, label %.lr.ph549, !llvm.loop !40

._crit_edge550:                                   ; preds = %.lr.ph549.prol.loopexit, %473, %426
  %indvars.iv.next619 = add nsw i64 %indvars.iv618, 1
  %474 = load i32, ptr %396, align 4, !tbaa !25
  %475 = sext i32 %474 to i64
  %476 = icmp slt i64 %indvars.iv.next619, %475
  br i1 %476, label %.lr.ph554, label %.loopexit.loopexit, !llvm.loop !41

._crit_edge562:                                   ; preds = %.loopexit, %.thread
  %.3.lcssa = phi i32 [ %.0408468, %.thread ], [ %.4.lcssa, %.loopexit ]
  %477 = load i32, ptr %42, align 8, !tbaa !26
  %478 = and i32 %477, 2
  %.not444 = icmp eq i32 %478, 0
  br i1 %.not444, label %483, label %479

479:                                              ; preds = %._crit_edge562
  %480 = tail call double @gk_CPUSeconds() #5
  %481 = load double, ptr %66, align 8, !tbaa !37
  %482 = fadd double %480, %481
  store double %482, ptr %66, align 8, !tbaa !37
  br label %483

483:                                              ; preds = %479, %._crit_edge562
  %484 = load i32, ptr %36, align 4, !tbaa !25
  %485 = icmp eq i32 %.0411473, %484
  br i1 %485, label %491, label %486

486:                                              ; preds = %483
  %487 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, i32 noundef 454, ptr noundef nonnull @.str.2)
  %488 = load i32, ptr %36, align 4, !tbaa !25
  %489 = icmp eq i32 %.0411473, %488
  br i1 %489, label %491, label %490

490:                                              ; preds = %486
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.2, i32 noundef 454, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine1Sided) #6
  unreachable

491:                                              ; preds = %486, %483
  %492 = load i32, ptr %42, align 8, !tbaa !26
  %493 = and i32 %492, 8
  %.not445 = icmp eq i32 %493, 0
  br i1 %.not445, label %498, label %494

494:                                              ; preds = %491
  %495 = load i32, ptr %18, align 4, !tbaa !25
  %496 = load i32, ptr %33, align 4, !tbaa !25
  %497 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i32 noundef %.0411473, i32 noundef %.0406463, i32 noundef %495, i32 noundef %496, i32 noundef %.3.lcssa)
  br label %498

498:                                              ; preds = %494, %491
  store i32 %.0411473, ptr %59, align 8, !tbaa !28
  store i32 %.3.lcssa, ptr %60, align 8, !tbaa !27
  %499 = and i32 %.0405564, 1
  %.not446 = icmp eq i32 %499, 0
  br i1 %.not446, label %504, label %500

500:                                              ; preds = %498
  %501 = icmp ne i32 %.0406463, -1
  %.not447 = icmp slt i32 %.0411473, %69
  %or.cond452 = select i1 %501, i1 %.not447, i1 false
  %502 = add nuw nsw i32 %.0405564, 1
  %503 = icmp slt i32 %502, %53
  %or.cond571 = select i1 %or.cond452, i1 %503, i1 false
  br i1 %or.cond571, label %.backedge.backedge, label %._crit_edge568

504:                                              ; preds = %498
  %.old = or disjoint i32 %.0405564, 1
  %.old570 = icmp slt i32 %.old, %53
  br i1 %.old570, label %.backedge.backedge, label %._crit_edge568

.backedge.backedge:                               ; preds = %504, %500
  %.0405564.be = phi i32 [ %.old, %504 ], [ %502, %500 ]
  br label %.backedge, !llvm.loop !42

._crit_edge568:                                   ; preds = %504, %500, %52
  tail call void @libmetis__rpqDestroy(ptr noundef %22) #5
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #5
  ret void
}

declare double @gk_CPUSeconds() local_unnamed_addr #0

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 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #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, !7, i64 0}
!6 = !{!"graph_t", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 116, !10, i64 120, !10, i64 128, !7, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !10, i64 16}
!12 = !{!6, !10, i64 40}
!13 = !{!6, !10, i64 24}
!14 = !{!6, !10, i64 152}
!15 = !{!6, !10, i64 144}
!16 = !{!6, !10, i64 120}
!17 = !{!6, !10, i64 128}
!18 = !{!6, !10, i64 192}
!19 = !{!20, !10, i64 104}
!20 = !{!"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, !21, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !21, i64 128, !22, i64 136, !22, i64 144, !22, i64 152, !22, i64 160, !22, i64 168, !22, i64 176, !22, i64 184, !22, i64 192, !22, i64 200, !22, i64 208, !22, i64 216, !22, i64 224, !10, i64 232, !23, i64 240, !23, i64 248, !23, 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}
!21 = !{!"float", !8, i64 0}
!22 = !{!"double", !8, i64 0}
!23 = !{!"long", !8, i64 0}
!24 = !{!21, !21, i64 0}
!25 = !{!7, !7, i64 0}
!26 = !{!20, !7, i64 8}
!27 = !{!6, !7, i64 136}
!28 = !{!6, !7, i64 112}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!20, !7, i64 52}
!32 = !{!20, !22, i64 224}
!33 = !{!20, !22, i64 208}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = !{!20, !22, i64 216}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !30}
!40 = distinct !{!40, !30}
!41 = distinct !{!41, !30}
!42 = distinct !{!42, !30}


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