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

; 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.ikv_t = type { i32, i32 }
%struct.ctrl_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, float, ptr, ptr, ptr, float, double, double, double, double, double, double, double, double, double, double, double, double, ptr, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.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 [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1

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

40:                                               ; preds = %85, %7
  %41 = load i32, ptr %15, align 4, !tbaa !9
  %42 = load i32, ptr %9, align 4, !tbaa !9
  %43 = icmp slt i32 %41, %42
  br i1 %43, label %44, label %88

44:                                               ; preds = %40
  store i32 0, ptr %20, align 4, !tbaa !9
  %45 = load ptr, ptr %10, align 8, !tbaa !5
  %46 = load i32, ptr %15, align 4, !tbaa !9
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds i32, ptr %45, i64 %47
  %49 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %49, ptr %18, align 4, !tbaa !9
  br label %50

50:                                               ; preds = %67, %44
  %51 = load i32, ptr %18, align 4, !tbaa !9
  %52 = load ptr, ptr %10, align 8, !tbaa !5
  %53 = load i32, ptr %15, align 4, !tbaa !9
  %54 = add nsw i32 %53, 1
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds i32, ptr %52, i64 %55
  %57 = load i32, ptr %56, align 4, !tbaa !9
  %58 = icmp slt i32 %51, %57
  br i1 %58, label %59, label %70

59:                                               ; preds = %50
  %60 = load ptr, ptr %11, align 8, !tbaa !5
  %61 = load i32, ptr %18, align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds i32, ptr %60, i64 %62
  %64 = load i32, ptr %63, align 4, !tbaa !9
  %65 = load i32, ptr %20, align 4, !tbaa !9
  %66 = add nsw i32 %65, %64
  store i32 %66, ptr %20, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %59
  %68 = load i32, ptr %18, align 4, !tbaa !9
  %69 = add nsw i32 %68, 1
  store i32 %69, ptr %18, align 4, !tbaa !9
  br label %50, !llvm.loop !11

70:                                               ; preds = %50
  %71 = load i32, ptr %20, align 4, !tbaa !9
  %72 = load i32, ptr %15, align 4, !tbaa !9
  %73 = add nsw i32 %71, %72
  %74 = load ptr, ptr %29, align 8, !tbaa !5
  %75 = load i32, ptr %15, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds %struct.ikv_t, ptr %74, i64 %76
  %78 = getelementptr inbounds %struct.ikv_t, ptr %77, i32 0, i32 0
  store i32 %73, ptr %78, align 4, !tbaa !13
  %79 = load i32, ptr %15, align 4, !tbaa !9
  %80 = load ptr, ptr %29, align 8, !tbaa !5
  %81 = load i32, ptr %15, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds %struct.ikv_t, ptr %80, i64 %82
  %84 = getelementptr inbounds %struct.ikv_t, ptr %83, i32 0, i32 1
  store i32 %79, ptr %84, align 4, !tbaa !15
  br label %85

85:                                               ; preds = %70
  %86 = load i32, ptr %15, align 4, !tbaa !9
  %87 = add nsw i32 %86, 1
  store i32 %87, ptr %15, align 4, !tbaa !9
  br label %40, !llvm.loop !16

88:                                               ; preds = %40
  %89 = load i32, ptr %9, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = load ptr, ptr %29, align 8, !tbaa !5
  call void @libmetis__ikvsorti(i64 noundef %90, ptr noundef %91)
  %92 = load ptr, ptr %13, align 8, !tbaa !5
  %93 = getelementptr inbounds i32, ptr %92, i64 0
  store i32 0, ptr %93, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %94

94:                                               ; preds = %282, %88
  %95 = load i32, ptr %15, align 4, !tbaa !9
  %96 = load i32, ptr %9, align 4, !tbaa !9
  %97 = icmp slt i32 %95, %96
  br i1 %97, label %98, label %285

98:                                               ; preds = %94
  %99 = load ptr, ptr %29, align 8, !tbaa !5
  %100 = load i32, ptr %15, align 4, !tbaa !9
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds %struct.ikv_t, ptr %99, i64 %101
  %103 = getelementptr inbounds %struct.ikv_t, ptr %102, i32 0, i32 1
  %104 = load i32, ptr %103, align 4, !tbaa !15
  store i32 %104, ptr %16, align 4, !tbaa !9
  %105 = load ptr, ptr %28, align 8, !tbaa !5
  %106 = load i32, ptr %16, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds i32, ptr %105, i64 %107
  %109 = load i32, ptr %108, align 4, !tbaa !9
  %110 = icmp eq i32 %109, -1
  br i1 %110, label %111, label %281

111:                                              ; preds = %98
  %112 = load i32, ptr %15, align 4, !tbaa !9
  %113 = load ptr, ptr %27, align 8, !tbaa !5
  %114 = load i32, ptr %16, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds i32, ptr %113, i64 %115
  store i32 %112, ptr %116, align 4, !tbaa !9
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = load i32, ptr %16, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds i32, ptr %117, i64 %119
  %121 = load i32, ptr %120, align 4, !tbaa !9
  store i32 %121, ptr %18, align 4, !tbaa !9
  br label %122

122:                                              ; preds = %141, %111
  %123 = load i32, ptr %18, align 4, !tbaa !9
  %124 = load ptr, ptr %10, align 8, !tbaa !5
  %125 = load i32, ptr %16, align 4, !tbaa !9
  %126 = add nsw i32 %125, 1
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i32, ptr %124, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = icmp slt i32 %123, %129
  br i1 %130, label %131, label %144

131:                                              ; preds = %122
  %132 = load i32, ptr %15, align 4, !tbaa !9
  %133 = load ptr, ptr %27, align 8, !tbaa !5
  %134 = load ptr, ptr %11, align 8, !tbaa !5
  %135 = load i32, ptr %18, align 4, !tbaa !9
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds i32, ptr %134, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds i32, ptr %133, i64 %139
  store i32 %132, ptr %140, align 4, !tbaa !9
  br label %141

141:                                              ; preds = %131
  %142 = load i32, ptr %18, align 4, !tbaa !9
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %18, align 4, !tbaa !9
  br label %122, !llvm.loop !17

144:                                              ; preds = %122
  %145 = load i32, ptr %22, align 4, !tbaa !9
  %146 = load ptr, ptr %28, align 8, !tbaa !5
  %147 = load i32, ptr %16, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds i32, ptr %146, i64 %148
  store i32 %145, ptr %149, align 4, !tbaa !9
  %150 = load i32, ptr %16, align 4, !tbaa !9
  %151 = load ptr, ptr %14, align 8, !tbaa !5
  %152 = load i32, ptr %21, align 4, !tbaa !9
  %153 = add nsw i32 %152, 1
  store i32 %153, ptr %21, align 4, !tbaa !9
  %154 = sext i32 %152 to i64
  %155 = getelementptr inbounds i32, ptr %151, i64 %154
  store i32 %150, ptr %155, align 4, !tbaa !9
  %156 = load i32, ptr %15, align 4, !tbaa !9
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr %18, align 4, !tbaa !9
  br label %158

158:                                              ; preds = %271, %144
  %159 = load i32, ptr %18, align 4, !tbaa !9
  %160 = load i32, ptr %9, align 4, !tbaa !9
  %161 = icmp slt i32 %159, %160
  br i1 %161, label %162, label %274

162:                                              ; preds = %158
  %163 = load ptr, ptr %29, align 8, !tbaa !5
  %164 = load i32, ptr %18, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds %struct.ikv_t, ptr %163, i64 %165
  %167 = getelementptr inbounds %struct.ikv_t, ptr %166, i32 0, i32 1
  %168 = load i32, ptr %167, align 4, !tbaa !15
  store i32 %168, ptr %17, align 4, !tbaa !9
  %169 = load ptr, ptr %29, align 8, !tbaa !5
  %170 = load i32, ptr %15, align 4, !tbaa !9
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds %struct.ikv_t, ptr %169, i64 %171
  %173 = getelementptr inbounds %struct.ikv_t, ptr %172, i32 0, i32 0
  %174 = load i32, ptr %173, align 4, !tbaa !13
  %175 = load ptr, ptr %29, align 8, !tbaa !5
  %176 = load i32, ptr %18, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds %struct.ikv_t, ptr %175, i64 %177
  %179 = getelementptr inbounds %struct.ikv_t, ptr %178, i32 0, i32 0
  %180 = load i32, ptr %179, align 4, !tbaa !13
  %181 = icmp ne i32 %174, %180
  br i1 %181, label %208, label %182

182:                                              ; preds = %162
  %183 = load ptr, ptr %10, align 8, !tbaa !5
  %184 = load i32, ptr %16, align 4, !tbaa !9
  %185 = add nsw i32 %184, 1
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i32, ptr %183, i64 %186
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = load i32, ptr %16, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %189, i64 %191
  %193 = load i32, ptr %192, align 4, !tbaa !9
  %194 = sub nsw i32 %188, %193
  %195 = load ptr, ptr %10, align 8, !tbaa !5
  %196 = load i32, ptr %17, align 4, !tbaa !9
  %197 = add nsw i32 %196, 1
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %195, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = load ptr, ptr %10, align 8, !tbaa !5
  %202 = load i32, ptr %17, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds i32, ptr %201, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !9
  %206 = sub nsw i32 %200, %205
  %207 = icmp ne i32 %194, %206
  br i1 %207, label %208, label %209

208:                                              ; preds = %182, %162
  br label %274

209:                                              ; preds = %182
  %210 = load ptr, ptr %28, align 8, !tbaa !5
  %211 = load i32, ptr %17, align 4, !tbaa !9
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i32, ptr %210, i64 %212
  %214 = load i32, ptr %213, align 4, !tbaa !9
  %215 = icmp eq i32 %214, -1
  br i1 %215, label %216, label %270

216:                                              ; preds = %209
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = load i32, ptr %17, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %217, i64 %219
  %221 = load i32, ptr %220, align 4, !tbaa !9
  store i32 %221, ptr %19, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %245, %216
  %223 = load i32, ptr %19, align 4, !tbaa !9
  %224 = load ptr, ptr %10, align 8, !tbaa !5
  %225 = load i32, ptr %17, align 4, !tbaa !9
  %226 = add nsw i32 %225, 1
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds i32, ptr %224, i64 %227
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = icmp slt i32 %223, %229
  br i1 %230, label %231, label %248

231:                                              ; preds = %222
  %232 = load ptr, ptr %27, align 8, !tbaa !5
  %233 = load ptr, ptr %11, align 8, !tbaa !5
  %234 = load i32, ptr %19, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %233, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds i32, ptr %232, i64 %238
  %240 = load i32, ptr %239, align 4, !tbaa !9
  %241 = load i32, ptr %15, align 4, !tbaa !9
  %242 = icmp ne i32 %240, %241
  br i1 %242, label %243, label %244

243:                                              ; preds = %231
  br label %248

244:                                              ; preds = %231
  br label %245

245:                                              ; preds = %244
  %246 = load i32, ptr %19, align 4, !tbaa !9
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %19, align 4, !tbaa !9
  br label %222, !llvm.loop !18

248:                                              ; preds = %243, %222
  %249 = load i32, ptr %19, align 4, !tbaa !9
  %250 = load ptr, ptr %10, align 8, !tbaa !5
  %251 = load i32, ptr %17, align 4, !tbaa !9
  %252 = add nsw i32 %251, 1
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i32, ptr %250, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !9
  %256 = icmp eq i32 %249, %255
  br i1 %256, label %257, label %269

257:                                              ; preds = %248
  %258 = load i32, ptr %22, align 4, !tbaa !9
  %259 = load ptr, ptr %28, align 8, !tbaa !5
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds i32, ptr %259, i64 %261
  store i32 %258, ptr %262, align 4, !tbaa !9
  %263 = load i32, ptr %17, align 4, !tbaa !9
  %264 = load ptr, ptr %14, align 8, !tbaa !5
  %265 = load i32, ptr %21, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %21, align 4, !tbaa !9
  %267 = sext i32 %265 to i64
  %268 = getelementptr inbounds i32, ptr %264, i64 %267
  store i32 %263, ptr %268, align 4, !tbaa !9
  br label %269

269:                                              ; preds = %257, %248
  br label %270

270:                                              ; preds = %269, %209
  br label %271

271:                                              ; preds = %270
  %272 = load i32, ptr %18, align 4, !tbaa !9
  %273 = add nsw i32 %272, 1
  store i32 %273, ptr %18, align 4, !tbaa !9
  br label %158, !llvm.loop !19

274:                                              ; preds = %208, %158
  %275 = load i32, ptr %21, align 4, !tbaa !9
  %276 = load ptr, ptr %13, align 8, !tbaa !5
  %277 = load i32, ptr %22, align 4, !tbaa !9
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %22, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i32, ptr %276, i64 %279
  store i32 %275, ptr %280, align 4, !tbaa !9
  br label %281

281:                                              ; preds = %274, %98
  br label %282

282:                                              ; preds = %281
  %283 = load i32, ptr %15, align 4, !tbaa !9
  %284 = add nsw i32 %283, 1
  store i32 %284, ptr %15, align 4, !tbaa !9
  br label %94, !llvm.loop !20

285:                                              ; preds = %94
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.ctrl_t, ptr %286, i32 0, i32 2
  %288 = load i32, ptr %287, align 8, !tbaa !21
  %289 = and i32 %288, 1
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %296

291:                                              ; preds = %285
  %292 = load i32, ptr %9, align 4, !tbaa !9
  %293 = load i32, ptr %22, align 4, !tbaa !9
  %294 = sub nsw i32 %292, %293
  %295 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %294)
  br label %296

