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

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

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

@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [136 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [53 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance = external hidden unnamed_addr constant [55 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [56 x i8], align 1

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

declare void @libmetis__wspacepush(ptr noundef) #1

declare ptr @libmetis__rpqCreate(i64 noundef) #1

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

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

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

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

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

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

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) #1

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

declare i32 @libmetis__rpqGetTop(ptr noundef) #1

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

declare void @libmetis__rpqDestroy(ptr noundef) #1

declare void @libmetis__wspacepop(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeBalance(ptr noundef %0, ptr noundef %1) #4 {
  %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 ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca float, align 4
  %34 = alloca i32, align 4
  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) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.graph_t, ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 8, !tbaa !9
  store i32 %37, ptr %11, align 4, !tbaa !12
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.graph_t, ptr %38, i32 0, i32 3
  %40 = load ptr, ptr %39, align 8, !tbaa !13
  store ptr %40, ptr %21, align 8, !tbaa !5
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.graph_t, ptr %41, i32 0, i32 6
  %43 = load ptr, ptr %42, align 8, !tbaa !14
  store ptr %43, ptr %23, align 8, !tbaa !5
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.graph_t, ptr %44, i32 0, i32 4
  %46 = load ptr, ptr %45, align 8, !tbaa !15
  store ptr %46, ptr %22, align 8, !tbaa !5
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graph_t, ptr %47, i32 0, i32 23
  %49 = load ptr, ptr %48, align 8, !tbaa !16
  store ptr %49, ptr %27, align 8, !tbaa !5
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 22
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  store ptr %52, ptr %28, align 8, !tbaa !5
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graph_t, ptr %53, i32 0, i32 19
  %55 = load ptr, ptr %54, align 8, !tbaa !18
  store ptr %55, ptr %24, align 8, !tbaa !5
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graph_t, ptr %56, i32 0, i32 20
  %58 = load ptr, ptr %57, align 8, !tbaa !19
  store ptr %58, ptr %25, align 8, !tbaa !5
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graph_t, ptr %59, i32 0, i32 28
  %61 = load ptr, ptr %60, align 8, !tbaa !20
  store ptr %61, ptr %32, align 8, !tbaa !5
  %62 = load ptr, ptr %3, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.ctrl_t, ptr %62, i32 0, i32 23
  %64 = load ptr, ptr %63, align 8, !tbaa !21
  %65 = getelementptr inbounds float, ptr %64, i64 0
  %66 = load float, ptr %65, align 4, !tbaa !26
  %67 = fpext float %66 to double
  %68 = fmul double 5.000000e-01, %67
  %69 = fptrunc double %68 to float
  store float %69, ptr %33, align 4, !tbaa !26
  %70 = load float, ptr %33, align 4, !tbaa !26
  %71 = load ptr, ptr %25, align 8, !tbaa !5
  %72 = getelementptr inbounds i32, ptr %71, i64 0
  %73 = load i32, ptr %72, align 4, !tbaa !12
  %74 = load ptr, ptr %25, align 8, !tbaa !5
  %75 = getelementptr inbounds i32, ptr %74, i64 1
  %76 = load i32, ptr %75, align 4, !tbaa !12
  %77 = add nsw i32 %73, %76
  %78 = sitofp i32 %77 to float
  %79 = fmul float %70, %78
  %80 = fptosi float %79 to i32
  store i32 %80, ptr %15, align 4, !tbaa !12
  %81 = load ptr, ptr %25, align 8, !tbaa !5
  %82 = getelementptr inbounds i32, ptr %81, i64 0
  %83 = load i32, ptr %82, align 4, !tbaa !12
  %84 = load ptr, ptr %25, align 8, !tbaa !5
  %85 = getelementptr inbounds i32, ptr %84, i64 1
  %86 = load i32, ptr %85, align 4, !tbaa !12
  %87 = icmp sge i32 %83, %86
  br i1 %87, label %88, label %92

88:                                               ; preds = %2
  %89 = load ptr, ptr %25, align 8, !tbaa !5
  %90 = getelementptr inbounds i32, ptr %89, i64 0
  %91 = load i32, ptr %90, align 4, !tbaa !12
  br label %96

92:                                               ; preds = %2
  %93 = load ptr, ptr %25, align 8, !tbaa !5
  %94 = getelementptr inbounds i32, ptr %93, i64 1
  %95 = load i32, ptr %94, align 4, !tbaa !12
  br label %96

96:                                               ; preds = %92, %88
  %97 = phi i32 [ %91, %88 ], [ %95, %92 ]
  %98 = load i32, ptr %15, align 4, !tbaa !12
  %99 = icmp slt i32 %97, %98
  br i1 %99, label %100, label %101

100:                                              ; preds = %96
  store i32 1, ptr %34, align 4
  br label %768

101:                                              ; preds = %96
  %102 = load ptr, ptr %25, align 8, !tbaa !5
  %103 = getelementptr inbounds i32, ptr %102, i64 0
  %104 = load i32, ptr %103, align 4, !tbaa !12
  %105 = load ptr, ptr %25, align 8, !tbaa !5
  %106 = getelementptr inbounds i32, ptr %105, i64 1
  %107 = load i32, ptr %106, align 4, !tbaa !12
  %108 = sub nsw i32 %104, %107
  %109 = call i32 @llvm.abs.i32(i32 %108, i1 true)
  %110 = load ptr, ptr %4, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.graph_t, ptr %110, i32 0, i32 8
  %112 = load ptr, ptr %111, align 8, !tbaa !27
  %113 = getelementptr inbounds i32, ptr %112, i64 0
  %114 = load i32, ptr %113, align 4, !tbaa !12
  %115 = mul nsw i32 3, %114
  %116 = load i32, ptr %11, align 4, !tbaa !12
  %117 = sdiv i32 %115, %116
  %118 = icmp slt i32 %109, %117
  br i1 %118, label %119, label %120

119:                                              ; preds = %101
  store i32 1, ptr %34, align 4
  br label %768

120:                                              ; preds = %101
  %121 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %121)
  %122 = load ptr, ptr %25, align 8, !tbaa !5
  %123 = getelementptr inbounds i32, ptr %122, i64 0
  %124 = load i32, ptr %123, align 4, !tbaa !12
  %125 = load ptr, ptr %25, align 8, !tbaa !5
  %126 = getelementptr inbounds i32, ptr %125, i64 1
  %127 = load i32, ptr %126, align 4, !tbaa !12
  %128 = icmp slt i32 %124, %127
  %129 = zext i1 %128 to i64
  %130 = select i1 %128, i32 0, i32 1
  store i32 %130, ptr %19, align 4, !tbaa !12
  %131 = load i32, ptr %19, align 4, !tbaa !12
  %132 = add nsw i32 %131, 1
  %133 = srem i32 %132, 2
  store i32 %133, ptr %20, align 4, !tbaa !12
  %134 = load i32, ptr %11, align 4, !tbaa !12
  %135 = sext i32 %134 to i64
  %136 = call ptr @libmetis__rpqCreate(i64 noundef %135)
  store ptr %136, ptr %31, align 8, !tbaa !5
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = load i32, ptr %11, align 4, !tbaa !12
  %139 = call ptr @libmetis__iwspacemalloc(ptr noundef %137, i32 noundef %138)
  store ptr %139, ptr %29, align 8, !tbaa !5
  %140 = load i32, ptr %11, align 4, !tbaa !12
  %141 = sext i32 %140 to i64
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  %143 = load i32, ptr %11, align 4, !tbaa !12
  %144 = call ptr @libmetis__iwspacemalloc(ptr noundef %142, i32 noundef %143)
  %145 = call ptr @libmetis__iset(i64 noundef %141, i32 noundef -1, ptr noundef %144)
  store ptr %145, ptr %30, align 8, !tbaa !5
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.ctrl_t, ptr %146, i32 0, i32 2
  %148 = load i32, ptr %147, align 8, !tbaa !28
  %149 = and i32 %148, 8
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %168

151:                                              ; preds = %120
  %152 = load ptr, ptr %25, align 8, !tbaa !5
  %153 = getelementptr inbounds i32, ptr %152, i64 0
  %154 = load i32, ptr %153, align 4, !tbaa !12
  %155 = load ptr, ptr %25, align 8, !tbaa !5
  %156 = getelementptr inbounds i32, ptr %155, i64 1
  %157 = load i32, ptr %156, align 4, !tbaa !12
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.graph_t, ptr %158, i32 0, i32 0
  %160 = load i32, ptr %159, align 8, !tbaa !9
  %161 = load ptr, ptr %4, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.graph_t, ptr %161, i32 0, i32 21
  %163 = load i32, ptr %162, align 8, !tbaa !29
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.graph_t, ptr %164, i32 0, i32 17
  %166 = load i32, ptr %165, align 8, !tbaa !30
  %167 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef %154, i32 noundef %157, i32 noundef %160, i32 noundef %163, i32 noundef %166)
  br label %168

