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

; 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 }

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [71 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__ComputePartitionInfoBipartite(ptr noundef %0, i32 noundef %1, ptr noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %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 ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  %23 = load ptr, ptr %4, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.graph_t, ptr %23, i32 0, i32 0
  %25 = load i32, ptr %24, align 8, !tbaa !11
  store i32 %25, ptr %10, align 4, !tbaa !9
  %26 = load ptr, ptr %4, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.graph_t, ptr %26, i32 0, i32 2
  %28 = load i32, ptr %27, align 8, !tbaa !13
  store i32 %28, ptr %11, align 4, !tbaa !9
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.graph_t, ptr %29, i32 0, i32 3
  %31 = load ptr, ptr %30, align 8, !tbaa !14
  store ptr %31, ptr %13, align 8, !tbaa !5
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.graph_t, ptr %32, i32 0, i32 6
  %34 = load ptr, ptr %33, align 8, !tbaa !15
  store ptr %34, ptr %14, align 8, !tbaa !5
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.graph_t, ptr %35, i32 0, i32 4
  %37 = load ptr, ptr %36, align 8, !tbaa !16
  store ptr %37, ptr %15, align 8, !tbaa !5
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.graph_t, ptr %38, i32 0, i32 5
  %40 = load ptr, ptr %39, align 8, !tbaa !17
  store ptr %40, ptr %16, align 8, !tbaa !5
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.graph_t, ptr %41, i32 0, i32 7
  %43 = load ptr, ptr %42, align 8, !tbaa !18
  store ptr %43, ptr %17, align 8, !tbaa !5
  %44 = load ptr, ptr %15, align 8, !tbaa !5
  %45 = icmp eq ptr %44, null
  br i1 %45, label %46, label %52

46:                                               ; preds = %3
  %47 = load i32, ptr %10, align 4, !tbaa !9
  %48 = sext i32 %47 to i64
  %49 = call ptr @libmetis__ismalloc(i64 noundef %48, i32 noundef 1, ptr noundef @.str)
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 4
  store ptr %49, ptr %51, align 8, !tbaa !16
  store ptr %49, ptr %15, align 8, !tbaa !5
  store i32 1, ptr %12, align 4, !tbaa !9
  br label %52

52:                                               ; preds = %46, %3
  %53 = load ptr, ptr %17, align 8, !tbaa !5
  %54 = icmp eq ptr %53, null
  br i1 %54, label %55, label %67

55:                                               ; preds = %52
  %56 = load ptr, ptr %13, align 8, !tbaa !5
  %57 = load i32, ptr %10, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds i32, ptr %56, i64 %58
  %60 = load i32, ptr %59, align 4, !tbaa !9
  %61 = sext i32 %60 to i64
  %62 = call ptr @libmetis__ismalloc(i64 noundef %61, i32 noundef 1, ptr noundef @.str.1)
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.graph_t, ptr %63, i32 0, i32 7
  store ptr %62, ptr %64, align 8, !tbaa !18
  store ptr %62, ptr %17, align 8, !tbaa !5
  %65 = load i32, ptr %12, align 4, !tbaa !9
  %66 = add nsw i32 %65, 2
  store i32 %66, ptr %12, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %55, %52
  %68 = load i32, ptr %5, align 4, !tbaa !9
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = call i32 @libmetis__ComputeCut(ptr noundef %69, ptr noundef %70)
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = call i32 @libmetis__ComputeVolume(ptr noundef %72, ptr noundef %73)
  %75 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %68, i32 noundef %71, i32 noundef %74)
  %76 = load i32, ptr %11, align 4, !tbaa !9
  %77 = load i32, ptr %5, align 4, !tbaa !9
  %78 = mul nsw i32 %76, %77
  %79 = sext i32 %78 to i64
  %80 = call ptr @libmetis__ismalloc(i64 noundef %79, i32 noundef 0, ptr noundef @.str.3)
  store ptr %80, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %81

81:                                               ; preds = %118, %67
  %82 = load i32, ptr %7, align 4, !tbaa !9
  %83 = load i32, ptr %10, align 4, !tbaa !9
  %84 = icmp slt i32 %82, %83
  br i1 %84, label %85, label %121

85:                                               ; preds = %81
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %86

86:                                               ; preds = %114, %85
  %87 = load i32, ptr %8, align 4, !tbaa !9
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = icmp slt i32 %87, %88
  br i1 %89, label %90, label %117

90:                                               ; preds = %86
  %91 = load ptr, ptr %15, align 8, !tbaa !5
  %92 = load i32, ptr %7, align 4, !tbaa !9
  %93 = load i32, ptr %11, align 4, !tbaa !9
  %94 = mul nsw i32 %92, %93
  %95 = load i32, ptr %8, align 4, !tbaa !9
  %96 = add nsw i32 %94, %95
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds i32, ptr %91, i64 %97
  %99 = load i32, ptr %98, align 4, !tbaa !9
  %100 = load ptr, ptr %18, align 8, !tbaa !5
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = load i32, ptr %7, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %101, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !9
  %106 = load i32, ptr %11, align 4, !tbaa !9
  %107 = mul nsw i32 %105, %106
  %108 = load i32, ptr %8, align 4, !tbaa !9
  %109 = add nsw i32 %107, %108
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %100, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = add nsw i32 %112, %99
  store i32 %113, ptr %111, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %90
  %115 = load i32, ptr %8, align 4, !tbaa !9
  %116 = add nsw i32 %115, 1
  store i32 %116, ptr %8, align 4, !tbaa !9
  br label %86, !llvm.loop !19

117:                                              ; preds = %86
  br label %118

118:                                              ; preds = %117
  %119 = load i32, ptr %7, align 4, !tbaa !9
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr %7, align 4, !tbaa !9
  br label %81, !llvm.loop !21

121:                                              ; preds = %81
  %122 = load i32, ptr %11, align 4, !tbaa !9
  %123 = icmp eq i32 %122, 1
  br i1 %123, label %124, label %164

124:                                              ; preds = %121
  %125 = load i32, ptr %5, align 4, !tbaa !9
  %126 = sitofp i32 %125 to double
  %127 = fmul double 1.000000e+00, %126
  %128 = load ptr, ptr %18, align 8, !tbaa !5
  %129 = load i32, ptr %5, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  %132 = call i64 @libmetis__iargmax(i64 noundef %130, ptr noundef %131)
  %133 = getelementptr inbounds i32, ptr %128, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = sitofp i32 %134 to double
  %136 = fmul double %127, %135
  %137 = load i32, ptr %5, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = load ptr, ptr %18, align 8, !tbaa !5
  %140 = call i32 @libmetis__isum(i64 noundef %138, ptr noundef %139, i64 noundef 1)
  %141 = sitofp i32 %140 to double
  %142 = fmul double 1.000000e+00, %141
  %143 = fdiv double %136, %142
  %144 = load i32, ptr %5, align 4, !tbaa !9
  %145 = sitofp i32 %144 to double
  %146 = fmul double 1.000000e+00, %145
  %147 = load ptr, ptr %15, align 8, !tbaa !5
  %148 = load i32, ptr %10, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  %150 = load ptr, ptr %15, align 8, !tbaa !5
  %151 = call i64 @libmetis__iargmax(i64 noundef %149, ptr noundef %150)
  %152 = getelementptr inbounds i32, ptr %147, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !9
  %154 = sitofp i32 %153 to double
  %155 = fmul double %146, %154
  %156 = load i32, ptr %5, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = load ptr, ptr %18, align 8, !tbaa !5
  %159 = call i32 @libmetis__isum(i64 noundef %157, ptr noundef %158, i64 noundef 1)
  %160 = sitofp i32 %159 to double
  %161 = fmul double 1.000000e+00, %160
  %162 = fdiv double %155, %161
  %163 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %143, double noundef %162)
  br label %243

