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

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

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

@.str.4 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [139 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize = external hidden unnamed_addr constant [83 x i8], align 1

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

121:                                              ; preds = %5
  %122 = load i32, ptr %19, align 4, !tbaa !9
  %123 = sext i32 %122 to i64
  %124 = load ptr, ptr %6, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.ctrl_t, ptr %124, i32 0, i32 23
  %126 = load ptr, ptr %125, align 8, !tbaa !28
  %127 = load ptr, ptr %52, align 8, !tbaa !5
  %128 = call ptr @libmetis__rcopy(i64 noundef %123, ptr noundef %126, ptr noundef %127)
  br label %172

129:                                              ; preds = %5
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %130

130:                                              ; preds = %168, %129
  %131 = load i32, ptr %11, align 4, !tbaa !9
  %132 = load i32, ptr %19, align 4, !tbaa !9
  %133 = icmp slt i32 %131, %132
  br i1 %133, label %134, label %171

134:                                              ; preds = %130
  %135 = load ptr, ptr %52, align 8, !tbaa !5
  %136 = load i32, ptr %11, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds float, ptr %135, i64 %137
  %139 = load float, ptr %138, align 4, !tbaa !11
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.ctrl_t, ptr %140, i32 0, i32 23
  %142 = load ptr, ptr %141, align 8, !tbaa !28
  %143 = load i32, ptr %11, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds float, ptr %142, i64 %144
  %146 = load float, ptr %145, align 4, !tbaa !11
  %147 = fcmp ogt float %139, %146
  br i1 %147, label %148, label %154

148:                                              ; preds = %134
  %149 = load ptr, ptr %52, align 8, !tbaa !5
  %150 = load i32, ptr %11, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds float, ptr %149, i64 %151
  %153 = load float, ptr %152, align 4, !tbaa !11
  br label %162

154:                                              ; preds = %134
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.ctrl_t, ptr %155, i32 0, i32 23
  %157 = load ptr, ptr %156, align 8, !tbaa !28
  %158 = load i32, ptr %11, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds float, ptr %157, i64 %159
  %161 = load float, ptr %160, align 4, !tbaa !11
  br label %162

162:                                              ; preds = %154, %148
  %163 = phi float [ %153, %148 ], [ %161, %154 ]
  %164 = load ptr, ptr %52, align 8, !tbaa !5
  %165 = load i32, ptr %11, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds float, ptr %164, i64 %166
  store float %163, ptr %167, align 4, !tbaa !11
  br label %168

168:                                              ; preds = %162
  %169 = load i32, ptr %11, align 4, !tbaa !9
  %170 = add nsw i32 %169, 1
  store i32 %170, ptr %11, align 4, !tbaa !9
  br label %130, !llvm.loop !29

171:                                              ; preds = %130
  br label %172

172:                                              ; preds = %171, %121
  %173 = load ptr, ptr %6, align 8, !tbaa !5
  %174 = load i32, ptr %20, align 4, !tbaa !9
  %175 = load i32, ptr %19, align 4, !tbaa !9
  %176 = mul nsw i32 %174, %175
  %177 = call ptr @libmetis__iwspacemalloc(ptr noundef %173, i32 noundef %176)
  store ptr %177, ptr %35, align 8, !tbaa !5
  %178 = load ptr, ptr %6, align 8, !tbaa !5
  %179 = load i32, ptr %20, align 4, !tbaa !9
  %180 = load i32, ptr %19, align 4, !tbaa !9
  %181 = mul nsw i32 %179, %180
  %182 = call ptr @libmetis__iwspacemalloc(ptr noundef %178, i32 noundef %181)
  store ptr %182, ptr %36, align 8, !tbaa !5
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %263, %172
  %184 = load i32, ptr %11, align 4, !tbaa !9
  %185 = load i32, ptr %20, align 4, !tbaa !9
  %186 = icmp slt i32 %184, %185
  br i1 %186, label %187, label %266

187:                                              ; preds = %183
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %188

188:                                              ; preds = %259, %187
  %189 = load i32, ptr %14, align 4, !tbaa !9
  %190 = load i32, ptr %19, align 4, !tbaa !9
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %192, label %262

192:                                              ; preds = %188
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.ctrl_t, ptr %193, i32 0, i32 24
  %195 = load ptr, ptr %194, align 8, !tbaa !31
  %196 = load i32, ptr %11, align 4, !tbaa !9
  %197 = load i32, ptr %19, align 4, !tbaa !9
  %198 = mul nsw i32 %196, %197
  %199 = load i32, ptr %14, align 4, !tbaa !9
  %200 = add nsw i32 %198, %199
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds float, ptr %195, i64 %201
  %203 = load float, ptr %202, align 4, !tbaa !11
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.graph_t, ptr %204, i32 0, i32 8
  %206 = load ptr, ptr %205, align 8, !tbaa !32
  %207 = load i32, ptr %14, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i32, ptr %206, i64 %208
  %210 = load i32, ptr %209, align 4, !tbaa !9
  %211 = sitofp i32 %210 to float
  %212 = fmul float %203, %211
  %213 = load ptr, ptr %52, align 8, !tbaa !5
  %214 = load i32, ptr %14, align 4, !tbaa !9
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds float, ptr %213, i64 %215
  %217 = load float, ptr %216, align 4, !tbaa !11
  %218 = fmul float %212, %217
  %219 = fptosi float %218 to i32
  %220 = load ptr, ptr %36, align 8, !tbaa !5
  %221 = load i32, ptr %11, align 4, !tbaa !9
  %222 = load i32, ptr %19, align 4, !tbaa !9
  %223 = mul nsw i32 %221, %222
  %224 = load i32, ptr %14, align 4, !tbaa !9
  %225 = add nsw i32 %223, %224
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i32, ptr %220, i64 %226
  store i32 %219, ptr %227, align 4, !tbaa !9
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.ctrl_t, ptr %228, i32 0, i32 24
  %230 = load ptr, ptr %229, align 8, !tbaa !31
  %231 = load i32, ptr %11, align 4, !tbaa !9
  %232 = load i32, ptr %19, align 4, !tbaa !9
  %233 = mul nsw i32 %231, %232
  %234 = load i32, ptr %14, align 4, !tbaa !9
  %235 = add nsw i32 %233, %234
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds float, ptr %230, i64 %236
  %238 = load float, ptr %237, align 4, !tbaa !11
  %239 = load ptr, ptr %7, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.graph_t, ptr %239, i32 0, i32 8
  %241 = load ptr, ptr %240, align 8, !tbaa !32
  %242 = load i32, ptr %14, align 4, !tbaa !9
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds i32, ptr %241, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = sitofp i32 %245 to float
  %247 = fmul float %238, %246
  %248 = fpext float %247 to double
  %249 = fmul double %248, 2.000000e-01
  %250 = fptosi double %249 to i32
  %251 = load ptr, ptr %35, align 8, !tbaa !5
  %252 = load i32, ptr %11, align 4, !tbaa !9
  %253 = load i32, ptr %19, align 4, !tbaa !9
  %254 = mul nsw i32 %252, %253
  %255 = load i32, ptr %14, align 4, !tbaa !9
  %256 = add nsw i32 %254, %255
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %251, i64 %257
  store i32 %250, ptr %258, align 4, !tbaa !9
  br label %259

259:                                              ; preds = %192
  %260 = load i32, ptr %14, align 4, !tbaa !9
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %14, align 4, !tbaa !9
  br label %188, !llvm.loop !33

262:                                              ; preds = %188
  br label %263

263:                                              ; preds = %262
  %264 = load i32, ptr %11, align 4, !tbaa !9
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %11, align 4, !tbaa !9
  br label %183, !llvm.loop !34

266:                                              ; preds = %183
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = load i32, ptr %18, align 4, !tbaa !9
  %269 = call ptr @libmetis__iwspacemalloc(ptr noundef %267, i32 noundef %268)
  store ptr %269, ptr %32, align 8, !tbaa !5
  %270 = load i32, ptr %20, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = load i32, ptr %20, align 4, !tbaa !9
  %274 = call ptr @libmetis__iwspacemalloc(ptr noundef %272, i32 noundef %273)
  %275 = call ptr @libmetis__iset(i64 noundef %271, i32 noundef 2, ptr noundef %274)
  store ptr %275, ptr %43, align 8, !tbaa !5
  %276 = load ptr, ptr %6, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.ctrl_t, ptr %276, i32 0, i32 9
  %278 = load i32, ptr %277, align 4, !tbaa !35
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %298

280:                                              ; preds = %266
  %281 = load ptr, ptr %6, align 8, !tbaa !5
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libmetis__ComputeSubDomainGraph(ptr noundef %281, ptr noundef %282)
  %283 = load ptr, ptr %6, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.ctrl_t, ptr %283, i32 0, i32 46
  %285 = load ptr, ptr %284, align 8, !tbaa !36
  store ptr %285, ptr %44, align 8, !tbaa !5
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.ctrl_t, ptr %286, i32 0, i32 47
  %288 = load ptr, ptr %287, align 8, !tbaa !37
  store ptr %288, ptr %46, align 8, !tbaa !5
  %289 = load ptr, ptr %6, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.ctrl_t, ptr %289, i32 0, i32 48
  %291 = load ptr, ptr %290, align 8, !tbaa !38
  store ptr %291, ptr %47, align 8, !tbaa !5
  %292 = load i32, ptr %20, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.ctrl_t, ptr %294, i32 0, i32 49
  %296 = load ptr, ptr %295, align 8, !tbaa !39
  %297 = call ptr @libmetis__iset(i64 noundef %293, i32 noundef 0, ptr noundef %296)
  store ptr %297, ptr %45, align 8, !tbaa !5
  br label %298

298:                                              ; preds = %280, %266
  %299 = load i32, ptr %18, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = load ptr, ptr %6, align 8, !tbaa !5
  %302 = load i32, ptr %18, align 4, !tbaa !9
  %303 = call ptr @libmetis__iwspacemalloc(ptr noundef %301, i32 noundef %302)
  %304 = call ptr @libmetis__iset(i64 noundef %300, i32 noundef 3, ptr noundef %303)
  store ptr %304, ptr %39, align 8, !tbaa !5
  %305 = load i32, ptr %18, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = load i32, ptr %18, align 4, !tbaa !9
  %309 = call ptr @libmetis__iwspacemalloc(ptr noundef %307, i32 noundef %308)
  %310 = call ptr @libmetis__iset(i64 noundef %306, i32 noundef -1, ptr noundef %309)
  store ptr %310, ptr %40, align 8, !tbaa !5
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = load i32, ptr %18, align 4, !tbaa !9
  %313 = call ptr @libmetis__iwspacemalloc(ptr noundef %311, i32 noundef %312)
  store ptr %313, ptr %41, align 8, !tbaa !5
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.ctrl_t, ptr %314, i32 0, i32 10
  %316 = load i32, ptr %315, align 8, !tbaa !40
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %318, label %334

318:                                              ; preds = %298
  %319 = load i32, ptr %18, align 4, !tbaa !9
  %320 = sext i32 %319 to i64
  %321 = load ptr, ptr %6, align 8, !tbaa !5
  %322 = load i32, ptr %18, align 4, !tbaa !9
  %323 = call ptr @libmetis__iwspacemalloc(ptr noundef %321, i32 noundef %322)
  %324 = call ptr @libmetis__iset(i64 noundef %320, i32 noundef 0, ptr noundef %323)
  store ptr %324, ptr %48, align 8, !tbaa !5
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = load i32, ptr %18, align 4, !tbaa !9
  %327 = call ptr @libmetis__iwspacemalloc(ptr noundef %325, i32 noundef %326)
  store ptr %327, ptr %49, align 8, !tbaa !5
  %328 = load i32, ptr %18, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = load i32, ptr %18, align 4, !tbaa !9
  %332 = call ptr @libmetis__iwspacemalloc(ptr noundef %330, i32 noundef %331)
  %333 = call ptr @libmetis__iset(i64 noundef %329, i32 noundef 0, ptr noundef %332)
  store ptr %333, ptr %50, align 8, !tbaa !5
  br label %334

334:                                              ; preds = %318, %298
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = load i32, ptr %18, align 4, !tbaa !9
  %337 = call ptr @libmetis__iwspacemalloc(ptr noundef %335, i32 noundef %336)
  store ptr %337, ptr %60, align 8, !tbaa !5
  %338 = load i32, ptr %18, align 4, !tbaa !9
  %339 = sext i32 %338 to i64
  %340 = load ptr, ptr %6, align 8, !tbaa !5
  %341 = load i32, ptr %18, align 4, !tbaa !9
  %342 = call ptr @libmetis__iwspacemalloc(ptr noundef %340, i32 noundef %341)
  %343 = call ptr @libmetis__iset(i64 noundef %339, i32 noundef 0, ptr noundef %342)
  store ptr %343, ptr %58, align 8, !tbaa !5
  %344 = load i32, ptr %20, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = load ptr, ptr %6, align 8, !tbaa !5
  %347 = load i32, ptr %20, align 4, !tbaa !9
  %348 = call ptr @libmetis__iwspacemalloc(ptr noundef %346, i32 noundef %347)
  %349 = call ptr @libmetis__iset(i64 noundef %345, i32 noundef -1, ptr noundef %348)
  store ptr %349, ptr %59, align 8, !tbaa !5
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.ctrl_t, ptr %350, i32 0, i32 2
  %352 = load i32, ptr %351, align 8, !tbaa !41
  %353 = and i32 %352, 8
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %355, label %415

355:                                              ; preds = %334
  %356 = load i32, ptr %10, align 4, !tbaa !9
  %357 = icmp eq i32 %356, 1
  %358 = zext i1 %357 to i64
  %359 = select i1 %357, ptr @.str.34, ptr @.str.35
  %360 = load i32, ptr %20, align 4, !tbaa !9
  %361 = load i32, ptr %19, align 4, !tbaa !9
  %362 = mul nsw i32 %360, %361
  %363 = sext i32 %362 to i64
  %364 = load ptr, ptr %31, align 8, !tbaa !5
  %365 = call i32 @libmetis__imin(i64 noundef %363, ptr noundef %364)
  %366 = load i32, ptr %20, align 4, !tbaa !9
  %367 = load i32, ptr %19, align 4, !tbaa !9
  %368 = mul nsw i32 %366, %367
  %369 = sext i32 %368 to i64
  %370 = load ptr, ptr %31, align 8, !tbaa !5
  %371 = call i32 @libmetis__imax(i64 noundef %369, ptr noundef %370)
  %372 = load i32, ptr %20, align 4, !tbaa !9
  %373 = load i32, ptr %19, align 4, !tbaa !9
  %374 = mul nsw i32 %372, %373
  %375 = sext i32 %374 to i64
  %376 = load ptr, ptr %36, align 8, !tbaa !5
  %377 = call i32 @libmetis__imax(i64 noundef %375, ptr noundef %376)
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = load i32, ptr %20, align 4, !tbaa !9
  %380 = load ptr, ptr %53, align 8, !tbaa !5
  %381 = call float @libmetis__ComputeLoadImbalance(ptr noundef %378, i32 noundef %379, ptr noundef %380)
  %382 = fpext float %381 to double
  %383 = load float, ptr %54, align 4, !tbaa !11
  %384 = fpext float %383 to double
  %385 = load ptr, ptr %7, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.graph_t, ptr %385, i32 0, i32 0
  %387 = load i32, ptr %386, align 8, !tbaa !13
  %388 = load ptr, ptr %7, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.graph_t, ptr %388, i32 0, i32 21
  %390 = load i32, ptr %389, align 8, !tbaa !42
  %391 = load ptr, ptr %7, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.graph_t, ptr %391, i32 0, i32 17
  %393 = load i32, ptr %392, align 8, !tbaa !43
  %394 = load ptr, ptr %7, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.graph_t, ptr %394, i32 0, i32 18
  %396 = load i32, ptr %395, align 4, !tbaa !44
  %397 = load i32, ptr %8, align 4, !tbaa !9
  %398 = call i32 (ptr, ...) @printf(ptr noundef @.str.42, ptr noundef %359, i32 noundef %365, i32 noundef %371, i32 noundef %377, double noundef %382, double noundef %384, i32 noundef %387, i32 noundef %390, i32 noundef %393, i32 noundef %396, i32 noundef %397)
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.ctrl_t, ptr %399, i32 0, i32 9
  %401 = load i32, ptr %400, align 4, !tbaa !35
  %402 = icmp ne i32 %401, 0
  br i1 %402, label %403, label %413

403:                                              ; preds = %355
  %404 = load i32, ptr %20, align 4, !tbaa !9
  %405 = sext i32 %404 to i64
  %406 = load ptr, ptr %44, align 8, !tbaa !5
  %407 = call i32 @libmetis__imax(i64 noundef %405, ptr noundef %406)
  %408 = load i32, ptr %20, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = load ptr, ptr %44, align 8, !tbaa !5
  %411 = call i32 @libmetis__isum(i64 noundef %409, ptr noundef %410, i64 noundef 1)
  %412 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %407, i32 noundef %411)
  br label %413

413:                                              ; preds = %403, %355
  %414 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %415

415:                                              ; preds = %413, %334
  %416 = load i32, ptr %18, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = call ptr @libmetis__ipqCreate(i64 noundef %417)
  store ptr %418, ptr %55, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %419

419:                                              ; preds = %1693, %415
  %420 = load i32, ptr %17, align 4, !tbaa !9
  %421 = load i32, ptr %8, align 4, !tbaa !9
  %422 = icmp slt i32 %420, %421
  br i1 %422, label %423, label %1696

423:                                              ; preds = %419
  %424 = load ptr, ptr %7, align 8, !tbaa !5
  %425 = load ptr, ptr %30, align 8, !tbaa !5
  %426 = call i32 @libmetis__ComputeVolume(ptr noundef %424, ptr noundef %425)
  %427 = load ptr, ptr %7, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.graph_t, ptr %427, i32 0, i32 18
  %429 = load i32, ptr %428, align 4, !tbaa !44
  %430 = icmp eq i32 %426, %429
  br i1 %430, label %443, label %431

431:                                              ; preds = %423
  %432 = call i32 (ptr, ...) @printf(ptr noundef @.str.36, i32 noundef 1149, ptr noundef @.str.7)
  %433 = load ptr, ptr %7, align 8, !tbaa !5
  %434 = load ptr, ptr %30, align 8, !tbaa !5
  %435 = call i32 @libmetis__ComputeVolume(ptr noundef %433, ptr noundef %434)
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.graph_t, ptr %436, i32 0, i32 18
  %438 = load i32, ptr %437, align 4, !tbaa !44
  %439 = icmp eq i32 %435, %438
  br i1 %439, label %440, label %441

440:                                              ; preds = %431
  br label %442

441:                                              ; preds = %431
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.7, i32 noundef 1149, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #5
  unreachable

442:                                              ; preds = %440
  br label %443

443:                                              ; preds = %442, %423
  %444 = load i32, ptr %10, align 4, !tbaa !9
  %445 = icmp eq i32 %444, 2
  br i1 %445, label %446, label %452

446:                                              ; preds = %443
  %447 = load ptr, ptr %6, align 8, !tbaa !5
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = call i32 @libmetis__IsBalanced(ptr noundef %447, ptr noundef %448, float noundef 0.000000e+00)
  %450 = icmp ne i32 %449, 0
  br i1 %450, label %451, label %452

451:                                              ; preds = %446
  br label %1696

452:                                              ; preds = %446, %443
  %453 = load ptr, ptr %7, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.graph_t, ptr %453, i32 0, i32 17
  %455 = load i32, ptr %454, align 8, !tbaa !43
  store i32 %455, ptr %26, align 4, !tbaa !9
  %456 = load ptr, ptr %7, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.graph_t, ptr %456, i32 0, i32 18
  %458 = load i32, ptr %457, align 4, !tbaa !44
  store i32 %458, ptr %56, align 4, !tbaa !9
  store i32 0, ptr %38, align 4, !tbaa !9
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.ctrl_t, ptr %459, i32 0, i32 9
  %461 = load i32, ptr %460, align 4, !tbaa !35
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %463, label %468

463:                                              ; preds = %452
  %464 = load i32, ptr %20, align 4, !tbaa !9
  %465 = sext i32 %464 to i64
  %466 = load ptr, ptr %44, align 8, !tbaa !5
  %467 = call i32 @libmetis__imax(i64 noundef %465, ptr noundef %466)
  store i32 %467, ptr %42, align 4, !tbaa !9
  br label %468

468:                                              ; preds = %463, %452
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.graph_t, ptr %469, i32 0, i32 21
  %471 = load i32, ptr %470, align 8, !tbaa !42
  %472 = load ptr, ptr %32, align 8, !tbaa !5
  %473 = load ptr, ptr %7, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.graph_t, ptr %473, i32 0, i32 21
  %475 = load i32, ptr %474, align 8, !tbaa !42
  %476 = sdiv i32 %475, 4
  call void @libmetis__irandArrayPermute(i32 noundef %471, ptr noundef %472, i32 noundef %476, i32 noundef 1)
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %477

477:                                              ; preds = %540, %468
  %478 = load i32, ptr %12, align 4, !tbaa !9
  %479 = load ptr, ptr %7, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.graph_t, ptr %479, i32 0, i32 21
  %481 = load i32, ptr %480, align 8, !tbaa !42
  %482 = icmp slt i32 %478, %481
  br i1 %482, label %483, label %543