168:                                              ; preds = %151, %120
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.graph_t, ptr %169, i32 0, i32 21
  %171 = load i32, ptr %170, align 8, !tbaa !29
  store i32 %171, ptr %12, align 4, !tbaa !12
  %172 = load i32, ptr %12, align 4, !tbaa !12
  %173 = load ptr, ptr %29, align 8, !tbaa !5
  %174 = load i32, ptr %12, align 4, !tbaa !12
  call void @libmetis__irandArrayPermute(i32 noundef %172, ptr noundef %173, i32 noundef %174, i32 noundef 1)
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %175

175:                                              ; preds = %226, %168
  %176 = load i32, ptr %6, align 4, !tbaa !12
  %177 = load i32, ptr %12, align 4, !tbaa !12
  %178 = icmp slt i32 %176, %177
  br i1 %178, label %179, label %229

179:                                              ; preds = %175
  %180 = load ptr, ptr %27, align 8, !tbaa !5
  %181 = load ptr, ptr %29, align 8, !tbaa !5
  %182 = load i32, ptr %6, align 4, !tbaa !12
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %181, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !12
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i32, ptr %180, i64 %186
  %188 = load i32, ptr %187, align 4, !tbaa !12
  store i32 %188, ptr %5, align 4, !tbaa !12
  %189 = load ptr, ptr %24, align 8, !tbaa !5
  %190 = load i32, ptr %5, align 4, !tbaa !12
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %189, i64 %191
  %193 = load i32, ptr %192, align 4, !tbaa !12
  %194 = icmp eq i32 %193, 2
  br i1 %194, label %206, label %195

195:                                              ; preds = %179
  %196 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef 522, ptr noundef @.str.2)
  %197 = load ptr, ptr %24, align 8, !tbaa !5
  %198 = load i32, ptr %5, align 4, !tbaa !12
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i32, ptr %197, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !12
  %202 = icmp eq i32 %201, 2
  br i1 %202, label %203, label %204

203:                                              ; preds = %195
  br label %205

204:                                              ; preds = %195
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 522, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

205:                                              ; preds = %203
  br label %206

206:                                              ; preds = %205, %179
  %207 = load ptr, ptr %31, align 8, !tbaa !5
  %208 = load i32, ptr %5, align 4, !tbaa !12
  %209 = load ptr, ptr %22, align 8, !tbaa !5
  %210 = load i32, ptr %5, align 4, !tbaa !12
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i32, ptr %209, i64 %211
  %213 = load i32, ptr %212, align 4, !tbaa !12
  %214 = load ptr, ptr %32, align 8, !tbaa !5
  %215 = load i32, ptr %5, align 4, !tbaa !12
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds %struct.nrinfo_t, ptr %214, i64 %216
  %218 = getelementptr inbounds %struct.nrinfo_t, ptr %217, i32 0, i32 0
  %219 = load i32, ptr %20, align 4, !tbaa !12
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds [2 x i32], ptr %218, i64 0, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !12
  %223 = sub nsw i32 %213, %222
  %224 = sitofp i32 %223 to float
  %225 = call i32 @libmetis__rpqInsert(ptr noundef %207, i32 noundef %208, float noundef %224)
  br label %226

226:                                              ; preds = %206
  %227 = load i32, ptr %6, align 4, !tbaa !12
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %6, align 4, !tbaa !12
  br label %175, !llvm.loop !31

229:                                              ; preds = %175
  %230 = load ptr, ptr %4, align 8, !tbaa !5
  %231 = load i32, ptr %12, align 4, !tbaa !12
  %232 = call i32 @libmetis__CheckNodeBnd(ptr noundef %230, i32 noundef %231)
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %243, label %234

234:                                              ; preds = %229
  %235 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef 526, ptr noundef @.str.2)
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = load i32, ptr %12, align 4, !tbaa !12
  %238 = call i32 @libmetis__CheckNodeBnd(ptr noundef %236, i32 noundef %237)
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %241

240:                                              ; preds = %234
  br label %242

241:                                              ; preds = %234
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.2, i32 noundef 526, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

242:                                              ; preds = %240
  br label %243

243:                                              ; preds = %242, %229
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %244)
  %246 = icmp ne i32 %245, 0
  br i1 %246, label %255, label %247

247:                                              ; preds = %243
  %248 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef 527, ptr noundef @.str.2)
  %249 = load ptr, ptr %4, align 8, !tbaa !5
  %250 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %249)
  %251 = icmp ne i32 %250, 0
  br i1 %251, label %252, label %253

252:                                              ; preds = %247
  br label %254

253:                                              ; preds = %247
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.2, i32 noundef 527, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

254:                                              ; preds = %252
  br label %255

255:                                              ; preds = %254, %243
  store i32 0, ptr %13, align 4, !tbaa !12
  br label %256

256:                                              ; preds = %735, %255
  %257 = load i32, ptr %13, align 4, !tbaa !12
  %258 = load i32, ptr %11, align 4, !tbaa !12
  %259 = icmp slt i32 %257, %258
  br i1 %259, label %260, label %738

260:                                              ; preds = %256
  %261 = load ptr, ptr %31, align 8, !tbaa !5
  %262 = call i32 @libmetis__rpqGetTop(ptr noundef %261)
  store i32 %262, ptr %16, align 4, !tbaa !12
  %263 = icmp eq i32 %262, -1
  br i1 %263, label %264, label %265

264:                                              ; preds = %260
  br label %738

265:                                              ; preds = %260
  %266 = load ptr, ptr %30, align 8, !tbaa !5
  %267 = load i32, ptr %16, align 4, !tbaa !12
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i32, ptr %266, i64 %268
  store i32 1, ptr %269, align 4, !tbaa !12
  %270 = load ptr, ptr %22, align 8, !tbaa !5
  %271 = load i32, ptr %16, align 4, !tbaa !12
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds i32, ptr %270, i64 %272
  %274 = load i32, ptr %273, align 4, !tbaa !12
  %275 = load ptr, ptr %32, align 8, !tbaa !5
  %276 = load i32, ptr %16, align 4, !tbaa !12
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds %struct.nrinfo_t, ptr %275, i64 %277
  %279 = getelementptr inbounds %struct.nrinfo_t, ptr %278, i32 0, i32 0
  %280 = load i32, ptr %20, align 4, !tbaa !12
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds [2 x i32], ptr %279, i64 0, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !12
  %284 = sub nsw i32 %274, %283
  store i32 %284, ptr %14, align 4, !tbaa !12
  %285 = load float, ptr %33, align 4, !tbaa !26
  %286 = load ptr, ptr %25, align 8, !tbaa !5
  %287 = getelementptr inbounds i32, ptr %286, i64 0
  %288 = load i32, ptr %287, align 4, !tbaa !12
  %289 = load ptr, ptr %25, align 8, !tbaa !5
  %290 = getelementptr inbounds i32, ptr %289, i64 1
  %291 = load i32, ptr %290, align 4, !tbaa !12
  %292 = add nsw i32 %288, %291
  %293 = sitofp i32 %292 to float
  %294 = fmul float %285, %293
  %295 = fptosi float %294 to i32
  store i32 %295, ptr %15, align 4, !tbaa !12
  %296 = load ptr, ptr %25, align 8, !tbaa !5
  %297 = load i32, ptr %19, align 4, !tbaa !12
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %296, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !12
  %301 = load ptr, ptr %25, align 8, !tbaa !5
  %302 = load i32, ptr %20, align 4, !tbaa !12
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds i32, ptr %301, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !12
  %306 = icmp sgt i32 %300, %305
  br i1 %306, label %307, label %308