164:                                              ; preds = %121
  %165 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %166

166:                                              ; preds = %238, %164
  %167 = load i32, ptr %8, align 4, !tbaa !9
  %168 = load i32, ptr %11, align 4, !tbaa !9
  %169 = icmp slt i32 %167, %168
  br i1 %169, label %170, label %241

170:                                              ; preds = %166
  %171 = load i32, ptr %5, align 4, !tbaa !9
  %172 = sitofp i32 %171 to double
  %173 = fmul double 1.000000e+00, %172
  %174 = load ptr, ptr %18, align 8, !tbaa !5
  %175 = load i32, ptr %11, align 4, !tbaa !9
  %176 = load i32, ptr %5, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = load ptr, ptr %18, align 8, !tbaa !5
  %179 = load i32, ptr %8, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %11, align 4, !tbaa !9
  %183 = call i32 @libmetis__iargmax_strd(i64 noundef %177, ptr noundef %181, i32 noundef %182)
  %184 = mul nsw i32 %175, %183
  %185 = load i32, ptr %8, align 4, !tbaa !9
  %186 = add nsw i32 %184, %185
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %174, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = sitofp i32 %189 to double
  %191 = fmul double %173, %190
  %192 = load i32, ptr %5, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = load i32, ptr %8, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i32, ptr %194, i64 %196
  %198 = load i32, ptr %11, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = call i32 @libmetis__isum(i64 noundef %193, ptr noundef %197, i64 noundef %199)
  %201 = sitofp i32 %200 to double
  %202 = fmul double 1.000000e+00, %201
  %203 = fdiv double %191, %202
  %204 = load i32, ptr %5, align 4, !tbaa !9
  %205 = sitofp i32 %204 to double
  %206 = fmul double 1.000000e+00, %205
  %207 = load ptr, ptr %15, align 8, !tbaa !5
  %208 = load i32, ptr %11, align 4, !tbaa !9
  %209 = load i32, ptr %10, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = load ptr, ptr %15, align 8, !tbaa !5
  %212 = load i32, ptr %8, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %211, i64 %213
  %215 = load i32, ptr %11, align 4, !tbaa !9
  %216 = call i32 @libmetis__iargmax_strd(i64 noundef %210, ptr noundef %214, i32 noundef %215)
  %217 = mul nsw i32 %208, %216
  %218 = load i32, ptr %8, align 4, !tbaa !9
  %219 = add nsw i32 %217, %218
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i32, ptr %207, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !9
  %223 = sitofp i32 %222 to double
  %224 = fmul double %206, %223
  %225 = load i32, ptr %5, align 4, !tbaa !9
  %226 = sext i32 %225 to i64
  %227 = load ptr, ptr %18, align 8, !tbaa !5
  %228 = load i32, ptr %8, align 4, !tbaa !9
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds i32, ptr %227, i64 %229
  %231 = load i32, ptr %11, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = call i32 @libmetis__isum(i64 noundef %226, ptr noundef %230, i64 noundef %232)
  %234 = sitofp i32 %233 to double
  %235 = fmul double 1.000000e+00, %234
  %236 = fdiv double %224, %235
  %237 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %203, double noundef %236)
  br label %238

238:                                              ; preds = %170
  %239 = load i32, ptr %8, align 4, !tbaa !9
  %240 = add nsw i32 %239, 1
  store i32 %240, ptr %8, align 4, !tbaa !9
  br label %166, !llvm.loop !22

241:                                              ; preds = %166
  %242 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  br label %243

243:                                              ; preds = %241, %124
  %244 = load i32, ptr %5, align 4, !tbaa !9
  %245 = load i32, ptr %5, align 4, !tbaa !9
  %246 = mul nsw i32 %244, %245
  %247 = sext i32 %246 to i64
  %248 = call ptr @libmetis__ismalloc(i64 noundef %247, i32 noundef 0, ptr noundef @.str.8)
  store ptr %248, ptr %20, align 8, !tbaa !5
  %249 = load i32, ptr %5, align 4, !tbaa !9
  %250 = load i32, ptr %5, align 4, !tbaa !9
  %251 = mul nsw i32 %249, %250
  %252 = sext i32 %251 to i64
  %253 = call ptr @libmetis__ismalloc(i64 noundef %252, i32 noundef 0, ptr noundef @.str.9)
  store ptr %253, ptr %21, align 8, !tbaa !5
  %254 = load i32, ptr %5, align 4, !tbaa !9
  %255 = load i32, ptr %5, align 4, !tbaa !9
  %256 = mul nsw i32 %254, %255
  %257 = sext i32 %256 to i64
  %258 = call ptr @libmetis__ismalloc(i64 noundef %257, i32 noundef 0, ptr noundef @.str.9)
  store ptr %258, ptr %22, align 8, !tbaa !5
  %259 = load i32, ptr %5, align 4, !tbaa !9
  %260 = sext i32 %259 to i64
  %261 = load ptr, ptr %18, align 8, !tbaa !5
  %262 = call ptr @libmetis__iset(i64 noundef %260, i32 noundef 0, ptr noundef %261)
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %263

263:                                              ; preds = %437, %243
  %264 = load i32, ptr %7, align 4, !tbaa !9
  %265 = load i32, ptr %10, align 4, !tbaa !9
  %266 = icmp slt i32 %264, %265
  br i1 %266, label %267, label %440

267:                                              ; preds = %263
  %268 = load ptr, ptr %13, align 8, !tbaa !5
  %269 = load i32, ptr %7, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %268, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !9
  store i32 %272, ptr %8, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %402, %267
  %274 = load i32, ptr %8, align 4, !tbaa !9
  %275 = load ptr, ptr %13, align 8, !tbaa !5
  %276 = load i32, ptr %7, align 4, !tbaa !9
  %277 = add nsw i32 %276, 1
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i32, ptr %275, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = icmp slt i32 %274, %280
  br i1 %281, label %282, label %405

282:                                              ; preds = %273
  %283 = load ptr, ptr %6, align 8, !tbaa !5
  %284 = load i32, ptr %7, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds i32, ptr %283, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !9
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = load ptr, ptr %14, align 8, !tbaa !5
  %290 = load i32, ptr %8, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %289, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !9
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i32, ptr %288, i64 %294
  %296 = load i32, ptr %295, align 4, !tbaa !9
  %297 = icmp ne i32 %287, %296
  br i1 %297, label %298, label %401