483:                                              ; preds = %477
  %484 = load ptr, ptr %34, align 8, !tbaa !5
  %485 = load ptr, ptr %32, align 8, !tbaa !5
  %486 = load i32, ptr %12, align 4, !tbaa !9
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds i32, ptr %485, i64 %487
  %489 = load i32, ptr %488, align 4, !tbaa !9
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i32, ptr %484, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !9
  store i32 %492, ptr %11, align 4, !tbaa !9
  %493 = load ptr, ptr %55, align 8, !tbaa !5
  %494 = load i32, ptr %11, align 4, !tbaa !9
  %495 = load ptr, ptr %7, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.graph_t, ptr %495, i32 0, i32 27
  %497 = load ptr, ptr %496, align 8, !tbaa !45
  %498 = load i32, ptr %11, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds %struct.vkrinfo_t, ptr %497, i64 %499
  %501 = getelementptr inbounds %struct.vkrinfo_t, ptr %500, i32 0, i32 2
  %502 = load i32, ptr %501, align 4, !tbaa !46
  %503 = call i32 @libmetis__ipqInsert(ptr noundef %493, i32 noundef %494, i32 noundef %502)
  %504 = load ptr, ptr %39, align 8, !tbaa !5
  %505 = load i32, ptr %11, align 4, !tbaa !9
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds i32, ptr %504, i64 %506
  store i32 1, ptr %507, align 4, !tbaa !9
  br label %508

508:                                              ; preds = %483
  %509 = load ptr, ptr %40, align 8, !tbaa !5
  %510 = load i32, ptr %11, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds i32, ptr %509, i64 %511
  %513 = load i32, ptr %512, align 4, !tbaa !9
  %514 = icmp eq i32 %513, -1
  br i1 %514, label %526, label %515

515:                                              ; preds = %508
  %516 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 1168, ptr noundef @.str.7)
  %517 = load ptr, ptr %40, align 8, !tbaa !5
  %518 = load i32, ptr %11, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i32, ptr %517, i64 %519
  %521 = load i32, ptr %520, align 4, !tbaa !9
  %522 = icmp eq i32 %521, -1
  br i1 %522, label %523, label %524

523:                                              ; preds = %515
  br label %525

524:                                              ; preds = %515
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.7, i32 noundef 1168, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #5
  unreachable

525:                                              ; preds = %523
  br label %526

526:                                              ; preds = %525, %508
  %527 = load i32, ptr %11, align 4, !tbaa !9
  %528 = load ptr, ptr %41, align 8, !tbaa !5
  %529 = load i32, ptr %38, align 4, !tbaa !9
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds i32, ptr %528, i64 %530
  store i32 %527, ptr %531, align 4, !tbaa !9
  %532 = load i32, ptr %38, align 4, !tbaa !9
  %533 = add nsw i32 %532, 1
  store i32 %533, ptr %38, align 4, !tbaa !9
  %534 = load ptr, ptr %40, align 8, !tbaa !5
  %535 = load i32, ptr %11, align 4, !tbaa !9
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds i32, ptr %534, i64 %536
  store i32 %532, ptr %537, align 4, !tbaa !9
  br label %538

538:                                              ; preds = %526
  br label %539

539:                                              ; preds = %538
  br label %540

540:                                              ; preds = %539
  %541 = load i32, ptr %12, align 4, !tbaa !9
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %12, align 4, !tbaa !9
  br label %477, !llvm.loop !48

543:                                              ; preds = %477
  store i32 0, ptr %37, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %544

544:                                              ; preds = %1542, %543
  %545 = load ptr, ptr %55, align 8, !tbaa !5
  %546 = call i32 @libmetis__ipqGetTop(ptr noundef %545)
  store i32 %546, ptr %11, align 4, !tbaa !9
  %547 = icmp eq i32 %546, -1
  br i1 %547, label %548, label %549

548:                                              ; preds = %544
  br label %1545

549:                                              ; preds = %544
  %550 = load ptr, ptr %39, align 8, !tbaa !5
  %551 = load i32, ptr %11, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds i32, ptr %550, i64 %552
  store i32 2, ptr %553, align 4, !tbaa !9
  %554 = load ptr, ptr %7, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.graph_t, ptr %554, i32 0, i32 27
  %556 = load ptr, ptr %555, align 8, !tbaa !45
  %557 = load i32, ptr %11, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds %struct.vkrinfo_t, ptr %556, i64 %558
  store ptr %559, ptr %61, align 8, !tbaa !5
  %560 = load ptr, ptr %6, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.ctrl_t, ptr %560, i32 0, i32 44
  %562 = load ptr, ptr %561, align 8, !tbaa !49
  %563 = load ptr, ptr %61, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.vkrinfo_t, ptr %563, i32 0, i32 4
  %565 = load i32, ptr %564, align 4, !tbaa !50
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds %struct.vnbr_t, ptr %562, i64 %566
  store ptr %567, ptr %62, align 8, !tbaa !5
  %568 = load ptr, ptr %30, align 8, !tbaa !5
  %569 = load i32, ptr %11, align 4, !tbaa !9
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds i32, ptr %568, i64 %570
  %572 = load i32, ptr %571, align 4, !tbaa !9
  store i32 %572, ptr %22, align 4, !tbaa !9
  %573 = load i32, ptr %10, align 4, !tbaa !9
  %574 = icmp eq i32 %573, 1
  br i1 %574, label %575, label %604

575:                                              ; preds = %549
  %576 = load ptr, ptr %61, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.vkrinfo_t, ptr %576, i32 0, i32 0
  %578 = load i32, ptr %577, align 4, !tbaa !51
  %579 = icmp sgt i32 %578, 0
  br i1 %579, label %580, label %603

580:                                              ; preds = %575
  %581 = load i32, ptr %19, align 4, !tbaa !9
  %582 = load ptr, ptr %28, align 8, !tbaa !5
  %583 = load i32, ptr %11, align 4, !tbaa !9
  %584 = load i32, ptr %19, align 4, !tbaa !9
  %585 = mul nsw i32 %583, %584
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %582, i64 %586
  %588 = load ptr, ptr %31, align 8, !tbaa !5
  %589 = load i32, ptr %22, align 4, !tbaa !9
  %590 = load i32, ptr %19, 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 %35, align 8, !tbaa !5
  %595 = load i32, ptr %22, align 4, !tbaa !9
  %596 = load i32, ptr %19, 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 i32 @libmetis__ivecaxpygez(i32 noundef %581, i32 noundef -1, ptr noundef %587, ptr noundef %593, ptr noundef %599)
  %601 = icmp ne i32 %600, 0
  br i1 %601, label %603, label %602

602:                                              ; preds = %580
  br label %1542

603:                                              ; preds = %580, %575
  br label %628

604:                                              ; preds = %549
  %605 = load i32, ptr %19, align 4, !tbaa !9
  %606 = load ptr, ptr %28, align 8, !tbaa !5
  %607 = load i32, ptr %11, align 4, !tbaa !9
  %608 = load i32, ptr %19, align 4, !tbaa !9
  %609 = mul nsw i32 %607, %608
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i32, ptr %606, i64 %610
  %612 = load ptr, ptr %31, align 8, !tbaa !5
  %613 = load i32, ptr %22, align 4, !tbaa !9
  %614 = load i32, ptr %19, align 4, !tbaa !9
  %615 = mul nsw i32 %613, %614
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds i32, ptr %612, i64 %616
  %618 = load ptr, ptr %35, align 8, !tbaa !5
  %619 = load i32, ptr %22, align 4, !tbaa !9
  %620 = load i32, ptr %19, align 4, !tbaa !9
  %621 = mul nsw i32 %619, %620
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %618, i64 %622
  %624 = call i32 @libmetis__ivecaxpygez(i32 noundef %605, i32 noundef -1, ptr noundef %611, ptr noundef %617, ptr noundef %623)
  %625 = icmp ne i32 %624, 0
  br i1 %625, label %627, label %626

626:                                              ; preds = %604
  br label %1542

627:                                              ; preds = %604
  br label %628

628:                                              ; preds = %627, %603
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.ctrl_t, ptr %629, i32 0, i32 10
  %631 = load i32, ptr %630, align 8, !tbaa !40
  %632 = icmp ne i32 %631, 0
  br i1 %632, label %633, label %644

633:                                              ; preds = %628
  %634 = load i32, ptr %11, align 4, !tbaa !9
  %635 = load ptr, ptr %27, align 8, !tbaa !5
  %636 = load ptr, ptr %29, align 8, !tbaa !5
  %637 = load ptr, ptr %30, align 8, !tbaa !5
  %638 = load ptr, ptr %48, align 8, !tbaa !5
  %639 = load ptr, ptr %49, align 8, !tbaa !5
  %640 = load ptr, ptr %50, align 8, !tbaa !5
  %641 = call i32 @libmetis__IsArticulationNode(i32 noundef %634, ptr noundef %635, ptr noundef %636, ptr noundef %637, ptr noundef %638, ptr noundef %639, ptr noundef %640)
  %642 = icmp ne i32 %641, 0
  br i1 %642, label %643, label %644

643:                                              ; preds = %633
  br label %1542

644:                                              ; preds = %633, %628
  %645 = load ptr, ptr %6, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.ctrl_t, ptr %645, i32 0, i32 9
  %647 = load i32, ptr %646, align 4, !tbaa !35
  %648 = icmp ne i32 %647, 0
  br i1 %648, label %649, label %789

649:                                              ; preds = %644
  br label %650

650:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  store i32 0, ptr %63, align 4, !tbaa !9
  br label %651

651:                                              ; preds = %783, %650
  %652 = load i32, ptr %63, align 4, !tbaa !9
  %653 = load ptr, ptr %61, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.vkrinfo_t, ptr %653, i32 0, i32 3
  %655 = load i32, ptr %654, align 4, !tbaa !52
  %656 = icmp slt i32 %652, %655
  br i1 %656, label %657, label %786

657:                                              ; preds = %651
  %658 = load ptr, ptr %43, align 8, !tbaa !5
  %659 = load ptr, ptr %62, align 8, !tbaa !5
  %660 = load i32, ptr %63, align 4, !tbaa !9
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds %struct.vnbr_t, ptr %659, i64 %661
  %663 = getelementptr inbounds %struct.vnbr_t, ptr %662, i32 0, i32 0
  %664 = load i32, ptr %663, align 4, !tbaa !53
  store i32 %664, ptr %67, align 4, !tbaa !9
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds i32, ptr %658, i64 %665
  store i32 0, ptr %666, align 4, !tbaa !9
  store i32 0, ptr %64, align 4, !tbaa !9
  br label %667

667:                                              ; preds = %688, %657
  %668 = load i32, ptr %64, align 4, !tbaa !9
  %669 = load ptr, ptr %44, align 8, !tbaa !5
  %670 = load i32, ptr %67, align 4, !tbaa !9
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds i32, ptr %669, i64 %671
  %673 = load i32, ptr %672, align 4, !tbaa !9
  %674 = icmp slt i32 %668, %673
  br i1 %674, label %675, label %691

675:                                              ; preds = %667
  %676 = load ptr, ptr %45, align 8, !tbaa !5
  %677 = load ptr, ptr %46, align 8, !tbaa !5
  %678 = load i32, ptr %67, align 4, !tbaa !9
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds ptr, ptr %677, i64 %679
  %681 = load ptr, ptr %680, align 8, !tbaa !5
  %682 = load i32, ptr %64, align 4, !tbaa !9
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds i32, ptr %681, i64 %683
  %685 = load i32, ptr %684, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds i32, ptr %676, i64 %686
  store i32 1, ptr %687, align 4, !tbaa !9
  br label %688

688:                                              ; preds = %675
  %689 = load i32, ptr %64, align 4, !tbaa !9
  %690 = add nsw i32 %689, 1
  store i32 %690, ptr %64, align 4, !tbaa !9
  br label %667, !llvm.loop !55

691:                                              ; preds = %667
  store i32 0, ptr %66, align 4, !tbaa !9
  store i32 0, ptr %64, align 4, !tbaa !9
  br label %692

692:                                              ; preds = %731, %691
  %693 = load i32, ptr %64, align 4, !tbaa !9
  %694 = load ptr, ptr %61, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.vkrinfo_t, ptr %694, i32 0, i32 3
  %696 = load i32, ptr %695, align 4, !tbaa !52
  %697 = icmp slt i32 %693, %696
  br i1 %697, label %698, label %734

698:                                              ; preds = %692
  %699 = load i32, ptr %64, align 4, !tbaa !9
  %700 = load i32, ptr %63, align 4, !tbaa !9
  %701 = icmp eq i32 %699, %700
  br i1 %701, label %702, label %703

702:                                              ; preds = %698
  br label %731

703:                                              ; preds = %698
  %704 = load ptr, ptr %62, align 8, !tbaa !5
  %705 = load i32, ptr %64, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds %struct.vnbr_t, ptr %704, i64 %706
  %708 = getelementptr inbounds %struct.vnbr_t, ptr %707, i32 0, i32 0
  %709 = load i32, ptr %708, align 4, !tbaa !53
  store i32 %709, ptr %65, align 4, !tbaa !9
  %710 = load ptr, ptr %45, align 8, !tbaa !5
  %711 = load i32, ptr %65, align 4, !tbaa !9
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds i32, ptr %710, i64 %712
  %714 = load i32, ptr %713, align 4, !tbaa !9
  %715 = icmp eq i32 %714, 0
  br i1 %715, label %716, label %730

716:                                              ; preds = %703
  %717 = load ptr, ptr %44, align 8, !tbaa !5
  %718 = load i32, ptr %65, align 4, !tbaa !9
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds i32, ptr %717, i64 %719
  %721 = load i32, ptr %720, align 4, !tbaa !9
  %722 = load i32, ptr %42, align 4, !tbaa !9
  %723 = sub nsw i32 %722, 1
  %724 = icmp sgt i32 %721, %723
  br i1 %724, label %725, label %727

725:                                              ; preds = %716
  %726 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %726, ptr %66, align 4, !tbaa !9
  br label %734

727:                                              ; preds = %716
  %728 = load i32, ptr %66, align 4, !tbaa !9
  %729 = add nsw i32 %728, 1
  store i32 %729, ptr %66, align 4, !tbaa !9
  br label %730

730:                                              ; preds = %727, %703
  br label %731

731:                                              ; preds = %730, %702
  %732 = load i32, ptr %64, align 4, !tbaa !9
  %733 = add nsw i32 %732, 1
  store i32 %733, ptr %64, align 4, !tbaa !9
  br label %692, !llvm.loop !56

734:                                              ; preds = %725, %692
  %735 = load ptr, ptr %44, align 8, !tbaa !5
  %736 = load i32, ptr %67, align 4, !tbaa !9
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds i32, ptr %735, i64 %737
  %739 = load i32, ptr %738, align 4, !tbaa !9
  %740 = load i32, ptr %66, align 4, !tbaa !9
  %741 = add nsw i32 %739, %740
  %742 = load i32, ptr %42, align 4, !tbaa !9
  %743 = icmp sle i32 %741, %742
  br i1 %743, label %744, label %749

744:                                              ; preds = %734
  %745 = load ptr, ptr %43, align 8, !tbaa !5
  %746 = load i32, ptr %67, align 4, !tbaa !9
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds i32, ptr %745, i64 %747
  store i32 1, ptr %748, align 4, !tbaa !9
  br label %749

749:                                              ; preds = %744, %734
  %750 = load i32, ptr %66, align 4, !tbaa !9
  %751 = icmp eq i32 %750, 0
  br i1 %751, label %752, label %757

752:                                              ; preds = %749
  %753 = load ptr, ptr %43, align 8, !tbaa !5
  %754 = load i32, ptr %67, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds i32, ptr %753, i64 %755
  store i32 2, ptr %756, align 4, !tbaa !9
  br label %757

757:                                              ; preds = %752, %749
  store i32 0, ptr %64, align 4, !tbaa !9
  br label %758

758:                                              ; preds = %779, %757
  %759 = load i32, ptr %64, align 4, !tbaa !9
  %760 = load ptr, ptr %44, align 8, !tbaa !5
  %761 = load i32, ptr %67, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i32, ptr %760, i64 %762
  %764 = load i32, ptr %763, align 4, !tbaa !9
  %765 = icmp slt i32 %759, %764
  br i1 %765, label %766, label %782

766:                                              ; preds = %758
  %767 = load ptr, ptr %45, align 8, !tbaa !5
  %768 = load ptr, ptr %46, align 8, !tbaa !5
  %769 = load i32, ptr %67, align 4, !tbaa !9
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds ptr, ptr %768, i64 %770
  %772 = load ptr, ptr %771, align 8, !tbaa !5
  %773 = load i32, ptr %64, align 4, !tbaa !9
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds i32, ptr %772, i64 %774
  %776 = load i32, ptr %775, align 4, !tbaa !9
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds i32, ptr %767, i64 %777
  store i32 0, ptr %778, align 4, !tbaa !9
  br label %779

779:                                              ; preds = %766
  %780 = load i32, ptr %64, align 4, !tbaa !9
  %781 = add nsw i32 %780, 1
  store i32 %781, ptr %64, align 4, !tbaa !9
  br label %758, !llvm.loop !57

782:                                              ; preds = %758
  br label %783

783:                                              ; preds = %782
  %784 = load i32, ptr %63, align 4, !tbaa !9
  %785 = add nsw i32 %784, 1
  store i32 %785, ptr %63, align 4, !tbaa !9
  br label %651, !llvm.loop !58

786:                                              ; preds = %651
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #4
  br label %787

787:                                              ; preds = %786
  br label %788

788:                                              ; preds = %787
  br label %789

789:                                              ; preds = %788, %644
  %790 = load ptr, ptr %61, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.vkrinfo_t, ptr %790, i32 0, i32 0
  %792 = load i32, ptr %791, align 4, !tbaa !51
  %793 = icmp eq i32 %792, 0
  br i1 %793, label %794, label %807

794:                                              ; preds = %789
  %795 = load ptr, ptr %61, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.vkrinfo_t, ptr %795, i32 0, i32 1
  %797 = load i32, ptr %796, align 4, !tbaa !59
  %798 = icmp sgt i32 %797, 0
  br i1 %798, label %799, label %807

799:                                              ; preds = %794
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.graph_t, ptr %800, i32 0, i32 5
  %802 = load ptr, ptr %801, align 8, !tbaa !60
  %803 = load i32, ptr %11, align 4, !tbaa !9
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds i32, ptr %802, i64 %804
  %806 = load i32, ptr %805, align 4, !tbaa !9
  br label %808

807:                                              ; preds = %794, %789
  br label %808

808:                                              ; preds = %807, %799
  %809 = phi i32 [ %806, %799 ], [ 0, %807 ]
  store i32 %809, ptr %57, align 4, !tbaa !9
  %810 = load i32, ptr %10, align 4, !tbaa !9
  %811 = icmp eq i32 %810, 1
  br i1 %811, label %812, label %1149

812:                                              ; preds = %808
  %813 = load ptr, ptr %61, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.vkrinfo_t, ptr %813, i32 0, i32 3
  %815 = load i32, ptr %814, align 4, !tbaa !52
  %816 = sub nsw i32 %815, 1
  store i32 %816, ptr %15, align 4, !tbaa !9
  br label %817

817:                                              ; preds = %868, %812
  %818 = load i32, ptr %15, align 4, !tbaa !9
  %819 = icmp sge i32 %818, 0
  br i1 %819, label %820, label %871

820:                                              ; preds = %817
  %821 = load ptr, ptr %43, align 8, !tbaa !5
  %822 = load ptr, ptr %62, align 8, !tbaa !5
  %823 = load i32, ptr %15, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds %struct.vnbr_t, ptr %822, i64 %824
  %826 = getelementptr inbounds %struct.vnbr_t, ptr %825, i32 0, i32 0
  %827 = load i32, ptr %826, align 4, !tbaa !53
  store i32 %827, ptr %24, align 4, !tbaa !9
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i32, ptr %821, i64 %828
  %830 = load i32, ptr %829, align 4, !tbaa !9
  %831 = icmp ne i32 %830, 0
  br i1 %831, label %833, label %832

832:                                              ; preds = %820
  br label %868

833:                                              ; preds = %820
  %834 = load ptr, ptr %62, align 8, !tbaa !5
  %835 = load i32, ptr %15, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds %struct.vnbr_t, ptr %834, i64 %836
  %838 = getelementptr inbounds %struct.vnbr_t, ptr %837, i32 0, i32 2
  %839 = load i32, ptr %838, align 4, !tbaa !61
  %840 = load i32, ptr %57, align 4, !tbaa !9
  %841 = add nsw i32 %839, %840
  store i32 %841, ptr %21, align 4, !tbaa !9
  %842 = load i32, ptr %21, align 4, !tbaa !9
  %843 = icmp sge i32 %842, 0
  br i1 %843, label %844, label %867

844:                                              ; preds = %833
  %845 = load i32, ptr %19, align 4, !tbaa !9
  %846 = load ptr, ptr %28, align 8, !tbaa !5
  %847 = load i32, ptr %11, align 4, !tbaa !9
  %848 = load i32, ptr %19, align 4, !tbaa !9
  %849 = mul nsw i32 %847, %848
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds i32, ptr %846, i64 %850
  %852 = load ptr, ptr %31, align 8, !tbaa !5
  %853 = load i32, ptr %24, align 4, !tbaa !9
  %854 = load i32, ptr %19, align 4, !tbaa !9
  %855 = mul nsw i32 %853, %854
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds i32, ptr %852, i64 %856
  %858 = load ptr, ptr %36, align 8, !tbaa !5
  %859 = load i32, ptr %24, align 4, !tbaa !9
  %860 = load i32, ptr %19, align 4, !tbaa !9
  %861 = mul nsw i32 %859, %860
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds i32, ptr %858, i64 %862
  %864 = call i32 @libmetis__ivecaxpylez(i32 noundef %845, i32 noundef 1, ptr noundef %851, ptr noundef %857, ptr noundef %863)
  %865 = icmp ne i32 %864, 0
  br i1 %865, label %866, label %867

