; LLVM IR from GGiecold-zz/Cluster_Ensembles :: src/Cluster_Ensembles/Hypergraph_Partitioning/metis-5.1.0/programs (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 }
%struct.params_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, float, float, float, i64 }

@.str = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [132 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @ComputePartitionInfo(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %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 i32, align 4
  %14 = alloca i32, align 4
  %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 float, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  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
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, 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 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  %35 = load ptr, ptr %5, 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 %5, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.graph_t, ptr %38, i32 0, i32 2
  %40 = load i32, ptr %39, align 8, !tbaa !13
  store i32 %40, ptr %12, align 4, !tbaa !12
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.graph_t, ptr %41, i32 0, i32 3
  %43 = load ptr, ptr %42, align 8, !tbaa !14
  store ptr %43, ptr %15, align 8, !tbaa !5
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.graph_t, ptr %44, i32 0, i32 6
  %46 = load ptr, ptr %45, align 8, !tbaa !15
  store ptr %46, ptr %16, align 8, !tbaa !5
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graph_t, ptr %47, i32 0, i32 4
  %49 = load ptr, ptr %48, align 8, !tbaa !16
  store ptr %49, ptr %17, align 8, !tbaa !5
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 7
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  store ptr %52, ptr %18, align 8, !tbaa !5
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.params_t, ptr %53, i32 0, i32 16
  %55 = load i32, ptr %54, align 8, !tbaa !18
  store i32 %55, ptr %13, align 4, !tbaa !12
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.params_t, ptr %56, i32 0, i32 29
  %58 = load ptr, ptr %57, align 8, !tbaa !22
  store ptr %58, ptr %20, align 8, !tbaa !5
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = call i32 @libmetis__ComputeCut(ptr noundef %59, ptr noundef %60)
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = call i32 @libmetis__ComputeVolume(ptr noundef %62, ptr noundef %63)
  %65 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %61, i32 noundef %64)
  %66 = load i32, ptr %12, align 4, !tbaa !12
  %67 = load i32, ptr %13, align 4, !tbaa !12
  %68 = mul nsw i32 %66, %67
  %69 = sext i32 %68 to i64
  %70 = call ptr @libmetis__ismalloc(i64 noundef %69, i32 noundef 0, ptr noundef @.str.1)
  store ptr %70, ptr %19, align 8, !tbaa !5
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %71

71:                                               ; preds = %108, %3
  %72 = load i32, ptr %7, align 4, !tbaa !12
  %73 = load i32, ptr %11, align 4, !tbaa !12
  %74 = icmp slt i32 %72, %73
  br i1 %74, label %75, label %111

75:                                               ; preds = %71
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %76

76:                                               ; preds = %104, %75
  %77 = load i32, ptr %9, align 4, !tbaa !12
  %78 = load i32, ptr %12, align 4, !tbaa !12
  %79 = icmp slt i32 %77, %78
  br i1 %79, label %80, label %107

80:                                               ; preds = %76
  %81 = load ptr, ptr %17, align 8, !tbaa !5
  %82 = load i32, ptr %7, align 4, !tbaa !12
  %83 = load i32, ptr %12, align 4, !tbaa !12
  %84 = mul nsw i32 %82, %83
  %85 = load i32, ptr %9, align 4, !tbaa !12
  %86 = add nsw i32 %84, %85
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i32, ptr %81, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !12
  %90 = load ptr, ptr %19, align 8, !tbaa !5
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = load i32, ptr %7, align 4, !tbaa !12
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds i32, ptr %91, i64 %93
  %95 = load i32, ptr %94, align 4, !tbaa !12
  %96 = load i32, ptr %12, align 4, !tbaa !12
  %97 = mul nsw i32 %95, %96
  %98 = load i32, ptr %9, align 4, !tbaa !12
  %99 = add nsw i32 %97, %98
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i32, ptr %90, i64 %100
  %102 = load i32, ptr %101, align 4, !tbaa !12
  %103 = add nsw i32 %102, %89
  store i32 %103, ptr %101, align 4, !tbaa !12
  br label %104

104:                                              ; preds = %80
  %105 = load i32, ptr %9, align 4, !tbaa !12
  %106 = add nsw i32 %105, 1
  store i32 %106, ptr %9, align 4, !tbaa !12
  br label %76, !llvm.loop !23

107:                                              ; preds = %76
  br label %108

108:                                              ; preds = %107
  %109 = load i32, ptr %7, align 4, !tbaa !12
  %110 = add nsw i32 %109, 1
  store i32 %110, ptr %7, align 4, !tbaa !12
  br label %71, !llvm.loop !25

111:                                              ; preds = %71
  %112 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %113

113:                                              ; preds = %256, %111
  %114 = load i32, ptr %9, align 4, !tbaa !12
  %115 = load i32, ptr %12, align 4, !tbaa !12
  %116 = icmp slt i32 %114, %115
  br i1 %116, label %117, label %259

117:                                              ; preds = %113
  %118 = load i32, ptr %13, align 4, !tbaa !12
  %119 = sext i32 %118 to i64
  %120 = load ptr, ptr %19, align 8, !tbaa !5
  %121 = load i32, ptr %9, align 4, !tbaa !12
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i32, ptr %120, i64 %122
  %124 = load i32, ptr %12, align 4, !tbaa !12
  %125 = sext i32 %124 to i64
  %126 = call i32 @libmetis__isum(i64 noundef %119, ptr noundef %123, i64 noundef %125)
  store i32 %126, ptr %14, align 4, !tbaa !12
  store i32 0, ptr %10, align 4, !tbaa !12
  %127 = load ptr, ptr %19, align 8, !tbaa !5
  %128 = load i32, ptr %10, align 4, !tbaa !12
  %129 = load i32, ptr %12, align 4, !tbaa !12
  %130 = mul nsw i32 %128, %129
  %131 = load i32, ptr %9, align 4, !tbaa !12
  %132 = add nsw i32 %130, %131
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds i32, ptr %127, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !12
  %136 = sitofp i32 %135 to double
  %137 = fmul double 1.000000e+00, %136
  %138 = load ptr, ptr %20, align 8, !tbaa !5
  %139 = load i32, ptr %10, align 4, !tbaa !12
  %140 = load i32, ptr %12, align 4, !tbaa !12
  %141 = mul nsw i32 %139, %140
  %142 = load i32, ptr %9, align 4, !tbaa !12
  %143 = add nsw i32 %141, %142
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds float, ptr %138, i64 %144
  %146 = load float, ptr %145, align 4, !tbaa !26
  %147 = load i32, ptr %14, align 4, !tbaa !12
  %148 = sitofp i32 %147 to float
  %149 = fmul float %146, %148
  %150 = fpext float %149 to double
  %151 = fdiv double %137, %150
  %152 = fptrunc double %151 to float
  store float %152, ptr %21, align 4, !tbaa !26
  store i32 1, ptr %7, align 4, !tbaa !12
  br label %153

153:                                              ; preds = %215, %117
  %154 = load i32, ptr %7, align 4, !tbaa !12
  %155 = load i32, ptr %13, align 4, !tbaa !12
  %156 = icmp slt i32 %154, %155
  br i1 %156, label %157, label %218

157:                                              ; preds = %153
  %158 = load float, ptr %21, align 4, !tbaa !26
  %159 = fpext float %158 to double
  %160 = load ptr, ptr %19, align 8, !tbaa !5
  %161 = load i32, ptr %7, align 4, !tbaa !12
  %162 = load i32, ptr %12, align 4, !tbaa !12
  %163 = mul nsw i32 %161, %162
  %164 = load i32, ptr %9, align 4, !tbaa !12
  %165 = add nsw i32 %163, %164
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds i32, ptr %160, i64 %166
  %168 = load i32, ptr %167, align 4, !tbaa !12
  %169 = sitofp i32 %168 to double
  %170 = fmul double 1.000000e+00, %169
  %171 = load ptr, ptr %20, align 8, !tbaa !5
  %172 = load i32, ptr %7, align 4, !tbaa !12
  %173 = load i32, ptr %12, align 4, !tbaa !12
  %174 = mul nsw i32 %172, %173
  %175 = load i32, ptr %9, align 4, !tbaa !12
  %176 = add nsw i32 %174, %175
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds float, ptr %171, i64 %177
  %179 = load float, ptr %178, align 4, !tbaa !26
  %180 = load i32, ptr %14, align 4, !tbaa !12
  %181 = sitofp i32 %180 to float
  %182 = fmul float %179, %181
  %183 = fpext float %182 to double
  %184 = fdiv double %170, %183
  %185 = fcmp olt double %159, %184
  br i1 %185, label %186, label %214

186:                                              ; preds = %157
  %187 = load ptr, ptr %19, align 8, !tbaa !5
  %188 = load i32, ptr %7, align 4, !tbaa !12
  %189 = load i32, ptr %12, align 4, !tbaa !12
  %190 = mul nsw i32 %188, %189
  %191 = load i32, ptr %9, align 4, !tbaa !12
  %192 = add nsw i32 %190, %191
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i32, ptr %187, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !12
  %196 = sitofp i32 %195 to double
  %197 = fmul double 1.000000e+00, %196
  %198 = load ptr, ptr %20, align 8, !tbaa !5
  %199 = load i32, ptr %7, align 4, !tbaa !12
  %200 = load i32, ptr %12, align 4, !tbaa !12
  %201 = mul nsw i32 %199, %200
  %202 = load i32, ptr %9, align 4, !tbaa !12
  %203 = add nsw i32 %201, %202
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds float, ptr %198, i64 %204
  %206 = load float, ptr %205, align 4, !tbaa !26
  %207 = load i32, ptr %14, align 4, !tbaa !12
  %208 = sitofp i32 %207 to float
  %209 = fmul float %206, %208
  %210 = fpext float %209 to double
  %211 = fdiv double %197, %210
  %212 = fptrunc double %211 to float
  store float %212, ptr %21, align 4, !tbaa !26
  %213 = load i32, ptr %7, align 4, !tbaa !12
  store i32 %213, ptr %10, align 4, !tbaa !12
  br label %214

214:                                              ; preds = %186, %157
  br label %215

215:                                              ; preds = %214
  %216 = load i32, ptr %7, align 4, !tbaa !12
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %7, align 4, !tbaa !12
  br label %153, !llvm.loop !27

218:                                              ; preds = %153
  %219 = load i32, ptr %9, align 4, !tbaa !12
  %220 = load float, ptr %21, align 4, !tbaa !26
  %221 = fpext float %220 to double
  %222 = load i32, ptr %13, align 4, !tbaa !12
  %223 = sitofp i32 %222 to double
  %224 = fmul double 1.000000e+00, %223
  %225 = load ptr, ptr %17, align 8, !tbaa !5
  %226 = load i32, ptr %12, align 4, !tbaa !12
  %227 = load i32, ptr %11, align 4, !tbaa !12
  %228 = sext i32 %227 to i64
  %229 = load ptr, ptr %17, align 8, !tbaa !5
  %230 = load i32, ptr %9, align 4, !tbaa !12
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i32, ptr %229, i64 %231
  %233 = load i32, ptr %12, align 4, !tbaa !12
  %234 = call i32 @libmetis__iargmax_strd(i64 noundef %228, ptr noundef %232, i32 noundef %233)
  %235 = mul nsw i32 %226, %234
  %236 = load i32, ptr %9, align 4, !tbaa !12
  %237 = add nsw i32 %235, %236
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds i32, ptr %225, i64 %238
  %240 = load i32, ptr %239, align 4, !tbaa !12
  %241 = sitofp i32 %240 to double
  %242 = fmul double %224, %241
  %243 = load i32, ptr %13, align 4, !tbaa !12
  %244 = sext i32 %243 to i64
  %245 = load ptr, ptr %19, align 8, !tbaa !5
  %246 = load i32, ptr %9, align 4, !tbaa !12
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %245, i64 %247
  %249 = load i32, ptr %12, align 4, !tbaa !12
  %250 = sext i32 %249 to i64
  %251 = call i32 @libmetis__isum(i64 noundef %244, ptr noundef %248, i64 noundef %250)
  %252 = sitofp i32 %251 to double
  %253 = fmul double 1.000000e+00, %252
  %254 = fdiv double %242, %253
  %255 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %219, double noundef %221, double noundef %254)
  br label %256