296:                                              ; preds = %291, %285
  %297 = load i32, ptr %22, align 4, !tbaa !9
  %298 = sitofp i32 %297 to double
  %299 = load i32, ptr %9, align 4, !tbaa !9
  %300 = sitofp i32 %299 to double
  %301 = fmul double 8.500000e-01, %300
  %302 = fcmp olt double %298, %301
  br i1 %302, label %303, label %483

303:                                              ; preds = %296
  %304 = call ptr @libmetis__CreateGraph()
  store ptr %304, ptr %30, align 8, !tbaa !5
  store i32 0, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %305

305:                                              ; preds = %333, %303
  %306 = load i32, ptr %15, align 4, !tbaa !9
  %307 = load i32, ptr %22, align 4, !tbaa !9
  %308 = icmp slt i32 %306, %307
  br i1 %308, label %309, label %336

309:                                              ; preds = %305
  %310 = load ptr, ptr %14, align 8, !tbaa !5
  %311 = load ptr, ptr %13, align 8, !tbaa !5
  %312 = load i32, ptr %15, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds i32, ptr %311, i64 %313
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i32, ptr %310, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !9
  store i32 %318, ptr %16, align 4, !tbaa !9
  %319 = load ptr, ptr %10, align 8, !tbaa !5
  %320 = load i32, ptr %16, align 4, !tbaa !9
  %321 = add nsw i32 %320, 1
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i32, ptr %319, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = load ptr, ptr %10, align 8, !tbaa !5
  %326 = load i32, ptr %16, 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 = sub nsw i32 %324, %329
  %331 = load i32, ptr %23, align 4, !tbaa !9
  %332 = add nsw i32 %331, %330
  store i32 %332, ptr %23, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %309
  %334 = load i32, ptr %15, align 4, !tbaa !9
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %15, align 4, !tbaa !9
  br label %305, !llvm.loop !26

