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

; 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.ipq_t = type { i64, i64, ptr, ptr }
%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.ikv_t = type { i32, i32 }

@.str.1 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__EliminateSubDomainEdges = external hidden unnamed_addr constant [60 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1

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

; 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__iset(i64 noundef, i32 noundef, ptr noundef) #2

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

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

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

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

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

declare void @gk_errexit(i32 noundef, ptr noundef, ...) #2

declare void @libmetis__wspacepop(ptr noundef) #2

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__EliminateSubDomainEdges(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %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 %struct.ipq_t, align 8
  %48 = alloca ptr, align 8
  %49 = alloca float, align 4
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 0, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  store float 0x3FF6666660000000, ptr %49, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  store ptr null, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #4
  store ptr null, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #4
  store ptr null, ptr %54, align 8, !tbaa !5
  %55 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %55)
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graph_t, ptr %56, i32 0, i32 0
  %58 = load i32, ptr %57, align 8, !tbaa !13
  store i32 %58, ptr %16, align 4, !tbaa !9
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graph_t, ptr %59, i32 0, i32 2
  %61 = load i32, ptr %60, align 8, !tbaa !15
  store i32 %61, ptr %9, align 4, !tbaa !9
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graph_t, ptr %62, i32 0, i32 3
  %64 = load ptr, ptr %63, align 8, !tbaa !16
  store ptr %64, ptr %31, align 8, !tbaa !5
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.graph_t, ptr %65, i32 0, i32 6
  %67 = load ptr, ptr %66, align 8, !tbaa !17
  store ptr %67, ptr %32, align 8, !tbaa !5
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.graph_t, ptr %68, i32 0, i32 4
  %70 = load ptr, ptr %69, align 8, !tbaa !18
  store ptr %70, ptr %33, align 8, !tbaa !5
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ctrl_t, ptr %71, i32 0, i32 1
  %73 = load i32, ptr %72, align 4, !tbaa !19
  %74 = icmp eq i32 %73, 1
  br i1 %74, label %75, label %76

75:                                               ; preds = %2
  br label %80

76:                                               ; preds = %2
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.graph_t, ptr %77, i32 0, i32 7
  %79 = load ptr, ptr %78, align 8, !tbaa !23
  br label %80

80:                                               ; preds = %76, %75
  %81 = phi ptr [ null, %75 ], [ %79, %76 ]
  store ptr %81, ptr %34, align 8, !tbaa !5
  %82 = load ptr, ptr %4, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.graph_t, ptr %82, i32 0, i32 19
  %84 = load ptr, ptr %83, align 8, !tbaa !24
  store ptr %84, ptr %36, align 8, !tbaa !5
  %85 = load ptr, ptr %4, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.graph_t, ptr %85, i32 0, i32 20
  %87 = load ptr, ptr %86, align 8, !tbaa !25
  store ptr %87, ptr %35, align 8, !tbaa !5
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.ctrl_t, ptr %88, i32 0, i32 21
  %90 = load i32, ptr %89, align 4, !tbaa !26
  store i32 %90, ptr %10, align 4, !tbaa !9
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ctrl_t, ptr %91, i32 0, i32 24
  %93 = load ptr, ptr %92, align 8, !tbaa !27
  store ptr %93, ptr %48, align 8, !tbaa !5
  %94 = load ptr, ptr %3, align 8, !tbaa !5
  %95 = load i32, ptr %9, align 4, !tbaa !9
  %96 = call ptr @libmetis__iwspacemalloc(ptr noundef %94, i32 noundef %95)
  store ptr %96, ptr %30, align 8, !tbaa !5
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = load i32, ptr %10, align 4, !tbaa !9
  %99 = load i32, ptr %9, align 4, !tbaa !9
  %100 = mul nsw i32 %98, %99
  %101 = call ptr @libmetis__iwspacemalloc(ptr noundef %97, i32 noundef %100)
  store ptr %101, ptr %37, align 8, !tbaa !5
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = load i32, ptr %16, align 4, !tbaa !9
  %104 = call ptr @libmetis__iwspacemalloc(ptr noundef %102, i32 noundef %103)
  store ptr %104, ptr %41, align 8, !tbaa !5
  %105 = load i32, ptr %10, align 4, !tbaa !9
  %106 = sext i32 %105 to i64
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = load i32, ptr %10, align 4, !tbaa !9
  %109 = call ptr @libmetis__iwspacemalloc(ptr noundef %107, i32 noundef %108)
  %110 = call ptr @libmetis__iset(i64 noundef %106, i32 noundef 0, ptr noundef %109)
  store ptr %110, ptr %39, align 8, !tbaa !5
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = load i32, ptr %10, align 4, !tbaa !9
  %113 = call ptr @libmetis__ikvwspacemalloc(ptr noundef %111, i32 noundef %112)
  store ptr %113, ptr %45, align 8, !tbaa !5
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = load i32, ptr %10, align 4, !tbaa !9
  %116 = call ptr @libmetis__ikvwspacemalloc(ptr noundef %114, i32 noundef %115)
  store ptr %116, ptr %46, align 8, !tbaa !5
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = load i32, ptr %10, align 4, !tbaa !9
  %119 = add nsw i32 %118, 1
  %120 = call ptr @libmetis__iwspacemalloc(ptr noundef %117, i32 noundef %119)
  store ptr %120, ptr %50, align 8, !tbaa !5
  %121 = load ptr, ptr %3, align 8, !tbaa !5
  %122 = load i32, ptr %16, align 4, !tbaa !9
  %123 = call ptr @libmetis__iwspacemalloc(ptr noundef %121, i32 noundef %122)
  store ptr %123, ptr %51, align 8, !tbaa !5
  %124 = load i32, ptr %16, align 4, !tbaa !9
  %125 = load i32, ptr %10, align 4, !tbaa !9
  %126 = load ptr, ptr %36, align 8, !tbaa !5
  %127 = load ptr, ptr %50, align 8, !tbaa !5
  %128 = load ptr, ptr %51, align 8, !tbaa !5
  call void @libmetis__iarray2csr(i32 noundef %124, i32 noundef %125, ptr noundef %126, ptr noundef %127, ptr noundef %128)
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.ctrl_t, ptr %129, i32 0, i32 1
  %131 = load i32, ptr %130, align 4, !tbaa !19
  %132 = icmp eq i32 %131, 1
  br i1 %132, label %133, label %149

133:                                              ; preds = %80
  %134 = load ptr, ptr %3, align 8, !tbaa !5
  %135 = load i32, ptr %16, align 4, !tbaa !9
  %136 = call ptr @libmetis__iwspacemalloc(ptr noundef %134, i32 noundef %135)
  store ptr %136, ptr %54, align 8, !tbaa !5
  %137 = load i32, ptr %16, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = load ptr, ptr %3, align 8, !tbaa !5
  %140 = load i32, ptr %16, align 4, !tbaa !9
  %141 = call ptr @libmetis__iwspacemalloc(ptr noundef %139, i32 noundef %140)
  %142 = call ptr @libmetis__iset(i64 noundef %138, i32 noundef 0, ptr noundef %141)
  store ptr %142, ptr %52, align 8, !tbaa !5
  %143 = load i32, ptr %10, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = load ptr, ptr %3, align 8, !tbaa !5
  %146 = load i32, ptr %10, align 4, !tbaa !9
  %147 = call ptr @libmetis__iwspacemalloc(ptr noundef %145, i32 noundef %146)
  %148 = call ptr @libmetis__iset(i64 noundef %144, i32 noundef -1, ptr noundef %147)
  store ptr %148, ptr %53, align 8, !tbaa !5
  br label %149

149:                                              ; preds = %133, %80
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__ComputeSubDomainGraph(ptr noundef %150, ptr noundef %151)
  %152 = load ptr, ptr %3, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.ctrl_t, ptr %152, i32 0, i32 46
  %154 = load ptr, ptr %153, align 8, !tbaa !28
  store ptr %154, ptr %42, align 8, !tbaa !5
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.ctrl_t, ptr %155, i32 0, i32 47
  %157 = load ptr, ptr %156, align 8, !tbaa !29
  store ptr %157, ptr %43, align 8, !tbaa !5
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.ctrl_t, ptr %158, i32 0, i32 48
  %160 = load ptr, ptr %159, align 8, !tbaa !30
  store ptr %160, ptr %44, align 8, !tbaa !5
  %161 = load i32, ptr %10, align 4, !tbaa !9
  %162 = sext i32 %161 to i64
  %163 = load ptr, ptr %3, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.ctrl_t, ptr %163, i32 0, i32 49
  %165 = load ptr, ptr %164, align 8, !tbaa !31
  %166 = call ptr @libmetis__iset(i64 noundef %162, i32 noundef 0, ptr noundef %165)
  store ptr %166, ptr %38, align 8, !tbaa !5
  %167 = load i32, ptr %10, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.ctrl_t, ptr %169, i32 0, i32 50
  %171 = load ptr, ptr %170, align 8, !tbaa !32
  %172 = call ptr @libmetis__iset(i64 noundef %168, i32 noundef 0, ptr noundef %171)
  store ptr %172, ptr %40, align 8, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %225, %149
  %174 = load i32, ptr %5, align 4, !tbaa !9
  %175 = load i32, ptr %10, align 4, !tbaa !9
  %176 = icmp slt i32 %174, %175
  br i1 %176, label %177, label %228

177:                                              ; preds = %173
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %221, %177
  %179 = load i32, ptr %7, align 4, !tbaa !9
  %180 = load i32, ptr %9, align 4, !tbaa !9
  %181 = icmp slt i32 %179, %180
  br i1 %181, label %182, label %224

182:                                              ; preds = %178
  %183 = load i32, ptr %9, align 4, !tbaa !9
  %184 = icmp eq i32 %183, 1
  %185 = zext i1 %184 to i64
  %186 = select i1 %184, double 1.250000e+00, double 1.025000e+00
  %187 = load ptr, ptr %48, align 8, !tbaa !5
  %188 = load i32, ptr %5, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds float, ptr %187, i64 %189
  %191 = load float, ptr %190, align 4, !tbaa !11
  %192 = fpext float %191 to double
  %193 = fmul double %186, %192
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.graph_t, ptr %194, i32 0, i32 8
  %196 = load ptr, ptr %195, align 8, !tbaa !33
  %197 = load i32, ptr %7, align 4, !tbaa !9
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %196, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = sitofp i32 %200 to double
  %202 = fmul double %193, %201
  %203 = load ptr, ptr %3, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.ctrl_t, ptr %203, i32 0, i32 23
  %205 = load ptr, ptr %204, align 8, !tbaa !34
  %206 = load i32, ptr %7, align 4, !tbaa !9
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds float, ptr %205, i64 %207
  %209 = load float, ptr %208, align 4, !tbaa !11
  %210 = fpext float %209 to double
  %211 = fmul double %202, %210
  %212 = fptosi double %211 to i32
  %213 = load ptr, ptr %37, align 8, !tbaa !5
  %214 = load i32, ptr %5, align 4, !tbaa !9
  %215 = load i32, ptr %9, align 4, !tbaa !9
  %216 = mul nsw i32 %214, %215
  %217 = load i32, ptr %7, align 4, !tbaa !9
  %218 = add nsw i32 %216, %217
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %213, i64 %219
  store i32 %212, ptr %220, align 4, !tbaa !9
  br label %221

221:                                              ; preds = %182
  %222 = load i32, ptr %7, align 4, !tbaa !9
  %223 = add nsw i32 %222, 1
  store i32 %223, ptr %7, align 4, !tbaa !9
  br label %178, !llvm.loop !35

224:                                              ; preds = %178
  br label %225

225:                                              ; preds = %224
  %226 = load i32, ptr %5, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %5, align 4, !tbaa !9
  br label %173, !llvm.loop !37

228:                                              ; preds = %173
  %229 = load i32, ptr %10, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  call void @libmetis__ipqInit(ptr noundef %47, i64 noundef %230)
  br label %231

231:                                              ; preds = %1044, %228
  br label %232

232:                                              ; preds = %231
  %233 = load i32, ptr %10, align 4, !tbaa !9
  %234 = sext i32 %233 to i64
  %235 = load ptr, ptr %42, align 8, !tbaa !5
  %236 = call i32 @libmetis__isum(i64 noundef %234, ptr noundef %235, i64 noundef 1)
  store i32 %236, ptr %17, align 4, !tbaa !9
  %237 = load i32, ptr %17, align 4, !tbaa !9
  %238 = load i32, ptr %10, align 4, !tbaa !9
  %239 = sdiv i32 %237, %238
  store i32 %239, ptr %19, align 4, !tbaa !9
  %240 = load ptr, ptr %42, align 8, !tbaa !5
  %241 = load i32, ptr %10, align 4, !tbaa !9
  %242 = sext i32 %241 to i64
  %243 = load ptr, ptr %42, align 8, !tbaa !5
  %244 = call i64 @libmetis__iargmax(i64 noundef %242, ptr noundef %243)
  %245 = getelementptr inbounds i32, ptr %240, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !9
  store i32 %246, ptr %18, align 4, !tbaa !9
  %247 = load ptr, ptr %3, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.ctrl_t, ptr %247, i32 0, i32 2
  %249 = load i32, ptr %248, align 8, !tbaa !38
  %250 = and i32 %249, 128
  %251 = icmp ne i32 %250, 0
  br i1 %251, label %252, label %261

252:                                              ; preds = %232
  %253 = load i32, ptr %17, align 4, !tbaa !9
  %254 = load i32, ptr %18, align 4, !tbaa !9
  %255 = load i32, ptr %10, align 4, !tbaa !9
  %256 = sext i32 %255 to i64
  %257 = load ptr, ptr %42, align 8, !tbaa !5
  %258 = call i64 @libmetis__iargmax(i64 noundef %256, ptr noundef %257)
  %259 = load i32, ptr %19, align 4, !tbaa !9
  %260 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %253, i32 noundef %254, i64 noundef %258, i32 noundef %259)
  br label %261

261:                                              ; preds = %252, %232
  %262 = load i32, ptr %18, align 4, !tbaa !9
  %263 = sitofp i32 %262 to float
  %264 = load float, ptr %49, align 4, !tbaa !11
  %265 = load i32, ptr %19, align 4, !tbaa !9
  %266 = sitofp i32 %265 to float
  %267 = fmul float %264, %266
  %268 = fcmp olt float %263, %267
  br i1 %268, label %269, label %270

269:                                              ; preds = %261
  br label %1045

270:                                              ; preds = %261
  call void @libmetis__ipqReset(ptr noundef %47)
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %271

271:                                              ; preds = %297, %270
  %272 = load i32, ptr %5, align 4, !tbaa !9
  %273 = load i32, ptr %10, align 4, !tbaa !9
  %274 = icmp slt i32 %272, %273
  br i1 %274, label %275, label %300