256:                                              ; preds = %218
  %257 = load i32, ptr %9, align 4, !tbaa !12
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %9, align 4, !tbaa !12
  br label %113, !llvm.loop !28

259:                                              ; preds = %113
  %260 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %261 = load i32, ptr %12, align 4, !tbaa !12
  %262 = icmp eq i32 %261, 1
  br i1 %262, label %263, label %345

263:                                              ; preds = %259
  %264 = load i32, ptr %13, align 4, !tbaa !12
  %265 = sext i32 %264 to i64
  %266 = load ptr, ptr %19, align 8, !tbaa !5
  %267 = call i32 @libmetis__isum(i64 noundef %265, ptr noundef %266, i64 noundef 1)
  store i32 %267, ptr %14, align 4, !tbaa !12
  store i32 0, ptr %10, align 4, !tbaa !12
  %268 = load ptr, ptr %19, align 8, !tbaa !5
  %269 = load i32, ptr %10, align 4, !tbaa !12
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %268, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !12
  %273 = sitofp i32 %272 to float
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = load i32, ptr %10, align 4, !tbaa !12
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds float, ptr %274, i64 %276
  %278 = load float, ptr %277, align 4, !tbaa !26
  %279 = load i32, ptr %14, align 4, !tbaa !12
  %280 = sitofp i32 %279 to float
  %281 = fmul float %278, %280
  %282 = fdiv float %273, %281
  store float %282, ptr %21, align 4, !tbaa !26
  store i32 1, ptr %7, align 4, !tbaa !12
  br label %283

283:                                              ; preds = %323, %263
  %284 = load i32, ptr %7, align 4, !tbaa !12
  %285 = load i32, ptr %13, align 4, !tbaa !12
  %286 = icmp slt i32 %284, %285
  br i1 %286, label %287, label %326

287:                                              ; preds = %283
  %288 = load float, ptr %21, align 4, !tbaa !26
  %289 = load ptr, ptr %19, align 8, !tbaa !5
  %290 = load i32, ptr %7, align 4, !tbaa !12
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %289, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !12
  %294 = sitofp i32 %293 to float
  %295 = load ptr, ptr %20, align 8, !tbaa !5
  %296 = load i32, ptr %7, align 4, !tbaa !12
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds float, ptr %295, i64 %297
  %299 = load float, ptr %298, align 4, !tbaa !26
  %300 = load i32, ptr %14, align 4, !tbaa !12
  %301 = sitofp i32 %300 to float
  %302 = fmul float %299, %301
  %303 = fdiv float %294, %302
  %304 = fcmp olt float %288, %303
  br i1 %304, label %305, label %322

305:                                              ; preds = %287
  %306 = load ptr, ptr %19, align 8, !tbaa !5
  %307 = load i32, ptr %7, align 4, !tbaa !12
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds i32, ptr %306, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !12
  %311 = sitofp i32 %310 to float
  %312 = load ptr, ptr %20, align 8, !tbaa !5
  %313 = load i32, ptr %7, align 4, !tbaa !12
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds float, ptr %312, i64 %314
  %316 = load float, ptr %315, align 4, !tbaa !26
  %317 = load i32, ptr %14, align 4, !tbaa !12
  %318 = sitofp i32 %317 to float
  %319 = fmul float %316, %318
  %320 = fdiv float %311, %319
  store float %320, ptr %21, align 4, !tbaa !26
  %321 = load i32, ptr %7, align 4, !tbaa !12
  store i32 %321, ptr %10, align 4, !tbaa !12
  br label %322

322:                                              ; preds = %305, %287
  br label %323

323:                                              ; preds = %322
  %324 = load i32, ptr %7, align 4, !tbaa !12
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %7, align 4, !tbaa !12
  br label %283, !llvm.loop !29