866:                                              ; preds = %844
  br label %871

867:                                              ; preds = %844, %833
  br label %868

868:                                              ; preds = %867, %832
  %869 = load i32, ptr %15, align 4, !tbaa !9
  %870 = add nsw i32 %869, -1
  store i32 %870, ptr %15, align 4, !tbaa !9
  br label %817, !llvm.loop !62

871:                                              ; preds = %866, %817
  %872 = load i32, ptr %15, align 4, !tbaa !9
  %873 = icmp slt i32 %872, 0
  br i1 %873, label %874, label %875

874:                                              ; preds = %871
  br label %1542

875:                                              ; preds = %871
  %876 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %876, ptr %25, align 4, !tbaa !9
  %877 = load i32, ptr %15, align 4, !tbaa !9
  %878 = sub nsw i32 %877, 1
  store i32 %878, ptr %14, align 4, !tbaa !9
  br label %879

879:                                              ; preds = %1056, %875
  %880 = load i32, ptr %14, align 4, !tbaa !9
  %881 = icmp sge i32 %880, 0
  br i1 %881, label %882, label %1059

882:                                              ; preds = %879
  %883 = load ptr, ptr %43, align 8, !tbaa !5
  %884 = load ptr, ptr %62, align 8, !tbaa !5
  %885 = load i32, ptr %14, align 4, !tbaa !9
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds %struct.vnbr_t, ptr %884, i64 %886
  %888 = getelementptr inbounds %struct.vnbr_t, ptr %887, i32 0, i32 0
  %889 = load i32, ptr %888, align 4, !tbaa !53
  store i32 %889, ptr %24, align 4, !tbaa !9
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds i32, ptr %883, i64 %890
  %892 = load i32, ptr %891, align 4, !tbaa !9
  %893 = icmp ne i32 %892, 0
  br i1 %893, label %895, label %894

894:                                              ; preds = %882
  br label %1056

895:                                              ; preds = %882
  %896 = load ptr, ptr %62, align 8, !tbaa !5
  %897 = load i32, ptr %14, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %struct.vnbr_t, ptr %896, i64 %898
  %900 = getelementptr inbounds %struct.vnbr_t, ptr %899, i32 0, i32 2
  %901 = load i32, ptr %900, align 4, !tbaa !61
  %902 = load i32, ptr %57, align 4, !tbaa !9
  %903 = add nsw i32 %901, %902
  store i32 %903, ptr %21, align 4, !tbaa !9
  %904 = load ptr, ptr %62, align 8, !tbaa !5
  %905 = load i32, ptr %14, align 4, !tbaa !9
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds %struct.vnbr_t, ptr %904, i64 %906
  %908 = getelementptr inbounds %struct.vnbr_t, ptr %907, i32 0, i32 2
  %909 = load i32, ptr %908, align 4, !tbaa !61
  %910 = load ptr, ptr %62, align 8, !tbaa !5
  %911 = load i32, ptr %15, align 4, !tbaa !9
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds %struct.vnbr_t, ptr %910, i64 %912
  %914 = getelementptr inbounds %struct.vnbr_t, ptr %913, i32 0, i32 2
  %915 = load i32, ptr %914, align 4, !tbaa !61
  %916 = icmp sgt i32 %909, %915
  br i1 %916, label %917, label %939

917:                                              ; preds = %895
  %918 = load i32, ptr %19, align 4, !tbaa !9
  %919 = load ptr, ptr %28, align 8, !tbaa !5
  %920 = load i32, ptr %11, align 4, !tbaa !9
  %921 = load i32, ptr %19, align 4, !tbaa !9
  %922 = mul nsw i32 %920, %921
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds i32, ptr %919, i64 %923
  %925 = load ptr, ptr %31, align 8, !tbaa !5
  %926 = load i32, ptr %24, align 4, !tbaa !9
  %927 = load i32, ptr %19, align 4, !tbaa !9
  %928 = mul nsw i32 %926, %927
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds i32, ptr %925, i64 %929
  %931 = load ptr, ptr %36, align 8, !tbaa !5
  %932 = load i32, ptr %24, align 4, !tbaa !9
  %933 = load i32, ptr %19, align 4, !tbaa !9
  %934 = mul nsw i32 %932, %933
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds i32, ptr %931, i64 %935
  %937 = call i32 @libmetis__ivecaxpylez(i32 noundef %918, i32 noundef 1, ptr noundef %924, ptr noundef %930, ptr noundef %936)
  %938 = icmp ne i32 %937, 0
  br i1 %938, label %1052, label %939

939:                                              ; preds = %917, %895
  %940 = load ptr, ptr %62, align 8, !tbaa !5
  %941 = load i32, ptr %14, align 4, !tbaa !9
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds %struct.vnbr_t, ptr %940, i64 %942
  %944 = getelementptr inbounds %struct.vnbr_t, ptr %943, i32 0, i32 2
  %945 = load i32, ptr %944, align 4, !tbaa !61
  %946 = load ptr, ptr %62, align 8, !tbaa !5
  %947 = load i32, ptr %15, align 4, !tbaa !9
  %948 = sext i32 %947 to i64
  %949 = getelementptr inbounds %struct.vnbr_t, ptr %946, i64 %948
  %950 = getelementptr inbounds %struct.vnbr_t, ptr %949, i32 0, i32 2
  %951 = load i32, ptr %950, align 4, !tbaa !61
  %952 = icmp eq i32 %945, %951
  br i1 %952, label %953, label %989

953:                                              ; preds = %939
  %954 = load ptr, ptr %62, align 8, !tbaa !5
  %955 = load i32, ptr %14, align 4, !tbaa !9
  %956 = sext i32 %955 to i64
  %957 = getelementptr inbounds %struct.vnbr_t, ptr %954, i64 %956
  %958 = getelementptr inbounds %struct.vnbr_t, ptr %957, i32 0, i32 1
  %959 = load i32, ptr %958, align 4, !tbaa !63
  %960 = load ptr, ptr %62, align 8, !tbaa !5
  %961 = load i32, ptr %15, align 4, !tbaa !9
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds %struct.vnbr_t, ptr %960, i64 %962
  %964 = getelementptr inbounds %struct.vnbr_t, ptr %963, i32 0, i32 1
  %965 = load i32, ptr %964, align 4, !tbaa !63
  %966 = icmp sgt i32 %959, %965
  br i1 %966, label %967, label %989

967:                                              ; preds = %953
  %968 = load i32, ptr %19, align 4, !tbaa !9
  %969 = load ptr, ptr %28, align 8, !tbaa !5
  %970 = load i32, ptr %11, align 4, !tbaa !9
  %971 = load i32, ptr %19, align 4, !tbaa !9
  %972 = mul nsw i32 %970, %971
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds i32, ptr %969, i64 %973
  %975 = load ptr, ptr %31, align 8, !tbaa !5
  %976 = load i32, ptr %24, align 4, !tbaa !9
  %977 = load i32, ptr %19, align 4, !tbaa !9
  %978 = mul nsw i32 %976, %977
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds i32, ptr %975, i64 %979
  %981 = load ptr, ptr %36, align 8, !tbaa !5
  %982 = load i32, ptr %24, align 4, !tbaa !9
  %983 = load i32, ptr %19, align 4, !tbaa !9
  %984 = mul nsw i32 %982, %983
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds i32, ptr %981, i64 %985
  %987 = call i32 @libmetis__ivecaxpylez(i32 noundef %968, i32 noundef 1, ptr noundef %974, ptr noundef %980, ptr noundef %986)
  %988 = icmp ne i32 %987, 0
  br i1 %988, label %1052, label %989

989:                                              ; preds = %967, %953, %939
  %990 = load ptr, ptr %62, align 8, !tbaa !5
  %991 = load i32, ptr %14, align 4, !tbaa !9
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds %struct.vnbr_t, ptr %990, i64 %992
  %994 = getelementptr inbounds %struct.vnbr_t, ptr %993, i32 0, i32 2
  %995 = load i32, ptr %994, align 4, !tbaa !61
  %996 = load ptr, ptr %62, align 8, !tbaa !5
  %997 = load i32, ptr %15, align 4, !tbaa !9
  %998 = sext i32 %997 to i64
  %999 = getelementptr inbounds %struct.vnbr_t, ptr %996, i64 %998
  %1000 = getelementptr inbounds %struct.vnbr_t, ptr %999, i32 0, i32 2
  %1001 = load i32, ptr %1000, align 4, !tbaa !61
  %1002 = icmp eq i32 %995, %1001
  br i1 %1002, label %1003, label %1055

1003:                                             ; preds = %989
  %1004 = load ptr, ptr %62, align 8, !tbaa !5
  %1005 = load i32, ptr %14, align 4, !tbaa !9
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds %struct.vnbr_t, ptr %1004, i64 %1006
  %1008 = getelementptr inbounds %struct.vnbr_t, ptr %1007, i32 0, i32 1
  %1009 = load i32, ptr %1008, align 4, !tbaa !63
  %1010 = load ptr, ptr %62, align 8, !tbaa !5
  %1011 = load i32, ptr %15, align 4, !tbaa !9
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds %struct.vnbr_t, ptr %1010, i64 %1012
  %1014 = getelementptr inbounds %struct.vnbr_t, ptr %1013, i32 0, i32 1
  %1015 = load i32, ptr %1014, align 4, !tbaa !63
  %1016 = icmp eq i32 %1009, %1015
  br i1 %1016, label %1017, label %1055

1017:                                             ; preds = %1003
  %1018 = load i32, ptr %19, align 4, !tbaa !9
  %1019 = load ptr, ptr %28, align 8, !tbaa !5
  %1020 = load i32, ptr %11, align 4, !tbaa !9
  %1021 = load i32, ptr %19, align 4, !tbaa !9
  %1022 = mul nsw i32 %1020, %1021
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds i32, ptr %1019, i64 %1023
  %1025 = load ptr, ptr %52, align 8, !tbaa !5
  %1026 = load ptr, ptr %31, align 8, !tbaa !5
  %1027 = load i32, ptr %25, align 4, !tbaa !9
  %1028 = load i32, ptr %19, align 4, !tbaa !9
  %1029 = mul nsw i32 %1027, %1028
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds i32, ptr %1026, i64 %1030
  %1032 = load ptr, ptr %53, align 8, !tbaa !5
  %1033 = load i32, ptr %25, align 4, !tbaa !9
  %1034 = load i32, ptr %19, align 4, !tbaa !9
  %1035 = mul nsw i32 %1033, %1034
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds float, ptr %1032, i64 %1036
  %1038 = load ptr, ptr %31, align 8, !tbaa !5
  %1039 = load i32, ptr %24, align 4, !tbaa !9
  %1040 = load i32, ptr %19, align 4, !tbaa !9
  %1041 = mul nsw i32 %1039, %1040
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds i32, ptr %1038, i64 %1042
  %1044 = load ptr, ptr %53, align 8, !tbaa !5
  %1045 = load i32, ptr %24, align 4, !tbaa !9
  %1046 = load i32, ptr %19, align 4, !tbaa !9
  %1047 = mul nsw i32 %1045, %1046
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds float, ptr %1044, i64 %1048
  %1050 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %1018, ptr noundef %1024, ptr noundef %1025, i32 noundef 1, ptr noundef %1031, ptr noundef %1037, i32 noundef 1, ptr noundef %1043, ptr noundef %1049)
  %1051 = icmp ne i32 %1050, 0
  br i1 %1051, label %1052, label %1055

1052:                                             ; preds = %1017, %967, %917
  %1053 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %1053, ptr %15, align 4, !tbaa !9
  %1054 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %1054, ptr %25, align 4, !tbaa !9
  br label %1055

1055:                                             ; preds = %1052, %1017, %1003, %989
  br label %1056

1056:                                             ; preds = %1055, %894
  %1057 = load i32, ptr %14, align 4, !tbaa !9
  %1058 = add nsw i32 %1057, -1
  store i32 %1058, ptr %14, align 4, !tbaa !9
  br label %879, !llvm.loop !64

1059:                                             ; preds = %879
  %1060 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1060, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  %1061 = load i32, ptr %57, align 4, !tbaa !9
  %1062 = load ptr, ptr %62, align 8, !tbaa !5
  %1063 = load i32, ptr %15, align 4, !tbaa !9
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds %struct.vnbr_t, ptr %1062, i64 %1064
  %1066 = getelementptr inbounds %struct.vnbr_t, ptr %1065, i32 0, i32 2
  %1067 = load i32, ptr %1066, align 4, !tbaa !61
  %1068 = add nsw i32 %1061, %1067
  %1069 = icmp sgt i32 %1068, 0
  br i1 %1069, label %1082, label %1070

1070:                                             ; preds = %1059
  %1071 = load ptr, ptr %62, align 8, !tbaa !5
  %1072 = load i32, ptr %15, align 4, !tbaa !9
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds %struct.vnbr_t, ptr %1071, i64 %1073
  %1075 = getelementptr inbounds %struct.vnbr_t, ptr %1074, i32 0, i32 1
  %1076 = load i32, ptr %1075, align 4, !tbaa !63
  %1077 = load ptr, ptr %61, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.vkrinfo_t, ptr %1077, i32 0, i32 0
  %1079 = load i32, ptr %1078, align 4, !tbaa !51
  %1080 = sub nsw i32 %1076, %1079
  %1081 = icmp sgt i32 %1080, 0
  br i1 %1081, label %1082, label %1083

1082:                                             ; preds = %1070, %1059
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %1144

1083:                                             ; preds = %1070
  %1084 = load ptr, ptr %62, align 8, !tbaa !5
  %1085 = load i32, ptr %15, align 4, !tbaa !9
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds %struct.vnbr_t, ptr %1084, i64 %1086
  %1088 = getelementptr inbounds %struct.vnbr_t, ptr %1087, i32 0, i32 1
  %1089 = load i32, ptr %1088, align 4, !tbaa !63
  %1090 = load ptr, ptr %61, align 8, !tbaa !5
  %1091 = getelementptr inbounds %struct.vkrinfo_t, ptr %1090, i32 0, i32 0
  %1092 = load i32, ptr %1091, align 4, !tbaa !51
  %1093 = sub nsw i32 %1089, %1092
  %1094 = icmp eq i32 %1093, 0
  br i1 %1094, label %1095, label %1143

1095:                                             ; preds = %1083
  %1096 = load i32, ptr %13, align 4, !tbaa !9
  %1097 = srem i32 %1096, 2
  %1098 = icmp eq i32 %1097, 0
  br i1 %1098, label %1099, label %1106

1099:                                             ; preds = %1095
  %1100 = load ptr, ptr %43, align 8, !tbaa !5
  %1101 = load i32, ptr %24, align 4, !tbaa !9
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds i32, ptr %1100, i64 %1102
  %1104 = load i32, ptr %1103, align 4, !tbaa !9
  %1105 = icmp eq i32 %1104, 2
  br i1 %1105, label %1141, label %1106

1106:                                             ; preds = %1099, %1095
  %1107 = load i32, ptr %19, align 4, !tbaa !9
  %1108 = load ptr, ptr %28, align 8, !tbaa !5
  %1109 = load i32, ptr %11, align 4, !tbaa !9
  %1110 = load i32, ptr %19, align 4, !tbaa !9
  %1111 = mul nsw i32 %1109, %1110
  %1112 = sext i32 %1111 to i64
  %1113 = getelementptr inbounds i32, ptr %1108, i64 %1112
  %1114 = load ptr, ptr %52, align 8, !tbaa !5
  %1115 = load ptr, ptr %31, align 8, !tbaa !5
  %1116 = load i32, ptr %22, align 4, !tbaa !9
  %1117 = load i32, ptr %19, align 4, !tbaa !9
  %1118 = mul nsw i32 %1116, %1117
  %1119 = sext i32 %1118 to i64
  %1120 = getelementptr inbounds i32, ptr %1115, i64 %1119
  %1121 = load ptr, ptr %53, align 8, !tbaa !5
  %1122 = load i32, ptr %22, align 4, !tbaa !9
  %1123 = load i32, ptr %19, align 4, !tbaa !9
  %1124 = mul nsw i32 %1122, %1123
  %1125 = sext i32 %1124 to i64
  %1126 = getelementptr inbounds float, ptr %1121, i64 %1125
  %1127 = load ptr, ptr %31, align 8, !tbaa !5
  %1128 = load i32, ptr %24, align 4, !tbaa !9
  %1129 = load i32, ptr %19, align 4, !tbaa !9
  %1130 = mul nsw i32 %1128, %1129
  %1131 = sext i32 %1130 to i64
  %1132 = getelementptr inbounds i32, ptr %1127, i64 %1131
  %1133 = load ptr, ptr %53, align 8, !tbaa !5
  %1134 = load i32, ptr %24, align 4, !tbaa !9
  %1135 = load i32, ptr %19, align 4, !tbaa !9
  %1136 = mul nsw i32 %1134, %1135
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds float, ptr %1133, i64 %1137
  %1139 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %1107, ptr noundef %1113, ptr noundef %1114, i32 noundef -1, ptr noundef %1120, ptr noundef %1126, i32 noundef 1, ptr noundef %1132, ptr noundef %1138)
  %1140 = icmp ne i32 %1139, 0
  br i1 %1140, label %1141, label %1142

1141:                                             ; preds = %1106, %1099
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %1142

1142:                                             ; preds = %1141, %1106
  br label %1143

1143:                                             ; preds = %1142, %1083
  br label %1144

1144:                                             ; preds = %1143, %1082
  %1145 = load i32, ptr %14, align 4, !tbaa !9
  %1146 = icmp eq i32 %1145, 0
  br i1 %1146, label %1147, label %1148

1147:                                             ; preds = %1144
  br label %1542

1148:                                             ; preds = %1144
  br label %1368

1149:                                             ; preds = %808
  %1150 = load ptr, ptr %61, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.vkrinfo_t, ptr %1150, i32 0, i32 3
  %1152 = load i32, ptr %1151, align 4, !tbaa !52
  %1153 = sub nsw i32 %1152, 1
  store i32 %1153, ptr %15, align 4, !tbaa !9
  br label %1154

1154:                                             ; preds = %1229, %1149
  %1155 = load i32, ptr %15, align 4, !tbaa !9
  %1156 = icmp sge i32 %1155, 0
  br i1 %1156, label %1157, label %1232

1157:                                             ; preds = %1154
  %1158 = load ptr, ptr %43, align 8, !tbaa !5
  %1159 = load ptr, ptr %62, align 8, !tbaa !5
  %1160 = load i32, ptr %15, align 4, !tbaa !9
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr inbounds %struct.vnbr_t, ptr %1159, i64 %1161
  %1163 = getelementptr inbounds %struct.vnbr_t, ptr %1162, i32 0, i32 0
  %1164 = load i32, ptr %1163, align 4, !tbaa !53
  store i32 %1164, ptr %24, align 4, !tbaa !9
  %1165 = sext i32 %1164 to i64
  %1166 = getelementptr inbounds i32, ptr %1158, i64 %1165
  %1167 = load i32, ptr %1166, align 4, !tbaa !9
  %1168 = icmp ne i32 %1167, 0
  br i1 %1168, label %1170, label %1169

1169:                                             ; preds = %1157
  br label %1229

1170:                                             ; preds = %1157
  %1171 = load i32, ptr %19, align 4, !tbaa !9
  %1172 = load ptr, ptr %28, align 8, !tbaa !5
  %1173 = load i32, ptr %11, align 4, !tbaa !9
  %1174 = load i32, ptr %19, align 4, !tbaa !9
  %1175 = mul nsw i32 %1173, %1174
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds i32, ptr %1172, i64 %1176
  %1178 = load ptr, ptr %31, align 8, !tbaa !5
  %1179 = load i32, ptr %24, align 4, !tbaa !9
  %1180 = load i32, ptr %19, align 4, !tbaa !9
  %1181 = mul nsw i32 %1179, %1180
  %1182 = sext i32 %1181 to i64
  %1183 = getelementptr inbounds i32, ptr %1178, i64 %1182
  %1184 = load ptr, ptr %36, align 8, !tbaa !5
  %1185 = load i32, ptr %24, align 4, !tbaa !9
  %1186 = load i32, ptr %19, align 4, !tbaa !9
  %1187 = mul nsw i32 %1185, %1186
  %1188 = sext i32 %1187 to i64
  %1189 = getelementptr inbounds i32, ptr %1184, i64 %1188
  %1190 = call i32 @libmetis__ivecaxpylez(i32 noundef %1171, i32 noundef 1, ptr noundef %1177, ptr noundef %1183, ptr noundef %1189)
  %1191 = icmp ne i32 %1190, 0
  br i1 %1191, label %1227, label %1192