275:                                              ; preds = %271
  %276 = load ptr, ptr %42, align 8, !tbaa !5
  %277 = load i32, ptr %5, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i32, ptr %276, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = load i32, ptr %19, align 4, !tbaa !9
  %282 = load i32, ptr %18, align 4, !tbaa !9
  %283 = load i32, ptr %19, align 4, !tbaa !9
  %284 = sub nsw i32 %282, %283
  %285 = sdiv i32 %284, 2
  %286 = add nsw i32 %281, %285
  %287 = icmp sge i32 %280, %286
  br i1 %287, label %288, label %296

288:                                              ; preds = %275
  %289 = load i32, ptr %5, align 4, !tbaa !9
  %290 = load ptr, ptr %42, align 8, !tbaa !5
  %291 = load i32, ptr %5, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %290, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = call i32 @libmetis__ipqInsert(ptr noundef %47, i32 noundef %289, i32 noundef %294)
  br label %296

296:                                              ; preds = %288, %275
  br label %297

297:                                              ; preds = %296
  %298 = load i32, ptr %5, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %5, align 4, !tbaa !9
  br label %271, !llvm.loop !39

300:                                              ; preds = %271
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %301

301:                                              ; preds = %1039, %300
  %302 = call i32 @libmetis__ipqGetTop(ptr noundef %47)
  store i32 %302, ptr %14, align 4, !tbaa !9
  %303 = icmp ne i32 %302, -1
  br i1 %303, label %304, label %1040

304:                                              ; preds = %301
  %305 = load ptr, ptr %42, align 8, !tbaa !5
  %306 = load i32, ptr %14, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %305, i64 %307
  %309 = load i32, ptr %308, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = load ptr, ptr %44, align 8, !tbaa !5
  %312 = load i32, ptr %14, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds ptr, ptr %311, i64 %313
  %315 = load ptr, ptr %314, align 8, !tbaa !5
  %316 = call i32 @libmetis__isum(i64 noundef %310, ptr noundef %315, i64 noundef 1)
  store i32 %316, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %396, %304
  %318 = load i32, ptr %5, align 4, !tbaa !9
  %319 = load ptr, ptr %42, align 8, !tbaa !5
  %320 = load i32, ptr %14, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = icmp slt i32 %318, %323
  br i1 %324, label %325, label %399

325:                                              ; preds = %317
  %326 = load ptr, ptr %44, align 8, !tbaa !5
  %327 = load i32, ptr %14, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds ptr, ptr %326, i64 %328
  %330 = load ptr, ptr %329, align 8, !tbaa !5
  %331 = load i32, ptr %5, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds i32, ptr %330, i64 %332
  %334 = load i32, ptr %333, align 4, !tbaa !9
  %335 = load ptr, ptr %38, align 8, !tbaa !5
  %336 = load ptr, ptr %43, align 8, !tbaa !5
  %337 = load i32, ptr %14, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds ptr, ptr %336, i64 %338
  %340 = load ptr, ptr %339, align 8, !tbaa !5
  %341 = load i32, ptr %5, align 4, !tbaa !9
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %340, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds i32, ptr %335, i64 %345
  store i32 %334, ptr %346, align 4, !tbaa !9
  %347 = load ptr, ptr %42, align 8, !tbaa !5
  %348 = load i32, ptr %14, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = mul nsw i32 2, %351
  %353 = load ptr, ptr %44, align 8, !tbaa !5
  %354 = load i32, ptr %14, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds ptr, ptr %353, i64 %355
  %357 = load ptr, ptr %356, align 8, !tbaa !5
  %358 = load i32, ptr %5, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i32, ptr %357, i64 %359
  %361 = load i32, ptr %360, align 4, !tbaa !9
  %362 = mul nsw i32 %352, %361
  %363 = load i32, ptr %20, align 4, !tbaa !9
  %364 = icmp slt i32 %362, %363
  br i1 %364, label %365, label %395

365:                                              ; preds = %325
  %366 = load ptr, ptr %43, align 8, !tbaa !5
  %367 = load i32, ptr %14, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds ptr, ptr %366, i64 %368
  %370 = load ptr, ptr %369, align 8, !tbaa !5
  %371 = load i32, ptr %5, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds i32, ptr %370, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !9
  %375 = load ptr, ptr %46, align 8, !tbaa !5
  %376 = load i32, ptr %23, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds %struct.ikv_t, ptr %375, i64 %377
  %379 = getelementptr inbounds %struct.ikv_t, ptr %378, i32 0, i32 1
  store i32 %374, ptr %379, align 4, !tbaa !40
  %380 = load ptr, ptr %44, align 8, !tbaa !5
  %381 = load i32, ptr %14, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds ptr, ptr %380, i64 %382
  %384 = load ptr, ptr %383, align 8, !tbaa !5
  %385 = load i32, ptr %5, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %384, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !9
  %389 = load ptr, ptr %46, align 8, !tbaa !5
  %390 = load i32, ptr %23, align 4, !tbaa !9
  %391 = add nsw i32 %390, 1
  store i32 %391, ptr %23, align 4, !tbaa !9
  %392 = sext i32 %390 to i64
  %393 = getelementptr inbounds %struct.ikv_t, ptr %389, i64 %392
  %394 = getelementptr inbounds %struct.ikv_t, ptr %393, i32 0, i32 0
  store i32 %388, ptr %394, align 4, !tbaa !42
  br label %395

395:                                              ; preds = %365, %325
  br label %396

396:                                              ; preds = %395
  %397 = load i32, ptr %5, align 4, !tbaa !9
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %5, align 4, !tbaa !9
  br label %317, !llvm.loop !43

399:                                              ; preds = %317
  %400 = load ptr, ptr %3, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.ctrl_t, ptr %400, i32 0, i32 2
  %402 = load i32, ptr %401, align 8, !tbaa !38
  %403 = and i32 %402, 128
  %404 = icmp ne i32 %403, 0
  br i1 %404, label %405, label %414

405:                                              ; preds = %399
  %406 = load i32, ptr %14, align 4, !tbaa !9
  %407 = load ptr, ptr %42, align 8, !tbaa !5
  %408 = load i32, ptr %14, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !9
  %412 = load i32, ptr %20, align 4, !tbaa !9
  %413 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef %406, i32 noundef %411, i32 noundef %412)
  br label %414

414:                                              ; preds = %405, %399
  %415 = load i32, ptr %23, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = load ptr, ptr %46, align 8, !tbaa !5
  call void @libmetis__ikvsorti(i64 noundef %416, ptr noundef %417)
  store i32 -1, ptr %25, align 4, !tbaa !9
  store i32 -1, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %418

418:                                              ; preds = %979, %414
  %419 = load i32, ptr %11, align 4, !tbaa !9
  %420 = icmp slt i32 %419, 2
  br i1 %420, label %421, label %982

421:                                              ; preds = %418
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %422

422:                                              ; preds = %971, %421
  %423 = load i32, ptr %28, align 4, !tbaa !9
  %424 = load i32, ptr %23, align 4, !tbaa !9
  %425 = icmp slt i32 %423, %424
  br i1 %425, label %426, label %974

426:                                              ; preds = %422
  %427 = load ptr, ptr %46, align 8, !tbaa !5
  %428 = load i32, ptr %28, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds %struct.ikv_t, ptr %427, i64 %429
  %431 = getelementptr inbounds %struct.ikv_t, ptr %430, i32 0, i32 1
  %432 = load i32, ptr %431, align 4, !tbaa !40
  store i32 %432, ptr %15, align 4, !tbaa !9
  %433 = load i32, ptr %11, align 4, !tbaa !9
  %434 = icmp eq i32 %433, 0
  br i1 %434, label %435, label %438

435:                                              ; preds = %426
  %436 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %436, ptr %12, align 4, !tbaa !9
  %437 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %437, ptr %13, align 4, !tbaa !9
  br label %441

438:                                              ; preds = %426
  %439 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %439, ptr %12, align 4, !tbaa !9
  %440 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %440, ptr %13, align 4, !tbaa !9
  br label %441

441:                                              ; preds = %438, %435
  store i32 0, ptr %21, align 4, !tbaa !9
  %442 = load ptr, ptr %50, align 8, !tbaa !5
  %443 = load i32, ptr %12, align 4, !tbaa !9
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %442, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !9
  store i32 %446, ptr %6, align 4, !tbaa !9
  br label %447

447:                                              ; preds = %520, %441
  %448 = load i32, ptr %6, align 4, !tbaa !9
  %449 = load ptr, ptr %50, align 8, !tbaa !5
  %450 = load i32, ptr %12, align 4, !tbaa !9
  %451 = add nsw i32 %450, 1
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i32, ptr %449, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = icmp slt i32 %448, %454
  br i1 %455, label %456, label %523

456:                                              ; preds = %447
  %457 = load ptr, ptr %51, align 8, !tbaa !5
  %458 = load i32, ptr %6, align 4, !tbaa !9
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %457, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !9
  store i32 %461, ptr %5, align 4, !tbaa !9
  %462 = load ptr, ptr %36, align 8, !tbaa !5
  %463 = load i32, ptr %5, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds i32, ptr %462, i64 %464
  %466 = load i32, ptr %465, align 4, !tbaa !9
  %467 = load i32, ptr %12, align 4, !tbaa !9
  %468 = icmp eq i32 %466, %467
  br i1 %468, label %481, label %469

469:                                              ; preds = %456
  %470 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 330, ptr noundef @.str.1)
  %471 = load ptr, ptr %36, align 8, !tbaa !5
  %472 = load i32, ptr %5, align 4, !tbaa !9
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds i32, ptr %471, i64 %473
  %475 = load i32, ptr %474, align 4, !tbaa !9
  %476 = load i32, ptr %12, align 4, !tbaa !9
  %477 = icmp eq i32 %475, %476
  br i1 %477, label %478, label %479

478:                                              ; preds = %469
  br label %480

479:                                              ; preds = %469
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 330, ptr noundef @__PRETTY_FUNCTION__.libmetis__EliminateSubDomainEdges) #5
  unreachable

480:                                              ; preds = %478
  br label %481

481:                                              ; preds = %480, %456
  %482 = load ptr, ptr %31, align 8, !tbaa !5
  %483 = load i32, ptr %5, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds i32, ptr %482, i64 %484
  %486 = load i32, ptr %485, align 4, !tbaa !9
  store i32 %486, ptr %7, align 4, !tbaa !9
  br label %487

487:                                              ; preds = %516, %481
  %488 = load i32, ptr %7, align 4, !tbaa !9
  %489 = load ptr, ptr %31, align 8, !tbaa !5
  %490 = load i32, ptr %5, align 4, !tbaa !9
  %491 = add nsw i32 %490, 1
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds i32, ptr %489, i64 %492
  %494 = load i32, ptr %493, align 4, !tbaa !9
  %495 = icmp slt i32 %488, %494
  br i1 %495, label %496, label %519

496:                                              ; preds = %487
  %497 = load ptr, ptr %36, align 8, !tbaa !5
  %498 = load ptr, ptr %32, align 8, !tbaa !5
  %499 = load i32, ptr %7, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds i32, ptr %498, i64 %500
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i32, ptr %497, i64 %503
  %505 = load i32, ptr %504, align 4, !tbaa !9
  %506 = load i32, ptr %13, align 4, !tbaa !9
  %507 = icmp eq i32 %505, %506
  br i1 %507, label %508, label %515

508:                                              ; preds = %496
  %509 = load i32, ptr %5, align 4, !tbaa !9
  %510 = load ptr, ptr %41, align 8, !tbaa !5
  %511 = load i32, ptr %21, align 4, !tbaa !9
  %512 = add nsw i32 %511, 1
  store i32 %512, ptr %21, align 4, !tbaa !9
  %513 = sext i32 %511 to i64
  %514 = getelementptr inbounds i32, ptr %510, i64 %513
  store i32 %509, ptr %514, align 4, !tbaa !9
  br label %519

515:                                              ; preds = %496
  br label %516

516:                                              ; preds = %515
  %517 = load i32, ptr %7, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %7, align 4, !tbaa !9
  br label %487, !llvm.loop !44

519:                                              ; preds = %508, %487
  br label %520

520:                                              ; preds = %519
  %521 = load i32, ptr %6, align 4, !tbaa !9
  %522 = add nsw i32 %521, 1
  store i32 %522, ptr %6, align 4, !tbaa !9
  br label %447, !llvm.loop !45

523:                                              ; preds = %447
  %524 = load i32, ptr %9, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = load ptr, ptr %30, align 8, !tbaa !5
  %527 = call ptr @libmetis__iset(i64 noundef %525, i32 noundef 0, ptr noundef %526)
  store i32 0, ptr %22, align 4, !tbaa !9
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %528

528:                                              ; preds = %612, %523
  %529 = load i32, ptr %6, align 4, !tbaa !9
  %530 = load i32, ptr %21, align 4, !tbaa !9
  %531 = icmp slt i32 %529, %530
  br i1 %531, label %532, label %615

532:                                              ; preds = %528
  %533 = load ptr, ptr %41, align 8, !tbaa !5
  %534 = load i32, ptr %6, align 4, !tbaa !9
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds i32, ptr %533, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !9
  store i32 %537, ptr %5, align 4, !tbaa !9
  %538 = load i32, ptr %9, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = load ptr, ptr %33, align 8, !tbaa !5
  %541 = load i32, ptr %5, align 4, !tbaa !9
  %542 = load i32, ptr %9, align 4, !tbaa !9
  %543 = mul nsw i32 %541, %542
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds i32, ptr %540, i64 %544
  %546 = load ptr, ptr %30, align 8, !tbaa !5
  %547 = call ptr @libmetis__iaxpy(i64 noundef %539, i32 noundef 1, ptr noundef %545, i64 noundef 1, ptr noundef %546, i64 noundef 1)
  %548 = load ptr, ptr %31, align 8, !tbaa !5
  %549 = load i32, ptr %5, align 4, !tbaa !9
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds i32, ptr %548, i64 %550
  %552 = load i32, ptr %551, align 4, !tbaa !9
  store i32 %552, ptr %7, align 4, !tbaa !9
  br label %553

553:                                              ; preds = %608, %532
  %554 = load i32, ptr %7, align 4, !tbaa !9
  %555 = load ptr, ptr %31, align 8, !tbaa !5
  %556 = load i32, ptr %5, align 4, !tbaa !9
  %557 = add nsw i32 %556, 1
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i32, ptr %555, i64 %558
  %560 = load i32, ptr %559, align 4, !tbaa !9
  %561 = icmp slt i32 %554, %560
  br i1 %561, label %562, label %611

