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

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

%struct.graph_t = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.ctrl_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, float, ptr, ptr, ptr, float, double, double, double, double, double, double, double, double, double, double, double, double, ptr, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [86 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine = external hidden unnamed_addr constant [72 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1

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

120:                                              ; preds = %4
  %121 = load i32, ptr %15, align 4, !tbaa !9
  %122 = sitofp i32 %121 to double
  %123 = fmul double 1.000000e-02, %122
  br label %125

124:                                              ; preds = %4
  br label %125

125:                                              ; preds = %124, %120
  %126 = phi double [ %123, %120 ], [ 2.500000e+01, %124 ]
  %127 = fcmp oge double %126, 1.500000e+02
  br i1 %127, label %128, label %129

128:                                              ; preds = %125
  br label %141

129:                                              ; preds = %125
  %130 = load i32, ptr %15, align 4, !tbaa !9
  %131 = sitofp i32 %130 to double
  %132 = fmul double 1.000000e-02, %131
  %133 = fcmp oge double %132, 2.500000e+01
  br i1 %133, label %134, label %138

134:                                              ; preds = %129
  %135 = load i32, ptr %15, align 4, !tbaa !9
  %136 = sitofp i32 %135 to double
  %137 = fmul double 1.000000e-02, %136
  br label %139

138:                                              ; preds = %129
  br label %139

139:                                              ; preds = %138, %134
  %140 = phi double [ %137, %134 ], [ 2.500000e+01, %138 ]
  br label %141

141:                                              ; preds = %139, %128
  %142 = phi double [ 1.500000e+02, %128 ], [ %140, %139 ]
  %143 = fptosi double %142 to i32
  store i32 %143, ptr %23, align 4, !tbaa !9
  %144 = load i32, ptr %15, align 4, !tbaa !9
  %145 = icmp sge i32 20, %144
  br i1 %145, label %146, label %147

146:                                              ; preds = %141
  br label %149

147:                                              ; preds = %141
  %148 = load i32, ptr %15, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %147, %146
  %150 = phi i32 [ 20, %146 ], [ %148, %147 ]
  %151 = sitofp i32 %150 to double
  %152 = fdiv double 5.000000e-01, %151
  %153 = fptrunc double %152 to float
  store float %153, ptr %53, align 4, !tbaa !25
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = load i32, ptr %16, align 4, !tbaa !9
  %156 = mul nsw i32 2, %155
  %157 = sext i32 %156 to i64
  %158 = mul i64 %157, 8
  %159 = call ptr @libmetis__wspacemalloc(ptr noundef %154, i64 noundef %158)
  store ptr %159, ptr %54, align 8, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %160

160:                                              ; preds = %173, %149
  %161 = load i32, ptr %9, align 4, !tbaa !9
  %162 = load i32, ptr %16, align 4, !tbaa !9
  %163 = mul nsw i32 2, %162
  %164 = icmp slt i32 %161, %163
  br i1 %164, label %165, label %176

165:                                              ; preds = %160
  %166 = load i32, ptr %15, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = call ptr @libmetis__rpqCreate(i64 noundef %167)
  %169 = load ptr, ptr %54, align 8, !tbaa !5
  %170 = load i32, ptr %9, align 4, !tbaa !9
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds ptr, ptr %169, i64 %171
  store ptr %168, ptr %172, align 8, !tbaa !5
  br label %173

173:                                              ; preds = %165
  %174 = load i32, ptr %9, align 4, !tbaa !9
  %175 = add nsw i32 %174, 1
  store i32 %175, ptr %9, align 4, !tbaa !9
  br label %160, !llvm.loop !27

176:                                              ; preds = %160
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %177

177:                                              ; preds = %196, %176
  %178 = load i32, ptr %9, align 4, !tbaa !9
  %179 = load i32, ptr %15, align 4, !tbaa !9
  %180 = icmp slt i32 %178, %179
  br i1 %180, label %181, label %199

181:                                              ; preds = %177
  %182 = load i32, ptr %16, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = load ptr, ptr %28, align 8, !tbaa !5
  %185 = load i32, ptr %9, align 4, !tbaa !9
  %186 = load i32, ptr %16, align 4, !tbaa !9
  %187 = mul nsw i32 %185, %186
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %184, i64 %188
  %190 = load ptr, ptr %45, align 8, !tbaa !5
  %191 = call i32 @libmetis__iargmax_nrm(i64 noundef %183, ptr noundef %189, ptr noundef %190)
  %192 = load ptr, ptr %39, align 8, !tbaa !5
  %193 = load i32, ptr %9, align 4, !tbaa !9
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds i32, ptr %192, i64 %194
  store i32 %191, ptr %195, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %181
  %197 = load i32, ptr %9, align 4, !tbaa !9
  %198 = add nsw i32 %197, 1
  store i32 %198, ptr %9, align 4, !tbaa !9
  br label %177, !llvm.loop !29

199:                                              ; preds = %177
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.ctrl_t, ptr %201, i32 0, i32 25
  %203 = load ptr, ptr %202, align 8, !tbaa !30
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.ctrl_t, ptr %204, i32 0, i32 23
  %206 = load ptr, ptr %205, align 8, !tbaa !34
  %207 = load ptr, ptr %46, align 8, !tbaa !5
  %208 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef %200, i32 noundef 2, ptr noundef %203, ptr noundef %206, ptr noundef %207)
  store float %208, ptr %49, align 4, !tbaa !25
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %209

209:                                              ; preds = %248, %199
  %210 = load i32, ptr %9, align 4, !tbaa !9
  %211 = load i32, ptr %16, align 4, !tbaa !9
  %212 = icmp slt i32 %210, %211
  br i1 %212, label %213, label %251

213:                                              ; preds = %209
  %214 = load ptr, ptr %46, align 8, !tbaa !5
  %215 = load i32, ptr %9, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds float, ptr %214, i64 %216
  %218 = load float, ptr %217, align 4, !tbaa !25
  %219 = fcmp ogt float %218, 0.000000e+00
  br i1 %219, label %220, label %234

220:                                              ; preds = %213
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.ctrl_t, ptr %221, i32 0, i32 23
  %223 = load ptr, ptr %222, align 8, !tbaa !34
  %224 = load i32, ptr %9, align 4, !tbaa !9
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds float, ptr %223, i64 %225
  %227 = load float, ptr %226, align 4, !tbaa !25
  %228 = load ptr, ptr %46, align 8, !tbaa !5
  %229 = load i32, ptr %9, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds float, ptr %228, i64 %230
  %232 = load float, ptr %231, align 4, !tbaa !25
  %233 = fadd float %227, %232
  br label %242

234:                                              ; preds = %213
  %235 = load ptr, ptr %5, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.ctrl_t, ptr %235, i32 0, i32 23
  %237 = load ptr, ptr %236, align 8, !tbaa !34
  %238 = load i32, ptr %9, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds float, ptr %237, i64 %239
  %241 = load float, ptr %240, align 4, !tbaa !25
  br label %242

242:                                              ; preds = %234, %220
  %243 = phi float [ %233, %220 ], [ %241, %234 ]
  %244 = load ptr, ptr %46, align 8, !tbaa !5
  %245 = load i32, ptr %9, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds float, ptr %244, i64 %246
  store float %243, ptr %247, align 4, !tbaa !25
  br label %248

248:                                              ; preds = %242
  %249 = load i32, ptr %9, align 4, !tbaa !9
  %250 = add nsw i32 %249, 1
  store i32 %250, ptr %9, align 4, !tbaa !9
  br label %209, !llvm.loop !35

251:                                              ; preds = %209
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.ctrl_t, ptr %252, i32 0, i32 2
  %254 = load i32, ptr %253, align 8, !tbaa !36
  %255 = and i32 %254, 8
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %257, label %262

257:                                              ; preds = %251
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  %261 = load float, ptr %49, align 4, !tbaa !25
  call void @libmetis__Print2WayRefineStats(ptr noundef %258, ptr noundef %259, ptr noundef %260, float noundef %261, i32 noundef -2)
  br label %262

262:                                              ; preds = %257, %251
  %263 = load i32, ptr %15, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = load ptr, ptr %36, align 8, !tbaa !5
  %266 = call ptr @libmetis__iset(i64 noundef %264, i32 noundef -1, ptr noundef %265)
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %267

267:                                              ; preds = %1509, %262
  %268 = load i32, ptr %21, align 4, !tbaa !9
  %269 = load i32, ptr %8, align 4, !tbaa !9
  %270 = icmp slt i32 %268, %269
  br i1 %270, label %271, label %1512

271:                                              ; preds = %267
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %272

272:                                              ; preds = %283, %271
  %273 = load i32, ptr %9, align 4, !tbaa !9
  %274 = load i32, ptr %16, align 4, !tbaa !9
  %275 = mul nsw i32 2, %274
  %276 = icmp slt i32 %273, %275
  br i1 %276, label %277, label %286

277:                                              ; preds = %272
  %278 = load ptr, ptr %54, align 8, !tbaa !5
  %279 = load i32, ptr %9, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds ptr, ptr %278, i64 %280
  %282 = load ptr, ptr %281, align 8, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %282)
  br label %283

283:                                              ; preds = %277
  %284 = load i32, ptr %9, align 4, !tbaa !9
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %9, align 4, !tbaa !9
  br label %272, !llvm.loop !37

286:                                              ; preds = %272
  store i32 -1, ptr %44, align 4, !tbaa !9
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.graph_t, ptr %287, i32 0, i32 17
  %289 = load i32, ptr %288, align 8, !tbaa !38
  store i32 %289, ptr %42, align 4, !tbaa !9
  store i32 %289, ptr %41, align 4, !tbaa !9
  store i32 %289, ptr %43, align 4, !tbaa !9
  %290 = load ptr, ptr %6, align 8, !tbaa !5
  %291 = load ptr, ptr %5, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.ctrl_t, ptr %291, i32 0, i32 25
  %293 = load ptr, ptr %292, align 8, !tbaa !30
  %294 = load ptr, ptr %46, align 8, !tbaa !5
  %295 = load ptr, ptr %47, align 8, !tbaa !5
  %296 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef %290, i32 noundef 2, ptr noundef %293, ptr noundef %294, ptr noundef %295)
  store float %296, ptr %50, align 4, !tbaa !25
  %297 = load ptr, ptr %6, align 8, !tbaa !5
  %298 = load ptr, ptr %31, align 8, !tbaa !5
  %299 = call i32 @libmetis__ComputeCut(ptr noundef %297, ptr noundef %298)
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.graph_t, ptr %300, i32 0, i32 17
  %302 = load i32, ptr %301, align 8, !tbaa !38
  %303 = icmp eq i32 %299, %302
  br i1 %303, label %316, label %304

304:                                              ; preds = %286
  %305 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef 281, ptr noundef @.str.1)
  %306 = load ptr, ptr %6, align 8, !tbaa !5
  %307 = load ptr, ptr %31, align 8, !tbaa !5
  %308 = call i32 @libmetis__ComputeCut(ptr noundef %306, ptr noundef %307)
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.graph_t, ptr %309, i32 0, i32 17
  %311 = load i32, ptr %310, align 8, !tbaa !38
  %312 = icmp eq i32 %308, %311
  br i1 %312, label %313, label %314

313:                                              ; preds = %304
  br label %315

314:                                              ; preds = %304
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 281, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

315:                                              ; preds = %313
  br label %316

316:                                              ; preds = %315, %286
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = call i32 @libmetis__CheckBnd(ptr noundef %317)
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %328, label %320

320:                                              ; preds = %316
  %321 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef 282, ptr noundef @.str.1)
  %322 = load ptr, ptr %6, align 8, !tbaa !5
  %323 = call i32 @libmetis__CheckBnd(ptr noundef %322)
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %325, label %326

325:                                              ; preds = %320
  br label %327

326:                                              ; preds = %320
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 282, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

327:                                              ; preds = %325
  br label %328

328:                                              ; preds = %327, %316
  %329 = load ptr, ptr %6, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.graph_t, ptr %329, i32 0, i32 21
  %331 = load i32, ptr %330, align 8, !tbaa !39
  store i32 %331, ptr %17, align 4, !tbaa !9
  %332 = load i32, ptr %17, align 4, !tbaa !9
  %333 = load ptr, ptr %38, align 8, !tbaa !5
  %334 = load i32, ptr %17, align 4, !tbaa !9
  %335 = sdiv i32 %334, 5
  call void @libmetis__irandArrayPermute(i32 noundef %332, ptr noundef %333, i32 noundef %335, i32 noundef 1)
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %336

336:                                              ; preds = %431, %328
  %337 = load i32, ptr %10, align 4, !tbaa !9
  %338 = load i32, ptr %17, align 4, !tbaa !9
  %339 = icmp slt i32 %337, %338
  br i1 %339, label %340, label %434

340:                                              ; preds = %336
  %341 = load ptr, ptr %35, align 8, !tbaa !5
  %342 = load ptr, ptr %38, align 8, !tbaa !5
  %343 = load i32, ptr %10, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %342, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %341, i64 %347
  %349 = load i32, ptr %348, align 4, !tbaa !9
  store i32 %349, ptr %9, align 4, !tbaa !9
  %350 = load ptr, ptr %33, align 8, !tbaa !5
  %351 = load i32, ptr %9, align 4, !tbaa !9
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i32, ptr %350, i64 %352
  %354 = load i32, ptr %353, align 4, !tbaa !9
  %355 = icmp sgt i32 %354, 0
  br i1 %355, label %381, label %356

356:                                              ; preds = %340
  %357 = load ptr, ptr %32, align 8, !tbaa !5
  %358 = load i32, ptr %9, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i32, ptr %357, i64 %359
  %361 = load i32, ptr %360, align 4, !tbaa !9
  %362 = icmp eq i32 %361, 0
  br i1 %362, label %381, label %363

363:                                              ; preds = %356
  %364 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef 289, ptr noundef @.str.1)
  %365 = load ptr, ptr %33, align 8, !tbaa !5
  %366 = load i32, ptr %9, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !9
  %370 = icmp sgt i32 %369, 0
  br i1 %370, label %378, label %371

371:                                              ; preds = %363
  %372 = load ptr, ptr %32, align 8, !tbaa !5
  %373 = load i32, ptr %9, align 4, !tbaa !9
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %372, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !9
  %377 = icmp eq i32 %376, 0
  br i1 %377, label %378, label %379

378:                                              ; preds = %371, %363
  br label %380

379:                                              ; preds = %371
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.1, i32 noundef 289, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

380:                                              ; preds = %378
  br label %381

381:                                              ; preds = %380, %356, %340
  %382 = load ptr, ptr %34, align 8, !tbaa !5
  %383 = load i32, ptr %9, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %382, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  %387 = icmp ne i32 %386, -1
  br i1 %387, label %399, label %388

388:                                              ; preds = %381
  %389 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef 290, ptr noundef @.str.1)
  %390 = load ptr, ptr %34, align 8, !tbaa !5
  %391 = load i32, ptr %9, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %390, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = icmp ne i32 %394, -1
  br i1 %395, label %396, label %397

396:                                              ; preds = %388
  br label %398

397:                                              ; preds = %388
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.1, i32 noundef 290, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

398:                                              ; preds = %396
  br label %399

399:                                              ; preds = %398, %381
  %400 = load ptr, ptr %33, align 8, !tbaa !5
  %401 = load i32, ptr %9, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i32, ptr %400, i64 %402
  %404 = load i32, ptr %403, align 4, !tbaa !9
  %405 = load ptr, ptr %32, align 8, !tbaa !5
  %406 = load i32, ptr %9, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = sub nsw i32 %404, %409
  %411 = sitofp i32 %410 to float
  store float %411, ptr %52, align 4, !tbaa !25
  %412 = load ptr, ptr %54, align 8, !tbaa !5
  %413 = load ptr, ptr %39, align 8, !tbaa !5
  %414 = load i32, ptr %9, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds i32, ptr %413, i64 %415
  %417 = load i32, ptr %416, align 4, !tbaa !9
  %418 = mul nsw i32 2, %417
  %419 = load ptr, ptr %31, align 8, !tbaa !5
  %420 = load i32, ptr %9, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !9
  %424 = add nsw i32 %418, %423
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds ptr, ptr %412, i64 %425
  %427 = load ptr, ptr %426, align 8, !tbaa !5
  %428 = load i32, ptr %9, align 4, !tbaa !9
  %429 = load float, ptr %52, align 4, !tbaa !25
  %430 = call i32 @libmetis__rpqInsert(ptr noundef %427, i32 noundef %428, float noundef %429)
  br label %431

431:                                              ; preds = %399
  %432 = load i32, ptr %10, align 4, !tbaa !9
  %433 = add nsw i32 %432, 1
  store i32 %433, ptr %10, align 4, !tbaa !9
  br label %336, !llvm.loop !40

434:                                              ; preds = %336
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %435