298:                                              ; preds = %282
  %299 = load ptr, ptr %20, align 8, !tbaa !5
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = load i32, ptr %7, align 4, !tbaa !9
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds i32, ptr %300, i64 %302
  %304 = load i32, ptr %303, align 4, !tbaa !9
  %305 = load i32, ptr %5, align 4, !tbaa !9
  %306 = mul nsw i32 %304, %305
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = load ptr, ptr %14, align 8, !tbaa !5
  %309 = load i32, ptr %8, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %308, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds i32, ptr %307, i64 %313
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = add nsw i32 %306, %315
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i32, ptr %299, i64 %317
  store i32 1, ptr %318, align 4, !tbaa !9
  %319 = load ptr, ptr %17, align 8, !tbaa !5
  %320 = load i32, ptr %8, 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 = load ptr, ptr %22, align 8, !tbaa !5
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = load i32, ptr %7, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %325, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !9
  %330 = load i32, ptr %5, align 4, !tbaa !9
  %331 = mul nsw i32 %329, %330
  %332 = load ptr, ptr %6, align 8, !tbaa !5
  %333 = load ptr, ptr %14, align 8, !tbaa !5
  %334 = load i32, ptr %8, align 4, !tbaa !9
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds i32, ptr %333, i64 %335
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %332, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = add nsw i32 %331, %340
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %324, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !9
  %345 = add nsw i32 %344, %323
  store i32 %345, ptr %343, align 4, !tbaa !9
  %346 = load ptr, ptr %18, align 8, !tbaa !5
  %347 = load ptr, ptr %6, align 8, !tbaa !5
  %348 = load ptr, ptr %14, align 8, !tbaa !5
  %349 = load i32, ptr %8, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds i32, ptr %348, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds i32, ptr %347, i64 %353
  %355 = load i32, ptr %354, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %346, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %359 = icmp eq i32 %358, 0
  br i1 %359, label %360, label %400

360:                                              ; preds = %298
  %361 = load ptr, ptr %16, align 8, !tbaa !5
  %362 = load i32, ptr %7, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i32, ptr %361, i64 %363
  %365 = load i32, ptr %364, align 4, !tbaa !9
  %366 = load ptr, ptr %21, align 8, !tbaa !5
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = load i32, ptr %7, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds i32, ptr %367, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !9
  %372 = load i32, ptr %5, align 4, !tbaa !9
  %373 = mul nsw i32 %371, %372
  %374 = load ptr, ptr %6, align 8, !tbaa !5
  %375 = load ptr, ptr %14, align 8, !tbaa !5
  %376 = load i32, ptr %8, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds i32, ptr %375, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !9
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds i32, ptr %374, i64 %380
  %382 = load i32, ptr %381, align 4, !tbaa !9
  %383 = add nsw i32 %373, %382
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %366, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  %387 = add nsw i32 %386, %365
  store i32 %387, ptr %385, align 4, !tbaa !9
  %388 = load ptr, ptr %18, align 8, !tbaa !5
  %389 = load ptr, ptr %6, align 8, !tbaa !5
  %390 = load ptr, ptr %14, align 8, !tbaa !5
  %391 = load i32, ptr %8, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %390, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds i32, ptr %389, i64 %395
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %388, i64 %398
  store i32 1, ptr %399, align 4, !tbaa !9
  br label %400

400:                                              ; preds = %360, %298
  br label %401

401:                                              ; preds = %400, %282
  br label %402

402:                                              ; preds = %401
  %403 = load i32, ptr %8, align 4, !tbaa !9
  %404 = add nsw i32 %403, 1
  store i32 %404, ptr %8, align 4, !tbaa !9
  br label %273, !llvm.loop !23

405:                                              ; preds = %273
  %406 = load ptr, ptr %13, align 8, !tbaa !5
  %407 = load i32, ptr %7, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i32, ptr %406, i64 %408
  %410 = load i32, ptr %409, align 4, !tbaa !9
  store i32 %410, ptr %8, align 4, !tbaa !9
  br label %411

411:                                              ; preds = %433, %405
  %412 = load i32, ptr %8, align 4, !tbaa !9
  %413 = load ptr, ptr %13, align 8, !tbaa !5
  %414 = load i32, ptr %7, align 4, !tbaa !9
  %415 = add nsw i32 %414, 1
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds i32, ptr %413, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !9
  %419 = icmp slt i32 %412, %418
  br i1 %419, label %420, label %436

420:                                              ; preds = %411
  %421 = load ptr, ptr %18, align 8, !tbaa !5
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = load ptr, ptr %14, align 8, !tbaa !5
  %424 = load i32, ptr %8, align 4, !tbaa !9
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds i32, ptr %423, i64 %425
  %427 = load i32, ptr %426, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds i32, ptr %422, i64 %428
  %430 = load i32, ptr %429, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i32, ptr %421, i64 %431
  store i32 0, ptr %432, align 4, !tbaa !9
  br label %433

433:                                              ; preds = %420
  %434 = load i32, ptr %8, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %8, align 4, !tbaa !9
  br label %411, !llvm.loop !24

436:                                              ; preds = %411
  br label %437

437:                                              ; preds = %436
  %438 = load i32, ptr %7, align 4, !tbaa !9
  %439 = add nsw i32 %438, 1
  store i32 %439, ptr %7, align 4, !tbaa !9
  br label %263, !llvm.loop !25

440:                                              ; preds = %263
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %441

441:                                              ; preds = %459, %440
  %442 = load i32, ptr %7, align 4, !tbaa !9
  %443 = load i32, ptr %5, align 4, !tbaa !9
  %444 = icmp slt i32 %442, %443
  br i1 %444, label %445, label %462

445:                                              ; preds = %441
  %446 = load i32, ptr %5, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = load ptr, ptr %20, align 8, !tbaa !5
  %449 = load i32, ptr %7, align 4, !tbaa !9
  %450 = load i32, ptr %5, align 4, !tbaa !9
  %451 = mul nsw i32 %449, %450
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i32, ptr %448, i64 %452
  %454 = call i32 @libmetis__isum(i64 noundef %447, ptr noundef %453, i64 noundef 1)
  %455 = load ptr, ptr %18, align 8, !tbaa !5
  %456 = load i32, ptr %7, align 4, !tbaa !9
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds i32, ptr %455, i64 %457
  store i32 %454, ptr %458, align 4, !tbaa !9
  br label %459

459:                                              ; preds = %445
  %460 = load i32, ptr %7, align 4, !tbaa !9
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %7, align 4, !tbaa !9
  br label %441, !llvm.loop !26

