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

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

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

@.str.4 = external hidden unnamed_addr constant [141 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [49 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP = external hidden unnamed_addr constant [85 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [55 x i8], align 1

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

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

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

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

declare void @libmetis__wspacepush(ptr noundef) #1

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

declare ptr @libmetis__rpqCreate(i64 noundef) #1

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

declare void @libmetis__rpqReset(ptr noundef) #1

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

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

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

104:                                              ; preds = %5
  %105 = load ptr, ptr %25, align 8, !tbaa !5
  %106 = getelementptr inbounds i32, ptr %105, i64 0
  %107 = load i32, ptr %106, align 4, !tbaa !11
  %108 = load ptr, ptr %25, align 8, !tbaa !5
  %109 = getelementptr inbounds i32, ptr %108, i64 1
  %110 = load i32, ptr %109, align 4, !tbaa !11
  %111 = load ptr, ptr %7, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.graph_t, ptr %111, i32 0, i32 0
  %113 = load i32, ptr %112, align 8, !tbaa !13
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.graph_t, ptr %114, i32 0, i32 21
  %116 = load i32, ptr %115, align 8, !tbaa !27
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.graph_t, ptr %117, i32 0, i32 17
  %119 = load i32, ptr %118, align 8, !tbaa !28
  %120 = call i32 (ptr, ...) @printf(ptr noundef @.str.31, i32 noundef %107, i32 noundef %110, i32 noundef %113, i32 noundef %116, i32 noundef %119)
  br label %121

121:                                              ; preds = %104, %5
  %122 = load float, ptr %9, align 4, !tbaa !9
  %123 = load ptr, ptr %25, align 8, !tbaa !5
  %124 = getelementptr inbounds i32, ptr %123, i64 0
  %125 = load i32, ptr %124, align 4, !tbaa !11
  %126 = load ptr, ptr %25, align 8, !tbaa !5
  %127 = getelementptr inbounds i32, ptr %126, i64 1
  %128 = load i32, ptr %127, align 4, !tbaa !11
  %129 = icmp sge i32 %125, %128
  br i1 %129, label %130, label %134

130:                                              ; preds = %121
  %131 = load ptr, ptr %25, align 8, !tbaa !5
  %132 = getelementptr inbounds i32, ptr %131, i64 0
  %133 = load i32, ptr %132, align 4, !tbaa !11
  br label %138

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

138:                                              ; preds = %134, %130
  %139 = phi i32 [ %133, %130 ], [ %137, %134 ]
  %140 = sitofp i32 %139 to float
  %141 = fmul float %122, %140
  %142 = fptosi float %141 to i32
  store i32 %142, ptr %44, align 4, !tbaa !11
  store i32 0, ptr %40, align 4, !tbaa !11
  br label %143

143:                                              ; preds = %1516, %138
  %144 = load i32, ptr %40, align 4, !tbaa !11
  %145 = load i32, ptr %10, align 4, !tbaa !11
  %146 = icmp slt i32 %144, %145
  br i1 %146, label %147, label %1519

147:                                              ; preds = %143
  %148 = load i32, ptr %17, align 4, !tbaa !11
  %149 = sext i32 %148 to i64
  %150 = load ptr, ptr %31, align 8, !tbaa !5
  %151 = call ptr @libmetis__iset(i64 noundef %149, i32 noundef -1, ptr noundef %150)
  %152 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 0
  %153 = load ptr, ptr %152, align 16, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %153)
  %154 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 1
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %155)
  store i32 -1, ptr %39, align 4, !tbaa !11
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.graph_t, ptr %156, i32 0, i32 17
  %158 = load i32, ptr %157, align 8, !tbaa !28
  store i32 %158, ptr %37, align 4, !tbaa !11
  store i32 %158, ptr %38, align 4, !tbaa !11
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.graph_t, ptr %159, i32 0, i32 21
  %161 = load i32, ptr %160, align 8, !tbaa !27
  store i32 %161, ptr %18, align 4, !tbaa !11
  %162 = load i32, ptr %18, align 4, !tbaa !11
  %163 = load ptr, ptr %32, align 8, !tbaa !5
  %164 = load i32, ptr %18, align 4, !tbaa !11
  call void @libmetis__irandArrayPermute(i32 noundef %162, ptr noundef %163, i32 noundef %164, i32 noundef 1)
  store i32 0, ptr %12, align 4, !tbaa !11
  br label %165

165:                                              ; preds = %297, %147
  %166 = load i32, ptr %12, align 4, !tbaa !11
  %167 = load i32, ptr %18, align 4, !tbaa !11
  %168 = icmp slt i32 %166, %167
  br i1 %168, label %169, label %300

169:                                              ; preds = %165
  %170 = load ptr, ptr %27, align 8, !tbaa !5
  %171 = load ptr, ptr %32, align 8, !tbaa !5
  %172 = load i32, ptr %12, align 4, !tbaa !11
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %171, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !11
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i32, ptr %170, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !11
  store i32 %178, ptr %11, align 4, !tbaa !11
  %179 = load ptr, ptr %24, align 8, !tbaa !5
  %180 = load i32, ptr %11, align 4, !tbaa !11
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %179, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !11
  %184 = icmp eq i32 %183, 2
  br i1 %184, label %196, label %185

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

193:                                              ; preds = %185
  br label %195

194:                                              ; preds = %185
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.4, i32 noundef 519, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

195:                                              ; preds = %193
  br label %196

196:                                              ; preds = %195, %169
  %197 = load ptr, ptr %8, align 8, !tbaa !5
  %198 = load i32, ptr %11, align 4, !tbaa !11
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i32, ptr %197, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !11
  %202 = icmp eq i32 %201, -1
  br i1 %202, label %203, label %244

203:                                              ; preds = %196
  %204 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 0
  %205 = load ptr, ptr %204, align 16, !tbaa !5
  %206 = load i32, ptr %11, align 4, !tbaa !11
  %207 = load ptr, ptr %22, align 8, !tbaa !5
  %208 = load i32, ptr %11, align 4, !tbaa !11
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i32, ptr %207, i64 %209
  %211 = load i32, ptr %210, align 4, !tbaa !11
  %212 = load ptr, ptr %34, align 8, !tbaa !5
  %213 = load i32, ptr %11, align 4, !tbaa !11
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds %struct.nrinfo_t, ptr %212, i64 %214
  %216 = getelementptr inbounds %struct.nrinfo_t, ptr %215, i32 0, i32 0
  %217 = getelementptr inbounds [2 x i32], ptr %216, i64 0, i64 1
  %218 = load i32, ptr %217, align 4, !tbaa !11
  %219 = sub nsw i32 %211, %218
  %220 = sitofp i32 %219 to float
  %221 = call i32 @libmetis__rpqInsert(ptr noundef %205, i32 noundef %206, float noundef %220)
  %222 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 1
  %223 = load ptr, ptr %222, align 8, !tbaa !5
  %224 = load i32, ptr %11, align 4, !tbaa !11
  %225 = load ptr, ptr %22, align 8, !tbaa !5
  %226 = load i32, ptr %11, align 4, !tbaa !11
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds i32, ptr %225, i64 %227
  %229 = load i32, ptr %228, align 4, !tbaa !11
  %230 = load ptr, ptr %34, align 8, !tbaa !5
  %231 = load i32, ptr %11, align 4, !tbaa !11
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds %struct.nrinfo_t, ptr %230, i64 %232
  %234 = getelementptr inbounds %struct.nrinfo_t, ptr %233, i32 0, i32 0
  %235 = getelementptr inbounds [2 x i32], ptr %234, i64 0, i64 0
  %236 = load i32, ptr %235, align 4, !tbaa !11
  %237 = sub nsw i32 %229, %236
  %238 = sitofp i32 %237 to float
  %239 = call i32 @libmetis__rpqInsert(ptr noundef %223, i32 noundef %224, float noundef %238)
  %240 = load ptr, ptr %31, align 8, !tbaa !5
  %241 = load i32, ptr %11, align 4, !tbaa !11
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds i32, ptr %240, i64 %242
  store i32 -5, ptr %243, align 4, !tbaa !11
  br label %296

244:                                              ; preds = %196
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = load i32, ptr %11, align 4, !tbaa !11
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %245, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !11
  %250 = icmp ne i32 %249, 2
  br i1 %250, label %251, label %295

251:                                              ; preds = %244
  %252 = load ptr, ptr %8, align 8, !tbaa !5
  %253 = load i32, ptr %11, align 4, !tbaa !11
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds i32, ptr %252, i64 %254
  %256 = load i32, ptr %255, align 4, !tbaa !11
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 %257
  %259 = load ptr, ptr %258, align 8, !tbaa !5
  %260 = load i32, ptr %11, align 4, !tbaa !11
  %261 = load ptr, ptr %22, align 8, !tbaa !5
  %262 = load i32, ptr %11, align 4, !tbaa !11
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %261, i64 %263
  %265 = load i32, ptr %264, align 4, !tbaa !11
  %266 = load ptr, ptr %34, align 8, !tbaa !5
  %267 = load i32, ptr %11, align 4, !tbaa !11
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds %struct.nrinfo_t, ptr %266, i64 %268
  %270 = getelementptr inbounds %struct.nrinfo_t, ptr %269, i32 0, i32 0
  %271 = load ptr, ptr %8, align 8, !tbaa !5
  %272 = load i32, ptr %11, align 4, !tbaa !11
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i32, ptr %271, i64 %273
  %275 = load i32, ptr %274, align 4, !tbaa !11
  %276 = add nsw i32 %275, 1
  %277 = srem i32 %276, 2
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds [2 x i32], ptr %270, i64 0, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !11
  %281 = sub nsw i32 %265, %280
  %282 = sitofp i32 %281 to float
  %283 = call i32 @libmetis__rpqInsert(ptr noundef %259, i32 noundef %260, float noundef %282)
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = load i32, ptr %11, align 4, !tbaa !11
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i32, ptr %284, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !11
  %289 = add nsw i32 10, %288
  %290 = sub nsw i32 0, %289
  %291 = load ptr, ptr %31, align 8, !tbaa !5
  %292 = load i32, ptr %11, align 4, !tbaa !11
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %291, i64 %293
  store i32 %290, ptr %294, align 4, !tbaa !11
  br label %295

295:                                              ; preds = %251, %244
  br label %296

296:                                              ; preds = %295, %203
  br label %297

297:                                              ; preds = %296
  %298 = load i32, ptr %12, align 4, !tbaa !11
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %12, align 4, !tbaa !11
  br label %165, !llvm.loop !29

300:                                              ; preds = %165
  %301 = load ptr, ptr %7, align 8, !tbaa !5
  %302 = load i32, ptr %18, align 4, !tbaa !11
  %303 = call i32 @libmetis__CheckNodeBnd(ptr noundef %301, i32 noundef %302)
  %304 = icmp ne i32 %303, 0
  br i1 %304, label %314, label %305

305:                                              ; preds = %300
  %306 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 531, ptr noundef @.str.4)
  %307 = load ptr, ptr %7, align 8, !tbaa !5
  %308 = load i32, ptr %18, align 4, !tbaa !11
  %309 = call i32 @libmetis__CheckNodeBnd(ptr noundef %307, i32 noundef %308)
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %312

311:                                              ; preds = %305
  br label %313

312:                                              ; preds = %305
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 531, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

313:                                              ; preds = %311
  br label %314

314:                                              ; preds = %313, %300
  %315 = load ptr, ptr %7, align 8, !tbaa !5
  %316 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %315)
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %326, label %318

318:                                              ; preds = %314
  %319 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef 532, ptr noundef @.str.4)
  %320 = load ptr, ptr %7, align 8, !tbaa !5
  %321 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %320)
  %322 = icmp ne i32 %321, 0
  br i1 %322, label %323, label %324

323:                                              ; preds = %318
  br label %325

324:                                              ; preds = %318
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 532, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

325:                                              ; preds = %323
  br label %326

326:                                              ; preds = %325, %314
  %327 = load i32, ptr %18, align 4, !tbaa !11
  store i32 %327, ptr %43, align 4, !tbaa !11
  store i32 0, ptr %20, align 4, !tbaa !11
  %328 = load ptr, ptr %29, align 8, !tbaa !5
  %329 = getelementptr inbounds i32, ptr %328, i64 0
  store i32 0, ptr %329, align 4, !tbaa !11
  %330 = load ptr, ptr %25, align 8, !tbaa !5
  %331 = getelementptr inbounds i32, ptr %330, i64 0
  %332 = load i32, ptr %331, align 4, !tbaa !11
  %333 = load ptr, ptr %25, align 8, !tbaa !5
  %334 = getelementptr inbounds i32, ptr %333, i64 1
  %335 = load i32, ptr %334, align 4, !tbaa !11
  %336 = sub nsw i32 %332, %335
  %337 = call i32 @llvm.abs.i32(i32 %336, i1 true)
  store i32 %337, ptr %45, align 4, !tbaa !11
  %338 = load ptr, ptr %25, align 8, !tbaa !5
  %339 = getelementptr inbounds i32, ptr %338, i64 0
  %340 = load i32, ptr %339, align 4, !tbaa !11
  %341 = load ptr, ptr %25, align 8, !tbaa !5
  %342 = getelementptr inbounds i32, ptr %341, i64 1
  %343 = load i32, ptr %342, align 4, !tbaa !11
  %344 = icmp slt i32 %340, %343
  %345 = zext i1 %344 to i64
  %346 = select i1 %344, i32 0, i32 1
  store i32 %346, ptr %41, align 4, !tbaa !11
  store i32 0, ptr %19, align 4, !tbaa !11
  br label %347

347:                                              ; preds = %1128, %326
  %348 = load i32, ptr %19, align 4, !tbaa !11
  %349 = load i32, ptr %17, align 4, !tbaa !11
  %350 = icmp slt i32 %348, %349
  br i1 %350, label %351, label %1131

351:                                              ; preds = %347
  %352 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 0
  %353 = load ptr, ptr %352, align 16, !tbaa !5
  %354 = call i32 @libmetis__rpqSeeTopVal(ptr noundef %353)
  %355 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  store i32 %354, ptr %355, align 4, !tbaa !11
  %356 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 1
  %357 = load ptr, ptr %356, align 8, !tbaa !5
  %358 = call i32 @libmetis__rpqSeeTopVal(ptr noundef %357)
  %359 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  store i32 %358, ptr %359, align 4, !tbaa !11
  %360 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  %361 = load i32, ptr %360, align 4, !tbaa !11
  %362 = icmp ne i32 %361, -1
  br i1 %362, label %363, label %441

363:                                              ; preds = %351
  %364 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  %365 = load i32, ptr %364, align 4, !tbaa !11
  %366 = icmp ne i32 %365, -1
  br i1 %366, label %367, label %441

367:                                              ; preds = %363
  %368 = load ptr, ptr %22, align 8, !tbaa !5
  %369 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  %370 = load i32, ptr %369, align 4, !tbaa !11
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds i32, ptr %368, i64 %371
  %373 = load i32, ptr %372, align 4, !tbaa !11
  %374 = load ptr, ptr %34, align 8, !tbaa !5
  %375 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  %376 = load i32, ptr %375, align 4, !tbaa !11
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds %struct.nrinfo_t, ptr %374, i64 %377
  %379 = getelementptr inbounds %struct.nrinfo_t, ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds [2 x i32], ptr %379, i64 0, i64 1
  %381 = load i32, ptr %380, align 4, !tbaa !11
  %382 = sub nsw i32 %373, %381
  %383 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 0
  store i32 %382, ptr %383, align 4, !tbaa !11
  %384 = load ptr, ptr %22, align 8, !tbaa !5
  %385 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  %386 = load i32, ptr %385, align 4, !tbaa !11
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %384, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !11
  %390 = load ptr, ptr %34, align 8, !tbaa !5
  %391 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  %392 = load i32, ptr %391, align 4, !tbaa !11
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds %struct.nrinfo_t, ptr %390, i64 %393
  %395 = getelementptr inbounds %struct.nrinfo_t, ptr %394, i32 0, i32 0
  %396 = getelementptr inbounds [2 x i32], ptr %395, i64 0, i64 0
  %397 = load i32, ptr %396, align 4, !tbaa !11
  %398 = sub nsw i32 %389, %397
  %399 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 1
  store i32 %398, ptr %399, align 4, !tbaa !11
  %400 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 0
  %401 = load i32, ptr %400, align 4, !tbaa !11
  %402 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 1
  %403 = load i32, ptr %402, align 4, !tbaa !11
  %404 = icmp sgt i32 %401, %403
  br i1 %404, label %405, label %406