435:                                              ; preds = %1076, %434
  %436 = load i32, ptr %18, align 4, !tbaa !9
  %437 = load i32, ptr %15, align 4, !tbaa !9
  %438 = icmp slt i32 %436, %437
  br i1 %438, label %439, label %1079

439:                                              ; preds = %435
  %440 = load ptr, ptr %6, align 8, !tbaa !5
  %441 = load ptr, ptr %5, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.ctrl_t, ptr %441, i32 0, i32 25
  %443 = load ptr, ptr %442, align 8, !tbaa !30
  %444 = load ptr, ptr %46, align 8, !tbaa !5
  %445 = load ptr, ptr %54, align 8, !tbaa !5
  call void @libmetis__SelectQueue(ptr noundef %440, ptr noundef %443, ptr noundef %444, ptr noundef %445, ptr noundef %19, ptr noundef %25)
  %446 = load i32, ptr %19, align 4, !tbaa !9
  %447 = add nsw i32 %446, 1
  %448 = srem i32 %447, 2
  store i32 %448, ptr %20, align 4, !tbaa !9
  %449 = load i32, ptr %19, align 4, !tbaa !9
  %450 = icmp eq i32 %449, -1
  br i1 %450, label %462, label %451

451:                                              ; preds = %439
  %452 = load ptr, ptr %54, align 8, !tbaa !5
  %453 = load i32, ptr %25, align 4, !tbaa !9
  %454 = mul nsw i32 2, %453
  %455 = load i32, ptr %19, align 4, !tbaa !9
  %456 = add nsw i32 %454, %455
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds ptr, ptr %452, i64 %457
  %459 = load ptr, ptr %458, align 8, !tbaa !5
  %460 = call i32 @libmetis__rpqGetTop(ptr noundef %459)
  store i32 %460, ptr %40, align 4, !tbaa !9
  %461 = icmp eq i32 %460, -1
  br i1 %461, label %462, label %463

462:                                              ; preds = %451, %439
  br label %1079

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

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

478:                                              ; preds = %470
  br label %480

479:                                              ; preds = %470
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 304, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

480:                                              ; preds = %478
  br label %481

481:                                              ; preds = %480, %463
  %482 = load ptr, ptr %33, align 8, !tbaa !5
  %483 = load i32, ptr %40, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds i32, ptr %482, i64 %484
  %486 = load i32, ptr %485, align 4, !tbaa !9
  %487 = load ptr, ptr %32, align 8, !tbaa !5
  %488 = load i32, ptr %40, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds i32, ptr %487, i64 %489
  %491 = load i32, ptr %490, align 4, !tbaa !9
  %492 = sub nsw i32 %486, %491
  %493 = load i32, ptr %43, align 4, !tbaa !9
  %494 = sub nsw i32 %493, %492
  store i32 %494, ptr %43, align 4, !tbaa !9
  %495 = load i32, ptr %16, align 4, !tbaa !9
  %496 = sext i32 %495 to i64
  %497 = load ptr, ptr %28, align 8, !tbaa !5
  %498 = load i32, ptr %40, align 4, !tbaa !9
  %499 = load i32, ptr %16, align 4, !tbaa !9
  %500 = mul nsw i32 %498, %499
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i32, ptr %497, i64 %501
  %503 = load ptr, ptr %30, align 8, !tbaa !5
  %504 = load i32, ptr %20, align 4, !tbaa !9
  %505 = load i32, ptr %16, align 4, !tbaa !9
  %506 = mul nsw i32 %504, %505
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i32, ptr %503, i64 %507
  %509 = call ptr @libmetis__iaxpy(i64 noundef %496, i32 noundef 1, ptr noundef %502, i64 noundef 1, ptr noundef %508, i64 noundef 1)
  %510 = load i32, ptr %16, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  %512 = load ptr, ptr %28, align 8, !tbaa !5
  %513 = load i32, ptr %40, align 4, !tbaa !9
  %514 = load i32, ptr %16, align 4, !tbaa !9
  %515 = mul nsw i32 %513, %514
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds i32, ptr %512, i64 %516
  %518 = load ptr, ptr %30, align 8, !tbaa !5
  %519 = load i32, ptr %19, align 4, !tbaa !9
  %520 = load i32, ptr %16, align 4, !tbaa !9
  %521 = mul nsw i32 %519, %520
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds i32, ptr %518, i64 %522
  %524 = call ptr @libmetis__iaxpy(i64 noundef %511, i32 noundef -1, ptr noundef %517, i64 noundef 1, ptr noundef %523, i64 noundef 1)
  %525 = load ptr, ptr %6, align 8, !tbaa !5
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.ctrl_t, ptr %526, i32 0, i32 25
  %528 = load ptr, ptr %527, align 8, !tbaa !30
  %529 = load ptr, ptr %46, align 8, !tbaa !5
  %530 = load ptr, ptr %48, align 8, !tbaa !5
  %531 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef %525, i32 noundef 2, ptr noundef %528, ptr noundef %529, ptr noundef %530)
  store float %531, ptr %51, align 4, !tbaa !25
  %532 = load i32, ptr %43, align 4, !tbaa !9
  %533 = load i32, ptr %41, align 4, !tbaa !9
  %534 = icmp slt i32 %532, %533
  br i1 %534, label %535, label %539

535:                                              ; preds = %481
  %536 = load float, ptr %51, align 4, !tbaa !25
  %537 = load float, ptr %53, align 4, !tbaa !25
  %538 = fcmp ole float %536, %537
  br i1 %538, label %557, label %539

539:                                              ; preds = %535, %481
  %540 = load i32, ptr %43, align 4, !tbaa !9
  %541 = load i32, ptr %41, align 4, !tbaa !9
  %542 = icmp eq i32 %540, %541
  br i1 %542, label %543, label %566

543:                                              ; preds = %539
  %544 = load float, ptr %51, align 4, !tbaa !25
  %545 = load float, ptr %50, align 4, !tbaa !25
  %546 = fcmp olt float %544, %545
  br i1 %546, label %557, label %547

547:                                              ; preds = %543
  %548 = load float, ptr %51, align 4, !tbaa !25
  %549 = load float, ptr %50, align 4, !tbaa !25
  %550 = fcmp oeq float %548, %549
  br i1 %550, label %551, label %566

551:                                              ; preds = %547
  %552 = load i32, ptr %16, align 4, !tbaa !9
  %553 = load ptr, ptr %47, align 8, !tbaa !5
  %554 = load ptr, ptr %48, align 8, !tbaa !5
  %555 = call i32 @libmetis__BetterBalance2Way(i32 noundef %552, ptr noundef %553, ptr noundef %554)
  %556 = icmp ne i32 %555, 0
  br i1 %556, label %557, label %566

557:                                              ; preds = %551, %543, %535
  %558 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %558, ptr %41, align 4, !tbaa !9
  %559 = load float, ptr %51, align 4, !tbaa !25
  store float %559, ptr %50, align 4, !tbaa !25
  %560 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %560, ptr %44, align 4, !tbaa !9
  %561 = load i32, ptr %16, align 4, !tbaa !9
  %562 = sext i32 %561 to i64
  %563 = load ptr, ptr %48, align 8, !tbaa !5
  %564 = load ptr, ptr %47, align 8, !tbaa !5
  %565 = call ptr @libmetis__rcopy(i64 noundef %562, ptr noundef %563, ptr noundef %564)
  br label %617

566:                                              ; preds = %551, %547, %539
  %567 = load i32, ptr %18, align 4, !tbaa !9
  %568 = load i32, ptr %44, align 4, !tbaa !9
  %569 = sub nsw i32 %567, %568
  %570 = load i32, ptr %23, align 4, !tbaa !9
  %571 = icmp sgt i32 %569, %570
  br i1 %571, label %572, label %616

572:                                              ; preds = %566
  %573 = load ptr, ptr %33, align 8, !tbaa !5
  %574 = load i32, ptr %40, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds i32, ptr %573, i64 %575
  %577 = load i32, ptr %576, align 4, !tbaa !9
  %578 = load ptr, ptr %32, align 8, !tbaa !5
  %579 = load i32, ptr %40, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds i32, ptr %578, i64 %580
  %582 = load i32, ptr %581, align 4, !tbaa !9
  %583 = sub nsw i32 %577, %582
  %584 = load i32, ptr %43, align 4, !tbaa !9
  %585 = add nsw i32 %584, %583
  store i32 %585, ptr %43, align 4, !tbaa !9
  %586 = load i32, ptr %16, align 4, !tbaa !9
  %587 = sext i32 %586 to i64
  %588 = load ptr, ptr %28, align 8, !tbaa !5
  %589 = load i32, ptr %40, align 4, !tbaa !9
  %590 = load i32, ptr %16, align 4, !tbaa !9
  %591 = mul nsw i32 %589, %590
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds i32, ptr %588, i64 %592
  %594 = load ptr, ptr %30, align 8, !tbaa !5
  %595 = load i32, ptr %19, align 4, !tbaa !9
  %596 = load i32, ptr %16, align 4, !tbaa !9
  %597 = mul nsw i32 %595, %596
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i32, ptr %594, i64 %598
  %600 = call ptr @libmetis__iaxpy(i64 noundef %587, i32 noundef 1, ptr noundef %593, i64 noundef 1, ptr noundef %599, i64 noundef 1)
  %601 = load i32, ptr %16, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = load ptr, ptr %28, align 8, !tbaa !5
  %604 = load i32, ptr %40, align 4, !tbaa !9
  %605 = load i32, ptr %16, align 4, !tbaa !9
  %606 = mul nsw i32 %604, %605
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds i32, ptr %603, i64 %607
  %609 = load ptr, ptr %30, align 8, !tbaa !5
  %610 = load i32, ptr %20, align 4, !tbaa !9
  %611 = load i32, ptr %16, align 4, !tbaa !9
  %612 = mul nsw i32 %610, %611
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds i32, ptr %609, i64 %613
  %615 = call ptr @libmetis__iaxpy(i64 noundef %602, i32 noundef -1, ptr noundef %608, i64 noundef 1, ptr noundef %614, i64 noundef 1)
  br label %1079

616:                                              ; preds = %566
  br label %617

617:                                              ; preds = %616, %557
  %618 = load i32, ptr %20, align 4, !tbaa !9
  %619 = load ptr, ptr %31, align 8, !tbaa !5
  %620 = load i32, ptr %40, align 4, !tbaa !9
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds i32, ptr %619, i64 %621
  store i32 %618, ptr %622, align 4, !tbaa !9
  %623 = load i32, ptr %18, align 4, !tbaa !9
  %624 = load ptr, ptr %36, align 8, !tbaa !5
  %625 = load i32, ptr %40, align 4, !tbaa !9
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds i32, ptr %624, i64 %626
  store i32 %623, ptr %627, align 4, !tbaa !9
  %628 = load i32, ptr %40, align 4, !tbaa !9
  %629 = load ptr, ptr %37, align 8, !tbaa !5
  %630 = load i32, ptr %18, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds i32, ptr %629, i64 %631
  store i32 %628, ptr %632, align 4, !tbaa !9
  %633 = load ptr, ptr %5, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.ctrl_t, ptr %633, i32 0, i32 2
  %635 = load i32, ptr %634, align 8, !tbaa !36
  %636 = and i32 %635, 32
  %637 = icmp ne i32 %636, 0
  br i1 %637, label %638, label %704

638:                                              ; preds = %617
  %639 = load i32, ptr %40, align 4, !tbaa !9
  %640 = load i32, ptr %19, align 4, !tbaa !9
  %641 = load i32, ptr %25, align 4, !tbaa !9
  %642 = load ptr, ptr %33, align 8, !tbaa !5
  %643 = load i32, ptr %40, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds i32, ptr %642, i64 %644
  %646 = load i32, ptr %645, align 4, !tbaa !9
  %647 = load ptr, ptr %32, align 8, !tbaa !5
  %648 = load i32, ptr %40, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds i32, ptr %647, i64 %649
  %651 = load i32, ptr %650, align 4, !tbaa !9
  %652 = sub nsw i32 %646, %651
  %653 = load i32, ptr %43, align 4, !tbaa !9
  %654 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, i32 noundef %639, i32 noundef %640, i32 noundef %641, i32 noundef %652, i32 noundef %653)
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %655

655:                                              ; preds = %689, %638
  %656 = load i32, ptr %13, align 4, !tbaa !9
  %657 = load i32, ptr %16, align 4, !tbaa !9
  %658 = icmp slt i32 %656, %657
  br i1 %658, label %659, label %692

659:                                              ; preds = %655
  %660 = load ptr, ptr %30, align 8, !tbaa !5
  %661 = load i32, ptr %13, align 4, !tbaa !9
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds i32, ptr %660, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !9
  %665 = sitofp i32 %664 to float
  %666 = load ptr, ptr %45, align 8, !tbaa !5
  %667 = load i32, ptr %13, align 4, !tbaa !9
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds float, ptr %666, i64 %668
  %670 = load float, ptr %669, align 4, !tbaa !25
  %671 = fmul float %665, %670
  %672 = fpext float %671 to double
  %673 = load ptr, ptr %30, align 8, !tbaa !5
  %674 = load i32, ptr %16, align 4, !tbaa !9
  %675 = load i32, ptr %13, align 4, !tbaa !9
  %676 = add nsw i32 %674, %675
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %673, i64 %677
  %679 = load i32, ptr %678, align 4, !tbaa !9
  %680 = sitofp i32 %679 to float
  %681 = load ptr, ptr %45, align 8, !tbaa !5
  %682 = load i32, ptr %13, align 4, !tbaa !9
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds float, ptr %681, i64 %683
  %685 = load float, ptr %684, align 4, !tbaa !25
  %686 = fmul float %680, %685
  %687 = fpext float %686 to double
  %688 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %672, double noundef %687)
  br label %689

689:                                              ; preds = %659
  %690 = load i32, ptr %13, align 4, !tbaa !9
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr %13, align 4, !tbaa !9
  br label %655, !llvm.loop !41

692:                                              ; preds = %655
  %693 = load float, ptr %50, align 4, !tbaa !25
  %694 = fpext float %693 to double
  %695 = load ptr, ptr %6, align 8, !tbaa !5
  %696 = load ptr, ptr %5, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.ctrl_t, ptr %696, i32 0, i32 25
  %698 = load ptr, ptr %697, align 8, !tbaa !30
  %699 = call float @libmetis__ComputeLoadImbalance(ptr noundef %695, i32 noundef 2, ptr noundef %698)
  %700 = fpext float %699 to double
  %701 = load float, ptr %51, align 4, !tbaa !25
  %702 = fpext float %701 to double
  %703 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %694, double noundef %700, double noundef %702)
  br label %704

704:                                              ; preds = %692, %617
  br label %705

705:                                              ; preds = %704
  %706 = load ptr, ptr %32, align 8, !tbaa !5
  %707 = load i32, ptr %40, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds i32, ptr %706, i64 %708
  %710 = load i32, ptr %709, align 4, !tbaa !9
  store i32 %710, ptr %24, align 4, !tbaa !9
  %711 = load ptr, ptr %33, align 8, !tbaa !5
  %712 = load i32, ptr %40, align 4, !tbaa !9
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds i32, ptr %711, i64 %713
  %715 = load i32, ptr %714, align 4, !tbaa !9
  %716 = load ptr, ptr %32, align 8, !tbaa !5
  %717 = load i32, ptr %40, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds i32, ptr %716, i64 %718
  store i32 %715, ptr %719, align 4, !tbaa !9
  %720 = load i32, ptr %24, align 4, !tbaa !9
  %721 = load ptr, ptr %33, align 8, !tbaa !5
  %722 = load i32, ptr %40, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %721, i64 %723
  store i32 %720, ptr %724, align 4, !tbaa !9
  br label %725

725:                                              ; preds = %705
  br label %726

726:                                              ; preds = %725
  %727 = load ptr, ptr %33, align 8, !tbaa !5
  %728 = load i32, ptr %40, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds i32, ptr %727, i64 %729
  %731 = load i32, ptr %730, align 4, !tbaa !9
  %732 = icmp eq i32 %731, 0
  br i1 %732, label %733, label %799

733:                                              ; preds = %726
  %734 = load ptr, ptr %26, align 8, !tbaa !5
  %735 = load i32, ptr %40, align 4, !tbaa !9
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds i32, ptr %734, i64 %736
  %738 = load i32, ptr %737, align 4, !tbaa !9
  %739 = load ptr, ptr %26, align 8, !tbaa !5
  %740 = load i32, ptr %40, align 4, !tbaa !9
  %741 = add nsw i32 %740, 1
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds i32, ptr %739, i64 %742
  %744 = load i32, ptr %743, align 4, !tbaa !9
  %745 = icmp slt i32 %738, %744
  br i1 %745, label %746, label %799

746:                                              ; preds = %733
  br label %747

747:                                              ; preds = %746
  %748 = load ptr, ptr %34, align 8, !tbaa !5
  %749 = load i32, ptr %40, align 4, !tbaa !9
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds i32, ptr %748, i64 %750
  %752 = load i32, ptr %751, align 4, !tbaa !9
  %753 = icmp ne i32 %752, -1
  br i1 %753, label %765, label %754

