; 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.33 = external hidden unnamed_addr constant [72 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
@__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize = external hidden unnamed_addr constant [81 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [67 x i8], align 1

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

102:                                              ; preds = %179, %5
  %103 = load i32, ptr %11, align 4, !tbaa !9
  %104 = load i32, ptr %19, align 4, !tbaa !9
  %105 = icmp slt i32 %103, %104
  br i1 %105, label %106, label %182

106:                                              ; preds = %102
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.ctrl_t, ptr %107, i32 0, i32 24
  %109 = load ptr, ptr %108, align 8, !tbaa !25
  %110 = load i32, ptr %11, align 4, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds float, ptr %109, i64 %111
  %113 = load float, ptr %112, align 4, !tbaa !11
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.graph_t, ptr %114, i32 0, i32 8
  %116 = load ptr, ptr %115, align 8, !tbaa !26
  %117 = getelementptr inbounds i32, ptr %116, i64 0
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = sitofp i32 %118 to float
  %120 = fmul float %113, %119
  %121 = fptosi float %120 to i32
  %122 = load ptr, ptr %35, align 8, !tbaa !5
  %123 = load i32, ptr %11, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds i32, ptr %122, i64 %124
  store i32 %121, ptr %125, align 4, !tbaa !9
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.ctrl_t, ptr %126, i32 0, i32 24
  %128 = load ptr, ptr %127, align 8, !tbaa !25
  %129 = load i32, ptr %11, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds float, ptr %128, i64 %130
  %132 = load float, ptr %131, align 4, !tbaa !11
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.graph_t, ptr %133, i32 0, i32 8
  %135 = load ptr, ptr %134, align 8, !tbaa !26
  %136 = getelementptr inbounds i32, ptr %135, i64 0
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = sitofp i32 %137 to float
  %139 = fmul float %132, %138
  %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 !27
  %143 = getelementptr inbounds float, ptr %142, i64 0
  %144 = load float, ptr %143, align 4, !tbaa !11
  %145 = fmul float %139, %144
  %146 = fptosi float %145 to i32
  %147 = load ptr, ptr %34, align 8, !tbaa !5
  %148 = load i32, ptr %11, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds i32, ptr %147, i64 %149
  store i32 %146, ptr %150, align 4, !tbaa !9
  %151 = load ptr, ptr %6, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.ctrl_t, ptr %151, i32 0, i32 24
  %153 = load ptr, ptr %152, align 8, !tbaa !25
  %154 = load i32, ptr %11, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds float, ptr %153, i64 %155
  %157 = load float, ptr %156, align 4, !tbaa !11
  %158 = load ptr, ptr %7, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.graph_t, ptr %158, i32 0, i32 8
  %160 = load ptr, ptr %159, align 8, !tbaa !26
  %161 = getelementptr inbounds i32, ptr %160, i64 0
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = sitofp i32 %162 to float
  %164 = fmul float %157, %163
  %165 = fpext float %164 to double
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.ctrl_t, ptr %166, i32 0, i32 23
  %168 = load ptr, ptr %167, align 8, !tbaa !27
  %169 = getelementptr inbounds float, ptr %168, i64 0
  %170 = load float, ptr %169, align 4, !tbaa !11
  %171 = fpext float %170 to double
  %172 = fdiv double 1.000000e+00, %171
  %173 = fmul double %165, %172
  %174 = fptosi double %173 to i32
  %175 = load ptr, ptr %33, align 8, !tbaa !5
  %176 = load i32, ptr %11, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i32, ptr %175, i64 %177
  store i32 %174, ptr %178, align 4, !tbaa !9
  br label %179

179:                                              ; preds = %106
  %180 = load i32, ptr %11, align 4, !tbaa !9
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr %11, align 4, !tbaa !9
  br label %102, !llvm.loop !28

182:                                              ; preds = %102
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = load i32, ptr %18, align 4, !tbaa !9
  %185 = call ptr @libmetis__iwspacemalloc(ptr noundef %183, i32 noundef %184)
  store ptr %185, ptr %30, align 8, !tbaa !5
  %186 = load i32, ptr %19, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  %189 = load i32, ptr %19, align 4, !tbaa !9
  %190 = call ptr @libmetis__iwspacemalloc(ptr noundef %188, i32 noundef %189)
  %191 = call ptr @libmetis__iset(i64 noundef %187, i32 noundef 2, ptr noundef %190)
  store ptr %191, ptr %42, align 8, !tbaa !5
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.ctrl_t, ptr %192, i32 0, i32 9
  %194 = load i32, ptr %193, align 4, !tbaa !30
  %195 = icmp ne i32 %194, 0
  br i1 %195, label %196, label %214

196:                                              ; preds = %182
  %197 = load ptr, ptr %6, align 8, !tbaa !5
  %198 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libmetis__ComputeSubDomainGraph(ptr noundef %197, ptr noundef %198)
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.ctrl_t, ptr %199, i32 0, i32 46
  %201 = load ptr, ptr %200, align 8, !tbaa !31
  store ptr %201, ptr %43, align 8, !tbaa !5
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.ctrl_t, ptr %202, i32 0, i32 47
  %204 = load ptr, ptr %203, align 8, !tbaa !32
  store ptr %204, ptr %45, align 8, !tbaa !5
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.ctrl_t, ptr %205, i32 0, i32 48
  %207 = load ptr, ptr %206, align 8, !tbaa !33
  store ptr %207, ptr %46, align 8, !tbaa !5
  %208 = load i32, ptr %19, align 4, !tbaa !9
  %209 = sext i32 %208 to i64
  %210 = load ptr, ptr %6, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.ctrl_t, ptr %210, i32 0, i32 49
  %212 = load ptr, ptr %211, align 8, !tbaa !34
  %213 = call ptr @libmetis__iset(i64 noundef %209, i32 noundef 0, ptr noundef %212)
  store ptr %213, ptr %44, align 8, !tbaa !5
  br label %214

214:                                              ; preds = %196, %182
  %215 = load i32, ptr %18, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = load i32, ptr %18, align 4, !tbaa !9
  %219 = call ptr @libmetis__iwspacemalloc(ptr noundef %217, i32 noundef %218)
  %220 = call ptr @libmetis__iset(i64 noundef %216, i32 noundef 3, ptr noundef %219)
  store ptr %220, ptr %38, align 8, !tbaa !5
  %221 = load i32, ptr %18, align 4, !tbaa !9
  %222 = sext i32 %221 to i64
  %223 = load ptr, ptr %6, align 8, !tbaa !5
  %224 = load i32, ptr %18, align 4, !tbaa !9
  %225 = call ptr @libmetis__iwspacemalloc(ptr noundef %223, i32 noundef %224)
  %226 = call ptr @libmetis__iset(i64 noundef %222, i32 noundef -1, ptr noundef %225)
  store ptr %226, ptr %39, align 8, !tbaa !5
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = load i32, ptr %18, align 4, !tbaa !9
  %229 = call ptr @libmetis__iwspacemalloc(ptr noundef %227, i32 noundef %228)
  store ptr %229, ptr %40, align 8, !tbaa !5
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.ctrl_t, ptr %230, i32 0, i32 10
  %232 = load i32, ptr %231, align 8, !tbaa !35
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %234, label %250

234:                                              ; preds = %214
  %235 = load i32, ptr %18, align 4, !tbaa !9
  %236 = sext i32 %235 to i64
  %237 = load ptr, ptr %6, align 8, !tbaa !5
  %238 = load i32, ptr %18, align 4, !tbaa !9
  %239 = call ptr @libmetis__iwspacemalloc(ptr noundef %237, i32 noundef %238)
  %240 = call ptr @libmetis__iset(i64 noundef %236, i32 noundef 0, ptr noundef %239)
  store ptr %240, ptr %47, align 8, !tbaa !5
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = load i32, ptr %18, align 4, !tbaa !9
  %243 = call ptr @libmetis__iwspacemalloc(ptr noundef %241, i32 noundef %242)
  store ptr %243, ptr %48, align 8, !tbaa !5
  %244 = load i32, ptr %18, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = load i32, ptr %18, align 4, !tbaa !9
  %248 = call ptr @libmetis__iwspacemalloc(ptr noundef %246, i32 noundef %247)
  %249 = call ptr @libmetis__iset(i64 noundef %245, i32 noundef 0, ptr noundef %248)
  store ptr %249, ptr %49, align 8, !tbaa !5
  br label %250

250:                                              ; preds = %234, %214
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = load i32, ptr %18, align 4, !tbaa !9
  %253 = call ptr @libmetis__iwspacemalloc(ptr noundef %251, i32 noundef %252)
  store ptr %253, ptr %56, align 8, !tbaa !5
  %254 = load i32, ptr %18, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = load i32, ptr %18, align 4, !tbaa !9
  %258 = call ptr @libmetis__iwspacemalloc(ptr noundef %256, i32 noundef %257)
  %259 = call ptr @libmetis__iset(i64 noundef %255, i32 noundef 0, ptr noundef %258)
  store ptr %259, ptr %54, align 8, !tbaa !5
  %260 = load i32, ptr %19, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = load i32, ptr %19, align 4, !tbaa !9
  %264 = call ptr @libmetis__iwspacemalloc(ptr noundef %262, i32 noundef %263)
  %265 = call ptr @libmetis__iset(i64 noundef %261, i32 noundef -1, ptr noundef %264)
  store ptr %265, ptr %55, align 8, !tbaa !5
  %266 = load ptr, ptr %6, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.ctrl_t, ptr %266, i32 0, i32 2
  %268 = load i32, ptr %267, align 8, !tbaa !36
  %269 = and i32 %268, 8
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %271, label %329

271:                                              ; preds = %250
  %272 = load i32, ptr %10, align 4, !tbaa !9
  %273 = icmp eq i32 %272, 1
  %274 = zext i1 %273 to i64
  %275 = select i1 %273, ptr @.str.34, ptr @.str.35
  %276 = load ptr, ptr %29, align 8, !tbaa !5
  %277 = load i32, ptr %19, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = load ptr, ptr %29, align 8, !tbaa !5
  %280 = call i64 @libmetis__iargmin(i64 noundef %278, ptr noundef %279)
  %281 = getelementptr inbounds i32, ptr %276, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !9
  %283 = load i32, ptr %19, align 4, !tbaa !9
  %284 = sext i32 %283 to i64
  %285 = load ptr, ptr %29, align 8, !tbaa !5
  %286 = call i32 @libmetis__imax(i64 noundef %284, ptr noundef %285)
  %287 = load ptr, ptr %33, align 8, !tbaa !5
  %288 = getelementptr inbounds i32, ptr %287, i64 0
  %289 = load i32, ptr %288, align 4, !tbaa !9
  %290 = load ptr, ptr %34, align 8, !tbaa !5
  %291 = getelementptr inbounds i32, ptr %290, i64 0
  %292 = load i32, ptr %291, align 4, !tbaa !9
  %293 = load ptr, ptr %7, align 8, !tbaa !5
  %294 = load i32, ptr %19, align 4, !tbaa !9
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.ctrl_t, ptr %295, i32 0, i32 25
  %297 = load ptr, ptr %296, align 8, !tbaa !37
  %298 = call float @libmetis__ComputeLoadImbalance(ptr noundef %293, i32 noundef %294, ptr noundef %297)
  %299 = fpext float %298 to double
  %300 = load ptr, ptr %7, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.graph_t, ptr %300, i32 0, i32 0
  %302 = load i32, ptr %301, align 8, !tbaa !13
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.graph_t, ptr %303, i32 0, i32 21
  %305 = load i32, ptr %304, align 8, !tbaa !38
  %306 = load ptr, ptr %7, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.graph_t, ptr %306, i32 0, i32 17
  %308 = load i32, ptr %307, align 8, !tbaa !39
  %309 = load ptr, ptr %7, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.graph_t, ptr %309, i32 0, i32 18
  %311 = load i32, ptr %310, align 4, !tbaa !40
  %312 = call i32 (ptr, ...) @printf(ptr noundef @.str.33, ptr noundef %275, i32 noundef %282, i32 noundef %286, i32 noundef %289, i32 noundef %292, double noundef %299, i32 noundef %302, i32 noundef %305, i32 noundef %308, i32 noundef %311)
  %313 = load ptr, ptr %6, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.ctrl_t, ptr %313, i32 0, i32 9
  %315 = load i32, ptr %314, align 4, !tbaa !30
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %327

317:                                              ; preds = %271
  %318 = load i32, ptr %19, align 4, !tbaa !9
  %319 = sext i32 %318 to i64
  %320 = load ptr, ptr %43, align 8, !tbaa !5
  %321 = call i32 @libmetis__imax(i64 noundef %319, ptr noundef %320)
  %322 = load i32, ptr %19, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = load ptr, ptr %43, align 8, !tbaa !5
  %325 = call i32 @libmetis__isum(i64 noundef %323, ptr noundef %324, i64 noundef 1)
  %326 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %321, i32 noundef %325)
  br label %327

327:                                              ; preds = %317, %271
  %328 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %329

329:                                              ; preds = %327, %250
  %330 = load i32, ptr %18, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = call ptr @libmetis__ipqCreate(i64 noundef %331)
  store ptr %332, ptr %51, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %1599, %329
  %334 = load i32, ptr %17, align 4, !tbaa !9
  %335 = load i32, ptr %8, align 4, !tbaa !9
  %336 = icmp slt i32 %334, %335
  br i1 %336, label %337, label %1602

337:                                              ; preds = %333
  %338 = load ptr, ptr %7, align 8, !tbaa !5
  %339 = load ptr, ptr %28, align 8, !tbaa !5
  %340 = call i32 @libmetis__ComputeVolume(ptr noundef %338, ptr noundef %339)
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.graph_t, ptr %341, i32 0, i32 18
  %343 = load i32, ptr %342, align 4, !tbaa !40
  %344 = icmp eq i32 %340, %343
  br i1 %344, label %357, label %345

345:                                              ; preds = %337
  %346 = call i32 (ptr, ...) @printf(ptr noundef @.str.36, i32 noundef 470, ptr noundef @.str.7)
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  %348 = load ptr, ptr %28, align 8, !tbaa !5
  %349 = call i32 @libmetis__ComputeVolume(ptr noundef %347, ptr noundef %348)
  %350 = load ptr, ptr %7, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.graph_t, ptr %350, i32 0, i32 18
  %352 = load i32, ptr %351, align 4, !tbaa !40
  %353 = icmp eq i32 %349, %352
  br i1 %353, label %354, label %355

354:                                              ; preds = %345
  br label %356

355:                                              ; preds = %345
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.7, i32 noundef 470, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #6
  unreachable

356:                                              ; preds = %354
  br label %357

357:                                              ; preds = %356, %337
  %358 = load i32, ptr %10, align 4, !tbaa !9
  %359 = icmp eq i32 %358, 2
  br i1 %359, label %360, label %388

360:                                              ; preds = %357
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %361

361:                                              ; preds = %379, %360
  %362 = load i32, ptr %11, align 4, !tbaa !9
  %363 = load i32, ptr %19, align 4, !tbaa !9
  %364 = icmp slt i32 %362, %363
  br i1 %364, label %365, label %382

365:                                              ; preds = %361
  %366 = load ptr, ptr %29, align 8, !tbaa !5
  %367 = load i32, ptr %11, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %366, i64 %368
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = load ptr, ptr %34, align 8, !tbaa !5
  %372 = load i32, ptr %11, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i32, ptr %371, i64 %373
  %375 = load i32, ptr %374, align 4, !tbaa !9
  %376 = icmp sgt i32 %370, %375
  br i1 %376, label %377, label %378

377:                                              ; preds = %365
  br label %382

378:                                              ; preds = %365
  br label %379

379:                                              ; preds = %378
  %380 = load i32, ptr %11, align 4, !tbaa !9
  %381 = add nsw i32 %380, 1
  store i32 %381, ptr %11, align 4, !tbaa !9
  br label %361, !llvm.loop !41

382:                                              ; preds = %377, %361
  %383 = load i32, ptr %11, align 4, !tbaa !9
  %384 = load i32, ptr %19, align 4, !tbaa !9
  %385 = icmp eq i32 %383, %384
  br i1 %385, label %386, label %387

386:                                              ; preds = %382
  br label %1602

387:                                              ; preds = %382
  br label %388

388:                                              ; preds = %387, %357
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.graph_t, ptr %389, i32 0, i32 17
  %391 = load i32, ptr %390, align 8, !tbaa !39
  store i32 %391, ptr %24, align 4, !tbaa !9
  %392 = load ptr, ptr %7, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.graph_t, ptr %392, i32 0, i32 18
  %394 = load i32, ptr %393, align 4, !tbaa !40
  store i32 %394, ptr %52, align 4, !tbaa !9
  store i32 0, ptr %37, align 4, !tbaa !9
  %395 = load ptr, ptr %6, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.ctrl_t, ptr %395, i32 0, i32 9
  %397 = load i32, ptr %396, align 4, !tbaa !30
  %398 = icmp ne i32 %397, 0
  br i1 %398, label %399, label %404

399:                                              ; preds = %388
  %400 = load i32, ptr %19, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = load ptr, ptr %43, align 8, !tbaa !5
  %403 = call i32 @libmetis__imax(i64 noundef %401, ptr noundef %402)
  store i32 %403, ptr %41, align 4, !tbaa !9
  br label %404

404:                                              ; preds = %399, %388
  %405 = load ptr, ptr %7, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.graph_t, ptr %405, i32 0, i32 21
  %407 = load i32, ptr %406, align 8, !tbaa !38
  %408 = load ptr, ptr %30, align 8, !tbaa !5
  %409 = load ptr, ptr %7, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.graph_t, ptr %409, i32 0, i32 21
  %411 = load i32, ptr %410, align 8, !tbaa !38
  %412 = sdiv i32 %411, 4
  call void @libmetis__irandArrayPermute(i32 noundef %407, ptr noundef %408, i32 noundef %412, i32 noundef 1)
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %413

413:                                              ; preds = %476, %404
  %414 = load i32, ptr %12, align 4, !tbaa !9
  %415 = load ptr, ptr %7, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.graph_t, ptr %415, i32 0, i32 21
  %417 = load i32, ptr %416, align 8, !tbaa !38
  %418 = icmp slt i32 %414, %417
  br i1 %418, label %419, label %479

419:                                              ; preds = %413
  %420 = load ptr, ptr %32, align 8, !tbaa !5
  %421 = load ptr, ptr %30, align 8, !tbaa !5
  %422 = load i32, ptr %12, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i32, ptr %421, i64 %423
  %425 = load i32, ptr %424, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds i32, ptr %420, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !9
  store i32 %428, ptr %11, align 4, !tbaa !9
  %429 = load ptr, ptr %51, align 8, !tbaa !5
  %430 = load i32, ptr %11, align 4, !tbaa !9
  %431 = load ptr, ptr %7, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.graph_t, ptr %431, i32 0, i32 27
  %433 = load ptr, ptr %432, align 8, !tbaa !42
  %434 = load i32, ptr %11, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds %struct.vkrinfo_t, ptr %433, i64 %435
  %437 = getelementptr inbounds %struct.vkrinfo_t, ptr %436, i32 0, i32 2
  %438 = load i32, ptr %437, align 4, !tbaa !43
  %439 = call i32 @libmetis__ipqInsert(ptr noundef %429, i32 noundef %430, i32 noundef %438)
  %440 = load ptr, ptr %38, align 8, !tbaa !5
  %441 = load i32, ptr %11, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i32, ptr %440, i64 %442
  store i32 1, ptr %443, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %419
  %445 = load ptr, ptr %39, align 8, !tbaa !5
  %446 = load i32, ptr %11, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds i32, ptr %445, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !9
  %450 = icmp eq i32 %449, -1
  br i1 %450, label %462, label %451

451:                                              ; preds = %444
  %452 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 495, ptr noundef @.str.7)
  %453 = load ptr, ptr %39, align 8, !tbaa !5
  %454 = load i32, ptr %11, align 4, !tbaa !9
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i32, ptr %453, i64 %455
  %457 = load i32, ptr %456, align 4, !tbaa !9
  %458 = icmp eq i32 %457, -1
  br i1 %458, label %459, label %460