336:                                              ; preds = %305
  %337 = load i32, ptr %22, align 4, !tbaa !9
  %338 = add nsw i32 %337, 1
  %339 = sext i32 %338 to i64
  %340 = call ptr @libmetis__imalloc(i64 noundef %339, ptr noundef @.str.4)
  %341 = load ptr, ptr %30, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.graph_t, ptr %341, i32 0, i32 3
  store ptr %340, ptr %342, align 8, !tbaa !27
  store ptr %340, ptr %24, align 8, !tbaa !5
  %343 = load i32, ptr %22, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = call ptr @libmetis__ismalloc(i64 noundef %344, i32 noundef 0, ptr noundef @.str.5)
  %346 = load ptr, ptr %30, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.graph_t, ptr %346, i32 0, i32 4
  store ptr %345, ptr %347, align 8, !tbaa !29
  store ptr %345, ptr %26, align 8, !tbaa !5
  %348 = load i32, ptr %23, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = call ptr @libmetis__imalloc(i64 noundef %349, ptr noundef @.str.6)
  %351 = load ptr, ptr %30, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.graph_t, ptr %351, i32 0, i32 6
  store ptr %350, ptr %352, align 8, !tbaa !30
  store ptr %350, ptr %25, align 8, !tbaa !5
  %353 = load i32, ptr %23, align 4, !tbaa !9
  %354 = sext i32 %353 to i64
  %355 = call ptr @libmetis__ismalloc(i64 noundef %354, i32 noundef 1, ptr noundef @.str.7)
  %356 = load ptr, ptr %30, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.graph_t, ptr %356, i32 0, i32 7
  store ptr %355, ptr %357, align 8, !tbaa !31
  %358 = load i32, ptr %9, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = load ptr, ptr %27, align 8, !tbaa !5
  %361 = call ptr @libmetis__iset(i64 noundef %359, i32 noundef -1, ptr noundef %360)
  %362 = load ptr, ptr %24, align 8, !tbaa !5
  %363 = getelementptr inbounds i32, ptr %362, i64 0
  store i32 0, ptr %363, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %469, %336
  %365 = load i32, ptr %15, align 4, !tbaa !9
  %366 = load i32, ptr %22, align 4, !tbaa !9
  %367 = icmp slt i32 %365, %366
  br i1 %367, label %368, label %472

368:                                              ; preds = %364
  %369 = load i32, ptr %15, align 4, !tbaa !9
  %370 = load ptr, ptr %27, align 8, !tbaa !5
  %371 = load i32, ptr %15, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds i32, ptr %370, i64 %372
  store i32 %369, ptr %373, align 4, !tbaa !9
  %374 = load ptr, ptr %13, align 8, !tbaa !5
  %375 = load i32, ptr %15, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds i32, ptr %374, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !9
  store i32 %378, ptr %18, align 4, !tbaa !9
  br label %379

379:                                              ; preds = %459, %368
  %380 = load i32, ptr %18, align 4, !tbaa !9
  %381 = load ptr, ptr %13, align 8, !tbaa !5
  %382 = load i32, ptr %15, align 4, !tbaa !9
  %383 = add nsw i32 %382, 1
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %381, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  %387 = icmp slt i32 %380, %386
  br i1 %387, label %388, label %462

388:                                              ; preds = %379
  %389 = load ptr, ptr %14, align 8, !tbaa !5
  %390 = load i32, ptr %18, align 4, !tbaa !9
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds i32, ptr %389, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !9
  store i32 %393, ptr %16, align 4, !tbaa !9
  %394 = load ptr, ptr %12, align 8, !tbaa !5
  %395 = icmp eq ptr %394, null
  br i1 %395, label %396, label %397

396:                                              ; preds = %388
  br label %403

397:                                              ; preds = %388
  %398 = load ptr, ptr %12, align 8, !tbaa !5
  %399 = load i32, ptr %16, align 4, !tbaa !9
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds i32, ptr %398, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %397, %396
  %404 = phi i32 [ 1, %396 ], [ %402, %397 ]
  %405 = load ptr, ptr %26, align 8, !tbaa !5
  %406 = load i32, ptr %15, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = add nsw i32 %409, %404
  store i32 %410, ptr %408, align 4, !tbaa !9
  %411 = load ptr, ptr %10, align 8, !tbaa !5
  %412 = load i32, ptr %16, align 4, !tbaa !9
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i32, ptr %411, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !9
  store i32 %415, ptr %19, align 4, !tbaa !9
  br label %416

416:                                              ; preds = %455, %403
  %417 = load i32, ptr %19, align 4, !tbaa !9
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = load i32, ptr %16, align 4, !tbaa !9
  %420 = add nsw i32 %419, 1
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %418, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !9
  %424 = icmp slt i32 %417, %423
  br i1 %424, label %425, label %458

425:                                              ; preds = %416
  %426 = load ptr, ptr %28, align 8, !tbaa !5
  %427 = load ptr, ptr %11, align 8, !tbaa !5
  %428 = load i32, ptr %19, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds i32, ptr %427, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds i32, ptr %426, i64 %432
  %434 = load i32, ptr %433, align 4, !tbaa !9
  store i32 %434, ptr %20, align 4, !tbaa !9
  %435 = load ptr, ptr %27, align 8, !tbaa !5
  %436 = load i32, ptr %20, align 4, !tbaa !9
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i32, ptr %435, i64 %437
  %439 = load i32, ptr %438, align 4, !tbaa !9
  %440 = load i32, ptr %15, align 4, !tbaa !9
  %441 = icmp ne i32 %439, %440
  br i1 %441, label %442, label %454

442:                                              ; preds = %425
  %443 = load i32, ptr %15, align 4, !tbaa !9
  %444 = load ptr, ptr %27, align 8, !tbaa !5
  %445 = load i32, ptr %20, align 4, !tbaa !9
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  store i32 %443, ptr %447, align 4, !tbaa !9
  %448 = load i32, ptr %20, align 4, !tbaa !9
  %449 = load ptr, ptr %25, align 8, !tbaa !5
  %450 = load i32, ptr %21, align 4, !tbaa !9
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %21, align 4, !tbaa !9
  %452 = sext i32 %450 to i64
  %453 = getelementptr inbounds i32, ptr %449, i64 %452
  store i32 %448, ptr %453, align 4, !tbaa !9
  br label %454