754:                                              ; preds = %747
  %755 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 346, ptr noundef @.str.1)
  %756 = load ptr, ptr %34, align 8, !tbaa !5
  %757 = load i32, ptr %40, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds i32, ptr %756, i64 %758
  %760 = load i32, ptr %759, align 4, !tbaa !9
  %761 = icmp ne i32 %760, -1
  br i1 %761, label %762, label %763

762:                                              ; preds = %754
  br label %764

763:                                              ; preds = %754
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 346, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

764:                                              ; preds = %762
  br label %765

765:                                              ; preds = %764, %747
  %766 = load ptr, ptr %35, align 8, !tbaa !5
  %767 = load i32, ptr %17, align 4, !tbaa !9
  %768 = add nsw i32 %767, -1
  store i32 %768, ptr %17, align 4, !tbaa !9
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds i32, ptr %766, i64 %769
  %771 = load i32, ptr %770, align 4, !tbaa !9
  %772 = load ptr, ptr %35, align 8, !tbaa !5
  %773 = load ptr, ptr %34, align 8, !tbaa !5
  %774 = load i32, ptr %40, align 4, !tbaa !9
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds i32, ptr %773, i64 %775
  %777 = load i32, ptr %776, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds i32, ptr %772, i64 %778
  store i32 %771, ptr %779, align 4, !tbaa !9
  %780 = load ptr, ptr %34, align 8, !tbaa !5
  %781 = load i32, ptr %40, align 4, !tbaa !9
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds i32, ptr %780, i64 %782
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = load ptr, ptr %34, align 8, !tbaa !5
  %786 = load ptr, ptr %35, align 8, !tbaa !5
  %787 = load i32, ptr %17, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i32, ptr %786, i64 %788
  %790 = load i32, ptr %789, align 4, !tbaa !9
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds i32, ptr %785, i64 %791
  store i32 %784, ptr %792, align 4, !tbaa !9
  %793 = load ptr, ptr %34, align 8, !tbaa !5
  %794 = load i32, ptr %40, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds i32, ptr %793, i64 %795
  store i32 -1, ptr %796, align 4, !tbaa !9
  br label %797

797:                                              ; preds = %765
  br label %798

798:                                              ; preds = %797
  br label %799

799:                                              ; preds = %798, %733, %726
  %800 = load ptr, ptr %26, align 8, !tbaa !5
  %801 = load i32, ptr %40, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds i32, ptr %800, i64 %802
  %804 = load i32, ptr %803, align 4, !tbaa !9
  store i32 %804, ptr %11, align 4, !tbaa !9
  br label %805

805:                                              ; preds = %1072, %799
  %806 = load i32, ptr %11, align 4, !tbaa !9
  %807 = load ptr, ptr %26, align 8, !tbaa !5
  %808 = load i32, ptr %40, align 4, !tbaa !9
  %809 = add nsw i32 %808, 1
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds i32, ptr %807, i64 %810
  %812 = load i32, ptr %811, align 4, !tbaa !9
  %813 = icmp slt i32 %806, %812
  br i1 %813, label %814, label %1075

814:                                              ; preds = %805
  %815 = load ptr, ptr %27, align 8, !tbaa !5
  %816 = load i32, ptr %11, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds i32, ptr %815, i64 %817
  %819 = load i32, ptr %818, align 4, !tbaa !9
  store i32 %819, ptr %12, align 4, !tbaa !9
  %820 = load i32, ptr %20, align 4, !tbaa !9
  %821 = load ptr, ptr %31, align 8, !tbaa !5
  %822 = load i32, ptr %12, align 4, !tbaa !9
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %821, i64 %823
  %825 = load i32, ptr %824, align 4, !tbaa !9
  %826 = icmp eq i32 %820, %825
  br i1 %826, label %827, label %833

827:                                              ; preds = %814
  %828 = load ptr, ptr %29, align 8, !tbaa !5
  %829 = load i32, ptr %11, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds i32, ptr %828, i64 %830
  %832 = load i32, ptr %831, align 4, !tbaa !9
  br label %840

833:                                              ; preds = %814
  %834 = load ptr, ptr %29, align 8, !tbaa !5
  %835 = load i32, ptr %11, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds i32, ptr %834, i64 %836
  %838 = load i32, ptr %837, align 4, !tbaa !9
  %839 = sub nsw i32 0, %838
  br label %840

840:                                              ; preds = %833, %827
  %841 = phi i32 [ %832, %827 ], [ %839, %833 ]
  store i32 %841, ptr %14, align 4, !tbaa !9
  br label %842

842:                                              ; preds = %840
  %843 = load i32, ptr %14, align 4, !tbaa !9
  %844 = load ptr, ptr %32, align 8, !tbaa !5
  %845 = load i32, ptr %12, align 4, !tbaa !9
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds i32, ptr %844, i64 %846
  %848 = load i32, ptr %847, align 4, !tbaa !9
  %849 = add nsw i32 %848, %843
  store i32 %849, ptr %847, align 4, !tbaa !9
  %850 = load i32, ptr %14, align 4, !tbaa !9
  %851 = load ptr, ptr %33, align 8, !tbaa !5
  %852 = load i32, ptr %12, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !9
  %856 = sub nsw i32 %855, %850
  store i32 %856, ptr %854, align 4, !tbaa !9
  br label %857

857:                                              ; preds = %842
  br label %858

858:                                              ; preds = %857
  %859 = load ptr, ptr %34, align 8, !tbaa !5
  %860 = load i32, ptr %12, align 4, !tbaa !9
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds i32, ptr %859, i64 %861
  %863 = load i32, ptr %862, align 4, !tbaa !9
  %864 = icmp ne i32 %863, -1
  br i1 %864, label %865, label %991

865:                                              ; preds = %858
  %866 = load ptr, ptr %33, align 8, !tbaa !5
  %867 = load i32, ptr %12, align 4, !tbaa !9
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds i32, ptr %866, i64 %868
  %870 = load i32, ptr %869, align 4, !tbaa !9
  %871 = icmp eq i32 %870, 0
  br i1 %871, label %872, label %951

872:                                              ; preds = %865
  br label %873

873:                                              ; preds = %872
  %874 = load ptr, ptr %34, align 8, !tbaa !5
  %875 = load i32, ptr %12, align 4, !tbaa !9
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds i32, ptr %874, i64 %876
  %878 = load i32, ptr %877, align 4, !tbaa !9
  %879 = icmp ne i32 %878, -1
  br i1 %879, label %891, label %880

880:                                              ; preds = %873
  %881 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 357, ptr noundef @.str.1)
  %882 = load ptr, ptr %34, align 8, !tbaa !5
  %883 = load i32, ptr %12, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds i32, ptr %882, i64 %884
  %886 = load i32, ptr %885, align 4, !tbaa !9
  %887 = icmp ne i32 %886, -1
  br i1 %887, label %888, label %889

888:                                              ; preds = %880
  br label %890

889:                                              ; preds = %880
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 357, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

890:                                              ; preds = %888
  br label %891

891:                                              ; preds = %890, %873
  %892 = load ptr, ptr %35, align 8, !tbaa !5
  %893 = load i32, ptr %17, align 4, !tbaa !9
  %894 = add nsw i32 %893, -1
  store i32 %894, ptr %17, align 4, !tbaa !9
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds i32, ptr %892, i64 %895
  %897 = load i32, ptr %896, align 4, !tbaa !9
  %898 = load ptr, ptr %35, align 8, !tbaa !5
  %899 = load ptr, ptr %34, align 8, !tbaa !5
  %900 = load i32, ptr %12, align 4, !tbaa !9
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds i32, ptr %899, i64 %901
  %903 = load i32, ptr %902, align 4, !tbaa !9
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds i32, ptr %898, i64 %904
  store i32 %897, ptr %905, align 4, !tbaa !9
  %906 = load ptr, ptr %34, align 8, !tbaa !5
  %907 = load i32, ptr %12, align 4, !tbaa !9
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds i32, ptr %906, i64 %908
  %910 = load i32, ptr %909, align 4, !tbaa !9
  %911 = load ptr, ptr %34, align 8, !tbaa !5
  %912 = load ptr, ptr %35, align 8, !tbaa !5
  %913 = load i32, ptr %17, align 4, !tbaa !9
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds i32, ptr %912, i64 %914
  %916 = load i32, ptr %915, align 4, !tbaa !9
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds i32, ptr %911, i64 %917
  store i32 %910, ptr %918, align 4, !tbaa !9
  %919 = load ptr, ptr %34, align 8, !tbaa !5
  %920 = load i32, ptr %12, align 4, !tbaa !9
  %921 = sext i32 %920 to i64
  %922 = getelementptr inbounds i32, ptr %919, i64 %921
  store i32 -1, ptr %922, align 4, !tbaa !9
  br label %923

923:                                              ; preds = %891
  br label %924

924:                                              ; preds = %923
  %925 = load ptr, ptr %36, align 8, !tbaa !5
  %926 = load i32, ptr %12, align 4, !tbaa !9
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds i32, ptr %925, i64 %927
  %929 = load i32, ptr %928, align 4, !tbaa !9
  %930 = icmp eq i32 %929, -1
  br i1 %930, label %931, label %950

931:                                              ; preds = %924
  %932 = load ptr, ptr %54, align 8, !tbaa !5
  %933 = load ptr, ptr %39, align 8, !tbaa !5
  %934 = load i32, ptr %12, align 4, !tbaa !9
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds i32, ptr %933, i64 %935
  %937 = load i32, ptr %936, align 4, !tbaa !9
  %938 = mul nsw i32 2, %937
  %939 = load ptr, ptr %31, align 8, !tbaa !5
  %940 = load i32, ptr %12, align 4, !tbaa !9
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds i32, ptr %939, i64 %941
  %943 = load i32, ptr %942, align 4, !tbaa !9
  %944 = add nsw i32 %938, %943
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds ptr, ptr %932, i64 %945
  %947 = load ptr, ptr %946, align 8, !tbaa !5
  %948 = load i32, ptr %12, align 4, !tbaa !9
  %949 = call i32 @libmetis__rpqDelete(ptr noundef %947, i32 noundef %948)
  br label %950

950:                                              ; preds = %931, %924
  br label %990

951:                                              ; preds = %865
  %952 = load ptr, ptr %36, align 8, !tbaa !5
  %953 = load i32, ptr %12, align 4, !tbaa !9
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds i32, ptr %952, i64 %954
  %956 = load i32, ptr %955, align 4, !tbaa !9
  %957 = icmp eq i32 %956, -1
  br i1 %957, label %958, label %989

958:                                              ; preds = %951
  %959 = load ptr, ptr %33, align 8, !tbaa !5
  %960 = load i32, ptr %12, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds i32, ptr %959, i64 %961
  %963 = load i32, ptr %962, align 4, !tbaa !9
  %964 = load ptr, ptr %32, align 8, !tbaa !5
  %965 = load i32, ptr %12, align 4, !tbaa !9
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds i32, ptr %964, i64 %966
  %968 = load i32, ptr %967, align 4, !tbaa !9
  %969 = sub nsw i32 %963, %968
  %970 = sitofp i32 %969 to float
  store float %970, ptr %52, align 4, !tbaa !25
  %971 = load ptr, ptr %54, align 8, !tbaa !5
  %972 = load ptr, ptr %39, align 8, !tbaa !5
  %973 = load i32, ptr %12, align 4, !tbaa !9
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds i32, ptr %972, i64 %974
  %976 = load i32, ptr %975, align 4, !tbaa !9
  %977 = mul nsw i32 2, %976
  %978 = load ptr, ptr %31, align 8, !tbaa !5
  %979 = load i32, ptr %12, align 4, !tbaa !9
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds i32, ptr %978, i64 %980
  %982 = load i32, ptr %981, align 4, !tbaa !9
  %983 = add nsw i32 %977, %982
  %984 = sext i32 %983 to i64
  %985 = getelementptr inbounds ptr, ptr %971, i64 %984
  %986 = load ptr, ptr %985, align 8, !tbaa !5
  %987 = load i32, ptr %12, align 4, !tbaa !9
  %988 = load float, ptr %52, align 4, !tbaa !25
  call void @libmetis__rpqUpdate(ptr noundef %986, i32 noundef %987, float noundef %988)
  br label %989

989:                                              ; preds = %958, %951
  br label %990

990:                                              ; preds = %989, %950
  br label %1071

991:                                              ; preds = %858
  %992 = load ptr, ptr %33, align 8, !tbaa !5
  %993 = load i32, ptr %12, align 4, !tbaa !9
  %994 = sext i32 %993 to i64
  %995 = getelementptr inbounds i32, ptr %992, i64 %994
  %996 = load i32, ptr %995, align 4, !tbaa !9
  %997 = icmp sgt i32 %996, 0
  br i1 %997, label %998, label %1070

998:                                              ; preds = %991
  br label %999

999:                                              ; preds = %998
  %1000 = load ptr, ptr %34, align 8, !tbaa !5
  %1001 = load i32, ptr %12, align 4, !tbaa !9
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds i32, ptr %1000, i64 %1002
  %1004 = load i32, ptr %1003, align 4, !tbaa !9
  %1005 = icmp eq i32 %1004, -1
  br i1 %1005, label %1017, label %1006

1006:                                             ; preds = %999
  %1007 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef 373, ptr noundef @.str.1)
  %1008 = load ptr, ptr %34, align 8, !tbaa !5
  %1009 = load i32, ptr %12, align 4, !tbaa !9
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds i32, ptr %1008, i64 %1010
  %1012 = load i32, ptr %1011, align 4, !tbaa !9
  %1013 = icmp eq i32 %1012, -1
  br i1 %1013, label %1014, label %1015

1014:                                             ; preds = %1006
  br label %1016

1015:                                             ; preds = %1006
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 373, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

1016:                                             ; preds = %1014
  br label %1017

1017:                                             ; preds = %1016, %999
  %1018 = load i32, ptr %12, align 4, !tbaa !9
  %1019 = load ptr, ptr %35, align 8, !tbaa !5
  %1020 = load i32, ptr %17, align 4, !tbaa !9
  %1021 = sext i32 %1020 to i64
  %1022 = getelementptr inbounds i32, ptr %1019, i64 %1021
  store i32 %1018, ptr %1022, align 4, !tbaa !9
  %1023 = load i32, ptr %17, align 4, !tbaa !9
  %1024 = add nsw i32 %1023, 1
  store i32 %1024, ptr %17, align 4, !tbaa !9
  %1025 = load ptr, ptr %34, align 8, !tbaa !5
  %1026 = load i32, ptr %12, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds i32, ptr %1025, i64 %1027
  store i32 %1023, ptr %1028, align 4, !tbaa !9
  br label %1029

1029:                                             ; preds = %1017
  br label %1030

1030:                                             ; preds = %1029
  %1031 = load ptr, ptr %36, align 8, !tbaa !5
  %1032 = load i32, ptr %12, align 4, !tbaa !9
  %1033 = sext i32 %1032 to i64
  %1034 = getelementptr inbounds i32, ptr %1031, i64 %1033
  %1035 = load i32, ptr %1034, align 4, !tbaa !9
  %1036 = icmp eq i32 %1035, -1
  br i1 %1036, label %1037, label %1069

1037:                                             ; preds = %1030
  %1038 = load ptr, ptr %33, align 8, !tbaa !5
  %1039 = load i32, ptr %12, align 4, !tbaa !9
  %1040 = sext i32 %1039 to i64
  %1041 = getelementptr inbounds i32, ptr %1038, i64 %1040
  %1042 = load i32, ptr %1041, align 4, !tbaa !9
  %1043 = load ptr, ptr %32, align 8, !tbaa !5
  %1044 = load i32, ptr %12, align 4, !tbaa !9
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds i32, ptr %1043, i64 %1045
  %1047 = load i32, ptr %1046, align 4, !tbaa !9
  %1048 = sub nsw i32 %1042, %1047
  %1049 = sitofp i32 %1048 to float
  store float %1049, ptr %52, align 4, !tbaa !25
  %1050 = load ptr, ptr %54, align 8, !tbaa !5
  %1051 = load ptr, ptr %39, align 8, !tbaa !5
  %1052 = load i32, ptr %12, align 4, !tbaa !9
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds i32, ptr %1051, i64 %1053
  %1055 = load i32, ptr %1054, align 4, !tbaa !9
  %1056 = mul nsw i32 2, %1055
  %1057 = load ptr, ptr %31, align 8, !tbaa !5
  %1058 = load i32, ptr %12, align 4, !tbaa !9
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds i32, ptr %1057, i64 %1059
  %1061 = load i32, ptr %1060, align 4, !tbaa !9
  %1062 = add nsw i32 %1056, %1061
  %1063 = sext i32 %1062 to i64
  %1064 = getelementptr inbounds ptr, ptr %1050, i64 %1063
  %1065 = load ptr, ptr %1064, align 8, !tbaa !5
  %1066 = load i32, ptr %12, align 4, !tbaa !9
  %1067 = load float, ptr %52, align 4, !tbaa !25
  %1068 = call i32 @libmetis__rpqInsert(ptr noundef %1065, i32 noundef %1066, float noundef %1067)
  br label %1069