459:                                              ; preds = %451
  br label %461

460:                                              ; preds = %451
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.7, i32 noundef 495, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #6
  unreachable

461:                                              ; preds = %459
  br label %462

462:                                              ; preds = %461, %444
  %463 = load i32, ptr %11, align 4, !tbaa !9
  %464 = load ptr, ptr %40, align 8, !tbaa !5
  %465 = load i32, ptr %37, align 4, !tbaa !9
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds i32, ptr %464, i64 %466
  store i32 %463, ptr %467, align 4, !tbaa !9
  %468 = load i32, ptr %37, align 4, !tbaa !9
  %469 = add nsw i32 %468, 1
  store i32 %469, ptr %37, align 4, !tbaa !9
  %470 = load ptr, ptr %39, align 8, !tbaa !5
  %471 = load i32, ptr %11, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i32, ptr %470, i64 %472
  store i32 %468, ptr %473, align 4, !tbaa !9
  br label %474

474:                                              ; preds = %462
  br label %475

475:                                              ; preds = %474
  br label %476

476:                                              ; preds = %475
  %477 = load i32, ptr %12, align 4, !tbaa !9
  %478 = add nsw i32 %477, 1
  store i32 %478, ptr %12, align 4, !tbaa !9
  br label %413, !llvm.loop !45

479:                                              ; preds = %413
  store i32 0, ptr %36, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %480

480:                                              ; preds = %1447, %479
  %481 = load ptr, ptr %51, align 8, !tbaa !5
  %482 = call i32 @libmetis__ipqGetTop(ptr noundef %481)
  store i32 %482, ptr %11, align 4, !tbaa !9
  %483 = icmp eq i32 %482, -1
  br i1 %483, label %484, label %485

484:                                              ; preds = %480
  br label %1450

485:                                              ; preds = %480
  %486 = load ptr, ptr %38, align 8, !tbaa !5
  %487 = load i32, ptr %11, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i32, ptr %486, i64 %488
  store i32 2, ptr %489, align 4, !tbaa !9
  %490 = load ptr, ptr %7, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.graph_t, ptr %490, i32 0, i32 27
  %492 = load ptr, ptr %491, align 8, !tbaa !42
  %493 = load i32, ptr %11, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds %struct.vkrinfo_t, ptr %492, i64 %494
  store ptr %495, ptr %57, align 8, !tbaa !5
  %496 = load ptr, ptr %6, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.ctrl_t, ptr %496, i32 0, i32 44
  %498 = load ptr, ptr %497, align 8, !tbaa !46
  %499 = load ptr, ptr %57, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.vkrinfo_t, ptr %499, i32 0, i32 4
  %501 = load i32, ptr %500, align 4, !tbaa !47
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds %struct.vnbr_t, ptr %498, i64 %502
  store ptr %503, ptr %58, align 8, !tbaa !5
  %504 = load ptr, ptr %28, 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
  %508 = load i32, ptr %507, align 4, !tbaa !9
  store i32 %508, ptr %21, align 4, !tbaa !9
  %509 = load ptr, ptr %7, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.graph_t, ptr %509, i32 0, i32 4
  %511 = load ptr, ptr %510, align 8, !tbaa !48
  %512 = load i32, ptr %11, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !9
  store i32 %515, ptr %25, align 4, !tbaa !9
  %516 = load i32, ptr %10, align 4, !tbaa !9
  %517 = icmp eq i32 %516, 1
  br i1 %517, label %518, label %539

518:                                              ; preds = %485
  %519 = load ptr, ptr %57, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.vkrinfo_t, ptr %519, i32 0, i32 0
  %521 = load i32, ptr %520, align 4, !tbaa !49
  %522 = icmp sgt i32 %521, 0
  br i1 %522, label %523, label %538

523:                                              ; preds = %518
  %524 = load ptr, ptr %29, align 8, !tbaa !5
  %525 = load i32, ptr %21, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i32, ptr %524, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = load i32, ptr %25, align 4, !tbaa !9
  %530 = sub nsw i32 %528, %529
  %531 = load ptr, ptr %33, align 8, !tbaa !5
  %532 = load i32, ptr %21, align 4, !tbaa !9
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds i32, ptr %531, i64 %533
  %535 = load i32, ptr %534, align 4, !tbaa !9
  %536 = icmp slt i32 %530, %535
  br i1 %536, label %537, label %538

537:                                              ; preds = %523
  br label %1447

538:                                              ; preds = %523, %518
  br label %555

539:                                              ; preds = %485
  %540 = load ptr, ptr %29, align 8, !tbaa !5
  %541 = load i32, ptr %21, align 4, !tbaa !9
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds i32, ptr %540, i64 %542
  %544 = load i32, ptr %543, align 4, !tbaa !9
  %545 = load i32, ptr %25, align 4, !tbaa !9
  %546 = sub nsw i32 %544, %545
  %547 = load ptr, ptr %33, align 8, !tbaa !5
  %548 = load i32, ptr %21, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  %551 = load i32, ptr %550, align 4, !tbaa !9
  %552 = icmp slt i32 %546, %551
  br i1 %552, label %553, label %554

553:                                              ; preds = %539
  br label %1447

554:                                              ; preds = %539
  br label %555

555:                                              ; preds = %554, %538
  %556 = load ptr, ptr %6, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.ctrl_t, ptr %556, i32 0, i32 10
  %558 = load i32, ptr %557, align 8, !tbaa !35
  %559 = icmp ne i32 %558, 0
  br i1 %559, label %560, label %571

560:                                              ; preds = %555
  %561 = load i32, ptr %11, align 4, !tbaa !9
  %562 = load ptr, ptr %26, align 8, !tbaa !5
  %563 = load ptr, ptr %27, align 8, !tbaa !5
  %564 = load ptr, ptr %28, align 8, !tbaa !5
  %565 = load ptr, ptr %47, align 8, !tbaa !5
  %566 = load ptr, ptr %48, align 8, !tbaa !5
  %567 = load ptr, ptr %49, align 8, !tbaa !5
  %568 = call i32 @libmetis__IsArticulationNode(i32 noundef %561, ptr noundef %562, ptr noundef %563, ptr noundef %564, ptr noundef %565, ptr noundef %566, ptr noundef %567)
  %569 = icmp ne i32 %568, 0
  br i1 %569, label %570, label %571

570:                                              ; preds = %560
  br label %1447

571:                                              ; preds = %560, %555
  %572 = load ptr, ptr %6, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.ctrl_t, ptr %572, i32 0, i32 9
  %574 = load i32, ptr %573, align 4, !tbaa !30
  %575 = icmp ne i32 %574, 0
  br i1 %575, label %576, label %716

576:                                              ; preds = %571
  br label %577

577:                                              ; preds = %576
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #5
  store i32 0, ptr %59, align 4, !tbaa !9
  br label %578

578:                                              ; preds = %710, %577
  %579 = load i32, ptr %59, align 4, !tbaa !9
  %580 = load ptr, ptr %57, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.vkrinfo_t, ptr %580, i32 0, i32 3
  %582 = load i32, ptr %581, align 4, !tbaa !50
  %583 = icmp slt i32 %579, %582
  br i1 %583, label %584, label %713

584:                                              ; preds = %578
  %585 = load ptr, ptr %42, align 8, !tbaa !5
  %586 = load ptr, ptr %58, align 8, !tbaa !5
  %587 = load i32, ptr %59, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct.vnbr_t, ptr %586, i64 %588
  %590 = getelementptr inbounds %struct.vnbr_t, ptr %589, i32 0, i32 0
  %591 = load i32, ptr %590, align 4, !tbaa !51
  store i32 %591, ptr %63, align 4, !tbaa !9
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds i32, ptr %585, i64 %592
  store i32 0, ptr %593, align 4, !tbaa !9
  store i32 0, ptr %60, align 4, !tbaa !9
  br label %594

594:                                              ; preds = %615, %584
  %595 = load i32, ptr %60, align 4, !tbaa !9
  %596 = load ptr, ptr %43, align 8, !tbaa !5
  %597 = load i32, ptr %63, align 4, !tbaa !9
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i32, ptr %596, i64 %598
  %600 = load i32, ptr %599, align 4, !tbaa !9
  %601 = icmp slt i32 %595, %600
  br i1 %601, label %602, label %618

602:                                              ; preds = %594
  %603 = load ptr, ptr %44, align 8, !tbaa !5
  %604 = load ptr, ptr %45, align 8, !tbaa !5
  %605 = load i32, ptr %63, align 4, !tbaa !9
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds ptr, ptr %604, i64 %606
  %608 = load ptr, ptr %607, align 8, !tbaa !5
  %609 = load i32, ptr %60, align 4, !tbaa !9
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i32, ptr %608, i64 %610
  %612 = load i32, ptr %611, align 4, !tbaa !9
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds i32, ptr %603, i64 %613
  store i32 1, ptr %614, align 4, !tbaa !9
  br label %615

615:                                              ; preds = %602
  %616 = load i32, ptr %60, align 4, !tbaa !9
  %617 = add nsw i32 %616, 1
  store i32 %617, ptr %60, align 4, !tbaa !9
  br label %594, !llvm.loop !53

618:                                              ; preds = %594
  store i32 0, ptr %62, align 4, !tbaa !9
  store i32 0, ptr %60, align 4, !tbaa !9
  br label %619

619:                                              ; preds = %658, %618
  %620 = load i32, ptr %60, align 4, !tbaa !9
  %621 = load ptr, ptr %57, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.vkrinfo_t, ptr %621, i32 0, i32 3
  %623 = load i32, ptr %622, align 4, !tbaa !50
  %624 = icmp slt i32 %620, %623
  br i1 %624, label %625, label %661

625:                                              ; preds = %619
  %626 = load i32, ptr %60, align 4, !tbaa !9
  %627 = load i32, ptr %59, align 4, !tbaa !9
  %628 = icmp eq i32 %626, %627
  br i1 %628, label %629, label %630

629:                                              ; preds = %625
  br label %658

630:                                              ; preds = %625
  %631 = load ptr, ptr %58, align 8, !tbaa !5
  %632 = load i32, ptr %60, align 4, !tbaa !9
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds %struct.vnbr_t, ptr %631, i64 %633
  %635 = getelementptr inbounds %struct.vnbr_t, ptr %634, i32 0, i32 0
  %636 = load i32, ptr %635, align 4, !tbaa !51
  store i32 %636, ptr %61, align 4, !tbaa !9
  %637 = load ptr, ptr %44, align 8, !tbaa !5
  %638 = load i32, ptr %61, align 4, !tbaa !9
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds i32, ptr %637, i64 %639
  %641 = load i32, ptr %640, align 4, !tbaa !9
  %642 = icmp eq i32 %641, 0
  br i1 %642, label %643, label %657

643:                                              ; preds = %630
  %644 = load ptr, ptr %43, align 8, !tbaa !5
  %645 = load i32, ptr %61, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %644, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !9
  %649 = load i32, ptr %41, align 4, !tbaa !9
  %650 = sub nsw i32 %649, 1
  %651 = icmp sgt i32 %648, %650
  br i1 %651, label %652, label %654

652:                                              ; preds = %643
  %653 = load i32, ptr %41, align 4, !tbaa !9
  store i32 %653, ptr %62, align 4, !tbaa !9
  br label %661

654:                                              ; preds = %643
  %655 = load i32, ptr %62, align 4, !tbaa !9
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %62, align 4, !tbaa !9
  br label %657

657:                                              ; preds = %654, %630
  br label %658

658:                                              ; preds = %657, %629
  %659 = load i32, ptr %60, align 4, !tbaa !9
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %60, align 4, !tbaa !9
  br label %619, !llvm.loop !54

661:                                              ; preds = %652, %619
  %662 = load ptr, ptr %43, align 8, !tbaa !5
  %663 = load i32, ptr %63, align 4, !tbaa !9
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds i32, ptr %662, i64 %664
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = load i32, ptr %62, align 4, !tbaa !9
  %668 = add nsw i32 %666, %667
  %669 = load i32, ptr %41, align 4, !tbaa !9
  %670 = icmp sle i32 %668, %669
  br i1 %670, label %671, label %676

671:                                              ; preds = %661
  %672 = load ptr, ptr %42, align 8, !tbaa !5
  %673 = load i32, ptr %63, align 4, !tbaa !9
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds i32, ptr %672, i64 %674
  store i32 1, ptr %675, align 4, !tbaa !9
  br label %676

676:                                              ; preds = %671, %661
  %677 = load i32, ptr %62, align 4, !tbaa !9
  %678 = icmp eq i32 %677, 0
  br i1 %678, label %679, label %684

679:                                              ; preds = %676
  %680 = load ptr, ptr %42, align 8, !tbaa !5
  %681 = load i32, ptr %63, align 4, !tbaa !9
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds i32, ptr %680, i64 %682
  store i32 2, ptr %683, align 4, !tbaa !9
  br label %684

684:                                              ; preds = %679, %676
  store i32 0, ptr %60, align 4, !tbaa !9
  br label %685

685:                                              ; preds = %706, %684
  %686 = load i32, ptr %60, align 4, !tbaa !9
  %687 = load ptr, ptr %43, align 8, !tbaa !5
  %688 = load i32, ptr %63, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds i32, ptr %687, i64 %689
  %691 = load i32, ptr %690, align 4, !tbaa !9
  %692 = icmp slt i32 %686, %691
  br i1 %692, label %693, label %709

693:                                              ; preds = %685
  %694 = load ptr, ptr %44, align 8, !tbaa !5
  %695 = load ptr, ptr %45, align 8, !tbaa !5
  %696 = load i32, ptr %63, align 4, !tbaa !9
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds ptr, ptr %695, i64 %697
  %699 = load ptr, ptr %698, align 8, !tbaa !5
  %700 = load i32, ptr %60, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i32, ptr %699, i64 %701
  %703 = load i32, ptr %702, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i32, ptr %694, i64 %704
  store i32 0, ptr %705, align 4, !tbaa !9
  br label %706

706:                                              ; preds = %693
  %707 = load i32, ptr %60, align 4, !tbaa !9
  %708 = add nsw i32 %707, 1
  store i32 %708, ptr %60, align 4, !tbaa !9
  br label %685, !llvm.loop !55

709:                                              ; preds = %685
  br label %710

710:                                              ; preds = %709
  %711 = load i32, ptr %59, align 4, !tbaa !9
  %712 = add nsw i32 %711, 1
  store i32 %712, ptr %59, align 4, !tbaa !9
  br label %578, !llvm.loop !56

713:                                              ; preds = %578
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  br label %714

714:                                              ; preds = %713
  br label %715

715:                                              ; preds = %714
  br label %716

716:                                              ; preds = %715, %571
  %717 = load ptr, ptr %57, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.vkrinfo_t, ptr %717, i32 0, i32 0
  %719 = load i32, ptr %718, align 4, !tbaa !49
  %720 = icmp eq i32 %719, 0
  br i1 %720, label %721, label %734

721:                                              ; preds = %716
  %722 = load ptr, ptr %57, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.vkrinfo_t, ptr %722, i32 0, i32 1
  %724 = load i32, ptr %723, align 4, !tbaa !57
  %725 = icmp sgt i32 %724, 0
  br i1 %725, label %726, label %734

726:                                              ; preds = %721
  %727 = load ptr, ptr %7, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.graph_t, ptr %727, i32 0, i32 5
  %729 = load ptr, ptr %728, align 8, !tbaa !58
  %730 = load i32, ptr %11, align 4, !tbaa !9
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds i32, ptr %729, i64 %731
  %733 = load i32, ptr %732, align 4, !tbaa !9
  br label %735

734:                                              ; preds = %721, %716
  br label %735

735:                                              ; preds = %734, %726
  %736 = phi i32 [ %733, %726 ], [ 0, %734 ]
  store i32 %736, ptr %53, align 4, !tbaa !9
  %737 = load i32, ptr %10, align 4, !tbaa !9
  %738 = icmp eq i32 %737, 1
  br i1 %738, label %739, label %1093

739:                                              ; preds = %735
  %740 = load ptr, ptr %57, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.vkrinfo_t, ptr %740, i32 0, i32 3
  %742 = load i32, ptr %741, align 4, !tbaa !50
  %743 = sub nsw i32 %742, 1
  store i32 %743, ptr %15, align 4, !tbaa !9
  br label %744

744:                                              ; preds = %793, %739
  %745 = load i32, ptr %15, align 4, !tbaa !9
  %746 = icmp sge i32 %745, 0
  br i1 %746, label %747, label %796

747:                                              ; preds = %744
  %748 = load ptr, ptr %42, align 8, !tbaa !5
  %749 = load ptr, ptr %58, align 8, !tbaa !5
  %750 = load i32, ptr %15, align 4, !tbaa !9
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds %struct.vnbr_t, ptr %749, i64 %751
  %753 = getelementptr inbounds %struct.vnbr_t, ptr %752, i32 0, i32 0
  %754 = load i32, ptr %753, align 4, !tbaa !51
  store i32 %754, ptr %23, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds i32, ptr %748, i64 %755
  %757 = load i32, ptr %756, align 4, !tbaa !9
  %758 = icmp ne i32 %757, 0
  br i1 %758, label %760, label %759

759:                                              ; preds = %747
  br label %793

760:                                              ; preds = %747
  %761 = load ptr, ptr %58, align 8, !tbaa !5
  %762 = load i32, ptr %15, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds %struct.vnbr_t, ptr %761, i64 %763
  %765 = getelementptr inbounds %struct.vnbr_t, ptr %764, i32 0, i32 2
  %766 = load i32, ptr %765, align 4, !tbaa !59
  %767 = load i32, ptr %53, align 4, !tbaa !9
  %768 = add nsw i32 %766, %767
  store i32 %768, ptr %20, align 4, !tbaa !9
  %769 = load i32, ptr %20, align 4, !tbaa !9
  %770 = icmp sge i32 %769, 0
  br i1 %770, label %771, label %792