462:                                              ; preds = %441
  %463 = load ptr, ptr %18, align 8, !tbaa !5
  %464 = load i32, ptr %5, align 4, !tbaa !9
  %465 = sext i32 %464 to i64
  %466 = load ptr, ptr %18, align 8, !tbaa !5
  %467 = call i64 @libmetis__iargmin(i64 noundef %465, ptr noundef %466)
  %468 = getelementptr inbounds i32, ptr %463, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = load ptr, ptr %18, align 8, !tbaa !5
  %471 = load i32, ptr %5, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = load ptr, ptr %18, align 8, !tbaa !5
  %474 = call i64 @libmetis__iargmax(i64 noundef %472, ptr noundef %473)
  %475 = getelementptr inbounds i32, ptr %470, i64 %474
  %476 = load i32, ptr %475, align 4, !tbaa !9
  %477 = load i32, ptr %5, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = load ptr, ptr %18, align 8, !tbaa !5
  %480 = call i32 @libmetis__isum(i64 noundef %478, ptr noundef %479, i64 noundef 1)
  %481 = load i32, ptr %5, align 4, !tbaa !9
  %482 = sdiv i32 %480, %481
  %483 = load i32, ptr %5, align 4, !tbaa !9
  %484 = sitofp i32 %483 to double
  %485 = fmul double 1.000000e+00, %484
  %486 = load ptr, ptr %18, align 8, !tbaa !5
  %487 = load i32, ptr %5, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = load ptr, ptr %18, align 8, !tbaa !5
  %490 = call i64 @libmetis__iargmax(i64 noundef %488, ptr noundef %489)
  %491 = getelementptr inbounds i32, ptr %486, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !9
  %493 = sitofp i32 %492 to double
  %494 = fmul double %485, %493
  %495 = load i32, ptr %5, align 4, !tbaa !9
  %496 = sext i32 %495 to i64
  %497 = load ptr, ptr %18, align 8, !tbaa !5
  %498 = call i32 @libmetis__isum(i64 noundef %496, ptr noundef %497, i64 noundef 1)
  %499 = sitofp i32 %498 to double
  %500 = fmul double 1.000000e+00, %499
  %501 = fdiv double %494, %500
  %502 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef %469, i32 noundef %476, i32 noundef %482, double noundef %501)
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %503

503:                                              ; preds = %521, %462
  %504 = load i32, ptr %7, align 4, !tbaa !9
  %505 = load i32, ptr %5, align 4, !tbaa !9
  %506 = icmp slt i32 %504, %505
  br i1 %506, label %507, label %524

507:                                              ; preds = %503
  %508 = load i32, ptr %5, align 4, !tbaa !9
  %509 = sext i32 %508 to i64
  %510 = load ptr, ptr %22, align 8, !tbaa !5
  %511 = load i32, ptr %7, align 4, !tbaa !9
  %512 = load i32, ptr %5, align 4, !tbaa !9
  %513 = mul nsw i32 %511, %512
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds i32, ptr %510, i64 %514
  %516 = call i32 @libmetis__isum(i64 noundef %509, ptr noundef %515, i64 noundef 1)
  %517 = load ptr, ptr %18, align 8, !tbaa !5
  %518 = load i32, ptr %7, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i32, ptr %517, i64 %519
  store i32 %516, ptr %520, align 4, !tbaa !9
  br label %521

521:                                              ; preds = %507
  %522 = load i32, ptr %7, align 4, !tbaa !9
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %7, align 4, !tbaa !9
  br label %503, !llvm.loop !27

524:                                              ; preds = %503
  %525 = load ptr, ptr %18, align 8, !tbaa !5
  %526 = load i32, ptr %5, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = load ptr, ptr %18, align 8, !tbaa !5
  %529 = call i64 @libmetis__iargmin(i64 noundef %527, ptr noundef %528)
  %530 = getelementptr inbounds i32, ptr %525, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !9
  %532 = load ptr, ptr %18, align 8, !tbaa !5
  %533 = load i32, ptr %5, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = load ptr, ptr %18, align 8, !tbaa !5
  %536 = call i64 @libmetis__iargmax(i64 noundef %534, ptr noundef %535)
  %537 = getelementptr inbounds i32, ptr %532, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !9
  %539 = load i32, ptr %5, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = load ptr, ptr %18, align 8, !tbaa !5
  %542 = call i32 @libmetis__isum(i64 noundef %540, ptr noundef %541, i64 noundef 1)
  %543 = load i32, ptr %5, align 4, !tbaa !9
  %544 = sdiv i32 %542, %543
  %545 = load i32, ptr %5, align 4, !tbaa !9
  %546 = sitofp i32 %545 to double
  %547 = fmul double 1.000000e+00, %546
  %548 = load ptr, ptr %18, align 8, !tbaa !5
  %549 = load i32, ptr %5, align 4, !tbaa !9
  %550 = sext i32 %549 to i64
  %551 = load ptr, ptr %18, align 8, !tbaa !5
  %552 = call i64 @libmetis__iargmax(i64 noundef %550, ptr noundef %551)
  %553 = getelementptr inbounds i32, ptr %548, i64 %552
  %554 = load i32, ptr %553, align 4, !tbaa !9
  %555 = sitofp i32 %554 to double
  %556 = fmul double %547, %555
  %557 = load i32, ptr %5, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = load ptr, ptr %18, align 8, !tbaa !5
  %560 = call i32 @libmetis__isum(i64 noundef %558, ptr noundef %559, i64 noundef 1)
  %561 = sitofp i32 %560 to double
  %562 = fmul double 1.000000e+00, %561
  %563 = fdiv double %556, %562
  %564 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %531, i32 noundef %538, i32 noundef %544, double noundef %563)
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %565

565:                                              ; preds = %583, %524
  %566 = load i32, ptr %7, align 4, !tbaa !9
  %567 = load i32, ptr %5, align 4, !tbaa !9
  %568 = icmp slt i32 %566, %567
  br i1 %568, label %569, label %586

569:                                              ; preds = %565
  %570 = load i32, ptr %5, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = load ptr, ptr %21, align 8, !tbaa !5
  %573 = load i32, ptr %7, align 4, !tbaa !9
  %574 = load i32, ptr %5, align 4, !tbaa !9
  %575 = mul nsw i32 %573, %574
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds i32, ptr %572, i64 %576
  %578 = call i32 @libmetis__isum(i64 noundef %571, ptr noundef %577, i64 noundef 1)
  %579 = load ptr, ptr %18, align 8, !tbaa !5
  %580 = load i32, ptr %7, align 4, !tbaa !9
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds i32, ptr %579, i64 %581
  store i32 %578, ptr %582, align 4, !tbaa !9
  br label %583

583:                                              ; preds = %569
  %584 = load i32, ptr %7, align 4, !tbaa !9
  %585 = add nsw i32 %584, 1
  store i32 %585, ptr %7, align 4, !tbaa !9
  br label %565, !llvm.loop !28