1069:                                             ; preds = %1037, %1030
  br label %1070

1070:                                             ; preds = %1069, %991
  br label %1071

1071:                                             ; preds = %1070, %990
  br label %1072

1072:                                             ; preds = %1071
  %1073 = load i32, ptr %11, align 4, !tbaa !9
  %1074 = add nsw i32 %1073, 1
  store i32 %1074, ptr %11, align 4, !tbaa !9
  br label %805, !llvm.loop !42

1075:                                             ; preds = %805
  br label %1076

1076:                                             ; preds = %1075
  %1077 = load i32, ptr %18, align 4, !tbaa !9
  %1078 = add nsw i32 %1077, 1
  store i32 %1078, ptr %18, align 4, !tbaa !9
  br label %435, !llvm.loop !43

1079:                                             ; preds = %572, %462, %435
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %1080

1080:                                             ; preds = %1093, %1079
  %1081 = load i32, ptr %9, align 4, !tbaa !9
  %1082 = load i32, ptr %18, align 4, !tbaa !9
  %1083 = icmp slt i32 %1081, %1082
  br i1 %1083, label %1084, label %1096

1084:                                             ; preds = %1080
  %1085 = load ptr, ptr %36, align 8, !tbaa !5
  %1086 = load ptr, ptr %37, align 8, !tbaa !5
  %1087 = load i32, ptr %9, align 4, !tbaa !9
  %1088 = sext i32 %1087 to i64
  %1089 = getelementptr inbounds i32, ptr %1086, i64 %1088
  %1090 = load i32, ptr %1089, align 4, !tbaa !9
  %1091 = sext i32 %1090 to i64
  %1092 = getelementptr inbounds i32, ptr %1085, i64 %1091
  store i32 -1, ptr %1092, align 4, !tbaa !9
  br label %1093

1093:                                             ; preds = %1084
  %1094 = load i32, ptr %9, align 4, !tbaa !9
  %1095 = add nsw i32 %1094, 1
  store i32 %1095, ptr %9, align 4, !tbaa !9
  br label %1080, !llvm.loop !44

1096:                                             ; preds = %1080
  %1097 = load i32, ptr %18, align 4, !tbaa !9
  %1098 = add nsw i32 %1097, -1
  store i32 %1098, ptr %18, align 4, !tbaa !9
  br label %1099

1099:                                             ; preds = %1479, %1096
  %1100 = load i32, ptr %18, align 4, !tbaa !9
  %1101 = load i32, ptr %44, align 4, !tbaa !9
  %1102 = icmp sgt i32 %1100, %1101
  br i1 %1102, label %1103, label %1482

1103:                                             ; preds = %1099
  %1104 = load ptr, ptr %37, align 8, !tbaa !5
  %1105 = load i32, ptr %18, align 4, !tbaa !9
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds i32, ptr %1104, i64 %1106
  %1108 = load i32, ptr %1107, align 4, !tbaa !9
  store i32 %1108, ptr %40, align 4, !tbaa !9
  %1109 = load ptr, ptr %31, align 8, !tbaa !5
  %1110 = load i32, ptr %40, align 4, !tbaa !9
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds i32, ptr %1109, i64 %1111
  %1113 = load i32, ptr %1112, align 4, !tbaa !9
  %1114 = add nsw i32 %1113, 1
  %1115 = srem i32 %1114, 2
  %1116 = load ptr, ptr %31, align 8, !tbaa !5
  %1117 = load i32, ptr %40, align 4, !tbaa !9
  %1118 = sext i32 %1117 to i64
  %1119 = getelementptr inbounds i32, ptr %1116, i64 %1118
  store i32 %1115, ptr %1119, align 4, !tbaa !9
  store i32 %1115, ptr %20, align 4, !tbaa !9
  br label %1120

1120:                                             ; preds = %1103
  %1121 = load ptr, ptr %32, align 8, !tbaa !5
  %1122 = load i32, ptr %40, align 4, !tbaa !9
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds i32, ptr %1121, i64 %1123
  %1125 = load i32, ptr %1124, align 4, !tbaa !9
  store i32 %1125, ptr %24, align 4, !tbaa !9
  %1126 = load ptr, ptr %33, align 8, !tbaa !5
  %1127 = load i32, ptr %40, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds i32, ptr %1126, i64 %1128
  %1130 = load i32, ptr %1129, align 4, !tbaa !9
  %1131 = load ptr, ptr %32, align 8, !tbaa !5
  %1132 = load i32, ptr %40, align 4, !tbaa !9
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds i32, ptr %1131, i64 %1133
  store i32 %1130, ptr %1134, align 4, !tbaa !9
  %1135 = load i32, ptr %24, align 4, !tbaa !9
  %1136 = load ptr, ptr %33, align 8, !tbaa !5
  %1137 = load i32, ptr %40, align 4, !tbaa !9
  %1138 = sext i32 %1137 to i64
  %1139 = getelementptr inbounds i32, ptr %1136, i64 %1138
  store i32 %1135, ptr %1139, align 4, !tbaa !9
  br label %1140

1140:                                             ; preds = %1120
  br label %1141

1141:                                             ; preds = %1140
  %1142 = load ptr, ptr %33, align 8, !tbaa !5
  %1143 = load i32, ptr %40, align 4, !tbaa !9
  %1144 = sext i32 %1143 to i64
  %1145 = getelementptr inbounds i32, ptr %1142, i64 %1144
  %1146 = load i32, ptr %1145, align 4, !tbaa !9
  %1147 = icmp eq i32 %1146, 0
  br i1 %1147, label %1148, label %1221

1148:                                             ; preds = %1141
  %1149 = load ptr, ptr %34, align 8, !tbaa !5
  %1150 = load i32, ptr %40, align 4, !tbaa !9
  %1151 = sext i32 %1150 to i64
  %1152 = getelementptr inbounds i32, ptr %1149, i64 %1151
  %1153 = load i32, ptr %1152, align 4, !tbaa !9
  %1154 = icmp ne i32 %1153, -1
  br i1 %1154, label %1155, label %1221

1155:                                             ; preds = %1148
  %1156 = load ptr, ptr %26, align 8, !tbaa !5
  %1157 = load i32, ptr %40, align 4, !tbaa !9
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds i32, ptr %1156, i64 %1158
  %1160 = load i32, ptr %1159, align 4, !tbaa !9
  %1161 = load ptr, ptr %26, align 8, !tbaa !5
  %1162 = load i32, ptr %40, align 4, !tbaa !9
  %1163 = add nsw i32 %1162, 1
  %1164 = sext i32 %1163 to i64
  %1165 = getelementptr inbounds i32, ptr %1161, i64 %1164
  %1166 = load i32, ptr %1165, align 4, !tbaa !9
  %1167 = icmp slt i32 %1160, %1166
  br i1 %1167, label %1168, label %1221

1168:                                             ; preds = %1155
  br label %1169

1169:                                             ; preds = %1168
  %1170 = load ptr, ptr %34, align 8, !tbaa !5
  %1171 = load i32, ptr %40, align 4, !tbaa !9
  %1172 = sext i32 %1171 to i64
  %1173 = getelementptr inbounds i32, ptr %1170, i64 %1172
  %1174 = load i32, ptr %1173, align 4, !tbaa !9
  %1175 = icmp ne i32 %1174, -1
  br i1 %1175, label %1187, label %1176

1176:                                             ; preds = %1169
  %1177 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 399, ptr noundef @.str.1)
  %1178 = load ptr, ptr %34, align 8, !tbaa !5
  %1179 = load i32, ptr %40, align 4, !tbaa !9
  %1180 = sext i32 %1179 to i64
  %1181 = getelementptr inbounds i32, ptr %1178, i64 %1180
  %1182 = load i32, ptr %1181, align 4, !tbaa !9
  %1183 = icmp ne i32 %1182, -1
  br i1 %1183, label %1184, label %1185

1184:                                             ; preds = %1176
  br label %1186

1185:                                             ; preds = %1176
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 399, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

1186:                                             ; preds = %1184
  br label %1187

1187:                                             ; preds = %1186, %1169
  %1188 = load ptr, ptr %35, align 8, !tbaa !5
  %1189 = load i32, ptr %17, align 4, !tbaa !9
  %1190 = add nsw i32 %1189, -1
  store i32 %1190, ptr %17, align 4, !tbaa !9
  %1191 = sext i32 %1190 to i64
  %1192 = getelementptr inbounds i32, ptr %1188, i64 %1191
  %1193 = load i32, ptr %1192, align 4, !tbaa !9
  %1194 = load ptr, ptr %35, align 8, !tbaa !5
  %1195 = load ptr, ptr %34, align 8, !tbaa !5
  %1196 = load i32, ptr %40, align 4, !tbaa !9
  %1197 = sext i32 %1196 to i64
  %1198 = getelementptr inbounds i32, ptr %1195, i64 %1197
  %1199 = load i32, ptr %1198, align 4, !tbaa !9
  %1200 = sext i32 %1199 to i64
  %1201 = getelementptr inbounds i32, ptr %1194, i64 %1200
  store i32 %1193, ptr %1201, align 4, !tbaa !9
  %1202 = load ptr, ptr %34, align 8, !tbaa !5
  %1203 = load i32, ptr %40, align 4, !tbaa !9
  %1204 = sext i32 %1203 to i64
  %1205 = getelementptr inbounds i32, ptr %1202, i64 %1204
  %1206 = load i32, ptr %1205, align 4, !tbaa !9
  %1207 = load ptr, ptr %34, align 8, !tbaa !5
  %1208 = load ptr, ptr %35, align 8, !tbaa !5
  %1209 = load i32, ptr %17, align 4, !tbaa !9
  %1210 = sext i32 %1209 to i64
  %1211 = getelementptr inbounds i32, ptr %1208, i64 %1210
  %1212 = load i32, ptr %1211, align 4, !tbaa !9
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds i32, ptr %1207, i64 %1213
  store i32 %1206, ptr %1214, align 4, !tbaa !9
  %1215 = load ptr, ptr %34, align 8, !tbaa !5
  %1216 = load i32, ptr %40, align 4, !tbaa !9
  %1217 = sext i32 %1216 to i64
  %1218 = getelementptr inbounds i32, ptr %1215, i64 %1217
  store i32 -1, ptr %1218, align 4, !tbaa !9
  br label %1219

1219:                                             ; preds = %1187
  br label %1220

1220:                                             ; preds = %1219
  br label %1269

1221:                                             ; preds = %1155, %1148, %1141
  %1222 = load ptr, ptr %33, align 8, !tbaa !5
  %1223 = load i32, ptr %40, align 4, !tbaa !9
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds i32, ptr %1222, i64 %1224
  %1226 = load i32, ptr %1225, align 4, !tbaa !9
  %1227 = icmp sgt i32 %1226, 0
  br i1 %1227, label %1228, label %1268

1228:                                             ; preds = %1221
  %1229 = load ptr, ptr %34, align 8, !tbaa !5
  %1230 = load i32, ptr %40, align 4, !tbaa !9
  %1231 = sext i32 %1230 to i64
  %1232 = getelementptr inbounds i32, ptr %1229, i64 %1231
  %1233 = load i32, ptr %1232, align 4, !tbaa !9
  %1234 = icmp eq i32 %1233, -1
  br i1 %1234, label %1235, label %1268

1235:                                             ; preds = %1228
  br label %1236

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

1243:                                             ; preds = %1236
  %1244 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef 401, ptr noundef @.str.1)
  %1245 = load ptr, ptr %34, align 8, !tbaa !5
  %1246 = load i32, ptr %40, align 4, !tbaa !9
  %1247 = sext i32 %1246 to i64
  %1248 = getelementptr inbounds i32, ptr %1245, i64 %1247
  %1249 = load i32, ptr %1248, align 4, !tbaa !9
  %1250 = icmp eq i32 %1249, -1
  br i1 %1250, label %1251, label %1252

1251:                                             ; preds = %1243
  br label %1253

1252:                                             ; preds = %1243
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 401, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

1253:                                             ; preds = %1251
  br label %1254

1254:                                             ; preds = %1253, %1236
  %1255 = load i32, ptr %40, align 4, !tbaa !9
  %1256 = load ptr, ptr %35, align 8, !tbaa !5
  %1257 = load i32, ptr %17, align 4, !tbaa !9
  %1258 = sext i32 %1257 to i64
  %1259 = getelementptr inbounds i32, ptr %1256, i64 %1258
  store i32 %1255, ptr %1259, align 4, !tbaa !9
  %1260 = load i32, ptr %17, align 4, !tbaa !9
  %1261 = add nsw i32 %1260, 1
  store i32 %1261, ptr %17, align 4, !tbaa !9
  %1262 = load ptr, ptr %34, align 8, !tbaa !5
  %1263 = load i32, ptr %40, align 4, !tbaa !9
  %1264 = sext i32 %1263 to i64
  %1265 = getelementptr inbounds i32, ptr %1262, i64 %1264
  store i32 %1260, ptr %1265, align 4, !tbaa !9
  br label %1266

1266:                                             ; preds = %1254
  br label %1267

1267:                                             ; preds = %1266
  br label %1268

1268:                                             ; preds = %1267, %1228, %1221
  br label %1269

1269:                                             ; preds = %1268, %1220
  %1270 = load i32, ptr %16, align 4, !tbaa !9
  %1271 = sext i32 %1270 to i64
  %1272 = load ptr, ptr %28, align 8, !tbaa !5
  %1273 = load i32, ptr %40, align 4, !tbaa !9
  %1274 = load i32, ptr %16, align 4, !tbaa !9
  %1275 = mul nsw i32 %1273, %1274
  %1276 = sext i32 %1275 to i64
  %1277 = getelementptr inbounds i32, ptr %1272, i64 %1276
  %1278 = load ptr, ptr %30, align 8, !tbaa !5
  %1279 = load i32, ptr %20, align 4, !tbaa !9
  %1280 = load i32, ptr %16, align 4, !tbaa !9
  %1281 = mul nsw i32 %1279, %1280
  %1282 = sext i32 %1281 to i64
  %1283 = getelementptr inbounds i32, ptr %1278, i64 %1282
  %1284 = call ptr @libmetis__iaxpy(i64 noundef %1271, i32 noundef 1, ptr noundef %1277, i64 noundef 1, ptr noundef %1283, i64 noundef 1)
  %1285 = load i32, ptr %16, align 4, !tbaa !9
  %1286 = sext i32 %1285 to i64
  %1287 = load ptr, ptr %28, align 8, !tbaa !5
  %1288 = load i32, ptr %40, align 4, !tbaa !9
  %1289 = load i32, ptr %16, align 4, !tbaa !9
  %1290 = mul nsw i32 %1288, %1289
  %1291 = sext i32 %1290 to i64
  %1292 = getelementptr inbounds i32, ptr %1287, i64 %1291
  %1293 = load ptr, ptr %30, align 8, !tbaa !5
  %1294 = load i32, ptr %20, align 4, !tbaa !9
  %1295 = add nsw i32 %1294, 1
  %1296 = srem i32 %1295, 2
  %1297 = load i32, ptr %16, align 4, !tbaa !9
  %1298 = mul nsw i32 %1296, %1297
  %1299 = sext i32 %1298 to i64
  %1300 = getelementptr inbounds i32, ptr %1293, i64 %1299
  %1301 = call ptr @libmetis__iaxpy(i64 noundef %1286, i32 noundef -1, ptr noundef %1292, i64 noundef 1, ptr noundef %1300, i64 noundef 1)
  %1302 = load ptr, ptr %26, align 8, !tbaa !5
  %1303 = load i32, ptr %40, align 4, !tbaa !9
  %1304 = sext i32 %1303 to i64
  %1305 = getelementptr inbounds i32, ptr %1302, i64 %1304
  %1306 = load i32, ptr %1305, align 4, !tbaa !9
  store i32 %1306, ptr %11, align 4, !tbaa !9
  br label %1307

1307:                                             ; preds = %1475, %1269
  %1308 = load i32, ptr %11, align 4, !tbaa !9
  %1309 = load ptr, ptr %26, align 8, !tbaa !5
  %1310 = load i32, ptr %40, align 4, !tbaa !9
  %1311 = add nsw i32 %1310, 1
  %1312 = sext i32 %1311 to i64
  %1313 = getelementptr inbounds i32, ptr %1309, i64 %1312
  %1314 = load i32, ptr %1313, align 4, !tbaa !9
  %1315 = icmp slt i32 %1308, %1314
  br i1 %1315, label %1316, label %1478