307:                                              ; preds = %265
  br label %738

308:                                              ; preds = %265
  %309 = load i32, ptr %14, align 4, !tbaa !12
  %310 = icmp slt i32 %309, 0
  br i1 %310, label %311, label %320

311:                                              ; preds = %308
  %312 = load ptr, ptr %25, align 8, !tbaa !5
  %313 = load i32, ptr %20, align 4, !tbaa !12
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds i32, ptr %312, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !12
  %317 = load i32, ptr %15, align 4, !tbaa !12
  %318 = icmp slt i32 %316, %317
  br i1 %318, label %319, label %320

319:                                              ; preds = %311
  br label %738

320:                                              ; preds = %311, %308
  %321 = load ptr, ptr %25, align 8, !tbaa !5
  %322 = load i32, ptr %19, align 4, !tbaa !12
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds i32, ptr %321, i64 %323
  %325 = load i32, ptr %324, align 4, !tbaa !12
  %326 = load ptr, ptr %22, align 8, !tbaa !5
  %327 = load i32, ptr %16, align 4, !tbaa !12
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i32, ptr %326, i64 %328
  %330 = load i32, ptr %329, align 4, !tbaa !12
  %331 = add nsw i32 %325, %330
  %332 = load i32, ptr %15, align 4, !tbaa !12
  %333 = icmp sgt i32 %331, %332
  br i1 %333, label %334, label %335

334:                                              ; preds = %320
  br label %735

335:                                              ; preds = %320
  %336 = load ptr, ptr %28, align 8, !tbaa !5
  %337 = load i32, ptr %16, align 4, !tbaa !12
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %336, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !12
  %341 = icmp ne i32 %340, -1
  br i1 %341, label %353, label %342

342:                                              ; preds = %335
  %343 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 553, ptr noundef @.str.2)
  %344 = load ptr, ptr %28, align 8, !tbaa !5
  %345 = load i32, ptr %16, align 4, !tbaa !12
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %344, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !12
  %349 = icmp ne i32 %348, -1
  br i1 %349, label %350, label %351

350:                                              ; preds = %342
  br label %352

351:                                              ; preds = %342
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 553, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

352:                                              ; preds = %350
  br label %353

353:                                              ; preds = %352, %335
  %354 = load i32, ptr %14, align 4, !tbaa !12
  %355 = load ptr, ptr %25, align 8, !tbaa !5
  %356 = getelementptr inbounds i32, ptr %355, i64 2
  %357 = load i32, ptr %356, align 4, !tbaa !12
  %358 = sub nsw i32 %357, %354
  store i32 %358, ptr %356, align 4, !tbaa !12
  br label %359

359:                                              ; preds = %353
  %360 = load ptr, ptr %28, align 8, !tbaa !5
  %361 = load i32, ptr %16, align 4, !tbaa !12
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i32, ptr %360, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !12
  %365 = icmp ne i32 %364, -1
  br i1 %365, label %377, label %366

366:                                              ; preds = %359
  %367 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 557, ptr noundef @.str.2)
  %368 = load ptr, ptr %28, align 8, !tbaa !5
  %369 = load i32, ptr %16, align 4, !tbaa !12
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds i32, ptr %368, i64 %370
  %372 = load i32, ptr %371, align 4, !tbaa !12
  %373 = icmp ne i32 %372, -1
  br i1 %373, label %374, label %375

374:                                              ; preds = %366
  br label %376

375:                                              ; preds = %366
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 557, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

376:                                              ; preds = %374
  br label %377

377:                                              ; preds = %376, %359
  %378 = load ptr, ptr %27, align 8, !tbaa !5
  %379 = load i32, ptr %12, align 4, !tbaa !12
  %380 = add nsw i32 %379, -1
  store i32 %380, ptr %12, align 4, !tbaa !12
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds i32, ptr %378, i64 %381
  %383 = load i32, ptr %382, align 4, !tbaa !12
  %384 = load ptr, ptr %27, align 8, !tbaa !5
  %385 = load ptr, ptr %28, align 8, !tbaa !5
  %386 = load i32, ptr %16, align 4, !tbaa !12
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %385, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !12
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %384, i64 %390
  store i32 %383, ptr %391, align 4, !tbaa !12
  %392 = load ptr, ptr %28, align 8, !tbaa !5
  %393 = load i32, ptr %16, align 4, !tbaa !12
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %392, i64 %394
  %396 = load i32, ptr %395, align 4, !tbaa !12
  %397 = load ptr, ptr %28, align 8, !tbaa !5
  %398 = load ptr, ptr %27, align 8, !tbaa !5
  %399 = load i32, ptr %12, align 4, !tbaa !12
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds i32, ptr %398, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !12
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds i32, ptr %397, i64 %403
  store i32 %396, ptr %404, align 4, !tbaa !12
  %405 = load ptr, ptr %28, align 8, !tbaa !5
  %406 = load i32, ptr %16, align 4, !tbaa !12
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  store i32 -1, ptr %408, align 4, !tbaa !12
  br label %409

409:                                              ; preds = %377
  br label %410

410:                                              ; preds = %409
  %411 = load ptr, ptr %22, align 8, !tbaa !5
  %412 = load i32, ptr %16, align 4, !tbaa !12
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i32, ptr %411, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !12
  %416 = load ptr, ptr %25, align 8, !tbaa !5
  %417 = load i32, ptr %19, align 4, !tbaa !12
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i32, ptr %416, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !12
  %421 = add nsw i32 %420, %415
  store i32 %421, ptr %419, align 4, !tbaa !12
  %422 = load i32, ptr %19, align 4, !tbaa !12
  %423 = load ptr, ptr %24, align 8, !tbaa !5
  %424 = load i32, ptr %16, align 4, !tbaa !12
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds i32, ptr %423, i64 %425
  store i32 %422, ptr %426, align 4, !tbaa !12
  %427 = load ptr, ptr %3, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.ctrl_t, ptr %427, i32 0, i32 2
  %429 = load i32, ptr %428, align 8, !tbaa !28
  %430 = and i32 %429, 32
  %431 = icmp ne i32 %430, 0
  br i1 %431, label %432, label %460

432:                                              ; preds = %410
  %433 = load i32, ptr %16, align 4, !tbaa !12
  %434 = load i32, ptr %19, align 4, !tbaa !12
  %435 = load ptr, ptr %22, align 8, !tbaa !5
  %436 = load i32, ptr %16, align 4, !tbaa !12
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i32, ptr %435, i64 %437
  %439 = load i32, ptr %438, align 4, !tbaa !12
  %440 = load ptr, ptr %32, align 8, !tbaa !5
  %441 = load i32, ptr %16, align 4, !tbaa !12
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds %struct.nrinfo_t, ptr %440, i64 %442
  %444 = getelementptr inbounds %struct.nrinfo_t, ptr %443, i32 0, i32 0
  %445 = load i32, ptr %20, align 4, !tbaa !12
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds [2 x i32], ptr %444, i64 0, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !12
  %449 = sub nsw i32 %439, %448
  %450 = load ptr, ptr %25, align 8, !tbaa !5
  %451 = getelementptr inbounds i32, ptr %450, i64 0
  %452 = load i32, ptr %451, align 4, !tbaa !12
  %453 = load ptr, ptr %25, align 8, !tbaa !5
  %454 = getelementptr inbounds i32, ptr %453, i64 1
  %455 = load i32, ptr %454, align 4, !tbaa !12
  %456 = load ptr, ptr %25, align 8, !tbaa !5
  %457 = getelementptr inbounds i32, ptr %456, i64 2
  %458 = load i32, ptr %457, align 4, !tbaa !12
  %459 = call i32 (ptr, ...) @printf(ptr noundef @.str.29, i32 noundef %433, i32 noundef %434, i32 noundef %449, i32 noundef %452, i32 noundef %455, i32 noundef %458)
  br label %460