771:                                              ; preds = %760
  %772 = load ptr, ptr %29, align 8, !tbaa !5
  %773 = load i32, ptr %23, 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 = load i32, ptr %25, align 4, !tbaa !9
  %778 = add nsw i32 %776, %777
  %779 = sitofp i32 %778 to float
  %780 = load ptr, ptr %34, align 8, !tbaa !5
  %781 = load i32, ptr %23, align 4, !tbaa !9
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds i32, ptr %780, i64 %782
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = sitofp i32 %784 to float
  %786 = load float, ptr %9, align 4, !tbaa !11
  %787 = load i32, ptr %20, align 4, !tbaa !9
  %788 = sitofp i32 %787 to float
  %789 = call float @llvm.fmuladd.f32(float %786, float %788, float %785)
  %790 = fcmp ole float %779, %789
  br i1 %790, label %791, label %792

791:                                              ; preds = %771
  br label %796

792:                                              ; preds = %771, %760
  br label %793

793:                                              ; preds = %792, %759
  %794 = load i32, ptr %15, align 4, !tbaa !9
  %795 = add nsw i32 %794, -1
  store i32 %795, ptr %15, align 4, !tbaa !9
  br label %744, !llvm.loop !60

796:                                              ; preds = %791, %744
  %797 = load i32, ptr %15, align 4, !tbaa !9
  %798 = icmp slt i32 %797, 0
  br i1 %798, label %799, label %800

799:                                              ; preds = %796
  br label %1447

800:                                              ; preds = %796
  %801 = load i32, ptr %15, align 4, !tbaa !9
  %802 = sub nsw i32 %801, 1
  store i32 %802, ptr %14, align 4, !tbaa !9
  br label %803

803:                                              ; preds = %968, %800
  %804 = load i32, ptr %14, align 4, !tbaa !9
  %805 = icmp sge i32 %804, 0
  br i1 %805, label %806, label %971

806:                                              ; preds = %803
  %807 = load ptr, ptr %42, align 8, !tbaa !5
  %808 = load ptr, ptr %58, align 8, !tbaa !5
  %809 = load i32, ptr %14, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds %struct.vnbr_t, ptr %808, i64 %810
  %812 = getelementptr inbounds %struct.vnbr_t, ptr %811, i32 0, i32 0
  %813 = load i32, ptr %812, align 4, !tbaa !51
  store i32 %813, ptr %23, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %807, i64 %814
  %816 = load i32, ptr %815, align 4, !tbaa !9
  %817 = icmp ne i32 %816, 0
  br i1 %817, label %819, label %818

818:                                              ; preds = %806
  br label %968

819:                                              ; preds = %806
  %820 = load ptr, ptr %58, align 8, !tbaa !5
  %821 = load i32, ptr %14, align 4, !tbaa !9
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds %struct.vnbr_t, ptr %820, i64 %822
  %824 = getelementptr inbounds %struct.vnbr_t, ptr %823, i32 0, i32 2
  %825 = load i32, ptr %824, align 4, !tbaa !59
  %826 = load i32, ptr %53, align 4, !tbaa !9
  %827 = add nsw i32 %825, %826
  store i32 %827, ptr %20, align 4, !tbaa !9
  %828 = load ptr, ptr %58, align 8, !tbaa !5
  %829 = load i32, ptr %14, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds %struct.vnbr_t, ptr %828, i64 %830
  %832 = getelementptr inbounds %struct.vnbr_t, ptr %831, i32 0, i32 2
  %833 = load i32, ptr %832, align 4, !tbaa !59
  %834 = load ptr, ptr %58, 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 !59
  %840 = icmp sgt i32 %833, %839
  br i1 %840, label %841, label %861

841:                                              ; preds = %819
  %842 = load ptr, ptr %29, align 8, !tbaa !5
  %843 = load i32, ptr %23, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds i32, ptr %842, i64 %844
  %846 = load i32, ptr %845, align 4, !tbaa !9
  %847 = load i32, ptr %25, align 4, !tbaa !9
  %848 = add nsw i32 %846, %847
  %849 = sitofp i32 %848 to float
  %850 = load ptr, ptr %34, align 8, !tbaa !5
  %851 = load i32, ptr %23, align 4, !tbaa !9
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds i32, ptr %850, i64 %852
  %854 = load i32, ptr %853, align 4, !tbaa !9
  %855 = sitofp i32 %854 to float
  %856 = load float, ptr %9, align 4, !tbaa !11
  %857 = load i32, ptr %20, align 4, !tbaa !9
  %858 = sitofp i32 %857 to float
  %859 = call float @llvm.fmuladd.f32(float %856, float %858, float %855)
  %860 = fcmp ole float %849, %859
  br i1 %860, label %965, label %861

861:                                              ; preds = %841, %819
  %862 = load ptr, ptr %58, align 8, !tbaa !5
  %863 = load i32, ptr %14, align 4, !tbaa !9
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds %struct.vnbr_t, ptr %862, i64 %864
  %866 = getelementptr inbounds %struct.vnbr_t, ptr %865, i32 0, i32 2
  %867 = load i32, ptr %866, align 4, !tbaa !59
  %868 = load ptr, ptr %58, align 8, !tbaa !5
  %869 = load i32, ptr %15, align 4, !tbaa !9
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds %struct.vnbr_t, ptr %868, i64 %870
  %872 = getelementptr inbounds %struct.vnbr_t, ptr %871, i32 0, i32 2
  %873 = load i32, ptr %872, align 4, !tbaa !59
  %874 = icmp eq i32 %867, %873
  br i1 %874, label %875, label %903

875:                                              ; preds = %861
  %876 = load ptr, ptr %58, align 8, !tbaa !5
  %877 = load i32, ptr %14, align 4, !tbaa !9
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds %struct.vnbr_t, ptr %876, i64 %878
  %880 = getelementptr inbounds %struct.vnbr_t, ptr %879, i32 0, i32 1
  %881 = load i32, ptr %880, align 4, !tbaa !61
  %882 = load ptr, ptr %58, align 8, !tbaa !5
  %883 = load i32, ptr %15, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.vnbr_t, ptr %882, i64 %884
  %886 = getelementptr inbounds %struct.vnbr_t, ptr %885, i32 0, i32 1
  %887 = load i32, ptr %886, align 4, !tbaa !61
  %888 = icmp sgt i32 %881, %887
  br i1 %888, label %889, label %903

889:                                              ; preds = %875
  %890 = load ptr, ptr %29, align 8, !tbaa !5
  %891 = load i32, ptr %23, align 4, !tbaa !9
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds i32, ptr %890, i64 %892
  %894 = load i32, ptr %893, align 4, !tbaa !9
  %895 = load i32, ptr %25, align 4, !tbaa !9
  %896 = add nsw i32 %894, %895
  %897 = load ptr, ptr %34, align 8, !tbaa !5
  %898 = load i32, ptr %23, align 4, !tbaa !9
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds i32, ptr %897, i64 %899
  %901 = load i32, ptr %900, align 4, !tbaa !9
  %902 = icmp sle i32 %896, %901
  br i1 %902, label %965, label %903

903:                                              ; preds = %889, %875, %861
  %904 = load ptr, ptr %58, 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 !59
  %910 = load ptr, ptr %58, 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 !59
  %916 = icmp eq i32 %909, %915
  br i1 %916, label %917, label %967

917:                                              ; preds = %903
  %918 = load ptr, ptr %58, align 8, !tbaa !5
  %919 = load i32, ptr %14, align 4, !tbaa !9
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds %struct.vnbr_t, ptr %918, i64 %920
  %922 = getelementptr inbounds %struct.vnbr_t, ptr %921, i32 0, i32 1
  %923 = load i32, ptr %922, align 4, !tbaa !61
  %924 = load ptr, ptr %58, align 8, !tbaa !5
  %925 = load i32, ptr %15, align 4, !tbaa !9
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds %struct.vnbr_t, ptr %924, i64 %926
  %928 = getelementptr inbounds %struct.vnbr_t, ptr %927, i32 0, i32 1
  %929 = load i32, ptr %928, align 4, !tbaa !61
  %930 = icmp eq i32 %923, %929
  br i1 %930, label %931, label %967

931:                                              ; preds = %917
  %932 = load ptr, ptr %35, align 8, !tbaa !5
  %933 = load ptr, ptr %58, align 8, !tbaa !5
  %934 = load i32, ptr %15, align 4, !tbaa !9
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds %struct.vnbr_t, ptr %933, i64 %935
  %937 = getelementptr inbounds %struct.vnbr_t, ptr %936, i32 0, i32 0
  %938 = load i32, ptr %937, align 4, !tbaa !51
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i32, ptr %932, i64 %939
  %941 = load i32, ptr %940, align 4, !tbaa !9
  %942 = load ptr, ptr %29, align 8, !tbaa !5
  %943 = load i32, ptr %23, align 4, !tbaa !9
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i32, ptr %942, i64 %944
  %946 = load i32, ptr %945, align 4, !tbaa !9
  %947 = mul nsw i32 %941, %946
  %948 = load ptr, ptr %35, align 8, !tbaa !5
  %949 = load i32, ptr %23, align 4, !tbaa !9
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds i32, ptr %948, i64 %950
  %952 = load i32, ptr %951, align 4, !tbaa !9
  %953 = load ptr, ptr %29, align 8, !tbaa !5
  %954 = load ptr, ptr %58, align 8, !tbaa !5
  %955 = load i32, ptr %15, 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 0
  %959 = load i32, ptr %958, align 4, !tbaa !51
  %960 = sext i32 %959 to i64
  %961 = getelementptr inbounds i32, ptr %953, i64 %960
  %962 = load i32, ptr %961, align 4, !tbaa !9
  %963 = mul nsw i32 %952, %962
  %964 = icmp slt i32 %947, %963
  br i1 %964, label %965, label %967

965:                                              ; preds = %931, %889, %841
  %966 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %966, ptr %15, align 4, !tbaa !9
  br label %967

967:                                              ; preds = %965, %931, %917, %903
  br label %968

968:                                              ; preds = %967, %818
  %969 = load i32, ptr %14, align 4, !tbaa !9
  %970 = add nsw i32 %969, -1
  store i32 %970, ptr %14, align 4, !tbaa !9
  br label %803, !llvm.loop !62

971:                                              ; preds = %803
  %972 = load ptr, ptr %58, align 8, !tbaa !5
  %973 = load i32, ptr %15, align 4, !tbaa !9
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds %struct.vnbr_t, ptr %972, i64 %974
  %976 = getelementptr inbounds %struct.vnbr_t, ptr %975, i32 0, i32 0
  %977 = load i32, ptr %976, align 4, !tbaa !51
  store i32 %977, ptr %23, align 4, !tbaa !9
  %978 = load i32, ptr %53, align 4, !tbaa !9
  %979 = load ptr, ptr %58, align 8, !tbaa !5
  %980 = load i32, ptr %15, align 4, !tbaa !9
  %981 = sext i32 %980 to i64
  %982 = getelementptr inbounds %struct.vnbr_t, ptr %979, i64 %981
  %983 = getelementptr inbounds %struct.vnbr_t, ptr %982, i32 0, i32 2
  %984 = load i32, ptr %983, align 4, !tbaa !59
  %985 = add nsw i32 %978, %984
  %986 = icmp sge i32 %985, 0
  br i1 %986, label %1001, label %987

987:                                              ; preds = %971
  %988 = call i32 (ptr, ...) @printf(ptr noundef @.str.38, i32 noundef 559, ptr noundef @.str.7)
  %989 = load i32, ptr %53, align 4, !tbaa !9
  %990 = load ptr, ptr %58, align 8, !tbaa !5
  %991 = load i32, ptr %15, 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 !59
  %996 = add nsw i32 %989, %995
  %997 = icmp sge i32 %996, 0
  br i1 %997, label %998, label %999

998:                                              ; preds = %987
  br label %1000