405:                                              ; preds = %367
  br label %418

406:                                              ; preds = %367
  %407 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 0
  %408 = load i32, ptr %407, align 4, !tbaa !11
  %409 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 1
  %410 = load i32, ptr %409, align 4, !tbaa !11
  %411 = icmp slt i32 %408, %410
  br i1 %411, label %412, label %413

412:                                              ; preds = %406
  br label %416

413:                                              ; preds = %406
  %414 = load i32, ptr %40, align 4, !tbaa !11
  %415 = srem i32 %414, 2
  br label %416

416:                                              ; preds = %413, %412
  %417 = phi i32 [ 1, %412 ], [ %415, %413 ]
  br label %418

418:                                              ; preds = %416, %405
  %419 = phi i32 [ 0, %405 ], [ %417, %416 ]
  store i32 %419, ptr %41, align 4, !tbaa !11
  %420 = load ptr, ptr %25, align 8, !tbaa !5
  %421 = load i32, ptr %41, align 4, !tbaa !11
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %420, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !11
  %425 = load ptr, ptr %22, align 8, !tbaa !5
  %426 = load i32, ptr %41, align 4, !tbaa !11
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !11
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i32, ptr %425, i64 %430
  %432 = load i32, ptr %431, align 4, !tbaa !11
  %433 = add nsw i32 %424, %432
  %434 = load i32, ptr %44, align 4, !tbaa !11
  %435 = icmp sgt i32 %433, %434
  br i1 %435, label %436, label %440

436:                                              ; preds = %418
  %437 = load i32, ptr %41, align 4, !tbaa !11
  %438 = add nsw i32 %437, 1
  %439 = srem i32 %438, 2
  store i32 %439, ptr %41, align 4, !tbaa !11
  br label %440

440:                                              ; preds = %436, %418
  br label %490

441:                                              ; preds = %363, %351
  %442 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  %443 = load i32, ptr %442, align 4, !tbaa !11
  %444 = icmp eq i32 %443, -1
  br i1 %444, label %445, label %450

445:                                              ; preds = %441
  %446 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  %447 = load i32, ptr %446, align 4, !tbaa !11
  %448 = icmp eq i32 %447, -1
  br i1 %448, label %449, label %450

449:                                              ; preds = %445
  br label %1131

450:                                              ; preds = %445, %441
  %451 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  %452 = load i32, ptr %451, align 4, !tbaa !11
  %453 = icmp ne i32 %452, -1
  br i1 %453, label %454, label %468

454:                                              ; preds = %450
  %455 = load ptr, ptr %25, align 8, !tbaa !5
  %456 = getelementptr inbounds i32, ptr %455, i64 0
  %457 = load i32, ptr %456, align 4, !tbaa !11
  %458 = load ptr, ptr %22, align 8, !tbaa !5
  %459 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 0
  %460 = load i32, ptr %459, align 4, !tbaa !11
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i32, ptr %458, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !11
  %464 = add nsw i32 %457, %463
  %465 = load i32, ptr %44, align 4, !tbaa !11
  %466 = icmp sle i32 %464, %465
  br i1 %466, label %467, label %468

467:                                              ; preds = %454
  store i32 0, ptr %41, align 4, !tbaa !11
  br label %488

468:                                              ; preds = %454, %450
  %469 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  %470 = load i32, ptr %469, align 4, !tbaa !11
  %471 = icmp ne i32 %470, -1
  br i1 %471, label %472, label %486

472:                                              ; preds = %468
  %473 = load ptr, ptr %25, align 8, !tbaa !5
  %474 = getelementptr inbounds i32, ptr %473, i64 1
  %475 = load i32, ptr %474, align 4, !tbaa !11
  %476 = load ptr, ptr %22, align 8, !tbaa !5
  %477 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 1
  %478 = load i32, ptr %477, align 4, !tbaa !11
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds i32, ptr %476, i64 %479
  %481 = load i32, ptr %480, align 4, !tbaa !11
  %482 = add nsw i32 %475, %481
  %483 = load i32, ptr %44, align 4, !tbaa !11
  %484 = icmp sle i32 %482, %483
  br i1 %484, label %485, label %486

485:                                              ; preds = %472
  store i32 1, ptr %41, align 4, !tbaa !11
  br label %487

486:                                              ; preds = %472, %468
  br label %1131

487:                                              ; preds = %485
  br label %488

488:                                              ; preds = %487, %467
  br label %489

489:                                              ; preds = %488
  br label %490

490:                                              ; preds = %489, %440
  %491 = load i32, ptr %41, align 4, !tbaa !11
  %492 = add nsw i32 %491, 1
  %493 = srem i32 %492, 2
  store i32 %493, ptr %42, align 4, !tbaa !11
  %494 = load i32, ptr %41, align 4, !tbaa !11
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 %495
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = call i32 @libmetis__rpqGetTop(ptr noundef %497)
  store i32 %498, ptr %35, align 4, !tbaa !11
  %499 = load ptr, ptr %31, align 8, !tbaa !5
  %500 = load i32, ptr %35, align 4, !tbaa !11
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i32, ptr %499, i64 %501
  %503 = load i32, ptr %502, align 4, !tbaa !11
  %504 = icmp eq i32 %503, -5
  br i1 %504, label %505, label %512

505:                                              ; preds = %490
  %506 = load i32, ptr %42, align 4, !tbaa !11
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 %507
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  %510 = load i32, ptr %35, align 4, !tbaa !11
  %511 = call i32 @libmetis__rpqDelete(ptr noundef %509, i32 noundef %510)
  br label %512

512:                                              ; preds = %505, %490
  %513 = load ptr, ptr %28, align 8, !tbaa !5
  %514 = load i32, ptr %35, align 4, !tbaa !11
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds i32, ptr %513, i64 %515
  %517 = load i32, ptr %516, align 4, !tbaa !11
  %518 = icmp ne i32 %517, -1
  br i1 %518, label %530, label %519

519:                                              ; preds = %512
  %520 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 574, ptr noundef @.str.4)
  %521 = load ptr, ptr %28, align 8, !tbaa !5
  %522 = load i32, ptr %35, align 4, !tbaa !11
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds i32, ptr %521, i64 %523
  %525 = load i32, ptr %524, align 4, !tbaa !11
  %526 = icmp ne i32 %525, -1
  br i1 %526, label %527, label %528

527:                                              ; preds = %519
  br label %529

528:                                              ; preds = %519
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

529:                                              ; preds = %527
  br label %530

530:                                              ; preds = %529, %512
  %531 = load i32, ptr %20, align 4, !tbaa !11
  %532 = load ptr, ptr %21, align 8, !tbaa !5
  %533 = load i32, ptr %35, align 4, !tbaa !11
  %534 = add nsw i32 %533, 1
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds i32, ptr %532, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !11
  %538 = add nsw i32 %531, %537
  %539 = load ptr, ptr %21, align 8, !tbaa !5
  %540 = load i32, ptr %35, align 4, !tbaa !11
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds i32, ptr %539, i64 %541
  %543 = load i32, ptr %542, align 4, !tbaa !11
  %544 = sub nsw i32 %538, %543
  %545 = load i32, ptr %17, align 4, !tbaa !11
  %546 = mul nsw i32 2, %545
  %547 = sub nsw i32 %546, 1
  %548 = icmp sge i32 %544, %547
  br i1 %548, label %549, label %550

549:                                              ; preds = %530
  br label %1131

550:                                              ; preds = %530
  %551 = load ptr, ptr %22, align 8, !tbaa !5
  %552 = load i32, ptr %35, align 4, !tbaa !11
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds i32, ptr %551, i64 %553
  %555 = load i32, ptr %554, align 4, !tbaa !11
  %556 = load ptr, ptr %34, align 8, !tbaa !5
  %557 = load i32, ptr %35, align 4, !tbaa !11
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds %struct.nrinfo_t, ptr %556, i64 %558
  %560 = getelementptr inbounds %struct.nrinfo_t, ptr %559, i32 0, i32 0
  %561 = load i32, ptr %42, align 4, !tbaa !11
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds [2 x i32], ptr %560, i64 0, i64 %562
  %564 = load i32, ptr %563, align 4, !tbaa !11
  %565 = sub nsw i32 %555, %564
  %566 = load ptr, ptr %25, align 8, !tbaa !5
  %567 = getelementptr inbounds i32, ptr %566, i64 2
  %568 = load i32, ptr %567, align 4, !tbaa !11
  %569 = sub nsw i32 %568, %565
  store i32 %569, ptr %567, align 4, !tbaa !11
  %570 = load ptr, ptr %25, align 8, !tbaa !5
  %571 = load i32, ptr %41, align 4, !tbaa !11
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  %574 = load i32, ptr %573, align 4, !tbaa !11
  %575 = load ptr, ptr %22, align 8, !tbaa !5
  %576 = load i32, ptr %35, align 4, !tbaa !11
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i32, ptr %575, i64 %577
  %579 = load i32, ptr %578, align 4, !tbaa !11
  %580 = add nsw i32 %574, %579
  %581 = load ptr, ptr %25, align 8, !tbaa !5
  %582 = load i32, ptr %42, align 4, !tbaa !11
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds i32, ptr %581, i64 %583
  %585 = load i32, ptr %584, align 4, !tbaa !11
  %586 = load ptr, ptr %34, align 8, !tbaa !5
  %587 = load i32, ptr %35, align 4, !tbaa !11
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct.nrinfo_t, ptr %586, i64 %588
  %590 = getelementptr inbounds %struct.nrinfo_t, ptr %589, i32 0, i32 0
  %591 = load i32, ptr %42, align 4, !tbaa !11
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds [2 x i32], ptr %590, i64 0, i64 %592
  %594 = load i32, ptr %593, align 4, !tbaa !11
  %595 = sub nsw i32 %585, %594
  %596 = sub nsw i32 %580, %595
  %597 = call i32 @llvm.abs.i32(i32 %596, i1 true)
  store i32 %597, ptr %46, align 4, !tbaa !11
  %598 = load ptr, ptr %25, align 8, !tbaa !5
  %599 = getelementptr inbounds i32, ptr %598, i64 2
  %600 = load i32, ptr %599, align 4, !tbaa !11
  %601 = load i32, ptr %37, align 4, !tbaa !11
  %602 = icmp slt i32 %600, %601
  br i1 %602, label %613, label %603

603:                                              ; preds = %550
  %604 = load ptr, ptr %25, align 8, !tbaa !5
  %605 = getelementptr inbounds i32, ptr %604, i64 2
  %606 = load i32, ptr %605, align 4, !tbaa !11
  %607 = load i32, ptr %37, align 4, !tbaa !11
  %608 = icmp eq i32 %606, %607
  br i1 %608, label %609, label %619

609:                                              ; preds = %603
  %610 = load i32, ptr %46, align 4, !tbaa !11
  %611 = load i32, ptr %45, align 4, !tbaa !11
  %612 = icmp slt i32 %610, %611
  br i1 %612, label %613, label %619

613:                                              ; preds = %609, %550
  %614 = load ptr, ptr %25, align 8, !tbaa !5
  %615 = getelementptr inbounds i32, ptr %614, i64 2
  %616 = load i32, ptr %615, align 4, !tbaa !11
  store i32 %616, ptr %37, align 4, !tbaa !11
  %617 = load i32, ptr %19, align 4, !tbaa !11
  store i32 %617, ptr %39, align 4, !tbaa !11
  %618 = load i32, ptr %46, align 4, !tbaa !11
  store i32 %618, ptr %45, align 4, !tbaa !11
  br label %646

619:                                              ; preds = %609, %603
  %620 = load i32, ptr %19, align 4, !tbaa !11
  %621 = load i32, ptr %39, align 4, !tbaa !11
  %622 = sub nsw i32 %620, %621
  %623 = load i32, ptr %43, align 4, !tbaa !11
  %624 = icmp sgt i32 %622, %623
  br i1 %624, label %625, label %645

625:                                              ; preds = %619
  %626 = load ptr, ptr %22, align 8, !tbaa !5
  %627 = load i32, ptr %35, align 4, !tbaa !11
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i32, ptr %626, i64 %628
  %630 = load i32, ptr %629, align 4, !tbaa !11
  %631 = load ptr, ptr %34, align 8, !tbaa !5
  %632 = load i32, ptr %35, align 4, !tbaa !11
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds %struct.nrinfo_t, ptr %631, i64 %633
  %635 = getelementptr inbounds %struct.nrinfo_t, ptr %634, i32 0, i32 0
  %636 = load i32, ptr %42, align 4, !tbaa !11
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds [2 x i32], ptr %635, i64 0, i64 %637
  %639 = load i32, ptr %638, align 4, !tbaa !11
  %640 = sub nsw i32 %630, %639
  %641 = load ptr, ptr %25, align 8, !tbaa !5
  %642 = getelementptr inbounds i32, ptr %641, i64 2
  %643 = load i32, ptr %642, align 4, !tbaa !11
  %644 = add nsw i32 %643, %640
  store i32 %644, ptr %642, align 4, !tbaa !11
  br label %1131

645:                                              ; preds = %619
  br label %646

646:                                              ; preds = %645, %613
  br label %647

647:                                              ; preds = %646
  %648 = load ptr, ptr %28, align 8, !tbaa !5
  %649 = load i32, ptr %35, align 4, !tbaa !11
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds i32, ptr %648, i64 %650
  %652 = load i32, ptr %651, align 4, !tbaa !11
  %653 = icmp ne i32 %652, -1
  br i1 %653, label %665, label %654

654:                                              ; preds = %647
  %655 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 596, ptr noundef @.str.4)
  %656 = load ptr, ptr %28, align 8, !tbaa !5
  %657 = load i32, ptr %35, align 4, !tbaa !11
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i32, ptr %656, i64 %658
  %660 = load i32, ptr %659, align 4, !tbaa !11
  %661 = icmp ne i32 %660, -1
  br i1 %661, label %662, label %663

662:                                              ; preds = %654
  br label %664

663:                                              ; preds = %654
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 596, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

664:                                              ; preds = %662
  br label %665

665:                                              ; preds = %664, %647
  %666 = load ptr, ptr %27, align 8, !tbaa !5
  %667 = load i32, ptr %18, align 4, !tbaa !11
  %668 = add nsw i32 %667, -1
  store i32 %668, ptr %18, align 4, !tbaa !11
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i32, ptr %666, i64 %669
  %671 = load i32, ptr %670, align 4, !tbaa !11
  %672 = load ptr, ptr %27, align 8, !tbaa !5
  %673 = load ptr, ptr %28, align 8, !tbaa !5
  %674 = load i32, ptr %35, align 4, !tbaa !11
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i32, ptr %673, i64 %675
  %677 = load i32, ptr %676, align 4, !tbaa !11
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds i32, ptr %672, i64 %678
  store i32 %671, ptr %679, align 4, !tbaa !11
  %680 = load ptr, ptr %28, align 8, !tbaa !5
  %681 = load i32, ptr %35, align 4, !tbaa !11
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds i32, ptr %680, i64 %682
  %684 = load i32, ptr %683, align 4, !tbaa !11
  %685 = load ptr, ptr %28, align 8, !tbaa !5
  %686 = load ptr, ptr %27, align 8, !tbaa !5
  %687 = load i32, ptr %18, align 4, !tbaa !11
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds i32, ptr %686, i64 %688
  %690 = load i32, ptr %689, align 4, !tbaa !11
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds i32, ptr %685, i64 %691
  store i32 %684, ptr %692, align 4, !tbaa !11
  %693 = load ptr, ptr %28, align 8, !tbaa !5
  %694 = load i32, ptr %35, align 4, !tbaa !11
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds i32, ptr %693, i64 %695
  store i32 -1, ptr %696, align 4, !tbaa !11
  br label %697