460:                                              ; preds = %432, %410
  %461 = load ptr, ptr %21, align 8, !tbaa !5
  %462 = load i32, ptr %16, align 4, !tbaa !12
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds i32, ptr %461, i64 %463
  %465 = load i32, ptr %464, align 4, !tbaa !12
  store i32 %465, ptr %7, align 4, !tbaa !12
  br label %466

466:                                              ; preds = %731, %460
  %467 = load i32, ptr %7, align 4, !tbaa !12
  %468 = load ptr, ptr %21, align 8, !tbaa !5
  %469 = load i32, ptr %16, align 4, !tbaa !12
  %470 = add nsw i32 %469, 1
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds i32, ptr %468, i64 %471
  %473 = load i32, ptr %472, align 4, !tbaa !12
  %474 = icmp slt i32 %467, %473
  br i1 %474, label %475, label %734

475:                                              ; preds = %466
  %476 = load ptr, ptr %23, align 8, !tbaa !5
  %477 = load i32, ptr %7, align 4, !tbaa !12
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %476, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !12
  store i32 %480, ptr %8, align 4, !tbaa !12
  %481 = load ptr, ptr %24, align 8, !tbaa !5
  %482 = load i32, ptr %8, align 4, !tbaa !12
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %481, i64 %483
  %485 = load i32, ptr %484, align 4, !tbaa !12
  %486 = icmp eq i32 %485, 2
  br i1 %486, label %487, label %503

487:                                              ; preds = %475
  %488 = load ptr, ptr %22, align 8, !tbaa !5
  %489 = load i32, ptr %16, align 4, !tbaa !12
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i32, ptr %488, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !12
  %493 = load ptr, ptr %32, align 8, !tbaa !5
  %494 = load i32, ptr %8, align 4, !tbaa !12
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds %struct.nrinfo_t, ptr %493, i64 %495
  %497 = getelementptr inbounds %struct.nrinfo_t, ptr %496, i32 0, i32 0
  %498 = load i32, ptr %19, align 4, !tbaa !12
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds [2 x i32], ptr %497, i64 0, i64 %499
  %501 = load i32, ptr %500, align 4, !tbaa !12
  %502 = add nsw i32 %501, %492
  store i32 %502, ptr %500, align 4, !tbaa !12
  br label %730

503:                                              ; preds = %475
  %504 = load ptr, ptr %24, align 8, !tbaa !5
  %505 = load i32, ptr %8, align 4, !tbaa !12
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds i32, ptr %504, i64 %506
  %508 = load i32, ptr %507, align 4, !tbaa !12
  %509 = load i32, ptr %20, align 4, !tbaa !12
  %510 = icmp eq i32 %508, %509
  br i1 %510, label %511, label %729

511:                                              ; preds = %503
  %512 = load ptr, ptr %28, align 8, !tbaa !5
  %513 = load i32, ptr %8, align 4, !tbaa !12
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds i32, ptr %512, i64 %514
  %516 = load i32, ptr %515, align 4, !tbaa !12
  %517 = icmp eq i32 %516, -1
  br i1 %517, label %542, label %518

518:                                              ; preds = %511
  %519 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 574, ptr noundef @.str.2)
  %520 = load i32, ptr %8, align 4, !tbaa !12
  %521 = load ptr, ptr %28, align 8, !tbaa !5
  %522 = load i32, ptr %8, align 4, !tbaa !12
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds i32, ptr %521, i64 %523
  %525 = load i32, ptr %524, align 4, !tbaa !12
  %526 = load ptr, ptr %24, align 8, !tbaa !5
  %527 = load i32, ptr %8, align 4, !tbaa !12
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds i32, ptr %526, i64 %528
  %530 = load i32, ptr %529, align 4, !tbaa !12
  %531 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %520, i32 noundef %525, i32 noundef %530)
  %532 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %533 = load ptr, ptr %28, align 8, !tbaa !5
  %534 = load i32, ptr %8, align 4, !tbaa !12
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds i32, ptr %533, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !12
  %538 = icmp eq i32 %537, -1
  br i1 %538, label %539, label %540

539:                                              ; preds = %518
  br label %541

540:                                              ; preds = %518
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.2, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

541:                                              ; preds = %539
  br label %542

542:                                              ; preds = %541, %511
  br label %543

543:                                              ; preds = %542
  %544 = load ptr, ptr %28, align 8, !tbaa !5
  %545 = load i32, ptr %8, align 4, !tbaa !12
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds i32, ptr %544, i64 %546
  %548 = load i32, ptr %547, align 4, !tbaa !12
  %549 = icmp eq i32 %548, -1
  br i1 %549, label %561, label %550

550:                                              ; preds = %543
  %551 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 575, ptr noundef @.str.2)
  %552 = load ptr, ptr %28, align 8, !tbaa !5
  %553 = load i32, ptr %8, align 4, !tbaa !12
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds i32, ptr %552, i64 %554
  %556 = load i32, ptr %555, align 4, !tbaa !12
  %557 = icmp eq i32 %556, -1
  br i1 %557, label %558, label %559

558:                                              ; preds = %550
  br label %560

559:                                              ; preds = %550
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.2, i32 noundef 575, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

560:                                              ; preds = %558
  br label %561

561:                                              ; preds = %560, %543
  %562 = load i32, ptr %8, align 4, !tbaa !12
  %563 = load ptr, ptr %27, align 8, !tbaa !5
  %564 = load i32, ptr %12, align 4, !tbaa !12
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds i32, ptr %563, i64 %565
  store i32 %562, ptr %566, align 4, !tbaa !12
  %567 = load i32, ptr %12, align 4, !tbaa !12
  %568 = add nsw i32 %567, 1
  store i32 %568, ptr %12, align 4, !tbaa !12
  %569 = load ptr, ptr %28, align 8, !tbaa !5
  %570 = load i32, ptr %8, align 4, !tbaa !12
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds i32, ptr %569, i64 %571
  store i32 %567, ptr %572, align 4, !tbaa !12
  br label %573

573:                                              ; preds = %561
  br label %574

574:                                              ; preds = %573
  %575 = load ptr, ptr %24, align 8, !tbaa !5
  %576 = load i32, ptr %8, align 4, !tbaa !12
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i32, ptr %575, i64 %577
  store i32 2, ptr %578, align 4, !tbaa !12
  %579 = load ptr, ptr %22, align 8, !tbaa !5
  %580 = load i32, ptr %8, align 4, !tbaa !12
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds i32, ptr %579, i64 %581
  %583 = load i32, ptr %582, align 4, !tbaa !12
  %584 = load ptr, ptr %25, align 8, !tbaa !5
  %585 = load i32, ptr %20, align 4, !tbaa !12
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %584, i64 %586
  %588 = load i32, ptr %587, align 4, !tbaa !12
  %589 = sub nsw i32 %588, %583
  store i32 %589, ptr %587, align 4, !tbaa !12
  %590 = load ptr, ptr %32, align 8, !tbaa !5
  %591 = load i32, ptr %8, align 4, !tbaa !12
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds %struct.nrinfo_t, ptr %590, i64 %592
  %594 = getelementptr inbounds %struct.nrinfo_t, ptr %593, i32 0, i32 0
  %595 = getelementptr inbounds [2 x i32], ptr %594, i64 0, i64 0
  store ptr %595, ptr %26, align 8, !tbaa !5
  %596 = load ptr, ptr %26, align 8, !tbaa !5
  %597 = getelementptr inbounds i32, ptr %596, i64 1
  store i32 0, ptr %597, align 4, !tbaa !12
  %598 = load ptr, ptr %26, align 8, !tbaa !5
  %599 = getelementptr inbounds i32, ptr %598, i64 0
  store i32 0, ptr %599, align 4, !tbaa !12
  %600 = load ptr, ptr %21, align 8, !tbaa !5
  %601 = load i32, ptr %8, align 4, !tbaa !12
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds i32, ptr %600, i64 %602
  %604 = load i32, ptr %603, align 4, !tbaa !12
  store i32 %604, ptr %9, align 4, !tbaa !12
  br label %605