999:                                              ; preds = %987
  call void @__assert_fail(ptr noundef @.str.39, ptr noundef @.str.7, i32 noundef 559, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #6
  unreachable

1000:                                             ; preds = %998
  br label %1001

1001:                                             ; preds = %1000, %971
  store i32 0, ptr %14, align 4, !tbaa !9
  %1002 = load i32, ptr %53, align 4, !tbaa !9
  %1003 = load ptr, ptr %58, align 8, !tbaa !5
  %1004 = load i32, ptr %15, align 4, !tbaa !9
  %1005 = sext i32 %1004 to i64
  %1006 = getelementptr inbounds %struct.vnbr_t, ptr %1003, i64 %1005
  %1007 = getelementptr inbounds %struct.vnbr_t, ptr %1006, i32 0, i32 2
  %1008 = load i32, ptr %1007, align 4, !tbaa !59
  %1009 = add nsw i32 %1002, %1008
  %1010 = icmp sgt i32 %1009, 0
  br i1 %1010, label %1023, label %1011

1011:                                             ; preds = %1001
  %1012 = load ptr, ptr %58, align 8, !tbaa !5
  %1013 = load i32, ptr %15, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds %struct.vnbr_t, ptr %1012, i64 %1014
  %1016 = getelementptr inbounds %struct.vnbr_t, ptr %1015, i32 0, i32 1
  %1017 = load i32, ptr %1016, align 4, !tbaa !61
  %1018 = load ptr, ptr %57, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.vkrinfo_t, ptr %1018, i32 0, i32 0
  %1020 = load i32, ptr %1019, align 4, !tbaa !49
  %1021 = sub nsw i32 %1017, %1020
  %1022 = icmp sgt i32 %1021, 0
  br i1 %1022, label %1023, label %1024

1023:                                             ; preds = %1011, %1001
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %1088

1024:                                             ; preds = %1011
  %1025 = load ptr, ptr %58, align 8, !tbaa !5
  %1026 = load i32, ptr %15, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds %struct.vnbr_t, ptr %1025, i64 %1027
  %1029 = getelementptr inbounds %struct.vnbr_t, ptr %1028, i32 0, i32 1
  %1030 = load i32, ptr %1029, align 4, !tbaa !61
  %1031 = load ptr, ptr %57, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.vkrinfo_t, ptr %1031, i32 0, i32 0
  %1033 = load i32, ptr %1032, align 4, !tbaa !49
  %1034 = sub nsw i32 %1030, %1033
  %1035 = icmp eq i32 %1034, 0
  br i1 %1035, label %1036, label %1087

1036:                                             ; preds = %1024
  %1037 = load i32, ptr %13, align 4, !tbaa !9
  %1038 = srem i32 %1037, 2
  %1039 = icmp eq i32 %1038, 0
  br i1 %1039, label %1040, label %1047

1040:                                             ; preds = %1036
  %1041 = load ptr, ptr %42, align 8, !tbaa !5
  %1042 = load i32, ptr %23, align 4, !tbaa !9
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds i32, ptr %1041, i64 %1043
  %1045 = load i32, ptr %1044, align 4, !tbaa !9
  %1046 = icmp eq i32 %1045, 2
  br i1 %1046, label %1085, label %1047

1047:                                             ; preds = %1040, %1036
  %1048 = load ptr, ptr %29, align 8, !tbaa !5
  %1049 = load i32, ptr %21, align 4, !tbaa !9
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds i32, ptr %1048, i64 %1050
  %1052 = load i32, ptr %1051, align 4, !tbaa !9
  %1053 = load ptr, ptr %34, align 8, !tbaa !5
  %1054 = load i32, ptr %21, align 4, !tbaa !9
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds i32, ptr %1053, i64 %1055
  %1057 = load i32, ptr %1056, align 4, !tbaa !9
  %1058 = icmp sge i32 %1052, %1057
  br i1 %1058, label %1085, label %1059

1059:                                             ; preds = %1047
  %1060 = load ptr, ptr %35, align 8, !tbaa !5
  %1061 = load i32, ptr %21, align 4, !tbaa !9
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds i32, ptr %1060, i64 %1062
  %1064 = load i32, ptr %1063, align 4, !tbaa !9
  %1065 = load ptr, ptr %29, align 8, !tbaa !5
  %1066 = load i32, ptr %23, align 4, !tbaa !9
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds i32, ptr %1065, i64 %1067
  %1069 = load i32, ptr %1068, align 4, !tbaa !9
  %1070 = load i32, ptr %25, align 4, !tbaa !9
  %1071 = add nsw i32 %1069, %1070
  %1072 = mul nsw i32 %1064, %1071
  %1073 = load ptr, ptr %35, align 8, !tbaa !5
  %1074 = load i32, ptr %23, align 4, !tbaa !9
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds i32, ptr %1073, i64 %1075
  %1077 = load i32, ptr %1076, align 4, !tbaa !9
  %1078 = load ptr, ptr %29, align 8, !tbaa !5
  %1079 = load i32, ptr %21, align 4, !tbaa !9
  %1080 = sext i32 %1079 to i64
  %1081 = getelementptr inbounds i32, ptr %1078, i64 %1080
  %1082 = load i32, ptr %1081, align 4, !tbaa !9
  %1083 = mul nsw i32 %1077, %1082
  %1084 = icmp slt i32 %1072, %1083
  br i1 %1084, label %1085, label %1086

1085:                                             ; preds = %1059, %1047, %1040
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %1086

1086:                                             ; preds = %1085, %1059
  br label %1087

1087:                                             ; preds = %1086, %1024
  br label %1088

1088:                                             ; preds = %1087, %1023
  %1089 = load i32, ptr %14, align 4, !tbaa !9
  %1090 = icmp eq i32 %1089, 0
  br i1 %1090, label %1091, label %1092

1091:                                             ; preds = %1088
  br label %1447

1092:                                             ; preds = %1088
  br label %1286

1093:                                             ; preds = %735
  %1094 = load ptr, ptr %57, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.vkrinfo_t, ptr %1094, i32 0, i32 3
  %1096 = load i32, ptr %1095, align 4, !tbaa !50
  %1097 = sub nsw i32 %1096, 1
  store i32 %1097, ptr %15, align 4, !tbaa !9
  br label %1098

1098:                                             ; preds = %1156, %1093
  %1099 = load i32, ptr %15, align 4, !tbaa !9
  %1100 = icmp sge i32 %1099, 0
  br i1 %1100, label %1101, label %1159

1101:                                             ; preds = %1098
  %1102 = load ptr, ptr %42, align 8, !tbaa !5
  %1103 = load ptr, ptr %58, align 8, !tbaa !5
  %1104 = load i32, ptr %15, align 4, !tbaa !9
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds %struct.vnbr_t, ptr %1103, i64 %1105
  %1107 = getelementptr inbounds %struct.vnbr_t, ptr %1106, i32 0, i32 0
  %1108 = load i32, ptr %1107, align 4, !tbaa !51
  store i32 %1108, ptr %23, align 4, !tbaa !9
  %1109 = sext i32 %1108 to i64
  %1110 = getelementptr inbounds i32, ptr %1102, i64 %1109
  %1111 = load i32, ptr %1110, align 4, !tbaa !9
  %1112 = icmp ne i32 %1111, 0
  br i1 %1112, label %1114, label %1113

1113:                                             ; preds = %1101
  br label %1156

1114:                                             ; preds = %1101
  %1115 = load ptr, ptr %29, align 8, !tbaa !5
  %1116 = load i32, ptr %23, align 4, !tbaa !9
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds i32, ptr %1115, i64 %1117
  %1119 = load i32, ptr %1118, align 4, !tbaa !9
  %1120 = load i32, ptr %25, align 4, !tbaa !9
  %1121 = add nsw i32 %1119, %1120
  %1122 = load ptr, ptr %34, align 8, !tbaa !5
  %1123 = load i32, ptr %23, align 4, !tbaa !9
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds i32, ptr %1122, i64 %1124
  %1126 = load i32, ptr %1125, align 4, !tbaa !9
  %1127 = icmp sle i32 %1121, %1126
  br i1 %1127, label %1154, label %1128

1128:                                             ; preds = %1114
  %1129 = load ptr, ptr %35, align 8, !tbaa !5
  %1130 = load i32, ptr %21, align 4, !tbaa !9
  %1131 = sext i32 %1130 to i64
  %1132 = getelementptr inbounds i32, ptr %1129, i64 %1131
  %1133 = load i32, ptr %1132, align 4, !tbaa !9
  %1134 = load ptr, ptr %29, align 8, !tbaa !5
  %1135 = load i32, ptr %23, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds i32, ptr %1134, i64 %1136
  %1138 = load i32, ptr %1137, align 4, !tbaa !9
  %1139 = load i32, ptr %25, align 4, !tbaa !9
  %1140 = add nsw i32 %1138, %1139
  %1141 = mul nsw i32 %1133, %1140
  %1142 = load ptr, ptr %35, align 8, !tbaa !5
  %1143 = load i32, ptr %23, align 4, !tbaa !9
  %1144 = sext i32 %1143 to i64
  %1145 = getelementptr inbounds i32, ptr %1142, i64 %1144
  %1146 = load i32, ptr %1145, align 4, !tbaa !9
  %1147 = load ptr, ptr %29, align 8, !tbaa !5
  %1148 = load i32, ptr %21, align 4, !tbaa !9
  %1149 = sext i32 %1148 to i64
  %1150 = getelementptr inbounds i32, ptr %1147, i64 %1149
  %1151 = load i32, ptr %1150, align 4, !tbaa !9
  %1152 = mul nsw i32 %1146, %1151
  %1153 = icmp sle i32 %1141, %1152
  br i1 %1153, label %1154, label %1155

1154:                                             ; preds = %1128, %1114
  br label %1159

1155:                                             ; preds = %1128
  br label %1156

1156:                                             ; preds = %1155, %1113
  %1157 = load i32, ptr %15, align 4, !tbaa !9
  %1158 = add nsw i32 %1157, -1
  store i32 %1158, ptr %15, align 4, !tbaa !9
  br label %1098, !llvm.loop !63

1159:                                             ; preds = %1154, %1098
  %1160 = load i32, ptr %15, align 4, !tbaa !9
  %1161 = icmp slt i32 %1160, 0
  br i1 %1161, label %1162, label %1163

1162:                                             ; preds = %1159
  br label %1447

1163:                                             ; preds = %1159
  %1164 = load i32, ptr %15, align 4, !tbaa !9
  %1165 = sub nsw i32 %1164, 1
  store i32 %1165, ptr %14, align 4, !tbaa !9
  br label %1166

1166:                                             ; preds = %1219, %1163
  %1167 = load i32, ptr %14, align 4, !tbaa !9
  %1168 = icmp sge i32 %1167, 0
  br i1 %1168, label %1169, label %1222

1169:                                             ; preds = %1166
  %1170 = load ptr, ptr %42, align 8, !tbaa !5
  %1171 = load ptr, ptr %58, align 8, !tbaa !5
  %1172 = load i32, ptr %14, align 4, !tbaa !9
  %1173 = sext i32 %1172 to i64
  %1174 = getelementptr inbounds %struct.vnbr_t, ptr %1171, i64 %1173
  %1175 = getelementptr inbounds %struct.vnbr_t, ptr %1174, i32 0, i32 0
  %1176 = load i32, ptr %1175, align 4, !tbaa !51
  store i32 %1176, ptr %23, align 4, !tbaa !9
  %1177 = sext i32 %1176 to i64
  %1178 = getelementptr inbounds i32, ptr %1170, i64 %1177
  %1179 = load i32, ptr %1178, align 4, !tbaa !9
  %1180 = icmp ne i32 %1179, 0
  br i1 %1180, label %1182, label %1181

1181:                                             ; preds = %1169
  br label %1219

1182:                                             ; preds = %1169
  %1183 = load ptr, ptr %35, align 8, !tbaa !5
  %1184 = load ptr, ptr %58, align 8, !tbaa !5
  %1185 = load i32, ptr %15, align 4, !tbaa !9
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds %struct.vnbr_t, ptr %1184, i64 %1186
  %1188 = getelementptr inbounds %struct.vnbr_t, ptr %1187, i32 0, i32 0
  %1189 = load i32, ptr %1188, align 4, !tbaa !51
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds i32, ptr %1183, i64 %1190
  %1192 = load i32, ptr %1191, align 4, !tbaa !9
  %1193 = load ptr, ptr %29, align 8, !tbaa !5
  %1194 = load i32, ptr %23, align 4, !tbaa !9
  %1195 = sext i32 %1194 to i64
  %1196 = getelementptr inbounds i32, ptr %1193, i64 %1195
  %1197 = load i32, ptr %1196, align 4, !tbaa !9
  %1198 = mul nsw i32 %1192, %1197
  %1199 = load ptr, ptr %35, align 8, !tbaa !5
  %1200 = load i32, ptr %23, align 4, !tbaa !9
  %1201 = sext i32 %1200 to i64
  %1202 = getelementptr inbounds i32, ptr %1199, i64 %1201
  %1203 = load i32, ptr %1202, align 4, !tbaa !9
  %1204 = load ptr, ptr %29, align 8, !tbaa !5
  %1205 = load ptr, ptr %58, align 8, !tbaa !5
  %1206 = load i32, ptr %15, align 4, !tbaa !9
  %1207 = sext i32 %1206 to i64
  %1208 = getelementptr inbounds %struct.vnbr_t, ptr %1205, i64 %1207
  %1209 = getelementptr inbounds %struct.vnbr_t, ptr %1208, i32 0, i32 0
  %1210 = load i32, ptr %1209, align 4, !tbaa !51
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds i32, ptr %1204, i64 %1211
  %1213 = load i32, ptr %1212, align 4, !tbaa !9
  %1214 = mul nsw i32 %1203, %1213
  %1215 = icmp slt i32 %1198, %1214
  br i1 %1215, label %1216, label %1218

1216:                                             ; preds = %1182
  %1217 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %1217, ptr %15, align 4, !tbaa !9
  br label %1218

1218:                                             ; preds = %1216, %1182
  br label %1219

1219:                                             ; preds = %1218, %1181
  %1220 = load i32, ptr %14, align 4, !tbaa !9
  %1221 = add nsw i32 %1220, -1
  store i32 %1221, ptr %14, align 4, !tbaa !9
  br label %1166, !llvm.loop !64

1222:                                             ; preds = %1166
  %1223 = load ptr, ptr %58, align 8, !tbaa !5
  %1224 = load i32, ptr %15, align 4, !tbaa !9
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds %struct.vnbr_t, ptr %1223, i64 %1225
  %1227 = getelementptr inbounds %struct.vnbr_t, ptr %1226, i32 0, i32 0
  %1228 = load i32, ptr %1227, align 4, !tbaa !51
  store i32 %1228, ptr %23, align 4, !tbaa !9
  %1229 = load ptr, ptr %29, align 8, !tbaa !5
  %1230 = load i32, ptr %21, align 4, !tbaa !9
  %1231 = sext i32 %1230 to i64
  %1232 = getelementptr inbounds i32, ptr %1229, i64 %1231
  %1233 = load i32, ptr %1232, align 4, !tbaa !9
  %1234 = load ptr, ptr %34, align 8, !tbaa !5
  %1235 = load i32, ptr %21, align 4, !tbaa !9
  %1236 = sext i32 %1235 to i64
  %1237 = getelementptr inbounds i32, ptr %1234, i64 %1236
  %1238 = load i32, ptr %1237, align 4, !tbaa !9
  %1239 = icmp slt i32 %1233, %1238
  br i1 %1239, label %1240, label %1285

1240:                                             ; preds = %1222
  %1241 = load ptr, ptr %29, align 8, !tbaa !5
  %1242 = load i32, ptr %23, align 4, !tbaa !9
  %1243 = sext i32 %1242 to i64
  %1244 = getelementptr inbounds i32, ptr %1241, i64 %1243
  %1245 = load i32, ptr %1244, align 4, !tbaa !9
  %1246 = load ptr, ptr %33, align 8, !tbaa !5
  %1247 = load i32, ptr %23, align 4, !tbaa !9
  %1248 = sext i32 %1247 to i64
  %1249 = getelementptr inbounds i32, ptr %1246, i64 %1248
  %1250 = load i32, ptr %1249, align 4, !tbaa !9
  %1251 = icmp sgt i32 %1245, %1250
  br i1 %1251, label %1252, label %1285

1252:                                             ; preds = %1240
  %1253 = load i32, ptr %53, align 4, !tbaa !9
  %1254 = load ptr, ptr %58, align 8, !tbaa !5
  %1255 = load i32, ptr %15, align 4, !tbaa !9
  %1256 = sext i32 %1255 to i64
  %1257 = getelementptr inbounds %struct.vnbr_t, ptr %1254, i64 %1256
  %1258 = getelementptr inbounds %struct.vnbr_t, ptr %1257, i32 0, i32 2
  %1259 = load i32, ptr %1258, align 4, !tbaa !59
  %1260 = add nsw i32 %1253, %1259
  %1261 = icmp slt i32 %1260, 0
  br i1 %1261, label %1284, label %1262

1262:                                             ; preds = %1252
  %1263 = load i32, ptr %53, align 4, !tbaa !9
  %1264 = load ptr, ptr %58, align 8, !tbaa !5
  %1265 = load i32, ptr %15, align 4, !tbaa !9
  %1266 = sext i32 %1265 to i64
  %1267 = getelementptr inbounds %struct.vnbr_t, ptr %1264, i64 %1266
  %1268 = getelementptr inbounds %struct.vnbr_t, ptr %1267, i32 0, i32 2
  %1269 = load i32, ptr %1268, align 4, !tbaa !59
  %1270 = add nsw i32 %1263, %1269
  %1271 = icmp eq i32 %1270, 0
  br i1 %1271, label %1272, label %1285

1272:                                             ; preds = %1262
  %1273 = load ptr, ptr %58, align 8, !tbaa !5
  %1274 = load i32, ptr %15, align 4, !tbaa !9
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds %struct.vnbr_t, ptr %1273, i64 %1275
  %1277 = getelementptr inbounds %struct.vnbr_t, ptr %1276, i32 0, i32 1
  %1278 = load i32, ptr %1277, align 4, !tbaa !61
  %1279 = load ptr, ptr %57, align 8, !tbaa !5
  %1280 = getelementptr inbounds %struct.vkrinfo_t, ptr %1279, i32 0, i32 0
  %1281 = load i32, ptr %1280, align 4, !tbaa !49
  %1282 = sub nsw i32 %1278, %1281
  %1283 = icmp slt i32 %1282, 0
  br i1 %1283, label %1284, label %1285

1284:                                             ; preds = %1272, %1252
  br label %1447

1285:                                             ; preds = %1272, %1262, %1240, %1222
  br label %1286

1286:                                             ; preds = %1285, %1092
  br label %1287

1287:                                             ; preds = %1286
  %1288 = load i32, ptr %25, align 4, !tbaa !9
  %1289 = load ptr, ptr %29, align 8, !tbaa !5
  %1290 = load i32, ptr %23, align 4, !tbaa !9
  %1291 = sext i32 %1290 to i64
  %1292 = getelementptr inbounds i32, ptr %1289, i64 %1291
  %1293 = load i32, ptr %1292, align 4, !tbaa !9
  %1294 = add nsw i32 %1293, %1288
  store i32 %1294, ptr %1292, align 4, !tbaa !9
  %1295 = load i32, ptr %25, align 4, !tbaa !9
  %1296 = load ptr, ptr %29, align 8, !tbaa !5
  %1297 = load i32, ptr %21, align 4, !tbaa !9
  %1298 = sext i32 %1297 to i64
  %1299 = getelementptr inbounds i32, ptr %1296, i64 %1298
  %1300 = load i32, ptr %1299, align 4, !tbaa !9
  %1301 = sub nsw i32 %1300, %1295
  store i32 %1301, ptr %1299, align 4, !tbaa !9
  br label %1302

1302:                                             ; preds = %1287
  br label %1303

1303:                                             ; preds = %1302
  %1304 = load ptr, ptr %58, align 8, !tbaa !5
  %1305 = load i32, ptr %15, align 4, !tbaa !9
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds %struct.vnbr_t, ptr %1304, i64 %1306
  %1308 = getelementptr inbounds %struct.vnbr_t, ptr %1307, i32 0, i32 1
  %1309 = load i32, ptr %1308, align 4, !tbaa !61
  %1310 = load ptr, ptr %57, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct.vkrinfo_t, ptr %1310, i32 0, i32 0
  %1312 = load i32, ptr %1311, align 4, !tbaa !49
  %1313 = sub nsw i32 %1309, %1312
  %1314 = load ptr, ptr %7, align 8, !tbaa !5
  %1315 = getelementptr inbounds %struct.graph_t, ptr %1314, i32 0, i32 17
  %1316 = load i32, ptr %1315, align 8, !tbaa !39
  %1317 = sub nsw i32 %1316, %1313
  store i32 %1317, ptr %1315, align 8, !tbaa !39
  %1318 = load i32, ptr %53, align 4, !tbaa !9
  %1319 = load ptr, ptr %58, align 8, !tbaa !5
  %1320 = load i32, ptr %15, align 4, !tbaa !9
  %1321 = sext i32 %1320 to i64
  %1322 = getelementptr inbounds %struct.vnbr_t, ptr %1319, i64 %1321
  %1323 = getelementptr inbounds %struct.vnbr_t, ptr %1322, i32 0, i32 2
  %1324 = load i32, ptr %1323, align 4, !tbaa !59
  %1325 = add nsw i32 %1318, %1324
  %1326 = load ptr, ptr %7, align 8, !tbaa !5
  %1327 = getelementptr inbounds %struct.graph_t, ptr %1326, i32 0, i32 18
  %1328 = load i32, ptr %1327, align 4, !tbaa !40
  %1329 = sub nsw i32 %1328, %1325
  store i32 %1329, ptr %1327, align 4, !tbaa !40
  %1330 = load i32, ptr %23, align 4, !tbaa !9
  %1331 = load ptr, ptr %28, align 8, !tbaa !5
  %1332 = load i32, ptr %11, align 4, !tbaa !9
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds i32, ptr %1331, i64 %1333
  store i32 %1330, ptr %1334, align 4, !tbaa !9
  %1335 = load i32, ptr %36, align 4, !tbaa !9
  %1336 = add nsw i32 %1335, 1
  store i32 %1336, ptr %36, align 4, !tbaa !9
  %1337 = load ptr, ptr %6, align 8, !tbaa !5
  %1338 = getelementptr inbounds %struct.ctrl_t, ptr %1337, i32 0, i32 2
  %1339 = load i32, ptr %1338, align 8, !tbaa !36
  %1340 = and i32 %1339, 32
  %1341 = icmp ne i32 %1340, 0
  br i1 %1341, label %1342, label %1371

1342:                                             ; preds = %1303
  %1343 = load i32, ptr %11, align 4, !tbaa !9
  %1344 = load i32, ptr %21, align 4, !tbaa !9
  %1345 = load i32, ptr %23, align 4, !tbaa !9
  %1346 = load i32, ptr %53, align 4, !tbaa !9
  %1347 = load ptr, ptr %58, align 8, !tbaa !5
  %1348 = load i32, ptr %15, align 4, !tbaa !9
  %1349 = sext i32 %1348 to i64
  %1350 = getelementptr inbounds %struct.vnbr_t, ptr %1347, i64 %1349
  %1351 = getelementptr inbounds %struct.vnbr_t, ptr %1350, i32 0, i32 2
  %1352 = load i32, ptr %1351, align 4, !tbaa !59
  %1353 = add nsw i32 %1346, %1352
  %1354 = load ptr, ptr %58, align 8, !tbaa !5
  %1355 = load i32, ptr %15, align 4, !tbaa !9
  %1356 = sext i32 %1355 to i64
  %1357 = getelementptr inbounds %struct.vnbr_t, ptr %1354, i64 %1356
  %1358 = getelementptr inbounds %struct.vnbr_t, ptr %1357, i32 0, i32 1
  %1359 = load i32, ptr %1358, align 4, !tbaa !61
  %1360 = load ptr, ptr %57, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct.vkrinfo_t, ptr %1360, i32 0, i32 0
  %1362 = load i32, ptr %1361, align 4, !tbaa !49
  %1363 = sub nsw i32 %1359, %1362
  %1364 = load ptr, ptr %7, align 8, !tbaa !5
  %1365 = getelementptr inbounds %struct.graph_t, ptr %1364, i32 0, i32 17
  %1366 = load i32, ptr %1365, align 8, !tbaa !39
  %1367 = load ptr, ptr %7, align 8, !tbaa !5
  %1368 = getelementptr inbounds %struct.graph_t, ptr %1367, i32 0, i32 18
  %1369 = load i32, ptr %1368, align 4, !tbaa !40
  %1370 = call i32 (ptr, ...) @printf(ptr noundef @.str.40, i32 noundef %1343, i32 noundef %1344, i32 noundef %1345, i32 noundef %1353, i32 noundef %1363, i32 noundef %1366, i32 noundef %1369)
  br label %1371

1371:                                             ; preds = %1342, %1303
  %1372 = load ptr, ptr %6, align 8, !tbaa !5
  %1373 = getelementptr inbounds %struct.ctrl_t, ptr %1372, i32 0, i32 9
  %1374 = load i32, ptr %1373, align 4, !tbaa !30
  %1375 = icmp ne i32 %1374, 0
  br i1 %1375, label %1376, label %1433

1376:                                             ; preds = %1371
  %1377 = load ptr, ptr %6, align 8, !tbaa !5
  %1378 = load i32, ptr %21, align 4, !tbaa !9
  %1379 = load i32, ptr %23, align 4, !tbaa !9
  %1380 = load ptr, ptr %57, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct.vkrinfo_t, ptr %1380, i32 0, i32 0
  %1382 = load i32, ptr %1381, align 4, !tbaa !49
  %1383 = load ptr, ptr %58, align 8, !tbaa !5
  %1384 = load i32, ptr %15, align 4, !tbaa !9
  %1385 = sext i32 %1384 to i64
  %1386 = getelementptr inbounds %struct.vnbr_t, ptr %1383, i64 %1385
  %1387 = getelementptr inbounds %struct.vnbr_t, ptr %1386, i32 0, i32 1
  %1388 = load i32, ptr %1387, align 4, !tbaa !61
  %1389 = sub nsw i32 %1382, %1388
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %1377, i32 noundef %1378, i32 noundef %1379, i32 noundef %1389, ptr noundef %41)
  %1390 = load ptr, ptr %26, align 8, !tbaa !5
  %1391 = load i32, ptr %11, align 4, !tbaa !9
  %1392 = sext i32 %1391 to i64
  %1393 = getelementptr inbounds i32, ptr %1390, i64 %1392
  %1394 = load i32, ptr %1393, align 4, !tbaa !9
  store i32 %1394, ptr %14, align 4, !tbaa !9
  br label %1395