586:                                              ; preds = %565
  %587 = load ptr, ptr %18, align 8, !tbaa !5
  %588 = load i32, ptr %5, align 4, !tbaa !9
  %589 = sext i32 %588 to i64
  %590 = load ptr, ptr %18, align 8, !tbaa !5
  %591 = call i64 @libmetis__iargmin(i64 noundef %589, ptr noundef %590)
  %592 = getelementptr inbounds i32, ptr %587, i64 %591
  %593 = load i32, ptr %592, align 4, !tbaa !9
  %594 = load ptr, ptr %18, align 8, !tbaa !5
  %595 = load i32, ptr %5, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = load ptr, ptr %18, align 8, !tbaa !5
  %598 = call i64 @libmetis__iargmax(i64 noundef %596, ptr noundef %597)
  %599 = getelementptr inbounds i32, ptr %594, i64 %598
  %600 = load i32, ptr %599, align 4, !tbaa !9
  %601 = load i32, ptr %5, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = load ptr, ptr %18, align 8, !tbaa !5
  %604 = call i32 @libmetis__isum(i64 noundef %602, ptr noundef %603, i64 noundef 1)
  %605 = load i32, ptr %5, align 4, !tbaa !9
  %606 = sdiv i32 %604, %605
  %607 = load i32, ptr %5, align 4, !tbaa !9
  %608 = sitofp i32 %607 to double
  %609 = fmul double 1.000000e+00, %608
  %610 = load ptr, ptr %18, align 8, !tbaa !5
  %611 = load i32, ptr %5, align 4, !tbaa !9
  %612 = sext i32 %611 to i64
  %613 = load ptr, ptr %18, align 8, !tbaa !5
  %614 = call i64 @libmetis__iargmax(i64 noundef %612, ptr noundef %613)
  %615 = getelementptr inbounds i32, ptr %610, i64 %614
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = sitofp i32 %616 to double
  %618 = fmul double %609, %617
  %619 = load i32, ptr %5, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = load ptr, ptr %18, align 8, !tbaa !5
  %622 = call i32 @libmetis__isum(i64 noundef %620, ptr noundef %621, i64 noundef 1)
  %623 = sitofp i32 %622 to double
  %624 = fmul double 1.000000e+00, %623
  %625 = fdiv double %618, %624
  %626 = load i32, ptr %5, align 4, !tbaa !9
  %627 = sext i32 %626 to i64
  %628 = load ptr, ptr %18, align 8, !tbaa !5
  %629 = call i32 @libmetis__isum(i64 noundef %627, ptr noundef %628, i64 noundef 1)
  %630 = sitofp i32 %629 to double
  %631 = fmul double 1.000000e+00, %630
  %632 = load i32, ptr %10, align 4, !tbaa !9
  %633 = sitofp i32 %632 to double
  %634 = fmul double 1.000000e+00, %633
  %635 = fdiv double %631, %634
  %636 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef %593, i32 noundef %600, i32 noundef %606, double noundef %625, double noundef %635)
  %637 = load i32, ptr %12, align 4, !tbaa !9
  %638 = icmp eq i32 %637, 1
  br i1 %638, label %642, label %639

639:                                              ; preds = %586
  %640 = load i32, ptr %12, align 4, !tbaa !9
  %641 = icmp eq i32 %640, 3
  br i1 %641, label %642, label %645

642:                                              ; preds = %639, %586
  call void (ptr, ...) @gk_free(ptr noundef %15, ptr noundef null)
  %643 = load ptr, ptr %4, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.graph_t, ptr %643, i32 0, i32 4
  store ptr null, ptr %644, align 8, !tbaa !16
  br label %645

645:                                              ; preds = %642, %639
  %646 = load i32, ptr %12, align 4, !tbaa !9
  %647 = icmp eq i32 %646, 2
  br i1 %647, label %651, label %648

648:                                              ; preds = %645
  %649 = load i32, ptr %12, align 4, !tbaa !9
  %650 = icmp eq i32 %649, 3
  br i1 %650, label %651, label %654

651:                                              ; preds = %648, %645
  call void (ptr, ...) @gk_free(ptr noundef %17, ptr noundef null)
  %652 = load ptr, ptr %4, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.graph_t, ptr %652, i32 0, i32 7
  store ptr null, ptr %653, align 8, !tbaa !18
  br label %654

654:                                              ; preds = %651, %648
  call void (ptr, ...) @gk_free(ptr noundef %18, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  ret void
}

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

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

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

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

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

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

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

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

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

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

declare void @gk_free(ptr noundef, ...) #2

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

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 = { nounwind }

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

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


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

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [71 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__ComputePartitionInfoBipartite(ptr noundef %0, i32 noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  %10 = load i32, ptr %0, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 8
  %12 = load i32, ptr %11, align 8, !tbaa !11
  %13 = getelementptr inbounds i8, ptr %0, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %0, i64 40
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %0, i64 24
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  store ptr %18, ptr %4, align 8, !tbaa !15
  %19 = getelementptr inbounds i8, ptr %0, i64 32
  %20 = load ptr, ptr %19, align 8, !tbaa !16
  %21 = getelementptr inbounds i8, ptr %0, i64 48
  %22 = load ptr, ptr %21, align 8, !tbaa !17
  store ptr %22, ptr %5, align 8, !tbaa !15
  %23 = icmp eq ptr %18, null
  br i1 %23, label %24, label %27

24:                                               ; preds = %3
  %25 = sext i32 %10 to i64
  %26 = tail call ptr @libmetis__ismalloc(i64 noundef %25, i32 noundef 1, ptr noundef nonnull @.str) #4
  store ptr %26, ptr %17, align 8, !tbaa !14
  store ptr %26, ptr %4, align 8, !tbaa !15
  br label %27

27:                                               ; preds = %24, %3
  %28 = phi ptr [ %26, %24 ], [ %18, %3 ]
  %.0174 = phi i32 [ 1, %24 ], [ 0, %3 ]
  %29 = icmp eq ptr %22, null
  br i1 %29, label %30, label %37

30:                                               ; preds = %27
  %31 = sext i32 %10 to i64
  %32 = getelementptr inbounds i32, ptr %14, i64 %31
  %33 = load i32, ptr %32, align 4, !tbaa !18
  %34 = sext i32 %33 to i64
  %35 = tail call ptr @libmetis__ismalloc(i64 noundef %34, i32 noundef 1, ptr noundef nonnull @.str.1) #4
  store ptr %35, ptr %21, align 8, !tbaa !17
  store ptr %35, ptr %5, align 8, !tbaa !15
  %36 = or disjoint i32 %.0174, 2
  br label %37

37:                                               ; preds = %30, %27
  %38 = phi ptr [ %35, %30 ], [ %22, %27 ]
  %.1175 = phi i32 [ %36, %30 ], [ %.0174, %27 ]
  %39 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %0, ptr noundef %2) #4
  %40 = tail call i32 @libmetis__ComputeVolume(ptr noundef nonnull %0, ptr noundef %2) #4
  %41 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %1, i32 noundef %39, i32 noundef %40)
  %42 = mul nsw i32 %12, %1
  %43 = sext i32 %42 to i64
  %44 = tail call ptr @libmetis__ismalloc(i64 noundef %43, i32 noundef 0, ptr noundef nonnull @.str.3) #4
  store ptr %44, ptr %6, align 8, !tbaa !15
  %45 = icmp sgt i32 %10, 0
  br i1 %45, label %.preheader183.lr.ph, label %._crit_edge187

.preheader183.lr.ph:                              ; preds = %37
  %46 = icmp sgt i32 %12, 0
  br i1 %46, label %.preheader183.us.preheader, label %.thread

.thread:                                          ; preds = %.preheader183.lr.ph
  %47 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %.._crit_edge_crit_edge