454:                                              ; preds = %442, %425
  br label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %19, align 4, !tbaa !9
  %457 = add nsw i32 %456, 1
  store i32 %457, ptr %19, align 4, !tbaa !9
  br label %416, !llvm.loop !32

458:                                              ; preds = %416
  br label %459

459:                                              ; preds = %458
  %460 = load i32, ptr %18, align 4, !tbaa !9
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %18, align 4, !tbaa !9
  br label %379, !llvm.loop !33

462:                                              ; preds = %379
  %463 = load i32, ptr %21, align 4, !tbaa !9
  %464 = load ptr, ptr %24, align 8, !tbaa !5
  %465 = load i32, ptr %15, align 4, !tbaa !9
  %466 = add nsw i32 %465, 1
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %464, i64 %467
  store i32 %463, ptr %468, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %462
  %470 = load i32, ptr %15, align 4, !tbaa !9
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %15, align 4, !tbaa !9
  br label %364, !llvm.loop !34

472:                                              ; preds = %364
  %473 = load i32, ptr %22, align 4, !tbaa !9
  %474 = load ptr, ptr %30, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.graph_t, ptr %474, i32 0, i32 0
  store i32 %473, ptr %475, align 8, !tbaa !35
  %476 = load i32, ptr %21, align 4, !tbaa !9
  %477 = load ptr, ptr %30, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.graph_t, ptr %477, i32 0, i32 1
  store i32 %476, ptr %478, align 4, !tbaa !36
  %479 = load ptr, ptr %30, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.graph_t, ptr %479, i32 0, i32 2
  store i32 1, ptr %480, align 8, !tbaa !37
  %481 = load ptr, ptr %30, align 8, !tbaa !5
  call void @libmetis__SetupGraph_tvwgt(ptr noundef %481)
  %482 = load ptr, ptr %30, align 8, !tbaa !5
  call void @libmetis__SetupGraph_label(ptr noundef %482)
  br label %483

483:                                              ; preds = %472, %296
  call void (ptr, ...) @gk_free(ptr noundef %29, ptr noundef %28, ptr noundef %27, ptr noundef null)
  %484 = load ptr, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  ret ptr %484
}

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

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

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

declare ptr @libmetis__CreateGraph() #2

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

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

declare void @libmetis__SetupGraph_tvwgt(ptr noundef) #2

declare void @libmetis__SetupGraph_label(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 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 0}
!14 = !{!"", !10, i64 0, !10, i64 4}
!15 = !{!14, !10, i64 4}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = !{!22, !10, i64 8}
!22 = !{!"ctrl_t", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !23, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !23, i64 128, !24, i64 136, !24, i64 144, !24, i64 152, !24, i64 160, !24, i64 168, !24, i64 176, !24, i64 184, !24, i64 192, !24, i64 200, !24, i64 208, !24, i64 216, !24, i64 224, !6, i64 232, !25, i64 240, !25, i64 248, !25, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320}
!23 = !{!"float", !7, i64 0}
!24 = !{!"double", !7, i64 0}
!25 = !{!"long", !7, i64 0}
!26 = distinct !{!26, !12}
!27 = !{!28, !6, i64 16}
!28 = !{!"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}
!29 = !{!28, !6, i64 24}
!30 = !{!28, !6, i64 40}
!31 = !{!28, !6, i64 48}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = !{!28, !10, i64 0}
!36 = !{!28, !10, i64 4}
!37 = !{!28, !10, i64 8}


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

%struct.ikv_t = type { i32, i32 }

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @libmetis__CompressGraph(ptr nocapture noundef readonly %0, i32 noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr noundef readonly %4, ptr nocapture noundef %5, ptr nocapture noundef %6) local_unnamed_addr #0 {
  %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 %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 = sext i32 %1 to i64
  %12 = tail call ptr @libmetis__ismalloc(i64 noundef %11, i32 noundef -1, ptr noundef nonnull @.str) #5
  store ptr %12, ptr %8, align 8, !tbaa !5
  %13 = tail call ptr @libmetis__ismalloc(i64 noundef %11, i32 noundef -1, ptr noundef nonnull @.str.1) #5
  store ptr %13, ptr %9, align 8, !tbaa !5
  %14 = tail call ptr @libmetis__ikvmalloc(i64 noundef %11, ptr noundef nonnull @.str.2) #5
  store ptr %14, ptr %10, align 8, !tbaa !5
  %15 = icmp sgt i32 %1, 0
  br i1 %15, label %.lr.ph177.preheader, label %._crit_edge178.thread

._crit_edge178.thread:                            ; preds = %7
  tail call void @libmetis__ikvsorti(i64 noundef %11, ptr noundef %14) #5
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %._crit_edge206

.lr.ph177.preheader:                              ; preds = %7
  %wide.trip.count243 = zext nneg i32 %1 to i64
  br label %.lr.ph177

.lr.ph177:                                        ; preds = %.lr.ph177.preheader, %._crit_edge
  %indvars.iv240 = phi i64 [ 0, %.lr.ph177.preheader ], [ %indvars.iv.next241, %._crit_edge ]
  %16 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv240
  %17 = load i32, ptr %16, align 4, !tbaa !9
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %18 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next241
  %19 = load i32, ptr %18, align 4, !tbaa !9
  %20 = icmp slt i32 %17, %19
  br i1 %20, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.lr.ph177
  %21 = sext i32 %17 to i64
  %wide.trip.count = sext i32 %19 to i64
  %22 = sub nsw i64 %wide.trip.count, %21
  %min.iters.check = icmp ult i64 %22, 8
  br i1 %min.iters.check, label %.lr.ph.preheader307, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %22, -8
  %ind.end = add nsw i64 %n.vec, %21
  %invariant.gep = getelementptr i32, ptr %3, i64 %21
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %24, %vector.body ]
  %vec.phi303 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %25, %vector.body ]
  %gep = getelementptr i32, ptr %invariant.gep, i64 %index
  %23 = getelementptr inbounds i8, ptr %gep, i64 16
  %wide.load = load <4 x i32>, ptr %gep, align 4, !tbaa !9
  %wide.load304 = load <4 x i32>, ptr %23, align 4, !tbaa !9
  %24 = add <4 x i32> %wide.load, %vec.phi
  %25 = add <4 x i32> %wide.load304, %vec.phi303
  %index.next = add nuw i64 %index, 8
  %26 = icmp eq i64 %index.next, %n.vec
  br i1 %26, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %25, %24
  %27 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %22, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader307

.lr.ph.preheader307:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ %21, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0160172.ph = phi i32 [ 0, %.lr.ph.preheader ], [ %27, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader307, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader307 ]
  %.0160172 = phi i32 [ %30, %.lr.ph ], [ %.0160172.ph, %.lr.ph.preheader307 ]
  %28 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv
  %29 = load i32, ptr %28, align 4, !tbaa !9
  %30 = add nsw i32 %29, %.0160172
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %.lr.ph177
  %.0160.lcssa = phi i32 [ 0, %.lr.ph177 ], [ %27, %middle.block ], [ %30, %.lr.ph ]
  %31 = trunc nuw nsw i64 %indvars.iv240 to i32
  %32 = add nsw i32 %.0160.lcssa, %31
  %33 = getelementptr inbounds %struct.ikv_t, ptr %14, i64 %indvars.iv240
  store i32 %32, ptr %33, align 4, !tbaa !16
  %34 = getelementptr inbounds %struct.ikv_t, ptr %14, i64 %indvars.iv240, i32 1
  store i32 %31, ptr %34, align 4, !tbaa !18
  %exitcond244.not = icmp eq i64 %indvars.iv.next241, %wide.trip.count243
  br i1 %exitcond244.not, label %._crit_edge178, label %.lr.ph177, !llvm.loop !19