1395:                                             ; preds = %1429, %1376
  %1396 = load i32, ptr %14, align 4, !tbaa !9
  %1397 = load ptr, ptr %26, align 8, !tbaa !5
  %1398 = load i32, ptr %11, align 4, !tbaa !9
  %1399 = add nsw i32 %1398, 1
  %1400 = sext i32 %1399 to i64
  %1401 = getelementptr inbounds i32, ptr %1397, i64 %1400
  %1402 = load i32, ptr %1401, align 4, !tbaa !9
  %1403 = icmp slt i32 %1396, %1402
  br i1 %1403, label %1404, label %1432

1404:                                             ; preds = %1395
  %1405 = load ptr, ptr %28, align 8, !tbaa !5
  %1406 = load ptr, ptr %27, align 8, !tbaa !5
  %1407 = load i32, ptr %14, align 4, !tbaa !9
  %1408 = sext i32 %1407 to i64
  %1409 = getelementptr inbounds i32, ptr %1406, i64 %1408
  %1410 = load i32, ptr %1409, align 4, !tbaa !9
  %1411 = sext i32 %1410 to i64
  %1412 = getelementptr inbounds i32, ptr %1405, i64 %1411
  %1413 = load i32, ptr %1412, align 4, !tbaa !9
  store i32 %1413, ptr %22, align 4, !tbaa !9
  %1414 = load i32, ptr %22, align 4, !tbaa !9
  %1415 = load i32, ptr %21, align 4, !tbaa !9
  %1416 = icmp ne i32 %1414, %1415
  br i1 %1416, label %1417, label %1428

1417:                                             ; preds = %1404
  %1418 = load i32, ptr %22, align 4, !tbaa !9
  %1419 = load i32, ptr %23, align 4, !tbaa !9
  %1420 = icmp ne i32 %1418, %1419
  br i1 %1420, label %1421, label %1428

1421:                                             ; preds = %1417
  %1422 = load ptr, ptr %6, align 8, !tbaa !5
  %1423 = load i32, ptr %21, align 4, !tbaa !9
  %1424 = load i32, ptr %22, align 4, !tbaa !9
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %1422, i32 noundef %1423, i32 noundef %1424, i32 noundef -1, ptr noundef %41)
  %1425 = load ptr, ptr %6, align 8, !tbaa !5
  %1426 = load i32, ptr %23, align 4, !tbaa !9
  %1427 = load i32, ptr %22, align 4, !tbaa !9
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %1425, i32 noundef %1426, i32 noundef %1427, i32 noundef 1, ptr noundef %41)
  br label %1428

1428:                                             ; preds = %1421, %1417, %1404
  br label %1429

1429:                                             ; preds = %1428
  %1430 = load i32, ptr %14, align 4, !tbaa !9
  %1431 = add nsw i32 %1430, 1
  store i32 %1431, ptr %14, align 4, !tbaa !9
  br label %1395, !llvm.loop !65

1432:                                             ; preds = %1395
  br label %1433

1433:                                             ; preds = %1432, %1371
  %1434 = load ptr, ptr %6, align 8, !tbaa !5
  %1435 = load ptr, ptr %7, align 8, !tbaa !5
  %1436 = load i32, ptr %11, align 4, !tbaa !9
  %1437 = load i32, ptr %21, align 4, !tbaa !9
  %1438 = load i32, ptr %23, align 4, !tbaa !9
  %1439 = load ptr, ptr %51, align 8, !tbaa !5
  %1440 = load ptr, ptr %38, align 8, !tbaa !5
  %1441 = load ptr, ptr %39, align 8, !tbaa !5
  %1442 = load ptr, ptr %40, align 8, !tbaa !5
  %1443 = load i32, ptr %50, align 4, !tbaa !9
  %1444 = load ptr, ptr %54, align 8, !tbaa !5
  %1445 = load ptr, ptr %55, align 8, !tbaa !5
  %1446 = load ptr, ptr %56, align 8, !tbaa !5
  call void @libmetis__KWayVolUpdate(ptr noundef %1434, ptr noundef %1435, i32 noundef %1436, i32 noundef %1437, i32 noundef %1438, ptr noundef %1439, ptr noundef %1440, ptr noundef %37, ptr noundef %1441, ptr noundef %1442, i32 noundef %1443, ptr noundef %1444, ptr noundef %1445, ptr noundef %1446)
  br label %1447

1447:                                             ; preds = %1433, %1284, %1162, %1091, %799, %570, %553, %537
  %1448 = load i32, ptr %13, align 4, !tbaa !9
  %1449 = add nsw i32 %1448, 1
  store i32 %1449, ptr %13, align 4, !tbaa !9
  br label %480

1450:                                             ; preds = %484
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %1451

1451:                                             ; preds = %1524, %1450
  %1452 = load i32, ptr %11, align 4, !tbaa !9
  %1453 = load i32, ptr %37, align 4, !tbaa !9
  %1454 = icmp slt i32 %1452, %1453
  br i1 %1454, label %1455, label %1527

1455:                                             ; preds = %1451
  %1456 = load ptr, ptr %39, align 8, !tbaa !5
  %1457 = load ptr, ptr %40, align 8, !tbaa !5
  %1458 = load i32, ptr %11, align 4, !tbaa !9
  %1459 = sext i32 %1458 to i64
  %1460 = getelementptr inbounds i32, ptr %1457, i64 %1459
  %1461 = load i32, ptr %1460, align 4, !tbaa !9
  %1462 = sext i32 %1461 to i64
  %1463 = getelementptr inbounds i32, ptr %1456, i64 %1462
  %1464 = load i32, ptr %1463, align 4, !tbaa !9
  %1465 = icmp ne i32 %1464, -1
  br i1 %1465, label %1481, label %1466

1466:                                             ; preds = %1455
  %1467 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef 640, ptr noundef @.str.7)
  %1468 = load ptr, ptr %39, align 8, !tbaa !5
  %1469 = load ptr, ptr %40, align 8, !tbaa !5
  %1470 = load i32, ptr %11, align 4, !tbaa !9
  %1471 = sext i32 %1470 to i64
  %1472 = getelementptr inbounds i32, ptr %1469, i64 %1471
  %1473 = load i32, ptr %1472, align 4, !tbaa !9
  %1474 = sext i32 %1473 to i64
  %1475 = getelementptr inbounds i32, ptr %1468, i64 %1474
  %1476 = load i32, ptr %1475, align 4, !tbaa !9
  %1477 = icmp ne i32 %1476, -1
  br i1 %1477, label %1478, label %1479

1478:                                             ; preds = %1466
  br label %1480

1479:                                             ; preds = %1466
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.7, i32 noundef 640, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #6
  unreachable

1480:                                             ; preds = %1478
  br label %1481

1481:                                             ; preds = %1480, %1455
  %1482 = load ptr, ptr %38, align 8, !tbaa !5
  %1483 = load ptr, ptr %40, align 8, !tbaa !5
  %1484 = load i32, ptr %11, align 4, !tbaa !9
  %1485 = sext i32 %1484 to i64
  %1486 = getelementptr inbounds i32, ptr %1483, i64 %1485
  %1487 = load i32, ptr %1486, align 4, !tbaa !9
  %1488 = sext i32 %1487 to i64
  %1489 = getelementptr inbounds i32, ptr %1482, i64 %1488
  %1490 = load i32, ptr %1489, align 4, !tbaa !9
  %1491 = icmp ne i32 %1490, 3
  br i1 %1491, label %1507, label %1492

1492:                                             ; preds = %1481
  %1493 = call i32 (ptr, ...) @printf(ptr noundef @.str.30, i32 noundef 641, ptr noundef @.str.7)
  %1494 = load ptr, ptr %38, align 8, !tbaa !5
  %1495 = load ptr, ptr %40, align 8, !tbaa !5
  %1496 = load i32, ptr %11, align 4, !tbaa !9
  %1497 = sext i32 %1496 to i64
  %1498 = getelementptr inbounds i32, ptr %1495, i64 %1497
  %1499 = load i32, ptr %1498, align 4, !tbaa !9
  %1500 = sext i32 %1499 to i64
  %1501 = getelementptr inbounds i32, ptr %1494, i64 %1500
  %1502 = load i32, ptr %1501, align 4, !tbaa !9
  %1503 = icmp ne i32 %1502, 3
  br i1 %1503, label %1504, label %1505

1504:                                             ; preds = %1492
  br label %1506

1505:                                             ; preds = %1492
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.7, i32 noundef 641, ptr noundef @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #6
  unreachable

1506:                                             ; preds = %1504
  br label %1507

1507:                                             ; preds = %1506, %1481
  %1508 = load ptr, ptr %38, align 8, !tbaa !5
  %1509 = load ptr, ptr %40, align 8, !tbaa !5
  %1510 = load i32, ptr %11, align 4, !tbaa !9
  %1511 = sext i32 %1510 to i64
  %1512 = getelementptr inbounds i32, ptr %1509, i64 %1511
  %1513 = load i32, ptr %1512, align 4, !tbaa !9
  %1514 = sext i32 %1513 to i64
  %1515 = getelementptr inbounds i32, ptr %1508, i64 %1514
  store i32 3, ptr %1515, align 4, !tbaa !9
  %1516 = load ptr, ptr %39, align 8, !tbaa !5
  %1517 = load ptr, ptr %40, align 8, !tbaa !5
  %1518 = load i32, ptr %11, align 4, !tbaa !9
  %1519 = sext i32 %1518 to i64
  %1520 = getelementptr inbounds i32, ptr %1517, i64 %1519
  %1521 = load i32, ptr %1520, align 4, !tbaa !9
  %1522 = sext i32 %1521 to i64
  %1523 = getelementptr inbounds i32, ptr %1516, i64 %1522
  store i32 -1, ptr %1523, align 4, !tbaa !9
  br label %1524

1524:                                             ; preds = %1507
  %1525 = load i32, ptr %11, align 4, !tbaa !9
  %1526 = add nsw i32 %1525, 1
  store i32 %1526, ptr %11, align 4, !tbaa !9
  br label %1451, !llvm.loop !66

1527:                                             ; preds = %1451
  %1528 = load ptr, ptr %6, align 8, !tbaa !5
  %1529 = getelementptr inbounds %struct.ctrl_t, ptr %1528, i32 0, i32 2
  %1530 = load i32, ptr %1529, align 8, !tbaa !36
  %1531 = and i32 %1530, 8
  %1532 = icmp ne i32 %1531, 0
  br i1 %1532, label %1533, label %1579

1533:                                             ; preds = %1527
  %1534 = load ptr, ptr %29, align 8, !tbaa !5
  %1535 = load i32, ptr %19, align 4, !tbaa !9
  %1536 = sext i32 %1535 to i64
  %1537 = load ptr, ptr %29, align 8, !tbaa !5
  %1538 = call i64 @libmetis__iargmin(i64 noundef %1536, ptr noundef %1537)
  %1539 = getelementptr inbounds i32, ptr %1534, i64 %1538
  %1540 = load i32, ptr %1539, align 4, !tbaa !9
  %1541 = load i32, ptr %19, align 4, !tbaa !9
  %1542 = sext i32 %1541 to i64
  %1543 = load ptr, ptr %29, align 8, !tbaa !5
  %1544 = call i32 @libmetis__imax(i64 noundef %1542, ptr noundef %1543)
  %1545 = load ptr, ptr %7, align 8, !tbaa !5
  %1546 = load i32, ptr %19, align 4, !tbaa !9
  %1547 = load ptr, ptr %6, align 8, !tbaa !5
  %1548 = getelementptr inbounds %struct.ctrl_t, ptr %1547, i32 0, i32 25
  %1549 = load ptr, ptr %1548, align 8, !tbaa !37
  %1550 = call float @libmetis__ComputeLoadImbalance(ptr noundef %1545, i32 noundef %1546, ptr noundef %1549)
  %1551 = fpext float %1550 to double
  %1552 = load ptr, ptr %7, align 8, !tbaa !5
  %1553 = getelementptr inbounds %struct.graph_t, ptr %1552, i32 0, i32 21
  %1554 = load i32, ptr %1553, align 8, !tbaa !38
  %1555 = load i32, ptr %36, align 4, !tbaa !9
  %1556 = load ptr, ptr %7, align 8, !tbaa !5
  %1557 = getelementptr inbounds %struct.graph_t, ptr %1556, i32 0, i32 17
  %1558 = load i32, ptr %1557, align 8, !tbaa !39
  %1559 = load ptr, ptr %7, align 8, !tbaa !5
  %1560 = getelementptr inbounds %struct.graph_t, ptr %1559, i32 0, i32 18
  %1561 = load i32, ptr %1560, align 4, !tbaa !40
  %1562 = call i32 (ptr, ...) @printf(ptr noundef @.str.32, i32 noundef %1540, i32 noundef %1544, double noundef %1551, i32 noundef %1554, i32 noundef %1555, i32 noundef %1558, i32 noundef %1561)
  %1563 = load ptr, ptr %6, align 8, !tbaa !5
  %1564 = getelementptr inbounds %struct.ctrl_t, ptr %1563, i32 0, i32 9
  %1565 = load i32, ptr %1564, align 4, !tbaa !30
  %1566 = icmp ne i32 %1565, 0
  br i1 %1566, label %1567, label %1577

1567:                                             ; preds = %1533
  %1568 = load i32, ptr %19, align 4, !tbaa !9
  %1569 = sext i32 %1568 to i64
  %1570 = load ptr, ptr %43, align 8, !tbaa !5
  %1571 = call i32 @libmetis__imax(i64 noundef %1569, ptr noundef %1570)
  %1572 = load i32, ptr %19, align 4, !tbaa !9
  %1573 = sext i32 %1572 to i64
  %1574 = load ptr, ptr %43, align 8, !tbaa !5
  %1575 = call i32 @libmetis__isum(i64 noundef %1573, ptr noundef %1574, i64 noundef 1)
  %1576 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %1571, i32 noundef %1575)
  br label %1577

1577:                                             ; preds = %1567, %1533
  %1578 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %1579

1579:                                             ; preds = %1577, %1527
  %1580 = load i32, ptr %36, align 4, !tbaa !9
  %1581 = icmp eq i32 %1580, 0
  br i1 %1581, label %1597, label %1582

1582:                                             ; preds = %1579
  %1583 = load i32, ptr %10, align 4, !tbaa !9
  %1584 = icmp eq i32 %1583, 1
  br i1 %1584, label %1585, label %1598

1585:                                             ; preds = %1582
  %1586 = load ptr, ptr %7, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct.graph_t, ptr %1586, i32 0, i32 18
  %1588 = load i32, ptr %1587, align 4, !tbaa !40
  %1589 = load i32, ptr %52, align 4, !tbaa !9
  %1590 = icmp eq i32 %1588, %1589
  br i1 %1590, label %1591, label %1598

1591:                                             ; preds = %1585
  %1592 = load ptr, ptr %7, align 8, !tbaa !5
  %1593 = getelementptr inbounds %struct.graph_t, ptr %1592, i32 0, i32 17
  %1594 = load i32, ptr %1593, align 8, !tbaa !39
  %1595 = load i32, ptr %24, align 4, !tbaa !9
  %1596 = icmp eq i32 %1594, %1595
  br i1 %1596, label %1597, label %1598

1597:                                             ; preds = %1591, %1579
  br label %1602

1598:                                             ; preds = %1591, %1585, %1582
  br label %1599

1599:                                             ; preds = %1598
  %1600 = load i32, ptr %17, align 4, !tbaa !9
  %1601 = add nsw i32 %1600, 1
  store i32 %1601, ptr %17, align 4, !tbaa !9
  br label %333, !llvm.loop !67

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