326:                                              ; preds = %283
  %327 = load i32, ptr %10, align 4, !tbaa !12
  %328 = load ptr, ptr %19, align 8, !tbaa !5
  %329 = load i32, ptr %10, align 4, !tbaa !12
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %328, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !12
  %333 = load i32, ptr %14, align 4, !tbaa !12
  %334 = sitofp i32 %333 to float
  %335 = load ptr, ptr %20, align 8, !tbaa !5
  %336 = load i32, ptr %10, align 4, !tbaa !12
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds float, ptr %335, i64 %337
  %339 = load float, ptr %338, align 4, !tbaa !26
  %340 = fmul float %334, %339
  %341 = fptosi float %340 to i32
  %342 = load float, ptr %21, align 4, !tbaa !26
  %343 = fpext float %342 to double
  %344 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %327, i32 noundef %332, i32 noundef %341, double noundef %343)
  br label %345

345:                                              ; preds = %326, %259
  call void (ptr, ...) @gk_free(ptr noundef %19, ptr noundef null)
  %346 = load i32, ptr %13, align 4, !tbaa !12
  %347 = add nsw i32 %346, 1
  %348 = sext i32 %347 to i64
  %349 = call ptr @libmetis__imalloc(i64 noundef %348, ptr noundef @.str.6)
  store ptr %349, ptr %27, align 8, !tbaa !5
  %350 = load i32, ptr %11, align 4, !tbaa !12
  %351 = sext i32 %350 to i64
  %352 = call ptr @libmetis__imalloc(i64 noundef %351, ptr noundef @.str.7)
  store ptr %352, ptr %28, align 8, !tbaa !5
  %353 = load i32, ptr %13, align 4, !tbaa !12
  %354 = sext i32 %353 to i64
  %355 = call ptr @libmetis__imalloc(i64 noundef %354, ptr noundef @.str.8)
  store ptr %355, ptr %29, align 8, !tbaa !5
  %356 = load i32, ptr %11, align 4, !tbaa !12
  %357 = load i32, ptr %13, align 4, !tbaa !12
  %358 = load ptr, ptr %6, align 8, !tbaa !5
  %359 = load ptr, ptr %27, align 8, !tbaa !5
  %360 = load ptr, ptr %28, align 8, !tbaa !5
  call void @libmetis__iarray2csr(i32 noundef %356, i32 noundef %357, ptr noundef %358, ptr noundef %359, ptr noundef %360)
  %361 = load i32, ptr %13, align 4, !tbaa !12
  %362 = add nsw i32 %361, 1
  store i32 %362, ptr %24, align 4, !tbaa !12
  store i32 0, ptr %25, align 4, !tbaa !12
  store i32 0, ptr %26, align 4, !tbaa !12
  store i32 0, ptr %22, align 4, !tbaa !12
  br label %363

363:                                              ; preds = %478, %345
  %364 = load i32, ptr %22, align 4, !tbaa !12
  %365 = load i32, ptr %13, align 4, !tbaa !12
  %366 = icmp slt i32 %364, %365
  br i1 %366, label %367, label %481

367:                                              ; preds = %363
  %368 = load i32, ptr %13, align 4, !tbaa !12
  %369 = sext i32 %368 to i64
  %370 = load ptr, ptr %29, align 8, !tbaa !5
  %371 = call ptr @libmetis__iset(i64 noundef %369, i32 noundef 0, ptr noundef %370)
  %372 = load ptr, ptr %27, align 8, !tbaa !5
  %373 = load i32, ptr %22, align 4, !tbaa !12
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %372, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !12
  store i32 %376, ptr %8, align 4, !tbaa !12
  br label %377

377:                                              ; preds = %430, %367
  %378 = load i32, ptr %8, align 4, !tbaa !12
  %379 = load ptr, ptr %27, align 8, !tbaa !5
  %380 = load i32, ptr %22, align 4, !tbaa !12
  %381 = add nsw i32 %380, 1
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i32, ptr %379, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !12
  %385 = icmp slt i32 %378, %384
  br i1 %385, label %386, label %433

386:                                              ; preds = %377
  %387 = load ptr, ptr %28, align 8, !tbaa !5
  %388 = load i32, ptr %8, align 4, !tbaa !12
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds i32, ptr %387, i64 %389
  %391 = load i32, ptr %390, align 4, !tbaa !12
  store i32 %391, ptr %7, align 4, !tbaa !12
  %392 = load ptr, ptr %15, align 8, !tbaa !5
  %393 = load i32, ptr %7, 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
  store i32 %396, ptr %9, align 4, !tbaa !12
  br label %397

397:                                              ; preds = %426, %386
  %398 = load i32, ptr %9, align 4, !tbaa !12
  %399 = load ptr, ptr %15, align 8, !tbaa !5
  %400 = load i32, ptr %7, align 4, !tbaa !12
  %401 = add nsw i32 %400, 1
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i32, ptr %399, i64 %402
  %404 = load i32, ptr %403, align 4, !tbaa !12
  %405 = icmp slt i32 %398, %404
  br i1 %405, label %406, label %429

406:                                              ; preds = %397
  %407 = load ptr, ptr %18, align 8, !tbaa !5
  %408 = load i32, ptr %9, align 4, !tbaa !12
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !12
  %412 = load ptr, ptr %29, align 8, !tbaa !5
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  %414 = load ptr, ptr %16, align 8, !tbaa !5
  %415 = load i32, ptr %9, align 4, !tbaa !12
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds i32, ptr %414, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !12
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %413, i64 %419
  %421 = load i32, ptr %420, align 4, !tbaa !12
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %412, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !12
  %425 = add nsw i32 %424, %411
  store i32 %425, ptr %423, align 4, !tbaa !12
  br label %426

426:                                              ; preds = %406
  %427 = load i32, ptr %9, align 4, !tbaa !12
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %9, align 4, !tbaa !12
  br label %397, !llvm.loop !30

429:                                              ; preds = %397
  br label %430

430:                                              ; preds = %429
  %431 = load i32, ptr %8, align 4, !tbaa !12
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %8, align 4, !tbaa !12
  br label %377, !llvm.loop !31

433:                                              ; preds = %377
  %434 = load ptr, ptr %29, align 8, !tbaa !5
  %435 = load i32, ptr %22, align 4, !tbaa !12
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds i32, ptr %434, i64 %436
  store i32 0, ptr %437, align 4, !tbaa !12
  store i32 0, ptr %23, align 4, !tbaa !12
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %438

438:                                              ; preds = %453, %433
  %439 = load i32, ptr %7, align 4, !tbaa !12
  %440 = load i32, ptr %13, align 4, !tbaa !12
  %441 = icmp slt i32 %439, %440
  br i1 %441, label %442, label %456

442:                                              ; preds = %438
  %443 = load ptr, ptr %29, align 8, !tbaa !5
  %444 = load i32, ptr %7, align 4, !tbaa !12
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds i32, ptr %443, i64 %445
  %447 = load i32, ptr %446, align 4, !tbaa !12
  %448 = icmp sgt i32 %447, 0
  %449 = zext i1 %448 to i64
  %450 = select i1 %448, i32 1, i32 0
  %451 = load i32, ptr %23, align 4, !tbaa !12
  %452 = add nsw i32 %451, %450
  store i32 %452, ptr %23, align 4, !tbaa !12
  br label %453

453:                                              ; preds = %442
  %454 = load i32, ptr %7, align 4, !tbaa !12
  %455 = add nsw i32 %454, 1
  store i32 %455, ptr %7, align 4, !tbaa !12
  br label %438, !llvm.loop !32

456:                                              ; preds = %438
  %457 = load i32, ptr %23, align 4, !tbaa !12
  %458 = load i32, ptr %26, align 4, !tbaa !12
  %459 = add nsw i32 %458, %457
  store i32 %459, ptr %26, align 4, !tbaa !12
  %460 = load i32, ptr %22, align 4, !tbaa !12
  %461 = icmp eq i32 %460, 0
  br i1 %461, label %466, label %462