._crit_edge178:                                   ; preds = %._crit_edge
  tail call void @libmetis__ikvsorti(i64 noundef %11, ptr noundef nonnull %14) #5
  store i32 0, ptr %5, align 4, !tbaa !9
  br i1 %15, label %.lr.ph205, label %._crit_edge206

.lr.ph205:                                        ; preds = %._crit_edge178
  %wide.trip.count263 = zext nneg i32 %1 to i64
  br label %35

35:                                               ; preds = %.lr.ph205, %102
  %indvars.iv259 = phi i64 [ 0, %.lr.ph205 ], [ %indvars.iv.next260.pre-phi, %102 ]
  %indvars.iv252 = phi i64 [ 1, %.lr.ph205 ], [ %indvars.iv.next253, %102 ]
  %.0154201 = phi i32 [ 0, %.lr.ph205 ], [ %.1155, %102 ]
  %.0156200 = phi i32 [ 0, %.lr.ph205 ], [ %.3159, %102 ]
  %36 = getelementptr inbounds %struct.ikv_t, ptr %14, i64 %indvars.iv259, i32 1
  %37 = load i32, ptr %36, align 4, !tbaa !18
  %38 = sext i32 %37 to i64
  %39 = getelementptr inbounds i32, ptr %13, i64 %38
  %40 = load i32, ptr %39, align 4, !tbaa !9
  %41 = icmp eq i32 %40, -1
  br i1 %41, label %42, label %._crit_edge293

._crit_edge293:                                   ; preds = %35
  %.pre294 = add nuw nsw i64 %indvars.iv259, 1
  br label %102

42:                                               ; preds = %35
  %43 = getelementptr inbounds i32, ptr %12, i64 %38
  %44 = trunc nuw nsw i64 %indvars.iv259 to i32
  store i32 %44, ptr %43, align 4, !tbaa !9
  %45 = getelementptr inbounds i32, ptr %2, i64 %38
  %46 = load i32, ptr %45, align 4, !tbaa !9
  %47 = getelementptr i8, ptr %45, i64 4
  %48 = load i32, ptr %47, align 4, !tbaa !9
  %49 = icmp slt i32 %46, %48
  br i1 %49, label %.lr.ph181.preheader, label %._crit_edge182

.lr.ph181.preheader:                              ; preds = %42
  %50 = sext i32 %46 to i64
  br label %.lr.ph181

.lr.ph181:                                        ; preds = %.lr.ph181.preheader, %.lr.ph181
  %indvars.iv245 = phi i64 [ %50, %.lr.ph181.preheader ], [ %indvars.iv.next246, %.lr.ph181 ]
  %51 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv245
  %52 = load i32, ptr %51, align 4, !tbaa !9
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds i32, ptr %12, i64 %53
  store i32 %44, ptr %54, align 4, !tbaa !9
  %indvars.iv.next246 = add nsw i64 %indvars.iv245, 1
  %55 = load i32, ptr %47, align 4, !tbaa !9
  %56 = sext i32 %55 to i64
  %57 = icmp slt i64 %indvars.iv.next246, %56
  br i1 %57, label %.lr.ph181, label %._crit_edge182, !llvm.loop !20

._crit_edge182:                                   ; preds = %.lr.ph181, %42
  store i32 %.0154201, ptr %39, align 4, !tbaa !9
  %58 = add nsw i32 %.0156200, 1
  %59 = sext i32 %.0156200 to i64
  %60 = getelementptr inbounds i32, ptr %6, i64 %59
  store i32 %37, ptr %60, align 4, !tbaa !9
  %61 = add nuw nsw i64 %indvars.iv259, 1
  %62 = icmp slt i64 %61, %11
  br i1 %62, label %.lr.ph193, label %._crit_edge194

.lr.ph193:                                        ; preds = %._crit_edge182
  %63 = getelementptr inbounds %struct.ikv_t, ptr %14, i64 %indvars.iv259
  br label %64

64:                                               ; preds = %.lr.ph193, %98
  %indvars.iv254 = phi i64 [ %indvars.iv252, %.lr.ph193 ], [ %indvars.iv.next255, %98 ]
  %.1157190 = phi i32 [ %58, %.lr.ph193 ], [ %.2158, %98 ]
  %65 = getelementptr inbounds %struct.ikv_t, ptr %14, i64 %indvars.iv254
  %66 = getelementptr inbounds i8, ptr %65, i64 4
  %67 = load i32, ptr %66, align 4, !tbaa !18
  %68 = load i32, ptr %63, align 4, !tbaa !16
  %69 = load i32, ptr %65, align 4, !tbaa !16
  %.not166 = icmp eq i32 %68, %69
  br i1 %.not166, label %70, label %._crit_edge194

70:                                               ; preds = %64
  %71 = load i32, ptr %47, align 4, !tbaa !9
  %72 = load i32, ptr %45, align 4, !tbaa !9
  %73 = sub nsw i32 %71, %72
  %74 = sext i32 %67 to i64
  %75 = getelementptr i32, ptr %2, i64 %74
  %76 = getelementptr i8, ptr %75, i64 4
  %77 = load i32, ptr %76, align 4, !tbaa !9
  %78 = load i32, ptr %75, align 4, !tbaa !9
  %79 = sub nsw i32 %77, %78
  %.not167 = icmp eq i32 %73, %79
  br i1 %.not167, label %80, label %._crit_edge194

80:                                               ; preds = %70
  %81 = getelementptr inbounds i32, ptr %13, i64 %74
  %82 = load i32, ptr %81, align 4, !tbaa !9
  %83 = icmp eq i32 %82, -1
  br i1 %83, label %.preheader, label %98

.preheader:                                       ; preds = %80
  %84 = icmp slt i32 %78, %77
  br i1 %84, label %.lr.ph184.preheader, label %._crit_edge185

.lr.ph184.preheader:                              ; preds = %.preheader
  %85 = sext i32 %78 to i64
  br label %.lr.ph184

.lr.ph184:                                        ; preds = %.lr.ph184.preheader, %92
  %indvars.iv248 = phi i64 [ %85, %.lr.ph184.preheader ], [ %indvars.iv.next249, %92 ]
  %86 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv248
  %87 = load i32, ptr %86, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds i32, ptr %12, i64 %88
  %90 = load i32, ptr %89, align 4, !tbaa !9
  %91 = zext i32 %90 to i64
  %.not168 = icmp eq i64 %indvars.iv259, %91
  br i1 %.not168, label %92, label %._crit_edge185.loopexit

92:                                               ; preds = %.lr.ph184
  %indvars.iv.next249 = add nsw i64 %indvars.iv248, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next249 to i32
  %exitcond251.not = icmp eq i32 %77, %lftr.wideiv
  br i1 %exitcond251.not, label %._crit_edge185.thread, label %.lr.ph184, !llvm.loop !21