; 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 i64 @libmetis__iargmin(i64 noundef, 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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

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

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

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

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


; 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.33 = external hidden unnamed_addr constant [72 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
@__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize = external hidden unnamed_addr constant [81 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [67 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Greedy_KWayVolOptimize(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) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  %8 = icmp eq i32 %4, 1
  %9 = select i1 %8, i32 1, i32 2
  tail call void @libmetis__wspacepush(ptr noundef %0) #6
  %10 = load i32, ptr %1, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %1, i64 16
  %12 = load ptr, ptr %11, align 8, !tbaa !11
  %13 = getelementptr inbounds i8, ptr %1, i64 40
  %14 = load ptr, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %1, i64 152
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %1, i64 120
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %1, i64 128
  %20 = load ptr, ptr %19, align 8, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %0, i64 92
  %22 = load i32, ptr %21, align 4, !tbaa !16
  %23 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %22) #6
  %24 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %22) #6
  %25 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %22) #6
  %26 = icmp sgt i32 %22, 0
  br i1 %26, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %5
  %27 = getelementptr inbounds i8, ptr %0, i64 112
  %28 = load ptr, ptr %27, align 8, !tbaa !21
  %29 = getelementptr inbounds i8, ptr %1, i64 56
  %30 = load ptr, ptr %29, align 8, !tbaa !22
  %31 = getelementptr inbounds i8, ptr %0, i64 104
  %32 = load ptr, ptr %31, align 8, !tbaa !23
  %33 = load float, ptr %32, align 4, !tbaa !24
  %34 = fpext float %33 to double
  %35 = fdiv double 1.000000e+00, %34
  %wide.trip.count = zext nneg i32 %22 to i64
  %min.iters.check = icmp ult i32 %22, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph
  %36 = shl nuw nsw i64 %wide.trip.count, 2
  %scevgep = getelementptr i8, ptr %25, i64 %36
  %scevgep737 = getelementptr i8, ptr %24, i64 %36
  %scevgep738 = getelementptr i8, ptr %23, i64 %36
  %scevgep739 = getelementptr i8, ptr %30, i64 4
  %bound0 = icmp ult ptr %25, %scevgep737
  %bound1 = icmp ult ptr %24, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0740 = icmp ult ptr %25, %scevgep738
  %bound1741 = icmp ult ptr %23, %scevgep
  %found.conflict742 = and i1 %bound0740, %bound1741
  %conflict.rdx = or i1 %found.conflict, %found.conflict742
  %bound0743 = icmp ult ptr %25, %scevgep739
  %bound1744 = icmp ult ptr %30, %scevgep
  %found.conflict745 = and i1 %bound0743, %bound1744
  %conflict.rdx746 = or i1 %conflict.rdx, %found.conflict745
  %bound0747 = icmp ult ptr %24, %scevgep738
  %bound1748 = icmp ult ptr %23, %scevgep737
  %found.conflict749 = and i1 %bound0747, %bound1748
  %conflict.rdx750 = or i1 %conflict.rdx746, %found.conflict749
  %bound0751 = icmp ult ptr %24, %scevgep739
  %bound1752 = icmp ult ptr %30, %scevgep737
  %found.conflict753 = and i1 %bound0751, %bound1752
  %conflict.rdx754 = or i1 %conflict.rdx750, %found.conflict753
  %bound0755 = icmp ult ptr %23, %scevgep739
  %bound1756 = icmp ult ptr %30, %scevgep738
  %found.conflict757 = and i1 %bound0755, %bound1756
  %conflict.rdx758 = or i1 %conflict.rdx754, %found.conflict757
  br i1 %conflict.rdx758, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483644
  %broadcast.splatinsert761 = insertelement <4 x float> poison, float %33, i64 0
  %broadcast.splat762 = shufflevector <4 x float> %broadcast.splatinsert761, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert765 = insertelement <4 x double> poison, double %35, i64 0
  %broadcast.splat766 = shufflevector <4 x double> %broadcast.splatinsert765, <4 x double> poison, <4 x i32> zeroinitializer
  %37 = load i32, ptr %30, align 4, !tbaa !25, !alias.scope !26
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %37, i64 0
  %38 = sitofp <4 x i32> %broadcast.splatinsert to <4 x float>
  %39 = shufflevector <4 x float> %38, <4 x float> poison, <4 x i32> zeroinitializer
  %40 = load i32, ptr %30, align 4, !tbaa !25, !alias.scope !26
  %broadcast.splatinsert759 = insertelement <4 x i32> poison, i32 %40, i64 0
  %41 = sitofp <4 x i32> %broadcast.splatinsert759 to <4 x float>
  %42 = shufflevector <4 x float> %41, <4 x float> poison, <4 x i32> zeroinitializer
  %43 = load i32, ptr %30, align 4, !tbaa !25, !alias.scope !26
  %broadcast.splatinsert763 = insertelement <4 x i32> poison, i32 %43, i64 0
  %44 = sitofp <4 x i32> %broadcast.splatinsert763 to <4 x float>
  %45 = shufflevector <4 x float> %44, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %46 = getelementptr inbounds float, ptr %28, i64 %index
  %wide.load = load <4 x float>, ptr %46, align 4, !tbaa !24
  %47 = fmul <4 x float> %wide.load, %39
  %48 = fptosi <4 x float> %47 to <4 x i32>
  %49 = getelementptr inbounds i32, ptr %25, i64 %index
  store <4 x i32> %48, ptr %49, align 4, !tbaa !25, !alias.scope !29, !noalias !31
  %50 = fmul <4 x float> %wide.load, %42
  %51 = fmul <4 x float> %50, %broadcast.splat762
  %52 = fptosi <4 x float> %51 to <4 x i32>
  %53 = getelementptr inbounds i32, ptr %24, i64 %index
  store <4 x i32> %52, ptr %53, align 4, !tbaa !25, !alias.scope !34, !noalias !35
  %54 = fmul <4 x float> %wide.load, %45
  %55 = fpext <4 x float> %54 to <4 x double>
  %56 = fmul <4 x double> %broadcast.splat766, %55
  %57 = fptosi <4 x double> %56 to <4 x i32>
  %58 = getelementptr inbounds i32, ptr %23, i64 %index
  store <4 x i32> %57, ptr %58, align 4, !tbaa !25, !alias.scope !36, !noalias !26
  %index.next = add nuw i64 %index, 4
  %59 = icmp eq i64 %index.next, %n.vec
  br i1 %59, label %middle.block, label %vector.body, !llvm.loop !37

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

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 ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %60 = getelementptr inbounds float, ptr %28, i64 %indvars.iv
  %61 = load float, ptr %60, align 4, !tbaa !24
  %62 = load i32, ptr %30, align 4, !tbaa !25
  %63 = sitofp i32 %62 to float
  %64 = fmul float %61, %63
  %65 = fptosi float %64 to i32
  %66 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv
  store i32 %65, ptr %66, align 4, !tbaa !25
  %67 = load i32, ptr %30, align 4, !tbaa !25
  %68 = sitofp i32 %67 to float
  %69 = fmul float %61, %68
  %70 = fmul float %69, %33
  %71 = fptosi float %70 to i32
  %72 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv
  store i32 %71, ptr %72, align 4, !tbaa !25
  %73 = load i32, ptr %30, align 4, !tbaa !25
  %74 = sitofp i32 %73 to float
  %75 = fmul float %61, %74
  %76 = fpext float %75 to double
  %77 = fmul double %35, %76
  %78 = fptosi double %77 to i32
  %79 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv
  store i32 %78, ptr %79, align 4, !tbaa !25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !41

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %5
  %80 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %81 = sext i32 %22 to i64
  %82 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %22) #6
  %83 = tail call ptr @libmetis__iset(i64 noundef %81, i32 noundef 2, ptr noundef %82) #6
  %84 = getelementptr inbounds i8, ptr %0, i64 36
  %85 = load i32, ptr %84, align 4, !tbaa !42
  %.not = icmp eq i32 %85, 0
  br i1 %.not, label %94, label %86

86:                                               ; preds = %._crit_edge
  tail call void @libmetis__ComputeSubDomainGraph(ptr noundef nonnull %0, ptr noundef nonnull %1) #6
  %87 = getelementptr inbounds i8, ptr %0, i64 288
  %88 = load ptr, ptr %87, align 8, !tbaa !43
  %89 = getelementptr inbounds i8, ptr %0, i64 296
  %90 = load ptr, ptr %89, align 8, !tbaa !44
  %91 = getelementptr inbounds i8, ptr %0, i64 312
  %92 = load ptr, ptr %91, align 8, !tbaa !45
  %93 = tail call ptr @libmetis__iset(i64 noundef %81, i32 noundef 0, ptr noundef %92) #6
  br label %94

94:                                               ; preds = %86, %._crit_edge
  %.0523 = phi ptr [ %93, %86 ], [ null, %._crit_edge ]
  %.0522 = phi ptr [ %90, %86 ], [ null, %._crit_edge ]
  %.0518 = phi ptr [ %88, %86 ], [ null, %._crit_edge ]
  %95 = sext i32 %10 to i64
  %96 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %97 = tail call ptr @libmetis__iset(i64 noundef %95, i32 noundef 3, ptr noundef %96) #6
  %98 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %99 = tail call ptr @libmetis__iset(i64 noundef %95, i32 noundef -1, ptr noundef %98) #6
  %100 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %101 = getelementptr inbounds i8, ptr %0, i64 40
  %102 = load i32, ptr %101, align 8, !tbaa !46
  %.not533 = icmp eq i32 %102, 0
  br i1 %.not533, label %109, label %103

103:                                              ; preds = %94
  %104 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %105 = tail call ptr @libmetis__iset(i64 noundef %95, i32 noundef 0, ptr noundef %104) #6
  %106 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %107 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %108 = tail call ptr @libmetis__iset(i64 noundef %95, i32 noundef 0, ptr noundef %107) #6
  br label %109

109:                                              ; preds = %103, %94
  %.0521 = phi ptr [ %105, %103 ], [ null, %94 ]
  %.0520 = phi ptr [ %106, %103 ], [ null, %94 ]
  %.0519 = phi ptr [ %108, %103 ], [ null, %94 ]
  %110 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %111 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %10) #6
  %112 = tail call ptr @libmetis__iset(i64 noundef %95, i32 noundef 0, ptr noundef %111) #6
  %113 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %22) #6
  %114 = tail call ptr @libmetis__iset(i64 noundef %81, i32 noundef -1, ptr noundef %113) #6
  %115 = getelementptr inbounds i8, ptr %0, i64 8
  %116 = load i32, ptr %115, align 8, !tbaa !47
  %117 = and i32 %116, 8
  %.not534 = icmp eq i32 %117, 0
  br i1 %.not534, label %145, label %118

118:                                              ; preds = %109
  %119 = select i1 %8, ptr @.str.34, ptr @.str.35
  %120 = tail call i64 @libmetis__iargmin(i64 noundef %81, ptr noundef %20) #6
  %121 = getelementptr inbounds i32, ptr %20, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !25
  %123 = tail call i32 @libmetis__imax(i64 noundef %81, ptr noundef %20) #6
  %124 = load i32, ptr %23, align 4, !tbaa !25
  %125 = load i32, ptr %24, align 4, !tbaa !25
  %126 = getelementptr inbounds i8, ptr %0, i64 120
  %127 = load ptr, ptr %126, align 8, !tbaa !48
  %128 = tail call float @libmetis__ComputeLoadImbalance(ptr noundef nonnull %1, i32 noundef %22, ptr noundef %127) #6
  %129 = fpext float %128 to double
  %130 = load i32, ptr %1, align 8, !tbaa !5
  %131 = getelementptr inbounds i8, ptr %1, i64 136
  %132 = load i32, ptr %131, align 8, !tbaa !49
  %133 = getelementptr inbounds i8, ptr %1, i64 112
  %134 = load i32, ptr %133, align 8, !tbaa !50
  %135 = getelementptr inbounds i8, ptr %1, i64 116
  %136 = load i32, ptr %135, align 4, !tbaa !51
  %137 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.33, ptr noundef nonnull %119, i32 noundef %122, i32 noundef %123, i32 noundef %124, i32 noundef %125, double noundef %129, i32 noundef %130, i32 noundef %132, i32 noundef %134, i32 noundef %136)
  %138 = load i32, ptr %84, align 4, !tbaa !42
  %.not535 = icmp eq i32 %138, 0
  br i1 %.not535, label %143, label %139

139:                                              ; preds = %118
  %140 = tail call i32 @libmetis__imax(i64 noundef %81, ptr noundef %.0518) #6
  %141 = tail call i32 @libmetis__isum(i64 noundef %81, ptr noundef %.0518, i64 noundef 1) #6
  %142 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %140, i32 noundef %141)
  br label %143

143:                                              ; preds = %139, %118
  %144 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %145

145:                                              ; preds = %143, %109
  %146 = tail call ptr @libmetis__ipqCreate(i64 noundef %95) #6
  %147 = icmp sgt i32 %2, 0
  br i1 %147, label %.lr.ph641, label %._crit_edge642

.lr.ph641:                                        ; preds = %145
  %148 = getelementptr inbounds i8, ptr %1, i64 116
  %149 = icmp eq i32 %4, 2
  %150 = getelementptr inbounds i8, ptr %1, i64 112
  %151 = getelementptr inbounds i8, ptr %1, i64 136
  %152 = getelementptr inbounds i8, ptr %1, i64 184
  %153 = getelementptr inbounds i8, ptr %0, i64 272
  %154 = getelementptr inbounds i8, ptr %1, i64 24
  %155 = getelementptr inbounds i8, ptr %1, i64 32
  %156 = getelementptr inbounds i8, ptr %0, i64 120
  %wide.trip.count658 = zext nneg i32 %22 to i64
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph641
  %.0514639 = phi i32 [ 0, %.lr.ph641 ], [ %.0514639.be, %.backedge.backedge ]
  %157 = call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %18) #6
  %158 = load i32, ptr %148, align 4, !tbaa !51
  %159 = icmp eq i32 %157, %158
  br i1 %159, label %166, label %160

160:                                              ; preds = %.backedge
  %161 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, i32 noundef 470, ptr noundef nonnull @.str.7)
  %162 = call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %18) #6
  %163 = load i32, ptr %148, align 4, !tbaa !51
  %164 = icmp eq i32 %162, %163
  br i1 %164, label %166, label %165

165:                                              ; preds = %160
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.7, i32 noundef 470, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #7
  unreachable

166:                                              ; preds = %160, %.backedge
  %167 = phi i32 [ %162, %160 ], [ %157, %.backedge ]
  br i1 %149, label %.preheader573, label %176

.preheader573:                                    ; preds = %166
  br i1 %26, label %.lr.ph582, label %._crit_edge583

.lr.ph582:                                        ; preds = %.preheader573, %173
  %indvars.iv655 = phi i64 [ %indvars.iv.next656, %173 ], [ 0, %.preheader573 ]
  %168 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv655
  %169 = load i32, ptr %168, align 4, !tbaa !25
  %170 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv655
  %171 = load i32, ptr %170, align 4, !tbaa !25
  %172 = icmp sgt i32 %169, %171
  br i1 %172, label %._crit_edge583.loopexit, label %173

173:                                              ; preds = %.lr.ph582
  %indvars.iv.next656 = add nuw nsw i64 %indvars.iv655, 1
  %exitcond659.not = icmp eq i64 %indvars.iv.next656, %wide.trip.count658
  br i1 %exitcond659.not, label %._crit_edge642, label %.lr.ph582, !llvm.loop !52

._crit_edge583.loopexit:                          ; preds = %.lr.ph582
  %174 = trunc nuw nsw i64 %indvars.iv655 to i32
  br label %._crit_edge583

._crit_edge583:                                   ; preds = %._crit_edge583.loopexit, %.preheader573
  %.1.lcssa = phi i32 [ 0, %.preheader573 ], [ %174, %._crit_edge583.loopexit ]
  %175 = icmp eq i32 %.1.lcssa, %22
  br i1 %175, label %._crit_edge642, label %176

176:                                              ; preds = %._crit_edge583, %166
  %177 = load i32, ptr %150, align 8, !tbaa !50
  store i32 0, ptr %6, align 4, !tbaa !25
  %178 = load i32, ptr %84, align 4, !tbaa !42
  %.not536 = icmp eq i32 %178, 0
  br i1 %.not536, label %181, label %179

179:                                              ; preds = %176
  %180 = call i32 @libmetis__imax(i64 noundef %81, ptr noundef %.0518) #6
  store i32 %180, ptr %7, align 4, !tbaa !25
  br label %181

181:                                              ; preds = %179, %176
  %182 = load i32, ptr %151, align 8, !tbaa !49
  %183 = sdiv i32 %182, 4
  call void @libmetis__irandArrayPermute(i32 noundef %182, ptr noundef %80, i32 noundef %183, i32 noundef 1) #6
  %184 = load i32, ptr %151, align 8, !tbaa !49
  %185 = icmp sgt i32 %184, 0
  br i1 %185, label %.lr.ph588, label %.preheader572

.preheader572:                                    ; preds = %207, %181
  %186 = call i32 @libmetis__ipqGetTop(ptr noundef %146) #6
  %187 = icmp eq i32 %186, -1
  br i1 %187, label %.preheader571, label %.lr.ph634

.lr.ph588:                                        ; preds = %181, %207
  %indvars.iv660 = phi i64 [ %indvars.iv.next661, %207 ], [ 0, %181 ]
  %188 = getelementptr inbounds i32, ptr %80, i64 %indvars.iv660
  %189 = load i32, ptr %188, align 4, !tbaa !25
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i32, ptr %16, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !25
  %193 = load ptr, ptr %152, align 8, !tbaa !53
  %194 = sext i32 %192 to i64
  %195 = getelementptr inbounds %struct.vkrinfo_t, ptr %193, i64 %194, i32 2
  %196 = load i32, ptr %195, align 4, !tbaa !54
  %197 = call i32 @libmetis__ipqInsert(ptr noundef %146, i32 noundef %192, i32 noundef %196) #6
  %198 = getelementptr inbounds i32, ptr %97, i64 %194
  store i32 1, ptr %198, align 4, !tbaa !25
  %199 = getelementptr inbounds i32, ptr %99, i64 %194
  %200 = load i32, ptr %199, align 4, !tbaa !25
  %201 = icmp eq i32 %200, -1
  br i1 %201, label %207, label %202

202:                                              ; preds = %.lr.ph588
  %203 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 495, ptr noundef nonnull @.str.7)
  %204 = load i32, ptr %199, align 4, !tbaa !25
  %205 = icmp eq i32 %204, -1
  br i1 %205, label %207, label %206

206:                                              ; preds = %202
  call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.7, i32 noundef 495, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #7
  unreachable

207:                                              ; preds = %202, %.lr.ph588
  %208 = load i32, ptr %6, align 4, !tbaa !25
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i32, ptr %100, i64 %209
  store i32 %192, ptr %210, align 4, !tbaa !25
  %211 = load i32, ptr %6, align 4, !tbaa !25
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %6, align 4, !tbaa !25
  store i32 %211, ptr %199, align 4, !tbaa !25
  %indvars.iv.next661 = add nuw nsw i64 %indvars.iv660, 1
  %213 = load i32, ptr %151, align 8, !tbaa !49
  %214 = sext i32 %213 to i64
  %215 = icmp slt i64 %indvars.iv.next661, %214
  br i1 %215, label %.lr.ph588, label %.preheader572, !llvm.loop !56

.preheader571:                                    ; preds = %.thread, %.preheader572
  %.0516.lcssa = phi i32 [ 0, %.preheader572 ], [ %.1517, %.thread ]
  %216 = load i32, ptr %6, align 4, !tbaa !25
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %.lr.ph637, label %._crit_edge638

.lr.ph634:                                        ; preds = %.preheader572, %.thread
  %218 = phi i32 [ %604, %.thread ], [ %186, %.preheader572 ]
  %.0506632 = phi i32 [ %603, %.thread ], [ 0, %.preheader572 ]
  %.0516631 = phi i32 [ %.1517, %.thread ], [ 0, %.preheader572 ]
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %97, i64 %219
  store i32 2, ptr %220, align 4, !tbaa !25
  %221 = load ptr, ptr %152, align 8, !tbaa !53
  %222 = getelementptr inbounds %struct.vkrinfo_t, ptr %221, i64 %219
  %223 = load ptr, ptr %153, align 8, !tbaa !57
  %224 = getelementptr inbounds i8, ptr %222, i64 16
  %225 = load i32, ptr %224, align 4, !tbaa !58
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds %struct.vnbr_t, ptr %223, i64 %226
  %228 = getelementptr inbounds i32, ptr %18, i64 %219
  %229 = load i32, ptr %228, align 4, !tbaa !25
  %230 = load ptr, ptr %154, align 8, !tbaa !59
  %231 = getelementptr inbounds i32, ptr %230, i64 %219
  %232 = load i32, ptr %231, align 4, !tbaa !25
  br i1 %8, label %233, label %244

233:                                              ; preds = %.lr.ph634
  %234 = load i32, ptr %222, align 4, !tbaa !60
  %235 = icmp sgt i32 %234, 0
  br i1 %235, label %236, label %252

236:                                              ; preds = %233
  %237 = sext i32 %229 to i64
  %238 = getelementptr inbounds i32, ptr %20, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !25
  %240 = sub nsw i32 %239, %232
  %241 = getelementptr inbounds i32, ptr %23, i64 %237
  %242 = load i32, ptr %241, align 4, !tbaa !25
  %243 = icmp slt i32 %240, %242
  br i1 %243, label %.thread, label %252

244:                                              ; preds = %.lr.ph634
  %245 = sext i32 %229 to i64
  %246 = getelementptr inbounds i32, ptr %20, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !25
  %248 = sub nsw i32 %247, %232
  %249 = getelementptr inbounds i32, ptr %23, i64 %245
  %250 = load i32, ptr %249, align 4, !tbaa !25
  %251 = icmp slt i32 %248, %250
  br i1 %251, label %.thread, label %252