605:                                              ; preds = %710, %574
  %606 = load i32, ptr %9, align 4, !tbaa !12
  %607 = load ptr, ptr %21, align 8, !tbaa !5
  %608 = load i32, ptr %8, align 4, !tbaa !12
  %609 = add nsw i32 %608, 1
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i32, ptr %607, i64 %610
  %612 = load i32, ptr %611, align 4, !tbaa !12
  %613 = icmp slt i32 %606, %612
  br i1 %613, label %614, label %713

614:                                              ; preds = %605
  %615 = load ptr, ptr %23, align 8, !tbaa !5
  %616 = load i32, ptr %9, align 4, !tbaa !12
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds i32, ptr %615, i64 %617
  %619 = load i32, ptr %618, align 4, !tbaa !12
  store i32 %619, ptr %10, align 4, !tbaa !12
  %620 = load ptr, ptr %24, align 8, !tbaa !5
  %621 = load i32, ptr %10, align 4, !tbaa !12
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %620, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !12
  %625 = icmp ne i32 %624, 2
  br i1 %625, label %626, label %642

626:                                              ; preds = %614
  %627 = load ptr, ptr %22, align 8, !tbaa !5
  %628 = load i32, ptr %10, align 4, !tbaa !12
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !12
  %632 = load ptr, ptr %26, align 8, !tbaa !5
  %633 = load ptr, ptr %24, align 8, !tbaa !5
  %634 = load i32, ptr %10, align 4, !tbaa !12
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds i32, ptr %633, i64 %635
  %637 = load i32, ptr %636, align 4, !tbaa !12
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %632, i64 %638
  %640 = load i32, ptr %639, align 4, !tbaa !12
  %641 = add nsw i32 %640, %631
  store i32 %641, ptr %639, align 4, !tbaa !12
  br label %709

642:                                              ; preds = %614
  %643 = load ptr, ptr %28, align 8, !tbaa !5
  %644 = load i32, ptr %10, align 4, !tbaa !12
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds i32, ptr %643, i64 %645
  %647 = load i32, ptr %646, align 4, !tbaa !12
  %648 = icmp ne i32 %647, -1
  br i1 %648, label %660, label %649

649:                                              ; preds = %642
  %650 = call i32 (ptr, ...) @printf(ptr noundef @.str.30, i32 noundef 587, ptr noundef @.str.2)
  %651 = load ptr, ptr %28, align 8, !tbaa !5
  %652 = load i32, ptr %10, align 4, !tbaa !12
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds i32, ptr %651, i64 %653
  %655 = load i32, ptr %654, align 4, !tbaa !12
  %656 = icmp ne i32 %655, -1
  br i1 %656, label %657, label %658

657:                                              ; preds = %649
  br label %659

658:                                              ; preds = %649
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.2, i32 noundef 587, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #6
  unreachable

659:                                              ; preds = %657
  br label %660

660:                                              ; preds = %659, %642
  %661 = load ptr, ptr %22, align 8, !tbaa !5
  %662 = load i32, ptr %10, align 4, !tbaa !12
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds i32, ptr %661, i64 %663
  %665 = load i32, ptr %664, align 4, !tbaa !12
  %666 = load ptr, ptr %32, align 8, !tbaa !5
  %667 = load i32, ptr %10, align 4, !tbaa !12
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds %struct.nrinfo_t, ptr %666, i64 %668
  %670 = getelementptr inbounds %struct.nrinfo_t, ptr %669, i32 0, i32 0
  %671 = load i32, ptr %20, align 4, !tbaa !12
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds [2 x i32], ptr %670, i64 0, i64 %672
  %674 = load i32, ptr %673, align 4, !tbaa !12
  %675 = sub nsw i32 %665, %674
  store i32 %675, ptr %17, align 4, !tbaa !12
  %676 = load ptr, ptr %22, align 8, !tbaa !5
  %677 = load i32, ptr %8, align 4, !tbaa !12
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds i32, ptr %676, i64 %678
  %680 = load i32, ptr %679, align 4, !tbaa !12
  %681 = load ptr, ptr %32, align 8, !tbaa !5
  %682 = load i32, ptr %10, align 4, !tbaa !12
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds %struct.nrinfo_t, ptr %681, i64 %683
  %685 = getelementptr inbounds %struct.nrinfo_t, ptr %684, i32 0, i32 0
  %686 = load i32, ptr %20, align 4, !tbaa !12
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds [2 x i32], ptr %685, i64 0, i64 %687
  %689 = load i32, ptr %688, align 4, !tbaa !12
  %690 = sub nsw i32 %689, %680
  store i32 %690, ptr %688, align 4, !tbaa !12
  %691 = load ptr, ptr %30, align 8, !tbaa !5
  %692 = load i32, ptr %10, align 4, !tbaa !12
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds i32, ptr %691, i64 %693
  %695 = load i32, ptr %694, align 4, !tbaa !12
  %696 = icmp eq i32 %695, -1
  br i1 %696, label %697, label %708

697:                                              ; preds = %660
  %698 = load ptr, ptr %31, align 8, !tbaa !5
  %699 = load i32, ptr %10, align 4, !tbaa !12
  %700 = load i32, ptr %17, align 4, !tbaa !12
  %701 = load ptr, ptr %22, align 8, !tbaa !5
  %702 = load i32, ptr %8, align 4, !tbaa !12
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds i32, ptr %701, i64 %703
  %705 = load i32, ptr %704, align 4, !tbaa !12
  %706 = add nsw i32 %700, %705
  %707 = sitofp i32 %706 to float
  call void @libmetis__rpqUpdate(ptr noundef %698, i32 noundef %699, float noundef %707)
  br label %708

708:                                              ; preds = %697, %660
  br label %709

709:                                              ; preds = %708, %626
  br label %710

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

713:                                              ; preds = %605
  %714 = load ptr, ptr %31, align 8, !tbaa !5
  %715 = load i32, ptr %8, align 4, !tbaa !12
  %716 = load ptr, ptr %22, align 8, !tbaa !5
  %717 = load i32, ptr %8, align 4, !tbaa !12
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds i32, ptr %716, i64 %718
  %720 = load i32, ptr %719, align 4, !tbaa !12
  %721 = load ptr, ptr %26, align 8, !tbaa !5
  %722 = load i32, ptr %20, align 4, !tbaa !12
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %721, i64 %723
  %725 = load i32, ptr %724, align 4, !tbaa !12
  %726 = sub nsw i32 %720, %725
  %727 = sitofp i32 %726 to float
  %728 = call i32 @libmetis__rpqInsert(ptr noundef %714, i32 noundef %715, float noundef %727)
  br label %729

729:                                              ; preds = %713, %503
  br label %730

730:                                              ; preds = %729, %487
  br label %731

731:                                              ; preds = %730
  %732 = load i32, ptr %7, align 4, !tbaa !12
  %733 = add nsw i32 %732, 1
  store i32 %733, ptr %7, align 4, !tbaa !12
  br label %466, !llvm.loop !34

734:                                              ; preds = %466
  br label %735

735:                                              ; preds = %734, %334
  %736 = load i32, ptr %13, align 4, !tbaa !12
  %737 = add nsw i32 %736, 1
  store i32 %737, ptr %13, align 4, !tbaa !12
  br label %256, !llvm.loop !35

738:                                              ; preds = %319, %307, %264, %256
  %739 = load ptr, ptr %3, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.ctrl_t, ptr %739, i32 0, i32 2
  %741 = load i32, ptr %740, align 8, !tbaa !28
  %742 = and i32 %741, 8
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %744, label %757

744:                                              ; preds = %738
  %745 = load ptr, ptr %25, align 8, !tbaa !5
  %746 = getelementptr inbounds i32, ptr %745, i64 2
  %747 = load i32, ptr %746, align 4, !tbaa !12
  %748 = load i32, ptr %13, align 4, !tbaa !12
  %749 = load ptr, ptr %25, align 8, !tbaa !5
  %750 = getelementptr inbounds i32, ptr %749, i64 0
  %751 = load i32, ptr %750, align 4, !tbaa !12
  %752 = load ptr, ptr %25, align 8, !tbaa !5
  %753 = getelementptr inbounds i32, ptr %752, i64 1
  %754 = load i32, ptr %753, align 4, !tbaa !12
  %755 = load i32, ptr %12, align 4, !tbaa !12
  %756 = call i32 (ptr, ...) @printf(ptr noundef @.str.32, i32 noundef %747, i32 noundef %748, i32 noundef %751, i32 noundef %754, i32 noundef %755)
  br label %757