562:                                              ; preds = %553
  %563 = load ptr, ptr %36, align 8, !tbaa !5
  %564 = load ptr, ptr %32, align 8, !tbaa !5
  %565 = load i32, ptr %7, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i32, ptr %564, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !9
  %569 = sext i32 %568 to i64
  %570 = getelementptr inbounds i32, ptr %563, i64 %569
  %571 = load i32, ptr %570, align 4, !tbaa !9
  store i32 %571, ptr %8, align 4, !tbaa !9
  %572 = load i32, ptr %12, align 4, !tbaa !9
  %573 = icmp eq i32 %571, %572
  br i1 %573, label %574, label %575

574:                                              ; preds = %562
  br label %608

575:                                              ; preds = %562
  %576 = load ptr, ptr %39, align 8, !tbaa !5
  %577 = load i32, ptr %8, align 4, !tbaa !9
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds i32, ptr %576, i64 %578
  %580 = load i32, ptr %579, align 4, !tbaa !9
  %581 = icmp eq i32 %580, 0
  br i1 %581, label %582, label %590

582:                                              ; preds = %575
  %583 = load i32, ptr %8, align 4, !tbaa !9
  %584 = load ptr, ptr %45, align 8, !tbaa !5
  %585 = load i32, ptr %22, align 4, !tbaa !9
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %22, align 4, !tbaa !9
  %587 = sext i32 %585 to i64
  %588 = getelementptr inbounds %struct.ikv_t, ptr %584, i64 %587
  %589 = getelementptr inbounds %struct.ikv_t, ptr %588, i32 0, i32 1
  store i32 %583, ptr %589, align 4, !tbaa !40
  br label %590

590:                                              ; preds = %582, %575
  %591 = load ptr, ptr %34, align 8, !tbaa !5
  %592 = icmp ne ptr %591, null
  br i1 %592, label %593, label %599

593:                                              ; preds = %590
  %594 = load ptr, ptr %34, align 8, !tbaa !5
  %595 = load i32, ptr %7, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds i32, ptr %594, i64 %596
  %598 = load i32, ptr %597, align 4, !tbaa !9
  br label %600

599:                                              ; preds = %590
  br label %600

600:                                              ; preds = %599, %593
  %601 = phi i32 [ %598, %593 ], [ 1, %599 ]
  %602 = load ptr, ptr %39, align 8, !tbaa !5
  %603 = load i32, ptr %8, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds i32, ptr %602, i64 %604
  %606 = load i32, ptr %605, align 4, !tbaa !9
  %607 = add nsw i32 %606, %601
  store i32 %607, ptr %605, align 4, !tbaa !9
  br label %608

608:                                              ; preds = %600, %574
  %609 = load i32, ptr %7, align 4, !tbaa !9
  %610 = add nsw i32 %609, 1
  store i32 %610, ptr %7, align 4, !tbaa !9
  br label %553, !llvm.loop !46

611:                                              ; preds = %553
  br label %612

612:                                              ; preds = %611
  %613 = load i32, ptr %6, align 4, !tbaa !9
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %6, align 4, !tbaa !9
  br label %528, !llvm.loop !47

615:                                              ; preds = %528
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %616

616:                                              ; preds = %656, %615
  %617 = load i32, ptr %5, align 4, !tbaa !9
  %618 = load i32, ptr %22, align 4, !tbaa !9
  %619 = icmp slt i32 %617, %618
  br i1 %619, label %620, label %659

620:                                              ; preds = %616
  %621 = load ptr, ptr %39, align 8, !tbaa !5
  %622 = load ptr, ptr %45, align 8, !tbaa !5
  %623 = load i32, ptr %5, align 4, !tbaa !9
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds %struct.ikv_t, ptr %622, i64 %624
  %626 = getelementptr inbounds %struct.ikv_t, ptr %625, i32 0, i32 1
  %627 = load i32, ptr %626, align 4, !tbaa !40
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i32, ptr %621, i64 %628
  %630 = load i32, ptr %629, align 4, !tbaa !9
  %631 = load ptr, ptr %45, align 8, !tbaa !5
  %632 = load i32, ptr %5, align 4, !tbaa !9
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds %struct.ikv_t, ptr %631, i64 %633
  %635 = getelementptr inbounds %struct.ikv_t, ptr %634, i32 0, i32 0
  store i32 %630, ptr %635, align 4, !tbaa !42
  %636 = load ptr, ptr %45, align 8, !tbaa !5
  %637 = load i32, ptr %5, align 4, !tbaa !9
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds %struct.ikv_t, ptr %636, i64 %638
  %640 = getelementptr inbounds %struct.ikv_t, ptr %639, i32 0, i32 0
  %641 = load i32, ptr %640, align 4, !tbaa !42
  %642 = icmp sgt i32 %641, 0
  br i1 %642, label %655, label %643

643:                                              ; preds = %620
  %644 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 357, ptr noundef @.str.1)
  %645 = load ptr, ptr %45, align 8, !tbaa !5
  %646 = load i32, ptr %5, align 4, !tbaa !9
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds %struct.ikv_t, ptr %645, i64 %647
  %649 = getelementptr inbounds %struct.ikv_t, ptr %648, i32 0, i32 0
  %650 = load i32, ptr %649, align 4, !tbaa !42
  %651 = icmp sgt i32 %650, 0
  br i1 %651, label %652, label %653

652:                                              ; preds = %643
  br label %654

653:                                              ; preds = %643
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 357, ptr noundef @__PRETTY_FUNCTION__.libmetis__EliminateSubDomainEdges) #5
  unreachable

654:                                              ; preds = %652
  br label %655

655:                                              ; preds = %654, %620
  br label %656

656:                                              ; preds = %655
  %657 = load i32, ptr %5, align 4, !tbaa !9
  %658 = add nsw i32 %657, 1
  store i32 %658, ptr %5, align 4, !tbaa !9
  br label %616, !llvm.loop !48

659:                                              ; preds = %616
  %660 = load i32, ptr %22, align 4, !tbaa !9
  %661 = sext i32 %660 to i64
  %662 = load ptr, ptr %45, align 8, !tbaa !5
  call void @libmetis__ikvsortd(i64 noundef %661, ptr noundef %662)
  %663 = load ptr, ptr %3, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.ctrl_t, ptr %663, i32 0, i32 2
  %665 = load i32, ptr %664, align 8, !tbaa !38
  %666 = and i32 %665, 128
  %667 = icmp ne i32 %666, 0
  br i1 %667, label %668, label %681

668:                                              ; preds = %659
  %669 = load ptr, ptr %38, align 8, !tbaa !5
  %670 = load i32, ptr %15, align 4, !tbaa !9
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds i32, ptr %669, i64 %671
  %673 = load i32, ptr %672, align 4, !tbaa !9
  %674 = load i32, ptr %15, align 4, !tbaa !9
  %675 = load i32, ptr %9, align 4, !tbaa !9
  %676 = sext i32 %675 to i64
  %677 = load ptr, ptr %30, align 8, !tbaa !5
  %678 = call i32 @libmetis__isum(i64 noundef %676, ptr noundef %677, i64 noundef 1)
  %679 = load i32, ptr %21, align 4, !tbaa !9
  %680 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i32 noundef %673, i32 noundef %674, i32 noundef %678, i32 noundef %679)
  br label %681

681:                                              ; preds = %668, %659
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %682

682:                                              ; preds = %927, %681
  %683 = load i32, ptr %5, align 4, !tbaa !9
  %684 = load i32, ptr %22, align 4, !tbaa !9
  %685 = icmp slt i32 %683, %684
  br i1 %685, label %686, label %930

686:                                              ; preds = %682
  %687 = load ptr, ptr %45, align 8, !tbaa !5
  %688 = load i32, ptr %5, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds %struct.ikv_t, ptr %687, i64 %689
  %691 = getelementptr inbounds %struct.ikv_t, ptr %690, i32 0, i32 1
  %692 = load i32, ptr %691, align 4, !tbaa !40
  store i32 %692, ptr %8, align 4, !tbaa !9
  %693 = load ptr, ptr %38, align 8, !tbaa !5
  %694 = load i32, ptr %8, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds i32, ptr %693, i64 %695
  %697 = load i32, ptr %696, align 4, !tbaa !9
  %698 = icmp sgt i32 %697, 0
  br i1 %698, label %699, label %922

699:                                              ; preds = %686
  %700 = load i32, ptr %9, align 4, !tbaa !9
  %701 = load ptr, ptr %30, align 8, !tbaa !5
  %702 = load ptr, ptr %35, align 8, !tbaa !5
  %703 = load i32, ptr %8, align 4, !tbaa !9
  %704 = load i32, ptr %9, align 4, !tbaa !9
  %705 = mul nsw i32 %703, %704
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i32, ptr %702, i64 %706
  %708 = load ptr, ptr %37, align 8, !tbaa !5
  %709 = load i32, ptr %8, align 4, !tbaa !9
  %710 = load i32, ptr %9, align 4, !tbaa !9
  %711 = mul nsw i32 %709, %710
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds i32, ptr %708, i64 %712
  %714 = call i32 @libmetis__ivecaxpylez(i32 noundef %700, i32 noundef 1, ptr noundef %701, ptr noundef %707, ptr noundef %713)
  %715 = icmp ne i32 %714, 0
  br i1 %715, label %717, label %716

716:                                              ; preds = %699
  br label %927

717:                                              ; preds = %699
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %718

718:                                              ; preds = %748, %717
  %719 = load i32, ptr %7, align 4, !tbaa !9
  %720 = load ptr, ptr %42, align 8, !tbaa !5
  %721 = load i32, ptr %8, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds i32, ptr %720, i64 %722
  %724 = load i32, ptr %723, align 4, !tbaa !9
  %725 = icmp slt i32 %719, %724
  br i1 %725, label %726, label %751

726:                                              ; preds = %718
  %727 = load ptr, ptr %44, align 8, !tbaa !5
  %728 = load i32, ptr %8, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds ptr, ptr %727, i64 %729
  %731 = load ptr, ptr %730, align 8, !tbaa !5
  %732 = load i32, ptr %7, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %731, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !9
  %736 = load ptr, ptr %40, align 8, !tbaa !5
  %737 = load ptr, ptr %43, align 8, !tbaa !5
  %738 = load i32, ptr %8, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds ptr, ptr %737, i64 %739
  %741 = load ptr, ptr %740, align 8, !tbaa !5
  %742 = load i32, ptr %7, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds i32, ptr %741, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i32, ptr %736, i64 %746
  store i32 %735, ptr %747, align 4, !tbaa !9
  br label %748

748:                                              ; preds = %726
  %749 = load i32, ptr %7, align 4, !tbaa !9
  %750 = add nsw i32 %749, 1
  store i32 %750, ptr %7, align 4, !tbaa !9
  br label %718, !llvm.loop !49

751:                                              ; preds = %718
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %752

752:                                              ; preds = %785, %751
  %753 = load i32, ptr %7, align 4, !tbaa !9
  %754 = load i32, ptr %10, align 4, !tbaa !9
  %755 = icmp slt i32 %753, %754
  br i1 %755, label %756, label %788

756:                                              ; preds = %752
  %757 = load ptr, ptr %39, align 8, !tbaa !5
  %758 = load i32, ptr %7, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds i32, ptr %757, i64 %759
  %761 = load i32, ptr %760, align 4, !tbaa !9
  %762 = icmp sgt i32 %761, 0
  br i1 %762, label %763, label %784

763:                                              ; preds = %756
  %764 = load ptr, ptr %40, align 8, !tbaa !5
  %765 = load i32, ptr %7, align 4, !tbaa !9
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds i32, ptr %764, i64 %766
  %768 = load i32, ptr %767, align 4, !tbaa !9
  %769 = icmp eq i32 %768, 0
  br i1 %769, label %770, label %784

770:                                              ; preds = %763
  %771 = load ptr, ptr %42, align 8, !tbaa !5
  %772 = load i32, ptr %7, align 4, !tbaa !9
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i32, ptr %771, i64 %773
  %775 = load i32, ptr %774, align 4, !tbaa !9
  %776 = add nsw i32 %775, 1
  %777 = load ptr, ptr %42, align 8, !tbaa !5
  %778 = load i32, ptr %14, align 4, !tbaa !9
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %777, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !9
  %782 = icmp sge i32 %776, %781
  br i1 %782, label %783, label %784

783:                                              ; preds = %770
  br label %788

784:                                              ; preds = %770, %763, %756
  br label %785

785:                                              ; preds = %784
  %786 = load i32, ptr %7, align 4, !tbaa !9
  %787 = add nsw i32 %786, 1
  store i32 %787, ptr %7, align 4, !tbaa !9
  br label %752, !llvm.loop !50

788:                                              ; preds = %783, %752
  %789 = load i32, ptr %7, align 4, !tbaa !9
  %790 = load i32, ptr %10, align 4, !tbaa !9
  %791 = icmp eq i32 %789, %790
  br i1 %791, label %792, label %896

792:                                              ; preds = %788
  store i32 0, ptr %26, align 4, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %793

793:                                              ; preds = %815, %792
  %794 = load i32, ptr %7, align 4, !tbaa !9
  %795 = load i32, ptr %10, align 4, !tbaa !9
  %796 = icmp slt i32 %794, %795
  br i1 %796, label %797, label %818

797:                                              ; preds = %793
  %798 = load ptr, ptr %39, align 8, !tbaa !5
  %799 = load i32, ptr %7, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds i32, ptr %798, i64 %800
  %802 = load i32, ptr %801, align 4, !tbaa !9
  %803 = icmp sgt i32 %802, 0
  br i1 %803, label %804, label %814

804:                                              ; preds = %797
  %805 = load ptr, ptr %40, align 8, !tbaa !5
  %806 = load i32, ptr %7, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds i32, ptr %805, i64 %807
  %809 = load i32, ptr %808, align 4, !tbaa !9
  %810 = icmp eq i32 %809, 0
  br i1 %810, label %811, label %814

811:                                              ; preds = %804
  %812 = load i32, ptr %26, align 4, !tbaa !9
  %813 = add nsw i32 %812, 1
  store i32 %813, ptr %26, align 4, !tbaa !9
  br label %814

814:                                              ; preds = %811, %804, %797
  br label %815

815:                                              ; preds = %814
  %816 = load i32, ptr %7, align 4, !tbaa !9
  %817 = add nsw i32 %816, 1
  store i32 %817, ptr %7, align 4, !tbaa !9
  br label %793, !llvm.loop !51

818:                                              ; preds = %793
  %819 = load ptr, ptr %3, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.ctrl_t, ptr %819, i32 0, i32 2
  %821 = load i32, ptr %820, align 8, !tbaa !38
  %822 = and i32 %821, 128
  %823 = icmp ne i32 %822, 0
  br i1 %823, label %824, label %833