1316:                                             ; preds = %1307
  %1317 = load ptr, ptr %27, align 8, !tbaa !5
  %1318 = load i32, ptr %11, align 4, !tbaa !9
  %1319 = sext i32 %1318 to i64
  %1320 = getelementptr inbounds i32, ptr %1317, i64 %1319
  %1321 = load i32, ptr %1320, align 4, !tbaa !9
  store i32 %1321, ptr %12, align 4, !tbaa !9
  %1322 = load i32, ptr %20, align 4, !tbaa !9
  %1323 = load ptr, ptr %31, align 8, !tbaa !5
  %1324 = load i32, ptr %12, align 4, !tbaa !9
  %1325 = sext i32 %1324 to i64
  %1326 = getelementptr inbounds i32, ptr %1323, i64 %1325
  %1327 = load i32, ptr %1326, align 4, !tbaa !9
  %1328 = icmp eq i32 %1322, %1327
  br i1 %1328, label %1329, label %1335

1329:                                             ; preds = %1316
  %1330 = load ptr, ptr %29, align 8, !tbaa !5
  %1331 = load i32, ptr %11, align 4, !tbaa !9
  %1332 = sext i32 %1331 to i64
  %1333 = getelementptr inbounds i32, ptr %1330, i64 %1332
  %1334 = load i32, ptr %1333, align 4, !tbaa !9
  br label %1342

1335:                                             ; preds = %1316
  %1336 = load ptr, ptr %29, align 8, !tbaa !5
  %1337 = load i32, ptr %11, align 4, !tbaa !9
  %1338 = sext i32 %1337 to i64
  %1339 = getelementptr inbounds i32, ptr %1336, i64 %1338
  %1340 = load i32, ptr %1339, align 4, !tbaa !9
  %1341 = sub nsw i32 0, %1340
  br label %1342

1342:                                             ; preds = %1335, %1329
  %1343 = phi i32 [ %1334, %1329 ], [ %1341, %1335 ]
  store i32 %1343, ptr %14, align 4, !tbaa !9
  br label %1344

1344:                                             ; preds = %1342
  %1345 = load i32, ptr %14, align 4, !tbaa !9
  %1346 = load ptr, ptr %32, align 8, !tbaa !5
  %1347 = load i32, ptr %12, align 4, !tbaa !9
  %1348 = sext i32 %1347 to i64
  %1349 = getelementptr inbounds i32, ptr %1346, i64 %1348
  %1350 = load i32, ptr %1349, align 4, !tbaa !9
  %1351 = add nsw i32 %1350, %1345
  store i32 %1351, ptr %1349, align 4, !tbaa !9
  %1352 = load i32, ptr %14, align 4, !tbaa !9
  %1353 = load ptr, ptr %33, align 8, !tbaa !5
  %1354 = load i32, ptr %12, align 4, !tbaa !9
  %1355 = sext i32 %1354 to i64
  %1356 = getelementptr inbounds i32, ptr %1353, i64 %1355
  %1357 = load i32, ptr %1356, align 4, !tbaa !9
  %1358 = sub nsw i32 %1357, %1352
  store i32 %1358, ptr %1356, align 4, !tbaa !9
  br label %1359

1359:                                             ; preds = %1344
  br label %1360

1360:                                             ; preds = %1359
  %1361 = load ptr, ptr %34, align 8, !tbaa !5
  %1362 = load i32, ptr %12, align 4, !tbaa !9
  %1363 = sext i32 %1362 to i64
  %1364 = getelementptr inbounds i32, ptr %1361, i64 %1363
  %1365 = load i32, ptr %1364, align 4, !tbaa !9
  %1366 = icmp ne i32 %1365, -1
  br i1 %1366, label %1367, label %1427

1367:                                             ; preds = %1360
  %1368 = load ptr, ptr %33, align 8, !tbaa !5
  %1369 = load i32, ptr %12, align 4, !tbaa !9
  %1370 = sext i32 %1369 to i64
  %1371 = getelementptr inbounds i32, ptr %1368, i64 %1370
  %1372 = load i32, ptr %1371, align 4, !tbaa !9
  %1373 = icmp eq i32 %1372, 0
  br i1 %1373, label %1374, label %1427

1374:                                             ; preds = %1367
  br label %1375

1375:                                             ; preds = %1374
  %1376 = load ptr, ptr %34, align 8, !tbaa !5
  %1377 = load i32, ptr %12, align 4, !tbaa !9
  %1378 = sext i32 %1377 to i64
  %1379 = getelementptr inbounds i32, ptr %1376, i64 %1378
  %1380 = load i32, ptr %1379, align 4, !tbaa !9
  %1381 = icmp ne i32 %1380, -1
  br i1 %1381, label %1393, label %1382

1382:                                             ; preds = %1375
  %1383 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 412, ptr noundef @.str.1)
  %1384 = load ptr, ptr %34, align 8, !tbaa !5
  %1385 = load i32, ptr %12, align 4, !tbaa !9
  %1386 = sext i32 %1385 to i64
  %1387 = getelementptr inbounds i32, ptr %1384, i64 %1386
  %1388 = load i32, ptr %1387, align 4, !tbaa !9
  %1389 = icmp ne i32 %1388, -1
  br i1 %1389, label %1390, label %1391

1390:                                             ; preds = %1382
  br label %1392

1391:                                             ; preds = %1382
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 412, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

1392:                                             ; preds = %1390
  br label %1393

1393:                                             ; preds = %1392, %1375
  %1394 = load ptr, ptr %35, align 8, !tbaa !5
  %1395 = load i32, ptr %17, align 4, !tbaa !9
  %1396 = add nsw i32 %1395, -1
  store i32 %1396, ptr %17, align 4, !tbaa !9
  %1397 = sext i32 %1396 to i64
  %1398 = getelementptr inbounds i32, ptr %1394, i64 %1397
  %1399 = load i32, ptr %1398, align 4, !tbaa !9
  %1400 = load ptr, ptr %35, align 8, !tbaa !5
  %1401 = load ptr, ptr %34, align 8, !tbaa !5
  %1402 = load i32, ptr %12, align 4, !tbaa !9
  %1403 = sext i32 %1402 to i64
  %1404 = getelementptr inbounds i32, ptr %1401, i64 %1403
  %1405 = load i32, ptr %1404, align 4, !tbaa !9
  %1406 = sext i32 %1405 to i64
  %1407 = getelementptr inbounds i32, ptr %1400, i64 %1406
  store i32 %1399, ptr %1407, align 4, !tbaa !9
  %1408 = load ptr, ptr %34, align 8, !tbaa !5
  %1409 = load i32, ptr %12, align 4, !tbaa !9
  %1410 = sext i32 %1409 to i64
  %1411 = getelementptr inbounds i32, ptr %1408, i64 %1410
  %1412 = load i32, ptr %1411, align 4, !tbaa !9
  %1413 = load ptr, ptr %34, align 8, !tbaa !5
  %1414 = load ptr, ptr %35, align 8, !tbaa !5
  %1415 = load i32, ptr %17, align 4, !tbaa !9
  %1416 = sext i32 %1415 to i64
  %1417 = getelementptr inbounds i32, ptr %1414, i64 %1416
  %1418 = load i32, ptr %1417, align 4, !tbaa !9
  %1419 = sext i32 %1418 to i64
  %1420 = getelementptr inbounds i32, ptr %1413, i64 %1419
  store i32 %1412, ptr %1420, align 4, !tbaa !9
  %1421 = load ptr, ptr %34, align 8, !tbaa !5
  %1422 = load i32, ptr %12, align 4, !tbaa !9
  %1423 = sext i32 %1422 to i64
  %1424 = getelementptr inbounds i32, ptr %1421, i64 %1423
  store i32 -1, ptr %1424, align 4, !tbaa !9
  br label %1425

1425:                                             ; preds = %1393
  br label %1426

1426:                                             ; preds = %1425
  br label %1427

1427:                                             ; preds = %1426, %1367, %1360
  %1428 = load ptr, ptr %34, align 8, !tbaa !5
  %1429 = load i32, ptr %12, align 4, !tbaa !9
  %1430 = sext i32 %1429 to i64
  %1431 = getelementptr inbounds i32, ptr %1428, i64 %1430
  %1432 = load i32, ptr %1431, align 4, !tbaa !9
  %1433 = icmp eq i32 %1432, -1
  br i1 %1433, label %1434, label %1474

1434:                                             ; preds = %1427
  %1435 = load ptr, ptr %33, align 8, !tbaa !5
  %1436 = load i32, ptr %12, align 4, !tbaa !9
  %1437 = sext i32 %1436 to i64
  %1438 = getelementptr inbounds i32, ptr %1435, i64 %1437
  %1439 = load i32, ptr %1438, align 4, !tbaa !9
  %1440 = icmp sgt i32 %1439, 0
  br i1 %1440, label %1441, label %1474

1441:                                             ; preds = %1434
  br label %1442

1442:                                             ; preds = %1441
  %1443 = load ptr, ptr %34, align 8, !tbaa !5
  %1444 = load i32, ptr %12, align 4, !tbaa !9
  %1445 = sext i32 %1444 to i64
  %1446 = getelementptr inbounds i32, ptr %1443, i64 %1445
  %1447 = load i32, ptr %1446, align 4, !tbaa !9
  %1448 = icmp eq i32 %1447, -1
  br i1 %1448, label %1460, label %1449

1449:                                             ; preds = %1442
  %1450 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef 414, ptr noundef @.str.1)
  %1451 = load ptr, ptr %34, align 8, !tbaa !5
  %1452 = load i32, ptr %12, align 4, !tbaa !9
  %1453 = sext i32 %1452 to i64
  %1454 = getelementptr inbounds i32, ptr %1451, i64 %1453
  %1455 = load i32, ptr %1454, align 4, !tbaa !9
  %1456 = icmp eq i32 %1455, -1
  br i1 %1456, label %1457, label %1458

1457:                                             ; preds = %1449
  br label %1459

1458:                                             ; preds = %1449
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 414, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #5
  unreachable

1459:                                             ; preds = %1457
  br label %1460

1460:                                             ; preds = %1459, %1442
  %1461 = load i32, ptr %12, align 4, !tbaa !9
  %1462 = load ptr, ptr %35, align 8, !tbaa !5
  %1463 = load i32, ptr %17, align 4, !tbaa !9
  %1464 = sext i32 %1463 to i64
  %1465 = getelementptr inbounds i32, ptr %1462, i64 %1464
  store i32 %1461, ptr %1465, align 4, !tbaa !9
  %1466 = load i32, ptr %17, align 4, !tbaa !9
  %1467 = add nsw i32 %1466, 1
  store i32 %1467, ptr %17, align 4, !tbaa !9
  %1468 = load ptr, ptr %34, align 8, !tbaa !5
  %1469 = load i32, ptr %12, align 4, !tbaa !9
  %1470 = sext i32 %1469 to i64
  %1471 = getelementptr inbounds i32, ptr %1468, i64 %1470
  store i32 %1466, ptr %1471, align 4, !tbaa !9
  br label %1472

1472:                                             ; preds = %1460
  br label %1473

1473:                                             ; preds = %1472
  br label %1474

1474:                                             ; preds = %1473, %1434, %1427
  br label %1475

1475:                                             ; preds = %1474
  %1476 = load i32, ptr %11, align 4, !tbaa !9
  %1477 = add nsw i32 %1476, 1
  store i32 %1477, ptr %11, align 4, !tbaa !9
  br label %1307, !llvm.loop !45

1478:                                             ; preds = %1307
  br label %1479

1479:                                             ; preds = %1478
  %1480 = load i32, ptr %18, align 4, !tbaa !9
  %1481 = add nsw i32 %1480, -1
  store i32 %1481, ptr %18, align 4, !tbaa !9
  br label %1099, !llvm.loop !46

1482:                                             ; preds = %1099
  %1483 = load i32, ptr %41, align 4, !tbaa !9
  %1484 = load ptr, ptr %6, align 8, !tbaa !5
  %1485 = getelementptr inbounds %struct.graph_t, ptr %1484, i32 0, i32 17
  store i32 %1483, ptr %1485, align 8, !tbaa !38
  %1486 = load i32, ptr %17, align 4, !tbaa !9
  %1487 = load ptr, ptr %6, align 8, !tbaa !5
  %1488 = getelementptr inbounds %struct.graph_t, ptr %1487, i32 0, i32 21
  store i32 %1486, ptr %1488, align 8, !tbaa !39
  %1489 = load ptr, ptr %5, align 8, !tbaa !5
  %1490 = getelementptr inbounds %struct.ctrl_t, ptr %1489, i32 0, i32 2
  %1491 = load i32, ptr %1490, align 8, !tbaa !36
  %1492 = and i32 %1491, 8
  %1493 = icmp ne i32 %1492, 0
  br i1 %1493, label %1494, label %1500

1494:                                             ; preds = %1482
  %1495 = load ptr, ptr %5, align 8, !tbaa !5
  %1496 = load ptr, ptr %6, align 8, !tbaa !5
  %1497 = load ptr, ptr %7, align 8, !tbaa !5
  %1498 = load float, ptr %50, align 4, !tbaa !25
  %1499 = load i32, ptr %44, align 4, !tbaa !9
  call void @libmetis__Print2WayRefineStats(ptr noundef %1495, ptr noundef %1496, ptr noundef %1497, float noundef %1498, i32 noundef %1499)
  br label %1500

1500:                                             ; preds = %1494, %1482
  %1501 = load i32, ptr %44, align 4, !tbaa !9
  %1502 = icmp sle i32 %1501, 0
  br i1 %1502, label %1507, label %1503

1503:                                             ; preds = %1500
  %1504 = load i32, ptr %41, align 4, !tbaa !9
  %1505 = load i32, ptr %42, align 4, !tbaa !9
  %1506 = icmp eq i32 %1504, %1505
  br i1 %1506, label %1507, label %1508

1507:                                             ; preds = %1503, %1500
  br label %1512

1508:                                             ; preds = %1503
  br label %1509

1509:                                             ; preds = %1508
  %1510 = load i32, ptr %21, align 4, !tbaa !9
  %1511 = add nsw i32 %1510, 1
  store i32 %1511, ptr %21, align 4, !tbaa !9
  br label %267, !llvm.loop !47

1512:                                             ; preds = %1507, %267
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %1513

1513:                                             ; preds = %1524, %1512
  %1514 = load i32, ptr %9, align 4, !tbaa !9
  %1515 = load i32, ptr %16, align 4, !tbaa !9
  %1516 = mul nsw i32 2, %1515
  %1517 = icmp slt i32 %1514, %1516
  br i1 %1517, label %1518, label %1527

1518:                                             ; preds = %1513
  %1519 = load ptr, ptr %54, align 8, !tbaa !5
  %1520 = load i32, ptr %9, align 4, !tbaa !9
  %1521 = sext i32 %1520 to i64
  %1522 = getelementptr inbounds ptr, ptr %1519, i64 %1521
  %1523 = load ptr, ptr %1522, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1523)
  br label %1524

1524:                                             ; preds = %1518
  %1525 = load i32, ptr %9, align 4, !tbaa !9
  %1526 = add nsw i32 %1525, 1
  store i32 %1526, ptr %9, align 4, !tbaa !9
  br label %1513, !llvm.loop !48

1527:                                             ; preds = %1513
  %1528 = load ptr, ptr %5, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1528)
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) #2

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

declare ptr @libmetis__rpqCreate(i64 noundef) #2

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

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

declare void @libmetis__rpqReset(ptr noundef) #2

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

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

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

declare i32 @libmetis__CheckBnd(ptr noundef) #2

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

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

declare i32 @libmetis__rpqGetTop(ptr noundef) #2

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

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

declare void @libmetis__rpqDestroy(ptr noundef) #2

declare void @libmetis__wspacepop(ptr noundef) #2

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

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

declare ptr @libmetis__wspacemalloc(ptr noundef, i64 noundef) #2

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

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

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

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

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

declare ptr @libmetis__rcopy(i64 noundef, ptr noundef, ptr noundef) #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

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


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