757:                                              ; preds = %744, %738
  %758 = load ptr, ptr %25, align 8, !tbaa !5
  %759 = getelementptr inbounds i32, ptr %758, i64 2
  %760 = load i32, ptr %759, align 4, !tbaa !12
  %761 = load ptr, ptr %4, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.graph_t, ptr %761, i32 0, i32 17
  store i32 %760, ptr %762, align 8, !tbaa !30
  %763 = load i32, ptr %12, align 4, !tbaa !12
  %764 = load ptr, ptr %4, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.graph_t, ptr %764, i32 0, i32 21
  store i32 %763, ptr %765, align 8, !tbaa !29
  %766 = load ptr, ptr %31, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %766)
  %767 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %767)
  store i32 0, ptr %34, align 4
  br label %768

768:                                              ; preds = %757, %119, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  %769 = load i32, ptr %34, align 4
  switch i32 %769, label %771 [
    i32 0, label %770
    i32 1, label %770
  ]

770:                                              ; preds = %768, %768
  ret void

771:                                              ; preds = %768
  unreachable
}

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

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

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


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

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

@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [136 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [53 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance = external hidden unnamed_addr constant [55 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [56 x i8], align 1

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #0

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #0

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

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

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

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

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

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

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) local_unnamed_addr #0

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

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #0

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

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #0

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeBalance(ptr noundef %0, ptr noundef %1) local_unnamed_addr #4 {
  %3 = load i32, ptr %1, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %1, i64 16
  %5 = load ptr, ptr %4, align 8, !tbaa !11
  %6 = getelementptr inbounds i8, ptr %1, i64 40
  %7 = load ptr, ptr %6, align 8, !tbaa !12
  %8 = getelementptr inbounds i8, ptr %1, i64 24
  %9 = load ptr, ptr %8, align 8, !tbaa !13
  %10 = getelementptr inbounds i8, ptr %1, i64 152
  %11 = load ptr, ptr %10, align 8, !tbaa !14
  %12 = getelementptr inbounds i8, ptr %1, i64 144
  %13 = load ptr, ptr %12, align 8, !tbaa !15
  %14 = getelementptr inbounds i8, ptr %1, i64 120
  %15 = load ptr, ptr %14, align 8, !tbaa !16
  %16 = getelementptr inbounds i8, ptr %1, i64 128
  %17 = load ptr, ptr %16, align 8, !tbaa !17
  %18 = getelementptr inbounds i8, ptr %1, i64 192
  %19 = load ptr, ptr %18, align 8, !tbaa !18
  %20 = getelementptr inbounds i8, ptr %0, i64 104
  %21 = load ptr, ptr %20, align 8, !tbaa !19
  %22 = load float, ptr %21, align 4, !tbaa !24
  %23 = fmul float %22, 5.000000e-01
  %24 = load i32, ptr %17, align 4, !tbaa !25
  %25 = getelementptr inbounds i8, ptr %17, i64 4
  %26 = load i32, ptr %25, align 4, !tbaa !25
  %27 = add nsw i32 %26, %24
  %28 = sitofp i32 %27 to float
  %29 = fmul float %23, %28
  %30 = fptosi float %29 to i32
  %. = tail call i32 @llvm.smax.i32(i32 %24, i32 %26)
  %31 = icmp slt i32 %., %30
  br i1 %31, label %282, label %32

32:                                               ; preds = %2
  %33 = sub nsw i32 %24, %26
  %34 = tail call i32 @llvm.abs.i32(i32 %33, i1 true)
  %35 = getelementptr inbounds i8, ptr %1, i64 56
  %36 = load ptr, ptr %35, align 8, !tbaa !26
  %37 = load i32, ptr %36, align 4, !tbaa !25
  %38 = mul nsw i32 %37, 3
  %39 = sdiv i32 %38, %3
  %40 = icmp slt i32 %34, %39
  br i1 %40, label %282, label %41

41:                                               ; preds = %32
  tail call void @libmetis__wspacepush(ptr noundef nonnull %0) #6
  %42 = load i32, ptr %17, align 4, !tbaa !25
  %43 = load i32, ptr %25, align 4, !tbaa !25
  %44 = icmp sge i32 %42, %43
  %45 = zext i1 %44 to i32
  %not. = xor i1 %44, true
  %46 = zext i1 %not. to i32
  %47 = sext i32 %3 to i64
  %48 = tail call ptr @libmetis__rpqCreate(i64 noundef %47) #6
  %49 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %3) #6
  %50 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef %3) #6
  %51 = tail call ptr @libmetis__iset(i64 noundef %47, i32 noundef -1, ptr noundef %50) #6
  %52 = getelementptr inbounds i8, ptr %0, i64 8
  %53 = load i32, ptr %52, align 8, !tbaa !27
  %54 = and i32 %53, 8
  %.not243 = icmp eq i32 %54, 0
  br i1 %.not243, label %64, label %55

55:                                               ; preds = %41
  %56 = load i32, ptr %17, align 4, !tbaa !25
  %57 = load i32, ptr %25, align 4, !tbaa !25
  %58 = load i32, ptr %1, align 8, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %1, i64 136
  %60 = load i32, ptr %59, align 8, !tbaa !28
  %61 = getelementptr inbounds i8, ptr %1, i64 112
  %62 = load i32, ptr %61, align 8, !tbaa !29
  %63 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef %56, i32 noundef %57, i32 noundef %58, i32 noundef %60, i32 noundef %62)
  br label %64

64:                                               ; preds = %55, %41
  %65 = getelementptr inbounds i8, ptr %1, i64 136
  %66 = load i32, ptr %65, align 8, !tbaa !28
  tail call void @libmetis__irandArrayPermute(i32 noundef %66, ptr noundef %49, i32 noundef %66, i32 noundef 1) #6
  %67 = icmp sgt i32 %66, 0
  br i1 %67, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %64
  %68 = zext i1 %not. to i64
  %invariant.gep = getelementptr [2 x i32], ptr %19, i64 0, i64 %68
  %wide.trip.count = zext nneg i32 %66 to i64
  br label %69

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

79:                                               ; preds = %69
  %80 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef 522, ptr noundef nonnull @.str.2)
  %81 = load i32, ptr %76, align 4, !tbaa !25
  %82 = icmp eq i32 %81, 2
  br i1 %82, label %84, label %83

83:                                               ; preds = %79
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 522, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

84:                                               ; preds = %79, %69
  %85 = getelementptr inbounds i32, ptr %9, i64 %75
  %86 = load i32, ptr %85, align 4, !tbaa !25
  %gep = getelementptr %struct.nrinfo_t, ptr %invariant.gep, i64 %75
  %87 = load i32, ptr %gep, align 4, !tbaa !25
  %88 = sub nsw i32 %86, %87
  %89 = sitofp i32 %88 to float
  %90 = tail call i32 @libmetis__rpqInsert(ptr noundef %48, i32 noundef %74, float noundef %89) #6
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %69, !llvm.loop !30

._crit_edge:                                      ; preds = %84, %64
  %91 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %66) #6
  %.not244 = icmp eq i32 %91, 0
  br i1 %.not244, label %92, label %96

92:                                               ; preds = %._crit_edge
  %93 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef 526, ptr noundef nonnull @.str.2)
  %94 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %66) #6
  %.not245 = icmp eq i32 %94, 0
  br i1 %.not245, label %95, label %96

95:                                               ; preds = %92
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, i32 noundef 526, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

96:                                               ; preds = %92, %._crit_edge
  %97 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not246 = icmp eq i32 %97, 0
  br i1 %.not246, label %98, label %102

98:                                               ; preds = %96
  %99 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef 527, ptr noundef nonnull @.str.2)
  %100 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not247 = icmp eq i32 %100, 0
  br i1 %.not247, label %101, label %102