824:                                              ; preds = %818
  %825 = load i32, ptr %8, align 4, !tbaa !9
  %826 = load i32, ptr %26, align 4, !tbaa !9
  %827 = load ptr, ptr %42, align 8, !tbaa !5
  %828 = load i32, ptr %8, align 4, !tbaa !9
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds i32, ptr %827, i64 %829
  %831 = load i32, ptr %830, align 4, !tbaa !9
  %832 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %825, i32 noundef %826, i32 noundef %831)
  br label %833

833:                                              ; preds = %824, %818
  %834 = load ptr, ptr %42, align 8, !tbaa !5
  %835 = load i32, ptr %8, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds i32, ptr %834, i64 %836
  %838 = load i32, ptr %837, align 4, !tbaa !9
  %839 = load i32, ptr %26, align 4, !tbaa !9
  %840 = add nsw i32 %838, %839
  %841 = load ptr, ptr %42, align 8, !tbaa !5
  %842 = load i32, ptr %14, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds i32, ptr %841, i64 %843
  %845 = load i32, ptr %844, align 4, !tbaa !9
  %846 = icmp slt i32 %840, %845
  br i1 %846, label %847, label %890

847:                                              ; preds = %833
  %848 = load i32, ptr %25, align 4, !tbaa !9
  %849 = icmp eq i32 %848, -1
  br i1 %849, label %886, label %850

850:                                              ; preds = %847
  %851 = load ptr, ptr %42, align 8, !tbaa !5
  %852 = load i32, ptr %25, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !9
  %856 = load i32, ptr %27, align 4, !tbaa !9
  %857 = add nsw i32 %855, %856
  %858 = load ptr, ptr %42, align 8, !tbaa !5
  %859 = load i32, ptr %8, align 4, !tbaa !9
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds i32, ptr %858, i64 %860
  %862 = load i32, ptr %861, align 4, !tbaa !9
  %863 = load i32, ptr %26, align 4, !tbaa !9
  %864 = add nsw i32 %862, %863
  %865 = icmp sgt i32 %857, %864
  br i1 %865, label %886, label %866

866:                                              ; preds = %850
  %867 = load ptr, ptr %42, align 8, !tbaa !5
  %868 = load i32, ptr %25, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds i32, ptr %867, i64 %869
  %871 = load i32, ptr %870, align 4, !tbaa !9
  %872 = load i32, ptr %27, align 4, !tbaa !9
  %873 = add nsw i32 %871, %872
  %874 = load ptr, ptr %42, align 8, !tbaa !5
  %875 = load i32, ptr %8, align 4, !tbaa !9
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds i32, ptr %874, i64 %876
  %878 = load i32, ptr %877, align 4, !tbaa !9
  %879 = load i32, ptr %26, align 4, !tbaa !9
  %880 = add nsw i32 %878, %879
  %881 = icmp eq i32 %873, %880
  br i1 %881, label %882, label %889

882:                                              ; preds = %866
  %883 = load i32, ptr %27, align 4, !tbaa !9
  %884 = load i32, ptr %26, align 4, !tbaa !9
  %885 = icmp sgt i32 %883, %884
  br i1 %885, label %886, label %889

886:                                              ; preds = %882, %850, %847
  %887 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %887, ptr %25, align 4, !tbaa !9
  %888 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %888, ptr %27, align 4, !tbaa !9
  br label %889

889:                                              ; preds = %886, %882, %866
  br label %890

890:                                              ; preds = %889, %833
  %891 = load i32, ptr %26, align 4, !tbaa !9
  %892 = icmp eq i32 %891, 0
  br i1 %892, label %893, label %895

893:                                              ; preds = %890
  %894 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %894, ptr %24, align 4, !tbaa !9
  br label %895

895:                                              ; preds = %893, %890
  br label %896

896:                                              ; preds = %895, %788
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %897

897:                                              ; preds = %918, %896
  %898 = load i32, ptr %7, align 4, !tbaa !9
  %899 = load ptr, ptr %42, align 8, !tbaa !5
  %900 = load i32, ptr %8, align 4, !tbaa !9
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds i32, ptr %899, i64 %901
  %903 = load i32, ptr %902, align 4, !tbaa !9
  %904 = icmp slt i32 %898, %903
  br i1 %904, label %905, label %921

905:                                              ; preds = %897
  %906 = load ptr, ptr %40, align 8, !tbaa !5
  %907 = load ptr, ptr %43, align 8, !tbaa !5
  %908 = load i32, ptr %8, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds ptr, ptr %907, i64 %909
  %911 = load ptr, ptr %910, align 8, !tbaa !5
  %912 = load i32, ptr %7, align 4, !tbaa !9
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds i32, ptr %911, i64 %913
  %915 = load i32, ptr %914, align 4, !tbaa !9
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds i32, ptr %906, i64 %916
  store i32 0, ptr %917, align 4, !tbaa !9
  br label %918

918:                                              ; preds = %905
  %919 = load i32, ptr %7, align 4, !tbaa !9
  %920 = add nsw i32 %919, 1
  store i32 %920, ptr %7, align 4, !tbaa !9
  br label %897, !llvm.loop !52

921:                                              ; preds = %897
  br label %922

922:                                              ; preds = %921, %686
  %923 = load i32, ptr %24, align 4, !tbaa !9
  %924 = icmp ne i32 %923, -1
  br i1 %924, label %925, label %926

925:                                              ; preds = %922
  br label %930

926:                                              ; preds = %922
  br label %927

927:                                              ; preds = %926, %716
  %928 = load i32, ptr %5, align 4, !tbaa !9
  %929 = add nsw i32 %928, 1
  store i32 %929, ptr %5, align 4, !tbaa !9
  br label %682, !llvm.loop !53

930:                                              ; preds = %925, %682
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %931

931:                                              ; preds = %945, %930
  %932 = load i32, ptr %5, align 4, !tbaa !9
  %933 = load i32, ptr %22, align 4, !tbaa !9
  %934 = icmp slt i32 %932, %933
  br i1 %934, label %935, label %948

935:                                              ; preds = %931
  %936 = load ptr, ptr %39, align 8, !tbaa !5
  %937 = load ptr, ptr %45, align 8, !tbaa !5
  %938 = load i32, ptr %5, align 4, !tbaa !9
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds %struct.ikv_t, ptr %937, i64 %939
  %941 = getelementptr inbounds %struct.ikv_t, ptr %940, i32 0, i32 1
  %942 = load i32, ptr %941, align 4, !tbaa !40
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds i32, ptr %936, i64 %943
  store i32 0, ptr %944, align 4, !tbaa !9
  br label %945

945:                                              ; preds = %935
  %946 = load i32, ptr %5, align 4, !tbaa !9
  %947 = add nsw i32 %946, 1
  store i32 %947, ptr %5, align 4, !tbaa !9
  br label %931, !llvm.loop !54

948:                                              ; preds = %931
  %949 = load i32, ptr %24, align 4, !tbaa !9
  %950 = icmp eq i32 %949, -1
  br i1 %950, label %951, label %956

951:                                              ; preds = %948
  %952 = load i32, ptr %25, align 4, !tbaa !9
  %953 = icmp ne i32 %952, -1
  br i1 %953, label %954, label %956

954:                                              ; preds = %951
  %955 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %955, ptr %24, align 4, !tbaa !9
  br label %956

956:                                              ; preds = %954, %951, %948
  %957 = load i32, ptr %24, align 4, !tbaa !9
  %958 = icmp ne i32 %957, -1
  br i1 %958, label %959, label %970

959:                                              ; preds = %956
  %960 = load ptr, ptr %3, align 8, !tbaa !5
  %961 = getelementptr inbounds %struct.ctrl_t, ptr %960, i32 0, i32 2
  %962 = load i32, ptr %961, align 8, !tbaa !38
  %963 = and i32 %962, 128
  %964 = icmp ne i32 %963, 0
  br i1 %964, label %965, label %969

965:                                              ; preds = %959
  %966 = load i32, ptr %11, align 4, !tbaa !9
  %967 = load i32, ptr %24, align 4, !tbaa !9
  %968 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef %966, i32 noundef %967)
  br label %969

969:                                              ; preds = %965, %959
  store i32 1, ptr %29, align 4, !tbaa !9
  br label %974

970:                                              ; preds = %956
  br label %971

971:                                              ; preds = %970
  %972 = load i32, ptr %28, align 4, !tbaa !9
  %973 = add nsw i32 %972, 1
  store i32 %973, ptr %28, align 4, !tbaa !9
  br label %422, !llvm.loop !55

974:                                              ; preds = %969, %422
  %975 = load i32, ptr %24, align 4, !tbaa !9
  %976 = icmp ne i32 %975, -1
  br i1 %976, label %977, label %978

977:                                              ; preds = %974
  br label %982

978:                                              ; preds = %974
  br label %979

979:                                              ; preds = %978
  %980 = load i32, ptr %11, align 4, !tbaa !9
  %981 = add nsw i32 %980, 1
  store i32 %981, ptr %11, align 4, !tbaa !9
  br label %418, !llvm.loop !56

982:                                              ; preds = %977, %418
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %983

983:                                              ; preds = %1004, %982
  %984 = load i32, ptr %5, align 4, !tbaa !9
  %985 = load ptr, ptr %42, align 8, !tbaa !5
  %986 = load i32, ptr %14, align 4, !tbaa !9
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds i32, ptr %985, i64 %987
  %989 = load i32, ptr %988, align 4, !tbaa !9
  %990 = icmp slt i32 %984, %989
  br i1 %990, label %991, label %1007

991:                                              ; preds = %983
  %992 = load ptr, ptr %38, align 8, !tbaa !5
  %993 = load ptr, ptr %43, align 8, !tbaa !5
  %994 = load i32, ptr %14, align 4, !tbaa !9
  %995 = sext i32 %994 to i64
  %996 = getelementptr inbounds ptr, ptr %993, i64 %995
  %997 = load ptr, ptr %996, align 8, !tbaa !5
  %998 = load i32, ptr %5, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds i32, ptr %997, i64 %999
  %1001 = load i32, ptr %1000, align 4, !tbaa !9
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds i32, ptr %992, i64 %1002
  store i32 0, ptr %1003, align 4, !tbaa !9
  br label %1004

1004:                                             ; preds = %991
  %1005 = load i32, ptr %5, align 4, !tbaa !9
  %1006 = add nsw i32 %1005, 1
  store i32 %1006, ptr %5, align 4, !tbaa !9
  br label %983, !llvm.loop !57

1007:                                             ; preds = %983
  %1008 = load i32, ptr %24, align 4, !tbaa !9
  %1009 = icmp ne i32 %1008, -1
  br i1 %1009, label %1010, label %1039

1010:                                             ; preds = %1007
  %1011 = load ptr, ptr %3, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.ctrl_t, ptr %1011, i32 0, i32 1
  %1013 = load i32, ptr %1012, align 4, !tbaa !19
  switch i32 %1013, label %1029 [
    i32 0, label %1014
    i32 1, label %1020
  ]

1014:                                             ; preds = %1010
  %1015 = load ptr, ptr %3, align 8, !tbaa !5
  %1016 = load ptr, ptr %4, align 8, !tbaa !5
  %1017 = load i32, ptr %24, align 4, !tbaa !9
  %1018 = load i32, ptr %21, align 4, !tbaa !9
  %1019 = load ptr, ptr %41, align 8, !tbaa !5
  call void @libmetis__MoveGroupMinConnForCut(ptr noundef %1015, ptr noundef %1016, i32 noundef %1017, i32 noundef %1018, ptr noundef %1019)
  br label %1033

1020:                                             ; preds = %1010
  %1021 = load ptr, ptr %3, align 8, !tbaa !5
  %1022 = load ptr, ptr %4, align 8, !tbaa !5
  %1023 = load i32, ptr %24, align 4, !tbaa !9
  %1024 = load i32, ptr %21, align 4, !tbaa !9
  %1025 = load ptr, ptr %41, align 8, !tbaa !5
  %1026 = load ptr, ptr %52, align 8, !tbaa !5
  %1027 = load ptr, ptr %53, align 8, !tbaa !5
  %1028 = load ptr, ptr %54, align 8, !tbaa !5
  call void @libmetis__MoveGroupMinConnForVol(ptr noundef %1021, ptr noundef %1022, i32 noundef %1023, i32 noundef %1024, ptr noundef %1025, ptr noundef %1026, ptr noundef %1027, ptr noundef %1028)
  br label %1033

1029:                                             ; preds = %1010
  %1030 = load ptr, ptr %3, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.ctrl_t, ptr %1030, i32 0, i32 1
  %1032 = load i32, ptr %1031, align 4, !tbaa !19
  call void (i32, ptr, ...) @gk_errexit(i32 noundef 15, ptr noundef @.str.20, i32 noundef %1032)
  br label %1033

1033:                                             ; preds = %1029, %1020, %1014
  %1034 = load i32, ptr %16, align 4, !tbaa !9
  %1035 = load i32, ptr %10, align 4, !tbaa !9
  %1036 = load ptr, ptr %36, align 8, !tbaa !5
  %1037 = load ptr, ptr %50, align 8, !tbaa !5
  %1038 = load ptr, ptr %51, align 8, !tbaa !5
  call void @libmetis__iarray2csr(i32 noundef %1034, i32 noundef %1035, ptr noundef %1036, ptr noundef %1037, ptr noundef %1038)
  br label %1039

1039:                                             ; preds = %1033, %1007
  br label %301, !llvm.loop !58

1040:                                             ; preds = %301
  %1041 = load i32, ptr %29, align 4, !tbaa !9
  %1042 = icmp eq i32 %1041, 0
  br i1 %1042, label %1043, label %1044

1043:                                             ; preds = %1040
  br label %1045

1044:                                             ; preds = %1040
  br label %231

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

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

declare void @libmetis__ipqInit(ptr noundef, i64 noundef) #2

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

declare void @libmetis__ipqReset(ptr noundef) #2

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

declare i32 @libmetis__ipqGetTop(ptr noundef) #2

declare void @libmetis__ikvsorti(i64 noundef, ptr noundef) #2

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

declare void @libmetis__ikvsortd(i64 noundef, ptr noundef) #2

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

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

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

declare void @libmetis__ipqFree(ptr noundef) #2

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

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

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


; 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.ipq_t = type { i64, i64, ptr, ptr }
%struct.ikv_t = type { i32, i32 }