@.str = external hidden unnamed_addr constant [86 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine = external hidden unnamed_addr constant [72 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_Mc2WayCutRefine(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3) local_unnamed_addr #0 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  tail call void @libmetis__wspacepush(ptr noundef %0) #6
  %7 = load i32, ptr %1, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 8
  %9 = load i32, ptr %8, align 8, !tbaa !11
  %10 = getelementptr inbounds i8, ptr %1, i64 16
  %11 = load ptr, ptr %10, align 8, !tbaa !12
  %12 = getelementptr inbounds i8, ptr %1, i64 24
  %13 = load ptr, ptr %12, align 8, !tbaa !13
  %14 = getelementptr inbounds i8, ptr %1, i64 40
  %15 = load ptr, ptr %14, align 8, !tbaa !14
  %16 = getelementptr inbounds i8, ptr %1, i64 48
  %17 = load ptr, ptr %16, align 8, !tbaa !15
  %18 = getelementptr inbounds i8, ptr %1, i64 64
  %19 = load ptr, ptr %18, align 8, !tbaa !16
  %20 = getelementptr inbounds i8, ptr %1, i64 120
  %21 = load ptr, ptr %20, align 8, !tbaa !17
  %22 = getelementptr inbounds i8, ptr %1, i64 160
  %23 = load ptr, ptr %22, align 8, !tbaa !18
  %24 = getelementptr inbounds i8, ptr %1, i64 168
  %25 = load ptr, ptr %24, align 8, !tbaa !19
  %26 = getelementptr inbounds i8, ptr %1, i64 128
  %27 = load ptr, ptr %26, align 8, !tbaa !20
  %28 = getelementptr inbounds i8, ptr %1, i64 144
  %29 = load ptr, ptr %28, align 8, !tbaa !21
  %30 = getelementptr inbounds i8, ptr %1, i64 152
  %31 = load ptr, ptr %30, align 8, !tbaa !22
  %32 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %7) #6
  %33 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %7) #6
  %34 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %7) #6
  %35 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %7) #6
  %36 = tail call ptr @libmetis__rwspacemalloc(ptr noundef %0, i32 noundef %9) #6
  %37 = tail call ptr @libmetis__rwspacemalloc(ptr noundef %0, i32 noundef %9) #6
  %38 = tail call ptr @libmetis__rwspacemalloc(ptr noundef %0, i32 noundef %9) #6
  %39 = sitofp i32 %7 to double
  %40 = fmul double %39, 1.000000e-02
  %41 = fcmp oge double %40, 2.500000e+01
  %42 = select i1 %41, double %40, double 2.500000e+01
  %.inv = fcmp oge double %42, 1.500000e+02
  %43 = select i1 %.inv, double 1.500000e+02, double %42
  %44 = fptosi double %43 to i32
  %45 = tail call i32 @llvm.smax.i32(i32 %7, i32 20)
  %46 = uitofp nneg i32 %45 to double
  %47 = fdiv double 5.000000e-01, %46
  %48 = fptrunc double %47 to float
  %49 = shl nsw i32 %9, 1
  %50 = sext i32 %49 to i64
  %51 = shl nsw i64 %50, 3
  %52 = tail call ptr @libmetis__wspacemalloc(ptr noundef %0, i64 noundef %51) #6
  %53 = icmp sgt i32 %9, 0
  br i1 %53, label %.lr.ph, label %.preheader557

.lr.ph:                                           ; preds = %4
  %54 = sext i32 %7 to i64
  %smax = tail call i32 @llvm.smax.i32(i32 %49, i32 1)
  %wide.trip.count = zext nneg i32 %smax to i64
  br label %57

.preheader557:                                    ; preds = %57, %4
  %55 = icmp sgt i32 %7, 0
  br i1 %55, label %.lr.ph585, label %._crit_edge

.lr.ph585:                                        ; preds = %.preheader557
  %56 = sext i32 %9 to i64
  %wide.trip.count674 = zext nneg i32 %7 to i64
  br label %60

57:                                               ; preds = %.lr.ph, %57
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %57 ]
  %58 = tail call ptr @libmetis__rpqCreate(i64 noundef %54) #6
  %59 = getelementptr inbounds ptr, ptr %52, i64 %indvars.iv
  store ptr %58, ptr %59, align 8, !tbaa !23
  %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 %.preheader557, label %57, !llvm.loop !24

60:                                               ; preds = %.lr.ph585, %60
  %indvars.iv671 = phi i64 [ 0, %.lr.ph585 ], [ %indvars.iv.next672, %60 ]
  %61 = mul nsw i64 %indvars.iv671, %56
  %62 = getelementptr inbounds i32, ptr %13, i64 %61
  %63 = tail call i32 @libmetis__iargmax_nrm(i64 noundef %56, ptr noundef %62, ptr noundef %19) #6
  %64 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv671
  store i32 %63, ptr %64, align 4, !tbaa !26
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %exitcond675.not = icmp eq i64 %indvars.iv.next672, %wide.trip.count674
  br i1 %exitcond675.not, label %._crit_edge, label %60, !llvm.loop !27

._crit_edge:                                      ; preds = %60, %.preheader557
  %65 = getelementptr inbounds i8, ptr %0, i64 120
  %66 = load ptr, ptr %65, align 8, !tbaa !28
  %67 = getelementptr inbounds i8, ptr %0, i64 104
  %68 = load ptr, ptr %67, align 8, !tbaa !33
  %69 = tail call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %66, ptr noundef %68, ptr noundef %36) #6
  br i1 %53, label %.lr.ph588.preheader, label %._crit_edge589

.lr.ph588.preheader:                              ; preds = %._crit_edge
  %wide.trip.count679 = zext nneg i32 %9 to i64
  %xtraiter = and i64 %wide.trip.count679, 1
  %70 = icmp eq i32 %9, 1
  br i1 %70, label %._crit_edge589.loopexit.unr-lcssa, label %.lr.ph588.preheader.new

.lr.ph588.preheader.new:                          ; preds = %.lr.ph588.preheader
  %unroll_iter = and i64 %wide.trip.count679, 2147483646
  %71 = load ptr, ptr %67, align 8, !tbaa !33
  br label %.lr.ph588

.lr.ph588:                                        ; preds = %.lr.ph588, %.lr.ph588.preheader.new
  %indvars.iv676 = phi i64 [ 0, %.lr.ph588.preheader.new ], [ %indvars.iv.next677.1, %.lr.ph588 ]
  %niter = phi i64 [ 0, %.lr.ph588.preheader.new ], [ %niter.next.1, %.lr.ph588 ]
  %72 = getelementptr inbounds float, ptr %36, i64 %indvars.iv676
  %73 = load float, ptr %72, align 4, !tbaa !34
  %74 = fcmp ogt float %73, 0.000000e+00
  %75 = getelementptr inbounds float, ptr %71, i64 %indvars.iv676
  %76 = load float, ptr %75, align 4, !tbaa !34
  %77 = fadd float %73, %76
  %78 = select i1 %74, float %77, float %76
  store float %78, ptr %72, align 4, !tbaa !34
  %indvars.iv.next677 = or disjoint i64 %indvars.iv676, 1
  %79 = getelementptr inbounds float, ptr %36, i64 %indvars.iv.next677
  %80 = load float, ptr %79, align 4, !tbaa !34
  %81 = fcmp ogt float %80, 0.000000e+00
  %82 = getelementptr inbounds float, ptr %71, i64 %indvars.iv.next677
  %83 = load float, ptr %82, align 4, !tbaa !34
  %84 = fadd float %80, %83
  %85 = select i1 %81, float %84, float %83
  store float %85, ptr %79, align 4, !tbaa !34
  %indvars.iv.next677.1 = add nuw nsw i64 %indvars.iv676, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge589.loopexit.unr-lcssa, label %.lr.ph588, !llvm.loop !35

._crit_edge589.loopexit.unr-lcssa:                ; preds = %.lr.ph588, %.lr.ph588.preheader
  %indvars.iv676.unr = phi i64 [ 0, %.lr.ph588.preheader ], [ %indvars.iv.next677.1, %.lr.ph588 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge589, label %.lr.ph588.epil

.lr.ph588.epil:                                   ; preds = %._crit_edge589.loopexit.unr-lcssa
  %86 = getelementptr inbounds float, ptr %36, i64 %indvars.iv676.unr
  %87 = load float, ptr %86, align 4, !tbaa !34
  %88 = fcmp ogt float %87, 0.000000e+00
  %89 = load ptr, ptr %67, align 8, !tbaa !33
  %90 = getelementptr inbounds float, ptr %89, i64 %indvars.iv676.unr
  %91 = load float, ptr %90, align 4, !tbaa !34
  %92 = fadd float %87, %91
  %93 = select i1 %88, float %92, float %91
  store float %93, ptr %86, align 4, !tbaa !34
  br label %._crit_edge589

._crit_edge589:                                   ; preds = %.lr.ph588.epil, %._crit_edge589.loopexit.unr-lcssa, %._crit_edge
  %94 = getelementptr inbounds i8, ptr %0, i64 8
  %95 = load i32, ptr %94, align 8, !tbaa !36
  %96 = and i32 %95, 8
  %.not = icmp eq i32 %96, 0
  br i1 %.not, label %98, label %97

97:                                               ; preds = %._crit_edge589
  tail call void @libmetis__Print2WayRefineStats(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %2, float noundef %69, i32 noundef -2)
  br label %98

98:                                               ; preds = %97, %._crit_edge589
  %99 = sext i32 %7 to i64
  %100 = tail call ptr @libmetis__iset(i64 noundef %99, i32 noundef -1, ptr noundef %32) #6
  %101 = icmp sgt i32 %3, 0
  br i1 %101, label %.preheader556.lr.ph, label %._crit_edge645

.preheader556.lr.ph:                              ; preds = %98
  %102 = getelementptr inbounds i8, ptr %1, i64 112
  %103 = getelementptr inbounds i8, ptr %1, i64 136
  %104 = sext i32 %9 to i64
  %smax684 = tail call i32 @llvm.smax.i32(i32 %49, i32 1)
  %105 = zext i32 %9 to i64
  %wide.trip.count685 = zext nneg i32 %smax684 to i64
  %wide.trip.count703 = zext nneg i32 %7 to i64
  %invariant.gep = getelementptr inbounds i32, ptr %27, i64 %105
  br label %.preheader556

.preheader556:                                    ; preds = %520, %.preheader556.lr.ph
  %.0523644 = phi i32 [ 0, %.preheader556.lr.ph ], [ %523, %520 ]
  br i1 %53, label %.lr.ph591, label %._crit_edge592

.lr.ph591:                                        ; preds = %.preheader556, %.lr.ph591
  %indvars.iv681 = phi i64 [ %indvars.iv.next682, %.lr.ph591 ], [ 0, %.preheader556 ]
  %106 = getelementptr inbounds ptr, ptr %52, i64 %indvars.iv681
  %107 = load ptr, ptr %106, align 8, !tbaa !23
  call void @libmetis__rpqReset(ptr noundef %107) #6
  %indvars.iv.next682 = add nuw nsw i64 %indvars.iv681, 1
  %exitcond686.not = icmp eq i64 %indvars.iv.next682, %wide.trip.count685
  br i1 %exitcond686.not, label %._crit_edge592, label %.lr.ph591, !llvm.loop !37

._crit_edge592:                                   ; preds = %.lr.ph591, %.preheader556
  %108 = load i32, ptr %102, align 8, !tbaa !38
  %109 = load ptr, ptr %65, align 8, !tbaa !28
  %110 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %109, ptr noundef %36, ptr noundef %38) #6
  %111 = call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %21) #6
  %112 = load i32, ptr %102, align 8, !tbaa !38
  %113 = icmp eq i32 %111, %112
  br i1 %113, label %120, label %114

114:                                              ; preds = %._crit_edge592
  %115 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef 281, ptr noundef nonnull @.str.1)
  %116 = call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %21) #6
  %117 = load i32, ptr %102, align 8, !tbaa !38
  %118 = icmp eq i32 %116, %117
  br i1 %118, label %120, label %119

119:                                              ; preds = %114
  call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 281, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #7
  unreachable

120:                                              ; preds = %114, %._crit_edge592
  %121 = call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #6
  %.not535 = icmp eq i32 %121, 0
  br i1 %.not535, label %122, label %126

122:                                              ; preds = %120
  %123 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef 282, ptr noundef nonnull @.str.1)
  %124 = call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #6
  %.not536 = icmp eq i32 %124, 0
  br i1 %.not536, label %125, label %126

125:                                              ; preds = %122
  call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 282, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #7
  unreachable

126:                                              ; preds = %122, %120
  %127 = load i32, ptr %103, align 8, !tbaa !39
  %128 = sdiv i32 %127, 5
  call void @libmetis__irandArrayPermute(i32 noundef %127, ptr noundef %34, i32 noundef %128, i32 noundef 1) #6
  %129 = icmp sgt i32 %127, 0
  br i1 %129, label %.lr.ph595.preheader, label %.preheader554

.lr.ph595.preheader:                              ; preds = %126
  %wide.trip.count690 = zext nneg i32 %127 to i64
  br label %.lr.ph595

.preheader554:                                    ; preds = %159, %126
  br i1 %55, label %.lr.ph613, label %.preheader

.lr.ph595:                                        ; preds = %.lr.ph595.preheader, %159
  %indvars.iv687 = phi i64 [ 0, %.lr.ph595.preheader ], [ %indvars.iv.next688, %159 ]
  %130 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv687
  %131 = load i32, ptr %130, align 4, !tbaa !26
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %31, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !26
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i32, ptr %25, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !26
  %138 = icmp sgt i32 %137, 0
  br i1 %138, label %151, label %139

139:                                              ; preds = %.lr.ph595
  %140 = getelementptr inbounds i32, ptr %23, i64 %135
  %141 = load i32, ptr %140, align 4, !tbaa !26
  %142 = icmp eq i32 %141, 0
  br i1 %142, label %151, label %143

143:                                              ; preds = %139
  %144 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef 289, ptr noundef nonnull @.str.1)
  %145 = load i32, ptr %136, align 4, !tbaa !26
  %146 = icmp sgt i32 %145, 0
  br i1 %146, label %151, label %147

147:                                              ; preds = %143
  %148 = load i32, ptr %140, align 4, !tbaa !26
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %151, label %150

150:                                              ; preds = %147
  call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.1, i32 noundef 289, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #7
  unreachable

151:                                              ; preds = %147, %143, %139, %.lr.ph595
  %152 = phi i32 [ %145, %147 ], [ %145, %143 ], [ %137, %139 ], [ %137, %.lr.ph595 ]
  %153 = getelementptr inbounds i32, ptr %29, i64 %135
  %154 = load i32, ptr %153, align 4, !tbaa !26
  %.not547 = icmp eq i32 %154, -1
  br i1 %.not547, label %155, label %159

155:                                              ; preds = %151
  %156 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef 290, ptr noundef nonnull @.str.1)
  %157 = load i32, ptr %153, align 4, !tbaa !26
  %.not548 = icmp eq i32 %157, -1
  br i1 %.not548, label %158, label %._crit_edge723

._crit_edge723:                                   ; preds = %155
  %.pre = load i32, ptr %136, align 4, !tbaa !26
  br label %159

158:                                              ; preds = %155
  call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.1, i32 noundef 290, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #7
  unreachable

159:                                              ; preds = %._crit_edge723, %151
  %160 = phi i32 [ %.pre, %._crit_edge723 ], [ %152, %151 ]
  %161 = getelementptr inbounds i32, ptr %23, i64 %135
  %162 = load i32, ptr %161, align 4, !tbaa !26
  %163 = sub nsw i32 %160, %162
  %164 = sitofp i32 %163 to float
  %165 = getelementptr inbounds i32, ptr %35, i64 %135
  %166 = load i32, ptr %165, align 4, !tbaa !26
  %167 = shl nsw i32 %166, 1
  %168 = getelementptr inbounds i32, ptr %21, i64 %135
  %169 = load i32, ptr %168, align 4, !tbaa !26
  %170 = add nsw i32 %167, %169
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds ptr, ptr %52, i64 %171
  %173 = load ptr, ptr %172, align 8, !tbaa !23
  %174 = call i32 @libmetis__rpqInsert(ptr noundef %173, i32 noundef %134, float noundef %164) #6
  %indvars.iv.next688 = add nuw nsw i64 %indvars.iv687, 1
  %exitcond691.not = icmp eq i64 %indvars.iv.next688, %wide.trip.count690
  br i1 %exitcond691.not, label %.preheader554, label %.lr.ph595, !llvm.loop !40

.lr.ph613:                                        ; preds = %.preheader554, %._crit_edge604
  %indvars.iv700 = phi i64 [ %indvars.iv.next701, %._crit_edge604 ], [ 0, %.preheader554 ]
  %.0507612 = phi float [ %.1508, %._crit_edge604 ], [ %110, %.preheader554 ]
  %.0510610 = phi i32 [ %.2512.lcssa, %._crit_edge604 ], [ %127, %.preheader554 ]
  %.0518607 = phi i32 [ %.1519, %._crit_edge604 ], [ -1, %.preheader554 ]
  %.0520606 = phi i32 [ %203, %._crit_edge604 ], [ %108, %.preheader554 ]
  %.0521605 = phi i32 [ %.1522, %._crit_edge604 ], [ %108, %.preheader554 ]
  %175 = load ptr, ptr %65, align 8, !tbaa !28
  call void @libmetis__SelectQueue(ptr noundef nonnull %1, ptr noundef %175, ptr noundef %36, ptr noundef %52, ptr noundef nonnull %5, ptr noundef nonnull %6)
  %176 = load i32, ptr %5, align 4, !tbaa !26
  %177 = add nsw i32 %176, 1
  %178 = srem i32 %177, 2
  %179 = icmp eq i32 %176, -1
  %180 = trunc nuw nsw i64 %indvars.iv700 to i32
  br i1 %179, label %.loopexit555, label %181