697:                                              ; preds = %665
  br label %698

698:                                              ; preds = %697
  %699 = load ptr, ptr %22, align 8, !tbaa !5
  %700 = load i32, ptr %35, align 4, !tbaa !11
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i32, ptr %699, i64 %701
  %703 = load i32, ptr %702, align 4, !tbaa !11
  %704 = load ptr, ptr %25, align 8, !tbaa !5
  %705 = load i32, ptr %41, align 4, !tbaa !11
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i32, ptr %704, i64 %706
  %708 = load i32, ptr %707, align 4, !tbaa !11
  %709 = add nsw i32 %708, %703
  store i32 %709, ptr %707, align 4, !tbaa !11
  %710 = load i32, ptr %41, align 4, !tbaa !11
  %711 = load ptr, ptr %24, align 8, !tbaa !5
  %712 = load i32, ptr %35, align 4, !tbaa !11
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds i32, ptr %711, i64 %713
  store i32 %710, ptr %714, align 4, !tbaa !11
  %715 = load i32, ptr %19, align 4, !tbaa !11
  %716 = load ptr, ptr %31, align 8, !tbaa !5
  %717 = load i32, ptr %35, align 4, !tbaa !11
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds i32, ptr %716, i64 %718
  store i32 %715, ptr %719, align 4, !tbaa !11
  %720 = load i32, ptr %35, align 4, !tbaa !11
  %721 = load ptr, ptr %32, align 8, !tbaa !5
  %722 = load i32, ptr %19, align 4, !tbaa !11
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %721, i64 %723
  store i32 %720, ptr %724, align 4, !tbaa !11
  %725 = load ptr, ptr %21, align 8, !tbaa !5
  %726 = load i32, ptr %35, align 4, !tbaa !11
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds i32, ptr %725, i64 %727
  %729 = load i32, ptr %728, align 4, !tbaa !11
  store i32 %729, ptr %13, align 4, !tbaa !11
  br label %730

730:                                              ; preds = %1075, %698
  %731 = load i32, ptr %13, align 4, !tbaa !11
  %732 = load ptr, ptr %21, align 8, !tbaa !5
  %733 = load i32, ptr %35, align 4, !tbaa !11
  %734 = add nsw i32 %733, 1
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds i32, ptr %732, i64 %735
  %737 = load i32, ptr %736, align 4, !tbaa !11
  %738 = icmp slt i32 %731, %737
  br i1 %738, label %739, label %1078

739:                                              ; preds = %730
  %740 = load ptr, ptr %23, align 8, !tbaa !5
  %741 = load i32, ptr %13, align 4, !tbaa !11
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds i32, ptr %740, i64 %742
  %744 = load i32, ptr %743, align 4, !tbaa !11
  store i32 %744, ptr %14, align 4, !tbaa !11
  %745 = load ptr, ptr %24, align 8, !tbaa !5
  %746 = load i32, ptr %14, align 4, !tbaa !11
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds i32, ptr %745, i64 %747
  %749 = load i32, ptr %748, align 4, !tbaa !11
  %750 = icmp eq i32 %749, 2
  br i1 %750, label %751, label %813

751:                                              ; preds = %739
  %752 = load ptr, ptr %22, align 8, !tbaa !5
  %753 = load i32, ptr %14, align 4, !tbaa !11
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds i32, ptr %752, i64 %754
  %756 = load i32, ptr %755, align 4, !tbaa !11
  %757 = load ptr, ptr %34, align 8, !tbaa !5
  %758 = load i32, ptr %14, align 4, !tbaa !11
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds %struct.nrinfo_t, ptr %757, i64 %759
  %761 = getelementptr inbounds %struct.nrinfo_t, ptr %760, i32 0, i32 0
  %762 = load i32, ptr %41, align 4, !tbaa !11
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds [2 x i32], ptr %761, i64 0, i64 %763
  %765 = load i32, ptr %764, align 4, !tbaa !11
  %766 = sub nsw i32 %756, %765
  store i32 %766, ptr %36, align 4, !tbaa !11
  %767 = load ptr, ptr %22, align 8, !tbaa !5
  %768 = load i32, ptr %35, align 4, !tbaa !11
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds i32, ptr %767, i64 %769
  %771 = load i32, ptr %770, align 4, !tbaa !11
  %772 = load ptr, ptr %34, align 8, !tbaa !5
  %773 = load i32, ptr %14, align 4, !tbaa !11
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds %struct.nrinfo_t, ptr %772, i64 %774
  %776 = getelementptr inbounds %struct.nrinfo_t, ptr %775, i32 0, i32 0
  %777 = load i32, ptr %41, align 4, !tbaa !11
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds [2 x i32], ptr %776, i64 0, i64 %778
  %780 = load i32, ptr %779, align 4, !tbaa !11
  %781 = add nsw i32 %780, %771
  store i32 %781, ptr %779, align 4, !tbaa !11
  %782 = load ptr, ptr %31, align 8, !tbaa !5
  %783 = load i32, ptr %14, align 4, !tbaa !11
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds i32, ptr %782, i64 %784
  %786 = load i32, ptr %785, align 4, !tbaa !11
  %787 = icmp eq i32 %786, -5
  br i1 %787, label %798, label %788

788:                                              ; preds = %751
  %789 = load ptr, ptr %31, align 8, !tbaa !5
  %790 = load i32, ptr %14, align 4, !tbaa !11
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds i32, ptr %789, i64 %791
  %793 = load i32, ptr %792, align 4, !tbaa !11
  %794 = load i32, ptr %42, align 4, !tbaa !11
  %795 = add nsw i32 10, %794
  %796 = sub nsw i32 0, %795
  %797 = icmp eq i32 %793, %796
  br i1 %797, label %798, label %812

798:                                              ; preds = %788, %751
  %799 = load i32, ptr %42, align 4, !tbaa !11
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 %800
  %802 = load ptr, ptr %801, align 8, !tbaa !5
  %803 = load i32, ptr %14, align 4, !tbaa !11
  %804 = load i32, ptr %36, align 4, !tbaa !11
  %805 = load ptr, ptr %22, align 8, !tbaa !5
  %806 = load i32, ptr %35, align 4, !tbaa !11
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds i32, ptr %805, i64 %807
  %809 = load i32, ptr %808, align 4, !tbaa !11
  %810 = sub nsw i32 %804, %809
  %811 = sitofp i32 %810 to float
  call void @libmetis__rpqUpdate(ptr noundef %802, i32 noundef %803, float noundef %811)
  br label %812

812:                                              ; preds = %798, %788
  br label %1074

813:                                              ; preds = %739
  %814 = load ptr, ptr %24, align 8, !tbaa !5
  %815 = load i32, ptr %14, align 4, !tbaa !11
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds i32, ptr %814, i64 %816
  %818 = load i32, ptr %817, align 4, !tbaa !11
  %819 = load i32, ptr %42, align 4, !tbaa !11
  %820 = icmp eq i32 %818, %819
  br i1 %820, label %821, label %1073

821:                                              ; preds = %813
  %822 = load ptr, ptr %28, align 8, !tbaa !5
  %823 = load i32, ptr %14, align 4, !tbaa !11
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %822, i64 %824
  %826 = load i32, ptr %825, align 4, !tbaa !11
  %827 = icmp eq i32 %826, -1
  br i1 %827, label %852, label %828

828:                                              ; preds = %821
  %829 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 615, ptr noundef @.str.4)
  %830 = load i32, ptr %14, align 4, !tbaa !11
  %831 = load ptr, ptr %28, align 8, !tbaa !5
  %832 = load i32, ptr %14, align 4, !tbaa !11
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds i32, ptr %831, i64 %833
  %835 = load i32, ptr %834, align 4, !tbaa !11
  %836 = load ptr, ptr %24, align 8, !tbaa !5
  %837 = load i32, ptr %14, align 4, !tbaa !11
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds i32, ptr %836, i64 %838
  %840 = load i32, ptr %839, align 4, !tbaa !11
  %841 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef %830, i32 noundef %835, i32 noundef %840)
  %842 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  %843 = load ptr, ptr %28, align 8, !tbaa !5
  %844 = load i32, ptr %14, align 4, !tbaa !11
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds i32, ptr %843, i64 %845
  %847 = load i32, ptr %846, align 4, !tbaa !11
  %848 = icmp eq i32 %847, -1
  br i1 %848, label %849, label %850

849:                                              ; preds = %828
  br label %851

850:                                              ; preds = %828
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.4, i32 noundef 615, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

851:                                              ; preds = %849
  br label %852

852:                                              ; preds = %851, %821
  br label %853

853:                                              ; preds = %852
  %854 = load ptr, ptr %28, align 8, !tbaa !5
  %855 = load i32, ptr %14, align 4, !tbaa !11
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds i32, ptr %854, i64 %856
  %858 = load i32, ptr %857, align 4, !tbaa !11
  %859 = icmp eq i32 %858, -1
  br i1 %859, label %871, label %860

860:                                              ; preds = %853
  %861 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 616, ptr noundef @.str.4)
  %862 = load ptr, ptr %28, align 8, !tbaa !5
  %863 = load i32, ptr %14, align 4, !tbaa !11
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds i32, ptr %862, i64 %864
  %866 = load i32, ptr %865, align 4, !tbaa !11
  %867 = icmp eq i32 %866, -1
  br i1 %867, label %868, label %869

868:                                              ; preds = %860
  br label %870

869:                                              ; preds = %860
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.4, i32 noundef 616, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

870:                                              ; preds = %868
  br label %871

871:                                              ; preds = %870, %853
  %872 = load i32, ptr %14, align 4, !tbaa !11
  %873 = load ptr, ptr %27, align 8, !tbaa !5
  %874 = load i32, ptr %18, align 4, !tbaa !11
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds i32, ptr %873, i64 %875
  store i32 %872, ptr %876, align 4, !tbaa !11
  %877 = load i32, ptr %18, align 4, !tbaa !11
  %878 = add nsw i32 %877, 1
  store i32 %878, ptr %18, align 4, !tbaa !11
  %879 = load ptr, ptr %28, align 8, !tbaa !5
  %880 = load i32, ptr %14, align 4, !tbaa !11
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds i32, ptr %879, i64 %881
  store i32 %877, ptr %882, align 4, !tbaa !11
  br label %883

883:                                              ; preds = %871
  br label %884

884:                                              ; preds = %883
  %885 = load i32, ptr %14, align 4, !tbaa !11
  %886 = load ptr, ptr %30, align 8, !tbaa !5
  %887 = load i32, ptr %20, align 4, !tbaa !11
  %888 = add nsw i32 %887, 1
  store i32 %888, ptr %20, align 4, !tbaa !11
  %889 = sext i32 %887 to i64
  %890 = getelementptr inbounds i32, ptr %886, i64 %889
  store i32 %885, ptr %890, align 4, !tbaa !11
  %891 = load ptr, ptr %24, align 8, !tbaa !5
  %892 = load i32, ptr %14, align 4, !tbaa !11
  %893 = sext i32 %892 to i64
  %894 = getelementptr inbounds i32, ptr %891, i64 %893
  store i32 2, ptr %894, align 4, !tbaa !11
  %895 = load ptr, ptr %22, align 8, !tbaa !5
  %896 = load i32, ptr %14, align 4, !tbaa !11
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds i32, ptr %895, i64 %897
  %899 = load i32, ptr %898, align 4, !tbaa !11
  %900 = load ptr, ptr %25, align 8, !tbaa !5
  %901 = load i32, ptr %42, align 4, !tbaa !11
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds i32, ptr %900, i64 %902
  %904 = load i32, ptr %903, align 4, !tbaa !11
  %905 = sub nsw i32 %904, %899
  store i32 %905, ptr %903, align 4, !tbaa !11
  %906 = load ptr, ptr %34, align 8, !tbaa !5
  %907 = load i32, ptr %14, align 4, !tbaa !11
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds %struct.nrinfo_t, ptr %906, i64 %908
  %910 = getelementptr inbounds %struct.nrinfo_t, ptr %909, i32 0, i32 0
  %911 = getelementptr inbounds [2 x i32], ptr %910, i64 0, i64 0
  store ptr %911, ptr %26, align 8, !tbaa !5
  %912 = load ptr, ptr %26, align 8, !tbaa !5
  %913 = getelementptr inbounds i32, ptr %912, i64 1
  store i32 0, ptr %913, align 4, !tbaa !11
  %914 = load ptr, ptr %26, align 8, !tbaa !5
  %915 = getelementptr inbounds i32, ptr %914, i64 0
  store i32 0, ptr %915, align 4, !tbaa !11
  %916 = load ptr, ptr %21, align 8, !tbaa !5
  %917 = load i32, ptr %14, align 4, !tbaa !11
  %918 = sext i32 %917 to i64
  %919 = getelementptr inbounds i32, ptr %916, i64 %918
  %920 = load i32, ptr %919, align 4, !tbaa !11
  store i32 %920, ptr %15, align 4, !tbaa !11
  br label %921

921:                                              ; preds = %1021, %884
  %922 = load i32, ptr %15, align 4, !tbaa !11
  %923 = load ptr, ptr %21, align 8, !tbaa !5
  %924 = load i32, ptr %14, align 4, !tbaa !11
  %925 = add nsw i32 %924, 1
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds i32, ptr %923, i64 %926
  %928 = load i32, ptr %927, align 4, !tbaa !11
  %929 = icmp slt i32 %922, %928
  br i1 %929, label %930, label %1024

930:                                              ; preds = %921
  %931 = load ptr, ptr %23, align 8, !tbaa !5
  %932 = load i32, ptr %15, align 4, !tbaa !11
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds i32, ptr %931, i64 %933
  %935 = load i32, ptr %934, align 4, !tbaa !11
  store i32 %935, ptr %16, align 4, !tbaa !11
  %936 = load ptr, ptr %24, align 8, !tbaa !5
  %937 = load i32, ptr %16, align 4, !tbaa !11
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds i32, ptr %936, i64 %938
  %940 = load i32, ptr %939, align 4, !tbaa !11
  %941 = icmp ne i32 %940, 2
  br i1 %941, label %942, label %958

942:                                              ; preds = %930
  %943 = load ptr, ptr %22, align 8, !tbaa !5
  %944 = load i32, ptr %16, align 4, !tbaa !11
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds i32, ptr %943, i64 %945
  %947 = load i32, ptr %946, align 4, !tbaa !11
  %948 = load ptr, ptr %26, align 8, !tbaa !5
  %949 = load ptr, ptr %24, align 8, !tbaa !5
  %950 = load i32, ptr %16, align 4, !tbaa !11
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds i32, ptr %949, i64 %951
  %953 = load i32, ptr %952, align 4, !tbaa !11
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds i32, ptr %948, i64 %954
  %956 = load i32, ptr %955, align 4, !tbaa !11
  %957 = add nsw i32 %956, %947
  store i32 %957, ptr %955, align 4, !tbaa !11
  br label %1020