@.str.1 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__EliminateSubDomainEdges = external hidden unnamed_addr constant [60 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1

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

; 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__iset(i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__EliminateSubDomainEdges(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca %struct.ipq_t, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #5
  tail call void @libmetis__wspacepush(ptr noundef %0) #5
  %4 = load i32, ptr %1, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 8
  %6 = load i32, ptr %5, align 8, !tbaa !11
  %7 = getelementptr inbounds i8, ptr %1, i64 16
  %8 = load ptr, ptr %7, align 8, !tbaa !12
  %9 = getelementptr inbounds i8, ptr %1, i64 40
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %1, i64 24
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 4
  %14 = load i32, ptr %13, align 4, !tbaa !15
  %15 = icmp eq i32 %14, 1
  br i1 %15, label %20, label %16

16:                                               ; preds = %2
  %17 = getelementptr inbounds i8, ptr %1, i64 48
  %18 = load ptr, ptr %17, align 8, !tbaa !20
  %19 = freeze ptr %18
  br label %20

20:                                               ; preds = %2, %16
  %.fr = phi ptr [ %19, %16 ], [ null, %2 ]
  %21 = getelementptr inbounds i8, ptr %1, i64 120
  %22 = load ptr, ptr %21, align 8, !tbaa !21
  %23 = getelementptr inbounds i8, ptr %1, i64 128
  %24 = load ptr, ptr %23, align 8, !tbaa !22
  %25 = getelementptr inbounds i8, ptr %0, i64 92
  %26 = load i32, ptr %25, align 4, !tbaa !23
  %27 = getelementptr inbounds i8, ptr %0, i64 112
  %28 = load ptr, ptr %27, align 8, !tbaa !24
  %29 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %6) #5
  %30 = mul nsw i32 %26, %6
  %31 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %30) #5
  %32 = ptrtoint ptr %31 to i64
  %33 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %4) #5
  %34 = sext i32 %26 to i64
  %35 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %26) #5
  %36 = tail call ptr @libmetis__iset(i64 noundef %34, i32 noundef 0, ptr noundef %35) #5
  %37 = tail call ptr @libmetis__ikvwspacemalloc(ptr noundef nonnull %0, i32 noundef %26) #5
  %38 = tail call ptr @libmetis__ikvwspacemalloc(ptr noundef nonnull %0, i32 noundef %26) #5
  %39 = add nsw i32 %26, 1
  %40 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %39) #5
  %41 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %4) #5
  tail call void @libmetis__iarray2csr(i32 noundef %4, i32 noundef %26, ptr noundef %22, ptr noundef %40, ptr noundef %41) #5
  %42 = load i32, ptr %13, align 4, !tbaa !15
  %43 = icmp eq i32 %42, 1
  br i1 %43, label %44, label %51

44:                                               ; preds = %20
  %45 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %4) #5
  %46 = sext i32 %4 to i64
  %47 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %4) #5
  %48 = tail call ptr @libmetis__iset(i64 noundef %46, i32 noundef 0, ptr noundef %47) #5
  %49 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %26) #5
  %50 = tail call ptr @libmetis__iset(i64 noundef %34, i32 noundef -1, ptr noundef %49) #5
  br label %51

51:                                               ; preds = %44, %20
  %.0359 = phi ptr [ %48, %44 ], [ null, %20 ]
  %.0358 = phi ptr [ %50, %44 ], [ null, %20 ]
  %.0 = phi ptr [ %45, %44 ], [ null, %20 ]
  tail call void @libmetis__ComputeSubDomainGraph(ptr noundef nonnull %0, ptr noundef nonnull %1)
  %52 = getelementptr inbounds i8, ptr %0, i64 288
  %53 = load ptr, ptr %52, align 8, !tbaa !25
  %54 = getelementptr inbounds i8, ptr %0, i64 296
  %55 = load ptr, ptr %54, align 8, !tbaa !26
  %56 = getelementptr inbounds i8, ptr %0, i64 304
  %57 = load ptr, ptr %56, align 8, !tbaa !27
  %58 = getelementptr inbounds i8, ptr %0, i64 312
  %59 = load ptr, ptr %58, align 8, !tbaa !28
  %60 = tail call ptr @libmetis__iset(i64 noundef %34, i32 noundef 0, ptr noundef %59) #5
  %61 = getelementptr inbounds i8, ptr %0, i64 320
  %62 = load ptr, ptr %61, align 8, !tbaa !29
  %63 = tail call ptr @libmetis__iset(i64 noundef %34, i32 noundef 0, ptr noundef %62) #5
  %64 = icmp sgt i32 %26, 0
  br i1 %64, label %.preheader462.lr.ph, label %._crit_edge493

.preheader462.lr.ph:                              ; preds = %51
  %65 = icmp sgt i32 %6, 0
  %66 = icmp eq i32 %6, 1
  %67 = select i1 %66, double 1.250000e+00, double 1.025000e+00
  br i1 %65, label %.preheader462.lr.ph.split.us, label %._crit_edge493

.preheader462.lr.ph.split.us:                     ; preds = %.preheader462.lr.ph
  %68 = getelementptr inbounds i8, ptr %0, i64 104
  %69 = getelementptr inbounds i8, ptr %1, i64 56
  %70 = load ptr, ptr %69, align 8, !tbaa !30
  %71 = ptrtoint ptr %70 to i64
  %72 = load ptr, ptr %68, align 8, !tbaa !31
  %73 = zext nneg i32 %6 to i64
  %wide.trip.count617 = zext nneg i32 %26 to i64
  %74 = sub i64 %32, %71
  %75 = shl nuw nsw i64 %73, 2
  %min.iters.check = icmp ult i32 %6, 4
  %n.vec = and i64 %73, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %73
  %xtraiter = and i64 %73, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %76 = add nsw i64 %73, -1
  br label %.preheader462.us

.preheader462.us:                                 ; preds = %._crit_edge.us, %.preheader462.lr.ph.split.us
  %indvars.iv614 = phi i64 [ %indvars.iv.next615, %._crit_edge.us ], [ 0, %.preheader462.lr.ph.split.us ]
  %77 = getelementptr inbounds float, ptr %28, i64 %indvars.iv614
  %78 = load float, ptr %77, align 4, !tbaa !32
  %79 = fpext float %78 to double
  %80 = fmul double %67, %79
  %81 = mul nuw nsw i64 %indvars.iv614, %73
  %invariant.gep = getelementptr inbounds i32, ptr %31, i64 %81
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader462.us
  %82 = mul i64 %75, %indvars.iv614
  %83 = add i64 %74, %82
  %diff.check = icmp ult i64 %83, 16
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %broadcast.splatinsert = insertelement <4 x double> poison, double %80, i64 0
  %broadcast.splat = shufflevector <4 x double> %broadcast.splatinsert, <4 x double> 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 ]
  %84 = getelementptr inbounds i32, ptr %70, i64 %index
  %wide.load = load <4 x i32>, ptr %84, align 4, !tbaa !33
  %85 = sitofp <4 x i32> %wide.load to <4 x double>
  %86 = fmul <4 x double> %broadcast.splat, %85
  %87 = getelementptr inbounds float, ptr %72, i64 %index
  %wide.load727 = load <4 x float>, ptr %87, align 4, !tbaa !32
  %88 = fpext <4 x float> %wide.load727 to <4 x double>
  %89 = fmul <4 x double> %86, %88
  %90 = fptosi <4 x double> %89 to <4 x i32>
  %91 = getelementptr inbounds i32, ptr %invariant.gep, i64 %index
  store <4 x i32> %90, ptr %91, align 4, !tbaa !33
  %index.next = add nuw i64 %index, 4
  %92 = icmp eq i64 %index.next, %n.vec
  br i1 %92, label %middle.block, label %vector.body, !llvm.loop !34

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.preheader462.us
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader462.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %93 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv.ph
  %94 = load i32, ptr %93, align 4, !tbaa !33
  %95 = sitofp i32 %94 to double
  %96 = fmul double %80, %95
  %97 = getelementptr inbounds float, ptr %72, i64 %indvars.iv.ph
  %98 = load float, ptr %97, align 4, !tbaa !32
  %99 = fpext float %98 to double
  %100 = fmul double %96, %99
  %101 = fptosi double %100 to i32
  %gep.prol = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv.ph
  store i32 %101, ptr %gep.prol, align 4, !tbaa !33
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %102 = icmp eq i64 %indvars.iv.ph, %76
  br i1 %102, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %103 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv
  %104 = load i32, ptr %103, align 4, !tbaa !33
  %105 = sitofp i32 %104 to double
  %106 = fmul double %80, %105
  %107 = getelementptr inbounds float, ptr %72, i64 %indvars.iv
  %108 = load float, ptr %107, align 4, !tbaa !32
  %109 = fpext float %108 to double
  %110 = fmul double %106, %109
  %111 = fptosi double %110 to i32
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv
  store i32 %111, ptr %gep, align 4, !tbaa !33
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %112 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv.next
  %113 = load i32, ptr %112, align 4, !tbaa !33
  %114 = sitofp i32 %113 to double
  %115 = fmul double %80, %114
  %116 = getelementptr inbounds float, ptr %72, i64 %indvars.iv.next
  %117 = load float, ptr %116, align 4, !tbaa !32
  %118 = fpext float %117 to double
  %119 = fmul double %115, %118
  %120 = fptosi double %119 to i32
  %gep.1 = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv.next
  store i32 %120, ptr %gep.1, align 4, !tbaa !33
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %73
  br i1 %exitcond.not.1, label %._crit_edge.us, label %scalar.ph, !llvm.loop !38

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next615 = add nuw nsw i64 %indvars.iv614, 1
  %exitcond618.not = icmp eq i64 %indvars.iv.next615, %wide.trip.count617
  br i1 %exitcond618.not, label %._crit_edge493, label %.preheader462.us, !llvm.loop !39

._crit_edge493:                                   ; preds = %._crit_edge.us, %.preheader462.lr.ph, %51
  call void @libmetis__ipqInit(ptr noundef nonnull %3, i64 noundef %34) #5
  %121 = getelementptr inbounds i8, ptr %0, i64 8
  %122 = sext i32 %6 to i64
  %.not440 = icmp eq ptr %.fr, null
  %wide.trip.count622 = zext i32 %26 to i64
  %wide.trip.count656 = zext nneg i32 %26 to i64
  %xtraiter739 = and i64 %wide.trip.count622, 1
  %123 = icmp eq i32 %26, 1
  %unroll_iter = and i64 %wide.trip.count622, 2147483646
  %lcmp.mod740.not = icmp eq i64 %xtraiter739, 0
  br label %124

124:                                              ; preds = %._crit_edge596, %._crit_edge493
  %.0405 = phi i32 [ 0, %._crit_edge493 ], [ %.11, %._crit_edge596 ]
  %.0373 = phi i32 [ 0, %._crit_edge493 ], [ %.7, %._crit_edge596 ]
  %125 = call i32 @libmetis__isum(i64 noundef %34, ptr noundef %53, i64 noundef 1) #5
  %126 = sdiv i32 %125, %26
  %127 = call i64 @libmetis__iargmax(i64 noundef %34, ptr noundef %53) #5
  %128 = getelementptr inbounds i32, ptr %53, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !33
  %130 = load i32, ptr %121, align 8, !tbaa !40
  %131 = and i32 %130, 128
  %.not = icmp eq i32 %131, 0
  br i1 %.not, label %135, label %132

132:                                              ; preds = %124
  %133 = call i64 @libmetis__iargmax(i64 noundef %34, ptr noundef nonnull %53) #5
  %134 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %125, i32 noundef %129, i64 noundef %133, i32 noundef %126)
  br label %135

135:                                              ; preds = %132, %124
  %136 = sitofp i32 %129 to float
  %137 = sitofp i32 %126 to float
  %138 = fmul float %137, 0x3FF6666660000000
  %139 = fcmp ogt float %138, %136
  br i1 %139, label %._crit_edge596.thread, label %140

140:                                              ; preds = %135
  call void @libmetis__ipqReset(ptr noundef nonnull %3) #5
  br i1 %64, label %.lr.ph, label %.preheader461

.lr.ph:                                           ; preds = %140
  %141 = sub nsw i32 %129, %126
  %142 = sdiv i32 %141, 2
  %143 = add nsw i32 %142, %126
  br label %145

.preheader461:                                    ; preds = %151, %140
  %144 = call i32 @libmetis__ipqGetTop(ptr noundef nonnull %3) #5
  %.not429591 = icmp eq i32 %144, -1
  br i1 %.not429591, label %._crit_edge596.thread, label %.lr.ph595

145:                                              ; preds = %.lr.ph, %151
  %indvars.iv619 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next620, %151 ]
  %146 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv619
  %147 = load i32, ptr %146, align 4, !tbaa !33
  %.not441 = icmp slt i32 %147, %143
  br i1 %.not441, label %151, label %148

148:                                              ; preds = %145
  %149 = trunc nuw nsw i64 %indvars.iv619 to i32
  %150 = call i32 @libmetis__ipqInsert(ptr noundef nonnull %3, i32 noundef %149, i32 noundef %147) #5
  br label %151

151:                                              ; preds = %145, %148
  %indvars.iv.next620 = add nuw nsw i64 %indvars.iv619, 1
  %exitcond623.not = icmp eq i64 %indvars.iv.next620, %wide.trip.count622
  br i1 %exitcond623.not, label %.preheader461, label %145, !llvm.loop !41

.lr.ph595:                                        ; preds = %.preheader461, %476
  %152 = phi i32 [ %477, %476 ], [ %144, %.preheader461 ]
  %.1374594 = phi i32 [ %.7, %476 ], [ %.0373, %.preheader461 ]
  %.1406593 = phi i32 [ %.11, %476 ], [ %.0405, %.preheader461 ]
  %.0416592 = phi i32 [ %.3419, %476 ], [ 0, %.preheader461 ]
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %53, i64 %153
  %155 = load i32, ptr %154, align 4, !tbaa !33
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds ptr, ptr %57, i64 %153
  %158 = load ptr, ptr %157, align 8, !tbaa !42
  %159 = call i32 @libmetis__isum(i64 noundef %156, ptr noundef %158, i64 noundef 1) #5
  %160 = load i32, ptr %154, align 4, !tbaa !33
  %161 = icmp sgt i32 %160, 0
  br i1 %161, label %.lr.ph497, label %._crit_edge

.lr.ph497:                                        ; preds = %.lr.ph595
  %162 = load ptr, ptr %157, align 8, !tbaa !42
  %163 = getelementptr inbounds ptr, ptr %55, i64 %153
  %164 = load ptr, ptr %163, align 8, !tbaa !42
  br label %165