101:                                              ; preds = %98
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.2, i32 noundef 527, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

102:                                              ; preds = %98, %96
  %103 = icmp sgt i32 %3, 0
  br i1 %103, label %.lr.ph283, label %._crit_edge284

.lr.ph283:                                        ; preds = %102
  %104 = zext i1 %not. to i64
  %invariant.gep296 = getelementptr [2 x i32], ptr %19, i64 0, i64 %104
  %105 = zext i1 %44 to i64
  %106 = getelementptr inbounds i32, ptr %17, i64 %105
  %107 = getelementptr inbounds i32, ptr %17, i64 %104
  %108 = getelementptr inbounds i8, ptr %17, i64 8
  %invariant.gep274 = getelementptr [2 x i32], ptr %19, i64 0, i64 %105
  br label %109

109:                                              ; preds = %.lr.ph283, %.loopexit
  %.0234281 = phi i32 [ %66, %.lr.ph283 ], [ %.3, %.loopexit ]
  %.0235280 = phi i32 [ 0, %.lr.ph283 ], [ %269, %.loopexit ]
  %110 = tail call i32 @libmetis__rpqGetTop(ptr noundef %48) #6
  %111 = icmp eq i32 %110, -1
  br i1 %111, label %._crit_edge284, label %112

112:                                              ; preds = %109
  %113 = sext i32 %110 to i64
  %114 = getelementptr inbounds i32, ptr %51, i64 %113
  store i32 1, ptr %114, align 4, !tbaa !25
  %115 = getelementptr inbounds i32, ptr %9, i64 %113
  %116 = load i32, ptr %115, align 4, !tbaa !25
  %gep297 = getelementptr %struct.nrinfo_t, ptr %invariant.gep296, i64 %113
  %117 = load i32, ptr %gep297, align 4, !tbaa !25
  %118 = sub nsw i32 %116, %117
  %119 = load i32, ptr %17, align 4, !tbaa !25
  %120 = load i32, ptr %25, align 4, !tbaa !25
  %121 = add nsw i32 %120, %119
  %122 = sitofp i32 %121 to float
  %123 = fmul float %23, %122
  %124 = fptosi float %123 to i32
  %125 = load i32, ptr %106, align 4, !tbaa !25
  %126 = load i32, ptr %107, align 4, !tbaa !25
  %127 = icmp sgt i32 %125, %126
  br i1 %127, label %._crit_edge284, label %128

128:                                              ; preds = %112
  %129 = icmp slt i32 %118, 0
  %130 = icmp slt i32 %126, %124
  %or.cond = select i1 %129, i1 %130, i1 false
  br i1 %or.cond, label %._crit_edge284, label %131

131:                                              ; preds = %128
  %132 = add nsw i32 %125, %116
  %133 = icmp sgt i32 %132, %124
  br i1 %133, label %.loopexit, label %134

134:                                              ; preds = %131
  %135 = getelementptr inbounds i32, ptr %13, i64 %113
  %136 = load i32, ptr %135, align 4, !tbaa !25
  %.not248 = icmp eq i32 %136, -1
  br i1 %.not248, label %137, label %141

137:                                              ; preds = %134
  %138 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 553, ptr noundef nonnull @.str.2)
  %139 = load i32, ptr %135, align 4, !tbaa !25
  %.not249 = icmp eq i32 %139, -1
  br i1 %.not249, label %140, label %141

140:                                              ; preds = %137
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 553, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

141:                                              ; preds = %137, %134
  %142 = load i32, ptr %108, align 4, !tbaa !25
  %143 = sub nsw i32 %142, %118
  store i32 %143, ptr %108, align 4, !tbaa !25
  %144 = load i32, ptr %135, align 4, !tbaa !25
  %.not250 = icmp eq i32 %144, -1
  br i1 %.not250, label %145, label %149

145:                                              ; preds = %141
  %146 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 557, ptr noundef nonnull @.str.2)
  %147 = load i32, ptr %135, align 4, !tbaa !25
  %.not251 = icmp eq i32 %147, -1
  br i1 %.not251, label %148, label %149

148:                                              ; preds = %145
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 557, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

149:                                              ; preds = %145, %141
  %150 = phi i32 [ %147, %145 ], [ %144, %141 ]
  %151 = add nsw i32 %.0234281, -1
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %11, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !25
  %155 = sext i32 %150 to i64
  %156 = getelementptr inbounds i32, ptr %11, i64 %155
  store i32 %154, ptr %156, align 4, !tbaa !25
  %157 = load i32, ptr %135, align 4, !tbaa !25
  %158 = sext i32 %154 to i64
  %159 = getelementptr inbounds i32, ptr %13, i64 %158
  store i32 %157, ptr %159, align 4, !tbaa !25
  store i32 -1, ptr %135, align 4, !tbaa !25
  %160 = load i32, ptr %115, align 4, !tbaa !25
  %161 = load i32, ptr %106, align 4, !tbaa !25
  %162 = add nsw i32 %161, %160
  store i32 %162, ptr %106, align 4, !tbaa !25
  %163 = getelementptr inbounds i32, ptr %15, i64 %113
  store i32 %45, ptr %163, align 4, !tbaa !25
  %164 = load i32, ptr %52, align 8, !tbaa !27
  %165 = and i32 %164, 32
  %.not252 = icmp eq i32 %165, 0
  br i1 %.not252, label %174, label %166

166:                                              ; preds = %149
  %167 = load i32, ptr %115, align 4, !tbaa !25
  %168 = load i32, ptr %gep297, align 4, !tbaa !25
  %169 = sub nsw i32 %167, %168
  %170 = load i32, ptr %17, align 4, !tbaa !25
  %171 = load i32, ptr %25, align 4, !tbaa !25
  %172 = load i32, ptr %108, align 4, !tbaa !25
  %173 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.29, i32 noundef %110, i32 noundef %45, i32 noundef %169, i32 noundef %170, i32 noundef %171, i32 noundef %172)
  br label %174

174:                                              ; preds = %166, %149
  %175 = getelementptr inbounds i32, ptr %5, i64 %113
  %176 = load i32, ptr %175, align 4, !tbaa !25
  %177 = getelementptr i8, ptr %175, i64 4
  %178 = load i32, ptr %177, align 4, !tbaa !25
  %179 = icmp slt i32 %176, %178
  br i1 %179, label %.lr.ph279.preheader, label %.loopexit

.lr.ph279.preheader:                              ; preds = %174
  %180 = sext i32 %176 to i64
  br label %.lr.ph279

.lr.ph279:                                        ; preds = %.lr.ph279.preheader, %265
  %indvars.iv302 = phi i64 [ %180, %.lr.ph279.preheader ], [ %indvars.iv.next303, %265 ]
  %.1276 = phi i32 [ %151, %.lr.ph279.preheader ], [ %.2, %265 ]
  %181 = getelementptr inbounds i32, ptr %7, i64 %indvars.iv302
  %182 = load i32, ptr %181, align 4, !tbaa !25
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %15, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !25
  %186 = icmp eq i32 %185, 2
  br i1 %186, label %187, label %191

187:                                              ; preds = %.lr.ph279
  %188 = load i32, ptr %115, align 4, !tbaa !25
  %gep275 = getelementptr %struct.nrinfo_t, ptr %invariant.gep274, i64 %183
  %189 = load i32, ptr %gep275, align 4, !tbaa !25
  %190 = add nsw i32 %189, %188
  store i32 %190, ptr %gep275, align 4, !tbaa !25
  br label %265

191:                                              ; preds = %.lr.ph279
  %192 = icmp eq i32 %185, %46
  br i1 %192, label %193, label %265

193:                                              ; preds = %191
  %194 = getelementptr inbounds i32, ptr %13, i64 %183
  %195 = load i32, ptr %194, align 4, !tbaa !25
  %196 = icmp eq i32 %195, -1
  br i1 %196, label %206, label %197