958:                                              ; preds = %930
  %959 = load ptr, ptr %22, align 8, !tbaa !5
  %960 = load i32, ptr %16, align 4, !tbaa !11
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds i32, ptr %959, i64 %961
  %963 = load i32, ptr %962, align 4, !tbaa !11
  %964 = load ptr, ptr %34, align 8, !tbaa !5
  %965 = load i32, ptr %16, align 4, !tbaa !11
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds %struct.nrinfo_t, ptr %964, i64 %966
  %968 = getelementptr inbounds %struct.nrinfo_t, ptr %967, i32 0, i32 0
  %969 = load i32, ptr %42, align 4, !tbaa !11
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds [2 x i32], ptr %968, i64 0, i64 %970
  %972 = load i32, ptr %971, align 4, !tbaa !11
  %973 = sub nsw i32 %963, %972
  store i32 %973, ptr %36, align 4, !tbaa !11
  %974 = load ptr, ptr %22, align 8, !tbaa !5
  %975 = load i32, ptr %14, align 4, !tbaa !11
  %976 = sext i32 %975 to i64
  %977 = getelementptr inbounds i32, ptr %974, i64 %976
  %978 = load i32, ptr %977, align 4, !tbaa !11
  %979 = load ptr, ptr %34, align 8, !tbaa !5
  %980 = load i32, ptr %16, align 4, !tbaa !11
  %981 = sext i32 %980 to i64
  %982 = getelementptr inbounds %struct.nrinfo_t, ptr %979, i64 %981
  %983 = getelementptr inbounds %struct.nrinfo_t, ptr %982, i32 0, i32 0
  %984 = load i32, ptr %42, align 4, !tbaa !11
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds [2 x i32], ptr %983, i64 0, i64 %985
  %987 = load i32, ptr %986, align 4, !tbaa !11
  %988 = sub nsw i32 %987, %978
  store i32 %988, ptr %986, align 4, !tbaa !11
  %989 = load ptr, ptr %31, align 8, !tbaa !5
  %990 = load i32, ptr %16, align 4, !tbaa !11
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds i32, ptr %989, i64 %991
  %993 = load i32, ptr %992, align 4, !tbaa !11
  %994 = icmp eq i32 %993, -5
  br i1 %994, label %1005, label %995

995:                                              ; preds = %958
  %996 = load ptr, ptr %31, align 8, !tbaa !5
  %997 = load i32, ptr %16, align 4, !tbaa !11
  %998 = sext i32 %997 to i64
  %999 = getelementptr inbounds i32, ptr %996, i64 %998
  %1000 = load i32, ptr %999, align 4, !tbaa !11
  %1001 = load i32, ptr %41, align 4, !tbaa !11
  %1002 = add nsw i32 10, %1001
  %1003 = sub nsw i32 0, %1002
  %1004 = icmp eq i32 %1000, %1003
  br i1 %1004, label %1005, label %1019

1005:                                             ; preds = %995, %958
  %1006 = load i32, ptr %41, align 4, !tbaa !11
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 %1007
  %1009 = load ptr, ptr %1008, align 8, !tbaa !5
  %1010 = load i32, ptr %16, align 4, !tbaa !11
  %1011 = load i32, ptr %36, align 4, !tbaa !11
  %1012 = load ptr, ptr %22, align 8, !tbaa !5
  %1013 = load i32, ptr %14, align 4, !tbaa !11
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds i32, ptr %1012, i64 %1014
  %1016 = load i32, ptr %1015, align 4, !tbaa !11
  %1017 = add nsw i32 %1011, %1016
  %1018 = sitofp i32 %1017 to float
  call void @libmetis__rpqUpdate(ptr noundef %1009, i32 noundef %1010, float noundef %1018)
  br label %1019

1019:                                             ; preds = %1005, %995
  br label %1020

1020:                                             ; preds = %1019, %942
  br label %1021

1021:                                             ; preds = %1020
  %1022 = load i32, ptr %15, align 4, !tbaa !11
  %1023 = add nsw i32 %1022, 1
  store i32 %1023, ptr %15, align 4, !tbaa !11
  br label %921, !llvm.loop !31

1024:                                             ; preds = %921
  %1025 = load ptr, ptr %31, align 8, !tbaa !5
  %1026 = load i32, ptr %14, align 4, !tbaa !11
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds i32, ptr %1025, i64 %1027
  %1029 = load i32, ptr %1028, align 4, !tbaa !11
  %1030 = icmp eq i32 %1029, -1
  br i1 %1030, label %1031, label %1072

1031:                                             ; preds = %1024
  %1032 = load ptr, ptr %8, align 8, !tbaa !5
  %1033 = load i32, ptr %14, align 4, !tbaa !11
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i32, ptr %1032, i64 %1034
  %1036 = load i32, ptr %1035, align 4, !tbaa !11
  %1037 = icmp eq i32 %1036, -1
  br i1 %1037, label %1046, label %1038

1038:                                             ; preds = %1031
  %1039 = load ptr, ptr %8, align 8, !tbaa !5
  %1040 = load i32, ptr %14, align 4, !tbaa !11
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds i32, ptr %1039, i64 %1041
  %1043 = load i32, ptr %1042, align 4, !tbaa !11
  %1044 = load i32, ptr %41, align 4, !tbaa !11
  %1045 = icmp eq i32 %1043, %1044
  br i1 %1045, label %1046, label %1072

1046:                                             ; preds = %1038, %1031
  %1047 = load i32, ptr %41, align 4, !tbaa !11
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 %1048
  %1050 = load ptr, ptr %1049, align 8, !tbaa !5
  %1051 = load i32, ptr %14, align 4, !tbaa !11
  %1052 = load ptr, ptr %22, align 8, !tbaa !5
  %1053 = load i32, ptr %14, align 4, !tbaa !11
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds i32, ptr %1052, i64 %1054
  %1056 = load i32, ptr %1055, align 4, !tbaa !11
  %1057 = load ptr, ptr %26, align 8, !tbaa !5
  %1058 = load i32, ptr %42, align 4, !tbaa !11
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds i32, ptr %1057, i64 %1059
  %1061 = load i32, ptr %1060, align 4, !tbaa !11
  %1062 = sub nsw i32 %1056, %1061
  %1063 = sitofp i32 %1062 to float
  %1064 = call i32 @libmetis__rpqInsert(ptr noundef %1050, i32 noundef %1051, float noundef %1063)
  %1065 = load i32, ptr %41, align 4, !tbaa !11
  %1066 = add nsw i32 10, %1065
  %1067 = sub nsw i32 0, %1066
  %1068 = load ptr, ptr %31, align 8, !tbaa !5
  %1069 = load i32, ptr %14, align 4, !tbaa !11
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds i32, ptr %1068, i64 %1070
  store i32 %1067, ptr %1071, align 4, !tbaa !11
  br label %1072

1072:                                             ; preds = %1046, %1038, %1024
  br label %1073

1073:                                             ; preds = %1072, %813
  br label %1074

1074:                                             ; preds = %1073, %812
  br label %1075

1075:                                             ; preds = %1074
  %1076 = load i32, ptr %13, align 4, !tbaa !11
  %1077 = add nsw i32 %1076, 1
  store i32 %1077, ptr %13, align 4, !tbaa !11
  br label %730, !llvm.loop !32

1078:                                             ; preds = %730
  %1079 = load i32, ptr %20, align 4, !tbaa !11
  %1080 = load ptr, ptr %29, align 8, !tbaa !5
  %1081 = load i32, ptr %19, align 4, !tbaa !11
  %1082 = add nsw i32 %1081, 1
  %1083 = sext i32 %1082 to i64
  %1084 = getelementptr inbounds i32, ptr %1080, i64 %1083
  store i32 %1079, ptr %1084, align 4, !tbaa !11
  %1085 = load ptr, ptr %6, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.ctrl_t, ptr %1085, i32 0, i32 2
  %1087 = load i32, ptr %1086, align 8, !tbaa !23
  %1088 = and i32 %1087, 32
  %1089 = icmp ne i32 %1088, 0
  br i1 %1089, label %1090, label %1127

1090:                                             ; preds = %1078
  %1091 = load i32, ptr %35, align 4, !tbaa !11
  %1092 = load i32, ptr %41, align 4, !tbaa !11
  %1093 = load i32, ptr %41, align 4, !tbaa !11
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 %1094
  %1096 = load i32, ptr %1095, align 4, !tbaa !11
  %1097 = load i32, ptr %42, align 4, !tbaa !11
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 %1098
  %1100 = load i32, ptr %1099, align 4, !tbaa !11
  %1101 = load ptr, ptr %22, align 8, !tbaa !5
  %1102 = load i32, ptr %41, align 4, !tbaa !11
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 %1103
  %1105 = load i32, ptr %1104, align 4, !tbaa !11
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds i32, ptr %1101, i64 %1106
  %1108 = load i32, ptr %1107, align 4, !tbaa !11
  %1109 = load ptr, ptr %22, align 8, !tbaa !5
  %1110 = load i32, ptr %42, align 4, !tbaa !11
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds [2 x i32], ptr %47, i64 0, i64 %1111
  %1113 = load i32, ptr %1112, align 4, !tbaa !11
  %1114 = sext i32 %1113 to i64
  %1115 = getelementptr inbounds i32, ptr %1109, i64 %1114
  %1116 = load i32, ptr %1115, align 4, !tbaa !11
  %1117 = load ptr, ptr %25, align 8, !tbaa !5
  %1118 = getelementptr inbounds i32, ptr %1117, i64 0
  %1119 = load i32, ptr %1118, align 4, !tbaa !11
  %1120 = load ptr, ptr %25, align 8, !tbaa !5
  %1121 = getelementptr inbounds i32, ptr %1120, i64 1
  %1122 = load i32, ptr %1121, align 4, !tbaa !11
  %1123 = load ptr, ptr %25, align 8, !tbaa !5
  %1124 = getelementptr inbounds i32, ptr %1123, i64 2
  %1125 = load i32, ptr %1124, align 4, !tbaa !11
  %1126 = call i32 (ptr, ...) @printf(ptr noundef @.str.32, i32 noundef %1091, i32 noundef %1092, i32 noundef %1096, i32 noundef %1100, i32 noundef %1108, i32 noundef %1116, i32 noundef %1119, i32 noundef %1122, i32 noundef %1125)
  br label %1127

1127:                                             ; preds = %1090, %1078
  br label %1128

1128:                                             ; preds = %1127
  %1129 = load i32, ptr %19, align 4, !tbaa !11
  %1130 = add nsw i32 %1129, 1
  store i32 %1130, ptr %19, align 4, !tbaa !11
  br label %347, !llvm.loop !33

1131:                                             ; preds = %625, %549, %486, %449, %347
  %1132 = load i32, ptr %19, align 4, !tbaa !11
  %1133 = add nsw i32 %1132, -1
  store i32 %1133, ptr %19, align 4, !tbaa !11
  br label %1134

1134:                                             ; preds = %1465, %1131
  %1135 = load i32, ptr %19, align 4, !tbaa !11
  %1136 = load i32, ptr %39, align 4, !tbaa !11
  %1137 = icmp sgt i32 %1135, %1136
  br i1 %1137, label %1138, label %1468

1138:                                             ; preds = %1134
  %1139 = load ptr, ptr %32, align 8, !tbaa !5
  %1140 = load i32, ptr %19, align 4, !tbaa !11
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds i32, ptr %1139, i64 %1141
  %1143 = load i32, ptr %1142, align 4, !tbaa !11
  store i32 %1143, ptr %35, align 4, !tbaa !11
  %1144 = load ptr, ptr %7, align 8, !tbaa !5
  %1145 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %1144)
  %1146 = icmp ne i32 %1145, 0
  br i1 %1146, label %1155, label %1147

1147:                                             ; preds = %1138
  %1148 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef 673, ptr noundef @.str.4)
  %1149 = load ptr, ptr %7, align 8, !tbaa !5
  %1150 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %1149)
  %1151 = icmp ne i32 %1150, 0
  br i1 %1151, label %1152, label %1153

1152:                                             ; preds = %1147
  br label %1154

1153:                                             ; preds = %1147
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 673, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

1154:                                             ; preds = %1152
  br label %1155

1155:                                             ; preds = %1154, %1138
  %1156 = load ptr, ptr %24, align 8, !tbaa !5
  %1157 = load i32, ptr %35, align 4, !tbaa !11
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds i32, ptr %1156, i64 %1158
  %1160 = load i32, ptr %1159, align 4, !tbaa !11
  store i32 %1160, ptr %41, align 4, !tbaa !11
  %1161 = load i32, ptr %41, align 4, !tbaa !11
  %1162 = add nsw i32 %1161, 1
  %1163 = srem i32 %1162, 2
  store i32 %1163, ptr %42, align 4, !tbaa !11
  br label %1164

1164:                                             ; preds = %1155
  %1165 = load ptr, ptr %22, align 8, !tbaa !5
  %1166 = load i32, ptr %35, align 4, !tbaa !11
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds i32, ptr %1165, i64 %1167
  %1169 = load i32, ptr %1168, align 4, !tbaa !11
  %1170 = load ptr, ptr %25, align 8, !tbaa !5
  %1171 = getelementptr inbounds i32, ptr %1170, i64 2
  %1172 = load i32, ptr %1171, align 4, !tbaa !11
  %1173 = add nsw i32 %1172, %1169
  store i32 %1173, ptr %1171, align 4, !tbaa !11
  %1174 = load ptr, ptr %22, align 8, !tbaa !5
  %1175 = load i32, ptr %35, align 4, !tbaa !11
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds i32, ptr %1174, i64 %1176
  %1178 = load i32, ptr %1177, align 4, !tbaa !11
  %1179 = load ptr, ptr %25, align 8, !tbaa !5
  %1180 = load i32, ptr %41, align 4, !tbaa !11
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds i32, ptr %1179, i64 %1181
  %1183 = load i32, ptr %1182, align 4, !tbaa !11
  %1184 = sub nsw i32 %1183, %1178
  store i32 %1184, ptr %1182, align 4, !tbaa !11
  br label %1185

1185:                                             ; preds = %1164
  br label %1186

1186:                                             ; preds = %1185
  %1187 = load ptr, ptr %24, align 8, !tbaa !5
  %1188 = load i32, ptr %35, align 4, !tbaa !11
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds i32, ptr %1187, i64 %1189
  store i32 2, ptr %1190, align 4, !tbaa !11
  br label %1191

1191:                                             ; preds = %1186
  %1192 = load ptr, ptr %28, align 8, !tbaa !5
  %1193 = load i32, ptr %35, align 4, !tbaa !11
  %1194 = sext i32 %1193 to i64
  %1195 = getelementptr inbounds i32, ptr %1192, i64 %1194
  %1196 = load i32, ptr %1195, align 4, !tbaa !11
  %1197 = icmp eq i32 %1196, -1
  br i1 %1197, label %1209, label %1198

1198:                                             ; preds = %1191
  %1199 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, i32 noundef 679, ptr noundef @.str.4)
  %1200 = load ptr, ptr %28, align 8, !tbaa !5
  %1201 = load i32, ptr %35, align 4, !tbaa !11
  %1202 = sext i32 %1201 to i64
  %1203 = getelementptr inbounds i32, ptr %1200, i64 %1202
  %1204 = load i32, ptr %1203, align 4, !tbaa !11
  %1205 = icmp eq i32 %1204, -1
  br i1 %1205, label %1206, label %1207

1206:                                             ; preds = %1198
  br label %1208