165:                                              ; preds = %.lr.ph497, %183
  %indvars.iv624 = phi i64 [ 0, %.lr.ph497 ], [ %indvars.iv.next625, %183 ]
  %.0384495 = phi i32 [ 0, %.lr.ph497 ], [ %.1385, %183 ]
  %166 = getelementptr inbounds i32, ptr %162, i64 %indvars.iv624
  %167 = load i32, ptr %166, align 4, !tbaa !33
  %168 = getelementptr inbounds i32, ptr %164, i64 %indvars.iv624
  %169 = load i32, ptr %168, align 4, !tbaa !33
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds i32, ptr %60, i64 %170
  store i32 %167, ptr %171, align 4, !tbaa !33
  %172 = load i32, ptr %154, align 4, !tbaa !33
  %173 = shl nsw i32 %172, 1
  %174 = mul nsw i32 %173, %167
  %175 = icmp slt i32 %174, %159
  br i1 %175, label %176, label %183

176:                                              ; preds = %165
  %177 = load i32, ptr %168, align 4, !tbaa !33
  %178 = sext i32 %.0384495 to i64
  %179 = getelementptr inbounds %struct.ikv_t, ptr %38, i64 %178
  %180 = getelementptr inbounds i8, ptr %179, i64 4
  store i32 %177, ptr %180, align 4, !tbaa !43
  %181 = load i32, ptr %166, align 4, !tbaa !33
  %182 = add nsw i32 %.0384495, 1
  store i32 %181, ptr %179, align 4, !tbaa !45
  %.pre = load i32, ptr %154, align 4, !tbaa !33
  br label %183

183:                                              ; preds = %165, %176
  %184 = phi i32 [ %.pre, %176 ], [ %172, %165 ]
  %.1385 = phi i32 [ %182, %176 ], [ %.0384495, %165 ]
  %indvars.iv.next625 = add nuw nsw i64 %indvars.iv624, 1
  %185 = sext i32 %184 to i64
  %186 = icmp slt i64 %indvars.iv.next625, %185
  br i1 %186, label %165, label %._crit_edge, !llvm.loop !46

._crit_edge:                                      ; preds = %183, %.lr.ph595
  %.0384.lcssa = phi i32 [ 0, %.lr.ph595 ], [ %.1385, %183 ]
  %.lcssa = phi i32 [ %160, %.lr.ph595 ], [ %184, %183 ]
  %187 = load i32, ptr %121, align 8, !tbaa !40
  %188 = and i32 %187, 128
  %.not430 = icmp eq i32 %188, 0
  br i1 %.not430, label %191, label %189

189:                                              ; preds = %._crit_edge
  %190 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef %152, i32 noundef %.lcssa, i32 noundef %159)
  br label %191

191:                                              ; preds = %189, %._crit_edge
  %192 = sext i32 %.0384.lcssa to i64
  call void @libmetis__ikvsorti(i64 noundef %192, ptr noundef %38) #5
  %193 = icmp sgt i32 %.0384.lcssa, 0
  br i1 %193, label %.preheader460.us.preheader, label %.thread450

.preheader460.us.preheader:                       ; preds = %191
  %wide.trip.count679 = zext nneg i32 %.0384.lcssa to i64
  br label %.preheader460.us

.preheader460.us:                                 ; preds = %.preheader460.us.preheader, %._crit_edge561.us
  %194 = phi i1 [ false, %._crit_edge561.us ], [ true, %.preheader460.us.preheader ]
  %.0370568.us = phi i32 [ 1, %._crit_edge561.us ], [ 0, %.preheader460.us.preheader ]
  %.0394566.us = phi i32 [ %.7401.us696, %._crit_edge561.us ], [ -1, %.preheader460.us.preheader ]
  %.2407565.us = phi i32 [ %.9414.us695, %._crit_edge561.us ], [ %.1406593, %.preheader460.us.preheader ]
  br label %196

195:                                              ; preds = %._crit_edge556.us
  %indvars.iv.next677 = add nuw nsw i64 %indvars.iv676, 1
  %exitcond680.not = icmp eq i64 %indvars.iv.next677, %wide.trip.count679
  br i1 %exitcond680.not, label %._crit_edge561.us, label %196, !llvm.loop !47

196:                                              ; preds = %.preheader460.us, %195
  %indvars.iv676 = phi i64 [ 0, %.preheader460.us ], [ %indvars.iv.next677, %195 ]
  %.1395559.us = phi i32 [ %.0394566.us, %.preheader460.us ], [ %.7401.us696, %195 ]
  %.3408558.us = phi i32 [ %.2407565.us, %.preheader460.us ], [ %.9414.us695, %195 ]
  %197 = getelementptr inbounds %struct.ikv_t, ptr %38, i64 %indvars.iv676, i32 1
  %198 = load i32, ptr %197, align 4, !tbaa !43
  %..us = select i1 %194, i32 %152, i32 %198
  %.442.us = select i1 %194, i32 %198, i32 %152
  %199 = sext i32 %.442.us to i64
  %200 = getelementptr inbounds i32, ptr %40, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !33
  %202 = getelementptr i8, ptr %200, i64 4
  %203 = load i32, ptr %202, align 4, !tbaa !33
  %204 = icmp slt i32 %201, %203
  br i1 %204, label %.lr.ph505.us.preheader, label %._crit_edge506.us.thread

._crit_edge506.us.thread:                         ; preds = %196
  %205 = call ptr @libmetis__iset(i64 noundef %122, i32 noundef 0, ptr noundef %29) #5
  br label %._crit_edge521.us

.lr.ph505.us.preheader:                           ; preds = %196
  %206 = sext i32 %201 to i64
  br label %.lr.ph505.us

._crit_edge506.us:                                ; preds = %.loopexit.us
  %207 = call ptr @libmetis__iset(i64 noundef %122, i32 noundef 0, ptr noundef %29) #5
  %208 = icmp sgt i32 %.5378.us, 0
  br i1 %208, label %.lr.ph517.us.preheader, label %._crit_edge521.us

.lr.ph517.us.preheader:                           ; preds = %._crit_edge506.us
  %wide.trip.count643 = zext nneg i32 %.5378.us to i64
  br label %.lr.ph517.us

._crit_edge521.us:                                ; preds = %351, %._crit_edge506.us.thread, %._crit_edge506.us, %.preheader459.us
  %209 = phi i1 [ false, %.preheader459.us ], [ false, %._crit_edge506.us ], [ false, %._crit_edge506.us.thread ], [ %423, %351 ]
  %.0380.lcssa.us701 = phi i32 [ %.1381.lcssa.us, %.preheader459.us ], [ 0, %._crit_edge506.us ], [ 0, %._crit_edge506.us.thread ], [ %.1381.lcssa.us, %351 ]
  %.4377.lcssa.us690700 = phi i32 [ %.5378.us, %.preheader459.us ], [ %.5378.us, %._crit_edge506.us ], [ 0, %._crit_edge506.us.thread ], [ %.5378.us, %351 ]
  %210 = sext i32 %.0380.lcssa.us701 to i64
  call void @libmetis__ikvsortd(i64 noundef %210, ptr noundef %37) #5
  %211 = load i32, ptr %121, align 8, !tbaa !40
  %212 = and i32 %211, 128
  %.not431.us = icmp eq i32 %212, 0
  br i1 %.not431.us, label %219, label %213

213:                                              ; preds = %._crit_edge521.us
  %214 = sext i32 %198 to i64
  %215 = getelementptr inbounds i32, ptr %60, i64 %214
  %216 = load i32, ptr %215, align 4, !tbaa !33
  %217 = call i32 @libmetis__isum(i64 noundef %122, ptr noundef %29, i64 noundef 1) #5
  %218 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i32 noundef %216, i32 noundef %198, i32 noundef %217, i32 noundef %.4377.lcssa.us690700)
  br label %219

219:                                              ; preds = %213, %._crit_edge521.us
  br i1 %209, label %.lr.ph544.us.preheader, label %._crit_edge556.us

.lr.ph544.us.preheader:                           ; preds = %219
  %wide.trip.count669 = zext i32 %.0380.lcssa.us701 to i64
  br label %.lr.ph544.us

.lr.ph544.us:                                     ; preds = %.lr.ph544.us.preheader, %.thread.us
  %indvars.iv666 = phi i64 [ 0, %.lr.ph544.us.preheader ], [ %indvars.iv.next667, %.thread.us ]
  %.2396541.us = phi i32 [ %.1395559.us, %.lr.ph544.us.preheader ], [ %.6400.us, %.thread.us ]
  %.4409540.us = phi i32 [ %.3408558.us, %.lr.ph544.us.preheader ], [ %.8413.us, %.thread.us ]
  %220 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv666, i32 1
  %221 = load i32, ptr %220, align 4, !tbaa !43
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds i32, ptr %60, i64 %222
  %224 = load i32, ptr %223, align 4, !tbaa !33
  %225 = icmp sgt i32 %224, 0
  br i1 %225, label %226, label %.thread.us

226:                                              ; preds = %.lr.ph544.us
  %227 = mul nsw i32 %221, %6
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds i32, ptr %24, i64 %228
  %230 = getelementptr inbounds i32, ptr %31, i64 %228
  %231 = call i32 @libmetis__ivecaxpylez(i32 noundef %6, i32 noundef 1, ptr noundef %29, ptr noundef %229, ptr noundef %230) #5
  %.not432.us = icmp eq i32 %231, 0
  br i1 %.not432.us, label %.thread.us, label %.preheader458.us

.lr.ph526.us:                                     ; preds = %.preheader457.us, %329
  %indvars.iv653 = phi i64 [ %indvars.iv.next654, %329 ], [ 0, %.preheader457.us ]
  %232 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv653
  %233 = load i32, ptr %232, align 4, !tbaa !33
  %234 = icmp sgt i32 %233, 0
  br i1 %234, label %235, label %329

235:                                              ; preds = %.lr.ph526.us
  %236 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv653
  %237 = load i32, ptr %236, align 4, !tbaa !33
  %238 = icmp eq i32 %237, 0
  br i1 %238, label %239, label %329

239:                                              ; preds = %235
  %240 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv653
  %241 = load i32, ptr %240, align 4, !tbaa !33
  %242 = add nsw i32 %241, 1
  %243 = load i32, ptr %154, align 4, !tbaa !33
  %.not433.us = icmp slt i32 %242, %243
  br i1 %.not433.us, label %329, label %._crit_edge527.us.loopexit

._crit_edge527.us.loopexit:                       ; preds = %239
  %244 = trunc nuw nsw i64 %indvars.iv653 to i32
  br label %._crit_edge527.us

._crit_edge527.us:                                ; preds = %._crit_edge527.us.loopexit, %.preheader457.us
  %.4367.lcssa.us = phi i32 [ 0, %.preheader457.us ], [ %244, %._crit_edge527.us.loopexit ]
  %245 = icmp eq i32 %.4367.lcssa.us, %26
  br i1 %245, label %.preheader.us, label %277

._crit_edge534.us.loopexit.unr-lcssa:             ; preds = %328, %.lr.ph533.us.preheader
  %.1404.us.lcssa.ph = phi i32 [ poison, %.lr.ph533.us.preheader ], [ %.1404.us.1, %328 ]
  %indvars.iv658.unr = phi i64 [ 0, %.lr.ph533.us.preheader ], [ %indvars.iv.next659.1, %328 ]
  %.0403531.us.unr = phi i32 [ 0, %.lr.ph533.us.preheader ], [ %.1404.us.1, %328 ]
  br i1 %lcmp.mod740.not, label %._crit_edge534.us, label %.lr.ph533.us.epil

.lr.ph533.us.epil:                                ; preds = %._crit_edge534.us.loopexit.unr-lcssa
  %246 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv658.unr
  %247 = load i32, ptr %246, align 4, !tbaa !33
  %248 = icmp sgt i32 %247, 0
  br i1 %248, label %249, label %._crit_edge534.us

249:                                              ; preds = %.lr.ph533.us.epil
  %250 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv658.unr
  %251 = load i32, ptr %250, align 4, !tbaa !33
  %252 = icmp eq i32 %251, 0
  %253 = zext i1 %252 to i32
  %spec.select.us.epil = add nsw i32 %.0403531.us.unr, %253
  br label %._crit_edge534.us

._crit_edge534.us:                                ; preds = %._crit_edge534.us.loopexit.unr-lcssa, %249, %.lr.ph533.us.epil, %.preheader.us
  %.0403.lcssa.us = phi i32 [ 0, %.preheader.us ], [ %.1404.us.lcssa.ph, %._crit_edge534.us.loopexit.unr-lcssa ], [ %.0403531.us.unr, %.lr.ph533.us.epil ], [ %spec.select.us.epil, %249 ]
  %254 = load i32, ptr %121, align 8, !tbaa !40
  %255 = and i32 %254, 128
  %.not434.us = icmp eq i32 %255, 0
  br i1 %.not434.us, label %258, label %256

256:                                              ; preds = %._crit_edge534.us
  %257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %221, i32 noundef %.0403.lcssa.us, i32 noundef %.lcssa465.us)
  %.pre688 = load i32, ptr %420, align 4, !tbaa !33
  br label %258

258:                                              ; preds = %256, %._crit_edge534.us
  %259 = phi i32 [ %.pre688, %256 ], [ %.lcssa465.us, %._crit_edge534.us ]
  %260 = add nsw i32 %259, %.0403.lcssa.us
  %261 = load i32, ptr %154, align 4, !tbaa !33
  %262 = icmp slt i32 %260, %261
  br i1 %262, label %263, label %275

263:                                              ; preds = %258
  %264 = icmp eq i32 %.2396541.us, -1
  br i1 %264, label %274, label %265

265:                                              ; preds = %263
  %266 = sext i32 %.2396541.us to i64
  %267 = getelementptr inbounds i32, ptr %53, i64 %266
  %268 = load i32, ptr %267, align 4, !tbaa !33
  %269 = add nsw i32 %268, %.4409540.us
  %270 = icmp sgt i32 %269, %260
  br i1 %270, label %274, label %271

271:                                              ; preds = %265
  %272 = icmp eq i32 %269, %260
  %273 = icmp sgt i32 %.4409540.us, %.0403.lcssa.us
  %or.cond443.us = and i1 %273, %272
  br i1 %or.cond443.us, label %274, label %275

274:                                              ; preds = %271, %265, %263
  br label %275

275:                                              ; preds = %274, %271, %258
  %.5410.us = phi i32 [ %.0403.lcssa.us, %274 ], [ %.4409540.us, %271 ], [ %.4409540.us, %258 ]
  %.3397.us = phi i32 [ %221, %274 ], [ %.2396541.us, %271 ], [ %.2396541.us, %258 ]
  %276 = icmp eq i32 %.0403.lcssa.us, 0
  %spec.select444.us = select i1 %276, i32 %221, i32 -1
  br label %277