181:                                              ; preds = %.lr.ph613
  %182 = load i32, ptr %6, align 4, !tbaa !26
  %183 = shl nsw i32 %182, 1
  %184 = add nsw i32 %183, %176
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds ptr, ptr %52, i64 %185
  %187 = load ptr, ptr %186, align 8, !tbaa !23
  %188 = call i32 @libmetis__rpqGetTop(ptr noundef %187) #6
  %189 = icmp eq i32 %188, -1
  br i1 %189, label %.loopexit555, label %190

190:                                              ; preds = %181
  %191 = sext i32 %188 to i64
  %192 = getelementptr inbounds i32, ptr %29, i64 %191
  %193 = load i32, ptr %192, align 4, !tbaa !26
  %.not537 = icmp eq i32 %193, -1
  br i1 %.not537, label %194, label %198

194:                                              ; preds = %190
  %195 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 304, ptr noundef nonnull @.str.1)
  %196 = load i32, ptr %192, align 4, !tbaa !26
  %.not538 = icmp eq i32 %196, -1
  br i1 %.not538, label %197, label %198

197:                                              ; preds = %194
  call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 304, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #7
  unreachable

198:                                              ; preds = %194, %190
  %199 = getelementptr inbounds i32, ptr %25, i64 %191
  %200 = load i32, ptr %199, align 4, !tbaa !26
  %201 = getelementptr inbounds i32, ptr %23, i64 %191
  %202 = load i32, ptr %201, align 4, !tbaa !26
  %.neg = sub i32 %202, %200
  %203 = add i32 %.neg, %.0520606
  %204 = mul nsw i32 %188, %9
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %13, i64 %205
  %207 = mul nsw i32 %178, %9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i32, ptr %27, i64 %208
  %210 = call ptr @libmetis__iaxpy(i64 noundef %104, i32 noundef 1, ptr noundef %206, i64 noundef 1, ptr noundef %209, i64 noundef 1) #6
  %211 = load i32, ptr %5, align 4, !tbaa !26
  %212 = mul nsw i32 %211, %9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %27, i64 %213
  %215 = call ptr @libmetis__iaxpy(i64 noundef %104, i32 noundef -1, ptr noundef %206, i64 noundef 1, ptr noundef %214, i64 noundef 1) #6
  %216 = load ptr, ptr %65, align 8, !tbaa !28
  %217 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %216, ptr noundef %36, ptr noundef %37) #6
  %218 = icmp sge i32 %203, %.0521605
  %219 = fcmp ugt float %217, %48
  %or.cond = select i1 %218, i1 true, i1 %219
  br i1 %or.cond, label %220, label %228

220:                                              ; preds = %198
  %221 = icmp eq i32 %203, %.0521605
  br i1 %221, label %222, label %230

222:                                              ; preds = %220
  %223 = fcmp olt float %217, %.0507612
  br i1 %223, label %228, label %224

224:                                              ; preds = %222
  %225 = fcmp oeq float %217, %.0507612
  br i1 %225, label %226, label %230

226:                                              ; preds = %224
  %227 = call i32 @libmetis__BetterBalance2Way(i32 noundef %9, ptr noundef %38, ptr noundef %37) #6
  %.not539 = icmp eq i32 %227, 0
  br i1 %.not539, label %230, label %228

228:                                              ; preds = %198, %226, %222
  %229 = call ptr @libmetis__rcopy(i64 noundef %104, ptr noundef %37, ptr noundef %38) #6
  br label %240

230:                                              ; preds = %226, %224, %220
  %231 = sub nsw i32 %180, %.0518607
  %232 = icmp sgt i32 %231, %44
  br i1 %232, label %233, label %240

233:                                              ; preds = %230
  %234 = load i32, ptr %5, align 4, !tbaa !26
  %235 = mul nsw i32 %234, %9
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds i32, ptr %27, i64 %236
  %238 = call ptr @libmetis__iaxpy(i64 noundef %104, i32 noundef 1, ptr noundef %206, i64 noundef 1, ptr noundef %237, i64 noundef 1) #6
  %239 = call ptr @libmetis__iaxpy(i64 noundef %104, i32 noundef -1, ptr noundef %206, i64 noundef 1, ptr noundef %209, i64 noundef 1) #6
  br label %.loopexit555

240:                                              ; preds = %230, %228
  %.1522 = phi i32 [ %203, %228 ], [ %.0521605, %230 ]
  %.1519 = phi i32 [ %180, %228 ], [ %.0518607, %230 ]
  %.1508 = phi float [ %217, %228 ], [ %.0507612, %230 ]
  %241 = getelementptr inbounds i32, ptr %21, i64 %191
  store i32 %178, ptr %241, align 4, !tbaa !26
  %242 = getelementptr inbounds i32, ptr %32, i64 %191
  store i32 %180, ptr %242, align 4, !tbaa !26
  %243 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv700
  store i32 %188, ptr %243, align 4, !tbaa !26
  %244 = load i32, ptr %94, align 8, !tbaa !36
  %245 = and i32 %244, 32
  %.not540 = icmp eq i32 %245, 0
  br i1 %.not540, label %271, label %246

246:                                              ; preds = %240
  %247 = load i32, ptr %5, align 4, !tbaa !26
  %248 = load i32, ptr %6, align 4, !tbaa !26
  %249 = load i32, ptr %199, align 4, !tbaa !26
  %250 = load i32, ptr %201, align 4, !tbaa !26
  %251 = sub nsw i32 %249, %250
  %252 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, i32 noundef %188, i32 noundef %247, i32 noundef %248, i32 noundef %251, i32 noundef %203)
  br i1 %53, label %.lr.ph598, label %._crit_edge599

.lr.ph598:                                        ; preds = %246, %.lr.ph598
  %indvars.iv692 = phi i64 [ %indvars.iv.next693, %.lr.ph598 ], [ 0, %246 ]
  %253 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv692
  %254 = load i32, ptr %253, align 4, !tbaa !26
  %255 = sitofp i32 %254 to float
  %256 = getelementptr inbounds float, ptr %19, i64 %indvars.iv692
  %257 = load float, ptr %256, align 4, !tbaa !34
  %258 = fmul float %257, %255
  %259 = fpext float %258 to double
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv692
  %260 = load i32, ptr %gep, align 4, !tbaa !26
  %261 = sitofp i32 %260 to float
  %262 = fmul float %257, %261
  %263 = fpext float %262 to double
  %264 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %259, double noundef %263)
  %indvars.iv.next693 = add nuw nsw i64 %indvars.iv692, 1
  %exitcond696.not = icmp eq i64 %indvars.iv.next693, %105
  br i1 %exitcond696.not, label %._crit_edge599, label %.lr.ph598, !llvm.loop !41

._crit_edge599:                                   ; preds = %.lr.ph598, %246
  %265 = fpext float %.1508 to double
  %266 = load ptr, ptr %65, align 8, !tbaa !28
  %267 = call float @libmetis__ComputeLoadImbalance(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %266) #6
  %268 = fpext float %267 to double
  %269 = fpext float %217 to double
  %270 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %265, double noundef %268, double noundef %269)
  br label %271

271:                                              ; preds = %240, %._crit_edge599
  %272 = load i32, ptr %201, align 4, !tbaa !26
  %273 = load i32, ptr %199, align 4, !tbaa !26
  store i32 %273, ptr %201, align 4, !tbaa !26
  store i32 %272, ptr %199, align 4, !tbaa !26
  %274 = icmp eq i32 %272, 0
  br i1 %274, label %275, label %298

275:                                              ; preds = %271
  %276 = getelementptr inbounds i32, ptr %11, i64 %191
  %277 = load i32, ptr %276, align 4, !tbaa !26
  %278 = getelementptr i8, ptr %276, i64 4
  %279 = load i32, ptr %278, align 4, !tbaa !26
  %280 = icmp slt i32 %277, %279
  br i1 %280, label %281, label %298

281:                                              ; preds = %275
  %282 = load i32, ptr %192, align 4, !tbaa !26
  %.not541 = icmp eq i32 %282, -1
  br i1 %.not541, label %283, label %287

283:                                              ; preds = %281
  %284 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 346, ptr noundef nonnull @.str.1)
  %285 = load i32, ptr %192, align 4, !tbaa !26
  %.not542 = icmp eq i32 %285, -1
  br i1 %.not542, label %286, label %287

286:                                              ; preds = %283
  call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 346, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_Mc2WayCutRefine) #7
  unreachable

287:                                              ; preds = %283, %281
  %288 = phi i32 [ %285, %283 ], [ %282, %281 ]
  %289 = add nsw i32 %.0510610, -1
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i32, ptr %31, i64 %290
  %292 = load i32, ptr %291, align 4, !tbaa !26
  %293 = sext i32 %288 to i64
  %294 = getelementptr inbounds i32, ptr %31, i64 %293
  store i32 %292, ptr %294, align 4, !tbaa !26
  %295 = load i32, ptr %192, align 4, !tbaa !26
  %296 = sext i32 %292 to i64
  %297 = getelementptr inbounds i32, ptr %29, i64 %296
  store i32 %295, ptr %297, align 4, !tbaa !26
  store i32 -1, ptr %192, align 4, !tbaa !26
  br label %298

298:                                              ; preds = %287, %275, %271
  %.1511 = phi i32 [ %289, %287 ], [ %.0510610, %275 ], [ %.0510610, %271 ]
  %299 = getelementptr inbounds i32, ptr %11, i64 %191
  %300 = load i32, ptr %299, align 4, !tbaa !26
  %301 = getelementptr i8, ptr %299, i64 4
  %302 = load i32, ptr %301, align 4, !tbaa !26
  %303 = icmp slt i32 %300, %302
  br i1 %303, label %.lr.ph603.preheader, label %._crit_edge604

.lr.ph603.preheader:                              ; preds = %298
  %304 = sext i32 %300 to i64
  br label %.lr.ph603

.lr.ph603:                                        ; preds = %.lr.ph603.preheader, %387
  %indvars.iv697 = phi i64 [ %304, %.lr.ph603.preheader ], [ %indvars.iv.next698, %387 ]
  %.2512600 = phi i32 [ %.1511, %.lr.ph603.preheader ], [ %.3513, %387 ]
  %305 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv697
  %306 = load i32, ptr %305, align 4, !tbaa !26
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %21, i64 %307
  %309 = load i32, ptr %308, align 4, !tbaa !26
  %310 = icmp eq i32 %178, %309
  %311 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv697
  %312 = load i32, ptr %311, align 4, !tbaa !26
  %313 = sub nsw i32 0, %312
  %314 = select i1 %310, i32 %312, i32 %313
  %315 = getelementptr inbounds i32, ptr %23, i64 %307
  %316 = load i32, ptr %315, align 4, !tbaa !26
  %317 = add nsw i32 %316, %314
  store i32 %317, ptr %315, align 4, !tbaa !26
  %318 = getelementptr inbounds i32, ptr %25, i64 %307
  %319 = load i32, ptr %318, align 4, !tbaa !26
  %320 = sub nsw i32 %319, %314
  store i32 %320, ptr %318, align 4, !tbaa !26
  %321 = getelementptr inbounds i32, ptr %29, i64 %307
  %322 = load i32, ptr %321, align 4, !tbaa !26
  %.not543 = icmp eq i32 %322, -1
  br i1 %.not543, label %364, label %323

323:                                              ; preds = %.lr.ph603
  %324 = icmp eq i32 %319, %314
  br i1 %324, label %325, label %348

325:                                              ; preds = %323
  %326 = add nsw i32 %.2512600, -1
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %31, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !26
  %330 = sext i32 %322 to i64
  %331 = getelementptr inbounds i32, ptr %31, i64 %330
  store i32 %329, ptr %331, align 4, !tbaa !26
  %332 = load i32, ptr %321, align 4, !tbaa !26
  %333 = sext i32 %329 to i64
  %334 = getelementptr inbounds i32, ptr %29, i64 %333
  store i32 %332, ptr %334, align 4, !tbaa !26
  store i32 -1, ptr %321, align 4, !tbaa !26
  %335 = getelementptr inbounds i32, ptr %32, i64 %307
  %336 = load i32, ptr %335, align 4, !tbaa !26
  %337 = icmp eq i32 %336, -1
  br i1 %337, label %338, label %387

338:                                              ; preds = %325
  %339 = getelementptr inbounds i32, ptr %35, i64 %307
  %340 = load i32, ptr %339, align 4, !tbaa !26
  %341 = shl nsw i32 %340, 1
  %342 = load i32, ptr %308, align 4, !tbaa !26
  %343 = add nsw i32 %341, %342
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds ptr, ptr %52, i64 %344
  %346 = load ptr, ptr %345, align 8, !tbaa !23
  %347 = call i32 @libmetis__rpqDelete(ptr noundef %346, i32 noundef %306) #6
  br label %387

348:                                              ; preds = %323
  %349 = getelementptr inbounds i32, ptr %32, i64 %307
  %350 = load i32, ptr %349, align 4, !tbaa !26
  %351 = icmp eq i32 %350, -1
  br i1 %351, label %352, label %387

352:                                              ; preds = %348
  %353 = load i32, ptr %315, align 4, !tbaa !26
  %354 = sub nsw i32 %320, %353
  %355 = sitofp i32 %354 to float
  %356 = getelementptr inbounds i32, ptr %35, i64 %307
  %357 = load i32, ptr %356, align 4, !tbaa !26
  %358 = shl nsw i32 %357, 1
  %359 = load i32, ptr %308, align 4, !tbaa !26
  %360 = add nsw i32 %358, %359
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds ptr, ptr %52, i64 %361
  %363 = load ptr, ptr %362, align 8, !tbaa !23
  call void @libmetis__rpqUpdate(ptr noundef %363, i32 noundef %306, float noundef %355) #6
  br label %387

364:                                              ; preds = %.lr.ph603
  %365 = icmp sgt i32 %320, 0
  br i1 %365, label %366, label %387

366:                                              ; preds = %364
  %367 = sext i32 %.2512600 to i64
  %368 = getelementptr inbounds i32, ptr %31, i64 %367
  store i32 %306, ptr %368, align 4, !tbaa !26
  %369 = add nsw i32 %.2512600, 1
  store i32 %.2512600, ptr %321, align 4, !tbaa !26
  %370 = getelementptr inbounds i32, ptr %32, i64 %307
  %371 = load i32, ptr %370, align 4, !tbaa !26
  %372 = icmp eq i32 %371, -1
  br i1 %372, label %373, label %387

373:                                              ; preds = %366
  %374 = load i32, ptr %318, align 4, !tbaa !26
  %375 = load i32, ptr %315, align 4, !tbaa !26
  %376 = sub nsw i32 %374, %375
  %377 = sitofp i32 %376 to float
  %378 = getelementptr inbounds i32, ptr %35, i64 %307
  %379 = load i32, ptr %378, align 4, !tbaa !26
  %380 = shl nsw i32 %379, 1
  %381 = load i32, ptr %308, align 4, !tbaa !26
  %382 = add nsw i32 %380, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds ptr, ptr %52, i64 %383
  %385 = load ptr, ptr %384, align 8, !tbaa !23
  %386 = call i32 @libmetis__rpqInsert(ptr noundef %385, i32 noundef %306, float noundef %377) #6
  br label %387

387:                                              ; preds = %348, %352, %325, %338, %366, %373, %364
  %.3513 = phi i32 [ %326, %338 ], [ %326, %325 ], [ %.2512600, %352 ], [ %.2512600, %348 ], [ %369, %373 ], [ %369, %366 ], [ %.2512600, %364 ]
  %indvars.iv.next698 = add nsw i64 %indvars.iv697, 1
  %388 = load i32, ptr %301, align 4, !tbaa !26
  %389 = sext i32 %388 to i64
  %390 = icmp slt i64 %indvars.iv.next698, %389
  br i1 %390, label %.lr.ph603, label %._crit_edge604, !llvm.loop !42

._crit_edge604:                                   ; preds = %387, %298
  %.2512.lcssa = phi i32 [ %.1511, %298 ], [ %.3513, %387 ]
  %indvars.iv.next701 = add nuw nsw i64 %indvars.iv700, 1
  %exitcond704.not = icmp eq i64 %indvars.iv.next701, %wide.trip.count703
  br i1 %exitcond704.not, label %.loopexit555, label %.lr.ph613, !llvm.loop !43

.loopexit555:                                     ; preds = %._crit_edge604, %181, %.lr.ph613, %233
  %.0521577 = phi i32 [ %.0521605, %233 ], [ %.1522, %._crit_edge604 ], [ %.0521605, %181 ], [ %.0521605, %.lr.ph613 ]
  %.0518573 = phi i32 [ %.0518607, %233 ], [ %.1519, %._crit_edge604 ], [ %.0518607, %181 ], [ %.0518607, %.lr.ph613 ]
  %.0516569 = phi i32 [ %180, %233 ], [ %7, %._crit_edge604 ], [ %180, %181 ], [ %180, %.lr.ph613 ]
  %.0510565 = phi i32 [ %.0510610, %233 ], [ %.2512.lcssa, %._crit_edge604 ], [ %.0510610, %181 ], [ %.0510610, %.lr.ph613 ]
  %.0507561 = phi float [ %.0507612, %233 ], [ %.1508, %._crit_edge604 ], [ %.0507612, %181 ], [ %.0507612, %.lr.ph613 ]
  %.not651 = icmp eq i32 %.0516569, 0
  br i1 %.not651, label %.preheader, label %.lr.ph633.preheader