462:                                              ; preds = %456
  %463 = load i32, ptr %24, align 4, !tbaa !12
  %464 = load i32, ptr %23, align 4, !tbaa !12
  %465 = icmp slt i32 %463, %464
  br i1 %465, label %466, label %468

466:                                              ; preds = %462, %456
  %467 = load i32, ptr %23, align 4, !tbaa !12
  store i32 %467, ptr %24, align 4, !tbaa !12
  br label %468

468:                                              ; preds = %466, %462
  %469 = load i32, ptr %22, align 4, !tbaa !12
  %470 = icmp eq i32 %469, 0
  br i1 %470, label %475, label %471

471:                                              ; preds = %468
  %472 = load i32, ptr %25, align 4, !tbaa !12
  %473 = load i32, ptr %23, align 4, !tbaa !12
  %474 = icmp sgt i32 %472, %473
  br i1 %474, label %475, label %477

475:                                              ; preds = %471, %468
  %476 = load i32, ptr %23, align 4, !tbaa !12
  store i32 %476, ptr %25, align 4, !tbaa !12
  br label %477

477:                                              ; preds = %475, %471
  br label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %22, align 4, !tbaa !12
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %22, align 4, !tbaa !12
  br label %363, !llvm.loop !33

481:                                              ; preds = %363
  %482 = load i32, ptr %24, align 4, !tbaa !12
  %483 = load i32, ptr %25, align 4, !tbaa !12
  %484 = load i32, ptr %26, align 4, !tbaa !12
  %485 = sitofp i32 %484 to double
  %486 = fmul double 1.000000e+00, %485
  %487 = load i32, ptr %13, align 4, !tbaa !12
  %488 = sitofp i32 %487 to double
  %489 = fdiv double %486, %488
  %490 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef %482, i32 noundef %483, double noundef %489)
  call void (ptr, ...) @gk_free(ptr noundef %27, ptr noundef %28, ptr noundef %29, ptr noundef null)
  %491 = load i32, ptr %11, align 4, !tbaa !12
  %492 = add nsw i32 %491, 1
  %493 = sext i32 %492 to i64
  %494 = call ptr @libmetis__imalloc(i64 noundef %493, ptr noundef @.str.10)
  store ptr %494, ptr %32, align 8, !tbaa !5
  %495 = load i32, ptr %11, align 4, !tbaa !12
  %496 = sext i32 %495 to i64
  %497 = call ptr @libmetis__imalloc(i64 noundef %496, ptr noundef @.str.11)
  store ptr %497, ptr %33, align 8, !tbaa !5
  %498 = load i32, ptr %13, align 4, !tbaa !12
  %499 = sext i32 %498 to i64
  %500 = call ptr @libmetis__ismalloc(i64 noundef %499, i32 noundef 0, ptr noundef @.str.12)
  store ptr %500, ptr %34, align 8, !tbaa !5
  %501 = load ptr, ptr %5, align 8, !tbaa !5
  %502 = load ptr, ptr %6, align 8, !tbaa !5
  %503 = load ptr, ptr %32, align 8, !tbaa !5
  %504 = load ptr, ptr %33, align 8, !tbaa !5
  %505 = call i32 @libmetis__FindPartitionInducedComponents(ptr noundef %501, ptr noundef %502, ptr noundef %503, ptr noundef %504)
  store i32 %505, ptr %30, align 4, !tbaa !12
  %506 = load i32, ptr %30, align 4, !tbaa !12
  %507 = load i32, ptr %13, align 4, !tbaa !12
  %508 = icmp eq i32 %506, %507
  br i1 %508, label %509, label %511

509:                                              ; preds = %481
  %510 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  br label %583

511:                                              ; preds = %481
  %512 = load ptr, ptr %5, align 8, !tbaa !5
  %513 = call i32 @libmetis__IsConnected(ptr noundef %512, i32 noundef 0)
  %514 = icmp ne i32 %513, 0
  br i1 %514, label %515, label %577

515:                                              ; preds = %511
  store i32 0, ptr %31, align 4, !tbaa !12
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %516

516:                                              ; preds = %561, %515
  %517 = load i32, ptr %7, align 4, !tbaa !12
  %518 = load i32, ptr %30, align 4, !tbaa !12
  %519 = icmp slt i32 %517, %518
  br i1 %519, label %520, label %564

520:                                              ; preds = %516
  %521 = load ptr, ptr %34, align 8, !tbaa !5
  %522 = load ptr, ptr %6, align 8, !tbaa !5
  %523 = load ptr, ptr %33, align 8, !tbaa !5
  %524 = load ptr, ptr %32, align 8, !tbaa !5
  %525 = load i32, ptr %7, align 4, !tbaa !12
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i32, ptr %524, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !12
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %523, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !12
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i32, ptr %522, i64 %532
  %534 = load i32, ptr %533, align 4, !tbaa !12
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds i32, ptr %521, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !12
  %538 = add nsw i32 %537, 1
  store i32 %538, ptr %536, align 4, !tbaa !12
  %539 = load ptr, ptr %34, align 8, !tbaa !5
  %540 = load ptr, ptr %6, align 8, !tbaa !5
  %541 = load ptr, ptr %33, align 8, !tbaa !5
  %542 = load ptr, ptr %32, align 8, !tbaa !5
  %543 = load i32, ptr %7, align 4, !tbaa !12
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds i32, ptr %542, i64 %544
  %546 = load i32, ptr %545, align 4, !tbaa !12
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds i32, ptr %541, i64 %547
  %549 = load i32, ptr %548, align 4, !tbaa !12
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds i32, ptr %540, i64 %550
  %552 = load i32, ptr %551, align 4, !tbaa !12
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds i32, ptr %539, i64 %553
  %555 = load i32, ptr %554, align 4, !tbaa !12
  %556 = icmp eq i32 %555, 2
  br i1 %556, label %557, label %560

557:                                              ; preds = %520
  %558 = load i32, ptr %31, align 4, !tbaa !12
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %31, align 4, !tbaa !12
  br label %560

560:                                              ; preds = %557, %520
  br label %561

561:                                              ; preds = %560
  %562 = load i32, ptr %7, align 4, !tbaa !12
  %563 = add nsw i32 %562, 1
  store i32 %563, ptr %7, align 4, !tbaa !12
  br label %516, !llvm.loop !34

564:                                              ; preds = %516
  %565 = load i32, ptr %31, align 4, !tbaa !12
  %566 = load i32, ptr %30, align 4, !tbaa !12
  %567 = load i32, ptr %13, align 4, !tbaa !12
  %568 = sext i32 %567 to i64
  %569 = load ptr, ptr %34, align 8, !tbaa !5
  %570 = call i32 @libmetis__imax(i64 noundef %568, ptr noundef %569)
  %571 = load i32, ptr %13, align 4, !tbaa !12
  %572 = sext i32 %571 to i64
  %573 = load ptr, ptr %34, align 8, !tbaa !5
  %574 = call i64 @libmetis__iargmax(i64 noundef %572, ptr noundef %573)
  %575 = trunc i64 %574 to i32
  %576 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %565, i32 noundef %566, i32 noundef %570, i32 noundef %575)
  br label %582

577:                                              ; preds = %511
  %578 = load ptr, ptr %5, align 8, !tbaa !5
  %579 = call i32 @libmetis__FindPartitionInducedComponents(ptr noundef %578, ptr noundef null, ptr noundef null, ptr noundef null)
  %580 = load i32, ptr %30, align 4, !tbaa !12
  %581 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef %579, i32 noundef %580)
  br label %582

582:                                              ; preds = %577, %564
  br label %583

583:                                              ; preds = %582, %509
  call void (ptr, ...) @gk_free(ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, 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 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, 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 i32 @printf(ptr noundef, ...) #2

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

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

declare ptr @libmetis__ismalloc(i64 noundef, i32 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 void @gk_free(ptr noundef, ...) #2

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

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

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

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

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

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

declare i64 @libmetis__iargmax(i64 noundef, 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, !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, !11, i64 8}
!14 = !{!10, !6, i64 16}
!15 = !{!10, !6, i64 40}
!16 = !{!10, !6, i64 24}
!17 = !{!10, !6, i64 48}
!18 = !{!19, !11, i64 64}
!19 = !{!"", !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, !11, i64 76, !11, i64 80, !11, i64 84, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !11, i64 128, !11, i64 132, !6, i64 136, !6, i64 144, !20, i64 152, !20, i64 156, !20, i64 160, !21, i64 168}
!20 = !{!"float", !7, i64 0}
!21 = !{!"long", !7, i64 0}
!22 = !{!19, !6, i64 136}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!20, !20, i64 0}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !24}