1207:                                             ; preds = %1198
  call void @__assert_fail(ptr noundef @.str.23, ptr noundef @.str.4, i32 noundef 679, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

1208:                                             ; preds = %1206
  br label %1209

1209:                                             ; preds = %1208, %1191
  %1210 = load i32, ptr %35, align 4, !tbaa !11
  %1211 = load ptr, ptr %27, align 8, !tbaa !5
  %1212 = load i32, ptr %18, align 4, !tbaa !11
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds i32, ptr %1211, i64 %1213
  store i32 %1210, ptr %1214, align 4, !tbaa !11
  %1215 = load i32, ptr %18, align 4, !tbaa !11
  %1216 = add nsw i32 %1215, 1
  store i32 %1216, ptr %18, align 4, !tbaa !11
  %1217 = load ptr, ptr %28, align 8, !tbaa !5
  %1218 = load i32, ptr %35, align 4, !tbaa !11
  %1219 = sext i32 %1218 to i64
  %1220 = getelementptr inbounds i32, ptr %1217, i64 %1219
  store i32 %1215, ptr %1220, align 4, !tbaa !11
  br label %1221

1221:                                             ; preds = %1209
  br label %1222

1222:                                             ; preds = %1221
  %1223 = load ptr, ptr %34, align 8, !tbaa !5
  %1224 = load i32, ptr %35, align 4, !tbaa !11
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds %struct.nrinfo_t, ptr %1223, i64 %1225
  %1227 = getelementptr inbounds %struct.nrinfo_t, ptr %1226, i32 0, i32 0
  %1228 = getelementptr inbounds [2 x i32], ptr %1227, i64 0, i64 0
  store ptr %1228, ptr %26, align 8, !tbaa !5
  %1229 = load ptr, ptr %26, align 8, !tbaa !5
  %1230 = getelementptr inbounds i32, ptr %1229, i64 1
  store i32 0, ptr %1230, align 4, !tbaa !11
  %1231 = load ptr, ptr %26, align 8, !tbaa !5
  %1232 = getelementptr inbounds i32, ptr %1231, i64 0
  store i32 0, ptr %1232, align 4, !tbaa !11
  %1233 = load ptr, ptr %21, align 8, !tbaa !5
  %1234 = load i32, ptr %35, align 4, !tbaa !11
  %1235 = sext i32 %1234 to i64
  %1236 = getelementptr inbounds i32, ptr %1233, i64 %1235
  %1237 = load i32, ptr %1236, align 4, !tbaa !11
  store i32 %1237, ptr %13, align 4, !tbaa !11
  br label %1238

1238:                                             ; preds = %1292, %1222
  %1239 = load i32, ptr %13, align 4, !tbaa !11
  %1240 = load ptr, ptr %21, align 8, !tbaa !5
  %1241 = load i32, ptr %35, align 4, !tbaa !11
  %1242 = add nsw i32 %1241, 1
  %1243 = sext i32 %1242 to i64
  %1244 = getelementptr inbounds i32, ptr %1240, i64 %1243
  %1245 = load i32, ptr %1244, align 4, !tbaa !11
  %1246 = icmp slt i32 %1239, %1245
  br i1 %1246, label %1247, label %1295

1247:                                             ; preds = %1238
  %1248 = load ptr, ptr %23, align 8, !tbaa !5
  %1249 = load i32, ptr %13, align 4, !tbaa !11
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds i32, ptr %1248, i64 %1250
  %1252 = load i32, ptr %1251, align 4, !tbaa !11
  store i32 %1252, ptr %14, align 4, !tbaa !11
  %1253 = load ptr, ptr %24, align 8, !tbaa !5
  %1254 = load i32, ptr %14, align 4, !tbaa !11
  %1255 = sext i32 %1254 to i64
  %1256 = getelementptr inbounds i32, ptr %1253, i64 %1255
  %1257 = load i32, ptr %1256, align 4, !tbaa !11
  %1258 = icmp eq i32 %1257, 2
  br i1 %1258, label %1259, label %1275

1259:                                             ; preds = %1247
  %1260 = load ptr, ptr %22, align 8, !tbaa !5
  %1261 = load i32, ptr %35, align 4, !tbaa !11
  %1262 = sext i32 %1261 to i64
  %1263 = getelementptr inbounds i32, ptr %1260, i64 %1262
  %1264 = load i32, ptr %1263, align 4, !tbaa !11
  %1265 = load ptr, ptr %34, align 8, !tbaa !5
  %1266 = load i32, ptr %14, align 4, !tbaa !11
  %1267 = sext i32 %1266 to i64
  %1268 = getelementptr inbounds %struct.nrinfo_t, ptr %1265, i64 %1267
  %1269 = getelementptr inbounds %struct.nrinfo_t, ptr %1268, i32 0, i32 0
  %1270 = load i32, ptr %41, align 4, !tbaa !11
  %1271 = sext i32 %1270 to i64
  %1272 = getelementptr inbounds [2 x i32], ptr %1269, i64 0, i64 %1271
  %1273 = load i32, ptr %1272, align 4, !tbaa !11
  %1274 = sub nsw i32 %1273, %1264
  store i32 %1274, ptr %1272, align 4, !tbaa !11
  br label %1291

1275:                                             ; preds = %1247
  %1276 = load ptr, ptr %22, align 8, !tbaa !5
  %1277 = load i32, ptr %14, align 4, !tbaa !11
  %1278 = sext i32 %1277 to i64
  %1279 = getelementptr inbounds i32, ptr %1276, i64 %1278
  %1280 = load i32, ptr %1279, align 4, !tbaa !11
  %1281 = load ptr, ptr %26, align 8, !tbaa !5
  %1282 = load ptr, ptr %24, align 8, !tbaa !5
  %1283 = load i32, ptr %14, align 4, !tbaa !11
  %1284 = sext i32 %1283 to i64
  %1285 = getelementptr inbounds i32, ptr %1282, i64 %1284
  %1286 = load i32, ptr %1285, align 4, !tbaa !11
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds i32, ptr %1281, i64 %1287
  %1289 = load i32, ptr %1288, align 4, !tbaa !11
  %1290 = add nsw i32 %1289, %1280
  store i32 %1290, ptr %1288, align 4, !tbaa !11
  br label %1291

1291:                                             ; preds = %1275, %1259
  br label %1292

1292:                                             ; preds = %1291
  %1293 = load i32, ptr %13, align 4, !tbaa !11
  %1294 = add nsw i32 %1293, 1
  store i32 %1294, ptr %13, align 4, !tbaa !11
  br label %1238, !llvm.loop !34

1295:                                             ; preds = %1238
  %1296 = load ptr, ptr %29, align 8, !tbaa !5
  %1297 = load i32, ptr %19, align 4, !tbaa !11
  %1298 = sext i32 %1297 to i64
  %1299 = getelementptr inbounds i32, ptr %1296, i64 %1298
  %1300 = load i32, ptr %1299, align 4, !tbaa !11
  store i32 %1300, ptr %13, align 4, !tbaa !11
  br label %1301

1301:                                             ; preds = %1461, %1295
  %1302 = load i32, ptr %13, align 4, !tbaa !11
  %1303 = load ptr, ptr %29, align 8, !tbaa !5
  %1304 = load i32, ptr %19, align 4, !tbaa !11
  %1305 = add nsw i32 %1304, 1
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds i32, ptr %1303, i64 %1306
  %1308 = load i32, ptr %1307, align 4, !tbaa !11
  %1309 = icmp slt i32 %1302, %1308
  br i1 %1309, label %1310, label %1464

1310:                                             ; preds = %1301
  %1311 = load ptr, ptr %30, align 8, !tbaa !5
  %1312 = load i32, ptr %13, align 4, !tbaa !11
  %1313 = sext i32 %1312 to i64
  %1314 = getelementptr inbounds i32, ptr %1311, i64 %1313
  %1315 = load i32, ptr %1314, align 4, !tbaa !11
  store i32 %1315, ptr %14, align 4, !tbaa !11
  %1316 = load ptr, ptr %24, align 8, !tbaa !5
  %1317 = load i32, ptr %14, align 4, !tbaa !11
  %1318 = sext i32 %1317 to i64
  %1319 = getelementptr inbounds i32, ptr %1316, i64 %1318
  %1320 = load i32, ptr %1319, align 4, !tbaa !11
  %1321 = icmp eq i32 %1320, 2
  br i1 %1321, label %1333, label %1322

1322:                                             ; preds = %1310
  %1323 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, i32 noundef 694, ptr noundef @.str.4)
  %1324 = load ptr, ptr %24, align 8, !tbaa !5
  %1325 = load i32, ptr %14, align 4, !tbaa !11
  %1326 = sext i32 %1325 to i64
  %1327 = getelementptr inbounds i32, ptr %1324, i64 %1326
  %1328 = load i32, ptr %1327, align 4, !tbaa !11
  %1329 = icmp eq i32 %1328, 2
  br i1 %1329, label %1330, label %1331

1330:                                             ; preds = %1322
  br label %1332

1331:                                             ; preds = %1322
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.4, i32 noundef 694, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

1332:                                             ; preds = %1330
  br label %1333

1333:                                             ; preds = %1332, %1310
  %1334 = load i32, ptr %42, align 4, !tbaa !11
  %1335 = load ptr, ptr %24, align 8, !tbaa !5
  %1336 = load i32, ptr %14, align 4, !tbaa !11
  %1337 = sext i32 %1336 to i64
  %1338 = getelementptr inbounds i32, ptr %1335, i64 %1337
  store i32 %1334, ptr %1338, align 4, !tbaa !11
  br label %1339

1339:                                             ; preds = %1333
  %1340 = load ptr, ptr %22, align 8, !tbaa !5
  %1341 = load i32, ptr %14, align 4, !tbaa !11
  %1342 = sext i32 %1341 to i64
  %1343 = getelementptr inbounds i32, ptr %1340, i64 %1342
  %1344 = load i32, ptr %1343, align 4, !tbaa !11
  %1345 = load ptr, ptr %25, align 8, !tbaa !5
  %1346 = load i32, ptr %42, align 4, !tbaa !11
  %1347 = sext i32 %1346 to i64
  %1348 = getelementptr inbounds i32, ptr %1345, i64 %1347
  %1349 = load i32, ptr %1348, align 4, !tbaa !11
  %1350 = add nsw i32 %1349, %1344
  store i32 %1350, ptr %1348, align 4, !tbaa !11
  %1351 = load ptr, ptr %22, align 8, !tbaa !5
  %1352 = load i32, ptr %14, align 4, !tbaa !11
  %1353 = sext i32 %1352 to i64
  %1354 = getelementptr inbounds i32, ptr %1351, i64 %1353
  %1355 = load i32, ptr %1354, align 4, !tbaa !11
  %1356 = load ptr, ptr %25, align 8, !tbaa !5
  %1357 = getelementptr inbounds i32, ptr %1356, i64 2
  %1358 = load i32, ptr %1357, align 4, !tbaa !11
  %1359 = sub nsw i32 %1358, %1355
  store i32 %1359, ptr %1357, align 4, !tbaa !11
  br label %1360

1360:                                             ; preds = %1339
  br label %1361

1361:                                             ; preds = %1360
  br label %1362

1362:                                             ; preds = %1361
  %1363 = load ptr, ptr %28, align 8, !tbaa !5
  %1364 = load i32, ptr %14, align 4, !tbaa !11
  %1365 = sext i32 %1364 to i64
  %1366 = getelementptr inbounds i32, ptr %1363, i64 %1365
  %1367 = load i32, ptr %1366, align 4, !tbaa !11
  %1368 = icmp ne i32 %1367, -1
  br i1 %1368, label %1380, label %1369

1369:                                             ; preds = %1362
  %1370 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, i32 noundef 697, ptr noundef @.str.4)
  %1371 = load ptr, ptr %28, align 8, !tbaa !5
  %1372 = load i32, ptr %14, align 4, !tbaa !11
  %1373 = sext i32 %1372 to i64
  %1374 = getelementptr inbounds i32, ptr %1371, i64 %1373
  %1375 = load i32, ptr %1374, align 4, !tbaa !11
  %1376 = icmp ne i32 %1375, -1
  br i1 %1376, label %1377, label %1378

1377:                                             ; preds = %1369
  br label %1379

1378:                                             ; preds = %1369
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.4, i32 noundef 697, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

1379:                                             ; preds = %1377
  br label %1380

1380:                                             ; preds = %1379, %1362
  %1381 = load ptr, ptr %27, align 8, !tbaa !5
  %1382 = load i32, ptr %18, align 4, !tbaa !11
  %1383 = add nsw i32 %1382, -1
  store i32 %1383, ptr %18, align 4, !tbaa !11
  %1384 = sext i32 %1383 to i64
  %1385 = getelementptr inbounds i32, ptr %1381, i64 %1384
  %1386 = load i32, ptr %1385, align 4, !tbaa !11
  %1387 = load ptr, ptr %27, align 8, !tbaa !5
  %1388 = load ptr, ptr %28, align 8, !tbaa !5
  %1389 = load i32, ptr %14, align 4, !tbaa !11
  %1390 = sext i32 %1389 to i64
  %1391 = getelementptr inbounds i32, ptr %1388, i64 %1390
  %1392 = load i32, ptr %1391, align 4, !tbaa !11
  %1393 = sext i32 %1392 to i64
  %1394 = getelementptr inbounds i32, ptr %1387, i64 %1393
  store i32 %1386, ptr %1394, align 4, !tbaa !11
  %1395 = load ptr, ptr %28, align 8, !tbaa !5
  %1396 = load i32, ptr %14, align 4, !tbaa !11
  %1397 = sext i32 %1396 to i64
  %1398 = getelementptr inbounds i32, ptr %1395, i64 %1397
  %1399 = load i32, ptr %1398, align 4, !tbaa !11
  %1400 = load ptr, ptr %28, align 8, !tbaa !5
  %1401 = load ptr, ptr %27, align 8, !tbaa !5
  %1402 = load i32, ptr %18, align 4, !tbaa !11
  %1403 = sext i32 %1402 to i64
  %1404 = getelementptr inbounds i32, ptr %1401, i64 %1403
  %1405 = load i32, ptr %1404, align 4, !tbaa !11
  %1406 = sext i32 %1405 to i64
  %1407 = getelementptr inbounds i32, ptr %1400, i64 %1406
  store i32 %1399, ptr %1407, align 4, !tbaa !11
  %1408 = load ptr, ptr %28, align 8, !tbaa !5
  %1409 = load i32, ptr %14, align 4, !tbaa !11
  %1410 = sext i32 %1409 to i64
  %1411 = getelementptr inbounds i32, ptr %1408, i64 %1410
  store i32 -1, ptr %1411, align 4, !tbaa !11
  br label %1412

1412:                                             ; preds = %1380
  br label %1413

1413:                                             ; preds = %1412
  %1414 = load ptr, ptr %21, align 8, !tbaa !5
  %1415 = load i32, ptr %14, align 4, !tbaa !11
  %1416 = sext i32 %1415 to i64
  %1417 = getelementptr inbounds i32, ptr %1414, i64 %1416
  %1418 = load i32, ptr %1417, align 4, !tbaa !11
  store i32 %1418, ptr %15, align 4, !tbaa !11
  br label %1419

1419:                                             ; preds = %1457, %1413
  %1420 = load i32, ptr %15, align 4, !tbaa !11
  %1421 = load ptr, ptr %21, align 8, !tbaa !5
  %1422 = load i32, ptr %14, align 4, !tbaa !11
  %1423 = add nsw i32 %1422, 1
  %1424 = sext i32 %1423 to i64
  %1425 = getelementptr inbounds i32, ptr %1421, i64 %1424
  %1426 = load i32, ptr %1425, align 4, !tbaa !11
  %1427 = icmp slt i32 %1420, %1426
  br i1 %1427, label %1428, label %1460

1428:                                             ; preds = %1419
  %1429 = load ptr, ptr %23, align 8, !tbaa !5
  %1430 = load i32, ptr %15, align 4, !tbaa !11
  %1431 = sext i32 %1430 to i64
  %1432 = getelementptr inbounds i32, ptr %1429, i64 %1431
  %1433 = load i32, ptr %1432, align 4, !tbaa !11
  store i32 %1433, ptr %16, align 4, !tbaa !11
  %1434 = load ptr, ptr %24, align 8, !tbaa !5
  %1435 = load i32, ptr %16, align 4, !tbaa !11
  %1436 = sext i32 %1435 to i64
  %1437 = getelementptr inbounds i32, ptr %1434, i64 %1436
  %1438 = load i32, ptr %1437, align 4, !tbaa !11
  %1439 = icmp eq i32 %1438, 2
  br i1 %1439, label %1440, label %1456

1440:                                             ; preds = %1428
  %1441 = load ptr, ptr %22, align 8, !tbaa !5
  %1442 = load i32, ptr %14, align 4, !tbaa !11
  %1443 = sext i32 %1442 to i64
  %1444 = getelementptr inbounds i32, ptr %1441, i64 %1443
  %1445 = load i32, ptr %1444, align 4, !tbaa !11
  %1446 = load ptr, ptr %34, align 8, !tbaa !5
  %1447 = load i32, ptr %16, align 4, !tbaa !11
  %1448 = sext i32 %1447 to i64
  %1449 = getelementptr inbounds %struct.nrinfo_t, ptr %1446, i64 %1448
  %1450 = getelementptr inbounds %struct.nrinfo_t, ptr %1449, i32 0, i32 0
  %1451 = load i32, ptr %42, align 4, !tbaa !11
  %1452 = sext i32 %1451 to i64
  %1453 = getelementptr inbounds [2 x i32], ptr %1450, i64 0, i64 %1452
  %1454 = load i32, ptr %1453, align 4, !tbaa !11
  %1455 = add nsw i32 %1454, %1445
  store i32 %1455, ptr %1453, align 4, !tbaa !11
  br label %1456