.preheader183.us.preheader:                       ; preds = %.preheader183.lr.ph
  %48 = zext nneg i32 %12 to i64
  %wide.trip.count217 = zext nneg i32 %10 to i64
  %xtraiter = and i64 %48, 1
  %49 = icmp eq i32 %12, 1
  %unroll_iter = and i64 %48, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader183.us

.preheader183.us:                                 ; preds = %.preheader183.us.preheader, %._crit_edge.us
  %indvars.iv214 = phi i64 [ 0, %.preheader183.us.preheader ], [ %indvars.iv.next215, %._crit_edge.us ]
  %50 = mul nuw nsw i64 %indvars.iv214, %48
  %51 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv214
  br i1 %49, label %._crit_edge.us.unr-lcssa, label %.preheader183.us.new

.preheader183.us.new:                             ; preds = %.preheader183.us, %.preheader183.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader183.us.new ], [ 0, %.preheader183.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader183.us.new ], [ 0, %.preheader183.us ]
  %52 = add nuw nsw i64 %indvars.iv, %50
  %53 = getelementptr inbounds i32, ptr %28, i64 %52
  %54 = load i32, ptr %53, align 4, !tbaa !18
  %55 = load i32, ptr %51, align 4, !tbaa !18
  %56 = mul nsw i32 %55, %12
  %57 = trunc nuw nsw i64 %indvars.iv to i32
  %58 = add nsw i32 %56, %57
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %44, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !18
  %62 = add nsw i32 %61, %54
  store i32 %62, ptr %60, align 4, !tbaa !18
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %63 = add nuw nsw i64 %indvars.iv.next, %50
  %64 = getelementptr inbounds i32, ptr %28, i64 %63
  %65 = load i32, ptr %64, align 4, !tbaa !18
  %66 = load i32, ptr %51, align 4, !tbaa !18
  %67 = mul nsw i32 %66, %12
  %68 = trunc nuw nsw i64 %indvars.iv.next to i32
  %69 = add nsw i32 %67, %68
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds i32, ptr %44, i64 %70
  %72 = load i32, ptr %71, align 4, !tbaa !18
  %73 = add nsw i32 %72, %65
  store i32 %73, ptr %71, align 4, !tbaa !18
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 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_edge.us.unr-lcssa, label %.preheader183.us.new, !llvm.loop !19

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader183.us.new, %.preheader183.us
  %indvars.iv.unr = phi i64 [ 0, %.preheader183.us ], [ %indvars.iv.next.1, %.preheader183.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %74 = add nuw nsw i64 %indvars.iv.unr, %50
  %75 = getelementptr inbounds i32, ptr %28, i64 %74
  %76 = load i32, ptr %75, align 4, !tbaa !18
  %77 = load i32, ptr %51, align 4, !tbaa !18
  %78 = mul nsw i32 %77, %12
  %79 = trunc nuw nsw i64 %indvars.iv.unr to i32
  %80 = add nsw i32 %78, %79
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds i32, ptr %44, i64 %81
  %83 = load i32, ptr %82, align 4, !tbaa !18
  %84 = add nsw i32 %83, %76
  store i32 %84, ptr %82, align 4, !tbaa !18
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %indvars.iv.next215 = add nuw nsw i64 %indvars.iv214, 1
  %exitcond218.not = icmp eq i64 %indvars.iv.next215, %wide.trip.count217
  br i1 %exitcond218.not, label %._crit_edge187, label %.preheader183.us, !llvm.loop !21

._crit_edge187:                                   ; preds = %._crit_edge.us, %37
  %85 = icmp eq i32 %12, 1
  br i1 %85, label %86, label %107

86:                                               ; preds = %._crit_edge187
  %87 = sitofp i32 %1 to double
  %88 = sext i32 %1 to i64
  %89 = tail call i64 @libmetis__iargmax(i64 noundef %88, ptr noundef %44) #4
  %90 = getelementptr inbounds i32, ptr %44, i64 %89
  %91 = load i32, ptr %90, align 4, !tbaa !18
  %92 = sitofp i32 %91 to double
  %93 = fmul double %87, %92
  %94 = tail call i32 @libmetis__isum(i64 noundef %88, ptr noundef %44, i64 noundef 1) #4
  %95 = sitofp i32 %94 to double
  %96 = fdiv double %93, %95
  %97 = sext i32 %10 to i64
  %98 = tail call i64 @libmetis__iargmax(i64 noundef %97, ptr noundef %28) #4
  %99 = getelementptr inbounds i32, ptr %28, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !18
  %101 = sitofp i32 %100 to double
  %102 = fmul double %87, %101
  %103 = tail call i32 @libmetis__isum(i64 noundef %88, ptr noundef %44, i64 noundef 1) #4
  %104 = sitofp i32 %103 to double
  %105 = fdiv double %102, %104
  %106 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %96, double noundef %105)
  br label %142

107:                                              ; preds = %._crit_edge187
  %108 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %109 = icmp sgt i32 %12, 0
  br i1 %109, label %.lr.ph, label %.._crit_edge_crit_edge

.._crit_edge_crit_edge:                           ; preds = %.thread, %107
  %.pre252 = sext i32 %1 to i64
  br label %._crit_edge

.lr.ph:                                           ; preds = %107
  %110 = sitofp i32 %1 to double
  %111 = sext i32 %1 to i64
  %112 = zext nneg i32 %12 to i64
  %113 = sext i32 %10 to i64
  br label %114

114:                                              ; preds = %.lr.ph, %114
  %indvars.iv219 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next220, %114 ]
  %115 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv219
  %116 = tail call i32 @libmetis__iargmax_strd(i64 noundef %111, ptr noundef %115, i32 noundef %12) #4
  %117 = mul nsw i32 %116, %12
  %118 = trunc nuw nsw i64 %indvars.iv219 to i32
  %119 = add nsw i32 %117, %118
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds i32, ptr %44, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !18
  %123 = sitofp i32 %122 to double
  %124 = fmul double %110, %123
  %125 = tail call i32 @libmetis__isum(i64 noundef %111, ptr noundef %115, i64 noundef %112) #4
  %126 = sitofp i32 %125 to double
  %127 = fdiv double %124, %126
  %128 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv219
  %129 = tail call i32 @libmetis__iargmax_strd(i64 noundef %113, ptr noundef %128, i32 noundef %12) #4
  %130 = mul nsw i32 %129, %12
  %131 = add nsw i32 %130, %118
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %28, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !18
  %135 = sitofp i32 %134 to double
  %136 = fmul double %110, %135
  %137 = tail call i32 @libmetis__isum(i64 noundef %111, ptr noundef %115, i64 noundef %112) #4
  %138 = sitofp i32 %137 to double
  %139 = fdiv double %136, %138
  %140 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %127, double noundef %139)
  %indvars.iv.next220 = add nuw nsw i64 %indvars.iv219, 1
  %exitcond223.not = icmp eq i64 %indvars.iv.next220, %112
  br i1 %exitcond223.not, label %._crit_edge, label %114, !llvm.loop !22

._crit_edge:                                      ; preds = %114, %.._crit_edge_crit_edge
  %.pre251.pre-phi = phi i64 [ %.pre252, %.._crit_edge_crit_edge ], [ %111, %114 ]
  %141 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br label %142