1192:                                             ; preds = %1170
  %1193 = load i32, ptr %19, align 4, !tbaa !9
  %1194 = load ptr, ptr %28, align 8, !tbaa !5
  %1195 = load i32, ptr %11, align 4, !tbaa !9
  %1196 = load i32, ptr %19, align 4, !tbaa !9
  %1197 = mul nsw i32 %1195, %1196
  %1198 = sext i32 %1197 to i64
  %1199 = getelementptr inbounds i32, ptr %1194, i64 %1198
  %1200 = load ptr, ptr %52, align 8, !tbaa !5
  %1201 = load ptr, ptr %31, align 8, !tbaa !5
  %1202 = load i32, ptr %22, align 4, !tbaa !9
  %1203 = load i32, ptr %19, align 4, !tbaa !9
  %1204 = mul nsw i32 %1202, %1203
  %1205 = sext i32 %1204 to i64
  %1206 = getelementptr inbounds i32, ptr %1201, i64 %1205
  %1207 = load ptr, ptr %53, align 8, !tbaa !5
  %1208 = load i32, ptr %22, align 4, !tbaa !9
  %1209 = load i32, ptr %19, align 4, !tbaa !9
  %1210 = mul nsw i32 %1208, %1209
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds float, ptr %1207, i64 %1211
  %1213 = load ptr, ptr %31, align 8, !tbaa !5
  %1214 = load i32, ptr %24, align 4, !tbaa !9
  %1215 = load i32, ptr %19, align 4, !tbaa !9
  %1216 = mul nsw i32 %1214, %1215
  %1217 = sext i32 %1216 to i64
  %1218 = getelementptr inbounds i32, ptr %1213, i64 %1217
  %1219 = load ptr, ptr %53, align 8, !tbaa !5
  %1220 = load i32, ptr %24, align 4, !tbaa !9
  %1221 = load i32, ptr %19, align 4, !tbaa !9
  %1222 = mul nsw i32 %1220, %1221
  %1223 = sext i32 %1222 to i64
  %1224 = getelementptr inbounds float, ptr %1219, i64 %1223
  %1225 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %1193, ptr noundef %1199, ptr noundef %1200, i32 noundef -1, ptr noundef %1206, ptr noundef %1212, i32 noundef 1, ptr noundef %1218, ptr noundef %1224)
  %1226 = icmp ne i32 %1225, 0
  br i1 %1226, label %1227, label %1228

1227:                                             ; preds = %1192, %1170
  br label %1232

1228:                                             ; preds = %1192
  br label %1229

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

1232:                                             ; preds = %1227, %1154
  %1233 = load i32, ptr %15, align 4, !tbaa !9
  %1234 = icmp slt i32 %1233, 0
  br i1 %1234, label %1235, label %1236

1235:                                             ; preds = %1232
  br label %1542

1236:                                             ; preds = %1232
  %1237 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %1237, ptr %25, align 4, !tbaa !9
  %1238 = load i32, ptr %15, align 4, !tbaa !9
  %1239 = sub nsw i32 %1238, 1
  store i32 %1239, ptr %14, align 4, !tbaa !9
  br label %1240

1240:                                             ; preds = %1295, %1236
  %1241 = load i32, ptr %14, align 4, !tbaa !9
  %1242 = icmp sge i32 %1241, 0
  br i1 %1242, label %1243, label %1298

1243:                                             ; preds = %1240
  %1244 = load ptr, ptr %43, align 8, !tbaa !5
  %1245 = load ptr, ptr %62, align 8, !tbaa !5
  %1246 = load i32, ptr %14, align 4, !tbaa !9
  %1247 = sext i32 %1246 to i64
  %1248 = getelementptr inbounds %struct.vnbr_t, ptr %1245, i64 %1247
  %1249 = getelementptr inbounds %struct.vnbr_t, ptr %1248, i32 0, i32 0
  %1250 = load i32, ptr %1249, align 4, !tbaa !53
  store i32 %1250, ptr %24, align 4, !tbaa !9
  %1251 = sext i32 %1250 to i64
  %1252 = getelementptr inbounds i32, ptr %1244, i64 %1251
  %1253 = load i32, ptr %1252, align 4, !tbaa !9
  %1254 = icmp ne i32 %1253, 0
  br i1 %1254, label %1256, label %1255

1255:                                             ; preds = %1243
  br label %1295

1256:                                             ; preds = %1243
  %1257 = load i32, ptr %19, align 4, !tbaa !9
  %1258 = load ptr, ptr %28, align 8, !tbaa !5
  %1259 = load i32, ptr %11, align 4, !tbaa !9
  %1260 = load i32, ptr %19, align 4, !tbaa !9
  %1261 = mul nsw i32 %1259, %1260
  %1262 = sext i32 %1261 to i64
  %1263 = getelementptr inbounds i32, ptr %1258, i64 %1262
  %1264 = load ptr, ptr %52, align 8, !tbaa !5
  %1265 = load ptr, ptr %31, align 8, !tbaa !5
  %1266 = load i32, ptr %25, align 4, !tbaa !9
  %1267 = load i32, ptr %19, align 4, !tbaa !9
  %1268 = mul nsw i32 %1266, %1267
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds i32, ptr %1265, i64 %1269
  %1271 = load ptr, ptr %53, align 8, !tbaa !5
  %1272 = load i32, ptr %25, align 4, !tbaa !9
  %1273 = load i32, ptr %19, align 4, !tbaa !9
  %1274 = mul nsw i32 %1272, %1273
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds float, ptr %1271, i64 %1275
  %1277 = load ptr, ptr %31, align 8, !tbaa !5
  %1278 = load i32, ptr %24, align 4, !tbaa !9
  %1279 = load i32, ptr %19, align 4, !tbaa !9
  %1280 = mul nsw i32 %1278, %1279
  %1281 = sext i32 %1280 to i64
  %1282 = getelementptr inbounds i32, ptr %1277, i64 %1281
  %1283 = load ptr, ptr %53, align 8, !tbaa !5
  %1284 = load i32, ptr %24, align 4, !tbaa !9
  %1285 = load i32, ptr %19, align 4, !tbaa !9
  %1286 = mul nsw i32 %1284, %1285
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds float, ptr %1283, i64 %1287
  %1289 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %1257, ptr noundef %1263, ptr noundef %1264, i32 noundef 1, ptr noundef %1270, ptr noundef %1276, i32 noundef 1, ptr noundef %1282, ptr noundef %1288)
  %1290 = icmp ne i32 %1289, 0
  br i1 %1290, label %1291, label %1294

1291:                                             ; preds = %1256
  %1292 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %1292, ptr %15, align 4, !tbaa !9
  %1293 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %1293, ptr %25, align 4, !tbaa !9
  br label %1294

1294:                                             ; preds = %1291, %1256
  br label %1295

1295:                                             ; preds = %1294, %1255
  %1296 = load i32, ptr %14, align 4, !tbaa !9
  %1297 = add nsw i32 %1296, -1
  store i32 %1297, ptr %14, align 4, !tbaa !9
  br label %1240, !llvm.loop !66

1298:                                             ; preds = %1240
  %1299 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1299, ptr %24, align 4, !tbaa !9
  %1300 = load i32, ptr %57, align 4, !tbaa !9
  %1301 = load ptr, ptr %62, align 8, !tbaa !5
  %1302 = load i32, ptr %15, align 4, !tbaa !9
  %1303 = sext i32 %1302 to i64
  %1304 = getelementptr inbounds %struct.vnbr_t, ptr %1301, i64 %1303
  %1305 = getelementptr inbounds %struct.vnbr_t, ptr %1304, i32 0, i32 2
  %1306 = load i32, ptr %1305, align 4, !tbaa !61
  %1307 = add nsw i32 %1300, %1306
  %1308 = icmp slt i32 %1307, 0
  br i1 %1308, label %1331, label %1309

1309:                                             ; preds = %1298
  %1310 = load i32, ptr %57, align 4, !tbaa !9
  %1311 = load ptr, ptr %62, align 8, !tbaa !5
  %1312 = load i32, ptr %15, align 4, !tbaa !9
  %1313 = sext i32 %1312 to i64
  %1314 = getelementptr inbounds %struct.vnbr_t, ptr %1311, i64 %1313
  %1315 = getelementptr inbounds %struct.vnbr_t, ptr %1314, i32 0, i32 2
  %1316 = load i32, ptr %1315, align 4, !tbaa !61
  %1317 = add nsw i32 %1310, %1316
  %1318 = icmp eq i32 %1317, 0
  br i1 %1318, label %1319, label %1367

1319:                                             ; preds = %1309
  %1320 = load ptr, ptr %62, align 8, !tbaa !5
  %1321 = load i32, ptr %15, align 4, !tbaa !9
  %1322 = sext i32 %1321 to i64
  %1323 = getelementptr inbounds %struct.vnbr_t, ptr %1320, i64 %1322
  %1324 = getelementptr inbounds %struct.vnbr_t, ptr %1323, i32 0, i32 1
  %1325 = load i32, ptr %1324, align 4, !tbaa !63
  %1326 = load ptr, ptr %61, align 8, !tbaa !5
  %1327 = getelementptr inbounds %struct.vkrinfo_t, ptr %1326, i32 0, i32 0
  %1328 = load i32, ptr %1327, align 4, !tbaa !51
  %1329 = sub nsw i32 %1325, %1328
  %1330 = icmp slt i32 %1329, 0
  br i1 %1330, label %1331, label %1367

1331:                                             ; preds = %1319, %1298
  %1332 = load i32, ptr %19, align 4, !tbaa !9
  %1333 = load ptr, ptr %28, align 8, !tbaa !5
  %1334 = load i32, ptr %11, align 4, !tbaa !9
  %1335 = load i32, ptr %19, align 4, !tbaa !9
  %1336 = mul nsw i32 %1334, %1335
  %1337 = sext i32 %1336 to i64
  %1338 = getelementptr inbounds i32, ptr %1333, i64 %1337
  %1339 = load ptr, ptr %52, align 8, !tbaa !5
  %1340 = load ptr, ptr %31, align 8, !tbaa !5
  %1341 = load i32, ptr %22, align 4, !tbaa !9
  %1342 = load i32, ptr %19, align 4, !tbaa !9
  %1343 = mul nsw i32 %1341, %1342
  %1344 = sext i32 %1343 to i64
  %1345 = getelementptr inbounds i32, ptr %1340, i64 %1344
  %1346 = load ptr, ptr %53, align 8, !tbaa !5
  %1347 = load i32, ptr %22, align 4, !tbaa !9
  %1348 = load i32, ptr %19, align 4, !tbaa !9
  %1349 = mul nsw i32 %1347, %1348
  %1350 = sext i32 %1349 to i64
  %1351 = getelementptr inbounds float, ptr %1346, i64 %1350
  %1352 = load ptr, ptr %31, align 8, !tbaa !5
  %1353 = load i32, ptr %24, align 4, !tbaa !9
  %1354 = load i32, ptr %19, align 4, !tbaa !9
  %1355 = mul nsw i32 %1353, %1354
  %1356 = sext i32 %1355 to i64
  %1357 = getelementptr inbounds i32, ptr %1352, i64 %1356
  %1358 = load ptr, ptr %53, align 8, !tbaa !5
  %1359 = load i32, ptr %24, align 4, !tbaa !9
  %1360 = load i32, ptr %19, align 4, !tbaa !9
  %1361 = mul nsw i32 %1359, %1360
  %1362 = sext i32 %1361 to i64
  %1363 = getelementptr inbounds float, ptr %1358, i64 %1362
  %1364 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %1332, ptr noundef %1338, ptr noundef %1339, i32 noundef -1, ptr noundef %1345, ptr noundef %1351, i32 noundef 1, ptr noundef %1357, ptr noundef %1363)
  %1365 = icmp ne i32 %1364, 0
  br i1 %1365, label %1367, label %1366

1366:                                             ; preds = %1331
  br label %1542

1367:                                             ; preds = %1331, %1319, %1309
  br label %1368

1368:                                             ; preds = %1367, %1148
  %1369 = load ptr, ptr %62, align 8, !tbaa !5
  %1370 = load i32, ptr %15, align 4, !tbaa !9
  %1371 = sext i32 %1370 to i64
  %1372 = getelementptr inbounds %struct.vnbr_t, ptr %1369, i64 %1371
  %1373 = getelementptr inbounds %struct.vnbr_t, ptr %1372, i32 0, i32 1
  %1374 = load i32, ptr %1373, align 4, !tbaa !63
  %1375 = load ptr, ptr %61, align 8, !tbaa !5
  %1376 = getelementptr inbounds %struct.vkrinfo_t, ptr %1375, i32 0, i32 0
  %1377 = load i32, ptr %1376, align 4, !tbaa !51
  %1378 = sub nsw i32 %1374, %1377
  %1379 = load ptr, ptr %7, align 8, !tbaa !5
  %1380 = getelementptr inbounds %struct.graph_t, ptr %1379, i32 0, i32 17
  %1381 = load i32, ptr %1380, align 8, !tbaa !43
  %1382 = sub nsw i32 %1381, %1378
  store i32 %1382, ptr %1380, align 8, !tbaa !43
  %1383 = load i32, ptr %57, align 4, !tbaa !9
  %1384 = load ptr, ptr %62, align 8, !tbaa !5
  %1385 = load i32, ptr %15, align 4, !tbaa !9
  %1386 = sext i32 %1385 to i64
  %1387 = getelementptr inbounds %struct.vnbr_t, ptr %1384, i64 %1386
  %1388 = getelementptr inbounds %struct.vnbr_t, ptr %1387, i32 0, i32 2
  %1389 = load i32, ptr %1388, align 4, !tbaa !61
  %1390 = add nsw i32 %1383, %1389
  %1391 = load ptr, ptr %7, align 8, !tbaa !5
  %1392 = getelementptr inbounds %struct.graph_t, ptr %1391, i32 0, i32 18
  %1393 = load i32, ptr %1392, align 4, !tbaa !44
  %1394 = sub nsw i32 %1393, %1390
  store i32 %1394, ptr %1392, align 4, !tbaa !44
  %1395 = load i32, ptr %24, align 4, !tbaa !9
  %1396 = load ptr, ptr %30, align 8, !tbaa !5
  %1397 = load i32, ptr %11, align 4, !tbaa !9
  %1398 = sext i32 %1397 to i64
  %1399 = getelementptr inbounds i32, ptr %1396, i64 %1398
  store i32 %1395, ptr %1399, align 4, !tbaa !9
  %1400 = load i32, ptr %37, align 4, !tbaa !9
  %1401 = add nsw i32 %1400, 1
  store i32 %1401, ptr %37, align 4, !tbaa !9
  %1402 = load ptr, ptr %6, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.ctrl_t, ptr %1402, i32 0, i32 2
  %1404 = load i32, ptr %1403, align 8, !tbaa !41
  %1405 = and i32 %1404, 32
  %1406 = icmp ne i32 %1405, 0
  br i1 %1406, label %1407, label %1436

1407:                                             ; preds = %1368
  %1408 = load i32, ptr %11, align 4, !tbaa !9
  %1409 = load i32, ptr %22, align 4, !tbaa !9
  %1410 = load i32, ptr %24, align 4, !tbaa !9
  %1411 = load i32, ptr %57, align 4, !tbaa !9
  %1412 = load ptr, ptr %62, align 8, !tbaa !5
  %1413 = load i32, ptr %15, align 4, !tbaa !9
  %1414 = sext i32 %1413 to i64
  %1415 = getelementptr inbounds %struct.vnbr_t, ptr %1412, i64 %1414
  %1416 = getelementptr inbounds %struct.vnbr_t, ptr %1415, i32 0, i32 2
  %1417 = load i32, ptr %1416, align 4, !tbaa !61
  %1418 = add nsw i32 %1411, %1417
  %1419 = load ptr, ptr %62, align 8, !tbaa !5
  %1420 = load i32, ptr %15, align 4, !tbaa !9
  %1421 = sext i32 %1420 to i64
  %1422 = getelementptr inbounds %struct.vnbr_t, ptr %1419, i64 %1421
  %1423 = getelementptr inbounds %struct.vnbr_t, ptr %1422, i32 0, i32 1
  %1424 = load i32, ptr %1423, align 4, !tbaa !63
  %1425 = load ptr, ptr %61, align 8, !tbaa !5
  %1426 = getelementptr inbounds %struct.vkrinfo_t, ptr %1425, i32 0, i32 0
  %1427 = load i32, ptr %1426, align 4, !tbaa !51
  %1428 = sub nsw i32 %1424, %1427
  %1429 = load ptr, ptr %7, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct.graph_t, ptr %1429, i32 0, i32 17
  %1431 = load i32, ptr %1430, align 8, !tbaa !43
  %1432 = load ptr, ptr %7, align 8, !tbaa !5
  %1433 = getelementptr inbounds %struct.graph_t, ptr %1432, i32 0, i32 18
  %1434 = load i32, ptr %1433, align 4, !tbaa !44
  %1435 = call i32 (ptr, ...) @printf(ptr noundef @.str.40, i32 noundef %1408, i32 noundef %1409, i32 noundef %1410, i32 noundef %1418, i32 noundef %1428, i32 noundef %1431, i32 noundef %1434)
  br label %1436

1436:                                             ; preds = %1407, %1368
  %1437 = load ptr, ptr %6, align 8, !tbaa !5
  %1438 = getelementptr inbounds %struct.ctrl_t, ptr %1437, i32 0, i32 9
  %1439 = load i32, ptr %1438, align 4, !tbaa !35
  %1440 = icmp ne i32 %1439, 0
  br i1 %1440, label %1441, label %1498

1441:                                             ; preds = %1436
  %1442 = load ptr, ptr %6, align 8, !tbaa !5
  %1443 = load i32, ptr %22, align 4, !tbaa !9
  %1444 = load i32, ptr %24, align 4, !tbaa !9
  %1445 = load ptr, ptr %61, align 8, !tbaa !5
  %1446 = getelementptr inbounds %struct.vkrinfo_t, ptr %1445, i32 0, i32 0
  %1447 = load i32, ptr %1446, align 4, !tbaa !51
  %1448 = load ptr, ptr %62, align 8, !tbaa !5
  %1449 = load i32, ptr %15, align 4, !tbaa !9
  %1450 = sext i32 %1449 to i64
  %1451 = getelementptr inbounds %struct.vnbr_t, ptr %1448, i64 %1450
  %1452 = getelementptr inbounds %struct.vnbr_t, ptr %1451, i32 0, i32 1
  %1453 = load i32, ptr %1452, align 4, !tbaa !63
  %1454 = sub nsw i32 %1447, %1453
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %1442, i32 noundef %1443, i32 noundef %1444, i32 noundef %1454, ptr noundef %42)
  %1455 = load ptr, ptr %27, align 8, !tbaa !5
  %1456 = load i32, ptr %11, align 4, !tbaa !9
  %1457 = sext i32 %1456 to i64
  %1458 = getelementptr inbounds i32, ptr %1455, i64 %1457
  %1459 = load i32, ptr %1458, align 4, !tbaa !9
  store i32 %1459, ptr %14, align 4, !tbaa !9
  br label %1460

1460:                                             ; preds = %1494, %1441
  %1461 = load i32, ptr %14, align 4, !tbaa !9
  %1462 = load ptr, ptr %27, align 8, !tbaa !5
  %1463 = load i32, ptr %11, align 4, !tbaa !9
  %1464 = add nsw i32 %1463, 1
  %1465 = sext i32 %1464 to i64
  %1466 = getelementptr inbounds i32, ptr %1462, i64 %1465
  %1467 = load i32, ptr %1466, align 4, !tbaa !9
  %1468 = icmp slt i32 %1461, %1467
  br i1 %1468, label %1469, label %1497

1469:                                             ; preds = %1460
  %1470 = load ptr, ptr %30, align 8, !tbaa !5
  %1471 = load ptr, ptr %29, align 8, !tbaa !5
  %1472 = load i32, ptr %14, align 4, !tbaa !9
  %1473 = sext i32 %1472 to i64
  %1474 = getelementptr inbounds i32, ptr %1471, i64 %1473
  %1475 = load i32, ptr %1474, align 4, !tbaa !9
  %1476 = sext i32 %1475 to i64
  %1477 = getelementptr inbounds i32, ptr %1470, i64 %1476
  %1478 = load i32, ptr %1477, align 4, !tbaa !9
  store i32 %1478, ptr %23, align 4, !tbaa !9
  %1479 = load i32, ptr %23, align 4, !tbaa !9
  %1480 = load i32, ptr %22, align 4, !tbaa !9
  %1481 = icmp ne i32 %1479, %1480
  br i1 %1481, label %1482, label %1493

1482:                                             ; preds = %1469
  %1483 = load i32, ptr %23, align 4, !tbaa !9
  %1484 = load i32, ptr %24, align 4, !tbaa !9
  %1485 = icmp ne i32 %1483, %1484
  br i1 %1485, label %1486, label %1493

1486:                                             ; preds = %1482
  %1487 = load ptr, ptr %6, align 8, !tbaa !5
  %1488 = load i32, ptr %22, align 4, !tbaa !9
  %1489 = load i32, ptr %23, align 4, !tbaa !9
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %1487, i32 noundef %1488, i32 noundef %1489, i32 noundef -1, ptr noundef %42)
  %1490 = load ptr, ptr %6, align 8, !tbaa !5
  %1491 = load i32, ptr %24, align 4, !tbaa !9
  %1492 = load i32, ptr %23, align 4, !tbaa !9
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %1490, i32 noundef %1491, i32 noundef %1492, i32 noundef 1, ptr noundef %42)
  br label %1493

1493:                                             ; preds = %1486, %1482, %1469
  br label %1494

1494:                                             ; preds = %1493
  %1495 = load i32, ptr %14, align 4, !tbaa !9
  %1496 = add nsw i32 %1495, 1
  store i32 %1496, ptr %14, align 4, !tbaa !9
  br label %1460, !llvm.loop !67

1497:                                             ; preds = %1460
  br label %1498