252:                                              ; preds = %244, %233, %236
  %253 = load i32, ptr %101, align 8, !tbaa !46
  %.not537 = icmp eq i32 %253, 0
  br i1 %.not537, label %256, label %254

254:                                              ; preds = %252
  %255 = call i32 @libmetis__IsArticulationNode(i32 noundef %218, ptr noundef %12, ptr noundef %14, ptr noundef nonnull %18, ptr noundef %.0521, ptr noundef %.0520, ptr noundef %.0519)
  %.not538 = icmp eq i32 %255, 0
  br i1 %.not538, label %256, label %.thread

256:                                              ; preds = %254, %252
  %257 = load i32, ptr %84, align 4, !tbaa !42
  %.not539 = icmp eq i32 %257, 0
  br i1 %.not539, label %.loopexit570, label %.preheader569

.preheader569:                                    ; preds = %256
  %258 = getelementptr inbounds i8, ptr %222, i64 12
  %259 = load i32, ptr %258, align 4, !tbaa !61
  %260 = icmp sgt i32 %259, 0
  br i1 %260, label %.lr.ph605, label %.loopexit570

.lr.ph605:                                        ; preds = %.preheader569, %._crit_edge603
  %indvars.iv674 = phi i64 [ %indvars.iv.next675, %._crit_edge603 ], [ 0, %.preheader569 ]
  %261 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %indvars.iv674
  %262 = load i32, ptr %261, align 4, !tbaa !62
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %83, i64 %263
  store i32 0, ptr %264, align 4, !tbaa !25
  %265 = getelementptr inbounds i32, ptr %.0518, i64 %263
  %266 = load i32, ptr %265, align 4, !tbaa !25
  %267 = icmp sgt i32 %266, 0
  br i1 %267, label %.lr.ph591, label %.preheader

.lr.ph591:                                        ; preds = %.lr.ph605
  %268 = getelementptr inbounds ptr, ptr %.0522, i64 %263
  %269 = load ptr, ptr %268, align 8, !tbaa !64
  br label %272

.preheader:                                       ; preds = %272, %.lr.ph605
  %.lcssa = phi i32 [ %266, %.lr.ph605 ], [ %277, %272 ]
  %270 = load i32, ptr %258, align 4, !tbaa !61
  %271 = icmp sgt i32 %270, 0
  %.pre = load i32, ptr %7, align 4
  br i1 %271, label %.lr.ph595, label %.thread714

.lr.ph595:                                        ; preds = %.preheader
  %wide.trip.count669 = zext nneg i32 %270 to i64
  br label %280

272:                                              ; preds = %.lr.ph591, %272
  %indvars.iv663 = phi i64 [ 0, %.lr.ph591 ], [ %indvars.iv.next664, %272 ]
  %273 = getelementptr inbounds i32, ptr %269, i64 %indvars.iv663
  %274 = load i32, ptr %273, align 4, !tbaa !25
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds i32, ptr %.0523, i64 %275
  store i32 1, ptr %276, align 4, !tbaa !25
  %indvars.iv.next664 = add nuw nsw i64 %indvars.iv663, 1
  %277 = load i32, ptr %265, align 4, !tbaa !25
  %278 = sext i32 %277 to i64
  %279 = icmp slt i64 %indvars.iv.next664, %278
  br i1 %279, label %272, label %.preheader, !llvm.loop !65

280:                                              ; preds = %.lr.ph595, %294
  %indvars.iv666 = phi i64 [ 0, %.lr.ph595 ], [ %indvars.iv.next667, %294 ]
  %.0498594 = phi i32 [ 0, %.lr.ph595 ], [ %.1499, %294 ]
  %281 = icmp eq i64 %indvars.iv666, %indvars.iv674
  br i1 %281, label %294, label %282

282:                                              ; preds = %280
  %283 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %indvars.iv666
  %284 = load i32, ptr %283, align 4, !tbaa !62
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds i32, ptr %.0523, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !25
  %288 = icmp eq i32 %287, 0
  br i1 %288, label %289, label %294

289:                                              ; preds = %282
  %290 = getelementptr inbounds i32, ptr %.0518, i64 %285
  %291 = load i32, ptr %290, align 4, !tbaa !25
  %.not552 = icmp slt i32 %291, %.pre
  br i1 %.not552, label %292, label %._crit_edge596

292:                                              ; preds = %289
  %293 = add nsw i32 %.0498594, 1
  br label %294

294:                                              ; preds = %282, %292, %280
  %.1499 = phi i32 [ %.0498594, %280 ], [ %293, %292 ], [ %.0498594, %282 ]
  %indvars.iv.next667 = add nuw nsw i64 %indvars.iv666, 1
  %exitcond670.not = icmp eq i64 %indvars.iv.next667, %wide.trip.count669
  br i1 %exitcond670.not, label %._crit_edge596, label %280, !llvm.loop !66

._crit_edge596:                                   ; preds = %294, %289
  %.2500 = phi i32 [ %.1499, %294 ], [ %.pre, %289 ]
  %.2500.fr = freeze i32 %.2500
  %295 = add nsw i32 %.2500.fr, %.lcssa
  %.not553 = icmp sle i32 %295, %.pre
  %296 = icmp eq i32 %.2500.fr, 0
  %297 = or i1 %296, %.not553
  br i1 %297, label %298, label %301

298:                                              ; preds = %._crit_edge596
  br i1 %296, label %.thread714, label %299

.thread714:                                       ; preds = %.preheader, %298
  br label %299

299:                                              ; preds = %298, %.thread714
  %300 = phi i32 [ 2, %.thread714 ], [ 1, %298 ]
  store i32 %300, ptr %264, align 4, !tbaa !25
  %.pre701 = load i32, ptr %265, align 4, !tbaa !25
  br label %301

301:                                              ; preds = %._crit_edge596, %299
  %302 = phi i32 [ %.lcssa, %._crit_edge596 ], [ %.pre701, %299 ]
  %303 = icmp sgt i32 %302, 0
  br i1 %303, label %.lr.ph602, label %._crit_edge603

.lr.ph602:                                        ; preds = %301
  %304 = getelementptr inbounds ptr, ptr %.0522, i64 %263
  %305 = load ptr, ptr %304, align 8, !tbaa !64
  br label %306

306:                                              ; preds = %.lr.ph602, %306
  %indvars.iv671 = phi i64 [ 0, %.lr.ph602 ], [ %indvars.iv.next672, %306 ]
  %307 = getelementptr inbounds i32, ptr %305, i64 %indvars.iv671
  %308 = load i32, ptr %307, align 4, !tbaa !25
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %.0523, i64 %309
  store i32 0, ptr %310, align 4, !tbaa !25
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %311 = load i32, ptr %265, align 4, !tbaa !25
  %312 = sext i32 %311 to i64
  %313 = icmp slt i64 %indvars.iv.next672, %312
  br i1 %313, label %306, label %._crit_edge603, !llvm.loop !67

._crit_edge603:                                   ; preds = %306, %301
  %indvars.iv.next675 = add nuw nsw i64 %indvars.iv674, 1
  %314 = load i32, ptr %258, align 4, !tbaa !61
  %315 = sext i32 %314 to i64
  %316 = icmp slt i64 %indvars.iv.next675, %315
  br i1 %316, label %.lr.ph605, label %.loopexit570, !llvm.loop !68

.loopexit570:                                     ; preds = %._crit_edge603, %.preheader569, %256
  %317 = load i32, ptr %222, align 4, !tbaa !60
  %318 = icmp eq i32 %317, 0
  br i1 %318, label %319, label %327

319:                                              ; preds = %.loopexit570
  %320 = getelementptr inbounds i8, ptr %222, i64 4
  %321 = load i32, ptr %320, align 4, !tbaa !69
  %322 = icmp sgt i32 %321, 0
  br i1 %322, label %323, label %327

323:                                              ; preds = %319
  %324 = load ptr, ptr %155, align 8, !tbaa !70
  %325 = getelementptr inbounds i32, ptr %324, i64 %219
  %326 = load i32, ptr %325, align 4, !tbaa !25
  br label %327

327:                                              ; preds = %.loopexit570, %319, %323
  %328 = phi i32 [ %326, %323 ], [ 0, %319 ], [ 0, %.loopexit570 ]
  %329 = getelementptr inbounds i8, ptr %222, i64 12
  %330 = load i32, ptr %329, align 4, !tbaa !61
  %331 = icmp sgt i32 %330, 0
  br i1 %8, label %332, label %469

332:                                              ; preds = %327
  br i1 %331, label %.lr.ph621.preheader, label %.thread

.lr.ph621.preheader:                              ; preds = %332
  %333 = zext nneg i32 %330 to i64
  %334 = add nsw i32 %330, -2
  br label %.lr.ph621

.lr.ph621:                                        ; preds = %.lr.ph621.preheader, %356
  %indvars.iv689 = phi i32 [ %334, %.lr.ph621.preheader ], [ %indvars.iv.next690, %356 ]
  %indvars.iv686 = phi i64 [ %333, %.lr.ph621.preheader ], [ %indvars.iv.next687, %356 ]
  %indvars.iv.next687 = add nsw i64 %indvars.iv686, -1
  %335 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %indvars.iv.next687
  %336 = load i32, ptr %335, align 4, !tbaa !62
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds i32, ptr %83, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !25
  %.not544 = icmp eq i32 %339, 0
  br i1 %.not544, label %356, label %340

340:                                              ; preds = %.lr.ph621
  %341 = getelementptr inbounds i8, ptr %335, i64 8
  %342 = load i32, ptr %341, align 4, !tbaa !71
  %343 = add nsw i32 %342, %328
  %344 = icmp sgt i32 %343, -1
  br i1 %344, label %345, label %356

345:                                              ; preds = %340
  %346 = getelementptr inbounds i32, ptr %20, i64 %337
  %347 = load i32, ptr %346, align 4, !tbaa !25
  %348 = add nsw i32 %347, %232
  %349 = sitofp i32 %348 to float
  %350 = getelementptr inbounds i32, ptr %24, i64 %337
  %351 = load i32, ptr %350, align 4, !tbaa !25
  %352 = sitofp i32 %351 to float
  %353 = uitofp nneg i32 %343 to float
  %354 = call float @llvm.fmuladd.f32(float %3, float %353, float %352)
  %355 = fcmp ult float %354, %349
  br i1 %355, label %356, label %358

356:                                              ; preds = %340, %345, %.lr.ph621
  %357 = icmp ugt i64 %indvars.iv686, 1
  %indvars.iv.next690 = add i32 %indvars.iv689, -1
  br i1 %357, label %.lr.ph621, label %.thread, !llvm.loop !72

358:                                              ; preds = %345
  %359 = trunc nuw nsw i64 %indvars.iv.next687 to i32
  %360 = icmp ugt i64 %indvars.iv686, 1
  br i1 %360, label %.lr.ph625.preheader, label %._crit_edge626

.lr.ph625.preheader:                              ; preds = %358
  %361 = zext i32 %indvars.iv689 to i64
  br label %.lr.ph625

.lr.ph625:                                        ; preds = %.lr.ph625.preheader, %419
  %indvars.iv692 = phi i64 [ %361, %.lr.ph625.preheader ], [ %indvars.iv.next693, %419 ]
  %.1511622 = phi i32 [ %359, %.lr.ph625.preheader ], [ %.2512, %419 ]
  %362 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %indvars.iv692
  %363 = load i32, ptr %362, align 4, !tbaa !62
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds i32, ptr %83, i64 %364
  %366 = load i32, ptr %365, align 4, !tbaa !25
  %.not550 = icmp eq i32 %366, 0
  br i1 %.not550, label %419, label %367

367:                                              ; preds = %.lr.ph625
  %368 = getelementptr inbounds i8, ptr %362, i64 8
  %369 = load i32, ptr %368, align 4, !tbaa !71
  %370 = zext nneg i32 %.1511622 to i64
  %371 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %370
  %372 = getelementptr inbounds i8, ptr %371, i64 8
  %373 = load i32, ptr %372, align 4, !tbaa !71
  %374 = icmp sgt i32 %369, %373
  br i1 %374, label %375, label %387

375:                                              ; preds = %367
  %376 = add nsw i32 %369, %328
  %377 = getelementptr inbounds i32, ptr %20, i64 %364
  %378 = load i32, ptr %377, align 4, !tbaa !25
  %379 = add nsw i32 %378, %232
  %380 = sitofp i32 %379 to float
  %381 = getelementptr inbounds i32, ptr %24, i64 %364
  %382 = load i32, ptr %381, align 4, !tbaa !25
  %383 = sitofp i32 %382 to float
  %384 = sitofp i32 %376 to float
  %385 = call float @llvm.fmuladd.f32(float %3, float %384, float %383)
  %386 = fcmp ult float %385, %380
  br i1 %386, label %387, label %417

387:                                              ; preds = %375, %367
  %388 = icmp eq i32 %369, %373
  br i1 %388, label %389, label %419

389:                                              ; preds = %387
  %390 = getelementptr inbounds i8, ptr %362, i64 4
  %391 = load i32, ptr %390, align 4, !tbaa !73
  %392 = getelementptr inbounds i8, ptr %371, i64 4
  %393 = load i32, ptr %392, align 4, !tbaa !73
  %394 = icmp sgt i32 %391, %393
  br i1 %394, label %395, label %401

395:                                              ; preds = %389
  %396 = getelementptr inbounds i32, ptr %20, i64 %364
  %397 = load i32, ptr %396, align 4, !tbaa !25
  %398 = add nsw i32 %397, %232
  %399 = getelementptr inbounds i32, ptr %24, i64 %364
  %400 = load i32, ptr %399, align 4, !tbaa !25
  %.not551 = icmp sgt i32 %398, %400
  br i1 %.not551, label %401, label %417

401:                                              ; preds = %395, %389
  %402 = icmp eq i32 %391, %393
  br i1 %402, label %403, label %419

403:                                              ; preds = %401
  %404 = load i32, ptr %371, align 4, !tbaa !62
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %25, i64 %405
  %407 = load i32, ptr %406, align 4, !tbaa !25
  %408 = getelementptr inbounds i32, ptr %20, i64 %364
  %409 = load i32, ptr %408, align 4, !tbaa !25
  %410 = mul nsw i32 %409, %407
  %411 = getelementptr inbounds i32, ptr %25, i64 %364
  %412 = load i32, ptr %411, align 4, !tbaa !25
  %413 = getelementptr inbounds i32, ptr %20, i64 %405
  %414 = load i32, ptr %413, align 4, !tbaa !25
  %415 = mul nsw i32 %414, %412
  %416 = icmp slt i32 %410, %415
  br i1 %416, label %417, label %419

417:                                              ; preds = %403, %395, %375
  %418 = trunc nuw i64 %indvars.iv692 to i32
  br label %419

419:                                              ; preds = %387, %401, %403, %417, %.lr.ph625
  %.2512 = phi i32 [ %418, %417 ], [ %.1511622, %403 ], [ %.1511622, %401 ], [ %.1511622, %.lr.ph625 ], [ %.1511622, %387 ]
  %indvars.iv.next693 = add nsw i64 %indvars.iv692, -1
  %420 = trunc nuw i64 %indvars.iv692 to i32
  %421 = icmp sgt i32 %420, 0
  br i1 %421, label %.lr.ph625, label %._crit_edge626, !llvm.loop !74

._crit_edge626:                                   ; preds = %419, %358
  %.1511.lcssa = phi i32 [ %359, %358 ], [ %.2512, %419 ]
  %422 = zext nneg i32 %.1511.lcssa to i64
  %423 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !62
  %425 = getelementptr inbounds i8, ptr %423, i64 8
  %426 = load i32, ptr %425, align 4, !tbaa !71
  %427 = add nsw i32 %426, %328
  %428 = icmp sgt i32 %427, -1
  br i1 %428, label %435, label %429

429:                                              ; preds = %._crit_edge626
  %430 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.38, i32 noundef 559, ptr noundef nonnull @.str.7)
  %431 = load i32, ptr %425, align 4, !tbaa !71
  %432 = add nsw i32 %431, %328
  %433 = icmp sgt i32 %432, -1
  br i1 %433, label %435, label %434