142:                                              ; preds = %._crit_edge, %86
  %.pre-phi = phi i64 [ %.pre251.pre-phi, %._crit_edge ], [ %88, %86 ]
  %143 = mul nsw i32 %1, %1
  %144 = zext nneg i32 %143 to i64
  %145 = tail call ptr @libmetis__ismalloc(i64 noundef %144, i32 noundef 0, ptr noundef nonnull @.str.8) #4
  store ptr %145, ptr %7, align 8, !tbaa !15
  %146 = tail call ptr @libmetis__ismalloc(i64 noundef %144, i32 noundef 0, ptr noundef nonnull @.str.9) #4
  store ptr %146, ptr %8, align 8, !tbaa !15
  %147 = tail call ptr @libmetis__ismalloc(i64 noundef %144, i32 noundef 0, ptr noundef nonnull @.str.9) #4
  store ptr %147, ptr %9, align 8, !tbaa !15
  %148 = tail call ptr @libmetis__iset(i64 noundef %.pre-phi, i32 noundef 0, ptr noundef %44) #4
  br i1 %45, label %.lr.ph200, label %.preheader

.lr.ph200:                                        ; preds = %142
  %wide.trip.count233 = zext nneg i32 %10 to i64
  %.pre = load i32, ptr %14, align 4, !tbaa !18
  br label %152

.loopexit:                                        ; preds = %.lr.ph197, %._crit_edge193
  %149 = phi i32 [ %213, %._crit_edge193 ], [ %224, %.lr.ph197 ]
  %exitcond234.not = icmp eq i64 %indvars.iv.next231, %wide.trip.count233
  br i1 %exitcond234.not, label %.preheader, label %152, !llvm.loop !23

.preheader:                                       ; preds = %.loopexit, %142
  %150 = icmp sgt i32 %1, 0
  br i1 %150, label %.lr.ph202, label %._crit_edge203

.lr.ph202:                                        ; preds = %.preheader
  %151 = zext nneg i32 %1 to i64
  br label %227

152:                                              ; preds = %.lr.ph200, %.loopexit
  %153 = phi i32 [ %.pre, %.lr.ph200 ], [ %149, %.loopexit ]
  %indvars.iv230 = phi i64 [ 0, %.lr.ph200 ], [ %indvars.iv.next231, %.loopexit ]
  %154 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv230
  %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1
  %155 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv.next231
  %156 = load i32, ptr %155, align 4, !tbaa !18
  %157 = icmp slt i32 %153, %156
  br i1 %157, label %.lr.ph192, label %._crit_edge193

.lr.ph192:                                        ; preds = %152
  %158 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv230
  %159 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv230
  %160 = sext i32 %153 to i64
  br label %161

161:                                              ; preds = %.lr.ph192, %209
  %indvars.iv224 = phi i64 [ %160, %.lr.ph192 ], [ %indvars.iv.next225, %209 ]
  %162 = load i32, ptr %158, align 4, !tbaa !18
  %163 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv224
  %164 = load i32, ptr %163, align 4, !tbaa !18
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i32, ptr %2, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !18
  %.not = icmp eq i32 %162, %167
  br i1 %.not, label %209, label %168

168:                                              ; preds = %161
  %169 = mul nsw i32 %162, %1
  %170 = add nsw i32 %167, %169
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds i32, ptr %145, i64 %171
  store i32 1, ptr %172, align 4, !tbaa !18
  %173 = getelementptr inbounds i32, ptr %38, i64 %indvars.iv224
  %174 = load i32, ptr %173, align 4, !tbaa !18
  %175 = load i32, ptr %158, align 4, !tbaa !18
  %176 = mul nsw i32 %175, %1
  %177 = load i32, ptr %163, align 4, !tbaa !18
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i32, ptr %2, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !18
  %181 = add nsw i32 %180, %176
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds i32, ptr %147, i64 %182
  %184 = load i32, ptr %183, align 4, !tbaa !18
  %185 = add nsw i32 %184, %174
  store i32 %185, ptr %183, align 4, !tbaa !18
  %186 = load i32, ptr %163, align 4, !tbaa !18
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %2, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !18
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i32, ptr %44, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !18
  %193 = icmp eq i32 %192, 0
  br i1 %193, label %194, label %209

194:                                              ; preds = %168
  %195 = load i32, ptr %159, align 4, !tbaa !18
  %196 = load i32, ptr %158, align 4, !tbaa !18
  %197 = mul nsw i32 %196, %1
  %198 = add nsw i32 %197, %189
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i32, ptr %146, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !18
  %202 = add nsw i32 %201, %195
  store i32 %202, ptr %200, align 4, !tbaa !18
  %203 = load i32, ptr %163, align 4, !tbaa !18
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds i32, ptr %2, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !18
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds i32, ptr %44, i64 %207
  store i32 1, ptr %208, align 4, !tbaa !18
  br label %209

209:                                              ; preds = %161, %194, %168
  %indvars.iv.next225 = add nsw i64 %indvars.iv224, 1
  %210 = load i32, ptr %155, align 4, !tbaa !18
  %211 = sext i32 %210 to i64
  %212 = icmp slt i64 %indvars.iv.next225, %211
  br i1 %212, label %161, label %._crit_edge193.loopexit, !llvm.loop !24

._crit_edge193.loopexit:                          ; preds = %209
  %.pre250 = load i32, ptr %154, align 4, !tbaa !18
  br label %._crit_edge193

._crit_edge193:                                   ; preds = %._crit_edge193.loopexit, %152
  %213 = phi i32 [ %210, %._crit_edge193.loopexit ], [ %156, %152 ]
  %214 = phi i32 [ %.pre250, %._crit_edge193.loopexit ], [ %153, %152 ]
  %215 = icmp slt i32 %214, %213
  br i1 %215, label %.lr.ph197.preheader, label %.loopexit

.lr.ph197.preheader:                              ; preds = %._crit_edge193
  %216 = sext i32 %214 to i64
  br label %.lr.ph197

.lr.ph197:                                        ; preds = %.lr.ph197.preheader, %.lr.ph197
  %indvars.iv227 = phi i64 [ %216, %.lr.ph197.preheader ], [ %indvars.iv.next228, %.lr.ph197 ]
  %217 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv227
  %218 = load i32, ptr %217, align 4, !tbaa !18
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %2, i64 %219
  %221 = load i32, ptr %220, align 4, !tbaa !18
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds i32, ptr %44, i64 %222
  store i32 0, ptr %223, align 4, !tbaa !18
  %indvars.iv.next228 = add nsw i64 %indvars.iv227, 1
  %224 = load i32, ptr %155, align 4, !tbaa !18
  %225 = sext i32 %224 to i64
  %226 = icmp slt i64 %indvars.iv.next228, %225
  br i1 %226, label %.lr.ph197, label %.loopexit, !llvm.loop !25