1498:                                             ; preds = %1497, %1436
  %1499 = load i32, ptr %19, align 4, !tbaa !9
  %1500 = sext i32 %1499 to i64
  %1501 = load ptr, ptr %28, align 8, !tbaa !5
  %1502 = load i32, ptr %11, align 4, !tbaa !9
  %1503 = load i32, ptr %19, align 4, !tbaa !9
  %1504 = mul nsw i32 %1502, %1503
  %1505 = sext i32 %1504 to i64
  %1506 = getelementptr inbounds i32, ptr %1501, i64 %1505
  %1507 = load ptr, ptr %31, align 8, !tbaa !5
  %1508 = load i32, ptr %24, align 4, !tbaa !9
  %1509 = load i32, ptr %19, align 4, !tbaa !9
  %1510 = mul nsw i32 %1508, %1509
  %1511 = sext i32 %1510 to i64
  %1512 = getelementptr inbounds i32, ptr %1507, i64 %1511
  %1513 = call ptr @libmetis__iaxpy(i64 noundef %1500, i32 noundef 1, ptr noundef %1506, i64 noundef 1, ptr noundef %1512, i64 noundef 1)
  %1514 = load i32, ptr %19, align 4, !tbaa !9
  %1515 = sext i32 %1514 to i64
  %1516 = load ptr, ptr %28, align 8, !tbaa !5
  %1517 = load i32, ptr %11, align 4, !tbaa !9
  %1518 = load i32, ptr %19, align 4, !tbaa !9
  %1519 = mul nsw i32 %1517, %1518
  %1520 = sext i32 %1519 to i64
  %1521 = getelementptr inbounds i32, ptr %1516, i64 %1520
  %1522 = load ptr, ptr %31, align 8, !tbaa !5
  %1523 = load i32, ptr %22, align 4, !tbaa !9
  %1524 = load i32, ptr %19, align 4, !tbaa !9
  %1525 = mul nsw i32 %1523, %1524
  %1526 = sext i32 %1525 to i64
  %1527 = getelementptr inbounds i32, ptr %1522, i64 %1526
  %1528 = call ptr @libmetis__iaxpy(i64 noundef %1515, i32 noundef -1, ptr noundef %1521, i64 noundef 1, ptr noundef %1527, i64 noundef 1)
  %1529 = load ptr, ptr %6, align 8, !tbaa !5
  %1530 = load ptr, ptr %7, align 8, !tbaa !5
  %1531 = load i32, ptr %11, align 4, !tbaa !9
  %1532 = load i32, ptr %22, align 4, !tbaa !9
  %1533 = load i32, ptr %24, align 4, !tbaa !9
  %1534 = load ptr, ptr %55, align 8, !tbaa !5
  %1535 = load ptr, ptr %39, align 8, !tbaa !5
  %1536 = load ptr, ptr %40, align 8, !tbaa !5
  %1537 = load ptr, ptr %41, align 8, !tbaa !5
  %1538 = load i32, ptr %51, align 4, !tbaa !9
  %1539 = load ptr, ptr %58, align 8, !tbaa !5
  %1540 = load ptr, ptr %59, align 8, !tbaa !5
  %1541 = load ptr, ptr %60, align 8, !tbaa !5
  call void @libmetis__KWayVolUpdate(ptr noundef %1529, ptr noundef %1530, i32 noundef %1531, i32 noundef %1532, i32 noundef %1533, ptr noundef %1534, ptr noundef %1535, ptr noundef %38, ptr noundef %1536, ptr noundef %1537, i32 noundef %1538, ptr noundef %1539, ptr noundef %1540, ptr noundef %1541)
  br label %1542

1542:                                             ; preds = %1498, %1366, %1235, %1147, %874, %643, %626, %602
  %1543 = load i32, ptr %13, align 4, !tbaa !9
  %1544 = add nsw i32 %1543, 1
  store i32 %1544, ptr %13, align 4, !tbaa !9
  br label %544

1545:                                             ; preds = %548
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %1546

1546:                                             ; preds = %1619, %1545
  %1547 = load i32, ptr %11, align 4, !tbaa !9
  %1548 = load i32, ptr %38, align 4, !tbaa !9
  %1549 = icmp slt i32 %1547, %1548
  br i1 %1549, label %1550, label %1622

1550:                                             ; preds = %1546
  %1551 = load ptr, ptr %40, align 8, !tbaa !5
  %1552 = load ptr, ptr %41, align 8, !tbaa !5
  %1553 = load i32, ptr %11, align 4, !tbaa !9
  %1554 = sext i32 %1553 to i64
  %1555 = getelementptr inbounds i32, ptr %1552, i64 %1554
  %1556 = load i32, ptr %1555, align 4, !tbaa !9
  %1557 = sext i32 %1556 to i64
  %1558 = getelementptr inbounds i32, ptr %1551, i64 %1557
  %1559 = load i32, ptr %1558, align 4, !tbaa !9
  %1560 = icmp ne i32 %1559, -1
  br i1 %1560, label %1576, label %1561

1561:                                             ; preds = %1550
  %1562 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef 1328, ptr noundef @.str.7)
  %1563 = load ptr, ptr %40, align 8, !tbaa !5
  %1564 = load ptr, ptr %41, align 8, !tbaa !5
  %1565 = load i32, ptr %11, align 4, !tbaa !9
  %1566 = sext i32 %1565 to i64
  %1567 = getelementptr inbounds i32, ptr %1564, i64 %1566
  %1568 = load i32, ptr %1567, align 4, !tbaa !9
  %1569 = sext i32 %1568 to i64
  %1570 = getelementptr inbounds i32, ptr %1563, i64 %1569
  %1571 = load i32, ptr %1570, align 4, !tbaa !9
  %1572 = icmp ne i32 %1571, -1
  br i1 %1572, label %1573, label %1574

1573:                                             ; preds = %1561
  br label %1575

1574:                                             ; preds = %1561
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.7, i32 noundef 1328, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #5
  unreachable

1575:                                             ; preds = %1573
  br label %1576

1576:                                             ; preds = %1575, %1550
  %1577 = load ptr, ptr %39, align 8, !tbaa !5
  %1578 = load ptr, ptr %41, align 8, !tbaa !5
  %1579 = load i32, ptr %11, align 4, !tbaa !9
  %1580 = sext i32 %1579 to i64
  %1581 = getelementptr inbounds i32, ptr %1578, i64 %1580
  %1582 = load i32, ptr %1581, align 4, !tbaa !9
  %1583 = sext i32 %1582 to i64
  %1584 = getelementptr inbounds i32, ptr %1577, i64 %1583
  %1585 = load i32, ptr %1584, align 4, !tbaa !9
  %1586 = icmp ne i32 %1585, 3
  br i1 %1586, label %1602, label %1587

1587:                                             ; preds = %1576
  %1588 = call i32 (ptr, ...) @printf(ptr noundef @.str.30, i32 noundef 1329, ptr noundef @.str.7)
  %1589 = load ptr, ptr %39, align 8, !tbaa !5
  %1590 = load ptr, ptr %41, align 8, !tbaa !5
  %1591 = load i32, ptr %11, align 4, !tbaa !9
  %1592 = sext i32 %1591 to i64
  %1593 = getelementptr inbounds i32, ptr %1590, i64 %1592
  %1594 = load i32, ptr %1593, align 4, !tbaa !9
  %1595 = sext i32 %1594 to i64
  %1596 = getelementptr inbounds i32, ptr %1589, i64 %1595
  %1597 = load i32, ptr %1596, align 4, !tbaa !9
  %1598 = icmp ne i32 %1597, 3
  br i1 %1598, label %1599, label %1600

1599:                                             ; preds = %1587
  br label %1601

1600:                                             ; preds = %1587
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.7, i32 noundef 1329, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #5
  unreachable

1601:                                             ; preds = %1599
  br label %1602

1602:                                             ; preds = %1601, %1576
  %1603 = load ptr, ptr %39, align 8, !tbaa !5
  %1604 = load ptr, ptr %41, align 8, !tbaa !5
  %1605 = load i32, ptr %11, align 4, !tbaa !9
  %1606 = sext i32 %1605 to i64
  %1607 = getelementptr inbounds i32, ptr %1604, i64 %1606
  %1608 = load i32, ptr %1607, align 4, !tbaa !9
  %1609 = sext i32 %1608 to i64
  %1610 = getelementptr inbounds i32, ptr %1603, i64 %1609
  store i32 3, ptr %1610, align 4, !tbaa !9
  %1611 = load ptr, ptr %40, align 8, !tbaa !5
  %1612 = load ptr, ptr %41, align 8, !tbaa !5
  %1613 = load i32, ptr %11, align 4, !tbaa !9
  %1614 = sext i32 %1613 to i64
  %1615 = getelementptr inbounds i32, ptr %1612, i64 %1614
  %1616 = load i32, ptr %1615, align 4, !tbaa !9
  %1617 = sext i32 %1616 to i64
  %1618 = getelementptr inbounds i32, ptr %1611, i64 %1617
  store i32 -1, ptr %1618, align 4, !tbaa !9
  br label %1619

1619:                                             ; preds = %1602
  %1620 = load i32, ptr %11, align 4, !tbaa !9
  %1621 = add nsw i32 %1620, 1
  store i32 %1621, ptr %11, align 4, !tbaa !9
  br label %1546, !llvm.loop !68

1622:                                             ; preds = %1546
  %1623 = load ptr, ptr %6, align 8, !tbaa !5
  %1624 = getelementptr inbounds %struct.ctrl_t, ptr %1623, i32 0, i32 2
  %1625 = load i32, ptr %1624, align 8, !tbaa !41
  %1626 = and i32 %1625, 8
  %1627 = icmp ne i32 %1626, 0
  br i1 %1627, label %1628, label %1673

1628:                                             ; preds = %1622
  %1629 = load i32, ptr %20, align 4, !tbaa !9
  %1630 = load i32, ptr %19, align 4, !tbaa !9
  %1631 = mul nsw i32 %1629, %1630
  %1632 = sext i32 %1631 to i64
  %1633 = load ptr, ptr %31, align 8, !tbaa !5
  %1634 = call i32 @libmetis__imin(i64 noundef %1632, ptr noundef %1633)
  %1635 = load i32, ptr %20, align 4, !tbaa !9
  %1636 = load i32, ptr %19, align 4, !tbaa !9
  %1637 = mul nsw i32 %1635, %1636
  %1638 = sext i32 %1637 to i64
  %1639 = load ptr, ptr %31, align 8, !tbaa !5
  %1640 = call i32 @libmetis__imax(i64 noundef %1638, ptr noundef %1639)
  %1641 = load ptr, ptr %7, align 8, !tbaa !5
  %1642 = load i32, ptr %20, align 4, !tbaa !9
  %1643 = load ptr, ptr %53, align 8, !tbaa !5
  %1644 = call float @libmetis__ComputeLoadImbalance(ptr noundef %1641, i32 noundef %1642, ptr noundef %1643)
  %1645 = fpext float %1644 to double
  %1646 = load ptr, ptr %7, align 8, !tbaa !5
  %1647 = getelementptr inbounds %struct.graph_t, ptr %1646, i32 0, i32 21
  %1648 = load i32, ptr %1647, align 8, !tbaa !42
  %1649 = load i32, ptr %37, align 4, !tbaa !9
  %1650 = load ptr, ptr %7, align 8, !tbaa !5
  %1651 = getelementptr inbounds %struct.graph_t, ptr %1650, i32 0, i32 17
  %1652 = load i32, ptr %1651, align 8, !tbaa !43
  %1653 = load ptr, ptr %7, align 8, !tbaa !5
  %1654 = getelementptr inbounds %struct.graph_t, ptr %1653, i32 0, i32 18
  %1655 = load i32, ptr %1654, align 4, !tbaa !44
  %1656 = call i32 (ptr, ...) @printf(ptr noundef @.str.32, i32 noundef %1634, i32 noundef %1640, double noundef %1645, i32 noundef %1648, i32 noundef %1649, i32 noundef %1652, i32 noundef %1655)
  %1657 = load ptr, ptr %6, align 8, !tbaa !5
  %1658 = getelementptr inbounds %struct.ctrl_t, ptr %1657, i32 0, i32 9
  %1659 = load i32, ptr %1658, align 4, !tbaa !35
  %1660 = icmp ne i32 %1659, 0
  br i1 %1660, label %1661, label %1671

1661:                                             ; preds = %1628
  %1662 = load i32, ptr %20, align 4, !tbaa !9
  %1663 = sext i32 %1662 to i64
  %1664 = load ptr, ptr %44, align 8, !tbaa !5
  %1665 = call i32 @libmetis__imax(i64 noundef %1663, ptr noundef %1664)
  %1666 = load i32, ptr %20, align 4, !tbaa !9
  %1667 = sext i32 %1666 to i64
  %1668 = load ptr, ptr %44, align 8, !tbaa !5
  %1669 = call i32 @libmetis__isum(i64 noundef %1667, ptr noundef %1668, i64 noundef 1)
  %1670 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %1665, i32 noundef %1669)
  br label %1671

1671:                                             ; preds = %1661, %1628
  %1672 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %1673

1673:                                             ; preds = %1671, %1622
  %1674 = load i32, ptr %37, align 4, !tbaa !9
  %1675 = icmp eq i32 %1674, 0
  br i1 %1675, label %1691, label %1676

1676:                                             ; preds = %1673
  %1677 = load i32, ptr %10, align 4, !tbaa !9
  %1678 = icmp eq i32 %1677, 1
  br i1 %1678, label %1679, label %1692

1679:                                             ; preds = %1676
  %1680 = load ptr, ptr %7, align 8, !tbaa !5
  %1681 = getelementptr inbounds %struct.graph_t, ptr %1680, i32 0, i32 18
  %1682 = load i32, ptr %1681, align 4, !tbaa !44
  %1683 = load i32, ptr %56, align 4, !tbaa !9
  %1684 = icmp eq i32 %1682, %1683
  br i1 %1684, label %1685, label %1692

1685:                                             ; preds = %1679
  %1686 = load ptr, ptr %7, align 8, !tbaa !5
  %1687 = getelementptr inbounds %struct.graph_t, ptr %1686, i32 0, i32 17
  %1688 = load i32, ptr %1687, align 8, !tbaa !43
  %1689 = load i32, ptr %26, align 4, !tbaa !9
  %1690 = icmp eq i32 %1688, %1689
  br i1 %1690, label %1691, label %1692

1691:                                             ; preds = %1685, %1673
  br label %1696

1692:                                             ; preds = %1685, %1679, %1676
  br label %1693

1693:                                             ; preds = %1692
  %1694 = load i32, ptr %17, align 4, !tbaa !9
  %1695 = add nsw i32 %1694, 1
  store i32 %1695, ptr %17, align 4, !tbaa !9
  br label %419, !llvm.loop !69

1696:                                             ; preds = %1691, %451, %419
  %1697 = load ptr, ptr %55, align 8, !tbaa !5
  call void @libmetis__ipqDestroy(ptr noundef %1697)
  %1698 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1698)
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, 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 4, 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
  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__iset(i64 noundef, i32 noundef, ptr noundef) #2