.lr.ph633.preheader:                              ; preds = %.loopexit555
  %wide.trip.count708 = zext i32 %.0516569 to i64
  %xtraiter794 = and i64 %wide.trip.count708, 3
  %391 = icmp ult i32 %.0516569, 4
  br i1 %391, label %.preheader.loopexit.unr-lcssa, label %.lr.ph633.preheader.new

.lr.ph633.preheader.new:                          ; preds = %.lr.ph633.preheader
  %unroll_iter796 = and i64 %wide.trip.count708, 4294967292
  br label %.lr.ph633

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph633, %.lr.ph633.preheader
  %indvars.iv705.unr = phi i64 [ 0, %.lr.ph633.preheader ], [ %indvars.iv.next706.3, %.lr.ph633 ]
  %lcmp.mod795.not = icmp eq i64 %xtraiter794, 0
  br i1 %lcmp.mod795.not, label %.preheader, label %.lr.ph633.epil

.lr.ph633.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph633.epil
  %indvars.iv705.epil = phi i64 [ %indvars.iv.next706.epil, %.lr.ph633.epil ], [ %indvars.iv705.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph633.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %392 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv705.epil
  %393 = load i32, ptr %392, align 4, !tbaa !26
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %32, i64 %394
  store i32 -1, ptr %395, align 4, !tbaa !26
  %indvars.iv.next706.epil = add nuw nsw i64 %indvars.iv705.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter794
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph633.epil, !llvm.loop !44

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph633.epil, %.preheader554, %.loopexit555
  %.0507561735 = phi float [ %.0507561, %.loopexit555 ], [ %110, %.preheader554 ], [ %.0507561, %.lr.ph633.epil ], [ %.0507561, %.preheader.loopexit.unr-lcssa ]
  %.0510565734 = phi i32 [ %.0510565, %.loopexit555 ], [ %127, %.preheader554 ], [ %.0510565, %.lr.ph633.epil ], [ %.0510565, %.preheader.loopexit.unr-lcssa ]
  %.0516569733 = phi i32 [ 0, %.loopexit555 ], [ 0, %.preheader554 ], [ %.0516569, %.lr.ph633.epil ], [ %.0516569, %.preheader.loopexit.unr-lcssa ]
  %.0518573732 = phi i32 [ %.0518573, %.loopexit555 ], [ -1, %.preheader554 ], [ %.0518573, %.lr.ph633.epil ], [ %.0518573, %.preheader.loopexit.unr-lcssa ]
  %.0521577731 = phi i32 [ %.0521577, %.loopexit555 ], [ %108, %.preheader554 ], [ %.0521577, %.lr.ph633.epil ], [ %.0521577, %.preheader.loopexit.unr-lcssa ]
  %.1517638 = add nsw i32 %.0516569733, -1
  %396 = icmp sgt i32 %.1517638, %.0518573732
  br i1 %396, label %.lr.ph641.preheader, label %._crit_edge642

.lr.ph641.preheader:                              ; preds = %.preheader
  %397 = sext i32 %.1517638 to i64
  %398 = sext i32 %.0518573732 to i64
  br label %.lr.ph641

.lr.ph633:                                        ; preds = %.lr.ph633, %.lr.ph633.preheader.new
  %indvars.iv705 = phi i64 [ 0, %.lr.ph633.preheader.new ], [ %indvars.iv.next706.3, %.lr.ph633 ]
  %niter797 = phi i64 [ 0, %.lr.ph633.preheader.new ], [ %niter797.next.3, %.lr.ph633 ]
  %399 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv705
  %400 = load i32, ptr %399, align 4, !tbaa !26
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds i32, ptr %32, i64 %401
  store i32 -1, ptr %402, align 4, !tbaa !26
  %indvars.iv.next706 = or disjoint i64 %indvars.iv705, 1
  %403 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv.next706
  %404 = load i32, ptr %403, align 4, !tbaa !26
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %32, i64 %405
  store i32 -1, ptr %406, align 4, !tbaa !26
  %indvars.iv.next706.1 = or disjoint i64 %indvars.iv705, 2
  %407 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv.next706.1
  %408 = load i32, ptr %407, align 4, !tbaa !26
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %32, i64 %409
  store i32 -1, ptr %410, align 4, !tbaa !26
  %indvars.iv.next706.2 = or disjoint i64 %indvars.iv705, 3
  %411 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv.next706.2
  %412 = load i32, ptr %411, align 4, !tbaa !26
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i32, ptr %32, i64 %413
  store i32 -1, ptr %414, align 4, !tbaa !26
  %indvars.iv.next706.3 = add nuw nsw i64 %indvars.iv705, 4
  %niter797.next.3 = add i64 %niter797, 4
  %niter797.ncmp.3 = icmp eq i64 %niter797.next.3, %unroll_iter796
  br i1 %niter797.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph633, !llvm.loop !46

.loopexit:                                        ; preds = %513, %.thread
  %.6.lcssa = phi i32 [ %.5515, %.thread ], [ %.8, %513 ]
  %indvars.iv.next714 = add nsw i64 %indvars.iv713, -1
  %415 = icmp sgt i64 %indvars.iv.next714, %398
  br i1 %415, label %.lr.ph641, label %._crit_edge642, !llvm.loop !47

.lr.ph641:                                        ; preds = %.lr.ph641.preheader, %.loopexit
  %indvars.iv713 = phi i64 [ %397, %.lr.ph641.preheader ], [ %indvars.iv.next714, %.loopexit ]
  %.4514639 = phi i32 [ %.0510565734, %.lr.ph641.preheader ], [ %.6.lcssa, %.loopexit ]
  %416 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv713
  %417 = load i32, ptr %416, align 4, !tbaa !26
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i32, ptr %21, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !26
  %421 = add nsw i32 %420, 1
  %422 = srem i32 %421, 2
  store i32 %422, ptr %419, align 4, !tbaa !26
  %423 = getelementptr inbounds i32, ptr %23, i64 %418
  %424 = load i32, ptr %423, align 4, !tbaa !26
  %425 = getelementptr inbounds i32, ptr %25, i64 %418
  %426 = load i32, ptr %425, align 4, !tbaa !26
  store i32 %426, ptr %423, align 4, !tbaa !26
  store i32 %424, ptr %425, align 4, !tbaa !26
  %427 = icmp eq i32 %424, 0
  br i1 %427, label %428, label %447

428:                                              ; preds = %.lr.ph641
  %429 = getelementptr inbounds i32, ptr %29, i64 %418
  %430 = load i32, ptr %429, align 4, !tbaa !26
  %.not545 = icmp eq i32 %430, -1
  br i1 %.not545, label %.thread, label %431

431:                                              ; preds = %428
  %432 = getelementptr inbounds i32, ptr %11, i64 %418
  %433 = load i32, ptr %432, align 4, !tbaa !26
  %434 = getelementptr i8, ptr %432, i64 4
  %435 = load i32, ptr %434, align 4, !tbaa !26
  %436 = icmp slt i32 %433, %435
  br i1 %436, label %437, label %.thread

437:                                              ; preds = %431
  %438 = add nsw i32 %.4514639, -1
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds i32, ptr %31, i64 %439
  %441 = load i32, ptr %440, align 4, !tbaa !26
  %442 = sext i32 %430 to i64
  %443 = getelementptr inbounds i32, ptr %31, i64 %442
  store i32 %441, ptr %443, align 4, !tbaa !26
  %444 = load i32, ptr %429, align 4, !tbaa !26
  %445 = sext i32 %441 to i64
  %446 = getelementptr inbounds i32, ptr %29, i64 %445
  store i32 %444, ptr %446, align 4, !tbaa !26
  store i32 -1, ptr %429, align 4, !tbaa !26
  br label %.thread

447:                                              ; preds = %.lr.ph641
  %448 = icmp sgt i32 %424, 0
  br i1 %448, label %449, label %.thread

449:                                              ; preds = %447
  %450 = getelementptr inbounds i32, ptr %29, i64 %418
  %451 = load i32, ptr %450, align 4, !tbaa !26
  %452 = icmp eq i32 %451, -1
  br i1 %452, label %453, label %.thread

453:                                              ; preds = %449
  %454 = sext i32 %.4514639 to i64
  %455 = getelementptr inbounds i32, ptr %31, i64 %454
  store i32 %417, ptr %455, align 4, !tbaa !26
  %456 = add nsw i32 %.4514639, 1
  store i32 %.4514639, ptr %450, align 4, !tbaa !26
  br label %.thread

.thread:                                          ; preds = %428, %431, %447, %449, %453, %437
  %.5515 = phi i32 [ %438, %437 ], [ %456, %453 ], [ %.4514639, %449 ], [ %.4514639, %447 ], [ %.4514639, %431 ], [ %.4514639, %428 ]
  %457 = mul nsw i32 %417, %9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds i32, ptr %13, i64 %458
  %460 = mul nsw i32 %422, %9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i32, ptr %27, i64 %461
  %463 = call ptr @libmetis__iaxpy(i64 noundef %104, i32 noundef 1, ptr noundef %459, i64 noundef 1, ptr noundef %462, i64 noundef 1) #6
  %464 = and i32 %422, 1
  %465 = xor i32 %464, 1
  %466 = mul nuw nsw i32 %465, %9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %27, i64 %467
  %469 = call ptr @libmetis__iaxpy(i64 noundef %104, i32 noundef -1, ptr noundef %459, i64 noundef 1, ptr noundef %468, i64 noundef 1) #6
  %470 = getelementptr inbounds i32, ptr %11, i64 %418
  %471 = load i32, ptr %470, align 4, !tbaa !26
  %472 = getelementptr i8, ptr %470, i64 4
  %473 = load i32, ptr %472, align 4, !tbaa !26
  %474 = icmp slt i32 %471, %473
  br i1 %474, label %.lr.ph636.preheader, label %.loopexit

.lr.ph636.preheader:                              ; preds = %.thread
  %475 = sext i32 %471 to i64
  br label %.lr.ph636

.lr.ph636:                                        ; preds = %.lr.ph636.preheader, %513
  %indvars.iv710 = phi i64 [ %475, %.lr.ph636.preheader ], [ %indvars.iv.next711, %513 ]
  %.6634 = phi i32 [ %.5515, %.lr.ph636.preheader ], [ %.8, %513 ]
  %476 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv710
  %477 = load i32, ptr %476, align 4, !tbaa !26
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %21, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !26
  %481 = icmp eq i32 %422, %480
  %482 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv710
  %483 = load i32, ptr %482, align 4, !tbaa !26
  %484 = sub nsw i32 0, %483
  %485 = select i1 %481, i32 %483, i32 %484
  %486 = getelementptr inbounds i32, ptr %23, i64 %478
  %487 = load i32, ptr %486, align 4, !tbaa !26
  %488 = add nsw i32 %487, %485
  store i32 %488, ptr %486, align 4, !tbaa !26
  %489 = getelementptr inbounds i32, ptr %25, i64 %478
  %490 = load i32, ptr %489, align 4, !tbaa !26
  %491 = sub nsw i32 %490, %485
  store i32 %491, ptr %489, align 4, !tbaa !26
  %492 = getelementptr inbounds i32, ptr %29, i64 %478
  %493 = load i32, ptr %492, align 4, !tbaa !26
  %.not546 = icmp ne i32 %493, -1
  %494 = icmp eq i32 %490, %485
  %or.cond549 = select i1 %.not546, i1 %494, i1 false
  br i1 %or.cond549, label %.thread551, label %504

.thread551:                                       ; preds = %.lr.ph636
  %495 = add nsw i32 %.6634, -1
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i32, ptr %31, i64 %496
  %498 = load i32, ptr %497, align 4, !tbaa !26
  %499 = sext i32 %493 to i64
  %500 = getelementptr inbounds i32, ptr %31, i64 %499
  store i32 %498, ptr %500, align 4, !tbaa !26
  %501 = load i32, ptr %492, align 4, !tbaa !26
  %502 = sext i32 %498 to i64
  %503 = getelementptr inbounds i32, ptr %29, i64 %502
  store i32 %501, ptr %503, align 4, !tbaa !26
  store i32 -1, ptr %492, align 4, !tbaa !26
  %.pre724 = load i32, ptr %489, align 4, !tbaa !26
  br label %506

504:                                              ; preds = %.lr.ph636
  %505 = icmp eq i32 %493, -1
  br i1 %505, label %506, label %513

506:                                              ; preds = %.thread551, %504
  %507 = phi i32 [ %.pre724, %.thread551 ], [ %491, %504 ]
  %.7553 = phi i32 [ %495, %.thread551 ], [ %.6634, %504 ]
  %508 = icmp sgt i32 %507, 0
  br i1 %508, label %509, label %513

509:                                              ; preds = %506
  %510 = sext i32 %.7553 to i64
  %511 = getelementptr inbounds i32, ptr %31, i64 %510
  store i32 %477, ptr %511, align 4, !tbaa !26
  %512 = add nsw i32 %.7553, 1
  store i32 %.7553, ptr %492, align 4, !tbaa !26
  br label %513

513:                                              ; preds = %504, %506, %509
  %.8 = phi i32 [ %512, %509 ], [ %.7553, %506 ], [ %.6634, %504 ]
  %indvars.iv.next711 = add nsw i64 %indvars.iv710, 1
  %514 = load i32, ptr %472, align 4, !tbaa !26
  %515 = sext i32 %514 to i64
  %516 = icmp slt i64 %indvars.iv.next711, %515
  br i1 %516, label %.lr.ph636, label %.loopexit, !llvm.loop !48

._crit_edge642:                                   ; preds = %.loopexit, %.preheader
  %.4514.lcssa = phi i32 [ %.0510565734, %.preheader ], [ %.6.lcssa, %.loopexit ]
  store i32 %.0521577731, ptr %102, align 8, !tbaa !38
  store i32 %.4514.lcssa, ptr %103, align 8, !tbaa !39
  %517 = load i32, ptr %94, align 8, !tbaa !36
  %518 = and i32 %517, 8
  %.not544 = icmp eq i32 %518, 0
  br i1 %.not544, label %520, label %519

519:                                              ; preds = %._crit_edge642
  call void @libmetis__Print2WayRefineStats(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %2, float noundef %.0507561735, i32 noundef %.0518573732)
  br label %520

520:                                              ; preds = %519, %._crit_edge642
  %521 = icmp slt i32 %.0518573732, 1
  %522 = icmp eq i32 %.0521577731, %108
  %or.cond550 = select i1 %521, i1 true, i1 %522
  %523 = add nuw nsw i32 %.0523644, 1
  %exitcond716.not = icmp eq i32 %523, %3
  %or.cond755 = select i1 %or.cond550, i1 true, i1 %exitcond716.not
  br i1 %or.cond755, label %._crit_edge645, label %.preheader556, !llvm.loop !49

._crit_edge645:                                   ; preds = %520, %98
  br i1 %53, label %.lr.ph649.preheader, label %._crit_edge650

.lr.ph649.preheader:                              ; preds = %._crit_edge645
  %smax720 = call i32 @llvm.smax.i32(i32 %49, i32 1)
  %wide.trip.count721 = zext nneg i32 %smax720 to i64
  br label %.lr.ph649

.lr.ph649:                                        ; preds = %.lr.ph649.preheader, %.lr.ph649
  %indvars.iv717 = phi i64 [ 0, %.lr.ph649.preheader ], [ %indvars.iv.next718, %.lr.ph649 ]
  %524 = getelementptr inbounds ptr, ptr %52, i64 %indvars.iv717
  %525 = load ptr, ptr %524, align 8, !tbaa !23
  call void @libmetis__rpqDestroy(ptr noundef %525) #6
  %indvars.iv.next718 = add nuw nsw i64 %indvars.iv717, 1
  %exitcond722.not = icmp eq i64 %indvars.iv.next718, %wide.trip.count721
  br i1 %exitcond722.not, label %._crit_edge650, label %.lr.ph649, !llvm.loop !50

._crit_edge650:                                   ; preds = %.lr.ph649, %._crit_edge645
  call void @libmetis__wspacepop(ptr noundef %0) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #2

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

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #2

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

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

declare void @libmetis__rpqReset(ptr noundef) local_unnamed_addr #2

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

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

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

declare i32 @libmetis__CheckBnd(ptr noundef) local_unnamed_addr #2

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

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

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #2

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

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

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #2

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #2

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

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

declare ptr @libmetis__wspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

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

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

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

declare ptr @libmetis__rcopy(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn nounwind }

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

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


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