; 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 [44 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [132 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @ComputePartitionInfo(ptr nocapture noundef readonly %0, ptr 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
  %10 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  %11 = load i32, ptr %1, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %1, i64 8
  %13 = load i32, ptr %12, align 8, !tbaa !11
  %14 = getelementptr inbounds i8, ptr %1, i64 16
  %15 = load ptr, ptr %14, align 8, !tbaa !12
  %16 = getelementptr inbounds i8, ptr %1, i64 40
  %17 = load ptr, ptr %16, align 8, !tbaa !13
  %18 = getelementptr inbounds i8, ptr %1, i64 24
  %19 = load ptr, ptr %18, align 8, !tbaa !14
  %20 = getelementptr inbounds i8, ptr %1, i64 48
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %22 = getelementptr inbounds i8, ptr %0, i64 64
  %23 = load i32, ptr %22, align 8, !tbaa !16
  %24 = getelementptr inbounds i8, ptr %0, i64 136
  %25 = load ptr, ptr %24, align 8, !tbaa !20
  %26 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %2) #5
  %27 = tail call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %2) #5
  %28 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %26, i32 noundef %27)
  %29 = mul nsw i32 %23, %13
  %30 = sext i32 %29 to i64
  %31 = tail call ptr @libmetis__ismalloc(i64 noundef %30, i32 noundef 0, ptr noundef nonnull @.str.1) #5
  store ptr %31, ptr %4, align 8, !tbaa !21
  %32 = icmp sgt i32 %11, 0
  br i1 %32, label %.preheader199.lr.ph, label %._crit_edge202

.preheader199.lr.ph:                              ; preds = %3
  %33 = icmp sgt i32 %13, 0
  br i1 %33, label %.preheader199.us.preheader, label %._crit_edge202.thread

._crit_edge202.thread:                            ; preds = %.preheader199.lr.ph
  %34 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %._crit_edge208.thread

.preheader199.us.preheader:                       ; preds = %.preheader199.lr.ph
  %35 = zext nneg i32 %13 to i64
  %wide.trip.count253 = zext nneg i32 %11 to i64
  %xtraiter = and i64 %35, 1
  %36 = icmp eq i32 %13, 1
  %unroll_iter = and i64 %35, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader199.us

.preheader199.us:                                 ; preds = %.preheader199.us.preheader, %._crit_edge.us
  %indvars.iv250 = phi i64 [ 0, %.preheader199.us.preheader ], [ %indvars.iv.next251, %._crit_edge.us ]
  %37 = mul nuw nsw i64 %indvars.iv250, %35
  %38 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv250
  %invariant.gep = getelementptr inbounds i32, ptr %19, i64 %37
  br i1 %36, label %._crit_edge.us.unr-lcssa, label %.preheader199.us.new

.preheader199.us.new:                             ; preds = %.preheader199.us, %.preheader199.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader199.us.new ], [ 0, %.preheader199.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader199.us.new ], [ 0, %.preheader199.us ]
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv
  %39 = load i32, ptr %gep, align 4, !tbaa !22
  %40 = load i32, ptr %38, align 4, !tbaa !22
  %41 = mul nsw i32 %40, %13
  %42 = trunc nuw nsw i64 %indvars.iv to i32
  %43 = add nsw i32 %41, %42
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds i32, ptr %31, i64 %44
  %46 = load i32, ptr %45, align 4, !tbaa !22
  %47 = add nsw i32 %46, %39
  store i32 %47, ptr %45, align 4, !tbaa !22
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %gep.1 = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv.next
  %48 = load i32, ptr %gep.1, align 4, !tbaa !22
  %49 = load i32, ptr %38, align 4, !tbaa !22
  %50 = mul nsw i32 %49, %13
  %51 = trunc nuw nsw i64 %indvars.iv.next to i32
  %52 = add nsw i32 %50, %51
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds i32, ptr %31, i64 %53
  %55 = load i32, ptr %54, align 4, !tbaa !22
  %56 = add nsw i32 %55, %48
  store i32 %56, ptr %54, align 4, !tbaa !22
  %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 %.preheader199.us.new, !llvm.loop !23

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader199.us.new, %.preheader199.us
  %indvars.iv.unr = phi i64 [ 0, %.preheader199.us ], [ %indvars.iv.next.1, %.preheader199.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
  %gep.epil = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv.unr
  %57 = load i32, ptr %gep.epil, align 4, !tbaa !22
  %58 = load i32, ptr %38, align 4, !tbaa !22
  %59 = mul nsw i32 %58, %13
  %60 = trunc nuw nsw i64 %indvars.iv.unr to i32
  %61 = add nsw i32 %59, %60
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds i32, ptr %31, i64 %62
  %64 = load i32, ptr %63, align 4, !tbaa !22
  %65 = add nsw i32 %64, %57
  store i32 %65, ptr %63, align 4, !tbaa !22
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %indvars.iv.next251 = add nuw nsw i64 %indvars.iv250, 1
  %exitcond254.not = icmp eq i64 %indvars.iv.next251, %wide.trip.count253
  br i1 %exitcond254.not, label %._crit_edge202, label %.preheader199.us, !llvm.loop !25

._crit_edge202:                                   ; preds = %._crit_edge.us, %3
  %66 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %67 = icmp sgt i32 %13, 0
  br i1 %67, label %.lr.ph207, label %._crit_edge208.thread

.lr.ph207:                                        ; preds = %._crit_edge202
  %68 = sext i32 %23 to i64
  %69 = zext nneg i32 %13 to i64
  %70 = icmp sgt i32 %23, 1
  %71 = sitofp i32 %23 to double
  %72 = sext i32 %11 to i64
  %wide.trip.count258 = zext i32 %23 to i64
  br label %73

73:                                               ; preds = %.lr.ph207, %._crit_edge
  %indvars.iv260 = phi i64 [ 0, %.lr.ph207 ], [ %indvars.iv.next261, %._crit_edge ]
  %74 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv260
  %75 = tail call i32 @libmetis__isum(i64 noundef %68, ptr noundef %74, i64 noundef %69) #5
  %76 = load i32, ptr %74, align 4, !tbaa !22
  %77 = sitofp i32 %76 to double
  %78 = getelementptr inbounds float, ptr %25, i64 %indvars.iv260
  %79 = load float, ptr %78, align 4, !tbaa !26
  %80 = sitofp i32 %75 to float
  %81 = fmul float %79, %80
  %82 = fpext float %81 to double
  %83 = fdiv double %77, %82
  %84 = fptrunc double %83 to float
  br i1 %70, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %73, %.lr.ph
  %indvars.iv255 = phi i64 [ %indvars.iv.next256, %.lr.ph ], [ 1, %73 ]
  %.0178203 = phi float [ %.1179, %.lr.ph ], [ %84, %73 ]
  %85 = fpext float %.0178203 to double
  %86 = mul nuw nsw i64 %indvars.iv255, %69
  %87 = add nuw nsw i64 %86, %indvars.iv260
  %88 = getelementptr inbounds i32, ptr %31, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !22
  %90 = sitofp i32 %89 to double
  %91 = getelementptr inbounds float, ptr %25, i64 %87
  %92 = load float, ptr %91, align 4, !tbaa !26
  %93 = fmul float %92, %80
  %94 = fpext float %93 to double
  %95 = fdiv double %90, %94
  %96 = fcmp ogt double %95, %85
  %97 = fptrunc double %95 to float
  %.1179 = select i1 %96, float %97, float %.0178203
  %indvars.iv.next256 = add nuw nsw i64 %indvars.iv255, 1
  %exitcond259.not = icmp eq i64 %indvars.iv.next256, %wide.trip.count258
  br i1 %exitcond259.not, label %._crit_edge, label %.lr.ph, !llvm.loop !27

._crit_edge:                                      ; preds = %.lr.ph, %73
  %.0178.lcssa = phi float [ %84, %73 ], [ %.1179, %.lr.ph ]
  %98 = fpext float %.0178.lcssa to double
  %99 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv260
  %100 = tail call i32 @libmetis__iargmax_strd(i64 noundef %72, ptr noundef %99, i32 noundef %13) #5
  %101 = mul nsw i32 %100, %13
  %102 = trunc nuw nsw i64 %indvars.iv260 to i32
  %103 = add nsw i32 %101, %102
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i32, ptr %19, i64 %104
  %106 = load i32, ptr %105, align 4, !tbaa !22
  %107 = sitofp i32 %106 to double
  %108 = fmul double %71, %107
  %109 = tail call i32 @libmetis__isum(i64 noundef %68, ptr noundef nonnull %74, i64 noundef %69) #5
  %110 = sitofp i32 %109 to double
  %111 = fdiv double %108, %110
  %112 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %102, double noundef %98, double noundef %111)
  %indvars.iv.next261 = add nuw nsw i64 %indvars.iv260, 1
  %exitcond264.not = icmp eq i64 %indvars.iv.next261, %69
  br i1 %exitcond264.not, label %._crit_edge208, label %73, !llvm.loop !28