1456:                                             ; preds = %1440, %1428
  br label %1457

1457:                                             ; preds = %1456
  %1458 = load i32, ptr %15, align 4, !tbaa !11
  %1459 = add nsw i32 %1458, 1
  store i32 %1459, ptr %15, align 4, !tbaa !11
  br label %1419, !llvm.loop !35

1460:                                             ; preds = %1419
  br label %1461

1461:                                             ; preds = %1460
  %1462 = load i32, ptr %13, align 4, !tbaa !11
  %1463 = add nsw i32 %1462, 1
  store i32 %1463, ptr %13, align 4, !tbaa !11
  br label %1301, !llvm.loop !36

1464:                                             ; preds = %1301
  br label %1465

1465:                                             ; preds = %1464
  %1466 = load i32, ptr %19, align 4, !tbaa !11
  %1467 = add nsw i32 %1466, -1
  store i32 %1467, ptr %19, align 4, !tbaa !11
  br label %1134, !llvm.loop !37

1468:                                             ; preds = %1134
  %1469 = load i32, ptr %37, align 4, !tbaa !11
  %1470 = load ptr, ptr %25, align 8, !tbaa !5
  %1471 = getelementptr inbounds i32, ptr %1470, i64 2
  %1472 = load i32, ptr %1471, align 4, !tbaa !11
  %1473 = icmp eq i32 %1469, %1472
  br i1 %1473, label %1484, label %1474

1474:                                             ; preds = %1468
  %1475 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef 706, ptr noundef @.str.4)
  %1476 = load i32, ptr %37, align 4, !tbaa !11
  %1477 = load ptr, ptr %25, align 8, !tbaa !5
  %1478 = getelementptr inbounds i32, ptr %1477, i64 2
  %1479 = load i32, ptr %1478, align 4, !tbaa !11
  %1480 = icmp eq i32 %1476, %1479
  br i1 %1480, label %1481, label %1482

1481:                                             ; preds = %1474
  br label %1483

1482:                                             ; preds = %1474
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.4, i32 noundef 706, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #6
  unreachable

1483:                                             ; preds = %1481
  br label %1484

1484:                                             ; preds = %1483, %1468
  %1485 = load ptr, ptr %6, align 8, !tbaa !5
  %1486 = getelementptr inbounds %struct.ctrl_t, ptr %1485, i32 0, i32 2
  %1487 = load i32, ptr %1486, align 8, !tbaa !23
  %1488 = and i32 %1487, 8
  %1489 = icmp ne i32 %1488, 0
  br i1 %1489, label %1490, label %1501

1490:                                             ; preds = %1484
  %1491 = load i32, ptr %37, align 4, !tbaa !11
  %1492 = load i32, ptr %39, align 4, !tbaa !11
  %1493 = load ptr, ptr %25, align 8, !tbaa !5
  %1494 = getelementptr inbounds i32, ptr %1493, i64 0
  %1495 = load i32, ptr %1494, align 4, !tbaa !11
  %1496 = load ptr, ptr %25, align 8, !tbaa !5
  %1497 = getelementptr inbounds i32, ptr %1496, i64 1
  %1498 = load i32, ptr %1497, align 4, !tbaa !11
  %1499 = load i32, ptr %18, align 4, !tbaa !11
  %1500 = call i32 (ptr, ...) @printf(ptr noundef @.str.33, i32 noundef %1491, i32 noundef %1492, i32 noundef %1495, i32 noundef %1498, i32 noundef %1499)
  br label %1501

1501:                                             ; preds = %1490, %1484
  %1502 = load i32, ptr %37, align 4, !tbaa !11
  %1503 = load ptr, ptr %7, align 8, !tbaa !5
  %1504 = getelementptr inbounds %struct.graph_t, ptr %1503, i32 0, i32 17
  store i32 %1502, ptr %1504, align 8, !tbaa !28
  %1505 = load i32, ptr %18, align 4, !tbaa !11
  %1506 = load ptr, ptr %7, align 8, !tbaa !5
  %1507 = getelementptr inbounds %struct.graph_t, ptr %1506, i32 0, i32 21
  store i32 %1505, ptr %1507, align 8, !tbaa !27
  %1508 = load i32, ptr %39, align 4, !tbaa !11
  %1509 = icmp eq i32 %1508, -1
  br i1 %1509, label %1514, label %1510

1510:                                             ; preds = %1501
  %1511 = load i32, ptr %37, align 4, !tbaa !11
  %1512 = load i32, ptr %38, align 4, !tbaa !11
  %1513 = icmp sge i32 %1511, %1512
  br i1 %1513, label %1514, label %1515

1514:                                             ; preds = %1510, %1501
  br label %1519

1515:                                             ; preds = %1510
  br label %1516

1516:                                             ; preds = %1515
  %1517 = load i32, ptr %40, align 4, !tbaa !11
  %1518 = add nsw i32 %1517, 1
  store i32 %1518, ptr %40, align 4, !tbaa !11
  br label %143, !llvm.loop !38

1519:                                             ; preds = %1514, %143
  %1520 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 0
  %1521 = load ptr, ptr %1520, align 16, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1521)
  %1522 = getelementptr inbounds [2 x ptr], ptr %33, i64 0, i64 1
  %1523 = load ptr, ptr %1522, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1523)
  %1524 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1524)
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  ret void
}

declare i32 @libmetis__rpqSeeTopVal(ptr noundef) #1

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

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


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

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

@.str.4 = external hidden unnamed_addr constant [141 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [49 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP = external hidden unnamed_addr constant [85 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [55 x i8], align 1

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

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

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

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #1

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

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #1

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

declare void @libmetis__rpqReset(ptr noundef) local_unnamed_addr #1

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

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

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) local_unnamed_addr #1

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

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #1

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

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #1

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #1

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

39:                                               ; preds = %5
  %40 = load i32, ptr %23, align 4, !tbaa !25
  %41 = getelementptr inbounds i8, ptr %23, i64 4
  %42 = load i32, ptr %41, align 4, !tbaa !25
  %43 = load i32, ptr %1, align 8, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %1, i64 136
  %45 = load i32, ptr %44, align 8, !tbaa !26
  %46 = getelementptr inbounds i8, ptr %1, i64 112
  %47 = load i32, ptr %46, align 8, !tbaa !27
  %48 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, i32 noundef %40, i32 noundef %42, i32 noundef %43, i32 noundef %45, i32 noundef %47)
  br label %49

49:                                               ; preds = %39, %5
  %50 = load i32, ptr %23, align 4, !tbaa !25
  %51 = getelementptr inbounds i8, ptr %23, i64 4
  %52 = load i32, ptr %51, align 4, !tbaa !25
  %. = tail call i32 @llvm.smax.i32(i32 %50, i32 %52)
  %53 = sitofp i32 %. to float
  %54 = fmul float %53, %3
  %55 = fptosi float %54 to i32
  %56 = icmp sgt i32 %4, 0
  br i1 %56, label %.lr.ph637, label %._crit_edge638

.lr.ph637:                                        ; preds = %49
  %57 = getelementptr inbounds i8, ptr %1, i64 112
  %58 = getelementptr inbounds i8, ptr %1, i64 136
  %59 = icmp sgt i32 %9, 0
  %60 = getelementptr inbounds i8, ptr %7, i64 4
  %61 = getelementptr inbounds i8, ptr %8, i64 4
  %62 = add nsw i32 %34, -1
  %63 = getelementptr inbounds i8, ptr %23, i64 8
  %wide.trip.count675 = zext nneg i32 %9 to i64
  br label %64

64:                                               ; preds = %550, %.lr.ph637
  %.0454634 = phi i32 [ 0, %.lr.ph637 ], [ %552, %550 ]
  %65 = tail call ptr @libmetis__iset(i64 noundef %26, i32 noundef -1, ptr noundef %30) #7
  tail call void @libmetis__rpqReset(ptr noundef %27) #7
  tail call void @libmetis__rpqReset(ptr noundef %28) #7
  %66 = load i32, ptr %57, align 8, !tbaa !27
  %67 = load i32, ptr %58, align 8, !tbaa !26
  tail call void @libmetis__irandArrayPermute(i32 noundef %67, ptr noundef %31, i32 noundef %67, i32 noundef 1) #7
  %68 = icmp sgt i32 %67, 0
  br i1 %68, label %.lr.ph.preheader, label %._crit_edge

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

.lr.ph:                                           ; preds = %.lr.ph.preheader, %118
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %118 ]
  %69 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv
  %70 = load i32, ptr %69, align 4, !tbaa !25
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds i32, ptr %17, i64 %71
  %73 = load i32, ptr %72, align 4, !tbaa !25
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds i32, ptr %21, i64 %74
  %76 = load i32, ptr %75, align 4, !tbaa !25
  %77 = icmp eq i32 %76, 2
  br i1 %77, label %83, label %78

78:                                               ; preds = %.lr.ph
  %79 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef 519, ptr noundef nonnull @.str.4)
  %80 = load i32, ptr %75, align 4, !tbaa !25
  %81 = icmp eq i32 %80, 2
  br i1 %81, label %83, label %82

82:                                               ; preds = %78
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.4, i32 noundef 519, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

83:                                               ; preds = %78, %.lr.ph
  %84 = getelementptr inbounds i32, ptr %2, i64 %74
  %85 = load i32, ptr %84, align 4, !tbaa !25
  switch i32 %85, label %100 [
    i32 -1, label %86
    i32 2, label %118
  ]

86:                                               ; preds = %83
  %87 = getelementptr inbounds i32, ptr %15, i64 %74
  %88 = load i32, ptr %87, align 4, !tbaa !25
  %89 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %74
  %90 = getelementptr inbounds i8, ptr %89, i64 4
  %91 = load i32, ptr %90, align 4, !tbaa !25
  %92 = sub nsw i32 %88, %91
  %93 = sitofp i32 %92 to float
  %94 = tail call i32 @libmetis__rpqInsert(ptr noundef %27, i32 noundef %73, float noundef %93) #7
  %95 = load i32, ptr %87, align 4, !tbaa !25
  %96 = load i32, ptr %89, align 4, !tbaa !25
  %97 = sub nsw i32 %95, %96
  %98 = sitofp i32 %97 to float
  %99 = tail call i32 @libmetis__rpqInsert(ptr noundef %28, i32 noundef %73, float noundef %98) #7
  br label %.sink.split

100:                                              ; preds = %83
  %101 = sext i32 %85 to i64
  %102 = getelementptr inbounds [2 x ptr], ptr %6, i64 0, i64 %101
  %103 = load ptr, ptr %102, align 8, !tbaa !19
  %104 = getelementptr inbounds i32, ptr %15, i64 %74
  %105 = load i32, ptr %104, align 4, !tbaa !25
  %106 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %74
  %107 = add nuw nsw i32 %85, 1
  %108 = srem i32 %107, 2
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds [2 x i32], ptr %106, i64 0, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !25
  %112 = sub nsw i32 %105, %111
  %113 = sitofp i32 %112 to float
  %114 = tail call i32 @libmetis__rpqInsert(ptr noundef %103, i32 noundef %73, float noundef %113) #7
  %115 = load i32, ptr %84, align 4, !tbaa !25
  %116 = sub nsw i32 -10, %115
  br label %.sink.split

.sink.split:                                      ; preds = %100, %86
  %.sink = phi i32 [ -5, %86 ], [ %116, %100 ]
  %117 = getelementptr inbounds i32, ptr %30, i64 %74
  store i32 %.sink, ptr %117, align 4, !tbaa !25
  br label %118

118:                                              ; preds = %.sink.split, %83
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

._crit_edge:                                      ; preds = %118, %64
  %119 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %67) #7
  %.not486 = icmp eq i32 %119, 0
  br i1 %.not486, label %120, label %124

120:                                              ; preds = %._crit_edge
  %121 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 531, ptr noundef nonnull @.str.4)
  %122 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %67) #7
  %.not487 = icmp eq i32 %122, 0
  br i1 %.not487, label %123, label %124

123:                                              ; preds = %120
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 531, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

124:                                              ; preds = %120, %._crit_edge
  %125 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #7
  %.not488 = icmp eq i32 %125, 0
  br i1 %.not488, label %126, label %130

126:                                              ; preds = %124
  %127 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef 532, ptr noundef nonnull @.str.4)
  %128 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #7
  %.not489 = icmp eq i32 %128, 0
  br i1 %.not489, label %129, label %130

129:                                              ; preds = %126
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 532, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

130:                                              ; preds = %126, %124
  store i32 0, ptr %33, align 4, !tbaa !25
  br i1 %59, label %.lr.ph584, label %.loopexit523

.lr.ph584:                                        ; preds = %130
  %131 = load i32, ptr %23, align 4, !tbaa !25
  %132 = load i32, ptr %51, align 4, !tbaa !25
  %133 = sub nsw i32 %131, %132
  %134 = tail call i32 @llvm.abs.i32(i32 %133, i1 true)
  %135 = and i32 %.0454634, 1
  br label %136

136:                                              ; preds = %.lr.ph584, %398
  %indvars.iv672 = phi i64 [ 0, %.lr.ph584 ], [ %indvars.iv.next673, %398 ]
  %.0450582 = phi i32 [ %134, %.lr.ph584 ], [ %.1, %398 ]
  %.0455581 = phi i32 [ -1, %.lr.ph584 ], [ %.1456, %398 ]
  %.0459580 = phi i32 [ %66, %.lr.ph584 ], [ %.1460, %398 ]
  %.0461579 = phi i32 [ %67, %.lr.ph584 ], [ %.1462.lcssa, %398 ]
  %.0466577 = phi i32 [ 0, %.lr.ph584 ], [ %.1467.lcssa, %398 ]
  %137 = tail call i32 @libmetis__rpqSeeTopVal(ptr noundef %27) #7
  store i32 %137, ptr %7, align 4, !tbaa !25
  %138 = tail call i32 @libmetis__rpqSeeTopVal(ptr noundef %28) #7
  store i32 %138, ptr %60, align 4, !tbaa !25
  %139 = icmp ne i32 %137, -1
  %140 = icmp ne i32 %138, -1
  %or.cond = select i1 %139, i1 %140, i1 false
  %141 = trunc nuw nsw i64 %indvars.iv672 to i32
  br i1 %or.cond, label %142, label %169

142:                                              ; preds = %136
  %143 = sext i32 %137 to i64
  %144 = getelementptr inbounds i32, ptr %15, i64 %143
  %145 = load i32, ptr %144, align 4, !tbaa !25
  %146 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %143, i32 0, i64 1
  %147 = load i32, ptr %146, align 4, !tbaa !25
  %148 = sub nsw i32 %145, %147
  store i32 %148, ptr %8, align 4, !tbaa !25
  %149 = sext i32 %138 to i64
  %150 = getelementptr inbounds i32, ptr %15, i64 %149
  %151 = load i32, ptr %150, align 4, !tbaa !25
  %152 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %149
  %153 = load i32, ptr %152, align 4, !tbaa !25
  %154 = sub nsw i32 %151, %153
  store i32 %154, ptr %61, align 4, !tbaa !25
  %155 = icmp sgt i32 %148, %154
  %156 = icmp slt i32 %148, %154
  %spec.select = select i1 %156, i32 1, i32 %135
  %157 = select i1 %155, i32 0, i32 %spec.select
  %158 = zext nneg i32 %157 to i64
  %159 = getelementptr inbounds i32, ptr %23, i64 %158
  %160 = load i32, ptr %159, align 4, !tbaa !25
  %161 = getelementptr inbounds [2 x i32], ptr %7, i64 0, i64 %158
  %162 = load i32, ptr %161, align 4, !tbaa !25
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i32, ptr %15, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !25
  %166 = add nsw i32 %165, %160
  %167 = icmp sgt i32 %166, %55
  %168 = zext i1 %167 to i32
  %spec.select509 = xor i32 %157, %168
  br label %186

169:                                              ; preds = %136
  %170 = icmp eq i32 %137, -1
  %171 = icmp eq i32 %138, -1
  %or.cond5 = select i1 %170, i1 %171, i1 false
  br i1 %or.cond5, label %.loopexit523, label %172