227:                                              ; preds = %.lr.ph202, %227
  %indvars.iv235 = phi i64 [ 0, %.lr.ph202 ], [ %indvars.iv.next236, %227 ]
  %228 = mul nuw nsw i64 %indvars.iv235, %151
  %229 = getelementptr inbounds i32, ptr %145, i64 %228
  %230 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef %229, i64 noundef 1) #4
  %231 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv235
  store i32 %230, ptr %231, align 4, !tbaa !18
  %indvars.iv.next236 = add nuw nsw i64 %indvars.iv235, 1
  %exitcond239.not = icmp eq i64 %indvars.iv.next236, %151
  br i1 %exitcond239.not, label %._crit_edge203, label %227, !llvm.loop !26

._crit_edge203:                                   ; preds = %227, %.preheader
  %232 = tail call i64 @libmetis__iargmin(i64 noundef %.pre-phi, ptr noundef %44) #4
  %233 = getelementptr inbounds i32, ptr %44, i64 %232
  %234 = load i32, ptr %233, align 4, !tbaa !18
  %235 = tail call i64 @libmetis__iargmax(i64 noundef %.pre-phi, ptr noundef %44) #4
  %236 = getelementptr inbounds i32, ptr %44, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !18
  %238 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef %44, i64 noundef 1) #4
  %239 = sdiv i32 %238, %1
  %240 = sitofp i32 %1 to double
  %241 = tail call i64 @libmetis__iargmax(i64 noundef %.pre-phi, ptr noundef %44) #4
  %242 = getelementptr inbounds i32, ptr %44, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !18
  %244 = sitofp i32 %243 to double
  %245 = fmul double %240, %244
  %246 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef %44, i64 noundef 1) #4
  %247 = sitofp i32 %246 to double
  %248 = fdiv double %245, %247
  %249 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %234, i32 noundef %237, i32 noundef %239, double noundef %248)
  br i1 %150, label %.lr.ph206, label %._crit_edge207

.lr.ph206:                                        ; preds = %._crit_edge203
  %250 = zext nneg i32 %1 to i64
  br label %251

251:                                              ; preds = %.lr.ph206, %251
  %indvars.iv240 = phi i64 [ 0, %.lr.ph206 ], [ %indvars.iv.next241, %251 ]
  %252 = mul nuw nsw i64 %indvars.iv240, %250
  %253 = getelementptr inbounds i32, ptr %147, i64 %252
  %254 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef %253, i64 noundef 1) #4
  %255 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv240
  store i32 %254, ptr %255, align 4, !tbaa !18
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %exitcond244.not = icmp eq i64 %indvars.iv.next241, %250
  br i1 %exitcond244.not, label %._crit_edge207, label %251, !llvm.loop !27

._crit_edge207:                                   ; preds = %251, %._crit_edge203
  %256 = tail call i64 @libmetis__iargmin(i64 noundef %.pre-phi, ptr noundef nonnull %44) #4
  %257 = getelementptr inbounds i32, ptr %44, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !18
  %259 = tail call i64 @libmetis__iargmax(i64 noundef %.pre-phi, ptr noundef nonnull %44) #4
  %260 = getelementptr inbounds i32, ptr %44, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !18
  %262 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef nonnull %44, i64 noundef 1) #4
  %263 = sdiv i32 %262, %1
  %264 = tail call i64 @libmetis__iargmax(i64 noundef %.pre-phi, ptr noundef nonnull %44) #4
  %265 = getelementptr inbounds i32, ptr %44, i64 %264
  %266 = load i32, ptr %265, align 4, !tbaa !18
  %267 = sitofp i32 %266 to double
  %268 = fmul double %240, %267
  %269 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef nonnull %44, i64 noundef 1) #4
  %270 = sitofp i32 %269 to double
  %271 = fdiv double %268, %270
  %272 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %258, i32 noundef %261, i32 noundef %263, double noundef %271)
  br i1 %150, label %.lr.ph210, label %._crit_edge211

.lr.ph210:                                        ; preds = %._crit_edge207
  %273 = zext nneg i32 %1 to i64
  br label %274

274:                                              ; preds = %.lr.ph210, %274
  %indvars.iv245 = phi i64 [ 0, %.lr.ph210 ], [ %indvars.iv.next246, %274 ]
  %275 = mul nuw nsw i64 %indvars.iv245, %273
  %276 = getelementptr inbounds i32, ptr %146, i64 %275
  %277 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef %276, i64 noundef 1) #4
  %278 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv245
  store i32 %277, ptr %278, align 4, !tbaa !18
  %indvars.iv.next246 = add nuw nsw i64 %indvars.iv245, 1
  %exitcond249.not = icmp eq i64 %indvars.iv.next246, %273
  br i1 %exitcond249.not, label %._crit_edge211, label %274, !llvm.loop !28

._crit_edge211:                                   ; preds = %274, %._crit_edge207
  %279 = tail call i64 @libmetis__iargmin(i64 noundef %.pre-phi, ptr noundef nonnull %44) #4
  %280 = getelementptr inbounds i32, ptr %44, i64 %279
  %281 = load i32, ptr %280, align 4, !tbaa !18
  %282 = tail call i64 @libmetis__iargmax(i64 noundef %.pre-phi, ptr noundef nonnull %44) #4
  %283 = getelementptr inbounds i32, ptr %44, i64 %282
  %284 = load i32, ptr %283, align 4, !tbaa !18
  %285 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef nonnull %44, i64 noundef 1) #4
  %286 = sdiv i32 %285, %1
  %287 = tail call i64 @libmetis__iargmax(i64 noundef %.pre-phi, ptr noundef nonnull %44) #4
  %288 = getelementptr inbounds i32, ptr %44, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !18
  %290 = sitofp i32 %289 to double
  %291 = fmul double %240, %290
  %292 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef nonnull %44, i64 noundef 1) #4
  %293 = sitofp i32 %292 to double
  %294 = fdiv double %291, %293
  %295 = tail call i32 @libmetis__isum(i64 noundef %.pre-phi, ptr noundef nonnull %44, i64 noundef 1) #4
  %296 = sitofp i32 %295 to double
  %297 = sitofp i32 %10 to double
  %298 = fdiv double %296, %297
  %299 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef %281, i32 noundef %284, i32 noundef %286, double noundef %294, double noundef %298)
  %300 = and i32 %.1175, -3
  %or.cond = icmp eq i32 %300, 1
  br i1 %or.cond, label %301, label %302

301:                                              ; preds = %._crit_edge211
  call void (ptr, ...) @gk_free(ptr noundef nonnull %4, ptr noundef null) #4
  store ptr null, ptr %17, align 8, !tbaa !14
  br label %302

302:                                              ; preds = %._crit_edge211, %301
  %303 = and i32 %.1175, -2
  %or.cond3 = icmp eq i32 %303, 2
  br i1 %or.cond3, label %304, label %305

304:                                              ; preds = %302
  call void (ptr, ...) @gk_free(ptr noundef nonnull %5, ptr noundef null) #4
  store ptr null, ptr %21, align 8, !tbaa !17
  br label %305

305:                                              ; preds = %302, %304
  call void (ptr, ...) @gk_free(ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef null) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #4
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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

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 = { 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 = !{!10, !10, i64 0}
!16 = !{!6, !10, i64 32}
!17 = !{!6, !10, i64 48}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}


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