._crit_edge208.thread:                            ; preds = %._crit_edge202.thread, %._crit_edge202
  %113 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %._crit_edge208._crit_edge

._crit_edge208:                                   ; preds = %._crit_edge
  %114 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  %115 = icmp eq i32 %13, 1
  br i1 %115, label %116, label %._crit_edge208._crit_edge

._crit_edge208._crit_edge:                        ; preds = %._crit_edge208.thread, %._crit_edge208
  %.pre296 = sext i32 %23 to i64
  br label %159

116:                                              ; preds = %._crit_edge208
  %117 = sext i32 %23 to i64
  %118 = tail call i32 @libmetis__isum(i64 noundef %117, ptr noundef nonnull %31, i64 noundef 1) #5
  %119 = load i32, ptr %31, align 4, !tbaa !22
  %120 = sitofp i32 %119 to float
  %121 = load float, ptr %25, align 4, !tbaa !26
  %122 = sitofp i32 %118 to float
  %123 = fmul float %121, %122
  %124 = fdiv float %120, %123
  %125 = icmp sgt i32 %23, 1
  br i1 %125, label %.lr.ph213.preheader, label %._crit_edge214

.lr.ph213.preheader:                              ; preds = %116
  %126 = add nsw i64 %wide.trip.count258, -1
  %xtraiter307 = and i64 %126, 1
  %127 = icmp eq i32 %23, 2
  br i1 %127, label %._crit_edge214.loopexit.unr-lcssa, label %.lr.ph213.preheader.new

.lr.ph213.preheader.new:                          ; preds = %.lr.ph213.preheader
  %unroll_iter311 = and i64 %126, -2
  br label %.lr.ph213

.lr.ph213:                                        ; preds = %.lr.ph213, %.lr.ph213.preheader.new
  %indvars.iv265 = phi i64 [ 1, %.lr.ph213.preheader.new ], [ %indvars.iv.next266.1, %.lr.ph213 ]
  %.2180210 = phi float [ %124, %.lr.ph213.preheader.new ], [ %.3181.1, %.lr.ph213 ]
  %.0186209 = phi i32 [ 0, %.lr.ph213.preheader.new ], [ %.1187.1, %.lr.ph213 ]
  %niter312 = phi i64 [ 0, %.lr.ph213.preheader.new ], [ %niter312.next.1, %.lr.ph213 ]
  %128 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv265
  %129 = load i32, ptr %128, align 4, !tbaa !22
  %130 = sitofp i32 %129 to float
  %131 = getelementptr inbounds float, ptr %25, i64 %indvars.iv265
  %132 = load float, ptr %131, align 4, !tbaa !26
  %133 = fmul float %132, %122
  %134 = fdiv float %130, %133
  %135 = fcmp olt float %.2180210, %134
  %136 = trunc nuw nsw i64 %indvars.iv265 to i32
  %.1187 = select i1 %135, i32 %136, i32 %.0186209
  %.3181 = select i1 %135, float %134, float %.2180210
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %137 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next266
  %138 = load i32, ptr %137, align 4, !tbaa !22
  %139 = sitofp i32 %138 to float
  %140 = getelementptr inbounds float, ptr %25, i64 %indvars.iv.next266
  %141 = load float, ptr %140, align 4, !tbaa !26
  %142 = fmul float %141, %122
  %143 = fdiv float %139, %142
  %144 = fcmp olt float %.3181, %143
  %145 = trunc nuw nsw i64 %indvars.iv.next266 to i32
  %.1187.1 = select i1 %144, i32 %145, i32 %.1187
  %.3181.1 = select i1 %144, float %143, float %.3181
  %indvars.iv.next266.1 = add nuw nsw i64 %indvars.iv265, 2
  %niter312.next.1 = add i64 %niter312, 2
  %niter312.ncmp.1 = icmp eq i64 %niter312.next.1, %unroll_iter311
  br i1 %niter312.ncmp.1, label %._crit_edge214.loopexit.unr-lcssa, label %.lr.ph213, !llvm.loop !29

._crit_edge214.loopexit.unr-lcssa:                ; preds = %.lr.ph213, %.lr.ph213.preheader
  %.1187.lcssa.ph = phi i32 [ poison, %.lr.ph213.preheader ], [ %.1187.1, %.lr.ph213 ]
  %.3181.lcssa.ph = phi float [ poison, %.lr.ph213.preheader ], [ %.3181.1, %.lr.ph213 ]
  %indvars.iv265.unr = phi i64 [ 1, %.lr.ph213.preheader ], [ %indvars.iv.next266.1, %.lr.ph213 ]
  %.2180210.unr = phi float [ %124, %.lr.ph213.preheader ], [ %.3181.1, %.lr.ph213 ]
  %.0186209.unr = phi i32 [ 0, %.lr.ph213.preheader ], [ %.1187.1, %.lr.ph213 ]
  %lcmp.mod308.not = icmp eq i64 %xtraiter307, 0
  br i1 %lcmp.mod308.not, label %._crit_edge214.loopexit, label %.lr.ph213.epil

.lr.ph213.epil:                                   ; preds = %._crit_edge214.loopexit.unr-lcssa
  %146 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv265.unr
  %147 = load i32, ptr %146, align 4, !tbaa !22
  %148 = sitofp i32 %147 to float
  %149 = getelementptr inbounds float, ptr %25, i64 %indvars.iv265.unr
  %150 = load float, ptr %149, align 4, !tbaa !26
  %151 = fmul float %150, %122
  %152 = fdiv float %148, %151
  %153 = fcmp olt float %.2180210.unr, %152
  %154 = trunc nuw nsw i64 %indvars.iv265.unr to i32
  %.1187.epil = select i1 %153, i32 %154, i32 %.0186209.unr
  %.3181.epil = select i1 %153, float %152, float %.2180210.unr
  br label %._crit_edge214.loopexit

._crit_edge214.loopexit:                          ; preds = %._crit_edge214.loopexit.unr-lcssa, %.lr.ph213.epil
  %.1187.lcssa = phi i32 [ %.1187.lcssa.ph, %._crit_edge214.loopexit.unr-lcssa ], [ %.1187.epil, %.lr.ph213.epil ]
  %.3181.lcssa = phi float [ %.3181.lcssa.ph, %._crit_edge214.loopexit.unr-lcssa ], [ %.3181.epil, %.lr.ph213.epil ]
  %.phi.trans.insert = sext i32 %.1187.lcssa to i64
  %.phi.trans.insert291 = getelementptr inbounds i32, ptr %31, i64 %.phi.trans.insert
  %.pre = load i32, ptr %.phi.trans.insert291, align 4, !tbaa !22
  %.phi.trans.insert292 = getelementptr inbounds float, ptr %25, i64 %.phi.trans.insert
  %.pre293 = load float, ptr %.phi.trans.insert292, align 4, !tbaa !26
  %.pre295 = fmul float %.pre293, %122
  br label %._crit_edge214