434:                                              ; preds = %429
  call void @__assert_fail(ptr noundef nonnull @.str.39, ptr noundef nonnull @.str.7, i32 noundef 559, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #7
  unreachable

435:                                              ; preds = %429, %._crit_edge626
  %.pre-phi703 = phi i32 [ %432, %429 ], [ %427, %._crit_edge626 ]
  %.not710 = icmp eq i32 %.pre-phi703, 0
  br i1 %.not710, label %436, label %.critedge

436:                                              ; preds = %435
  %437 = getelementptr inbounds i8, ptr %423, i64 4
  %438 = load i32, ptr %437, align 4, !tbaa !73
  %439 = load i32, ptr %222, align 4, !tbaa !60
  %440 = icmp sgt i32 %438, %439
  br i1 %440, label %.critedge, label %441

441:                                              ; preds = %436
  %442 = icmp eq i32 %438, %439
  br i1 %442, label %443, label %.thread

443:                                              ; preds = %441
  %444 = and i32 %.0506632, 1
  %445 = icmp eq i32 %444, 0
  br i1 %445, label %446, label %451

446:                                              ; preds = %443
  %447 = sext i32 %424 to i64
  %448 = getelementptr inbounds i32, ptr %83, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !25
  %450 = icmp eq i32 %449, 2
  br i1 %450, label %.critedge, label %451

451:                                              ; preds = %446, %443
  %452 = sext i32 %229 to i64
  %453 = getelementptr inbounds i32, ptr %20, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !25
  %455 = getelementptr inbounds i32, ptr %24, i64 %452
  %456 = load i32, ptr %455, align 4, !tbaa !25
  %.not545 = icmp slt i32 %454, %456
  br i1 %.not545, label %457, label %.critedge

457:                                              ; preds = %451
  %458 = getelementptr inbounds i32, ptr %25, i64 %452
  %459 = load i32, ptr %458, align 4, !tbaa !25
  %460 = sext i32 %424 to i64
  %461 = getelementptr inbounds i32, ptr %20, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !25
  %463 = add nsw i32 %462, %232
  %464 = mul nsw i32 %463, %459
  %465 = getelementptr inbounds i32, ptr %25, i64 %460
  %466 = load i32, ptr %465, align 4, !tbaa !25
  %467 = mul nsw i32 %466, %454
  %468 = icmp slt i32 %464, %467
  br i1 %468, label %.critedge, label %.thread

469:                                              ; preds = %327
  br i1 %331, label %.lr.ph610, label %.thread

.lr.ph610:                                        ; preds = %469
  %470 = sext i32 %229 to i64
  %471 = getelementptr inbounds i32, ptr %25, i64 %470
  %472 = getelementptr inbounds i32, ptr %20, i64 %470
  %473 = zext nneg i32 %330 to i64
  %474 = add nsw i32 %330, -2
  br label %475

475:                                              ; preds = %.lr.ph610, %494
  %indvars.iv680 = phi i32 [ %474, %.lr.ph610 ], [ %indvars.iv.next681, %494 ]
  %indvars.iv677 = phi i64 [ %473, %.lr.ph610 ], [ %indvars.iv.next678, %494 ]
  %indvars.iv.next678 = add nsw i64 %indvars.iv677, -1
  %476 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %indvars.iv.next678
  %477 = load i32, ptr %476, align 4, !tbaa !62
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %83, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !25
  %.not540 = icmp eq i32 %480, 0
  br i1 %.not540, label %494, label %481

481:                                              ; preds = %475
  %482 = getelementptr inbounds i32, ptr %20, i64 %478
  %483 = load i32, ptr %482, align 4, !tbaa !25
  %484 = add nsw i32 %483, %232
  %485 = getelementptr inbounds i32, ptr %24, i64 %478
  %486 = load i32, ptr %485, align 4, !tbaa !25
  %.not541 = icmp sgt i32 %484, %486
  br i1 %.not541, label %487, label %496

487:                                              ; preds = %481
  %488 = load i32, ptr %471, align 4, !tbaa !25
  %489 = mul nsw i32 %488, %484
  %490 = getelementptr inbounds i32, ptr %25, i64 %478
  %491 = load i32, ptr %490, align 4, !tbaa !25
  %492 = load i32, ptr %472, align 4, !tbaa !25
  %493 = mul nsw i32 %492, %491
  %.not542 = icmp sgt i32 %489, %493
  br i1 %.not542, label %494, label %496

494:                                              ; preds = %487, %475
  %495 = icmp ugt i64 %indvars.iv677, 1
  %indvars.iv.next681 = add i32 %indvars.iv680, -1
  br i1 %495, label %475, label %.thread, !llvm.loop !75

496:                                              ; preds = %481, %487
  %497 = trunc nuw nsw i64 %indvars.iv.next678 to i32
  %498 = icmp ugt i64 %indvars.iv677, 1
  br i1 %498, label %.lr.ph614.preheader, label %._crit_edge615

.lr.ph614.preheader:                              ; preds = %496
  %499 = zext i32 %indvars.iv680 to i64
  br label %.lr.ph614

.lr.ph614:                                        ; preds = %.lr.ph614.preheader, %522
  %indvars.iv683 = phi i64 [ %499, %.lr.ph614.preheader ], [ %indvars.iv.next684, %522 ]
  %.4611 = phi i32 [ %497, %.lr.ph614.preheader ], [ %.5, %522 ]
  %500 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %indvars.iv683
  %501 = load i32, ptr %500, align 4, !tbaa !62
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %83, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !25
  %.not543 = icmp eq i32 %504, 0
  br i1 %.not543, label %.lr.ph614._crit_edge, label %505

.lr.ph614._crit_edge:                             ; preds = %.lr.ph614
  %.pre708 = trunc nuw i64 %indvars.iv683 to i32
  br label %522

505:                                              ; preds = %.lr.ph614
  %506 = zext nneg i32 %.4611 to i64
  %507 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %506
  %508 = load i32, ptr %507, align 4, !tbaa !62
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds i32, ptr %25, i64 %509
  %511 = load i32, ptr %510, align 4, !tbaa !25
  %512 = getelementptr inbounds i32, ptr %20, i64 %502
  %513 = load i32, ptr %512, align 4, !tbaa !25
  %514 = mul nsw i32 %513, %511
  %515 = getelementptr inbounds i32, ptr %25, i64 %502
  %516 = load i32, ptr %515, align 4, !tbaa !25
  %517 = getelementptr inbounds i32, ptr %20, i64 %509
  %518 = load i32, ptr %517, align 4, !tbaa !25
  %519 = mul nsw i32 %518, %516
  %520 = icmp slt i32 %514, %519
  %521 = trunc nuw i64 %indvars.iv683 to i32
  %spec.select560 = select i1 %520, i32 %521, i32 %.4611
  br label %522

522:                                              ; preds = %.lr.ph614._crit_edge, %505
  %.pre-phi709 = phi i32 [ %.pre708, %.lr.ph614._crit_edge ], [ %521, %505 ]
  %.5 = phi i32 [ %.4611, %.lr.ph614._crit_edge ], [ %spec.select560, %505 ]
  %indvars.iv.next684 = add nsw i64 %indvars.iv683, -1
  %523 = icmp sgt i32 %.pre-phi709, 0
  br i1 %523, label %.lr.ph614, label %._crit_edge615, !llvm.loop !76

._crit_edge615:                                   ; preds = %522, %496
  %.4.lcssa = phi i32 [ %497, %496 ], [ %.5, %522 ]
  %524 = zext nneg i32 %.4.lcssa to i64
  %525 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !62
  %527 = load i32, ptr %472, align 4, !tbaa !25
  %528 = getelementptr inbounds i32, ptr %24, i64 %470
  %529 = load i32, ptr %528, align 4, !tbaa !25
  %530 = icmp slt i32 %527, %529
  br i1 %530, label %531, label %.critedge

531:                                              ; preds = %._crit_edge615
  %532 = sext i32 %526 to i64
  %533 = getelementptr inbounds i32, ptr %20, i64 %532
  %534 = load i32, ptr %533, align 4, !tbaa !25
  %535 = getelementptr inbounds i32, ptr %23, i64 %532
  %536 = load i32, ptr %535, align 4, !tbaa !25
  %537 = icmp sgt i32 %534, %536
  br i1 %537, label %538, label %.critedge

538:                                              ; preds = %531
  %539 = getelementptr inbounds i8, ptr %525, i64 8
  %540 = load i32, ptr %539, align 4, !tbaa !71
  %541 = add nsw i32 %540, %328
  %542 = icmp slt i32 %541, 0
  br i1 %542, label %.thread, label %543

543:                                              ; preds = %538
  %544 = icmp eq i32 %541, 0
  br i1 %544, label %545, label %.critedge

545:                                              ; preds = %543
  %546 = getelementptr inbounds i8, ptr %525, i64 4
  %547 = load i32, ptr %546, align 4, !tbaa !73
  %548 = icmp slt i32 %547, %317
  br i1 %548, label %.thread, label %.critedge

.critedge:                                        ; preds = %446, %451, %457, %436, %435, %545, %543, %531, %._crit_edge615
  %.pre-phi704 = phi i64 [ %422, %446 ], [ %422, %451 ], [ %422, %457 ], [ %422, %436 ], [ %422, %435 ], [ %524, %545 ], [ %524, %543 ], [ %524, %531 ], [ %524, %._crit_edge615 ]
  %.0515 = phi i32 [ %424, %446 ], [ %424, %451 ], [ %424, %457 ], [ %424, %436 ], [ %424, %435 ], [ %526, %545 ], [ %526, %543 ], [ %526, %531 ], [ %526, %._crit_edge615 ]
  %549 = sext i32 %.0515 to i64
  %550 = getelementptr inbounds i32, ptr %20, i64 %549
  %551 = load i32, ptr %550, align 4, !tbaa !25
  %552 = add nsw i32 %551, %232
  store i32 %552, ptr %550, align 4, !tbaa !25
  %553 = sext i32 %229 to i64
  %554 = getelementptr inbounds i32, ptr %20, i64 %553
  %555 = load i32, ptr %554, align 4, !tbaa !25
  %556 = sub nsw i32 %555, %232
  store i32 %556, ptr %554, align 4, !tbaa !25
  %557 = getelementptr inbounds %struct.vnbr_t, ptr %227, i64 %.pre-phi704
  %558 = getelementptr inbounds i8, ptr %557, i64 4
  %559 = load i32, ptr %558, align 4, !tbaa !73
  %560 = load i32, ptr %222, align 4, !tbaa !60
  %.neg = sub i32 %560, %559
  %561 = load i32, ptr %150, align 8, !tbaa !50
  %562 = add i32 %.neg, %561
  store i32 %562, ptr %150, align 8, !tbaa !50
  %563 = getelementptr inbounds i8, ptr %557, i64 8
  %564 = load i32, ptr %563, align 4, !tbaa !71
  %565 = load i32, ptr %148, align 4, !tbaa !51
  %566 = add i32 %564, %328
  %567 = sub i32 %565, %566
  store i32 %567, ptr %148, align 4, !tbaa !51
  store i32 %.0515, ptr %228, align 4, !tbaa !25
  %568 = add nsw i32 %.0516631, 1
  %569 = load i32, ptr %115, align 8, !tbaa !47
  %570 = and i32 %569, 32
  %.not546 = icmp eq i32 %570, 0
  br i1 %.not546, label %580, label %571

571:                                              ; preds = %.critedge
  %572 = load i32, ptr %563, align 4, !tbaa !71
  %573 = add nsw i32 %572, %328
  %574 = load i32, ptr %558, align 4, !tbaa !73
  %575 = load i32, ptr %222, align 4, !tbaa !60
  %576 = sub nsw i32 %574, %575
  %577 = load i32, ptr %150, align 8, !tbaa !50
  %578 = load i32, ptr %148, align 4, !tbaa !51
  %579 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40, i32 noundef %218, i32 noundef %229, i32 noundef %.0515, i32 noundef %573, i32 noundef %576, i32 noundef %577, i32 noundef %578)
  br label %580

580:                                              ; preds = %571, %.critedge
  %581 = load i32, ptr %84, align 4, !tbaa !42
  %.not547 = icmp eq i32 %581, 0
  br i1 %.not547, label %.loopexit, label %582

582:                                              ; preds = %580
  %583 = load i32, ptr %222, align 4, !tbaa !60
  %584 = load i32, ptr %558, align 4, !tbaa !73
  %585 = sub nsw i32 %583, %584
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef nonnull %0, i32 noundef %229, i32 noundef %.0515, i32 noundef %585, ptr noundef nonnull %7) #6
  %586 = getelementptr inbounds i32, ptr %12, i64 %219
  %587 = load i32, ptr %586, align 4, !tbaa !25
  %588 = getelementptr i8, ptr %586, i64 4
  %589 = load i32, ptr %588, align 4, !tbaa !25
  %590 = icmp slt i32 %587, %589
  br i1 %590, label %.lr.ph630.preheader, label %.loopexit

.lr.ph630.preheader:                              ; preds = %582
  %591 = sext i32 %587 to i64
  br label %.lr.ph630

.lr.ph630:                                        ; preds = %.lr.ph630.preheader, %599
  %592 = phi i32 [ %589, %.lr.ph630.preheader ], [ %600, %599 ]
  %indvars.iv695 = phi i64 [ %591, %.lr.ph630.preheader ], [ %indvars.iv.next696, %599 ]
  %593 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv695
  %594 = load i32, ptr %593, align 4, !tbaa !25
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds i32, ptr %18, i64 %595
  %597 = load i32, ptr %596, align 4, !tbaa !25
  %.not548 = icmp eq i32 %597, %229
  %.not549 = icmp eq i32 %597, %.0515
  %or.cond = or i1 %.not548, %.not549
  br i1 %or.cond, label %599, label %598

598:                                              ; preds = %.lr.ph630
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %0, i32 noundef %229, i32 noundef %597, i32 noundef -1, ptr noundef nonnull %7) #6
  call void @libmetis__UpdateEdgeSubDomainGraph(ptr noundef %0, i32 noundef %.0515, i32 noundef %597, i32 noundef 1, ptr noundef nonnull %7) #6
  %.pre702 = load i32, ptr %588, align 4, !tbaa !25
  br label %599

599:                                              ; preds = %.lr.ph630, %598
  %600 = phi i32 [ %592, %.lr.ph630 ], [ %.pre702, %598 ]
  %indvars.iv.next696 = add nsw i64 %indvars.iv695, 1
  %601 = sext i32 %600 to i64
  %602 = icmp slt i64 %indvars.iv.next696, %601
  br i1 %602, label %.lr.ph630, label %.loopexit, !llvm.loop !77

.loopexit:                                        ; preds = %599, %582, %580
  call void @libmetis__KWayVolUpdate(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %218, i32 noundef %229, i32 noundef %.0515, ptr noundef %146, ptr noundef %97, ptr noundef nonnull %6, ptr noundef %99, ptr noundef %100, i32 noundef %9, ptr noundef %112, ptr noundef %114, ptr noundef %110)
  br label %.thread

.thread:                                          ; preds = %494, %356, %469, %332, %457, %441, %538, %545, %254, %244, %236, %.loopexit
  %.1517 = phi i32 [ %.0516631, %236 ], [ %.0516631, %254 ], [ %568, %.loopexit ], [ %.0516631, %538 ], [ %.0516631, %545 ], [ %.0516631, %244 ], [ %.0516631, %441 ], [ %.0516631, %457 ], [ %.0516631, %332 ], [ %.0516631, %469 ], [ %.0516631, %356 ], [ %.0516631, %494 ]
  %603 = add nuw nsw i32 %.0506632, 1
  %604 = call i32 @libmetis__ipqGetTop(ptr noundef %146) #6
  %605 = icmp eq i32 %604, -1
  br i1 %605, label %.preheader571, label %.lr.ph634

.lr.ph637:                                        ; preds = %.preheader571, %629
  %indvars.iv698 = phi i64 [ %indvars.iv.next699, %629 ], [ 0, %.preheader571 ]
  %606 = getelementptr inbounds i32, ptr %100, i64 %indvars.iv698
  %607 = load i32, ptr %606, align 4, !tbaa !25
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds i32, ptr %99, i64 %608
  %610 = load i32, ptr %609, align 4, !tbaa !25
  %.not556 = icmp eq i32 %610, -1
  br i1 %.not556, label %611, label %618

611:                                              ; preds = %.lr.ph637
  %612 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef 640, ptr noundef nonnull @.str.7)
  %613 = load i32, ptr %606, align 4, !tbaa !25
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds i32, ptr %99, i64 %614
  %616 = load i32, ptr %615, align 4, !tbaa !25
  %.not557 = icmp eq i32 %616, -1
  br i1 %.not557, label %617, label %618

617:                                              ; preds = %611
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.7, i32 noundef 640, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #7
  unreachable

618:                                              ; preds = %611, %.lr.ph637
  %.pre-phi = phi i64 [ %614, %611 ], [ %608, %.lr.ph637 ]
  %619 = phi i32 [ %613, %611 ], [ %607, %.lr.ph637 ]
  %620 = getelementptr inbounds i32, ptr %97, i64 %.pre-phi
  %621 = load i32, ptr %620, align 4, !tbaa !25
  %.not558 = icmp eq i32 %621, 3
  br i1 %.not558, label %622, label %._crit_edge705

._crit_edge705:                                   ; preds = %618
  %.pre706 = sext i32 %619 to i64
  br label %629

622:                                              ; preds = %618
  %623 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.30, i32 noundef 641, ptr noundef nonnull @.str.7)
  %624 = load i32, ptr %606, align 4, !tbaa !25
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds i32, ptr %97, i64 %625
  %627 = load i32, ptr %626, align 4, !tbaa !25
  %.not559 = icmp eq i32 %627, 3
  br i1 %.not559, label %628, label %629

628:                                              ; preds = %622
  call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.7, i32 noundef 641, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Greedy_KWayVolOptimize) #7
  unreachable

629:                                              ; preds = %._crit_edge705, %622
  %.pre-phi707 = phi i64 [ %.pre706, %._crit_edge705 ], [ %625, %622 ]
  %630 = getelementptr inbounds i32, ptr %97, i64 %.pre-phi707
  store i32 3, ptr %630, align 4, !tbaa !25
  %631 = load i32, ptr %606, align 4, !tbaa !25
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds i32, ptr %99, i64 %632
  store i32 -1, ptr %633, align 4, !tbaa !25
  %indvars.iv.next699 = add nuw nsw i64 %indvars.iv698, 1
  %634 = load i32, ptr %6, align 4, !tbaa !25
  %635 = sext i32 %634 to i64
  %636 = icmp slt i64 %indvars.iv.next699, %635
  br i1 %636, label %.lr.ph637, label %._crit_edge638, !llvm.loop !78

._crit_edge638:                                   ; preds = %629, %.preheader571
  %637 = load i32, ptr %115, align 8, !tbaa !47
  %638 = and i32 %637, 8
  %.not554 = icmp eq i32 %638, 0
  br i1 %.not554, label %658, label %639

639:                                              ; preds = %._crit_edge638
  %640 = call i64 @libmetis__iargmin(i64 noundef %81, ptr noundef %20) #6
  %641 = getelementptr inbounds i32, ptr %20, i64 %640
  %642 = load i32, ptr %641, align 4, !tbaa !25
  %643 = call i32 @libmetis__imax(i64 noundef %81, ptr noundef %20) #6
  %644 = load ptr, ptr %156, align 8, !tbaa !48
  %645 = call float @libmetis__ComputeLoadImbalance(ptr noundef nonnull %1, i32 noundef %22, ptr noundef %644) #6
  %646 = fpext float %645 to double
  %647 = load i32, ptr %151, align 8, !tbaa !49
  %648 = load i32, ptr %150, align 8, !tbaa !50
  %649 = load i32, ptr %148, align 4, !tbaa !51
  %650 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32, i32 noundef %642, i32 noundef %643, double noundef %646, i32 noundef %647, i32 noundef %.0516.lcssa, i32 noundef %648, i32 noundef %649)
  %651 = load i32, ptr %84, align 4, !tbaa !42
  %.not555 = icmp eq i32 %651, 0
  br i1 %.not555, label %656, label %652

652:                                              ; preds = %639
  %653 = call i32 @libmetis__imax(i64 noundef %81, ptr noundef %.0518) #6
  %654 = call i32 @libmetis__isum(i64 noundef %81, ptr noundef %.0518, i64 noundef 1) #6
  %655 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %653, i32 noundef %654)
  br label %656

656:                                              ; preds = %652, %639
  %657 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %658

658:                                              ; preds = %656, %._crit_edge638
  %659 = icmp eq i32 %.0516.lcssa, 0
  br i1 %659, label %._crit_edge642, label %660

660:                                              ; preds = %658
  br i1 %8, label %661, label %669

661:                                              ; preds = %660
  %662 = load i32, ptr %148, align 4, !tbaa !51
  %663 = icmp eq i32 %662, %167
  br i1 %663, label %664, label %669

664:                                              ; preds = %661
  %665 = load i32, ptr %150, align 8, !tbaa !50
  %666 = icmp ne i32 %665, %177
  %667 = add nuw nsw i32 %.0514639, 1
  %668 = icmp slt i32 %667, %2
  %or.cond647 = select i1 %666, i1 %668, i1 false
  br i1 %or.cond647, label %.backedge.backedge, label %._crit_edge642

669:                                              ; preds = %660, %661
  %.old = add nuw nsw i32 %.0514639, 1
  %.old646 = icmp slt i32 %.old, %2
  br i1 %.old646, label %.backedge.backedge, label %._crit_edge642

.backedge.backedge:                               ; preds = %669, %664
  %.0514639.be = phi i32 [ %.old, %669 ], [ %667, %664 ]
  br label %.backedge, !llvm.loop !79

._crit_edge642:                                   ; preds = %669, %._crit_edge583, %664, %658, %173, %145
  call void @libmetis__ipqDestroy(ptr noundef %146) #6
  call void @libmetis__wspacepop(ptr noundef %0) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #2

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

declare ptr @libmetis__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 i64 @libmetis__iargmin(i64 noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

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

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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn nounwind }

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

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


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