277:                                              ; preds = %275, %._crit_edge527.us
  %278 = phi i32 [ %.lcssa465.us, %._crit_edge527.us ], [ %259, %275 ]
  %.6411.us = phi i32 [ %.4409540.us, %._crit_edge527.us ], [ %.5410.us, %275 ]
  %.4398.us = phi i32 [ %.2396541.us, %._crit_edge527.us ], [ %.3397.us, %275 ]
  %.3389.us = phi i32 [ -1, %._crit_edge527.us ], [ %spec.select444.us, %275 ]
  %279 = icmp sgt i32 %278, 0
  br i1 %279, label %.lr.ph538.us, label %._crit_edge539.us

._crit_edge539.us:                                ; preds = %304, %277
  %.not435.us = icmp eq i32 %.3389.us, -1
  br i1 %.not435.us, label %.thread.us, label %._crit_edge545.us

._crit_edge545.us:                                ; preds = %.thread.us, %._crit_edge539.us
  %.9414.us = phi i32 [ %.8413.us, %.thread.us ], [ %.6411.us, %._crit_edge539.us ]
  %.7401.us = phi i32 [ %.6400.us, %.thread.us ], [ %.4398.us, %._crit_edge539.us ]
  %.6392.us = phi i32 [ -1, %.thread.us ], [ %.3389.us, %._crit_edge539.us ]
  br i1 %209, label %.lr.ph555.us.preheader, label %._crit_edge556.us

.lr.ph555.us.preheader:                           ; preds = %._crit_edge545.us
  %280 = add nsw i64 %wide.trip.count669, -1
  %xtraiter742 = and i64 %wide.trip.count669, 3
  %281 = icmp ult i64 %280, 3
  br i1 %281, label %._crit_edge556.us.loopexit.unr-lcssa, label %.lr.ph555.us.preheader.new

.lr.ph555.us.preheader.new:                       ; preds = %.lr.ph555.us.preheader
  %unroll_iter744 = and i64 %wide.trip.count669, 4294967292
  br label %.lr.ph555.us

._crit_edge556.us.loopexit.unr-lcssa:             ; preds = %.lr.ph555.us, %.lr.ph555.us.preheader
  %indvars.iv671.unr = phi i64 [ 0, %.lr.ph555.us.preheader ], [ %indvars.iv.next672.3, %.lr.ph555.us ]
  %lcmp.mod743.not = icmp eq i64 %xtraiter742, 0
  br i1 %lcmp.mod743.not, label %._crit_edge556.us, label %.lr.ph555.us.epil

.lr.ph555.us.epil:                                ; preds = %._crit_edge556.us.loopexit.unr-lcssa, %.lr.ph555.us.epil
  %indvars.iv671.epil = phi i64 [ %indvars.iv.next672.epil, %.lr.ph555.us.epil ], [ %indvars.iv671.unr, %._crit_edge556.us.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph555.us.epil ], [ 0, %._crit_edge556.us.loopexit.unr-lcssa ]
  %282 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv671.epil, i32 1
  %283 = load i32, ptr %282, align 4, !tbaa !43
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds i32, ptr %36, i64 %284
  store i32 0, ptr %285, align 4, !tbaa !33
  %indvars.iv.next672.epil = add nuw nsw i64 %indvars.iv671.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter742
  br i1 %epil.iter.cmp.not, label %._crit_edge556.us, label %.lr.ph555.us.epil, !llvm.loop !48

._crit_edge556.us:                                ; preds = %._crit_edge556.us.loopexit.unr-lcssa, %.lr.ph555.us.epil, %219, %._crit_edge545.us
  %.6392.us697 = phi i32 [ %.6392.us, %._crit_edge545.us ], [ -1, %219 ], [ %.6392.us, %.lr.ph555.us.epil ], [ %.6392.us, %._crit_edge556.us.loopexit.unr-lcssa ]
  %.7401.us696 = phi i32 [ %.7401.us, %._crit_edge545.us ], [ %.1395559.us, %219 ], [ %.7401.us, %.lr.ph555.us.epil ], [ %.7401.us, %._crit_edge556.us.loopexit.unr-lcssa ]
  %.9414.us695 = phi i32 [ %.9414.us, %._crit_edge545.us ], [ %.3408558.us, %219 ], [ %.9414.us, %.lr.ph555.us.epil ], [ %.9414.us, %._crit_edge556.us.loopexit.unr-lcssa ]
  %286 = icmp eq i32 %.6392.us697, -1
  %287 = icmp ne i32 %.7401.us696, -1
  %or.cond.us = select i1 %286, i1 %287, i1 false
  %spec.select445.us = select i1 %or.cond.us, i32 %.7401.us696, i32 %.6392.us697
  %.not436.us = icmp eq i32 %spec.select445.us, -1
  br i1 %.not436.us, label %195, label %.split579.us

.lr.ph555.us:                                     ; preds = %.lr.ph555.us, %.lr.ph555.us.preheader.new
  %indvars.iv671 = phi i64 [ 0, %.lr.ph555.us.preheader.new ], [ %indvars.iv.next672.3, %.lr.ph555.us ]
  %niter745 = phi i64 [ 0, %.lr.ph555.us.preheader.new ], [ %niter745.next.3, %.lr.ph555.us ]
  %288 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv671, i32 1
  %289 = load i32, ptr %288, align 4, !tbaa !43
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i32, ptr %36, i64 %290
  store i32 0, ptr %291, align 4, !tbaa !33
  %indvars.iv.next672 = or disjoint i64 %indvars.iv671, 1
  %292 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv.next672, i32 1
  %293 = load i32, ptr %292, align 4, !tbaa !43
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i32, ptr %36, i64 %294
  store i32 0, ptr %295, align 4, !tbaa !33
  %indvars.iv.next672.1 = or disjoint i64 %indvars.iv671, 2
  %296 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv.next672.1, i32 1
  %297 = load i32, ptr %296, align 4, !tbaa !43
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %36, i64 %298
  store i32 0, ptr %299, align 4, !tbaa !33
  %indvars.iv.next672.2 = or disjoint i64 %indvars.iv671, 3
  %300 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv.next672.2, i32 1
  %301 = load i32, ptr %300, align 4, !tbaa !43
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds i32, ptr %36, i64 %302
  store i32 0, ptr %303, align 4, !tbaa !33
  %indvars.iv.next672.3 = add nuw nsw i64 %indvars.iv671, 4
  %niter745.next.3 = add i64 %niter745, 4
  %niter745.ncmp.3 = icmp eq i64 %niter745.next.3, %unroll_iter744
  br i1 %niter745.ncmp.3, label %._crit_edge556.us.loopexit.unr-lcssa, label %.lr.ph555.us, !llvm.loop !50

304:                                              ; preds = %.lr.ph538.us, %304
  %indvars.iv663 = phi i64 [ 0, %.lr.ph538.us ], [ %indvars.iv.next664, %304 ]
  %305 = getelementptr inbounds i32, ptr %453, i64 %indvars.iv663
  %306 = load i32, ptr %305, align 4, !tbaa !33
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %63, i64 %307
  store i32 0, ptr %308, align 4, !tbaa !33
  %indvars.iv.next664 = add nuw nsw i64 %indvars.iv663, 1
  %309 = load i32, ptr %420, align 4, !tbaa !33
  %310 = sext i32 %309 to i64
  %311 = icmp slt i64 %indvars.iv.next664, %310
  br i1 %311, label %304, label %._crit_edge539.us, !llvm.loop !51

.lr.ph533.us:                                     ; preds = %.lr.ph533.us.preheader, %328
  %indvars.iv658 = phi i64 [ %indvars.iv.next659.1, %328 ], [ 0, %.lr.ph533.us.preheader ]
  %.0403531.us = phi i32 [ %.1404.us.1, %328 ], [ 0, %.lr.ph533.us.preheader ]
  %niter = phi i64 [ %niter.next.1, %328 ], [ 0, %.lr.ph533.us.preheader ]
  %312 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv658
  %313 = load i32, ptr %312, align 4, !tbaa !33
  %314 = icmp sgt i32 %313, 0
  br i1 %314, label %315, label %.lr.ph533.us.1

315:                                              ; preds = %.lr.ph533.us
  %316 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv658
  %317 = load i32, ptr %316, align 4, !tbaa !33
  %318 = icmp eq i32 %317, 0
  %319 = zext i1 %318 to i32
  %spec.select.us = add nsw i32 %.0403531.us, %319
  br label %.lr.ph533.us.1

.lr.ph533.us.1:                                   ; preds = %315, %.lr.ph533.us
  %.1404.us = phi i32 [ %.0403531.us, %.lr.ph533.us ], [ %spec.select.us, %315 ]
  %indvars.iv.next659 = or disjoint i64 %indvars.iv658, 1
  %320 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv.next659
  %321 = load i32, ptr %320, align 4, !tbaa !33
  %322 = icmp sgt i32 %321, 0
  br i1 %322, label %323, label %328

323:                                              ; preds = %.lr.ph533.us.1
  %324 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv.next659
  %325 = load i32, ptr %324, align 4, !tbaa !33
  %326 = icmp eq i32 %325, 0
  %327 = zext i1 %326 to i32
  %spec.select.us.1 = add nsw i32 %.1404.us, %327
  br label %328

328:                                              ; preds = %323, %.lr.ph533.us.1
  %.1404.us.1 = phi i32 [ %.1404.us, %.lr.ph533.us.1 ], [ %spec.select.us.1, %323 ]
  %indvars.iv.next659.1 = add nuw nsw i64 %indvars.iv658, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge534.us.loopexit.unr-lcssa, label %.lr.ph533.us, !llvm.loop !52

329:                                              ; preds = %239, %235, %.lr.ph526.us
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %exitcond657.not = icmp eq i64 %indvars.iv.next654, %wide.trip.count656
  br i1 %exitcond657.not, label %.preheader.us, label %.lr.ph526.us, !llvm.loop !53

330:                                              ; preds = %.lr.ph523.us, %330
  %indvars.iv650 = phi i64 [ 0, %.lr.ph523.us ], [ %indvars.iv.next651, %330 ]
  %331 = getelementptr inbounds i32, ptr %449, i64 %indvars.iv650
  %332 = load i32, ptr %331, align 4, !tbaa !33
  %333 = getelementptr inbounds i32, ptr %451, i64 %indvars.iv650
  %334 = load i32, ptr %333, align 4, !tbaa !33
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds i32, ptr %63, i64 %335
  store i32 %332, ptr %336, align 4, !tbaa !33
  %indvars.iv.next651 = add nuw nsw i64 %indvars.iv650, 1
  %337 = load i32, ptr %420, align 4, !tbaa !33
  %338 = sext i32 %337 to i64
  %339 = icmp slt i64 %indvars.iv.next651, %338
  br i1 %339, label %330, label %.preheader457.us, !llvm.loop !54

.thread.us:                                       ; preds = %._crit_edge539.us, %226, %.lr.ph544.us
  %.8413.us = phi i32 [ %.6411.us, %._crit_edge539.us ], [ %.4409540.us, %226 ], [ %.4409540.us, %.lr.ph544.us ]
  %.6400.us = phi i32 [ %.4398.us, %._crit_edge539.us ], [ %.2396541.us, %226 ], [ %.2396541.us, %.lr.ph544.us ]
  %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_edge545.us, label %.lr.ph544.us, !llvm.loop !55

.lr.ph520.us:                                     ; preds = %.lr.ph520.us.preheader, %351
  %indvars.iv645 = phi i64 [ 0, %.lr.ph520.us.preheader ], [ %indvars.iv.next646, %351 ]
  %340 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %indvars.iv645
  %341 = getelementptr inbounds i8, ptr %340, i64 4
  %342 = load i32, ptr %341, align 4, !tbaa !43
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds i32, ptr %36, i64 %343
  %345 = load i32, ptr %344, align 4, !tbaa !33
  store i32 %345, ptr %340, align 4, !tbaa !45
  %346 = icmp sgt i32 %345, 0
  br i1 %346, label %351, label %347

347:                                              ; preds = %.lr.ph520.us
  %348 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 357, ptr noundef nonnull @.str.1)
  %349 = load i32, ptr %340, align 4, !tbaa !45
  %350 = icmp sgt i32 %349, 0
  br i1 %350, label %351, label %.split585.us

351:                                              ; preds = %347, %.lr.ph520.us
  %indvars.iv.next646 = add nuw nsw i64 %indvars.iv645, 1
  %exitcond649.not = icmp eq i64 %indvars.iv.next646, %wide.trip.count648
  br i1 %exitcond649.not, label %._crit_edge521.us, label %.lr.ph520.us, !llvm.loop !56

.lr.ph517.us:                                     ; preds = %.lr.ph517.us.preheader, %._crit_edge512.us
  %indvars.iv640 = phi i64 [ 0, %.lr.ph517.us.preheader ], [ %indvars.iv.next641, %._crit_edge512.us ]
  %.0380514.us = phi i32 [ 0, %.lr.ph517.us.preheader ], [ %.1381.lcssa.us, %._crit_edge512.us ]
  %352 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv640
  %353 = load i32, ptr %352, align 4, !tbaa !33
  %354 = mul nsw i32 %353, %6
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i32, ptr %12, i64 %355
  %357 = call ptr @libmetis__iaxpy(i64 noundef %122, i32 noundef 1, ptr noundef %356, i64 noundef 1, ptr noundef %29, i64 noundef 1) #5
  %358 = sext i32 %353 to i64
  %359 = getelementptr inbounds i32, ptr %8, i64 %358
  %360 = load i32, ptr %359, align 4, !tbaa !33
  %361 = getelementptr i8, ptr %359, i64 4
  %362 = load i32, ptr %361, align 4, !tbaa !33
  %363 = icmp slt i32 %360, %362
  br i1 %363, label %.lr.ph511.us, label %._crit_edge512.us

._crit_edge512.us:                                ; preds = %385, %444, %.lr.ph517.us
  %.1381.lcssa.us = phi i32 [ %.0380514.us, %.lr.ph517.us ], [ %.3383.us.us, %444 ], [ %.3383.us572, %385 ]
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %exitcond644.not = icmp eq i64 %indvars.iv.next641, %wide.trip.count643
  br i1 %exitcond644.not, label %.preheader459.us, label %.lr.ph517.us, !llvm.loop !57

.lr.ph511.split.us575:                            ; preds = %.lr.ph511.us, %385
  %364 = phi i32 [ %386, %385 ], [ %362, %.lr.ph511.us ]
  %indvars.iv634 = phi i64 [ %indvars.iv.next635, %385 ], [ %424, %.lr.ph511.us ]
  %.1381508.us570 = phi i32 [ %.3383.us572, %385 ], [ %.0380514.us, %.lr.ph511.us ]
  %365 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv634
  %366 = load i32, ptr %365, align 4, !tbaa !33
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %22, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !33
  %370 = icmp eq i32 %369, %.442.us
  br i1 %370, label %385, label %371