._crit_edge214:                                   ; preds = %116, %._crit_edge214.loopexit
  %.pre-phi = phi float [ %.pre295, %._crit_edge214.loopexit ], [ %123, %116 ]
  %155 = phi i32 [ %.pre, %._crit_edge214.loopexit ], [ %119, %116 ]
  %.0186.lcssa = phi i32 [ %.1187.lcssa, %._crit_edge214.loopexit ], [ 0, %116 ]
  %.2180.lcssa = phi float [ %.3181.lcssa, %._crit_edge214.loopexit ], [ %124, %116 ]
  %156 = fptosi float %.pre-phi to i32
  %157 = fpext float %.2180.lcssa to double
  %158 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %.0186.lcssa, i32 noundef %155, i32 noundef %156, double noundef %157)
  br label %159

159:                                              ; preds = %._crit_edge208._crit_edge, %._crit_edge214
  %.pre-phi297 = phi i64 [ %.pre296, %._crit_edge208._crit_edge ], [ %117, %._crit_edge214 ]
  call void (ptr, ...) @gk_free(ptr noundef nonnull %4, ptr noundef null) #5
  %160 = add nsw i32 %23, 1
  %161 = sext i32 %160 to i64
  %162 = call ptr @libmetis__imalloc(i64 noundef %161, ptr noundef nonnull @.str.6) #5
  store ptr %162, ptr %5, align 8, !tbaa !21
  %163 = sext i32 %11 to i64
  %164 = call ptr @libmetis__imalloc(i64 noundef %163, ptr noundef nonnull @.str.7) #5
  store ptr %164, ptr %6, align 8, !tbaa !21
  %165 = call ptr @libmetis__imalloc(i64 noundef %.pre-phi297, ptr noundef nonnull @.str.8) #5
  store ptr %165, ptr %7, align 8, !tbaa !21
  call void @libmetis__iarray2csr(i32 noundef %11, i32 noundef %23, ptr noundef %2, ptr noundef %162, ptr noundef %164) #5
  %166 = icmp sgt i32 %23, 0
  br i1 %166, label %.lr.ph237, label %._crit_edge238

.lr.ph237:                                        ; preds = %159
  %wide.trip.count284 = zext nneg i32 %23 to i64
  %min.iters.check = icmp ult i32 %23, 8
  %n.vec = and i64 %wide.trip.count284, 2147483640
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count284
  br label %167

167:                                              ; preds = %.lr.ph237, %._crit_edge230
  %indvars.iv281 = phi i64 [ 0, %.lr.ph237 ], [ %indvars.iv.next282, %._crit_edge230 ]
  %.0171235 = phi i32 [ 0, %.lr.ph237 ], [ %219, %._crit_edge230 ]
  %.0172234 = phi i32 [ 0, %.lr.ph237 ], [ %.1173, %._crit_edge230 ]
  %.0174233 = phi i32 [ %160, %.lr.ph237 ], [ %.1175, %._crit_edge230 ]
  %168 = call ptr @libmetis__iset(i64 noundef %.pre-phi297, i32 noundef 0, ptr noundef %165) #5
  %169 = getelementptr inbounds i32, ptr %162, i64 %indvars.iv281
  %170 = load i32, ptr %169, align 4, !tbaa !22
  %indvars.iv.next282 = add nuw nsw i64 %indvars.iv281, 1
  %171 = getelementptr inbounds i32, ptr %162, i64 %indvars.iv.next282
  %172 = load i32, ptr %171, align 4, !tbaa !22
  %173 = icmp slt i32 %170, %172
  br i1 %173, label %.lr.ph223, label %.lr.ph229.preheader

.lr.ph223:                                        ; preds = %167
  %174 = sext i32 %170 to i64
  br label %175

175:                                              ; preds = %.lr.ph223, %._crit_edge220
  %176 = phi i32 [ %172, %.lr.ph223 ], [ %200, %._crit_edge220 ]
  %indvars.iv273 = phi i64 [ %174, %.lr.ph223 ], [ %indvars.iv.next274, %._crit_edge220 ]
  %177 = getelementptr inbounds i32, ptr %164, i64 %indvars.iv273
  %178 = load i32, ptr %177, align 4, !tbaa !22
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds i32, ptr %15, i64 %179
  %181 = load i32, ptr %180, align 4, !tbaa !22
  %182 = getelementptr i8, ptr %180, i64 4
  %183 = load i32, ptr %182, align 4, !tbaa !22
  %184 = icmp slt i32 %181, %183
  br i1 %184, label %.lr.ph219.preheader, label %._crit_edge220

.lr.ph219.preheader:                              ; preds = %175
  %185 = sext i32 %181 to i64
  br label %.lr.ph219

.lr.ph219:                                        ; preds = %.lr.ph219.preheader, %.lr.ph219
  %indvars.iv270 = phi i64 [ %185, %.lr.ph219.preheader ], [ %indvars.iv.next271, %.lr.ph219 ]
  %186 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv270
  %187 = load i32, ptr %186, align 4, !tbaa !22
  %188 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv270
  %189 = load i32, ptr %188, align 4, !tbaa !22
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i32, ptr %2, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !22
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i32, ptr %165, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !22
  %196 = add nsw i32 %195, %187
  store i32 %196, ptr %194, align 4, !tbaa !22
  %indvars.iv.next271 = add nsw i64 %indvars.iv270, 1
  %197 = load i32, ptr %182, align 4, !tbaa !22
  %198 = sext i32 %197 to i64
  %199 = icmp slt i64 %indvars.iv.next271, %198
  br i1 %199, label %.lr.ph219, label %._crit_edge220.loopexit, !llvm.loop !30

._crit_edge220.loopexit:                          ; preds = %.lr.ph219
  %.pre294 = load i32, ptr %171, align 4, !tbaa !22
  br label %._crit_edge220

._crit_edge220:                                   ; preds = %._crit_edge220.loopexit, %175
  %200 = phi i32 [ %.pre294, %._crit_edge220.loopexit ], [ %176, %175 ]
  %indvars.iv.next274 = add nsw i64 %indvars.iv273, 1
  %201 = sext i32 %200 to i64
  %202 = icmp slt i64 %indvars.iv.next274, %201
  br i1 %202, label %175, label %.lr.ph229.preheader, !llvm.loop !31

.lr.ph229.preheader:                              ; preds = %._crit_edge220, %167
  %203 = getelementptr inbounds i32, ptr %165, i64 %indvars.iv281
  store i32 0, ptr %203, align 4, !tbaa !22
  br i1 %min.iters.check, label %.lr.ph229.preheader302, label %vector.body

vector.body:                                      ; preds = %.lr.ph229.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph229.preheader ]
  %vec.phi = phi <4 x i32> [ %210, %vector.body ], [ zeroinitializer, %.lr.ph229.preheader ]
  %vec.phi300 = phi <4 x i32> [ %211, %vector.body ], [ zeroinitializer, %.lr.ph229.preheader ]
  %204 = getelementptr inbounds i32, ptr %165, i64 %index
  %205 = getelementptr inbounds i8, ptr %204, i64 16
  %wide.load = load <4 x i32>, ptr %204, align 4, !tbaa !22
  %wide.load301 = load <4 x i32>, ptr %205, align 4, !tbaa !22
  %206 = icmp sgt <4 x i32> %wide.load, zeroinitializer
  %207 = icmp sgt <4 x i32> %wide.load301, zeroinitializer
  %208 = zext <4 x i1> %206 to <4 x i32>
  %209 = zext <4 x i1> %207 to <4 x i32>
  %210 = add <4 x i32> %vec.phi, %208
  %211 = add <4 x i32> %vec.phi300, %209
  %index.next = add nuw i64 %index, 8
  %212 = icmp eq i64 %index.next, %n.vec
  br i1 %212, label %middle.block, label %vector.body, !llvm.loop !32

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %211, %210
  %213 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  br i1 %cmp.n, label %._crit_edge230, label %.lr.ph229.preheader302