197:                                              ; preds = %193
  %198 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef 574, ptr noundef nonnull @.str.2)
  %199 = load i32, ptr %194, align 4, !tbaa !25
  %200 = load i32, ptr %184, align 4, !tbaa !25
  %201 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %182, i32 noundef %199, i32 noundef %200)
  %202 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %203 = load i32, ptr %194, align 4, !tbaa !25
  %204 = icmp eq i32 %203, -1
  br i1 %204, label %206, label %205

205:                                              ; preds = %197
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.2, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

206:                                              ; preds = %197, %193
  %207 = sext i32 %.1276 to i64
  %208 = getelementptr inbounds i32, ptr %11, i64 %207
  store i32 %182, ptr %208, align 4, !tbaa !25
  %209 = add nsw i32 %.1276, 1
  store i32 %.1276, ptr %194, align 4, !tbaa !25
  store i32 2, ptr %184, align 4, !tbaa !25
  %210 = getelementptr inbounds i32, ptr %9, i64 %183
  %211 = load i32, ptr %210, align 4, !tbaa !25
  %212 = load i32, ptr %107, align 4, !tbaa !25
  %213 = sub nsw i32 %212, %211
  store i32 %213, ptr %107, align 4, !tbaa !25
  %214 = getelementptr inbounds %struct.nrinfo_t, ptr %19, i64 %183
  %215 = getelementptr inbounds i8, ptr %214, i64 4
  store i32 0, ptr %215, align 4, !tbaa !25
  store i32 0, ptr %214, align 4, !tbaa !25
  %216 = getelementptr inbounds i32, ptr %5, i64 %183
  %217 = load i32, ptr %216, align 4, !tbaa !25
  %218 = getelementptr i8, ptr %216, i64 4
  %219 = load i32, ptr %218, align 4, !tbaa !25
  %220 = icmp slt i32 %217, %219
  br i1 %220, label %.lr.ph272.preheader, label %._crit_edge273

.lr.ph272.preheader:                              ; preds = %206
  %221 = sext i32 %217 to i64
  br label %.lr.ph272

.lr.ph272:                                        ; preds = %.lr.ph272.preheader, %255
  %indvars.iv299 = phi i64 [ %221, %.lr.ph272.preheader ], [ %indvars.iv.next300, %255 ]
  %222 = getelementptr inbounds i32, ptr %7, i64 %indvars.iv299
  %223 = load i32, ptr %222, align 4, !tbaa !25
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds i32, ptr %15, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !25
  %.not253 = icmp eq i32 %226, 2
  br i1 %.not253, label %234, label %227

227:                                              ; preds = %.lr.ph272
  %228 = getelementptr inbounds i32, ptr %9, i64 %224
  %229 = load i32, ptr %228, align 4, !tbaa !25
  %230 = sext i32 %226 to i64
  %231 = getelementptr inbounds i32, ptr %214, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !25
  %233 = add nsw i32 %232, %229
  store i32 %233, ptr %231, align 4, !tbaa !25
  br label %255

234:                                              ; preds = %.lr.ph272
  %235 = getelementptr inbounds i32, ptr %13, i64 %224
  %236 = load i32, ptr %235, align 4, !tbaa !25
  %.not254 = icmp eq i32 %236, -1
  br i1 %.not254, label %237, label %241

237:                                              ; preds = %234
  %238 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.30, i32 noundef 587, ptr noundef nonnull @.str.2)
  %239 = load i32, ptr %235, align 4, !tbaa !25
  %.not255 = icmp eq i32 %239, -1
  br i1 %.not255, label %240, label %241

240:                                              ; preds = %237
  tail call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.2, i32 noundef 587, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeBalance) #7
  unreachable

241:                                              ; preds = %237, %234
  %242 = getelementptr inbounds i32, ptr %9, i64 %224
  %243 = load i32, ptr %242, align 4, !tbaa !25
  %gep269 = getelementptr %struct.nrinfo_t, ptr %invariant.gep296, i64 %224
  %244 = load i32, ptr %gep269, align 4, !tbaa !25
  %245 = load i32, ptr %210, align 4, !tbaa !25
  %246 = sub nsw i32 %244, %245
  store i32 %246, ptr %gep269, align 4, !tbaa !25
  %247 = getelementptr inbounds i32, ptr %51, i64 %224
  %248 = load i32, ptr %247, align 4, !tbaa !25
  %249 = icmp eq i32 %248, -1
  br i1 %249, label %250, label %255

250:                                              ; preds = %241
  %251 = sub i32 %243, %244
  %252 = load i32, ptr %210, align 4, !tbaa !25
  %253 = add nsw i32 %251, %252
  %254 = sitofp i32 %253 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %48, i32 noundef %223, float noundef %254) #6
  br label %255

255:                                              ; preds = %227, %250, %241
  %indvars.iv.next300 = add nsw i64 %indvars.iv299, 1
  %256 = load i32, ptr %218, align 4, !tbaa !25
  %257 = sext i32 %256 to i64
  %258 = icmp slt i64 %indvars.iv.next300, %257
  br i1 %258, label %.lr.ph272, label %._crit_edge273, !llvm.loop !32

._crit_edge273:                                   ; preds = %255, %206
  %259 = load i32, ptr %210, align 4, !tbaa !25
  %260 = getelementptr inbounds i32, ptr %214, i64 %104
  %261 = load i32, ptr %260, align 4, !tbaa !25
  %262 = sub nsw i32 %259, %261
  %263 = sitofp i32 %262 to float
  %264 = tail call i32 @libmetis__rpqInsert(ptr noundef %48, i32 noundef %182, float noundef %263) #6
  br label %265

265:                                              ; preds = %187, %._crit_edge273, %191
  %.2 = phi i32 [ %.1276, %187 ], [ %209, %._crit_edge273 ], [ %.1276, %191 ]
  %indvars.iv.next303 = add nsw i64 %indvars.iv302, 1
  %266 = load i32, ptr %177, align 4, !tbaa !25
  %267 = sext i32 %266 to i64
  %268 = icmp slt i64 %indvars.iv.next303, %267
  br i1 %268, label %.lr.ph279, label %.loopexit, !llvm.loop !33

.loopexit:                                        ; preds = %265, %174, %131
  %.3 = phi i32 [ %.0234281, %131 ], [ %151, %174 ], [ %.2, %265 ]
  %269 = add nuw nsw i32 %.0235280, 1
  %exitcond305.not = icmp eq i32 %269, %3
  br i1 %exitcond305.not, label %._crit_edge284, label %109, !llvm.loop !34

._crit_edge284:                                   ; preds = %.loopexit, %109, %112, %128, %102
  %.0235.lcssa = phi i32 [ 0, %102 ], [ %.0235280, %128 ], [ %.0235280, %112 ], [ %.0235280, %109 ], [ %3, %.loopexit ]
  %.0234.lcssa = phi i32 [ %66, %102 ], [ %.0234281, %128 ], [ %.0234281, %112 ], [ %.0234281, %109 ], [ %.3, %.loopexit ]
  %270 = load i32, ptr %52, align 8, !tbaa !27
  %271 = and i32 %270, 8
  %.not256 = icmp eq i32 %271, 0
  br i1 %.not256, label %278, label %272

272:                                              ; preds = %._crit_edge284
  %273 = getelementptr inbounds i8, ptr %17, i64 8
  %274 = load i32, ptr %273, align 4, !tbaa !25
  %275 = load i32, ptr %17, align 4, !tbaa !25
  %276 = load i32, ptr %25, align 4, !tbaa !25
  %277 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32, i32 noundef %274, i32 noundef %.0235.lcssa, i32 noundef %275, i32 noundef %276, i32 noundef %.0234.lcssa)
  br label %278

278:                                              ; preds = %272, %._crit_edge284
  %279 = getelementptr inbounds i8, ptr %17, i64 8
  %280 = load i32, ptr %279, align 4, !tbaa !25
  %281 = getelementptr inbounds i8, ptr %1, i64 112
  store i32 %280, ptr %281, align 8, !tbaa !29
  store i32 %.0234.lcssa, ptr %65, align 8, !tbaa !28
  tail call void @libmetis__rpqDestroy(ptr noundef %48) #6
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #6
  br label %282

282:                                              ; preds = %32, %2, %278
  ret void
}

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

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

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

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


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