declare void @libmetis__ComputeSubDomainGraph(ptr noundef, ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

declare void @libmetis__wspacepop(ptr noundef) #2

declare ptr @libmetis__ipqCreate(i64 noundef) #2

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

declare i32 @libmetis__ipqGetTop(ptr noundef) #2

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

declare void @libmetis__ipqDestroy(ptr noundef) #2

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

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

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

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

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

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

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

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

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

declare ptr @libmetis__iaxpy(i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 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, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"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}
!15 = !{!14, !10, i64 8}
!16 = !{!14, !6, i64 16}
!17 = !{!14, !6, i64 24}
!18 = !{!14, !6, i64 40}
!19 = !{!14, !6, i64 144}
!20 = !{!14, !6, i64 152}
!21 = !{!14, !6, i64 120}
!22 = !{!14, !6, i64 128}
!23 = !{!24, !10, i64 92}
!24 = !{!"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, !12, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !12, i64 128, !25, i64 136, !25, i64 144, !25, i64 152, !25, i64 160, !25, i64 168, !25, i64 176, !25, i64 184, !25, i64 192, !25, i64 200, !25, i64 208, !25, i64 216, !25, i64 224, !6, i64 232, !26, i64 240, !26, i64 248, !26, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320}
!25 = !{!"double", !7, i64 0}
!26 = !{!"long", !7, i64 0}
!27 = !{!24, !6, i64 120}
!28 = !{!24, !6, i64 104}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!24, !6, i64 112}
!32 = !{!14, !6, i64 56}
!33 = distinct !{!33, !30}
!34 = distinct !{!34, !30}
!35 = !{!24, !10, i64 36}
!36 = !{!24, !6, i64 288}
!37 = !{!24, !6, i64 296}
!38 = !{!24, !6, i64 304}
!39 = !{!24, !6, i64 312}
!40 = !{!24, !10, i64 40}
!41 = !{!24, !10, i64 8}
!42 = !{!14, !10, i64 136}
!43 = !{!14, !10, i64 112}
!44 = !{!14, !10, i64 116}
!45 = !{!14, !6, i64 184}
!46 = !{!47, !10, i64 8}
!47 = !{!"vkrinfo_t", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!48 = distinct !{!48, !30}
!49 = !{!24, !6, i64 272}
!50 = !{!47, !10, i64 16}
!51 = !{!47, !10, i64 0}
!52 = !{!47, !10, i64 12}
!53 = !{!54, !10, i64 0}
!54 = !{!"vnbr_t", !10, i64 0, !10, i64 4, !10, i64 8}
!55 = distinct !{!55, !30}
!56 = distinct !{!56, !30}
!57 = distinct !{!57, !30}
!58 = distinct !{!58, !30}
!59 = !{!47, !10, i64 4}
!60 = !{!14, !6, i64 32}
!61 = !{!54, !10, i64 8}
!62 = distinct !{!62, !30}
!63 = !{!54, !10, i64 4}
!64 = distinct !{!64, !30}
!65 = distinct !{!65, !30}
!66 = distinct !{!66, !30}
!67 = distinct !{!67, !30}
!68 = distinct !{!68, !30}
!69 = distinct !{!69, !30}


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

%struct.vkrinfo_t = type { i32, i32, i32, i32, i32 }
%struct.vnbr_t = type { i32, i32, i32 }

@.str.4 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [139 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize = external hidden unnamed_addr constant [83 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Greedy_McKWayVolOptimize(ptr noundef %0, ptr noundef %1, i32 noundef %2, float noundef %3, i32 noundef %4) local_unnamed_addr #0 {
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %8 = icmp eq i32 %4, 1
  %9 = select i1 %8, i32 1, i32 2
  tail call void @libmetis__wspacepush(ptr noundef %0) #5
  %10 = load i32, ptr %1, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %1, i64 8
  %12 = load i32, ptr %11, align 8, !tbaa !11
  %13 = getelementptr inbounds i8, ptr %1, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %1, i64 24
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %1, i64 40
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %1, i64 152
  %20 = load ptr, ptr %19, align 8, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %1, i64 120
  %22 = load ptr, ptr %21, align 8, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %1, i64 128
  %24 = load ptr, ptr %23, align 8, !tbaa !17
  %25 = getelementptr inbounds i8, ptr %0, i64 92
  %26 = load i32, ptr %25, align 4, !tbaa !18
  %27 = getelementptr inbounds i8, ptr %0, i64 120
  %28 = load ptr, ptr %27, align 8, !tbaa !23
  %29 = tail call ptr @libmetis__rwspacemalloc(ptr noundef %0, i32 noundef %12) #5
  tail call void @libmetis__ComputeLoadImbalanceVec(ptr noundef nonnull %1, i32 noundef %26, ptr noundef %28, ptr noundef %29) #5
  %30 = getelementptr inbounds i8, ptr %0, i64 104
  %31 = load ptr, ptr %30, align 8, !tbaa !24
  %32 = tail call float @libmetis__rvecmaxdiff(i32 noundef %12, ptr noundef %29, ptr noundef %31) #5
  %33 = icmp eq i32 %4, 2
  br i1 %33, label %53, label %.preheader693

.preheader693:                                    ; preds = %5
  %34 = icmp sgt i32 %12, 0
  br i1 %34, label %.lr.ph, label %.loopexit694

.lr.ph:                                           ; preds = %.preheader693
  %35 = load ptr, ptr %30, align 8, !tbaa !24
  %wide.trip.count = zext nneg i32 %12 to i64
  %min.iters.check = icmp ult i32 %12, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %36 = getelementptr inbounds float, ptr %29, i64 %indvars.iv.ph
  %37 = load float, ptr %36, align 4, !tbaa !25
  %38 = getelementptr inbounds float, ptr %35, i64 %indvars.iv.ph
  %39 = load float, ptr %38, align 4, !tbaa !25
  %40 = fcmp ogt float %37, %39
  %..prol = select i1 %40, float %37, float %39
  store float %..prol, ptr %36, align 4, !tbaa !25
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %41 = add nsw i64 %wide.trip.count, -1
  %42 = icmp eq i64 %indvars.iv.ph, %41
  br i1 %42, label %.loopexit694, label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph
  %43 = shl nuw nsw i64 %wide.trip.count, 2
  %scevgep = getelementptr i8, ptr %29, i64 %43
  %scevgep887 = getelementptr i8, ptr %35, i64 %43
  %bound0 = icmp ult ptr %29, %scevgep887
  %bound1 = icmp ult ptr %35, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %44 = getelementptr inbounds float, ptr %29, i64 %index
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  %wide.load = load <4 x float>, ptr %44, align 4, !tbaa !25, !alias.scope !26, !noalias !29
  %wide.load888 = load <4 x float>, ptr %45, align 4, !tbaa !25, !alias.scope !26, !noalias !29
  %46 = getelementptr inbounds float, ptr %35, i64 %index
  %47 = getelementptr inbounds i8, ptr %46, i64 16
  %wide.load889 = load <4 x float>, ptr %46, align 4, !tbaa !25, !alias.scope !29
  %wide.load890 = load <4 x float>, ptr %47, align 4, !tbaa !25, !alias.scope !29
  %48 = fcmp ogt <4 x float> %wide.load, %wide.load889
  %49 = fcmp ogt <4 x float> %wide.load888, %wide.load890
  %50 = select <4 x i1> %48, <4 x float> %wide.load, <4 x float> %wide.load889
  %51 = select <4 x i1> %49, <4 x float> %wide.load888, <4 x float> %wide.load890
  store <4 x float> %50, ptr %44, align 4, !tbaa !25, !alias.scope !26, !noalias !29
  store <4 x float> %51, ptr %45, align 4, !tbaa !25, !alias.scope !26, !noalias !29
  %index.next = add nuw i64 %index, 8
  %52 = icmp eq i64 %index.next, %n.vec
  br i1 %52, label %middle.block, label %vector.body, !llvm.loop !31

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.loopexit694, label %scalar.ph.preheader

53:                                               ; preds = %5
  %54 = sext i32 %12 to i64
  %55 = load ptr, ptr %30, align 8, !tbaa !24
  %56 = tail call ptr @libmetis__rcopy(i64 noundef %54, ptr noundef %55, ptr noundef %29) #5
  br label %.loopexit694

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %57 = getelementptr inbounds float, ptr %29, i64 %indvars.iv
  %58 = load float, ptr %57, align 4, !tbaa !25
  %59 = getelementptr inbounds float, ptr %35, i64 %indvars.iv
  %60 = load float, ptr %59, align 4, !tbaa !25
  %61 = fcmp ogt float %58, %60
  %. = select i1 %61, float %58, float %60
  store float %., ptr %57, align 4, !tbaa !25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %62 = getelementptr inbounds float, ptr %29, i64 %indvars.iv.next
  %63 = load float, ptr %62, align 4, !tbaa !25
  %64 = getelementptr inbounds float, ptr %35, i64 %indvars.iv.next
  %65 = load float, ptr %64, align 4, !tbaa !25
  %66 = fcmp ogt float %63, %65
  %..1 = select i1 %66, float %63, float %65
  store float %..1, ptr %62, align 4, !tbaa !25
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %.loopexit694, label %scalar.ph, !llvm.loop !35

.loopexit694:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader693, %53
  %67 = mul nsw i32 %26, %12
  %68 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %67) #5
  %69 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %67) #5
  %70 = icmp sgt i32 %26, 0
  %71 = icmp sgt i32 %12, 0
  %or.cond874 = and i1 %70, %71
  br i1 %or.cond874, label %.preheader692.lr.ph.split.us, label %._crit_edge708

.preheader692.lr.ph.split.us:                     ; preds = %.loopexit694
  %72 = getelementptr inbounds i8, ptr %1, i64 56
  %73 = getelementptr inbounds i8, ptr %0, i64 112
  %74 = load ptr, ptr %73, align 8, !tbaa !36
  %75 = load ptr, ptr %72, align 8, !tbaa !37
  %76 = zext nneg i32 %12 to i64
  %wide.trip.count796 = zext nneg i32 %26 to i64
  %77 = mul nuw nsw i64 %wide.trip.count796, %76
  %78 = shl nuw i64 %77, 2
  %scevgep892 = getelementptr i8, ptr %69, i64 %78
  %scevgep893 = getelementptr i8, ptr %68, i64 %78
  %79 = shl nuw nsw i64 %76, 2
  %scevgep894 = getelementptr i8, ptr %75, i64 %79
  %min.iters.check907 = icmp ult i32 %12, 4
  %bound0895 = icmp ult ptr %69, %scevgep893
  %bound1896 = icmp ult ptr %68, %scevgep892
  %found.conflict897 = and i1 %bound0895, %bound1896
  %bound0898 = icmp ult ptr %69, %scevgep894
  %bound1899 = icmp ult ptr %75, %scevgep892
  %found.conflict900 = and i1 %bound0898, %bound1899
  %conflict.rdx = or i1 %found.conflict897, %found.conflict900
  %bound0901 = icmp ult ptr %68, %scevgep894
  %bound1902 = icmp ult ptr %75, %scevgep893
  %found.conflict903 = and i1 %bound0901, %bound1902
  %conflict.rdx904 = or i1 %conflict.rdx, %found.conflict903
  %n.vec910 = and i64 %76, 2147483644
  %cmp.n919 = icmp eq i64 %n.vec910, %76
  br label %.preheader692.us

.preheader692.us:                                 ; preds = %._crit_edge.us, %.preheader692.lr.ph.split.us
  %indvars.iv793 = phi i64 [ %indvars.iv.next794, %._crit_edge.us ], [ 0, %.preheader692.lr.ph.split.us ]
  %80 = mul nuw nsw i64 %indvars.iv793, %76
  %brmerge = select i1 %min.iters.check907, i1 true, i1 %conflict.rdx904
  br i1 %brmerge, label %scalar.ph906.preheader, label %vector.body912

vector.body912:                                   ; preds = %.preheader692.us, %vector.body912
  %index913 = phi i64 [ %index.next918, %vector.body912 ], [ 0, %.preheader692.us ]
  %81 = add nuw nsw i64 %index913, %80
  %82 = getelementptr inbounds float, ptr %74, i64 %81
  %wide.load914 = load <4 x float>, ptr %82, align 4, !tbaa !25
  %83 = getelementptr inbounds i32, ptr %75, i64 %index913
  %wide.load915 = load <4 x i32>, ptr %83, align 4, !tbaa !38, !alias.scope !39
  %84 = sitofp <4 x i32> %wide.load915 to <4 x float>
  %85 = fmul <4 x float> %wide.load914, %84
  %86 = getelementptr inbounds float, ptr %29, i64 %index913
  %wide.load916 = load <4 x float>, ptr %86, align 4, !tbaa !25
  %87 = fmul <4 x float> %wide.load916, %85
  %88 = fptosi <4 x float> %87 to <4 x i32>
  %89 = getelementptr inbounds i32, ptr %69, i64 %81
  store <4 x i32> %88, ptr %89, align 4, !tbaa !38, !alias.scope !42, !noalias !44
  %wide.load917 = load <4 x i32>, ptr %83, align 4, !tbaa !38, !alias.scope !39
  %90 = sitofp <4 x i32> %wide.load917 to <4 x float>
  %91 = fmul <4 x float> %wide.load914, %90
  %92 = fpext <4 x float> %91 to <4 x double>
  %93 = fmul <4 x double> %92, <double 2.000000e-01, double 2.000000e-01, double 2.000000e-01, double 2.000000e-01>
  %94 = fptosi <4 x double> %93 to <4 x i32>
  %95 = getelementptr inbounds i32, ptr %68, i64 %81
  store <4 x i32> %94, ptr %95, align 4, !tbaa !38, !alias.scope !46, !noalias !39
  %index.next918 = add nuw i64 %index913, 4
  %96 = icmp eq i64 %index.next918, %n.vec910
  br i1 %96, label %middle.block905, label %vector.body912, !llvm.loop !47

middle.block905:                                  ; preds = %vector.body912
  br i1 %cmp.n919, label %._crit_edge.us, label %scalar.ph906.preheader

scalar.ph906.preheader:                           ; preds = %.preheader692.us, %middle.block905
  %indvars.iv788.ph = phi i64 [ 0, %.preheader692.us ], [ %n.vec910, %middle.block905 ]
  br label %scalar.ph906

scalar.ph906:                                     ; preds = %scalar.ph906.preheader, %scalar.ph906
  %indvars.iv788 = phi i64 [ %indvars.iv.next789, %scalar.ph906 ], [ %indvars.iv788.ph, %scalar.ph906.preheader ]
  %97 = add nuw nsw i64 %indvars.iv788, %80
  %98 = getelementptr inbounds float, ptr %74, i64 %97
  %99 = load float, ptr %98, align 4, !tbaa !25
  %100 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv788
  %101 = load i32, ptr %100, align 4, !tbaa !38
  %102 = sitofp i32 %101 to float
  %103 = fmul float %99, %102
  %104 = getelementptr inbounds float, ptr %29, i64 %indvars.iv788
  %105 = load float, ptr %104, align 4, !tbaa !25
  %106 = fmul float %105, %103
  %107 = fptosi float %106 to i32
  %108 = getelementptr inbounds i32, ptr %69, i64 %97
  store i32 %107, ptr %108, align 4, !tbaa !38
  %109 = load i32, ptr %100, align 4, !tbaa !38
  %110 = sitofp i32 %109 to float
  %111 = fmul float %99, %110
  %112 = fpext float %111 to double
  %113 = fmul double %112, 2.000000e-01
  %114 = fptosi double %113 to i32
  %115 = getelementptr inbounds i32, ptr %68, i64 %97
  store i32 %114, ptr %115, align 4, !tbaa !38
  %indvars.iv.next789 = add nuw nsw i64 %indvars.iv788, 1
  %exitcond792.not = icmp eq i64 %indvars.iv.next789, %76
  br i1 %exitcond792.not, label %._crit_edge.us, label %scalar.ph906, !llvm.loop !48

._crit_edge.us:                                   ; preds = %scalar.ph906, %middle.block905
  %indvars.iv.next794 = add nuw nsw i64 %indvars.iv793, 1
  %exitcond797.not = icmp eq i64 %indvars.iv.next794, %wide.trip.count796
  br i1 %exitcond797.not, label %._crit_edge708, label %.preheader692.us, !llvm.loop !49

._crit_edge708:                                   ; preds = %._crit_edge.us, %.loopexit694
  %116 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %10) #5
  %117 = sext i32 %26 to i64
  %118 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %26) #5
  %119 = tail call ptr @libmetis__iset(i64 noundef %117, i32 noundef 2, ptr noundef %118) #5
  %120 = getelementptr inbounds i8, ptr %0, i64 36
  %121 = load i32, ptr %120, align 4, !tbaa !50
  %.not = icmp eq i32 %121, 0
  br i1 %.not, label %130, label %122

122:                                              ; preds = %._crit_edge708
  tail call void @libmetis__ComputeSubDomainGraph(ptr noundef nonnull %0, ptr noundef nonnull %1) #5
  %123 = getelementptr inbounds i8, ptr %0, i64 288
  %124 = load ptr, ptr %123, align 8, !tbaa !51
  %125 = getelementptr inbounds i8, ptr %0, i64 296
  %126 = load ptr, ptr %125, align 8, !tbaa !52
  %127 = getelementptr inbounds i8, ptr %0, i64 312
  %128 = load ptr, ptr %127, align 8, !tbaa !53
  %129 = tail call ptr @libmetis__iset(i64 noundef %117, i32 noundef 0, ptr noundef %128) #5
  br label %130

130:                                              ; preds = %122, %._crit_edge708
  %.0629 = phi ptr [ %126, %122 ], [ null, %._crit_edge708 ]
  %.0628 = phi ptr [ %129, %122 ], [ null, %._crit_edge708 ]
  %.0627 = phi ptr [ %124, %122 ], [ null, %._crit_edge708 ]
  %131 = sext i32 %10 to i64
  %132 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %133 = tail call ptr @libmetis__iset(i64 noundef %131, i32 noundef 3, ptr noundef %132) #5
  %134 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %135 = tail call ptr @libmetis__iset(i64 noundef %131, i32 noundef -1, ptr noundef %134) #5
  %136 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %137 = getelementptr inbounds i8, ptr %0, i64 40
  %138 = load i32, ptr %137, align 8, !tbaa !54
  %.not642 = icmp eq i32 %138, 0
  br i1 %.not642, label %145, label %139

139:                                              ; preds = %130
  %140 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %141 = tail call ptr @libmetis__iset(i64 noundef %131, i32 noundef 0, ptr noundef %140) #5
  %142 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %143 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %144 = tail call ptr @libmetis__iset(i64 noundef %131, i32 noundef 0, ptr noundef %143) #5
  br label %145

145:                                              ; preds = %139, %130
  %.0632 = phi ptr [ %141, %139 ], [ null, %130 ]
  %.0631 = phi ptr [ %142, %139 ], [ null, %130 ]
  %.0630 = phi ptr [ %144, %139 ], [ null, %130 ]
  %146 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %147 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #5
  %148 = tail call ptr @libmetis__iset(i64 noundef %131, i32 noundef 0, ptr noundef %147) #5
  %149 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %26) #5
  %150 = tail call ptr @libmetis__iset(i64 noundef %117, i32 noundef -1, ptr noundef %149) #5
  %151 = getelementptr inbounds i8, ptr %0, i64 8
  %152 = load i32, ptr %151, align 8, !tbaa !55
  %153 = and i32 %152, 8
  %.not643 = icmp eq i32 %153, 0
  br i1 %.not643, label %178, label %154

154:                                              ; preds = %145
  %155 = select i1 %8, ptr @.str.34, ptr @.str.35
  %156 = sext i32 %67 to i64
  %157 = tail call i32 @libmetis__imin(i64 noundef %156, ptr noundef %24) #5
  %158 = tail call i32 @libmetis__imax(i64 noundef %156, ptr noundef %24) #5
  %159 = tail call i32 @libmetis__imax(i64 noundef %156, ptr noundef %69) #5
  %160 = tail call float @libmetis__ComputeLoadImbalance(ptr noundef nonnull %1, i32 noundef %26, ptr noundef %28) #5
  %161 = fpext float %160 to double
  %162 = fpext float %32 to double
  %163 = load i32, ptr %1, align 8, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %1, i64 136
  %165 = load i32, ptr %164, align 8, !tbaa !56
  %166 = getelementptr inbounds i8, ptr %1, i64 112
  %167 = load i32, ptr %166, align 8, !tbaa !57
  %168 = getelementptr inbounds i8, ptr %1, i64 116
  %169 = load i32, ptr %168, align 4, !tbaa !58
  %170 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.42, ptr noundef nonnull %155, i32 noundef %157, i32 noundef %158, i32 noundef %159, double noundef %161, double noundef %162, i32 noundef %163, i32 noundef %165, i32 noundef %167, i32 noundef %169, i32 noundef %2)
  %171 = load i32, ptr %120, align 4, !tbaa !50
  %.not644 = icmp eq i32 %171, 0
  br i1 %.not644, label %176, label %172

172:                                              ; preds = %154
  %173 = tail call i32 @libmetis__imax(i64 noundef %117, ptr noundef %.0627) #5
  %174 = tail call i32 @libmetis__isum(i64 noundef %117, ptr noundef %.0627, i64 noundef 1) #5
  %175 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %173, i32 noundef %174)
  br label %176

176:                                              ; preds = %172, %154
  %177 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %178

178:                                              ; preds = %176, %145
  %179 = tail call ptr @libmetis__ipqCreate(i64 noundef %131) #5
  %180 = icmp sgt i32 %2, 0
  br i1 %180, label %.lr.ph769, label %._crit_edge770

.lr.ph769:                                        ; preds = %178
  %181 = getelementptr inbounds i8, ptr %1, i64 116
  %182 = getelementptr inbounds i8, ptr %1, i64 112
  %183 = getelementptr inbounds i8, ptr %1, i64 136
  %184 = getelementptr inbounds i8, ptr %1, i64 184
  %185 = getelementptr inbounds i8, ptr %0, i64 272
  %186 = getelementptr inbounds i8, ptr %1, i64 32
  %187 = sext i32 %12 to i64
  %188 = sext i32 %67 to i64
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph769
  %.0613767 = phi i32 [ 0, %.lr.ph769 ], [ %.0613767.be, %.backedge.backedge ]
  %189 = call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %22) #5
  %190 = load i32, ptr %181, align 4, !tbaa !58
  %191 = icmp eq i32 %189, %190
  br i1 %191, label %198, label %192

192:                                              ; preds = %.backedge
  %193 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, i32 noundef 1149, ptr noundef nonnull @.str.7)
  %194 = call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %22) #5
  %195 = load i32, ptr %181, align 4, !tbaa !58
  %196 = icmp eq i32 %194, %195
  br i1 %196, label %198, label %197

197:                                              ; preds = %192
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.7, i32 noundef 1149, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #6
  unreachable

198:                                              ; preds = %192, %.backedge
  %199 = phi i32 [ %194, %192 ], [ %189, %.backedge ]
  br i1 %33, label %200, label %202

200:                                              ; preds = %198
  %201 = call i32 @libmetis__IsBalanced(ptr noundef nonnull %0, ptr noundef nonnull %1, float noundef 0.000000e+00) #5
  %.not645 = icmp eq i32 %201, 0
  br i1 %.not645, label %._crit_edge839, label %._crit_edge770

._crit_edge839:                                   ; preds = %200
  %.pre = load i32, ptr %181, align 4, !tbaa !58
  br label %202

202:                                              ; preds = %._crit_edge839, %198
  %203 = phi i32 [ %.pre, %._crit_edge839 ], [ %199, %198 ]
  %204 = load i32, ptr %182, align 8, !tbaa !57
  store i32 0, ptr %6, align 4, !tbaa !38
  %205 = load i32, ptr %120, align 4, !tbaa !50
  %.not646 = icmp eq i32 %205, 0
  br i1 %.not646, label %208, label %206

206:                                              ; preds = %202
  %207 = call i32 @libmetis__imax(i64 noundef %117, ptr noundef %.0627) #5
  store i32 %207, ptr %7, align 4, !tbaa !38
  br label %208

208:                                              ; preds = %206, %202
  %209 = load i32, ptr %183, align 8, !tbaa !56
  %210 = sdiv i32 %209, 4
  call void @libmetis__irandArrayPermute(i32 noundef %209, ptr noundef %116, i32 noundef %210, i32 noundef 1) #5
  %211 = load i32, ptr %183, align 8, !tbaa !56
  %212 = icmp sgt i32 %211, 0
  br i1 %212, label %.lr.ph710, label %.preheader691

.preheader691:                                    ; preds = %234, %208
  %213 = call i32 @libmetis__ipqGetTop(ptr noundef %179) #5
  %214 = icmp eq i32 %213, -1
  br i1 %214, label %.preheader690, label %.lr.ph760

.lr.ph710:                                        ; preds = %208, %234
  %indvars.iv798 = phi i64 [ %indvars.iv.next799, %234 ], [ 0, %208 ]
  %215 = getelementptr inbounds i32, ptr %116, i64 %indvars.iv798
  %216 = load i32, ptr %215, align 4, !tbaa !38
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %20, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !38
  %220 = load ptr, ptr %184, align 8, !tbaa !59
  %221 = sext i32 %219 to i64
  %222 = getelementptr inbounds %struct.vkrinfo_t, ptr %220, i64 %221, i32 2
  %223 = load i32, ptr %222, align 4, !tbaa !60
  %224 = call i32 @libmetis__ipqInsert(ptr noundef %179, i32 noundef %219, i32 noundef %223) #5
  %225 = getelementptr inbounds i32, ptr %133, i64 %221
  store i32 1, ptr %225, align 4, !tbaa !38
  %226 = getelementptr inbounds i32, ptr %135, i64 %221
  %227 = load i32, ptr %226, align 4, !tbaa !38
  %228 = icmp eq i32 %227, -1
  br i1 %228, label %234, label %229

229:                                              ; preds = %.lr.ph710
  %230 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 1168, ptr noundef nonnull @.str.7)
  %231 = load i32, ptr %226, align 4, !tbaa !38
  %232 = icmp eq i32 %231, -1
  br i1 %232, label %234, label %233

233:                                              ; preds = %229
  call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.7, i32 noundef 1168, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #6
  unreachable

234:                                              ; preds = %229, %.lr.ph710
  %235 = load i32, ptr %6, align 4, !tbaa !38
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds i32, ptr %136, i64 %236
  store i32 %219, ptr %237, align 4, !tbaa !38
  %238 = load i32, ptr %6, align 4, !tbaa !38
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %6, align 4, !tbaa !38
  store i32 %238, ptr %226, align 4, !tbaa !38
  %indvars.iv.next799 = add nuw nsw i64 %indvars.iv798, 1
  %240 = load i32, ptr %183, align 8, !tbaa !56
  %241 = sext i32 %240 to i64
  %242 = icmp slt i64 %indvars.iv.next799, %241
  br i1 %242, label %.lr.ph710, label %.preheader691, !llvm.loop !62

.preheader690:                                    ; preds = %.thread, %.preheader691
  %.0625.lcssa = phi i32 [ 0, %.preheader691 ], [ %.1626, %.thread ]
  %243 = load i32, ptr %6, align 4, !tbaa !38
  %244 = icmp sgt i32 %243, 0
  br i1 %244, label %.lr.ph764, label %._crit_edge765

.lr.ph760:                                        ; preds = %.preheader691, %.thread
  %245 = phi i32 [ %605, %.thread ], [ %213, %.preheader691 ]
  %.0604758 = phi i32 [ %604, %.thread ], [ 0, %.preheader691 ]
  %.0625756 = phi i32 [ %.1626, %.thread ], [ 0, %.preheader691 ]
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds i32, ptr %133, i64 %246
  store i32 2, ptr %247, align 4, !tbaa !38
  %248 = load ptr, ptr %184, align 8, !tbaa !59
  %249 = getelementptr inbounds %struct.vkrinfo_t, ptr %248, i64 %246
  %250 = load ptr, ptr %185, align 8, !tbaa !63
  %251 = getelementptr inbounds i8, ptr %249, i64 16
  %252 = load i32, ptr %251, align 4, !tbaa !64
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds %struct.vnbr_t, ptr %250, i64 %253
  %255 = getelementptr inbounds i32, ptr %22, i64 %246
  %256 = load i32, ptr %255, align 4, !tbaa !38
  br i1 %8, label %257, label %269