172:                                              ; preds = %169
  br i1 %139, label %173, label %179

173:                                              ; preds = %172
  %174 = load i32, ptr %23, align 4, !tbaa !25
  %175 = sext i32 %137 to i64
  %176 = getelementptr inbounds i32, ptr %15, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !25
  %178 = add nsw i32 %177, %174
  %.not490 = icmp sgt i32 %178, %55
  br i1 %.not490, label %179, label %186

179:                                              ; preds = %173, %172
  br i1 %171, label %.loopexit523, label %180

180:                                              ; preds = %179
  %181 = load i32, ptr %51, align 4, !tbaa !25
  %182 = sext i32 %138 to i64
  %183 = getelementptr inbounds i32, ptr %15, i64 %182
  %184 = load i32, ptr %183, align 4, !tbaa !25
  %185 = add nsw i32 %184, %181
  %.not492 = icmp sgt i32 %185, %55
  br i1 %.not492, label %.loopexit523, label %186

186:                                              ; preds = %142, %180, %173
  %.0453 = phi i32 [ %spec.select509, %142 ], [ 0, %173 ], [ 1, %180 ]
  %187 = xor i32 %.0453, 1
  %188 = zext nneg i32 %.0453 to i64
  %189 = getelementptr inbounds [2 x ptr], ptr %6, i64 0, i64 %188
  %190 = load ptr, ptr %189, align 8, !tbaa !19
  %191 = tail call i32 @libmetis__rpqGetTop(ptr noundef %190) #7
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds i32, ptr %30, i64 %192
  %194 = load i32, ptr %193, align 4, !tbaa !25
  %195 = icmp eq i32 %194, -5
  br i1 %195, label %196, label %201

196:                                              ; preds = %186
  %197 = zext nneg i32 %187 to i64
  %198 = getelementptr inbounds [2 x ptr], ptr %6, i64 0, i64 %197
  %199 = load ptr, ptr %198, align 8, !tbaa !19
  %200 = tail call i32 @libmetis__rpqDelete(ptr noundef %199, i32 noundef %191) #7
  br label %201

201:                                              ; preds = %196, %186
  %202 = getelementptr inbounds i32, ptr %19, i64 %192
  %203 = load i32, ptr %202, align 4, !tbaa !25
  %.not493 = icmp eq i32 %203, -1
  br i1 %.not493, label %204, label %208

204:                                              ; preds = %201
  %205 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 574, ptr noundef nonnull @.str.4)
  %206 = load i32, ptr %202, align 4, !tbaa !25
  %.not494 = icmp eq i32 %206, -1
  br i1 %.not494, label %207, label %208

207:                                              ; preds = %204
  tail call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

208:                                              ; preds = %204, %201
  %209 = getelementptr i32, ptr %11, i64 %192
  %210 = getelementptr i8, ptr %209, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !25
  %212 = add nsw i32 %211, %.0466577
  %213 = load i32, ptr %209, align 4, !tbaa !25
  %214 = sub i32 %212, %213
  %.not495 = icmp slt i32 %214, %62
  br i1 %.not495, label %215, label %.loopexit523

215:                                              ; preds = %208
  %216 = getelementptr inbounds i32, ptr %15, i64 %192
  %217 = load i32, ptr %216, align 4, !tbaa !25
  %218 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %192
  %219 = zext nneg i32 %187 to i64
  %220 = getelementptr inbounds [2 x i32], ptr %218, i64 0, i64 %219
  %221 = load i32, ptr %220, align 4, !tbaa !25
  %.neg = sub i32 %221, %217
  %222 = load i32, ptr %63, align 4, !tbaa !25
  %223 = add i32 %.neg, %222
  store i32 %223, ptr %63, align 4, !tbaa !25
  %224 = getelementptr inbounds i32, ptr %23, i64 %188
  %225 = load i32, ptr %224, align 4, !tbaa !25
  %226 = load i32, ptr %216, align 4, !tbaa !25
  %227 = getelementptr inbounds i32, ptr %23, i64 %219
  %228 = load i32, ptr %227, align 4, !tbaa !25
  %229 = load i32, ptr %220, align 4, !tbaa !25
  %.neg496 = add i32 %226, %225
  %230 = sub i32 %.neg496, %228
  %231 = add i32 %230, %229
  %232 = tail call i32 @llvm.abs.i32(i32 %231, i1 true)
  %233 = icmp slt i32 %223, %.0459580
  br i1 %233, label %243, label %234

234:                                              ; preds = %215
  %235 = icmp eq i32 %223, %.0459580
  %236 = icmp slt i32 %232, %.0450582
  %or.cond510 = select i1 %235, i1 %236, i1 false
  br i1 %or.cond510, label %243, label %237

237:                                              ; preds = %234
  %238 = sub nsw i32 %141, %.0455581
  %239 = icmp sgt i32 %238, %67
  br i1 %239, label %240, label %243

240:                                              ; preds = %237
  %241 = add i32 %226, %223
  %242 = sub i32 %241, %229
  store i32 %242, ptr %63, align 4, !tbaa !25
  br label %.loopexit523

243:                                              ; preds = %215, %234, %237
  %.1460 = phi i32 [ %.0459580, %237 ], [ %.0459580, %234 ], [ %223, %215 ]
  %.1456 = phi i32 [ %.0455581, %237 ], [ %141, %234 ], [ %141, %215 ]
  %.1 = phi i32 [ %.0450582, %237 ], [ %232, %234 ], [ %232, %215 ]
  %244 = load i32, ptr %202, align 4, !tbaa !25
  %.not497 = icmp eq i32 %244, -1
  br i1 %.not497, label %245, label %249

245:                                              ; preds = %243
  %246 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 596, ptr noundef nonnull @.str.4)
  %247 = load i32, ptr %202, align 4, !tbaa !25
  %.not498 = icmp eq i32 %247, -1
  br i1 %.not498, label %248, label %249

248:                                              ; preds = %245
  tail call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 596, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

249:                                              ; preds = %245, %243
  %250 = phi i32 [ %247, %245 ], [ %244, %243 ]
  %251 = add nsw i32 %.0461579, -1
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %17, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !25
  %255 = sext i32 %250 to i64
  %256 = getelementptr inbounds i32, ptr %17, i64 %255
  store i32 %254, ptr %256, align 4, !tbaa !25
  %257 = load i32, ptr %202, align 4, !tbaa !25
  %258 = sext i32 %254 to i64
  %259 = getelementptr inbounds i32, ptr %19, i64 %258
  store i32 %257, ptr %259, align 4, !tbaa !25
  store i32 -1, ptr %202, align 4, !tbaa !25
  %260 = load i32, ptr %216, align 4, !tbaa !25
  %261 = load i32, ptr %224, align 4, !tbaa !25
  %262 = add nsw i32 %261, %260
  store i32 %262, ptr %224, align 4, !tbaa !25
  %263 = getelementptr inbounds i32, ptr %21, i64 %192
  store i32 %.0453, ptr %263, align 4, !tbaa !25
  store i32 %141, ptr %193, align 4, !tbaa !25
  %264 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv672
  store i32 %191, ptr %264, align 4, !tbaa !25
  %265 = load i32, ptr %209, align 4, !tbaa !25
  %invariant.gep568 = getelementptr [2 x i32], ptr %25, i64 0, i64 %188
  %266 = load i32, ptr %210, align 4, !tbaa !25
  %267 = icmp slt i32 %265, %266
  br i1 %267, label %.lr.ph574, label %._crit_edge575

.lr.ph574:                                        ; preds = %249
  %invariant.gep = getelementptr [2 x i32], ptr %25, i64 0, i64 %219
  %268 = sub nuw nsw i32 -10, %.0453
  %.neg501 = add nuw nsw i32 %.0453, -11
  %269 = getelementptr inbounds [2 x ptr], ptr %6, i64 0, i64 %219
  %270 = sext i32 %265 to i64
  br label %271

271:                                              ; preds = %.lr.ph574, %372
  %indvars.iv669 = phi i64 [ %270, %.lr.ph574 ], [ %indvars.iv.next670, %372 ]
  %.1462571 = phi i32 [ %251, %.lr.ph574 ], [ %.2463, %372 ]
  %.1467570 = phi i32 [ %.0466577, %.lr.ph574 ], [ %.2468, %372 ]
  %272 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv669
  %273 = load i32, ptr %272, align 4, !tbaa !25
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds i32, ptr %21, i64 %274
  %276 = load i32, ptr %275, align 4, !tbaa !25
  %277 = icmp eq i32 %276, 2
  br i1 %277, label %278, label %294

278:                                              ; preds = %271
  %279 = getelementptr inbounds i32, ptr %15, i64 %274
  %280 = load i32, ptr %279, align 4, !tbaa !25
  %gep569 = getelementptr %struct.nrinfo_t, ptr %invariant.gep568, i64 %274
  %281 = load i32, ptr %gep569, align 4, !tbaa !25
  %282 = load i32, ptr %216, align 4, !tbaa !25
  %283 = add nsw i32 %282, %281
  store i32 %283, ptr %gep569, align 4, !tbaa !25
  %284 = getelementptr inbounds i32, ptr %30, i64 %274
  %285 = load i32, ptr %284, align 4, !tbaa !25
  %286 = icmp eq i32 %285, -5
  %287 = icmp eq i32 %285, %.neg501
  %or.cond511 = select i1 %286, i1 true, i1 %287
  br i1 %or.cond511, label %288, label %372

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

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

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

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

308:                                              ; preds = %300
  tail call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.4, i32 noundef 615, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

309:                                              ; preds = %300, %296
  %310 = sext i32 %.1462571 to i64
  %311 = getelementptr inbounds i32, ptr %17, i64 %310
  store i32 %273, ptr %311, align 4, !tbaa !25
  %312 = add nsw i32 %.1462571, 1
  store i32 %.1462571, ptr %297, align 4, !tbaa !25
  %313 = add nsw i32 %.1467570, 1
  %314 = sext i32 %.1467570 to i64
  %315 = getelementptr inbounds i32, ptr %35, i64 %314
  store i32 %273, ptr %315, align 4, !tbaa !25
  store i32 2, ptr %275, align 4, !tbaa !25
  %316 = getelementptr inbounds i32, ptr %15, i64 %274
  %317 = load i32, ptr %316, align 4, !tbaa !25
  %318 = load i32, ptr %227, align 4, !tbaa !25
  %319 = sub nsw i32 %318, %317
  store i32 %319, ptr %227, align 4, !tbaa !25
  %320 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %274
  %321 = getelementptr inbounds i8, ptr %320, i64 4
  store i32 0, ptr %321, align 4, !tbaa !25
  store i32 0, ptr %320, align 4, !tbaa !25
  %322 = getelementptr inbounds i32, ptr %11, i64 %274
  %323 = load i32, ptr %322, align 4, !tbaa !25
  %324 = getelementptr i8, ptr %322, i64 4
  %325 = load i32, ptr %324, align 4, !tbaa !25
  %326 = icmp slt i32 %323, %325
  br i1 %326, label %.lr.ph566.preheader, label %._crit_edge567

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

.lr.ph566:                                        ; preds = %.lr.ph566.preheader, %353
  %indvars.iv666 = phi i64 [ %327, %.lr.ph566.preheader ], [ %indvars.iv.next667, %353 ]
  %328 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv666
  %329 = load i32, ptr %328, align 4, !tbaa !25
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %21, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !25
  %.not500 = icmp eq i32 %332, 2
  %333 = getelementptr inbounds i32, ptr %15, i64 %330
  %334 = load i32, ptr %333, align 4, !tbaa !25
  br i1 %.not500, label %340, label %335

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

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

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

353:                                              ; preds = %340, %335, %348
  %indvars.iv.next667 = add nsw i64 %indvars.iv666, 1
  %354 = load i32, ptr %324, align 4, !tbaa !25
  %355 = sext i32 %354 to i64
  %356 = icmp slt i64 %indvars.iv.next667, %355
  br i1 %356, label %.lr.ph566, label %._crit_edge567, !llvm.loop !30

._crit_edge567:                                   ; preds = %353, %309
  %357 = getelementptr inbounds i32, ptr %30, i64 %274
  %358 = load i32, ptr %357, align 4, !tbaa !25
  %359 = icmp eq i32 %358, -1
  br i1 %359, label %360, label %372

360:                                              ; preds = %._crit_edge567
  %361 = getelementptr inbounds i32, ptr %2, i64 %274
  %362 = load i32, ptr %361, align 4, !tbaa !25
  %363 = icmp eq i32 %362, -1
  %364 = icmp eq i32 %362, %.0453
  %or.cond514 = or i1 %363, %364
  br i1 %or.cond514, label %365, label %372

365:                                              ; preds = %360
  %366 = load i32, ptr %316, align 4, !tbaa !25
  %367 = getelementptr inbounds i32, ptr %320, i64 %219
  %368 = load i32, ptr %367, align 4, !tbaa !25
  %369 = sub nsw i32 %366, %368
  %370 = sitofp i32 %369 to float
  %371 = tail call i32 @libmetis__rpqInsert(ptr noundef %190, i32 noundef %273, float noundef %370) #7
  store i32 %268, ptr %357, align 4, !tbaa !25
  br label %372

372:                                              ; preds = %360, %278, %288, %._crit_edge567, %365, %294
  %.2468 = phi i32 [ %.1467570, %288 ], [ %313, %365 ], [ %313, %._crit_edge567 ], [ %.1467570, %294 ], [ %.1467570, %278 ], [ %313, %360 ]
  %.2463 = phi i32 [ %.1462571, %288 ], [ %312, %365 ], [ %312, %._crit_edge567 ], [ %.1462571, %294 ], [ %.1462571, %278 ], [ %312, %360 ]
  %indvars.iv.next670 = add nsw i64 %indvars.iv669, 1
  %373 = load i32, ptr %210, align 4, !tbaa !25
  %374 = sext i32 %373 to i64
  %375 = icmp slt i64 %indvars.iv.next670, %374
  br i1 %375, label %271, label %._crit_edge575, !llvm.loop !31

._crit_edge575:                                   ; preds = %372, %249
  %.1467.lcssa = phi i32 [ %.0466577, %249 ], [ %.2468, %372 ]
  %.1462.lcssa = phi i32 [ %251, %249 ], [ %.2463, %372 ]
  %indvars.iv.next673 = add nuw nsw i64 %indvars.iv672, 1
  %376 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv.next673
  store i32 %.1467.lcssa, ptr %376, align 4, !tbaa !25
  %377 = load i32, ptr %36, align 8, !tbaa !20
  %378 = and i32 %377, 32
  %.not499 = icmp eq i32 %378, 0
  br i1 %.not499, label %398, label %379

379:                                              ; preds = %._crit_edge575
  %380 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 %188
  %381 = load i32, ptr %380, align 4, !tbaa !25
  %382 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 %219
  %383 = load i32, ptr %382, align 4, !tbaa !25
  %384 = getelementptr inbounds [2 x i32], ptr %7, i64 0, i64 %188
  %385 = load i32, ptr %384, align 4, !tbaa !25
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %15, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !25
  %389 = getelementptr inbounds [2 x i32], ptr %7, i64 0, i64 %219
  %390 = load i32, ptr %389, align 4, !tbaa !25
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds i32, ptr %15, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !25
  %394 = load i32, ptr %23, align 4, !tbaa !25
  %395 = load i32, ptr %51, align 4, !tbaa !25
  %396 = load i32, ptr %63, align 4, !tbaa !25
  %397 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32, i32 noundef %191, i32 noundef %.0453, i32 noundef %381, i32 noundef %383, i32 noundef %388, i32 noundef %393, i32 noundef %394, i32 noundef %395, i32 noundef %396)
  br label %398

398:                                              ; preds = %._crit_edge575, %379
  %exitcond676.not = icmp eq i64 %indvars.iv.next673, %wide.trip.count675
  br i1 %exitcond676.not, label %.loopexit523, label %136, !llvm.loop !32