371:                                              ; preds = %.lr.ph511.split.us575
  %372 = sext i32 %369 to i64
  %373 = getelementptr inbounds i32, ptr %36, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !33
  %375 = icmp eq i32 %374, 0
  br i1 %375, label %376, label %380

376:                                              ; preds = %371
  %377 = add nsw i32 %.1381508.us570, 1
  %378 = sext i32 %.1381508.us570 to i64
  %379 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %378, i32 1
  store i32 %369, ptr %379, align 4, !tbaa !43
  %.pre684 = load i32, ptr %373, align 4, !tbaa !33
  br label %380

380:                                              ; preds = %376, %371
  %381 = phi i32 [ %.pre684, %376 ], [ %374, %371 ]
  %.2382.us571 = phi i32 [ %377, %376 ], [ %.1381508.us570, %371 ]
  %382 = getelementptr inbounds i32, ptr %.fr, i64 %indvars.iv634
  %383 = load i32, ptr %382, align 4, !tbaa !33
  %384 = add nsw i32 %381, %383
  store i32 %384, ptr %373, align 4, !tbaa !33
  %.pre685 = load i32, ptr %361, align 4, !tbaa !33
  br label %385

385:                                              ; preds = %380, %.lr.ph511.split.us575
  %386 = phi i32 [ %364, %.lr.ph511.split.us575 ], [ %.pre685, %380 ]
  %.3383.us572 = phi i32 [ %.1381508.us570, %.lr.ph511.split.us575 ], [ %.2382.us571, %380 ]
  %indvars.iv.next635 = add nsw i64 %indvars.iv634, 1
  %387 = sext i32 %386 to i64
  %388 = icmp slt i64 %indvars.iv.next635, %387
  br i1 %388, label %.lr.ph511.split.us575, label %._crit_edge512.us, !llvm.loop !58

.lr.ph505.us:                                     ; preds = %.lr.ph505.us.preheader, %.loopexit.us
  %indvars.iv631 = phi i64 [ %206, %.lr.ph505.us.preheader ], [ %indvars.iv.next632, %.loopexit.us ]
  %.4377502.us = phi i32 [ 0, %.lr.ph505.us.preheader ], [ %.5378.us, %.loopexit.us ]
  %389 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv631
  %390 = load i32, ptr %389, align 4, !tbaa !33
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds i32, ptr %22, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !33
  %394 = icmp eq i32 %393, %.442.us
  br i1 %394, label %399, label %395

395:                                              ; preds = %.lr.ph505.us
  %396 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 330, ptr noundef nonnull @.str.1)
  %397 = load i32, ptr %392, align 4, !tbaa !33
  %398 = icmp eq i32 %397, %.442.us
  br i1 %398, label %399, label %.split587.us

399:                                              ; preds = %395, %.lr.ph505.us
  %400 = getelementptr inbounds i32, ptr %8, i64 %391
  %401 = load i32, ptr %400, align 4, !tbaa !33
  %402 = getelementptr i8, ptr %400, i64 4
  %403 = load i32, ptr %402, align 4, !tbaa !33
  %404 = icmp slt i32 %401, %403
  br i1 %404, label %.lr.ph501.us.preheader, label %.loopexit.us

.lr.ph501.us.preheader:                           ; preds = %399
  %405 = sext i32 %401 to i64
  br label %.lr.ph501.us

406:                                              ; preds = %.lr.ph501.us
  %indvars.iv.next628 = add nsw i64 %indvars.iv627, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next628 to i32
  %exitcond630.not = icmp eq i32 %403, %lftr.wideiv
  br i1 %exitcond630.not, label %.loopexit.us, label %.lr.ph501.us, !llvm.loop !59

.lr.ph501.us:                                     ; preds = %.lr.ph501.us.preheader, %406
  %indvars.iv627 = phi i64 [ %405, %.lr.ph501.us.preheader ], [ %indvars.iv.next628, %406 ]
  %407 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv627
  %408 = load i32, ptr %407, align 4, !tbaa !33
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %22, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !33
  %412 = icmp eq i32 %411, %..us
  br i1 %412, label %413, label %406

413:                                              ; preds = %.lr.ph501.us
  %414 = add nsw i32 %.4377502.us, 1
  %415 = sext i32 %.4377502.us to i64
  %416 = getelementptr inbounds i32, ptr %33, i64 %415
  store i32 %390, ptr %416, align 4, !tbaa !33
  br label %.loopexit.us

.loopexit.us:                                     ; preds = %406, %399, %413
  %.5378.us = phi i32 [ %414, %413 ], [ %.4377502.us, %399 ], [ %.4377502.us, %406 ]
  %indvars.iv.next632 = add nsw i64 %indvars.iv631, 1
  %417 = load i32, ptr %202, align 4, !tbaa !33
  %418 = sext i32 %417 to i64
  %419 = icmp slt i64 %indvars.iv.next632, %418
  br i1 %419, label %.lr.ph505.us, label %._crit_edge506.us, !llvm.loop !60

.preheader.us:                                    ; preds = %329, %._crit_edge527.us
  br i1 %64, label %.lr.ph533.us.preheader, label %._crit_edge534.us

.lr.ph533.us.preheader:                           ; preds = %.preheader.us
  br i1 %123, label %._crit_edge534.us.loopexit.unr-lcssa, label %.lr.ph533.us

.preheader457.us:                                 ; preds = %330, %.preheader458.us
  %.lcssa465.us = phi i32 [ %421, %.preheader458.us ], [ %337, %330 ]
  br i1 %64, label %.lr.ph526.us, label %._crit_edge527.us

.preheader458.us:                                 ; preds = %226
  %420 = getelementptr inbounds i32, ptr %53, i64 %222
  %421 = load i32, ptr %420, align 4, !tbaa !33
  %422 = icmp sgt i32 %421, 0
  br i1 %422, label %.lr.ph523.us, label %.preheader457.us

.preheader459.us:                                 ; preds = %._crit_edge512.us
  %423 = icmp sgt i32 %.1381.lcssa.us, 0
  br i1 %423, label %.lr.ph520.us.preheader, label %._crit_edge521.us

.lr.ph520.us.preheader:                           ; preds = %.preheader459.us
  %wide.trip.count648 = zext nneg i32 %.1381.lcssa.us to i64
  br label %.lr.ph520.us

.lr.ph511.us:                                     ; preds = %.lr.ph517.us
  %424 = sext i32 %360 to i64
  br i1 %.not440, label %.lr.ph511.split.us.us, label %.lr.ph511.split.us575

.lr.ph511.split.us.us:                            ; preds = %.lr.ph511.us, %444
  %425 = phi i32 [ %445, %444 ], [ %362, %.lr.ph511.us ]
  %indvars.iv637 = phi i64 [ %indvars.iv.next638, %444 ], [ %424, %.lr.ph511.us ]
  %.1381508.us.us = phi i32 [ %.3383.us.us, %444 ], [ %.0380514.us, %.lr.ph511.us ]
  %426 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv637
  %427 = load i32, ptr %426, align 4, !tbaa !33
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds i32, ptr %22, i64 %428
  %430 = load i32, ptr %429, align 4, !tbaa !33
  %431 = icmp eq i32 %430, %.442.us
  br i1 %431, label %444, label %432

432:                                              ; preds = %.lr.ph511.split.us.us
  %433 = sext i32 %430 to i64
  %434 = getelementptr inbounds i32, ptr %36, i64 %433
  %435 = load i32, ptr %434, align 4, !tbaa !33
  %436 = icmp eq i32 %435, 0
  br i1 %436, label %437, label %441

437:                                              ; preds = %432
  %438 = add nsw i32 %.1381508.us.us, 1
  %439 = sext i32 %.1381508.us.us to i64
  %440 = getelementptr inbounds %struct.ikv_t, ptr %37, i64 %439, i32 1
  store i32 %430, ptr %440, align 4, !tbaa !43
  %.pre686 = load i32, ptr %434, align 4, !tbaa !33
  br label %441

441:                                              ; preds = %437, %432
  %442 = phi i32 [ %.pre686, %437 ], [ %435, %432 ]
  %.2382.us.us = phi i32 [ %438, %437 ], [ %.1381508.us.us, %432 ]
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %434, align 4, !tbaa !33
  %.pre687 = load i32, ptr %361, align 4, !tbaa !33
  br label %444

444:                                              ; preds = %441, %.lr.ph511.split.us.us
  %445 = phi i32 [ %425, %.lr.ph511.split.us.us ], [ %.pre687, %441 ]
  %.3383.us.us = phi i32 [ %.1381508.us.us, %.lr.ph511.split.us.us ], [ %.2382.us.us, %441 ]
  %indvars.iv.next638 = add nsw i64 %indvars.iv637, 1
  %446 = sext i32 %445 to i64
  %447 = icmp slt i64 %indvars.iv.next638, %446
  br i1 %447, label %.lr.ph511.split.us.us, label %._crit_edge512.us, !llvm.loop !58

.lr.ph523.us:                                     ; preds = %.preheader458.us
  %448 = getelementptr inbounds ptr, ptr %57, i64 %222
  %449 = load ptr, ptr %448, align 8, !tbaa !42
  %450 = getelementptr inbounds ptr, ptr %55, i64 %222
  %451 = load ptr, ptr %450, align 8, !tbaa !42
  br label %330

.lr.ph538.us:                                     ; preds = %277
  %452 = getelementptr inbounds ptr, ptr %55, i64 %222
  %453 = load ptr, ptr %452, align 8, !tbaa !42
  br label %304

._crit_edge561.us:                                ; preds = %195
  br i1 %194, label %.preheader460.us, label %.thread450, !llvm.loop !61

.split579.us:                                     ; preds = %._crit_edge556.us
  %454 = load i32, ptr %121, align 8, !tbaa !40
  %455 = and i32 %454, 128
  %.not437 = icmp eq i32 %455, 0
  br i1 %.not437, label %.thread450, label %456

.split587.us:                                     ; preds = %395
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 330, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__EliminateSubDomainEdges) #6
  unreachable

.split585.us:                                     ; preds = %347
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 357, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__EliminateSubDomainEdges) #6
  unreachable

456:                                              ; preds = %.split579.us
  %457 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef %.0370568.us, i32 noundef %spec.select445.us)
  br label %.thread450

.thread450:                                       ; preds = %._crit_edge561.us, %191, %.split579.us, %456
  %.3419 = phi i32 [ 1, %456 ], [ 1, %.split579.us ], [ %.0416592, %191 ], [ %.0416592, %._crit_edge561.us ]
  %.11 = phi i32 [ %.9414.us695, %456 ], [ %.9414.us695, %.split579.us ], [ %.1406593, %191 ], [ %.9414.us695, %._crit_edge561.us ]
  %.9 = phi i32 [ %spec.select445.us, %456 ], [ %spec.select445.us, %.split579.us ], [ -1, %191 ], [ -1, %._crit_edge561.us ]
  %.7 = phi i32 [ %.4377.lcssa.us690700, %456 ], [ %.4377.lcssa.us690700, %.split579.us ], [ %.1374594, %191 ], [ %.4377.lcssa.us690700, %._crit_edge561.us ]
  %458 = load i32, ptr %154, align 4, !tbaa !33
  %459 = icmp sgt i32 %458, 0
  br i1 %459, label %.lr.ph589, label %._crit_edge590

.lr.ph589:                                        ; preds = %.thread450
  %460 = getelementptr inbounds ptr, ptr %55, i64 %153
  %461 = load ptr, ptr %460, align 8, !tbaa !42
  br label %462

462:                                              ; preds = %.lr.ph589, %462
  %indvars.iv681 = phi i64 [ 0, %.lr.ph589 ], [ %indvars.iv.next682, %462 ]
  %463 = getelementptr inbounds i32, ptr %461, i64 %indvars.iv681
  %464 = load i32, ptr %463, align 4, !tbaa !33
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds i32, ptr %60, i64 %465
  store i32 0, ptr %466, align 4, !tbaa !33
  %indvars.iv.next682 = add nuw nsw i64 %indvars.iv681, 1
  %467 = load i32, ptr %154, align 4, !tbaa !33
  %468 = sext i32 %467 to i64
  %469 = icmp slt i64 %indvars.iv.next682, %468
  br i1 %469, label %462, label %._crit_edge590, !llvm.loop !62

._crit_edge590:                                   ; preds = %462, %.thread450
  %.not439 = icmp eq i32 %.9, -1
  br i1 %.not439, label %476, label %470

470:                                              ; preds = %._crit_edge590
  %471 = load i32, ptr %13, align 4, !tbaa !15
  switch i32 %471, label %474 [
    i32 0, label %472
    i32 1, label %473
  ]

472:                                              ; preds = %470
  call void @libmetis__MoveGroupMinConnForCut(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef %.9, i32 noundef %.7, ptr noundef %33)
  br label %475

473:                                              ; preds = %470
  call void @libmetis__MoveGroupMinConnForVol(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef %.9, i32 noundef %.7, ptr noundef %33, ptr noundef %.0359, ptr noundef %.0358, ptr noundef %.0)
  br label %475

474:                                              ; preds = %470
  call void (i32, ptr, ...) @gk_errexit(i32 noundef 15, ptr noundef nonnull @.str.20, i32 noundef %471) #5
  br label %475

475:                                              ; preds = %474, %473, %472
  call void @libmetis__iarray2csr(i32 noundef %4, i32 noundef %26, ptr noundef %22, ptr noundef %40, ptr noundef %41) #5
  br label %476

476:                                              ; preds = %475, %._crit_edge590
  %477 = call i32 @libmetis__ipqGetTop(ptr noundef nonnull %3) #5
  %.not429 = icmp eq i32 %477, -1
  br i1 %.not429, label %._crit_edge596, label %.lr.ph595, !llvm.loop !63

._crit_edge596:                                   ; preds = %476
  %478 = icmp eq i32 %.3419, 0
  br i1 %478, label %._crit_edge596.thread, label %124

._crit_edge596.thread:                            ; preds = %.preheader461, %._crit_edge596, %135
  call void @libmetis__ipqFree(ptr noundef nonnull %3) #5
  call void @libmetis__wspacepop(ptr noundef %0) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  ret void
}

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

declare void @libmetis__ipqInit(ptr noundef, i64 noundef) local_unnamed_addr #2

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

declare void @libmetis__ipqReset(ptr 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

declare void @libmetis__ikvsorti(i64 noundef, ptr noundef) local_unnamed_addr #2

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

declare void @libmetis__ikvsortd(i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare void @libmetis__ipqFree(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 = { nounwind }
attributes #6 = { noreturn nounwind }

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

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


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