257:                                              ; preds = %.lr.ph760
  %258 = load i32, ptr %249, align 4, !tbaa !65
  %259 = icmp sgt i32 %258, 0
  br i1 %259, label %260, label %278

260:                                              ; preds = %257
  %261 = mul nsw i32 %245, %12
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %16, i64 %262
  %264 = mul nsw i32 %256, %12
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds i32, ptr %24, i64 %265
  %267 = getelementptr inbounds i32, ptr %68, i64 %265
  %268 = call i32 @libmetis__ivecaxpygez(i32 noundef %12, i32 noundef -1, ptr noundef %263, ptr noundef %266, ptr noundef %267) #5
  %.not648 = icmp eq i32 %268, 0
  br i1 %.not648, label %.thread, label %278

269:                                              ; preds = %.lr.ph760
  %270 = mul nsw i32 %245, %12
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %16, i64 %271
  %273 = mul nsw i32 %256, %12
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds i32, ptr %24, i64 %274
  %276 = getelementptr inbounds i32, ptr %68, i64 %274
  %277 = call i32 @libmetis__ivecaxpygez(i32 noundef %12, i32 noundef -1, ptr noundef %272, ptr noundef %275, ptr noundef %276) #5
  %.not647 = icmp eq i32 %277, 0
  br i1 %.not647, label %.thread, label %278

278:                                              ; preds = %269, %257, %260
  %279 = load i32, ptr %137, align 8, !tbaa !54
  %.not649 = icmp eq i32 %279, 0
  br i1 %.not649, label %282, label %280

280:                                              ; preds = %278
  %281 = call i32 @libmetis__IsArticulationNode(i32 noundef %245, ptr noundef %14, ptr noundef %18, ptr noundef nonnull %22, ptr noundef %.0632, ptr noundef %.0631, ptr noundef %.0630)
  %.not650 = icmp eq i32 %281, 0
  br i1 %.not650, label %282, label %.thread

282:                                              ; preds = %280, %278
  %283 = load i32, ptr %120, align 4, !tbaa !50
  %.not651 = icmp eq i32 %283, 0
  br i1 %.not651, label %.loopexit689, label %.preheader688

.preheader688:                                    ; preds = %282
  %284 = getelementptr inbounds i8, ptr %249, i64 12
  %285 = load i32, ptr %284, align 4, !tbaa !66
  %286 = icmp sgt i32 %285, 0
  br i1 %286, label %.lr.ph724, label %.loopexit689

.lr.ph724:                                        ; preds = %.preheader688, %._crit_edge722
  %indvars.iv812 = phi i64 [ %indvars.iv.next813, %._crit_edge722 ], [ 0, %.preheader688 ]
  %287 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %indvars.iv812
  %288 = load i32, ptr %287, align 4, !tbaa !67
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i32, ptr %119, i64 %289
  store i32 0, ptr %290, align 4, !tbaa !38
  %291 = getelementptr inbounds i32, ptr %.0627, i64 %289
  %292 = load i32, ptr %291, align 4, !tbaa !38
  %293 = icmp sgt i32 %292, 0
  br i1 %293, label %.lr.ph712, label %.preheader

.lr.ph712:                                        ; preds = %.lr.ph724
  %294 = getelementptr inbounds ptr, ptr %.0629, i64 %289
  %295 = load ptr, ptr %294, align 8, !tbaa !69
  br label %298

.preheader:                                       ; preds = %298, %.lr.ph724
  %.lcssa = phi i32 [ %292, %.lr.ph724 ], [ %303, %298 ]
  %296 = load i32, ptr %284, align 4, !tbaa !66
  %297 = icmp sgt i32 %296, 0
  %.pre840 = load i32, ptr %7, align 4
  br i1 %297, label %.lr.ph715, label %.thread858

.lr.ph715:                                        ; preds = %.preheader
  %wide.trip.count807 = zext nneg i32 %296 to i64
  br label %306

298:                                              ; preds = %.lr.ph712, %298
  %indvars.iv801 = phi i64 [ 0, %.lr.ph712 ], [ %indvars.iv.next802, %298 ]
  %299 = getelementptr inbounds i32, ptr %295, i64 %indvars.iv801
  %300 = load i32, ptr %299, align 4, !tbaa !38
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %.0628, i64 %301
  store i32 1, ptr %302, align 4, !tbaa !38
  %indvars.iv.next802 = add nuw nsw i64 %indvars.iv801, 1
  %303 = load i32, ptr %291, align 4, !tbaa !38
  %304 = sext i32 %303 to i64
  %305 = icmp slt i64 %indvars.iv.next802, %304
  br i1 %305, label %298, label %.preheader, !llvm.loop !70

306:                                              ; preds = %.lr.ph715, %320
  %indvars.iv804 = phi i64 [ 0, %.lr.ph715 ], [ %indvars.iv.next805, %320 ]
  %.0596714 = phi i32 [ 0, %.lr.ph715 ], [ %.1597, %320 ]
  %307 = icmp eq i64 %indvars.iv804, %indvars.iv812
  br i1 %307, label %320, label %308

308:                                              ; preds = %306
  %309 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %indvars.iv804
  %310 = load i32, ptr %309, align 4, !tbaa !67
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds i32, ptr %.0628, i64 %311
  %313 = load i32, ptr %312, align 4, !tbaa !38
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %315, label %320

315:                                              ; preds = %308
  %316 = getelementptr inbounds i32, ptr %.0627, i64 %311
  %317 = load i32, ptr %316, align 4, !tbaa !38
  %.not669 = icmp slt i32 %317, %.pre840
  br i1 %.not669, label %318, label %._crit_edge

318:                                              ; preds = %315
  %319 = add nsw i32 %.0596714, 1
  br label %320

320:                                              ; preds = %308, %318, %306
  %.1597 = phi i32 [ %.0596714, %306 ], [ %319, %318 ], [ %.0596714, %308 ]
  %indvars.iv.next805 = add nuw nsw i64 %indvars.iv804, 1
  %exitcond808.not = icmp eq i64 %indvars.iv.next805, %wide.trip.count807
  br i1 %exitcond808.not, label %._crit_edge, label %306, !llvm.loop !71

._crit_edge:                                      ; preds = %320, %315
  %.2598 = phi i32 [ %.1597, %320 ], [ %.pre840, %315 ]
  %.2598.fr = freeze i32 %.2598
  %321 = add nsw i32 %.2598.fr, %.lcssa
  %.not670 = icmp sle i32 %321, %.pre840
  %322 = icmp eq i32 %.2598.fr, 0
  %323 = or i1 %322, %.not670
  br i1 %323, label %324, label %327

324:                                              ; preds = %._crit_edge
  br i1 %322, label %.thread858, label %325

.thread858:                                       ; preds = %.preheader, %324
  br label %325

325:                                              ; preds = %324, %.thread858
  %326 = phi i32 [ 2, %.thread858 ], [ 1, %324 ]
  store i32 %326, ptr %290, align 4, !tbaa !38
  %.pre841 = load i32, ptr %291, align 4, !tbaa !38
  br label %327

327:                                              ; preds = %._crit_edge, %325
  %328 = phi i32 [ %.lcssa, %._crit_edge ], [ %.pre841, %325 ]
  %329 = icmp sgt i32 %328, 0
  br i1 %329, label %.lr.ph721, label %._crit_edge722

.lr.ph721:                                        ; preds = %327
  %330 = getelementptr inbounds ptr, ptr %.0629, i64 %289
  %331 = load ptr, ptr %330, align 8, !tbaa !69
  br label %332

332:                                              ; preds = %.lr.ph721, %332
  %indvars.iv809 = phi i64 [ 0, %.lr.ph721 ], [ %indvars.iv.next810, %332 ]
  %333 = getelementptr inbounds i32, ptr %331, i64 %indvars.iv809
  %334 = load i32, ptr %333, align 4, !tbaa !38
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds i32, ptr %.0628, i64 %335
  store i32 0, ptr %336, align 4, !tbaa !38
  %indvars.iv.next810 = add nuw nsw i64 %indvars.iv809, 1
  %337 = load i32, ptr %291, align 4, !tbaa !38
  %338 = sext i32 %337 to i64
  %339 = icmp slt i64 %indvars.iv.next810, %338
  br i1 %339, label %332, label %._crit_edge722, !llvm.loop !72

._crit_edge722:                                   ; preds = %332, %327
  %indvars.iv.next813 = add nuw nsw i64 %indvars.iv812, 1
  %340 = load i32, ptr %284, align 4, !tbaa !66
  %341 = sext i32 %340 to i64
  %342 = icmp slt i64 %indvars.iv.next813, %341
  br i1 %342, label %.lr.ph724, label %.loopexit689, !llvm.loop !73

.loopexit689:                                     ; preds = %._crit_edge722, %.preheader688, %282
  %343 = load i32, ptr %249, align 4, !tbaa !65
  %344 = icmp eq i32 %343, 0
  br i1 %344, label %345, label %353

345:                                              ; preds = %.loopexit689
  %346 = getelementptr inbounds i8, ptr %249, i64 4
  %347 = load i32, ptr %346, align 4, !tbaa !74
  %348 = icmp sgt i32 %347, 0
  br i1 %348, label %349, label %353

349:                                              ; preds = %345
  %350 = load ptr, ptr %186, align 8, !tbaa !75
  %351 = getelementptr inbounds i32, ptr %350, i64 %246
  %352 = load i32, ptr %351, align 4, !tbaa !38
  br label %353

353:                                              ; preds = %.loopexit689, %345, %349
  %354 = phi i32 [ %352, %349 ], [ 0, %345 ], [ 0, %.loopexit689 ]
  %355 = getelementptr inbounds i8, ptr %249, i64 12
  %356 = load i32, ptr %355, align 4, !tbaa !66
  br i1 %8, label %357, label %477

357:                                              ; preds = %353
  %invariant.op = xor i32 %354, -1
  %358 = icmp sgt i32 %356, 0
  br i1 %358, label %.lr.ph743, label %.thread

.lr.ph743:                                        ; preds = %357
  %359 = mul nsw i32 %245, %12
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i32, ptr %16, i64 %360
  %362 = zext nneg i32 %356 to i64
  %363 = add nsw i32 %356, -2
  br label %364

364:                                              ; preds = %.lr.ph743, %380
  %indvars.iv827 = phi i32 [ %363, %.lr.ph743 ], [ %indvars.iv.next828, %380 ]
  %indvars.iv824 = phi i64 [ %362, %.lr.ph743 ], [ %indvars.iv.next825, %380 ]
  %indvars.iv.next825 = add nsw i64 %indvars.iv824, -1
  %365 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %indvars.iv.next825
  %366 = load i32, ptr %365, align 4, !tbaa !67
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %119, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !38
  %.not658 = icmp eq i32 %369, 0
  br i1 %.not658, label %380, label %370

370:                                              ; preds = %364
  %371 = getelementptr inbounds i8, ptr %365, i64 8
  %372 = load i32, ptr %371, align 4, !tbaa !76
  %373 = icmp sgt i32 %372, %invariant.op
  br i1 %373, label %374, label %380

374:                                              ; preds = %370
  %375 = mul nsw i32 %366, %12
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds i32, ptr %24, i64 %376
  %378 = getelementptr inbounds i32, ptr %69, i64 %376
  %379 = call i32 @libmetis__ivecaxpylez(i32 noundef %12, i32 noundef 1, ptr noundef %361, ptr noundef %377, ptr noundef %378) #5
  %.not659 = icmp eq i32 %379, 0
  br i1 %.not659, label %380, label %382

380:                                              ; preds = %370, %374, %364
  %381 = icmp ugt i64 %indvars.iv824, 1
  %indvars.iv.next828 = add i32 %indvars.iv827, -1
  br i1 %381, label %364, label %.thread, !llvm.loop !77

382:                                              ; preds = %374
  %383 = trunc nuw nsw i64 %indvars.iv.next825 to i32
  %384 = icmp ugt i64 %indvars.iv824, 1
  br i1 %384, label %.lr.ph749, label %._crit_edge750

.lr.ph749:                                        ; preds = %382
  %385 = zext i32 %indvars.iv827 to i64
  br label %386

386:                                              ; preds = %.lr.ph749, %443
  %indvars.iv830 = phi i64 [ %385, %.lr.ph749 ], [ %indvars.iv.next831, %443 ]
  %.1609746 = phi i32 [ %383, %.lr.ph749 ], [ %.2610, %443 ]
  %.0621745 = phi i32 [ %366, %.lr.ph749 ], [ %.1622, %443 ]
  %387 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %indvars.iv830
  %388 = load i32, ptr %387, align 4, !tbaa !67
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds i32, ptr %119, i64 %389
  %391 = load i32, ptr %390, align 4, !tbaa !38
  %.not665 = icmp eq i32 %391, 0
  br i1 %.not665, label %443, label %392

392:                                              ; preds = %386
  %393 = getelementptr inbounds i8, ptr %387, i64 8
  %394 = load i32, ptr %393, align 4, !tbaa !76
  %395 = zext nneg i32 %.1609746 to i64
  %396 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %395
  %397 = getelementptr inbounds i8, ptr %396, i64 8
  %398 = load i32, ptr %397, align 4, !tbaa !76
  %399 = icmp sgt i32 %394, %398
  br i1 %399, label %400, label %406

400:                                              ; preds = %392
  %401 = mul nsw i32 %388, %12
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i32, ptr %24, i64 %402
  %404 = getelementptr inbounds i32, ptr %69, i64 %402
  %405 = call i32 @libmetis__ivecaxpylez(i32 noundef %12, i32 noundef 1, ptr noundef %361, ptr noundef %403, ptr noundef %404) #5
  %.not666 = icmp eq i32 %405, 0
  br i1 %.not666, label %._crit_edge842, label %441

._crit_edge842:                                   ; preds = %400
  %.pre843 = load i32, ptr %393, align 4, !tbaa !76
  %.pre844 = load i32, ptr %397, align 4, !tbaa !76
  br label %406

406:                                              ; preds = %._crit_edge842, %392
  %407 = phi i32 [ %.pre844, %._crit_edge842 ], [ %398, %392 ]
  %408 = phi i32 [ %.pre843, %._crit_edge842 ], [ %394, %392 ]
  %409 = icmp eq i32 %408, %407
  br i1 %409, label %410, label %422

410:                                              ; preds = %406
  %411 = getelementptr inbounds i8, ptr %387, i64 4
  %412 = load i32, ptr %411, align 4, !tbaa !78
  %413 = getelementptr inbounds i8, ptr %396, i64 4
  %414 = load i32, ptr %413, align 4, !tbaa !78
  %415 = icmp sgt i32 %412, %414
  br i1 %415, label %416, label %.thread860

416:                                              ; preds = %410
  %417 = mul nsw i32 %388, %12
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i32, ptr %24, i64 %418
  %420 = getelementptr inbounds i32, ptr %69, i64 %418
  %421 = call i32 @libmetis__ivecaxpylez(i32 noundef %12, i32 noundef 1, ptr noundef %361, ptr noundef %419, ptr noundef %420) #5
  %.not667 = icmp eq i32 %421, 0
  br i1 %.not667, label %._crit_edge845, label %441

._crit_edge845:                                   ; preds = %416
  %.pre846 = load i32, ptr %393, align 4, !tbaa !76
  %.pre847 = load i32, ptr %397, align 4, !tbaa !76
  br label %422

422:                                              ; preds = %._crit_edge845, %406
  %423 = phi i32 [ %.pre847, %._crit_edge845 ], [ %407, %406 ]
  %424 = phi i32 [ %.pre846, %._crit_edge845 ], [ %408, %406 ]
  %425 = icmp eq i32 %424, %423
  br i1 %425, label %.thread860, label %443

.thread860:                                       ; preds = %410, %422
  %426 = getelementptr inbounds i8, ptr %387, i64 4
  %427 = load i32, ptr %426, align 4, !tbaa !78
  %428 = getelementptr inbounds i8, ptr %396, i64 4
  %429 = load i32, ptr %428, align 4, !tbaa !78
  %430 = icmp eq i32 %427, %429
  br i1 %430, label %431, label %443

431:                                              ; preds = %.thread860
  %432 = mul nsw i32 %.0621745, %12
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i32, ptr %24, i64 %433
  %435 = getelementptr inbounds float, ptr %28, i64 %433
  %436 = mul nsw i32 %388, %12
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i32, ptr %24, i64 %437
  %439 = getelementptr inbounds float, ptr %28, i64 %437
  %440 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %12, ptr noundef %361, ptr noundef %29, i32 noundef 1, ptr noundef %434, ptr noundef %435, i32 noundef 1, ptr noundef %438, ptr noundef %439) #5
  %.not668 = icmp eq i32 %440, 0
  br i1 %.not668, label %443, label %441

441:                                              ; preds = %431, %416, %400
  %442 = trunc nuw i64 %indvars.iv830 to i32
  br label %443

443:                                              ; preds = %422, %.thread860, %431, %441, %386
  %.1622 = phi i32 [ %388, %441 ], [ %.0621745, %431 ], [ %.0621745, %.thread860 ], [ %.0621745, %422 ], [ %.0621745, %386 ]
  %.2610 = phi i32 [ %442, %441 ], [ %.1609746, %431 ], [ %.1609746, %.thread860 ], [ %.1609746, %422 ], [ %.1609746, %386 ]
  %indvars.iv.next831 = add nsw i64 %indvars.iv830, -1
  %444 = trunc nuw i64 %indvars.iv830 to i32
  %445 = icmp sgt i32 %444, 0
  br i1 %445, label %386, label %._crit_edge750, !llvm.loop !79

._crit_edge750:                                   ; preds = %443, %382
  %.0621.lcssa = phi i32 [ %366, %382 ], [ %.1622, %443 ]
  %.1609.lcssa = phi i32 [ %383, %382 ], [ %.2610, %443 ]
  %446 = zext nneg i32 %.1609.lcssa to i64
  %447 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %446
  %448 = getelementptr inbounds i8, ptr %447, i64 8
  %449 = load i32, ptr %448, align 4, !tbaa !76
  %450 = add nsw i32 %449, %354
  %451 = icmp sgt i32 %450, 0
  br i1 %451, label %.critedge, label %452

452:                                              ; preds = %._crit_edge750
  %453 = getelementptr inbounds i8, ptr %447, i64 4
  %454 = load i32, ptr %453, align 4, !tbaa !78
  %455 = load i32, ptr %249, align 4, !tbaa !65
  %456 = icmp sgt i32 %454, %455
  br i1 %456, label %.critedge, label %457

457:                                              ; preds = %452
  %458 = icmp eq i32 %454, %455
  br i1 %458, label %459, label %.thread

459:                                              ; preds = %457
  %460 = and i32 %.0604758, 1
  %461 = icmp eq i32 %460, 0
  br i1 %461, label %462, label %467

462:                                              ; preds = %459
  %463 = sext i32 %.0621.lcssa to i64
  %464 = getelementptr inbounds i32, ptr %119, i64 %463
  %465 = load i32, ptr %464, align 4, !tbaa !38
  %466 = icmp eq i32 %465, 2
  br i1 %466, label %.critedge, label %467

467:                                              ; preds = %462, %459
  %468 = mul nsw i32 %256, %12
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds i32, ptr %24, i64 %469
  %471 = getelementptr inbounds float, ptr %28, i64 %469
  %472 = mul nsw i32 %.0621.lcssa, %12
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds i32, ptr %24, i64 %473
  %475 = getelementptr inbounds float, ptr %28, i64 %473
  %476 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %12, ptr noundef %361, ptr noundef %29, i32 noundef -1, ptr noundef %470, ptr noundef %471, i32 noundef 1, ptr noundef %474, ptr noundef %475) #5
  %.not660 = icmp eq i32 %476, 0
  br i1 %.not660, label %.thread, label %.critedge

477:                                              ; preds = %353
  %478 = icmp sgt i32 %356, 0
  br i1 %478, label %.lr.ph729, label %.thread

.lr.ph729:                                        ; preds = %477
  %479 = mul nsw i32 %245, %12
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i32, ptr %16, i64 %480
  %482 = mul nsw i32 %256, %12
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %24, i64 %483
  %485 = getelementptr inbounds float, ptr %28, i64 %483
  %486 = zext nneg i32 %356 to i64
  %487 = add nsw i32 %356, -2
  br label %488

488:                                              ; preds = %.lr.ph729, %503
  %indvars.iv818 = phi i32 [ %487, %.lr.ph729 ], [ %indvars.iv.next819, %503 ]
  %indvars.iv815 = phi i64 [ %486, %.lr.ph729 ], [ %indvars.iv.next816, %503 ]
  %indvars.iv.next816 = add nsw i64 %indvars.iv815, -1
  %489 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %indvars.iv.next816
  %490 = load i32, ptr %489, align 4, !tbaa !67
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %119, i64 %491
  %493 = load i32, ptr %492, align 4, !tbaa !38
  %.not652 = icmp eq i32 %493, 0
  br i1 %.not652, label %503, label %494

494:                                              ; preds = %488
  %495 = mul nsw i32 %490, %12
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i32, ptr %24, i64 %496
  %498 = getelementptr inbounds i32, ptr %69, i64 %496
  %499 = call i32 @libmetis__ivecaxpylez(i32 noundef %12, i32 noundef 1, ptr noundef %481, ptr noundef %497, ptr noundef %498) #5
  %.not653 = icmp eq i32 %499, 0
  br i1 %.not653, label %500, label %505