.loopexit523:                                     ; preds = %398, %169, %180, %179, %208, %130, %240
  %.0464545 = phi i32 [ %141, %240 ], [ 0, %130 ], [ %9, %398 ], [ %141, %169 ], [ %141, %180 ], [ %141, %179 ], [ %141, %208 ]
  %.0461540 = phi i32 [ %.0461579, %240 ], [ %67, %130 ], [ %.1462.lcssa, %398 ], [ %.0461579, %169 ], [ %.0461579, %180 ], [ %.0461579, %179 ], [ %.0461579, %208 ]
  %.0459535 = phi i32 [ %.0459580, %240 ], [ %66, %130 ], [ %.1460, %398 ], [ %.0459580, %169 ], [ %.0459580, %180 ], [ %.0459580, %179 ], [ %.0459580, %208 ]
  %.0455530 = phi i32 [ %.0455581, %240 ], [ -1, %130 ], [ %.1456, %398 ], [ %.0455581, %169 ], [ %.0455581, %180 ], [ %.0455581, %179 ], [ %.0455581, %208 ]
  %.1465626 = add nsw i32 %.0464545, -1
  %399 = icmp sgt i32 %.1465626, %.0455530
  br i1 %399, label %.lr.ph631.preheader, label %._crit_edge632

.lr.ph631.preheader:                              ; preds = %.loopexit523
  %400 = sext i32 %.0464545 to i64
  %401 = add nsw i64 %400, -1
  %402 = sext i32 %.0455530 to i64
  br label %.lr.ph631

.loopexit.loopexit:                               ; preds = %._crit_edge620
  %403 = trunc nsw i64 %indvars.iv.next686 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %._crit_edge614
  %.4.lcssa = phi i32 [ %438, %._crit_edge614 ], [ %403, %.loopexit.loopexit ]
  %indvars.iv.next691 = add nsw i64 %indvars.iv690, -1
  %404 = icmp sgt i64 %indvars.iv.next691, %402
  %indvars.iv.next693 = add nsw i64 %indvars.iv692, -1
  br i1 %404, label %.lr.ph631, label %._crit_edge632, !llvm.loop !33

.lr.ph631:                                        ; preds = %.lr.ph631.preheader, %.loopexit
  %indvars.iv692 = phi i64 [ %400, %.lr.ph631.preheader ], [ %indvars.iv.next693, %.loopexit ]
  %indvars.iv690 = phi i64 [ %401, %.lr.ph631.preheader ], [ %indvars.iv.next691, %.loopexit ]
  %.3628 = phi i32 [ %.0461540, %.lr.ph631.preheader ], [ %.4.lcssa, %.loopexit ]
  %405 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv690
  %406 = load i32, ptr %405, align 4, !tbaa !25
  %407 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #7
  %.not504 = icmp eq i32 %407, 0
  br i1 %.not504, label %408, label %412

408:                                              ; preds = %.lr.ph631
  %409 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef 673, ptr noundef nonnull @.str.4)
  %410 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #7
  %.not505 = icmp eq i32 %410, 0
  br i1 %.not505, label %411, label %412

411:                                              ; preds = %408
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 673, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

412:                                              ; preds = %408, %.lr.ph631
  %413 = sext i32 %406 to i64
  %414 = getelementptr inbounds i32, ptr %21, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !25
  %416 = add nsw i32 %415, 1
  %417 = srem i32 %416, 2
  %418 = getelementptr inbounds i32, ptr %15, i64 %413
  %419 = load i32, ptr %418, align 4, !tbaa !25
  %420 = load i32, ptr %63, align 4, !tbaa !25
  %421 = add nsw i32 %420, %419
  store i32 %421, ptr %63, align 4, !tbaa !25
  %422 = load i32, ptr %418, align 4, !tbaa !25
  %423 = sext i32 %415 to i64
  %424 = getelementptr inbounds i32, ptr %23, i64 %423
  %425 = load i32, ptr %424, align 4, !tbaa !25
  %426 = sub nsw i32 %425, %422
  store i32 %426, ptr %424, align 4, !tbaa !25
  store i32 2, ptr %414, align 4, !tbaa !25
  %427 = getelementptr inbounds i32, ptr %19, i64 %413
  %428 = load i32, ptr %427, align 4, !tbaa !25
  %429 = icmp eq i32 %428, -1
  br i1 %429, label %435, label %430

430:                                              ; preds = %412
  %431 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, i32 noundef 679, ptr noundef nonnull @.str.4)
  %432 = load i32, ptr %427, align 4, !tbaa !25
  %433 = icmp eq i32 %432, -1
  br i1 %433, label %435, label %434

434:                                              ; preds = %430
  tail call void @__assert_fail(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.4, i32 noundef 679, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

435:                                              ; preds = %430, %412
  %436 = sext i32 %.3628 to i64
  %437 = getelementptr inbounds i32, ptr %17, i64 %436
  store i32 %406, ptr %437, align 4, !tbaa !25
  %438 = add i32 %.3628, 1
  store i32 %.3628, ptr %427, align 4, !tbaa !25
  %439 = getelementptr inbounds %struct.nrinfo_t, ptr %25, i64 %413
  %440 = getelementptr inbounds i8, ptr %439, i64 4
  store i32 0, ptr %440, align 4, !tbaa !25
  store i32 0, ptr %439, align 4, !tbaa !25
  %441 = getelementptr inbounds i32, ptr %11, i64 %413
  %442 = load i32, ptr %441, align 4, !tbaa !25
  %443 = getelementptr i8, ptr %441, i64 4
  %invariant.gep609 = getelementptr [2 x i32], ptr %25, i64 0, i64 %423
  %444 = load i32, ptr %443, align 4, !tbaa !25
  %445 = icmp slt i32 %442, %444
  br i1 %445, label %.lr.ph613.preheader, label %._crit_edge614

.lr.ph613.preheader:                              ; preds = %435
  %446 = sext i32 %442 to i64
  br label %.lr.ph613

.lr.ph613:                                        ; preds = %.lr.ph613.preheader, %464
  %indvars.iv677 = phi i64 [ %446, %.lr.ph613.preheader ], [ %indvars.iv.next678, %464 ]
  %447 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv677
  %448 = load i32, ptr %447, align 4, !tbaa !25
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %21, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !25
  %452 = icmp eq i32 %451, 2
  br i1 %452, label %453, label %457

453:                                              ; preds = %.lr.ph613
  %454 = load i32, ptr %418, align 4, !tbaa !25
  %gep610 = getelementptr %struct.nrinfo_t, ptr %invariant.gep609, i64 %449
  %455 = load i32, ptr %gep610, align 4, !tbaa !25
  %456 = sub nsw i32 %455, %454
  store i32 %456, ptr %gep610, align 4, !tbaa !25
  br label %464

457:                                              ; preds = %.lr.ph613
  %458 = getelementptr inbounds i32, ptr %15, i64 %449
  %459 = load i32, ptr %458, align 4, !tbaa !25
  %460 = sext i32 %451 to i64
  %461 = getelementptr inbounds i32, ptr %439, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !25
  %463 = add nsw i32 %462, %459
  store i32 %463, ptr %461, align 4, !tbaa !25
  br label %464

464:                                              ; preds = %453, %457
  %indvars.iv.next678 = add nsw i64 %indvars.iv677, 1
  %465 = load i32, ptr %443, align 4, !tbaa !25
  %466 = sext i32 %465 to i64
  %467 = icmp slt i64 %indvars.iv.next678, %466
  br i1 %467, label %.lr.ph613, label %._crit_edge614, !llvm.loop !34

._crit_edge614:                                   ; preds = %464, %435
  %468 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv690
  %469 = load i32, ptr %468, align 4, !tbaa !25
  %470 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv692
  %471 = load i32, ptr %470, align 4, !tbaa !25
  %472 = icmp slt i32 %469, %471
  br i1 %472, label %.lr.ph624, label %.loopexit

.lr.ph624:                                        ; preds = %._crit_edge614
  %473 = sext i32 %417 to i64
  %474 = getelementptr inbounds i32, ptr %23, i64 %473
  %invariant.gep615 = getelementptr [2 x i32], ptr %25, i64 0, i64 %473
  %475 = sext i32 %469 to i64
  %476 = sext i32 %438 to i64
  br label %477

477:                                              ; preds = %.lr.ph624, %._crit_edge620
  %indvars.iv685 = phi i64 [ %476, %.lr.ph624 ], [ %indvars.iv.next686, %._crit_edge620 ]
  %indvars.iv683 = phi i64 [ %475, %.lr.ph624 ], [ %indvars.iv.next684, %._crit_edge620 ]
  %478 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv683
  %479 = load i32, ptr %478, align 4, !tbaa !25
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i32, ptr %21, i64 %480
  %482 = load i32, ptr %481, align 4, !tbaa !25
  %483 = icmp eq i32 %482, 2
  br i1 %483, label %489, label %484

484:                                              ; preds = %477
  %485 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, i32 noundef 694, ptr noundef nonnull @.str.4)
  %486 = load i32, ptr %481, align 4, !tbaa !25
  %487 = icmp eq i32 %486, 2
  br i1 %487, label %489, label %488

488:                                              ; preds = %484
  tail call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.4, i32 noundef 694, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

489:                                              ; preds = %484, %477
  store i32 %417, ptr %481, align 4, !tbaa !25
  %490 = getelementptr inbounds i32, ptr %15, i64 %480
  %491 = load i32, ptr %490, align 4, !tbaa !25
  %492 = load i32, ptr %474, align 4, !tbaa !25
  %493 = add nsw i32 %492, %491
  store i32 %493, ptr %474, align 4, !tbaa !25
  %494 = load i32, ptr %490, align 4, !tbaa !25
  %495 = load i32, ptr %63, align 4, !tbaa !25
  %496 = sub nsw i32 %495, %494
  store i32 %496, ptr %63, align 4, !tbaa !25
  %497 = getelementptr inbounds i32, ptr %19, i64 %480
  %498 = load i32, ptr %497, align 4, !tbaa !25
  %.not506 = icmp eq i32 %498, -1
  br i1 %.not506, label %499, label %503

499:                                              ; preds = %489
  %500 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, i32 noundef 697, ptr noundef nonnull @.str.4)
  %501 = load i32, ptr %497, align 4, !tbaa !25
  %.not507 = icmp eq i32 %501, -1
  br i1 %.not507, label %502, label %503

502:                                              ; preds = %499
  tail call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.4, i32 noundef 697, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

503:                                              ; preds = %499, %489
  %504 = phi i32 [ %501, %499 ], [ %498, %489 ]
  %indvars.iv.next686 = add nsw i64 %indvars.iv685, -1
  %505 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.next686
  %506 = load i32, ptr %505, align 4, !tbaa !25
  %507 = sext i32 %504 to i64
  %508 = getelementptr inbounds i32, ptr %17, i64 %507
  store i32 %506, ptr %508, align 4, !tbaa !25
  %509 = load i32, ptr %497, align 4, !tbaa !25
  %510 = sext i32 %506 to i64
  %511 = getelementptr inbounds i32, ptr %19, i64 %510
  store i32 %509, ptr %511, align 4, !tbaa !25
  store i32 -1, ptr %497, align 4, !tbaa !25
  %512 = getelementptr inbounds i32, ptr %11, i64 %480
  %513 = load i32, ptr %512, align 4, !tbaa !25
  %514 = getelementptr i8, ptr %512, i64 4
  %515 = load i32, ptr %514, align 4, !tbaa !25
  %516 = icmp slt i32 %513, %515
  br i1 %516, label %.lr.ph619.preheader, label %._crit_edge620

.lr.ph619.preheader:                              ; preds = %503
  %517 = sext i32 %513 to i64
  br label %.lr.ph619

.lr.ph619:                                        ; preds = %.lr.ph619.preheader, %529
  %518 = phi i32 [ %515, %.lr.ph619.preheader ], [ %530, %529 ]
  %indvars.iv680 = phi i64 [ %517, %.lr.ph619.preheader ], [ %indvars.iv.next681, %529 ]
  %519 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv680
  %520 = load i32, ptr %519, align 4, !tbaa !25
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i32, ptr %21, i64 %521
  %523 = load i32, ptr %522, align 4, !tbaa !25
  %524 = icmp eq i32 %523, 2
  br i1 %524, label %525, label %529

525:                                              ; preds = %.lr.ph619
  %526 = load i32, ptr %490, align 4, !tbaa !25
  %gep616 = getelementptr %struct.nrinfo_t, ptr %invariant.gep615, i64 %521
  %527 = load i32, ptr %gep616, align 4, !tbaa !25
  %528 = add nsw i32 %527, %526
  store i32 %528, ptr %gep616, align 4, !tbaa !25
  %.pre = load i32, ptr %514, align 4, !tbaa !25
  br label %529

529:                                              ; preds = %.lr.ph619, %525
  %530 = phi i32 [ %518, %.lr.ph619 ], [ %.pre, %525 ]
  %indvars.iv.next681 = add nsw i64 %indvars.iv680, 1
  %531 = sext i32 %530 to i64
  %532 = icmp slt i64 %indvars.iv.next681, %531
  br i1 %532, label %.lr.ph619, label %._crit_edge620, !llvm.loop !35

._crit_edge620:                                   ; preds = %529, %503
  %indvars.iv.next684 = add nsw i64 %indvars.iv683, 1
  %533 = load i32, ptr %470, align 4, !tbaa !25
  %534 = sext i32 %533 to i64
  %535 = icmp slt i64 %indvars.iv.next684, %534
  br i1 %535, label %477, label %.loopexit.loopexit, !llvm.loop !36

._crit_edge632:                                   ; preds = %.loopexit, %.loopexit523
  %.3.lcssa = phi i32 [ %.0461540, %.loopexit523 ], [ %.4.lcssa, %.loopexit ]
  %536 = load i32, ptr %63, align 4, !tbaa !25
  %537 = icmp eq i32 %.0459535, %536
  br i1 %537, label %543, label %538

538:                                              ; preds = %._crit_edge632
  %539 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef 706, ptr noundef nonnull @.str.4)
  %540 = load i32, ptr %63, align 4, !tbaa !25
  %541 = icmp eq i32 %.0459535, %540
  br i1 %541, label %543, label %542

542:                                              ; preds = %538
  tail call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.4, i32 noundef 706, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2SidedP) #8
  unreachable

543:                                              ; preds = %538, %._crit_edge632
  %544 = load i32, ptr %36, align 8, !tbaa !20
  %545 = and i32 %544, 8
  %.not502 = icmp eq i32 %545, 0
  br i1 %.not502, label %550, label %546

546:                                              ; preds = %543
  %547 = load i32, ptr %23, align 4, !tbaa !25
  %548 = load i32, ptr %51, align 4, !tbaa !25
  %549 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.33, i32 noundef %.0459535, i32 noundef %.0455530, i32 noundef %547, i32 noundef %548, i32 noundef %.3.lcssa)
  br label %550

550:                                              ; preds = %546, %543
  store i32 %.0459535, ptr %57, align 8, !tbaa !27
  store i32 %.3.lcssa, ptr %58, align 8, !tbaa !26
  %551 = icmp eq i32 %.0455530, -1
  %.not503 = icmp sge i32 %.0459535, %66
  %or.cond515.not727 = select i1 %551, i1 true, i1 %.not503
  %552 = add nuw nsw i32 %.0454634, 1
  %exitcond697.not = icmp eq i32 %552, %4
  %or.cond724 = select i1 %or.cond515.not727, i1 true, i1 %exitcond697.not
  br i1 %or.cond724, label %._crit_edge638.loopexit, label %64, !llvm.loop !37

._crit_edge638.loopexit:                          ; preds = %550
  %.pre698 = load ptr, ptr %6, align 16, !tbaa !19
  br label %._crit_edge638

._crit_edge638:                                   ; preds = %._crit_edge638.loopexit, %49
  %553 = phi ptr [ %.pre698, %._crit_edge638.loopexit ], [ %27, %49 ]
  tail call void @libmetis__rpqDestroy(ptr noundef %553) #7
  tail call void @libmetis__rpqDestroy(ptr noundef %28) #7
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  ret void
}

declare i32 @libmetis__rpqSeeTopVal(ptr noundef) local_unnamed_addr #1

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

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

attributes #0 = { mustprogress 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 = { 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 #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }

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

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


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