.lr.ph229.preheader302:                           ; preds = %middle.block, %.lr.ph229.preheader
  %indvars.iv276.ph = phi i64 [ 0, %.lr.ph229.preheader ], [ %n.vec, %middle.block ]
  %.0176226.ph = phi i32 [ 0, %.lr.ph229.preheader ], [ %213, %middle.block ]
  br label %.lr.ph229

.lr.ph229:                                        ; preds = %.lr.ph229.preheader302, %.lr.ph229
  %indvars.iv276 = phi i64 [ %indvars.iv.next277, %.lr.ph229 ], [ %indvars.iv276.ph, %.lr.ph229.preheader302 ]
  %.0176226 = phi i32 [ %218, %.lr.ph229 ], [ %.0176226.ph, %.lr.ph229.preheader302 ]
  %214 = getelementptr inbounds i32, ptr %165, i64 %indvars.iv276
  %215 = load i32, ptr %214, align 4, !tbaa !22
  %216 = icmp sgt i32 %215, 0
  %217 = zext i1 %216 to i32
  %218 = add nuw nsw i32 %.0176226, %217
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %exitcond280.not = icmp eq i64 %indvars.iv.next277, %wide.trip.count284
  br i1 %exitcond280.not, label %._crit_edge230, label %.lr.ph229, !llvm.loop !35

._crit_edge230:                                   ; preds = %.lr.ph229, %middle.block
  %.lcssa = phi i32 [ %213, %middle.block ], [ %218, %.lr.ph229 ]
  %219 = add nuw nsw i32 %.lcssa, %.0171235
  %220 = icmp eq i64 %indvars.iv281, 0
  %221 = call i32 @llvm.smax.i32(i32 %.0174233, i32 %.lcssa)
  %.1175 = select i1 %220, i32 %.lcssa, i32 %221
  %222 = call i32 @llvm.smin.i32(i32 %.0172234, i32 %.lcssa)
  %.1173 = select i1 %220, i32 %.lcssa, i32 %222
  %exitcond285.not = icmp eq i64 %indvars.iv.next282, %wide.trip.count284
  br i1 %exitcond285.not, label %._crit_edge238.loopexit, label %167, !llvm.loop !36

._crit_edge238.loopexit:                          ; preds = %._crit_edge230
  %223 = uitofp nneg i32 %219 to double
  br label %._crit_edge238

._crit_edge238:                                   ; preds = %._crit_edge238.loopexit, %159
  %.0174.lcssa = phi i32 [ %160, %159 ], [ %.1175, %._crit_edge238.loopexit ]
  %.0172.lcssa = phi i32 [ 0, %159 ], [ %.1173, %._crit_edge238.loopexit ]
  %.0171.lcssa = phi double [ 0.000000e+00, %159 ], [ %223, %._crit_edge238.loopexit ]
  %224 = sitofp i32 %23 to double
  %225 = fdiv double %.0171.lcssa, %224
  %226 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %.0174.lcssa, i32 noundef %.0172.lcssa, double noundef %225)
  call void (ptr, ...) @gk_free(ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef null) #5
  %227 = add nsw i32 %11, 1
  %228 = sext i32 %227 to i64
  %229 = call ptr @libmetis__imalloc(i64 noundef %228, ptr noundef nonnull @.str.10) #5
  store ptr %229, ptr %8, align 8, !tbaa !21
  %230 = call ptr @libmetis__imalloc(i64 noundef %163, ptr noundef nonnull @.str.11) #5
  store ptr %230, ptr %9, align 8, !tbaa !21
  %231 = call ptr @libmetis__ismalloc(i64 noundef %.pre-phi297, i32 noundef 0, ptr noundef nonnull @.str.12) #5
  store ptr %231, ptr %10, align 8, !tbaa !21
  %232 = call i32 @libmetis__FindPartitionInducedComponents(ptr noundef nonnull %1, ptr noundef %2, ptr noundef %229, ptr noundef %230) #5
  %233 = icmp eq i32 %232, %23
  br i1 %233, label %234, label %236

234:                                              ; preds = %._crit_edge238
  %235 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  br label %271

236:                                              ; preds = %._crit_edge238
  %237 = call i32 @libmetis__IsConnected(ptr noundef nonnull %1, i32 noundef 0) #5
  %.not = icmp eq i32 %237, 0
  br i1 %.not, label %268, label %.preheader

.preheader:                                       ; preds = %236
  %238 = icmp sgt i32 %232, 0
  br i1 %238, label %.lr.ph244, label %._crit_edge245

.lr.ph244:                                        ; preds = %.preheader
  %wide.trip.count289 = zext nneg i32 %232 to i64
  br label %239

239:                                              ; preds = %.lr.ph244, %239
  %indvars.iv286 = phi i64 [ 0, %.lr.ph244 ], [ %indvars.iv.next287, %239 ]
  %.0243 = phi i32 [ 0, %.lr.ph244 ], [ %spec.select, %239 ]
  %240 = getelementptr inbounds i32, ptr %229, i64 %indvars.iv286
  %241 = load i32, ptr %240, align 4, !tbaa !22
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds i32, ptr %230, i64 %242
  %244 = load i32, ptr %243, align 4, !tbaa !22
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %2, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !22
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds i32, ptr %231, i64 %248
  %250 = load i32, ptr %249, align 4, !tbaa !22
  %251 = add nsw i32 %250, 1
  store i32 %251, ptr %249, align 4, !tbaa !22
  %252 = load i32, ptr %240, align 4, !tbaa !22
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i32, ptr %230, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !22
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds i32, ptr %2, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !22
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds i32, ptr %231, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !22
  %262 = icmp eq i32 %261, 2
  %263 = zext i1 %262 to i32
  %spec.select = add nuw nsw i32 %.0243, %263
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 1
  %exitcond290.not = icmp eq i64 %indvars.iv.next287, %wide.trip.count289
  br i1 %exitcond290.not, label %._crit_edge245, label %239, !llvm.loop !37

._crit_edge245:                                   ; preds = %239, %.preheader
  %.0.lcssa = phi i32 [ 0, %.preheader ], [ %spec.select, %239 ]
  %264 = call i32 @libmetis__imax(i64 noundef %.pre-phi297, ptr noundef %231) #5
  %265 = call i64 @libmetis__iargmax(i64 noundef %.pre-phi297, ptr noundef %231) #5
  %266 = trunc i64 %265 to i32
  %267 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %.0.lcssa, i32 noundef %232, i32 noundef %264, i32 noundef %266)
  br label %271

268:                                              ; preds = %236
  %269 = call i32 @libmetis__FindPartitionInducedComponents(ptr noundef nonnull %1, ptr noundef null, ptr noundef null, ptr noundef null) #5
  %270 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef %269, i32 noundef %232)
  br label %271

271:                                              ; preds = %._crit_edge245, %268, %234
  call void (ptr, ...) @gk_free(ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef null) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  ret void
}

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

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

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

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

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

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

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

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

declare ptr @libmetis__imalloc(i64 noundef, ptr noundef) local_unnamed_addr #3

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

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

declare i32 @libmetis__FindPartitionInducedComponents(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @libmetis__IsConnected(ptr noundef, i32 noundef) local_unnamed_addr #3

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #4

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

!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 = !{!6, !10, i64 48}
!16 = !{!17, !7, i64 64}
!17 = !{!"", !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, !7, i64 76, !7, i64 80, !7, i64 84, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !7, i64 128, !7, i64 132, !10, i64 136, !10, i64 144, !18, i64 152, !18, i64 156, !18, i64 160, !19, i64 168}
!18 = !{!"float", !8, i64 0}
!19 = !{!"long", !8, i64 0}
!20 = !{!17, !10, i64 136}
!21 = !{!10, !10, i64 0}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!18, !18, i64 0}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24, !33, !34}
!33 = !{!"llvm.loop.isvectorized", i32 1}
!34 = !{!"llvm.loop.unroll.runtime.disable"}
!35 = distinct !{!35, !24, !34, !33}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}


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