500:                                              ; preds = %494
  %501 = getelementptr inbounds float, ptr %28, i64 %496
  %502 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %12, ptr noundef %481, ptr noundef %29, i32 noundef -1, ptr noundef %484, ptr noundef %485, i32 noundef 1, ptr noundef %497, ptr noundef %501) #5
  %.not654 = icmp eq i32 %502, 0
  br i1 %.not654, label %503, label %505

503:                                              ; preds = %500, %488
  %504 = icmp ugt i64 %indvars.iv815, 1
  %indvars.iv.next819 = add i32 %indvars.iv818, -1
  br i1 %504, label %488, label %.thread, !llvm.loop !80

505:                                              ; preds = %494, %500
  %506 = trunc nuw nsw i64 %indvars.iv.next816 to i32
  %507 = icmp ugt i64 %indvars.iv815, 1
  br i1 %507, label %.lr.ph735, label %._crit_edge736

.lr.ph735:                                        ; preds = %505
  %508 = zext i32 %indvars.iv818 to i64
  br label %509

509:                                              ; preds = %.lr.ph735, %526
  %indvars.iv821 = phi i64 [ %508, %.lr.ph735 ], [ %indvars.iv.next822, %526 ]
  %.4612732 = phi i32 [ %506, %.lr.ph735 ], [ %.5, %526 ]
  %.2623731 = phi i32 [ %490, %.lr.ph735 ], [ %.3624, %526 ]
  %510 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %indvars.iv821
  %511 = load i32, ptr %510, align 4, !tbaa !67
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds i32, ptr %119, i64 %512
  %514 = load i32, ptr %513, align 4, !tbaa !38
  %.not656 = icmp eq i32 %514, 0
  br i1 %.not656, label %._crit_edge850, label %515

._crit_edge850:                                   ; preds = %509
  %.pre854 = trunc nuw i64 %indvars.iv821 to i32
  br label %526

515:                                              ; preds = %509
  %516 = mul nsw i32 %.2623731, %12
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds i32, ptr %24, i64 %517
  %519 = getelementptr inbounds float, ptr %28, i64 %517
  %520 = mul nsw i32 %511, %12
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i32, ptr %24, i64 %521
  %523 = getelementptr inbounds float, ptr %28, i64 %521
  %524 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %12, ptr noundef %481, ptr noundef %29, i32 noundef 1, ptr noundef %518, ptr noundef %519, i32 noundef 1, ptr noundef %522, ptr noundef %523) #5
  %.not657 = icmp eq i32 %524, 0
  %spec.select677 = select i1 %.not657, i32 %.2623731, i32 %511
  %525 = trunc nuw i64 %indvars.iv821 to i32
  %spec.select678 = select i1 %.not657, i32 %.4612732, i32 %525
  br label %526

526:                                              ; preds = %._crit_edge850, %515
  %.pre-phi855 = phi i32 [ %.pre854, %._crit_edge850 ], [ %525, %515 ]
  %.3624 = phi i32 [ %.2623731, %._crit_edge850 ], [ %spec.select677, %515 ]
  %.5 = phi i32 [ %.4612732, %._crit_edge850 ], [ %spec.select678, %515 ]
  %indvars.iv.next822 = add nsw i64 %indvars.iv821, -1
  %527 = icmp sgt i32 %.pre-phi855, 0
  br i1 %527, label %509, label %._crit_edge736, !llvm.loop !81

._crit_edge736:                                   ; preds = %526, %505
  %.2623.lcssa = phi i32 [ %490, %505 ], [ %.3624, %526 ]
  %.4612.lcssa = phi i32 [ %506, %505 ], [ %.5, %526 ]
  %528 = zext nneg i32 %.4612.lcssa to i64
  %529 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %528
  %530 = getelementptr inbounds i8, ptr %529, i64 8
  %531 = load i32, ptr %530, align 4, !tbaa !76
  %532 = add nsw i32 %531, %354
  %533 = icmp slt i32 %532, 0
  br i1 %533, label %541, label %534

534:                                              ; preds = %._crit_edge736
  %535 = icmp eq i32 %532, 0
  br i1 %535, label %536, label %.critedge

536:                                              ; preds = %534
  %537 = getelementptr inbounds i8, ptr %529, i64 4
  %538 = load i32, ptr %537, align 4, !tbaa !78
  %539 = load i32, ptr %249, align 4, !tbaa !65
  %540 = icmp slt i32 %538, %539
  br i1 %540, label %541, label %.critedge

541:                                              ; preds = %536, %._crit_edge736
  %542 = mul nsw i32 %.2623.lcssa, %12
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds i32, ptr %24, i64 %543
  %545 = getelementptr inbounds float, ptr %28, i64 %543
  %546 = call i32 @libmetis__BetterBalanceKWay(i32 noundef %12, ptr noundef %481, ptr noundef %29, i32 noundef -1, ptr noundef %484, ptr noundef %485, i32 noundef 1, ptr noundef %544, ptr noundef %545) #5
  %.not655 = icmp eq i32 %546, 0
  br i1 %.not655, label %.thread, label %.critedge

.critedge:                                        ; preds = %462, %467, %452, %._crit_edge750, %534, %536, %541
  %.pre-phi849 = phi i64 [ %446, %462 ], [ %446, %467 ], [ %446, %452 ], [ %446, %._crit_edge750 ], [ %528, %534 ], [ %528, %536 ], [ %528, %541 ]
  %.6620 = phi i32 [ %.0621.lcssa, %462 ], [ %.0621.lcssa, %467 ], [ %.0621.lcssa, %452 ], [ %.0621.lcssa, %._crit_edge750 ], [ %.2623.lcssa, %534 ], [ %.2623.lcssa, %536 ], [ %.2623.lcssa, %541 ]
  %547 = getelementptr inbounds %struct.vnbr_t, ptr %254, i64 %.pre-phi849
  %548 = getelementptr inbounds i8, ptr %547, i64 4
  %549 = load i32, ptr %548, align 4, !tbaa !78
  %550 = load i32, ptr %249, align 4, !tbaa !65
  %.neg = sub i32 %550, %549
  %551 = load i32, ptr %182, align 8, !tbaa !57
  %552 = add i32 %.neg, %551
  store i32 %552, ptr %182, align 8, !tbaa !57
  %553 = getelementptr inbounds i8, ptr %547, i64 8
  %554 = load i32, ptr %553, align 4, !tbaa !76
  %555 = load i32, ptr %181, align 4, !tbaa !58
  %556 = add i32 %554, %354
  %557 = sub i32 %555, %556
  store i32 %557, ptr %181, align 4, !tbaa !58
  store i32 %.6620, ptr %255, align 4, !tbaa !38
  %558 = add nsw i32 %.0625756, 1
  %559 = load i32, ptr %151, align 8, !tbaa !55
  %560 = and i32 %559, 32
  %.not661 = icmp eq i32 %560, 0
  br i1 %.not661, label %570, label %561

561:                                              ; preds = %.critedge
  %562 = load i32, ptr %553, align 4, !tbaa !76
  %563 = add nsw i32 %562, %354
  %564 = load i32, ptr %548, align 4, !tbaa !78
  %565 = load i32, ptr %249, align 4, !tbaa !65
  %566 = sub nsw i32 %564, %565
  %567 = load i32, ptr %182, align 8, !tbaa !57
  %568 = load i32, ptr %181, align 4, !tbaa !58
  %569 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40, i32 noundef %245, i32 noundef %256, i32 noundef %.6620, i32 noundef %563, i32 noundef %566, i32 noundef %567, i32 noundef %568)
  br label %570

570:                                              ; preds = %561, %.critedge
  %571 = load i32, ptr %120, align 4, !tbaa !50
  %.not662 = icmp eq i32 %571, 0
  br i1 %.not662, label %.loopexit, label %572

572:                                              ; preds = %570
  %573 = load i32, ptr %249, align 4, !tbaa !65
  %574 = load i32, ptr %548, align 4, !tbaa !78
  %575 = sub nsw i32 %573, %574
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef nonnull %0, i32 noundef %256, i32 noundef %.6620, i32 noundef %575, ptr noundef nonnull %7) #5
  %576 = getelementptr inbounds i32, ptr %14, i64 %246
  %577 = load i32, ptr %576, align 4, !tbaa !38
  %578 = getelementptr i8, ptr %576, i64 4
  %579 = load i32, ptr %578, align 4, !tbaa !38
  %580 = icmp slt i32 %577, %579
  br i1 %580, label %.lr.ph755.preheader, label %.loopexit

.lr.ph755.preheader:                              ; preds = %572
  %581 = sext i32 %577 to i64
  br label %.lr.ph755

.lr.ph755:                                        ; preds = %.lr.ph755.preheader, %589
  %582 = phi i32 [ %579, %.lr.ph755.preheader ], [ %590, %589 ]
  %indvars.iv833 = phi i64 [ %581, %.lr.ph755.preheader ], [ %indvars.iv.next834, %589 ]
  %583 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv833
  %584 = load i32, ptr %583, align 4, !tbaa !38
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds i32, ptr %22, i64 %585
  %587 = load i32, ptr %586, align 4, !tbaa !38
  %.not663 = icmp eq i32 %587, %256
  %.not664 = icmp eq i32 %587, %.6620
  %or.cond = select i1 %.not663, i1 true, i1 %.not664
  br i1 %or.cond, label %589, label %588

588:                                              ; preds = %.lr.ph755
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %0, i32 noundef %256, i32 noundef %587, i32 noundef -1, ptr noundef nonnull %7) #5
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %0, i32 noundef %.6620, i32 noundef %587, i32 noundef 1, ptr noundef nonnull %7) #5
  %.pre848 = load i32, ptr %578, align 4, !tbaa !38
  br label %589

589:                                              ; preds = %.lr.ph755, %588
  %590 = phi i32 [ %582, %.lr.ph755 ], [ %.pre848, %588 ]
  %indvars.iv.next834 = add nsw i64 %indvars.iv833, 1
  %591 = sext i32 %590 to i64
  %592 = icmp slt i64 %indvars.iv.next834, %591
  br i1 %592, label %.lr.ph755, label %.loopexit, !llvm.loop !82

.loopexit:                                        ; preds = %589, %572, %570
  %593 = mul nsw i32 %245, %12
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds i32, ptr %16, i64 %594
  %596 = mul nsw i32 %.6620, %12
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds i32, ptr %24, i64 %597
  %599 = call ptr @libmetis__iaxpy(i64 noundef %187, i32 noundef 1, ptr noundef %595, i64 noundef 1, ptr noundef %598, i64 noundef 1) #5
  %600 = mul nsw i32 %256, %12
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds i32, ptr %24, i64 %601
  %603 = call ptr @libmetis__iaxpy(i64 noundef %187, i32 noundef -1, ptr noundef %595, i64 noundef 1, ptr noundef %602, i64 noundef 1) #5
  call void @libmetis__KWayVolUpdate(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %245, i32 noundef %256, i32 noundef %.6620, ptr noundef %179, ptr noundef %133, ptr noundef nonnull %6, ptr noundef %135, ptr noundef %136, i32 noundef %9, ptr noundef %148, ptr noundef %150, ptr noundef %146)
  br label %.thread

.thread:                                          ; preds = %503, %380, %477, %357, %467, %457, %541, %280, %269, %260, %.loopexit
  %.1626 = phi i32 [ %.0625756, %280 ], [ %558, %.loopexit ], [ %.0625756, %541 ], [ %.0625756, %260 ], [ %.0625756, %269 ], [ %.0625756, %457 ], [ %.0625756, %467 ], [ %.0625756, %357 ], [ %.0625756, %477 ], [ %.0625756, %380 ], [ %.0625756, %503 ]
  %604 = add nuw nsw i32 %.0604758, 1
  %605 = call i32 @libmetis__ipqGetTop(ptr noundef %179) #5
  %606 = icmp eq i32 %605, -1
  br i1 %606, label %.preheader690, label %.lr.ph760

.lr.ph764:                                        ; preds = %.preheader690, %630
  %indvars.iv836 = phi i64 [ %indvars.iv.next837, %630 ], [ 0, %.preheader690 ]
  %607 = getelementptr inbounds i32, ptr %136, i64 %indvars.iv836
  %608 = load i32, ptr %607, align 4, !tbaa !38
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds i32, ptr %135, i64 %609
  %611 = load i32, ptr %610, align 4, !tbaa !38
  %.not673 = icmp eq i32 %611, -1
  br i1 %.not673, label %612, label %619

612:                                              ; preds = %.lr.ph764
  %613 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef 1328, ptr noundef nonnull @.str.7)
  %614 = load i32, ptr %607, align 4, !tbaa !38
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds i32, ptr %135, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !38
  %.not674 = icmp eq i32 %617, -1
  br i1 %.not674, label %618, label %619

618:                                              ; preds = %612
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.7, i32 noundef 1328, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #6
  unreachable

619:                                              ; preds = %612, %.lr.ph764
  %.pre-phi = phi i64 [ %615, %612 ], [ %609, %.lr.ph764 ]
  %620 = phi i32 [ %614, %612 ], [ %608, %.lr.ph764 ]
  %621 = getelementptr inbounds i32, ptr %133, i64 %.pre-phi
  %622 = load i32, ptr %621, align 4, !tbaa !38
  %.not675 = icmp eq i32 %622, 3
  br i1 %.not675, label %623, label %._crit_edge851

._crit_edge851:                                   ; preds = %619
  %.pre852 = sext i32 %620 to i64
  br label %630

623:                                              ; preds = %619
  %624 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.30, i32 noundef 1329, ptr noundef nonnull @.str.7)
  %625 = load i32, ptr %607, align 4, !tbaa !38
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds i32, ptr %133, i64 %626
  %628 = load i32, ptr %627, align 4, !tbaa !38
  %.not676 = icmp eq i32 %628, 3
  br i1 %.not676, label %629, label %630

629:                                              ; preds = %623
  call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.7, i32 noundef 1329, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_McKWayVolOptimize) #6
  unreachable

630:                                              ; preds = %._crit_edge851, %623
  %.pre-phi853 = phi i64 [ %.pre852, %._crit_edge851 ], [ %626, %623 ]
  %631 = getelementptr inbounds i32, ptr %133, i64 %.pre-phi853
  store i32 3, ptr %631, align 4, !tbaa !38
  %632 = load i32, ptr %607, align 4, !tbaa !38
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds i32, ptr %135, i64 %633
  store i32 -1, ptr %634, align 4, !tbaa !38
  %indvars.iv.next837 = add nuw nsw i64 %indvars.iv836, 1
  %635 = load i32, ptr %6, align 4, !tbaa !38
  %636 = sext i32 %635 to i64
  %637 = icmp slt i64 %indvars.iv.next837, %636
  br i1 %637, label %.lr.ph764, label %._crit_edge765, !llvm.loop !83

._crit_edge765:                                   ; preds = %630, %.preheader690
  %638 = load i32, ptr %151, align 8, !tbaa !55
  %639 = and i32 %638, 8
  %.not671 = icmp eq i32 %639, 0
  br i1 %.not671, label %656, label %640

640:                                              ; preds = %._crit_edge765
  %641 = call i32 @libmetis__imin(i64 noundef %188, ptr noundef %24) #5
  %642 = call i32 @libmetis__imax(i64 noundef %188, ptr noundef %24) #5
  %643 = call float @libmetis__ComputeLoadImbalance(ptr noundef nonnull %1, i32 noundef %26, ptr noundef %28) #5
  %644 = fpext float %643 to double
  %645 = load i32, ptr %183, align 8, !tbaa !56
  %646 = load i32, ptr %182, align 8, !tbaa !57
  %647 = load i32, ptr %181, align 4, !tbaa !58
  %648 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32, i32 noundef %641, i32 noundef %642, double noundef %644, i32 noundef %645, i32 noundef %.0625.lcssa, i32 noundef %646, i32 noundef %647)
  %649 = load i32, ptr %120, align 4, !tbaa !50
  %.not672 = icmp eq i32 %649, 0
  br i1 %.not672, label %654, label %650

650:                                              ; preds = %640
  %651 = call i32 @libmetis__imax(i64 noundef %117, ptr noundef %.0627) #5
  %652 = call i32 @libmetis__isum(i64 noundef %117, ptr noundef %.0627, i64 noundef 1) #5
  %653 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %651, i32 noundef %652)
  br label %654

654:                                              ; preds = %650, %640
  %655 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %656

656:                                              ; preds = %654, %._crit_edge765
  %657 = icmp eq i32 %.0625.lcssa, 0
  br i1 %657, label %._crit_edge770, label %658

658:                                              ; preds = %656
  br i1 %8, label %659, label %667

659:                                              ; preds = %658
  %660 = load i32, ptr %181, align 4, !tbaa !58
  %661 = icmp eq i32 %660, %203
  br i1 %661, label %662, label %667

662:                                              ; preds = %659
  %663 = load i32, ptr %182, align 8, !tbaa !57
  %664 = icmp ne i32 %663, %204
  %665 = add nuw nsw i32 %.0613767, 1
  %666 = icmp slt i32 %665, %2
  %or.cond775 = select i1 %664, i1 %666, i1 false
  br i1 %or.cond775, label %.backedge.backedge, label %._crit_edge770

667:                                              ; preds = %658, %659
  %.old = add nuw nsw i32 %.0613767, 1
  %.old774 = icmp slt i32 %.old, %2
  br i1 %.old774, label %.backedge.backedge, label %._crit_edge770

.backedge.backedge:                               ; preds = %667, %662
  %.0613767.be = phi i32 [ %.old, %667 ], [ %665, %662 ]
  br label %.backedge, !llvm.loop !84

._crit_edge770:                                   ; preds = %667, %200, %662, %656, %178
  call void @libmetis__ipqDestroy(ptr noundef %179) #5
  call void @libmetis__wspacepop(ptr noundef nonnull %0) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  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__iset(i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

declare void @libmetis__ComputeSubDomainGraph(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #2

declare ptr @libmetis__ipqCreate(i64 noundef) local_unnamed_addr #2

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

declare i32 @libmetis__ipqGetTop(ptr noundef) local_unnamed_addr #2

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

declare void @libmetis__ipqDestroy(ptr noundef) local_unnamed_addr #2

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

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

declare float @libmetis__rvecmaxdiff(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 i32 @libmetis__imin(i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

declare ptr @libmetis__iaxpy(i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #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 = { 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 = { nounwind }
attributes #6 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"graph_t", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 116, !10, i64 120, !10, i64 128, !7, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 8}
!12 = !{!6, !10, i64 16}
!13 = !{!6, !10, i64 24}
!14 = !{!6, !10, i64 40}
!15 = !{!6, !10, i64 152}
!16 = !{!6, !10, i64 120}
!17 = !{!6, !10, i64 128}
!18 = !{!19, !7, i64 92}
!19 = !{!"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, !20, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !20, i64 128, !21, i64 136, !21, i64 144, !21, i64 152, !21, i64 160, !21, i64 168, !21, i64 176, !21, i64 184, !21, i64 192, !21, i64 200, !21, i64 208, !21, i64 216, !21, i64 224, !10, i64 232, !22, i64 240, !22, i64 248, !22, 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}
!20 = !{!"float", !8, i64 0}
!21 = !{!"double", !8, i64 0}
!22 = !{!"long", !8, i64 0}
!23 = !{!19, !10, i64 120}
!24 = !{!19, !10, i64 104}
!25 = !{!20, !20, i64 0}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !32, !33, !34}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!"llvm.loop.isvectorized", i32 1}
!34 = !{!"llvm.loop.unroll.runtime.disable"}
!35 = distinct !{!35, !32, !33}
!36 = !{!19, !10, i64 112}
!37 = !{!6, !10, i64 56}
!38 = !{!7, !7, i64 0}
!39 = !{!40}
!40 = distinct !{!40, !41}
!41 = distinct !{!41, !"LVerDomain"}
!42 = !{!43}
!43 = distinct !{!43, !41}
!44 = !{!45, !40}
!45 = distinct !{!45, !41}
!46 = !{!45}
!47 = distinct !{!47, !32, !33, !34}
!48 = distinct !{!48, !32, !33}
!49 = distinct !{!49, !32}
!50 = !{!19, !7, i64 36}
!51 = !{!19, !10, i64 288}
!52 = !{!19, !10, i64 296}
!53 = !{!19, !10, i64 312}
!54 = !{!19, !7, i64 40}
!55 = !{!19, !7, i64 8}
!56 = !{!6, !7, i64 136}
!57 = !{!6, !7, i64 112}
!58 = !{!6, !7, i64 116}
!59 = !{!6, !10, i64 184}
!60 = !{!61, !7, i64 8}
!61 = !{!"vkrinfo_t", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16}
!62 = distinct !{!62, !32}
!63 = !{!19, !10, i64 272}
!64 = !{!61, !7, i64 16}
!65 = !{!61, !7, i64 0}
!66 = !{!61, !7, i64 12}
!67 = !{!68, !7, i64 0}
!68 = !{!"vnbr_t", !7, i64 0, !7, i64 4, !7, i64 8}
!69 = !{!10, !10, i64 0}
!70 = distinct !{!70, !32}
!71 = distinct !{!71, !32}
!72 = distinct !{!72, !32}
!73 = distinct !{!73, !32}
!74 = !{!61, !7, i64 4}
!75 = !{!6, !10, i64 32}
!76 = !{!68, !7, i64 8}
!77 = distinct !{!77, !32}
!78 = !{!68, !7, i64 4}
!79 = distinct !{!79, !32}
!80 = distinct !{!80, !32}
!81 = distinct !{!81, !32}
!82 = distinct !{!82, !32}
!83 = distinct !{!83, !32}
!84 = distinct !{!84, !32}


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