._crit_edge185.loopexit:                          ; preds = %.lr.ph184
  %93 = trunc nsw i64 %indvars.iv248 to i32
  br label %._crit_edge185

._crit_edge185:                                   ; preds = %._crit_edge185.loopexit, %.preheader
  %.0161.lcssa = phi i32 [ %78, %.preheader ], [ %93, %._crit_edge185.loopexit ]
  %94 = icmp eq i32 %.0161.lcssa, %77
  br i1 %94, label %._crit_edge185.thread, label %98

._crit_edge185.thread:                            ; preds = %92, %._crit_edge185
  store i32 %.0154201, ptr %81, align 4, !tbaa !9
  %95 = add nsw i32 %.1157190, 1
  %96 = sext i32 %.1157190 to i64
  %97 = getelementptr inbounds i32, ptr %6, i64 %96
  store i32 %67, ptr %97, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %80, %._crit_edge185.thread, %._crit_edge185
  %.2158 = phi i32 [ %95, %._crit_edge185.thread ], [ %.1157190, %._crit_edge185 ], [ %.1157190, %80 ]
  %indvars.iv.next255 = add nuw nsw i64 %indvars.iv254, 1
  %exitcond258.not = icmp eq i64 %indvars.iv.next255, %wide.trip.count263
  br i1 %exitcond258.not, label %._crit_edge194, label %64, !llvm.loop !22

._crit_edge194:                                   ; preds = %98, %70, %64, %._crit_edge182
  %.1157.lcssa = phi i32 [ %58, %._crit_edge182 ], [ %.1157190, %64 ], [ %.1157190, %70 ], [ %.2158, %98 ]
  %99 = add nsw i32 %.0154201, 1
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i32, ptr %5, i64 %100
  store i32 %.1157.lcssa, ptr %101, align 4, !tbaa !9
  br label %102

102:                                              ; preds = %._crit_edge293, %._crit_edge194
  %indvars.iv.next260.pre-phi = phi i64 [ %.pre294, %._crit_edge293 ], [ %61, %._crit_edge194 ]
  %.3159 = phi i32 [ %.0156200, %._crit_edge293 ], [ %.1157.lcssa, %._crit_edge194 ]
  %.1155 = phi i32 [ %.0154201, %._crit_edge293 ], [ %99, %._crit_edge194 ]
  %indvars.iv.next253 = add nuw nsw i64 %indvars.iv252, 1
  %exitcond264.not = icmp eq i64 %indvars.iv.next260.pre-phi, %wide.trip.count263
  br i1 %exitcond264.not, label %._crit_edge206, label %35, !llvm.loop !23

._crit_edge206:                                   ; preds = %102, %._crit_edge178.thread, %._crit_edge178
  %.0154.lcssa = phi i32 [ 0, %._crit_edge178 ], [ 0, %._crit_edge178.thread ], [ %.1155, %102 ]
  %103 = getelementptr inbounds i8, ptr %0, i64 8
  %104 = load i32, ptr %103, align 8, !tbaa !24
  %105 = and i32 %104, 1
  %.not = icmp eq i32 %105, 0
  br i1 %.not, label %109, label %106

106:                                              ; preds = %._crit_edge206
  %107 = sub nsw i32 %1, %.0154.lcssa
  %108 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %107)
  br label %109

109:                                              ; preds = %106, %._crit_edge206
  %110 = sitofp i32 %.0154.lcssa to double
  %111 = sitofp i32 %1 to double
  %112 = fmul double %111, 8.500000e-01
  %113 = fcmp ogt double %112, %110
  br i1 %113, label %114, label %258

114:                                              ; preds = %109
  %115 = tail call ptr @libmetis__CreateGraph() #5
  %116 = icmp sgt i32 %.0154.lcssa, 0
  br i1 %116, label %.lr.ph211.preheader, label %._crit_edge212

.lr.ph211.preheader:                              ; preds = %114
  %wide.trip.count268 = zext nneg i32 %.0154.lcssa to i64
  %xtraiter = and i64 %wide.trip.count268, 1
  %117 = icmp eq i32 %.0154.lcssa, 1
  br i1 %117, label %._crit_edge212.loopexit.unr-lcssa, label %.lr.ph211.preheader.new

.lr.ph211.preheader.new:                          ; preds = %.lr.ph211.preheader
  %unroll_iter = and i64 %wide.trip.count268, 2147483646
  br label %.lr.ph211

.lr.ph211:                                        ; preds = %.lr.ph211, %.lr.ph211.preheader.new
  %indvars.iv265 = phi i64 [ 0, %.lr.ph211.preheader.new ], [ %indvars.iv.next266.1, %.lr.ph211 ]
  %.0153208 = phi i32 [ 0, %.lr.ph211.preheader.new ], [ %141, %.lr.ph211 ]
  %niter = phi i64 [ 0, %.lr.ph211.preheader.new ], [ %niter.next.1, %.lr.ph211 ]
  %118 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv265
  %119 = load i32, ptr %118, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds i32, ptr %6, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !9
  %123 = sext i32 %122 to i64
  %124 = getelementptr i32, ptr %2, i64 %123
  %125 = getelementptr i8, ptr %124, i64 4
  %126 = load i32, ptr %125, align 4, !tbaa !9
  %127 = load i32, ptr %124, align 4, !tbaa !9
  %128 = add i32 %126, %.0153208
  %indvars.iv.next266 = or disjoint i64 %indvars.iv265, 1
  %129 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv.next266
  %130 = load i32, ptr %129, align 4, !tbaa !9
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds i32, ptr %6, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !9
  %134 = sext i32 %133 to i64
  %135 = getelementptr i32, ptr %2, i64 %134
  %136 = getelementptr i8, ptr %135, i64 4
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = load i32, ptr %135, align 4, !tbaa !9
  %139 = add i32 %128, %137
  %140 = add i32 %127, %138
  %141 = sub i32 %139, %140
  %indvars.iv.next266.1 = add nuw nsw i64 %indvars.iv265, 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_edge212.loopexit.unr-lcssa, label %.lr.ph211, !llvm.loop !29

._crit_edge212.loopexit.unr-lcssa:                ; preds = %.lr.ph211, %.lr.ph211.preheader
  %.lcssa.ph = phi i32 [ poison, %.lr.ph211.preheader ], [ %141, %.lr.ph211 ]
  %indvars.iv265.unr = phi i64 [ 0, %.lr.ph211.preheader ], [ %indvars.iv.next266.1, %.lr.ph211 ]
  %.0153208.unr = phi i32 [ 0, %.lr.ph211.preheader ], [ %141, %.lr.ph211 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge212.loopexit, label %.lr.ph211.epil

.lr.ph211.epil:                                   ; preds = %._crit_edge212.loopexit.unr-lcssa
  %142 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv265.unr
  %143 = load i32, ptr %142, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds i32, ptr %6, i64 %144
  %146 = load i32, ptr %145, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr i32, ptr %2, i64 %147
  %149 = getelementptr i8, ptr %148, i64 4
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = load i32, ptr %148, align 4, !tbaa !9
  %152 = add i32 %150, %.0153208.unr
  %153 = sub i32 %152, %151
  br label %._crit_edge212.loopexit

._crit_edge212.loopexit:                          ; preds = %._crit_edge212.loopexit.unr-lcssa, %.lr.ph211.epil
  %.lcssa = phi i32 [ %.lcssa.ph, %._crit_edge212.loopexit.unr-lcssa ], [ %153, %.lr.ph211.epil ]
  %154 = sext i32 %.lcssa to i64
  br label %._crit_edge212

._crit_edge212:                                   ; preds = %._crit_edge212.loopexit, %114
  %.0153.lcssa = phi i64 [ 0, %114 ], [ %154, %._crit_edge212.loopexit ]
  %155 = add nsw i32 %.0154.lcssa, 1
  %156 = sext i32 %155 to i64
  %157 = tail call ptr @libmetis__imalloc(i64 noundef %156, ptr noundef nonnull @.str.4) #5
  %158 = getelementptr inbounds i8, ptr %115, i64 16
  store ptr %157, ptr %158, align 8, !tbaa !30
  %159 = sext i32 %.0154.lcssa to i64
  %160 = tail call ptr @libmetis__ismalloc(i64 noundef %159, i32 noundef 0, ptr noundef nonnull @.str.5) #5
  %161 = getelementptr inbounds i8, ptr %115, i64 24
  store ptr %160, ptr %161, align 8, !tbaa !32
  %162 = tail call ptr @libmetis__imalloc(i64 noundef %.0153.lcssa, ptr noundef nonnull @.str.6) #5
  %163 = getelementptr inbounds i8, ptr %115, i64 40
  store ptr %162, ptr %163, align 8, !tbaa !33
  %164 = tail call ptr @libmetis__ismalloc(i64 noundef %.0153.lcssa, i32 noundef 1, ptr noundef nonnull @.str.7) #5
  %165 = getelementptr inbounds i8, ptr %115, i64 48
  store ptr %164, ptr %165, align 8, !tbaa !34
  %166 = tail call ptr @libmetis__iset(i64 noundef %11, i32 noundef -1, ptr noundef %12) #5
  store i32 0, ptr %157, align 4, !tbaa !9
  br i1 %116, label %.lr.ph233, label %._crit_edge234

.lr.ph233:                                        ; preds = %._crit_edge212
  %167 = icmp eq ptr %4, null
  %wide.trip.count290 = zext nneg i32 %.0154.lcssa to i64
  br i1 %167, label %.lr.ph233.split.us, label %.lr.ph233.split

.lr.ph233.split.us:                               ; preds = %.lr.ph233, %._crit_edge224.split.us.us
  %indvars.iv287 = phi i64 [ %indvars.iv.next288, %._crit_edge224.split.us.us ], [ 0, %.lr.ph233 ]
  %.4230.us = phi i32 [ %.5.lcssa.us, %._crit_edge224.split.us.us ], [ 0, %.lr.ph233 ]
  %168 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv287
  %169 = trunc nuw nsw i64 %indvars.iv287 to i32
  store i32 %169, ptr %168, align 4, !tbaa !9
  %170 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv287
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %indvars.iv.next288 = add nuw nsw i64 %indvars.iv287, 1
  %172 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv.next288
  %173 = load i32, ptr %172, align 4, !tbaa !9
  %174 = icmp slt i32 %171, %173
  br i1 %174, label %.lr.ph223.us, label %._crit_edge224.split.us.us

._crit_edge224.split.us.us:                       ; preds = %._crit_edge218.us.us, %.lr.ph233.split.us
  %.5.lcssa.us = phi i32 [ %.4230.us, %.lr.ph233.split.us ], [ %.6.lcssa.us.us, %._crit_edge218.us.us ]
  %175 = getelementptr inbounds i32, ptr %157, i64 %indvars.iv.next288
  store i32 %.5.lcssa.us, ptr %175, align 4, !tbaa !9
  %exitcond291.not = icmp eq i64 %indvars.iv.next288, %wide.trip.count290
  br i1 %exitcond291.not, label %._crit_edge234, label %.lr.ph233.split.us, !llvm.loop !35

.lr.ph223.us:                                     ; preds = %.lr.ph233.split.us
  %176 = getelementptr inbounds i32, ptr %160, i64 %indvars.iv287
  %177 = sext i32 %171 to i64
  br label %178

178:                                              ; preds = %._crit_edge218.us.us, %.lr.ph223.us
  %indvars.iv284 = phi i64 [ %indvars.iv.next285, %._crit_edge218.us.us ], [ %177, %.lr.ph223.us ]
  %.5220.us.us = phi i32 [ %.6.lcssa.us.us, %._crit_edge218.us.us ], [ %.4230.us, %.lr.ph223.us ]
  %179 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv284
  %180 = load i32, ptr %179, align 4, !tbaa !9
  %181 = load i32, ptr %176, align 4, !tbaa !9
  %182 = add nsw i32 %181, 1
  store i32 %182, ptr %176, align 4, !tbaa !9
  %183 = sext i32 %180 to i64
  %184 = getelementptr inbounds i32, ptr %2, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !9
  %186 = getelementptr i8, ptr %184, i64 4
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = icmp slt i32 %185, %187
  br i1 %188, label %.lr.ph217.us.us.preheader, label %._crit_edge218.us.us

.lr.ph217.us.us.preheader:                        ; preds = %178
  %189 = sext i32 %185 to i64
  br label %.lr.ph217.us.us

._crit_edge218.us.us:                             ; preds = %207, %178
  %.6.lcssa.us.us = phi i32 [ %.5220.us.us, %178 ], [ %.7.us.us, %207 ]
  %indvars.iv.next285 = add nsw i64 %indvars.iv284, 1
  %190 = load i32, ptr %172, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = icmp slt i64 %indvars.iv.next285, %191
  br i1 %192, label %178, label %._crit_edge224.split.us.us, !llvm.loop !36

.lr.ph217.us.us:                                  ; preds = %.lr.ph217.us.us.preheader, %207
  %193 = phi i32 [ %187, %.lr.ph217.us.us.preheader ], [ %208, %207 ]
  %indvars.iv281 = phi i64 [ %189, %.lr.ph217.us.us.preheader ], [ %indvars.iv.next282, %207 ]
  %.6215.us.us = phi i32 [ %.5220.us.us, %.lr.ph217.us.us.preheader ], [ %.7.us.us, %207 ]
  %194 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv281
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i32, ptr %13, i64 %196
  %198 = load i32, ptr %197, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i32, ptr %12, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = zext i32 %201 to i64
  %.not165.us.us = icmp eq i64 %indvars.iv287, %202
  br i1 %.not165.us.us, label %207, label %203

203:                                              ; preds = %.lr.ph217.us.us
  store i32 %169, ptr %200, align 4, !tbaa !9
  %204 = add nsw i32 %.6215.us.us, 1
  %205 = sext i32 %.6215.us.us to i64
  %206 = getelementptr inbounds i32, ptr %162, i64 %205
  store i32 %198, ptr %206, align 4, !tbaa !9
  %.pre292 = load i32, ptr %186, align 4, !tbaa !9
  br label %207

207:                                              ; preds = %203, %.lr.ph217.us.us
  %208 = phi i32 [ %.pre292, %203 ], [ %193, %.lr.ph217.us.us ]
  %.7.us.us = phi i32 [ %204, %203 ], [ %.6215.us.us, %.lr.ph217.us.us ]
  %indvars.iv.next282 = add nsw i64 %indvars.iv281, 1
  %209 = sext i32 %208 to i64
  %210 = icmp slt i64 %indvars.iv.next282, %209
  br i1 %210, label %.lr.ph217.us.us, label %._crit_edge218.us.us, !llvm.loop !37

.lr.ph233.split:                                  ; preds = %.lr.ph233, %._crit_edge224.split
  %indvars.iv276 = phi i64 [ %indvars.iv.next277, %._crit_edge224.split ], [ 0, %.lr.ph233 ]
  %.4230 = phi i32 [ %.5.lcssa, %._crit_edge224.split ], [ 0, %.lr.ph233 ]
  %211 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv276
  %212 = trunc nuw nsw i64 %indvars.iv276 to i32
  store i32 %212, ptr %211, align 4, !tbaa !9
  %213 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv276
  %214 = load i32, ptr %213, align 4, !tbaa !9
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %215 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv.next277
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = icmp slt i32 %214, %216
  br i1 %217, label %.lr.ph223, label %._crit_edge224.split

.lr.ph223:                                        ; preds = %.lr.ph233.split
  %218 = getelementptr inbounds i32, ptr %160, i64 %indvars.iv276
  %219 = sext i32 %214 to i64
  br label %220

220:                                              ; preds = %.lr.ph223, %._crit_edge218
  %indvars.iv273 = phi i64 [ %219, %.lr.ph223 ], [ %indvars.iv.next274, %._crit_edge218 ]
  %.5220 = phi i32 [ %.4230, %.lr.ph223 ], [ %.6.lcssa, %._crit_edge218 ]
  %221 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv273
  %222 = load i32, ptr %221, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %4, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !9
  %226 = load i32, ptr %218, align 4, !tbaa !9
  %227 = add nsw i32 %226, %225
  store i32 %227, ptr %218, align 4, !tbaa !9
  %228 = getelementptr inbounds i32, ptr %2, i64 %223
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = getelementptr i8, ptr %228, i64 4
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = icmp slt i32 %229, %231
  br i1 %232, label %.lr.ph217.preheader, label %._crit_edge218

.lr.ph217.preheader:                              ; preds = %220
  %233 = sext i32 %229 to i64
  br label %.lr.ph217

.lr.ph217:                                        ; preds = %.lr.ph217.preheader, %248
  %234 = phi i32 [ %231, %.lr.ph217.preheader ], [ %249, %248 ]
  %indvars.iv270 = phi i64 [ %233, %.lr.ph217.preheader ], [ %indvars.iv.next271, %248 ]
  %.6215 = phi i32 [ %.5220, %.lr.ph217.preheader ], [ %.7, %248 ]
  %235 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv270
  %236 = load i32, ptr %235, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i32, ptr %13, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %12, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = zext i32 %242 to i64
  %.not165 = icmp eq i64 %indvars.iv276, %243
  br i1 %.not165, label %248, label %244

244:                                              ; preds = %.lr.ph217
  store i32 %212, ptr %241, align 4, !tbaa !9
  %245 = add nsw i32 %.6215, 1
  %246 = sext i32 %.6215 to i64
  %247 = getelementptr inbounds i32, ptr %162, i64 %246
  store i32 %239, ptr %247, align 4, !tbaa !9
  %.pre = load i32, ptr %230, align 4, !tbaa !9
  br label %248

248:                                              ; preds = %.lr.ph217, %244
  %249 = phi i32 [ %.pre, %244 ], [ %234, %.lr.ph217 ]
  %.7 = phi i32 [ %245, %244 ], [ %.6215, %.lr.ph217 ]
  %indvars.iv.next271 = add nsw i64 %indvars.iv270, 1
  %250 = sext i32 %249 to i64
  %251 = icmp slt i64 %indvars.iv.next271, %250
  br i1 %251, label %.lr.ph217, label %._crit_edge218, !llvm.loop !37

._crit_edge218:                                   ; preds = %248, %220
  %.6.lcssa = phi i32 [ %.5220, %220 ], [ %.7, %248 ]
  %indvars.iv.next274 = add nsw i64 %indvars.iv273, 1
  %252 = load i32, ptr %215, align 4, !tbaa !9
  %253 = sext i32 %252 to i64
  %254 = icmp slt i64 %indvars.iv.next274, %253
  br i1 %254, label %220, label %._crit_edge224.split, !llvm.loop !36

._crit_edge224.split:                             ; preds = %._crit_edge218, %.lr.ph233.split
  %.5.lcssa = phi i32 [ %.4230, %.lr.ph233.split ], [ %.6.lcssa, %._crit_edge218 ]
  %255 = getelementptr inbounds i32, ptr %157, i64 %indvars.iv.next277
  store i32 %.5.lcssa, ptr %255, align 4, !tbaa !9
  %exitcond280.not = icmp eq i64 %indvars.iv.next277, %wide.trip.count290
  br i1 %exitcond280.not, label %._crit_edge234, label %.lr.ph233.split, !llvm.loop !35

._crit_edge234:                                   ; preds = %._crit_edge224.split, %._crit_edge224.split.us.us, %._crit_edge212
  %.4.lcssa = phi i32 [ 0, %._crit_edge212 ], [ %.5.lcssa.us, %._crit_edge224.split.us.us ], [ %.5.lcssa, %._crit_edge224.split ]
  store i32 %.0154.lcssa, ptr %115, align 8, !tbaa !38
  %256 = getelementptr inbounds i8, ptr %115, i64 4
  store i32 %.4.lcssa, ptr %256, align 4, !tbaa !39
  %257 = getelementptr inbounds i8, ptr %115, i64 8
  store i32 1, ptr %257, align 8, !tbaa !40
  tail call void @libmetis__SetupGraph_tvwgt(ptr noundef nonnull %115) #5
  tail call void @libmetis__SetupGraph_label(ptr noundef nonnull %115) #5
  br label %258

258:                                              ; preds = %._crit_edge234, %109
  %.0 = phi ptr [ %115, %._crit_edge234 ], [ null, %109 ]
  call void (ptr, ...) @gk_free(ptr noundef nonnull %10, ptr noundef nonnull %9, ptr noundef nonnull %8, 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
  ret ptr %.0
}

; 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

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

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

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

declare ptr @libmetis__CreateGraph() local_unnamed_addr #2

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

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

declare void @libmetis__SetupGraph_tvwgt(ptr noundef) local_unnamed_addr #2

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

; 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 = { "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 = { 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, !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 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !14, !13}
!16 = !{!17, !10, i64 0}
!17 = !{!"", !10, i64 0, !10, i64 4}
!18 = !{!17, !10, i64 4}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = !{!25, !10, i64 8}
!25 = !{!"ctrl_t", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !26, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !26, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !27, i64 168, !27, i64 176, !27, i64 184, !27, i64 192, !27, i64 200, !27, i64 208, !27, i64 216, !27, i64 224, !6, i64 232, !28, i64 240, !28, i64 248, !28, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320}
!26 = !{!"float", !7, i64 0}
!27 = !{!"double", !7, i64 0}
!28 = !{!"long", !7, i64 0}
!29 = distinct !{!29, !12}
!30 = !{!31, !6, i64 16}
!31 = !{!"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}
!32 = !{!31, !6, i64 24}
!33 = !{!31, !6, i64 40}
!34 = !{!31, !6, i64 48}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}
!38 = !{!31, !10, i64 0}
!39 = !{!31, !10, i64 4}
!40 = !{!31, !10, i64 8}


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