; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis/compress.ll_libmetis (CompressGraph)

; 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.KeyValueType = type { i64, i64 }
%struct.graphdef = type { i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, 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 [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 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 [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [22 x i8], align 1

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

37:                                               ; preds = %77, %7
  %38 = load i64, ptr %15, align 8, !tbaa !9
  %39 = load i64, ptr %10, align 8, !tbaa !9
  %40 = icmp slt i64 %38, %39
  br i1 %40, label %41, label %80

41:                                               ; preds = %37
  store i64 0, ptr %20, align 8, !tbaa !9
  %42 = load ptr, ptr %11, align 8, !tbaa !5
  %43 = load i64, ptr %15, align 8, !tbaa !9
  %44 = getelementptr inbounds i64, ptr %42, i64 %43
  %45 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %45, ptr %18, align 8, !tbaa !9
  br label %46

46:                                               ; preds = %61, %41
  %47 = load i64, ptr %18, align 8, !tbaa !9
  %48 = load ptr, ptr %11, align 8, !tbaa !5
  %49 = load i64, ptr %15, align 8, !tbaa !9
  %50 = add nsw i64 %49, 1
  %51 = getelementptr inbounds i64, ptr %48, i64 %50
  %52 = load i64, ptr %51, align 8, !tbaa !9
  %53 = icmp slt i64 %47, %52
  br i1 %53, label %54, label %64

54:                                               ; preds = %46
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  %56 = load i64, ptr %18, align 8, !tbaa !9
  %57 = getelementptr inbounds i64, ptr %55, i64 %56
  %58 = load i64, ptr %57, align 8, !tbaa !9
  %59 = load i64, ptr %20, align 8, !tbaa !9
  %60 = add nsw i64 %59, %58
  store i64 %60, ptr %20, align 8, !tbaa !9
  br label %61

61:                                               ; preds = %54
  %62 = load i64, ptr %18, align 8, !tbaa !9
  %63 = add nsw i64 %62, 1
  store i64 %63, ptr %18, align 8, !tbaa !9
  br label %46, !llvm.loop !11

64:                                               ; preds = %46
  %65 = load i64, ptr %20, align 8, !tbaa !9
  %66 = load i64, ptr %15, align 8, !tbaa !9
  %67 = add nsw i64 %65, %66
  %68 = load ptr, ptr %29, align 8, !tbaa !5
  %69 = load i64, ptr %15, align 8, !tbaa !9
  %70 = getelementptr inbounds %struct.KeyValueType, ptr %68, i64 %69
  %71 = getelementptr inbounds %struct.KeyValueType, ptr %70, i32 0, i32 0
  store i64 %67, ptr %71, align 8, !tbaa !13
  %72 = load i64, ptr %15, align 8, !tbaa !9
  %73 = load ptr, ptr %29, align 8, !tbaa !5
  %74 = load i64, ptr %15, align 8, !tbaa !9
  %75 = getelementptr inbounds %struct.KeyValueType, ptr %73, i64 %74
  %76 = getelementptr inbounds %struct.KeyValueType, ptr %75, i32 0, i32 1
  store i64 %72, ptr %76, align 8, !tbaa !15
  br label %77

77:                                               ; preds = %64
  %78 = load i64, ptr %15, align 8, !tbaa !9
  %79 = add nsw i64 %78, 1
  store i64 %79, ptr %15, align 8, !tbaa !9
  br label %37, !llvm.loop !16

80:                                               ; preds = %37
  %81 = load i64, ptr %10, align 8, !tbaa !9
  %82 = load ptr, ptr %29, align 8, !tbaa !5
  call void @libmetis__ikeysort(i64 noundef %81, ptr noundef %82)
  %83 = load ptr, ptr %13, align 8, !tbaa !5
  %84 = getelementptr inbounds i64, ptr %83, i64 0
  store i64 0, ptr %84, align 8, !tbaa !9
  store i64 0, ptr %21, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !9
  store i64 0, ptr %22, align 8, !tbaa !9
  br label %85

85:                                               ; preds = %248, %80
  %86 = load i64, ptr %15, align 8, !tbaa !9
  %87 = load i64, ptr %10, align 8, !tbaa !9
  %88 = icmp slt i64 %86, %87
  br i1 %88, label %89, label %251

89:                                               ; preds = %85
  %90 = load ptr, ptr %29, align 8, !tbaa !5
  %91 = load i64, ptr %15, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.KeyValueType, ptr %90, i64 %91
  %93 = getelementptr inbounds %struct.KeyValueType, ptr %92, i32 0, i32 1
  %94 = load i64, ptr %93, align 8, !tbaa !15
  store i64 %94, ptr %16, align 8, !tbaa !9
  %95 = load ptr, ptr %28, align 8, !tbaa !5
  %96 = load i64, ptr %16, align 8, !tbaa !9
  %97 = getelementptr inbounds i64, ptr %95, i64 %96
  %98 = load i64, ptr %97, align 8, !tbaa !9
  %99 = icmp eq i64 %98, -1
  br i1 %99, label %100, label %247

100:                                              ; preds = %89
  %101 = load i64, ptr %15, align 8, !tbaa !9
  %102 = load ptr, ptr %27, align 8, !tbaa !5
  %103 = load i64, ptr %16, align 8, !tbaa !9
  %104 = getelementptr inbounds i64, ptr %102, i64 %103
  store i64 %101, ptr %104, align 8, !tbaa !9
  %105 = load ptr, ptr %11, align 8, !tbaa !5
  %106 = load i64, ptr %16, align 8, !tbaa !9
  %107 = getelementptr inbounds i64, ptr %105, i64 %106
  %108 = load i64, ptr %107, align 8, !tbaa !9
  store i64 %108, ptr %18, align 8, !tbaa !9
  br label %109

109:                                              ; preds = %125, %100
  %110 = load i64, ptr %18, align 8, !tbaa !9
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = load i64, ptr %16, align 8, !tbaa !9
  %113 = add nsw i64 %112, 1
  %114 = getelementptr inbounds i64, ptr %111, i64 %113
  %115 = load i64, ptr %114, align 8, !tbaa !9
  %116 = icmp slt i64 %110, %115
  br i1 %116, label %117, label %128

117:                                              ; preds = %109
  %118 = load i64, ptr %15, align 8, !tbaa !9
  %119 = load ptr, ptr %27, align 8, !tbaa !5
  %120 = load ptr, ptr %12, align 8, !tbaa !5
  %121 = load i64, ptr %18, align 8, !tbaa !9
  %122 = getelementptr inbounds i64, ptr %120, i64 %121
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = getelementptr inbounds i64, ptr %119, i64 %123
  store i64 %118, ptr %124, align 8, !tbaa !9
  br label %125

125:                                              ; preds = %117
  %126 = load i64, ptr %18, align 8, !tbaa !9
  %127 = add nsw i64 %126, 1
  store i64 %127, ptr %18, align 8, !tbaa !9
  br label %109, !llvm.loop !17

128:                                              ; preds = %109
  %129 = load i64, ptr %16, align 8, !tbaa !9
  %130 = load ptr, ptr %14, align 8, !tbaa !5
  %131 = load i64, ptr %21, align 8, !tbaa !9
  %132 = add nsw i64 %131, 1
  store i64 %132, ptr %21, align 8, !tbaa !9
  %133 = getelementptr inbounds i64, ptr %130, i64 %131
  store i64 %129, ptr %133, align 8, !tbaa !9
  %134 = load i64, ptr %22, align 8, !tbaa !9
  %135 = load ptr, ptr %28, align 8, !tbaa !5
  %136 = load i64, ptr %16, align 8, !tbaa !9
  %137 = getelementptr inbounds i64, ptr %135, i64 %136
  store i64 %134, ptr %137, align 8, !tbaa !9
  %138 = load i64, ptr %15, align 8, !tbaa !9
  %139 = add nsw i64 %138, 1
  store i64 %139, ptr %18, align 8, !tbaa !9
  br label %140

140:                                              ; preds = %238, %128
  %141 = load i64, ptr %18, align 8, !tbaa !9
  %142 = load i64, ptr %10, align 8, !tbaa !9
  %143 = icmp slt i64 %141, %142
  br i1 %143, label %144, label %241

144:                                              ; preds = %140
  %145 = load ptr, ptr %29, align 8, !tbaa !5
  %146 = load i64, ptr %18, align 8, !tbaa !9
  %147 = getelementptr inbounds %struct.KeyValueType, ptr %145, i64 %146
  %148 = getelementptr inbounds %struct.KeyValueType, ptr %147, i32 0, i32 1
  %149 = load i64, ptr %148, align 8, !tbaa !15
  store i64 %149, ptr %17, align 8, !tbaa !9
  %150 = load ptr, ptr %29, align 8, !tbaa !5
  %151 = load i64, ptr %15, align 8, !tbaa !9
  %152 = getelementptr inbounds %struct.KeyValueType, ptr %150, i64 %151
  %153 = getelementptr inbounds %struct.KeyValueType, ptr %152, i32 0, i32 0
  %154 = load i64, ptr %153, align 8, !tbaa !13
  %155 = load ptr, ptr %29, align 8, !tbaa !5
  %156 = load i64, ptr %18, align 8, !tbaa !9
  %157 = getelementptr inbounds %struct.KeyValueType, ptr %155, i64 %156
  %158 = getelementptr inbounds %struct.KeyValueType, ptr %157, i32 0, i32 0
  %159 = load i64, ptr %158, align 8, !tbaa !13
  %160 = icmp ne i64 %154, %159
  br i1 %160, label %183, label %161

161:                                              ; preds = %144
  %162 = load ptr, ptr %11, align 8, !tbaa !5
  %163 = load i64, ptr %16, align 8, !tbaa !9
  %164 = add nsw i64 %163, 1
  %165 = getelementptr inbounds i64, ptr %162, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = load ptr, ptr %11, align 8, !tbaa !5
  %168 = load i64, ptr %16, align 8, !tbaa !9
  %169 = getelementptr inbounds i64, ptr %167, i64 %168
  %170 = load i64, ptr %169, align 8, !tbaa !9
  %171 = sub nsw i64 %166, %170
  %172 = load ptr, ptr %11, align 8, !tbaa !5
  %173 = load i64, ptr %17, align 8, !tbaa !9
  %174 = add nsw i64 %173, 1
  %175 = getelementptr inbounds i64, ptr %172, i64 %174
  %176 = load i64, ptr %175, align 8, !tbaa !9
  %177 = load ptr, ptr %11, align 8, !tbaa !5
  %178 = load i64, ptr %17, align 8, !tbaa !9
  %179 = getelementptr inbounds i64, ptr %177, i64 %178
  %180 = load i64, ptr %179, align 8, !tbaa !9
  %181 = sub nsw i64 %176, %180
  %182 = icmp ne i64 %171, %181
  br i1 %182, label %183, label %184

183:                                              ; preds = %161, %144
  br label %241

184:                                              ; preds = %161
  %185 = load ptr, ptr %28, align 8, !tbaa !5
  %186 = load i64, ptr %17, align 8, !tbaa !9
  %187 = getelementptr inbounds i64, ptr %185, i64 %186
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = icmp eq i64 %188, -1
  br i1 %189, label %190, label %237

190:                                              ; preds = %184
  %191 = load ptr, ptr %11, align 8, !tbaa !5
  %192 = load i64, ptr %17, align 8, !tbaa !9
  %193 = getelementptr inbounds i64, ptr %191, i64 %192
  %194 = load i64, ptr %193, align 8, !tbaa !9
  store i64 %194, ptr %19, align 8, !tbaa !9
  br label %195

195:                                              ; preds = %215, %190
  %196 = load i64, ptr %19, align 8, !tbaa !9
  %197 = load ptr, ptr %11, align 8, !tbaa !5
  %198 = load i64, ptr %17, align 8, !tbaa !9
  %199 = add nsw i64 %198, 1
  %200 = getelementptr inbounds i64, ptr %197, i64 %199
  %201 = load i64, ptr %200, align 8, !tbaa !9
  %202 = icmp slt i64 %196, %201
  br i1 %202, label %203, label %218

203:                                              ; preds = %195
  %204 = load ptr, ptr %27, align 8, !tbaa !5
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = load i64, ptr %19, align 8, !tbaa !9
  %207 = getelementptr inbounds i64, ptr %205, i64 %206
  %208 = load i64, ptr %207, align 8, !tbaa !9
  %209 = getelementptr inbounds i64, ptr %204, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !9
  %211 = load i64, ptr %15, align 8, !tbaa !9
  %212 = icmp ne i64 %210, %211
  br i1 %212, label %213, label %214

213:                                              ; preds = %203
  br label %218

214:                                              ; preds = %203
  br label %215

215:                                              ; preds = %214
  %216 = load i64, ptr %19, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %19, align 8, !tbaa !9
  br label %195, !llvm.loop !18

218:                                              ; preds = %213, %195
  %219 = load i64, ptr %19, align 8, !tbaa !9
  %220 = load ptr, ptr %11, align 8, !tbaa !5
  %221 = load i64, ptr %17, align 8, !tbaa !9
  %222 = add nsw i64 %221, 1
  %223 = getelementptr inbounds i64, ptr %220, i64 %222
  %224 = load i64, ptr %223, align 8, !tbaa !9
  %225 = icmp eq i64 %219, %224
  br i1 %225, label %226, label %236

226:                                              ; preds = %218
  %227 = load i64, ptr %22, align 8, !tbaa !9
  %228 = load ptr, ptr %28, align 8, !tbaa !5
  %229 = load i64, ptr %17, align 8, !tbaa !9
  %230 = getelementptr inbounds i64, ptr %228, i64 %229
  store i64 %227, ptr %230, align 8, !tbaa !9
  %231 = load i64, ptr %17, align 8, !tbaa !9
  %232 = load ptr, ptr %14, align 8, !tbaa !5
  %233 = load i64, ptr %21, align 8, !tbaa !9
  %234 = add nsw i64 %233, 1
  store i64 %234, ptr %21, align 8, !tbaa !9
  %235 = getelementptr inbounds i64, ptr %232, i64 %233
  store i64 %231, ptr %235, align 8, !tbaa !9
  br label %236

236:                                              ; preds = %226, %218
  br label %237

237:                                              ; preds = %236, %184
  br label %238

238:                                              ; preds = %237
  %239 = load i64, ptr %18, align 8, !tbaa !9
  %240 = add nsw i64 %239, 1
  store i64 %240, ptr %18, align 8, !tbaa !9
  br label %140, !llvm.loop !19

241:                                              ; preds = %183, %140
  %242 = load i64, ptr %21, align 8, !tbaa !9
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = load i64, ptr %22, align 8, !tbaa !9
  %245 = add nsw i64 %244, 1
  store i64 %245, ptr %22, align 8, !tbaa !9
  %246 = getelementptr inbounds i64, ptr %243, i64 %245
  store i64 %242, ptr %246, align 8, !tbaa !9
  br label %247

247:                                              ; preds = %241, %89
  br label %248

248:                                              ; preds = %247
  %249 = load i64, ptr %15, align 8, !tbaa !9
  %250 = add nsw i64 %249, 1
  store i64 %250, ptr %15, align 8, !tbaa !9
  br label %85, !llvm.loop !20

251:                                              ; preds = %85
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  call void @libmetis__InitGraph(ptr noundef %252)
  %253 = load i64, ptr %22, align 8, !tbaa !9
  %254 = sitofp i64 %253 to double
  %255 = load i64, ptr %10, align 8, !tbaa !9
  %256 = sitofp i64 %255 to double
  %257 = fmul double 8.500000e-01, %256
  %258 = fcmp oge double %254, %257
  br i1 %258, label %259, label %354

259:                                              ; preds = %251
  %260 = load i64, ptr %10, align 8, !tbaa !9
  %261 = load ptr, ptr %9, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.graphdef, ptr %261, i32 0, i32 0
  store i64 %260, ptr %262, align 8, !tbaa !21
  %263 = load ptr, ptr %11, align 8, !tbaa !5
  %264 = load i64, ptr %10, align 8, !tbaa !9
  %265 = getelementptr inbounds i64, ptr %263, i64 %264
  %266 = load i64, ptr %265, align 8, !tbaa !9
  %267 = load ptr, ptr %9, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.graphdef, ptr %267, i32 0, i32 1
  store i64 %266, ptr %268, align 8, !tbaa !24
  %269 = load ptr, ptr %9, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.graphdef, ptr %269, i32 0, i32 28
  store i64 1, ptr %270, align 8, !tbaa !25
  %271 = load ptr, ptr %11, align 8, !tbaa !5
  %272 = load ptr, ptr %9, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.graphdef, ptr %272, i32 0, i32 2
  store ptr %271, ptr %273, align 8, !tbaa !26
  %274 = load ptr, ptr %9, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.graphdef, ptr %274, i32 0, i32 7
  store i32 0, ptr %275, align 8, !tbaa !27
  %276 = load ptr, ptr %12, align 8, !tbaa !5
  %277 = load ptr, ptr %9, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.graphdef, ptr %277, i32 0, i32 5
  store ptr %276, ptr %278, align 8, !tbaa !28
  %279 = load ptr, ptr %9, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.graphdef, ptr %279, i32 0, i32 10
  store i32 0, ptr %280, align 4, !tbaa !29
  %281 = load i64, ptr %10, align 8, !tbaa !9
  %282 = call ptr @libmetis__idxmalloc(i64 noundef %281, ptr noundef @.str.3)
  %283 = load ptr, ptr %9, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.graphdef, ptr %283, i32 0, i32 3
  store ptr %282, ptr %284, align 8, !tbaa !30
  %285 = load i64, ptr %10, align 8, !tbaa !9
  %286 = call ptr @libmetis__idxmalloc(i64 noundef %285, ptr noundef @.str.4)
  %287 = load ptr, ptr %9, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.graphdef, ptr %287, i32 0, i32 13
  store ptr %286, ptr %288, align 8, !tbaa !31
  %289 = load i64, ptr %10, align 8, !tbaa !9
  %290 = call ptr @libmetis__idxmalloc(i64 noundef %289, ptr noundef @.str.5)
  %291 = load ptr, ptr %9, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.graphdef, ptr %291, i32 0, i32 15
  store ptr %290, ptr %292, align 8, !tbaa !32
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.graphdef, ptr %293, i32 0, i32 1
  %295 = load i64, ptr %294, align 8, !tbaa !24
  %296 = call ptr @libmetis__idxmalloc(i64 noundef %295, ptr noundef @.str.6)
  %297 = load ptr, ptr %9, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.graphdef, ptr %297, i32 0, i32 6
  store ptr %296, ptr %298, align 8, !tbaa !33
  %299 = load i64, ptr %10, align 8, !tbaa !9
  %300 = load ptr, ptr %9, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.graphdef, ptr %300, i32 0, i32 3
  %302 = load ptr, ptr %301, align 8, !tbaa !30
  %303 = call ptr @libmetis__idxset(i64 noundef %299, i64 noundef 1, ptr noundef %302)
  %304 = load ptr, ptr %9, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.graphdef, ptr %304, i32 0, i32 1
  %306 = load i64, ptr %305, align 8, !tbaa !24
  %307 = load ptr, ptr %9, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.graphdef, ptr %307, i32 0, i32 6
  %309 = load ptr, ptr %308, align 8, !tbaa !33
  %310 = call ptr @libmetis__idxset(i64 noundef %306, i64 noundef 1, ptr noundef %309)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %311

311:                                              ; preds = %331, %259
  %312 = load i64, ptr %15, align 8, !tbaa !9
  %313 = load i64, ptr %10, align 8, !tbaa !9
  %314 = icmp slt i64 %312, %313
  br i1 %314, label %315, label %334

315:                                              ; preds = %311
  %316 = load ptr, ptr %11, align 8, !tbaa !5
  %317 = load i64, ptr %15, align 8, !tbaa !9
  %318 = add nsw i64 %317, 1
  %319 = getelementptr inbounds i64, ptr %316, i64 %318
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = load ptr, ptr %11, align 8, !tbaa !5
  %322 = load i64, ptr %15, align 8, !tbaa !9
  %323 = getelementptr inbounds i64, ptr %321, i64 %322
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = sub nsw i64 %320, %324
  %326 = load ptr, ptr %9, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.graphdef, ptr %326, i32 0, i32 13
  %328 = load ptr, ptr %327, align 8, !tbaa !31
  %329 = load i64, ptr %15, align 8, !tbaa !9
  %330 = getelementptr inbounds i64, ptr %328, i64 %329
  store i64 %325, ptr %330, align 8, !tbaa !9
  br label %331

331:                                              ; preds = %315
  %332 = load i64, ptr %15, align 8, !tbaa !9
  %333 = add nsw i64 %332, 1
  store i64 %333, ptr %15, align 8, !tbaa !9
  br label %311, !llvm.loop !34

334:                                              ; preds = %311
  %335 = load i64, ptr %10, align 8, !tbaa !9
  %336 = call ptr @libmetis__idxmalloc(i64 noundef %335, ptr noundef @.str.7)
  %337 = load ptr, ptr %9, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.graphdef, ptr %337, i32 0, i32 14
  store ptr %336, ptr %338, align 8, !tbaa !35
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %339

339:                                              ; preds = %350, %334
  %340 = load i64, ptr %15, align 8, !tbaa !9
  %341 = load i64, ptr %10, align 8, !tbaa !9
  %342 = icmp slt i64 %340, %341
  br i1 %342, label %343, label %353

343:                                              ; preds = %339
  %344 = load i64, ptr %15, align 8, !tbaa !9
  %345 = load ptr, ptr %9, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.graphdef, ptr %345, i32 0, i32 14
  %347 = load ptr, ptr %346, align 8, !tbaa !35
  %348 = load i64, ptr %15, align 8, !tbaa !9
  %349 = getelementptr inbounds i64, ptr %347, i64 %348
  store i64 %344, ptr %349, align 8, !tbaa !9
  br label %350

350:                                              ; preds = %343
  %351 = load i64, ptr %15, align 8, !tbaa !9
  %352 = add nsw i64 %351, 1
  store i64 %352, ptr %15, align 8, !tbaa !9
  br label %339, !llvm.loop !36

353:                                              ; preds = %339
  br label %564

354:                                              ; preds = %251
  store i64 0, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %355

355:                                              ; preds = %379, %354
  %356 = load i64, ptr %15, align 8, !tbaa !9
  %357 = load i64, ptr %22, align 8, !tbaa !9
  %358 = icmp slt i64 %356, %357
  br i1 %358, label %359, label %382

359:                                              ; preds = %355
  %360 = load ptr, ptr %14, align 8, !tbaa !5
  %361 = load ptr, ptr %13, align 8, !tbaa !5
  %362 = load i64, ptr %15, align 8, !tbaa !9
  %363 = getelementptr inbounds i64, ptr %361, i64 %362
  %364 = load i64, ptr %363, align 8, !tbaa !9
  %365 = getelementptr inbounds i64, ptr %360, i64 %364
  %366 = load i64, ptr %365, align 8, !tbaa !9
  store i64 %366, ptr %16, align 8, !tbaa !9
  %367 = load ptr, ptr %11, align 8, !tbaa !5
  %368 = load i64, ptr %16, align 8, !tbaa !9
  %369 = add nsw i64 %368, 1
  %370 = getelementptr inbounds i64, ptr %367, i64 %369
  %371 = load i64, ptr %370, align 8, !tbaa !9
  %372 = load ptr, ptr %11, align 8, !tbaa !5
  %373 = load i64, ptr %16, align 8, !tbaa !9
  %374 = getelementptr inbounds i64, ptr %372, i64 %373
  %375 = load i64, ptr %374, align 8, !tbaa !9
  %376 = sub nsw i64 %371, %375
  %377 = load i64, ptr %23, align 8, !tbaa !9
  %378 = add nsw i64 %377, %376
  store i64 %378, ptr %23, align 8, !tbaa !9
  br label %379

379:                                              ; preds = %359
  %380 = load i64, ptr %15, align 8, !tbaa !9
  %381 = add nsw i64 %380, 1
  store i64 %381, ptr %15, align 8, !tbaa !9
  br label %355, !llvm.loop !37

382:                                              ; preds = %355
  %383 = load i64, ptr %22, align 8, !tbaa !9
  %384 = add nsw i64 %383, 1
  %385 = call ptr @libmetis__idxmalloc(i64 noundef %384, ptr noundef @.str.8)
  %386 = load ptr, ptr %9, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.graphdef, ptr %386, i32 0, i32 2
  store ptr %385, ptr %387, align 8, !tbaa !26
  store ptr %385, ptr %24, align 8, !tbaa !5
  %388 = load i64, ptr %22, align 8, !tbaa !9
  %389 = call ptr @libmetis__idxmalloc(i64 noundef %388, ptr noundef @.str.3)
  %390 = load ptr, ptr %9, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.graphdef, ptr %390, i32 0, i32 3
  store ptr %389, ptr %391, align 8, !tbaa !30
  store ptr %389, ptr %26, align 8, !tbaa !5
  %392 = load i64, ptr %22, align 8, !tbaa !9
  %393 = call ptr @libmetis__idxmalloc(i64 noundef %392, ptr noundef @.str.4)
  %394 = load ptr, ptr %9, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.graphdef, ptr %394, i32 0, i32 13
  store ptr %393, ptr %395, align 8, !tbaa !31
  %396 = load i64, ptr %22, align 8, !tbaa !9
  %397 = call ptr @libmetis__idxmalloc(i64 noundef %396, ptr noundef @.str.5)
  %398 = load ptr, ptr %9, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.graphdef, ptr %398, i32 0, i32 15
  store ptr %397, ptr %399, align 8, !tbaa !32
  %400 = load i64, ptr %23, align 8, !tbaa !9
  %401 = call ptr @libmetis__idxmalloc(i64 noundef %400, ptr noundef @.str.9)
  %402 = load ptr, ptr %9, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.graphdef, ptr %402, i32 0, i32 5
  store ptr %401, ptr %403, align 8, !tbaa !28
  store ptr %401, ptr %25, align 8, !tbaa !5
  %404 = load i64, ptr %23, align 8, !tbaa !9
  %405 = call ptr @libmetis__idxmalloc(i64 noundef %404, ptr noundef @.str.6)
  %406 = load ptr, ptr %9, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.graphdef, ptr %406, i32 0, i32 6
  store ptr %405, ptr %407, align 8, !tbaa !33
  %408 = load i64, ptr %10, align 8, !tbaa !9
  %409 = load ptr, ptr %27, align 8, !tbaa !5
  %410 = call ptr @libmetis__idxset(i64 noundef %408, i64 noundef -1, ptr noundef %409)
  %411 = load ptr, ptr %24, align 8, !tbaa !5
  %412 = getelementptr inbounds i64, ptr %411, i64 0
  store i64 0, ptr %412, align 8, !tbaa !9
  store i64 0, ptr %21, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %502, %382
  %414 = load i64, ptr %15, align 8, !tbaa !9
  %415 = load i64, ptr %22, align 8, !tbaa !9
  %416 = icmp slt i64 %414, %415
  br i1 %416, label %417, label %505

417:                                              ; preds = %413
  %418 = load ptr, ptr %13, align 8, !tbaa !5
  %419 = load i64, ptr %15, align 8, !tbaa !9
  %420 = add nsw i64 %419, 1
  %421 = getelementptr inbounds i64, ptr %418, i64 %420
  %422 = load i64, ptr %421, align 8, !tbaa !9
  %423 = load ptr, ptr %13, align 8, !tbaa !5
  %424 = load i64, ptr %15, align 8, !tbaa !9
  %425 = getelementptr inbounds i64, ptr %423, i64 %424
  %426 = load i64, ptr %425, align 8, !tbaa !9
  %427 = sub nsw i64 %422, %426
  %428 = load ptr, ptr %26, align 8, !tbaa !5
  %429 = load i64, ptr %15, align 8, !tbaa !9
  %430 = getelementptr inbounds i64, ptr %428, i64 %429
  store i64 %427, ptr %430, align 8, !tbaa !9
  %431 = load i64, ptr %15, align 8, !tbaa !9
  %432 = load ptr, ptr %27, align 8, !tbaa !5
  %433 = load i64, ptr %15, align 8, !tbaa !9
  %434 = getelementptr inbounds i64, ptr %432, i64 %433
  store i64 %431, ptr %434, align 8, !tbaa !9
  %435 = load ptr, ptr %13, align 8, !tbaa !5
  %436 = load i64, ptr %15, align 8, !tbaa !9
  %437 = getelementptr inbounds i64, ptr %435, i64 %436
  %438 = load i64, ptr %437, align 8, !tbaa !9
  store i64 %438, ptr %18, align 8, !tbaa !9
  br label %439

439:                                              ; preds = %493, %417
  %440 = load i64, ptr %18, align 8, !tbaa !9
  %441 = load ptr, ptr %13, align 8, !tbaa !5
  %442 = load i64, ptr %15, align 8, !tbaa !9
  %443 = add nsw i64 %442, 1
  %444 = getelementptr inbounds i64, ptr %441, i64 %443
  %445 = load i64, ptr %444, align 8, !tbaa !9
  %446 = icmp slt i64 %440, %445
  br i1 %446, label %447, label %496

447:                                              ; preds = %439
  %448 = load ptr, ptr %14, align 8, !tbaa !5
  %449 = load i64, ptr %18, align 8, !tbaa !9
  %450 = getelementptr inbounds i64, ptr %448, i64 %449
  %451 = load i64, ptr %450, align 8, !tbaa !9
  store i64 %451, ptr %16, align 8, !tbaa !9
  %452 = load ptr, ptr %11, align 8, !tbaa !5
  %453 = load i64, ptr %16, align 8, !tbaa !9
  %454 = getelementptr inbounds i64, ptr %452, i64 %453
  %455 = load i64, ptr %454, align 8, !tbaa !9
  store i64 %455, ptr %19, align 8, !tbaa !9
  br label %456

456:                                              ; preds = %489, %447
  %457 = load i64, ptr %19, align 8, !tbaa !9
  %458 = load ptr, ptr %11, align 8, !tbaa !5
  %459 = load i64, ptr %16, align 8, !tbaa !9
  %460 = add nsw i64 %459, 1
  %461 = getelementptr inbounds i64, ptr %458, i64 %460
  %462 = load i64, ptr %461, align 8, !tbaa !9
  %463 = icmp slt i64 %457, %462
  br i1 %463, label %464, label %492

464:                                              ; preds = %456
  %465 = load ptr, ptr %28, align 8, !tbaa !5
  %466 = load ptr, ptr %12, align 8, !tbaa !5
  %467 = load i64, ptr %19, align 8, !tbaa !9
  %468 = getelementptr inbounds i64, ptr %466, i64 %467
  %469 = load i64, ptr %468, align 8, !tbaa !9
  %470 = getelementptr inbounds i64, ptr %465, i64 %469
  %471 = load i64, ptr %470, align 8, !tbaa !9
  store i64 %471, ptr %20, align 8, !tbaa !9
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = load i64, ptr %20, align 8, !tbaa !9
  %474 = getelementptr inbounds i64, ptr %472, i64 %473
  %475 = load i64, ptr %474, align 8, !tbaa !9
  %476 = load i64, ptr %15, align 8, !tbaa !9
  %477 = icmp ne i64 %475, %476
  br i1 %477, label %478, label %484

478:                                              ; preds = %464
  %479 = load i64, ptr %20, align 8, !tbaa !9
  %480 = load ptr, ptr %25, align 8, !tbaa !5
  %481 = load i64, ptr %21, align 8, !tbaa !9
  %482 = add nsw i64 %481, 1
  store i64 %482, ptr %21, align 8, !tbaa !9
  %483 = getelementptr inbounds i64, ptr %480, i64 %481
  store i64 %479, ptr %483, align 8, !tbaa !9
  br label %484

484:                                              ; preds = %478, %464
  %485 = load i64, ptr %15, align 8, !tbaa !9
  %486 = load ptr, ptr %27, align 8, !tbaa !5
  %487 = load i64, ptr %20, align 8, !tbaa !9
  %488 = getelementptr inbounds i64, ptr %486, i64 %487
  store i64 %485, ptr %488, align 8, !tbaa !9
  br label %489

489:                                              ; preds = %484
  %490 = load i64, ptr %19, align 8, !tbaa !9
  %491 = add nsw i64 %490, 1
  store i64 %491, ptr %19, align 8, !tbaa !9
  br label %456, !llvm.loop !38

492:                                              ; preds = %456
  br label %493

493:                                              ; preds = %492
  %494 = load i64, ptr %18, align 8, !tbaa !9
  %495 = add nsw i64 %494, 1
  store i64 %495, ptr %18, align 8, !tbaa !9
  br label %439, !llvm.loop !39

496:                                              ; preds = %439
  %497 = load i64, ptr %21, align 8, !tbaa !9
  %498 = load ptr, ptr %24, align 8, !tbaa !5
  %499 = load i64, ptr %15, align 8, !tbaa !9
  %500 = add nsw i64 %499, 1
  %501 = getelementptr inbounds i64, ptr %498, i64 %500
  store i64 %497, ptr %501, align 8, !tbaa !9
  br label %502

502:                                              ; preds = %496
  %503 = load i64, ptr %15, align 8, !tbaa !9
  %504 = add nsw i64 %503, 1
  store i64 %504, ptr %15, align 8, !tbaa !9
  br label %413, !llvm.loop !40

505:                                              ; preds = %413
  %506 = load i64, ptr %22, align 8, !tbaa !9
  %507 = load ptr, ptr %9, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.graphdef, ptr %507, i32 0, i32 0
  store i64 %506, ptr %508, align 8, !tbaa !21
  %509 = load i64, ptr %21, align 8, !tbaa !9
  %510 = load ptr, ptr %9, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.graphdef, ptr %510, i32 0, i32 1
  store i64 %509, ptr %511, align 8, !tbaa !24
  %512 = load ptr, ptr %9, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.graphdef, ptr %512, i32 0, i32 28
  store i64 1, ptr %513, align 8, !tbaa !25
  %514 = load ptr, ptr %9, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.graphdef, ptr %514, i32 0, i32 1
  %516 = load i64, ptr %515, align 8, !tbaa !24
  %517 = load ptr, ptr %9, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.graphdef, ptr %517, i32 0, i32 6
  %519 = load ptr, ptr %518, align 8, !tbaa !33
  %520 = call ptr @libmetis__idxset(i64 noundef %516, i64 noundef 1, ptr noundef %519)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %521

521:                                              ; preds = %541, %505
  %522 = load i64, ptr %15, align 8, !tbaa !9
  %523 = load i64, ptr %22, align 8, !tbaa !9
  %524 = icmp slt i64 %522, %523
  br i1 %524, label %525, label %544

525:                                              ; preds = %521
  %526 = load ptr, ptr %24, align 8, !tbaa !5
  %527 = load i64, ptr %15, align 8, !tbaa !9
  %528 = add nsw i64 %527, 1
  %529 = getelementptr inbounds i64, ptr %526, i64 %528
  %530 = load i64, ptr %529, align 8, !tbaa !9
  %531 = load ptr, ptr %24, align 8, !tbaa !5
  %532 = load i64, ptr %15, align 8, !tbaa !9
  %533 = getelementptr inbounds i64, ptr %531, i64 %532
  %534 = load i64, ptr %533, align 8, !tbaa !9
  %535 = sub nsw i64 %530, %534
  %536 = load ptr, ptr %9, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.graphdef, ptr %536, i32 0, i32 13
  %538 = load ptr, ptr %537, align 8, !tbaa !31
  %539 = load i64, ptr %15, align 8, !tbaa !9
  %540 = getelementptr inbounds i64, ptr %538, i64 %539
  store i64 %535, ptr %540, align 8, !tbaa !9
  br label %541

541:                                              ; preds = %525
  %542 = load i64, ptr %15, align 8, !tbaa !9
  %543 = add nsw i64 %542, 1
  store i64 %543, ptr %15, align 8, !tbaa !9
  br label %521, !llvm.loop !41

544:                                              ; preds = %521
  %545 = load i64, ptr %22, align 8, !tbaa !9
  %546 = call ptr @libmetis__idxmalloc(i64 noundef %545, ptr noundef @.str.7)
  %547 = load ptr, ptr %9, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.graphdef, ptr %547, i32 0, i32 14
  store ptr %546, ptr %548, align 8, !tbaa !35
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %549

549:                                              ; preds = %560, %544
  %550 = load i64, ptr %15, align 8, !tbaa !9
  %551 = load i64, ptr %22, align 8, !tbaa !9
  %552 = icmp slt i64 %550, %551
  br i1 %552, label %553, label %563

553:                                              ; preds = %549
  %554 = load i64, ptr %15, align 8, !tbaa !9
  %555 = load ptr, ptr %9, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.graphdef, ptr %555, i32 0, i32 14
  %557 = load ptr, ptr %556, align 8, !tbaa !35
  %558 = load i64, ptr %15, align 8, !tbaa !9
  %559 = getelementptr inbounds i64, ptr %557, i64 %558
  store i64 %554, ptr %559, align 8, !tbaa !9
  br label %560

560:                                              ; preds = %553
  %561 = load i64, ptr %15, align 8, !tbaa !9
  %562 = add nsw i64 %561, 1
  store i64 %562, ptr %15, align 8, !tbaa !9
  br label %549, !llvm.loop !42

563:                                              ; preds = %549
  br label %564

564:                                              ; preds = %563, %353
  call void (ptr, ...) @gk_free(ptr noundef %29, ptr noundef %28, ptr noundef %27, ptr noundef null)
  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 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  ret void
}

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

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

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

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

declare void @libmetis__InitGraph(ptr noundef) #2

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

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

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

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

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

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

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


; 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.KeyValueType = type { i64, i64 }

@.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 [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 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 [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__CompressGraph(ptr nocapture noundef readnone %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %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) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  %11 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef -1, ptr noundef nonnull @.str) #4
  store ptr %11, ptr %8, align 8, !tbaa !5
  %12 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef -1, ptr noundef nonnull @.str.1) #4
  store ptr %12, ptr %9, align 8, !tbaa !5
  %13 = shl i64 %2, 4
  %14 = tail call ptr @gk_malloc(i64 noundef %13, ptr noundef nonnull @.str.2) #4
  store ptr %14, ptr %10, align 8, !tbaa !5
  %15 = icmp sgt i64 %2, 0
  br i1 %15, label %.lr.ph238, label %._crit_edge239.thread

._crit_edge239.thread:                            ; preds = %7
  tail call void @libmetis__ikeysort(i64 noundef %2, ptr noundef %14) #4
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %._crit_edge267

.lr.ph238:                                        ; preds = %7, %._crit_edge
  %.0236 = phi i64 [ %18, %._crit_edge ], [ 0, %7 ]
  %16 = getelementptr inbounds i64, ptr %3, i64 %.0236
  %17 = load i64, ptr %16, align 8, !tbaa !9
  %18 = add nuw nsw i64 %.0236, 1
  %19 = getelementptr inbounds i64, ptr %3, i64 %18
  %20 = load i64, ptr %19, align 8, !tbaa !9
  %21 = icmp slt i64 %17, %20
  br i1 %21, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.lr.ph238
  %22 = sub i64 %20, %17
  %min.iters.check = icmp ult i64 %22, 4
  br i1 %min.iters.check, label %.lr.ph.preheader397, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %22, -4
  %ind.end = add i64 %17, %n.vec
  %23 = getelementptr i64, ptr %4, i64 %17
  br label %vector.body

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

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %27, %26
  %29 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %22, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader397

.lr.ph.preheader397:                              ; preds = %middle.block, %.lr.ph.preheader
  %.0208234.ph = phi i64 [ %17, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0223233.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %29, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader397, %.lr.ph
  %.0208234 = phi i64 [ %33, %.lr.ph ], [ %.0208234.ph, %.lr.ph.preheader397 ]
  %.0223233 = phi i64 [ %32, %.lr.ph ], [ %.0223233.ph, %.lr.ph.preheader397 ]
  %30 = getelementptr inbounds i64, ptr %4, i64 %.0208234
  %31 = load i64, ptr %30, align 8, !tbaa !9
  %32 = add nsw i64 %31, %.0223233
  %33 = add nsw i64 %.0208234, 1
  %exitcond.not = icmp eq i64 %33, %20
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %.lr.ph238
  %.0223.lcssa = phi i64 [ 0, %.lr.ph238 ], [ %29, %middle.block ], [ %32, %.lr.ph ]
  %34 = add nsw i64 %.0223.lcssa, %.0236
  %35 = getelementptr inbounds %struct.KeyValueType, ptr %14, i64 %.0236
  store i64 %34, ptr %35, align 8, !tbaa !16
  %36 = getelementptr inbounds %struct.KeyValueType, ptr %14, i64 %.0236, i32 1
  store i64 %.0236, ptr %36, align 8, !tbaa !18
  %exitcond308.not = icmp eq i64 %18, %2
  br i1 %exitcond308.not, label %._crit_edge239, label %.lr.ph238, !llvm.loop !19

._crit_edge239:                                   ; preds = %._crit_edge
  tail call void @libmetis__ikeysort(i64 noundef %2, ptr noundef nonnull %14) #4
  store i64 0, ptr %5, align 8, !tbaa !9
  br i1 %15, label %.lr.ph266, label %._crit_edge267

.lr.ph266:                                        ; preds = %._crit_edge239, %92
  %.1263 = phi i64 [ %.pre-phi, %92 ], [ 0, %._crit_edge239 ]
  %.0213262 = phi i64 [ %.1214, %92 ], [ 0, %._crit_edge239 ]
  %.0215261 = phi i64 [ %.3218, %92 ], [ 0, %._crit_edge239 ]
  %37 = getelementptr inbounds %struct.KeyValueType, ptr %14, i64 %.1263, i32 1
  %38 = load i64, ptr %37, align 8, !tbaa !18
  %39 = getelementptr inbounds i64, ptr %12, i64 %38
  %40 = load i64, ptr %39, align 8, !tbaa !9
  %41 = icmp eq i64 %40, -1
  br i1 %41, label %42, label %._crit_edge317

._crit_edge317:                                   ; preds = %.lr.ph266
  %.pre318 = add nuw nsw i64 %.1263, 1
  br label %92

42:                                               ; preds = %.lr.ph266
  %43 = getelementptr inbounds i64, ptr %11, i64 %38
  store i64 %.1263, ptr %43, align 8, !tbaa !9
  %44 = getelementptr inbounds i64, ptr %3, i64 %38
  %45 = load i64, ptr %44, align 8, !tbaa !9
  %46 = getelementptr i8, ptr %44, i64 8
  %47 = load i64, ptr %46, align 8, !tbaa !9
  %48 = icmp slt i64 %45, %47
  br i1 %48, label %.lr.ph242, label %._crit_edge243

.lr.ph242:                                        ; preds = %42, %.lr.ph242
  %.1209240 = phi i64 [ %52, %.lr.ph242 ], [ %45, %42 ]
  %49 = getelementptr inbounds i64, ptr %4, i64 %.1209240
  %50 = load i64, ptr %49, align 8, !tbaa !9
  %51 = getelementptr inbounds i64, ptr %11, i64 %50
  store i64 %.1263, ptr %51, align 8, !tbaa !9
  %52 = add nsw i64 %.1209240, 1
  %53 = load i64, ptr %46, align 8, !tbaa !9
  %54 = icmp slt i64 %52, %53
  br i1 %54, label %.lr.ph242, label %._crit_edge243, !llvm.loop !20

._crit_edge243:                                   ; preds = %.lr.ph242, %42
  %55 = add nsw i64 %.0215261, 1
  %56 = getelementptr inbounds i64, ptr %6, i64 %.0215261
  store i64 %38, ptr %56, align 8, !tbaa !9
  store i64 %.0213262, ptr %39, align 8, !tbaa !9
  %.2210250 = add nuw nsw i64 %.1263, 1
  %57 = icmp slt i64 %.2210250, %2
  br i1 %57, label %.lr.ph254, label %._crit_edge255

.lr.ph254:                                        ; preds = %._crit_edge243
  %58 = getelementptr inbounds %struct.KeyValueType, ptr %14, i64 %.1263
  br label %59

59:                                               ; preds = %.lr.ph254, %88
  %.2210252 = phi i64 [ %.2210250, %.lr.ph254 ], [ %.2210, %88 ]
  %.1216251 = phi i64 [ %55, %.lr.ph254 ], [ %.2217, %88 ]
  %60 = getelementptr inbounds %struct.KeyValueType, ptr %14, i64 %.2210252
  %61 = getelementptr inbounds i8, ptr %60, i64 8
  %62 = load i64, ptr %61, align 8, !tbaa !18
  %63 = load i64, ptr %58, align 8, !tbaa !16
  %64 = load i64, ptr %60, align 8, !tbaa !16
  %.not227 = icmp eq i64 %63, %64
  br i1 %.not227, label %65, label %._crit_edge255

65:                                               ; preds = %59
  %66 = load i64, ptr %46, align 8, !tbaa !9
  %67 = load i64, ptr %44, align 8, !tbaa !9
  %68 = sub nsw i64 %66, %67
  %69 = getelementptr i64, ptr %3, i64 %62
  %70 = getelementptr i8, ptr %69, i64 8
  %71 = load i64, ptr %70, align 8, !tbaa !9
  %72 = load i64, ptr %69, align 8, !tbaa !9
  %73 = sub nsw i64 %71, %72
  %.not228 = icmp eq i64 %68, %73
  br i1 %.not228, label %74, label %._crit_edge255

74:                                               ; preds = %65
  %75 = getelementptr inbounds i64, ptr %12, i64 %62
  %76 = load i64, ptr %75, align 8, !tbaa !9
  %77 = icmp eq i64 %76, -1
  br i1 %77, label %.preheader231, label %88

.preheader231:                                    ; preds = %74
  %78 = icmp slt i64 %72, %71
  br i1 %78, label %.lr.ph245, label %._crit_edge246

.lr.ph245:                                        ; preds = %.preheader231, %83
  %.0224244 = phi i64 [ %84, %83 ], [ %72, %.preheader231 ]
  %79 = getelementptr inbounds i64, ptr %4, i64 %.0224244
  %80 = load i64, ptr %79, align 8, !tbaa !9
  %81 = getelementptr inbounds i64, ptr %11, i64 %80
  %82 = load i64, ptr %81, align 8, !tbaa !9
  %.not229 = icmp eq i64 %82, %.1263
  br i1 %.not229, label %83, label %._crit_edge246

83:                                               ; preds = %.lr.ph245
  %84 = add i64 %.0224244, 1
  %exitcond309.not = icmp eq i64 %84, %71
  br i1 %exitcond309.not, label %._crit_edge246.thread, label %.lr.ph245, !llvm.loop !21

._crit_edge246:                                   ; preds = %.lr.ph245, %.preheader231
  %.0224.lcssa = phi i64 [ %72, %.preheader231 ], [ %.0224244, %.lr.ph245 ]
  %85 = icmp eq i64 %.0224.lcssa, %71
  br i1 %85, label %._crit_edge246.thread, label %88

._crit_edge246.thread:                            ; preds = %83, %._crit_edge246
  store i64 %.0213262, ptr %75, align 8, !tbaa !9
  %86 = add nsw i64 %.1216251, 1
  %87 = getelementptr inbounds i64, ptr %6, i64 %.1216251
  store i64 %62, ptr %87, align 8, !tbaa !9
  br label %88

88:                                               ; preds = %74, %._crit_edge246.thread, %._crit_edge246
  %.2217 = phi i64 [ %86, %._crit_edge246.thread ], [ %.1216251, %._crit_edge246 ], [ %.1216251, %74 ]
  %.2210 = add nuw nsw i64 %.2210252, 1
  %89 = icmp slt i64 %.2210, %2
  br i1 %89, label %59, label %._crit_edge255, !llvm.loop !22

._crit_edge255:                                   ; preds = %88, %65, %59, %._crit_edge243
  %.1216.lcssa = phi i64 [ %55, %._crit_edge243 ], [ %.1216251, %59 ], [ %.1216251, %65 ], [ %.2217, %88 ]
  %90 = add nsw i64 %.0213262, 1
  %91 = getelementptr inbounds i64, ptr %5, i64 %90
  store i64 %.1216.lcssa, ptr %91, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %._crit_edge317, %._crit_edge255
  %.pre-phi = phi i64 [ %.pre318, %._crit_edge317 ], [ %.2210250, %._crit_edge255 ]
  %.3218 = phi i64 [ %.0215261, %._crit_edge317 ], [ %.1216.lcssa, %._crit_edge255 ]
  %.1214 = phi i64 [ %.0213262, %._crit_edge317 ], [ %90, %._crit_edge255 ]
  %exitcond310.not = icmp eq i64 %.pre-phi, %2
  br i1 %exitcond310.not, label %._crit_edge267, label %.lr.ph266, !llvm.loop !23

._crit_edge267:                                   ; preds = %92, %._crit_edge239.thread, %._crit_edge239
  %.0213.lcssa = phi i64 [ 0, %._crit_edge239 ], [ 0, %._crit_edge239.thread ], [ %.1214, %92 ]
  tail call void @libmetis__InitGraph(ptr noundef %1) #4
  %93 = sitofp i64 %.0213.lcssa to double
  %94 = sitofp i64 %2 to double
  %95 = fmul double %94, 8.500000e-01
  %96 = fcmp ugt double %95, %93
  br i1 %96, label %.preheader, label %99

.preheader:                                       ; preds = %._crit_edge267
  %97 = icmp sgt i64 %.0213.lcssa, 0
  br i1 %97, label %.lr.ph278.preheader, label %._crit_edge279

.lr.ph278.preheader:                              ; preds = %.preheader
  %xtraiter401 = and i64 %.0213.lcssa, 1
  %98 = icmp eq i64 %.0213.lcssa, 1
  br i1 %98, label %._crit_edge279.loopexit.unr-lcssa, label %.lr.ph278.preheader.new

.lr.ph278.preheader.new:                          ; preds = %.lr.ph278.preheader
  %unroll_iter = and i64 %.0213.lcssa, 9223372036854775806
  br label %.lr.ph278

99:                                               ; preds = %._crit_edge267
  store i64 %2, ptr %1, align 8, !tbaa !24
  %100 = getelementptr inbounds i64, ptr %3, i64 %2
  %101 = load i64, ptr %100, align 8, !tbaa !9
  %102 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %101, ptr %102, align 8, !tbaa !27
  %103 = getelementptr inbounds i8, ptr %1, i64 208
  store i64 1, ptr %103, align 8, !tbaa !28
  %104 = getelementptr inbounds i8, ptr %1, i64 16
  store ptr %3, ptr %104, align 8, !tbaa !29
  %105 = getelementptr inbounds i8, ptr %1, i64 56
  store i32 0, ptr %105, align 8, !tbaa !30
  %106 = getelementptr inbounds i8, ptr %1, i64 40
  store ptr %4, ptr %106, align 8, !tbaa !31
  %107 = getelementptr inbounds i8, ptr %1, i64 68
  store i32 0, ptr %107, align 4, !tbaa !32
  %108 = tail call ptr @libmetis__idxmalloc(i64 noundef %2, ptr noundef nonnull @.str.3) #4
  %109 = getelementptr inbounds i8, ptr %1, i64 24
  store ptr %108, ptr %109, align 8, !tbaa !33
  %110 = tail call ptr @libmetis__idxmalloc(i64 noundef %2, ptr noundef nonnull @.str.4) #4
  %111 = getelementptr inbounds i8, ptr %1, i64 88
  store ptr %110, ptr %111, align 8, !tbaa !34
  %112 = tail call ptr @libmetis__idxmalloc(i64 noundef %2, ptr noundef nonnull @.str.5) #4
  %113 = getelementptr inbounds i8, ptr %1, i64 104
  store ptr %112, ptr %113, align 8, !tbaa !35
  %114 = load i64, ptr %102, align 8, !tbaa !27
  %115 = tail call ptr @libmetis__idxmalloc(i64 noundef %114, ptr noundef nonnull @.str.6) #4
  %116 = getelementptr inbounds i8, ptr %1, i64 48
  store ptr %115, ptr %116, align 8, !tbaa !36
  %117 = load ptr, ptr %109, align 8, !tbaa !33
  %118 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef 1, ptr noundef %117) #4
  %119 = load i64, ptr %102, align 8, !tbaa !27
  %120 = load ptr, ptr %116, align 8, !tbaa !36
  %121 = tail call ptr @libmetis__idxset(i64 noundef %119, i64 noundef 1, ptr noundef %120) #4
  br i1 %15, label %.lr.ph271, label %.loopexit.sink.split

.lr.ph271:                                        ; preds = %99
  %122 = load ptr, ptr %111, align 8, !tbaa !34
  %min.iters.check332 = icmp ult i64 %2, 10
  br i1 %min.iters.check332, label %scalar.ph331.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph271
  %123 = shl i64 %2, 3
  %scevgep = getelementptr i8, ptr %122, i64 %123
  %124 = getelementptr i8, ptr %3, i64 %123
  %scevgep329 = getelementptr i8, ptr %124, i64 8
  %bound0 = icmp ult ptr %122, %scevgep329
  %bound1 = icmp ugt ptr %scevgep, %3
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph331.preheader, label %vector.ph333

vector.ph333:                                     ; preds = %vector.memcheck
  %n.vec335 = and i64 %2, 9223372036854775804
  br label %vector.body337

vector.body337:                                   ; preds = %vector.body337, %vector.ph333
  %index338 = phi i64 [ 0, %vector.ph333 ], [ %index.next343, %vector.body337 ]
  %125 = or disjoint i64 %index338, 1
  %126 = getelementptr inbounds i64, ptr %3, i64 %125
  %127 = getelementptr inbounds i8, ptr %126, i64 16
  %wide.load339 = load <2 x i64>, ptr %126, align 8, !tbaa !9, !alias.scope !37
  %wide.load340 = load <2 x i64>, ptr %127, align 8, !tbaa !9, !alias.scope !37
  %128 = getelementptr inbounds i64, ptr %3, i64 %index338
  %129 = getelementptr inbounds i8, ptr %128, i64 16
  %wide.load341 = load <2 x i64>, ptr %128, align 8, !tbaa !9, !alias.scope !37
  %wide.load342 = load <2 x i64>, ptr %129, align 8, !tbaa !9, !alias.scope !37
  %130 = sub nsw <2 x i64> %wide.load339, %wide.load341
  %131 = sub nsw <2 x i64> %wide.load340, %wide.load342
  %132 = getelementptr inbounds i64, ptr %122, i64 %index338
  %133 = getelementptr inbounds i8, ptr %132, i64 16
  store <2 x i64> %130, ptr %132, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  store <2 x i64> %131, ptr %133, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %index.next343 = add nuw i64 %index338, 4
  %134 = icmp eq i64 %index.next343, %n.vec335
  br i1 %134, label %middle.block330, label %vector.body337, !llvm.loop !42

middle.block330:                                  ; preds = %vector.body337
  %cmp.n344 = icmp eq i64 %n.vec335, %2
  br i1 %cmp.n344, label %._crit_edge272, label %scalar.ph331.preheader

scalar.ph331.preheader:                           ; preds = %middle.block330, %vector.memcheck, %.lr.ph271
  %.2269.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph271 ], [ %n.vec335, %middle.block330 ]
  %xtraiter = and i64 %2, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph331.prol.loopexit, label %scalar.ph331.prol

scalar.ph331.prol:                                ; preds = %scalar.ph331.preheader, %scalar.ph331.prol
  %.2269.prol = phi i64 [ %135, %scalar.ph331.prol ], [ %.2269.ph, %scalar.ph331.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph331.prol ], [ 0, %scalar.ph331.preheader ]
  %135 = add nuw nsw i64 %.2269.prol, 1
  %136 = getelementptr inbounds i64, ptr %3, i64 %135
  %137 = load i64, ptr %136, align 8, !tbaa !9
  %138 = getelementptr inbounds i64, ptr %3, i64 %.2269.prol
  %139 = load i64, ptr %138, align 8, !tbaa !9
  %140 = sub nsw i64 %137, %139
  %141 = getelementptr inbounds i64, ptr %122, i64 %.2269.prol
  store i64 %140, ptr %141, align 8, !tbaa !9
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph331.prol.loopexit, label %scalar.ph331.prol, !llvm.loop !43

scalar.ph331.prol.loopexit:                       ; preds = %scalar.ph331.prol, %scalar.ph331.preheader
  %.2269.unr = phi i64 [ %.2269.ph, %scalar.ph331.preheader ], [ %135, %scalar.ph331.prol ]
  %142 = sub nsw i64 %.2269.ph, %2
  %143 = icmp ugt i64 %142, -4
  br i1 %143, label %._crit_edge272, label %scalar.ph331

scalar.ph331:                                     ; preds = %scalar.ph331.prol.loopexit, %scalar.ph331
  %.2269 = phi i64 [ %165, %scalar.ph331 ], [ %.2269.unr, %scalar.ph331.prol.loopexit ]
  %144 = add nuw nsw i64 %.2269, 1
  %145 = getelementptr inbounds i64, ptr %3, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = getelementptr inbounds i64, ptr %3, i64 %.2269
  %148 = load i64, ptr %147, align 8, !tbaa !9
  %149 = sub nsw i64 %146, %148
  %150 = getelementptr inbounds i64, ptr %122, i64 %.2269
  store i64 %149, ptr %150, align 8, !tbaa !9
  %151 = add nuw nsw i64 %.2269, 2
  %152 = getelementptr inbounds i64, ptr %3, i64 %151
  %153 = load i64, ptr %152, align 8, !tbaa !9
  %154 = getelementptr inbounds i64, ptr %3, i64 %144
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = sub nsw i64 %153, %155
  %157 = getelementptr inbounds i64, ptr %122, i64 %144
  store i64 %156, ptr %157, align 8, !tbaa !9
  %158 = add nuw nsw i64 %.2269, 3
  %159 = getelementptr inbounds i64, ptr %3, i64 %158
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = getelementptr inbounds i64, ptr %3, i64 %151
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = sub nsw i64 %160, %162
  %164 = getelementptr inbounds i64, ptr %122, i64 %151
  store i64 %163, ptr %164, align 8, !tbaa !9
  %165 = add nuw nsw i64 %.2269, 4
  %166 = getelementptr inbounds i64, ptr %3, i64 %165
  %167 = load i64, ptr %166, align 8, !tbaa !9
  %168 = getelementptr inbounds i64, ptr %3, i64 %158
  %169 = load i64, ptr %168, align 8, !tbaa !9
  %170 = sub nsw i64 %167, %169
  %171 = getelementptr inbounds i64, ptr %122, i64 %158
  store i64 %170, ptr %171, align 8, !tbaa !9
  %exitcond311.not.3 = icmp eq i64 %165, %2
  br i1 %exitcond311.not.3, label %._crit_edge272, label %scalar.ph331, !llvm.loop !45

._crit_edge272:                                   ; preds = %scalar.ph331.prol.loopexit, %scalar.ph331, %middle.block330
  %172 = tail call ptr @libmetis__idxmalloc(i64 noundef %2, ptr noundef nonnull @.str.7) #4
  %173 = getelementptr inbounds i8, ptr %1, i64 96
  store ptr %172, ptr %173, align 8, !tbaa !46
  br i1 %15, label %.lr.ph275.preheader, label %.loopexit

.lr.ph275.preheader:                              ; preds = %._crit_edge272
  %min.iters.check347 = icmp ult i64 %2, 4
  br i1 %min.iters.check347, label %.lr.ph275.preheader394, label %vector.ph348

vector.ph348:                                     ; preds = %.lr.ph275.preheader
  %n.vec350 = and i64 %2, 9223372036854775804
  br label %vector.body352

vector.body352:                                   ; preds = %vector.body352, %vector.ph348
  %index353 = phi i64 [ 0, %vector.ph348 ], [ %index.next355, %vector.body352 ]
  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph348 ], [ %vec.ind.next, %vector.body352 ]
  %step.add = add <2 x i64> %vec.ind, <i64 2, i64 2>
  %174 = getelementptr inbounds i64, ptr %172, i64 %index353
  %175 = getelementptr inbounds i8, ptr %174, i64 16
  store <2 x i64> %vec.ind, ptr %174, align 8, !tbaa !9
  store <2 x i64> %step.add, ptr %175, align 8, !tbaa !9
  %index.next355 = add nuw i64 %index353, 4
  %vec.ind.next = add <2 x i64> %vec.ind, <i64 4, i64 4>
  %176 = icmp eq i64 %index.next355, %n.vec350
  br i1 %176, label %middle.block345, label %vector.body352, !llvm.loop !47

middle.block345:                                  ; preds = %vector.body352
  %cmp.n356 = icmp eq i64 %n.vec350, %2
  br i1 %cmp.n356, label %.loopexit, label %.lr.ph275.preheader394

.lr.ph275.preheader394:                           ; preds = %middle.block345, %.lr.ph275.preheader
  %.3273.ph = phi i64 [ 0, %.lr.ph275.preheader ], [ %n.vec350, %middle.block345 ]
  br label %.lr.ph275

.lr.ph275:                                        ; preds = %.lr.ph275.preheader394, %.lr.ph275
  %.3273 = phi i64 [ %178, %.lr.ph275 ], [ %.3273.ph, %.lr.ph275.preheader394 ]
  %177 = getelementptr inbounds i64, ptr %172, i64 %.3273
  store i64 %.3273, ptr %177, align 8, !tbaa !9
  %178 = add nuw nsw i64 %.3273, 1
  %exitcond312.not = icmp eq i64 %178, %2
  br i1 %exitcond312.not, label %.loopexit, label %.lr.ph275, !llvm.loop !48

.lr.ph278:                                        ; preds = %.lr.ph278, %.lr.ph278.preheader.new
  %.4277 = phi i64 [ 0, %.lr.ph278.preheader.new ], [ %200, %.lr.ph278 ]
  %.0212276 = phi i64 [ 0, %.lr.ph278.preheader.new ], [ %199, %.lr.ph278 ]
  %niter = phi i64 [ 0, %.lr.ph278.preheader.new ], [ %niter.next.1, %.lr.ph278 ]
  %179 = getelementptr inbounds i64, ptr %5, i64 %.4277
  %180 = load i64, ptr %179, align 8, !tbaa !9
  %181 = getelementptr inbounds i64, ptr %6, i64 %180
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = getelementptr i64, ptr %3, i64 %182
  %184 = getelementptr i8, ptr %183, i64 8
  %185 = load i64, ptr %184, align 8, !tbaa !9
  %186 = load i64, ptr %183, align 8, !tbaa !9
  %187 = add i64 %185, %.0212276
  %188 = or disjoint i64 %.4277, 1
  %189 = getelementptr inbounds i64, ptr %5, i64 %188
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = getelementptr inbounds i64, ptr %6, i64 %190
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = getelementptr i64, ptr %3, i64 %192
  %194 = getelementptr i8, ptr %193, i64 8
  %195 = load i64, ptr %194, align 8, !tbaa !9
  %196 = load i64, ptr %193, align 8, !tbaa !9
  %197 = add i64 %187, %195
  %198 = add i64 %186, %196
  %199 = sub i64 %197, %198
  %200 = add nuw nsw i64 %.4277, 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_edge279.loopexit.unr-lcssa, label %.lr.ph278, !llvm.loop !49

._crit_edge279.loopexit.unr-lcssa:                ; preds = %.lr.ph278, %.lr.ph278.preheader
  %.lcssa.ph = phi i64 [ poison, %.lr.ph278.preheader ], [ %199, %.lr.ph278 ]
  %.4277.unr = phi i64 [ 0, %.lr.ph278.preheader ], [ %200, %.lr.ph278 ]
  %.0212276.unr = phi i64 [ 0, %.lr.ph278.preheader ], [ %199, %.lr.ph278 ]
  %lcmp.mod402.not = icmp eq i64 %xtraiter401, 0
  br i1 %lcmp.mod402.not, label %._crit_edge279, label %.lr.ph278.epil

.lr.ph278.epil:                                   ; preds = %._crit_edge279.loopexit.unr-lcssa
  %201 = getelementptr inbounds i64, ptr %5, i64 %.4277.unr
  %202 = load i64, ptr %201, align 8, !tbaa !9
  %203 = getelementptr inbounds i64, ptr %6, i64 %202
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = getelementptr i64, ptr %3, i64 %204
  %206 = getelementptr i8, ptr %205, i64 8
  %207 = load i64, ptr %206, align 8, !tbaa !9
  %208 = load i64, ptr %205, align 8, !tbaa !9
  %209 = add i64 %207, %.0212276.unr
  %210 = sub i64 %209, %208
  br label %._crit_edge279

._crit_edge279:                                   ; preds = %.lr.ph278.epil, %._crit_edge279.loopexit.unr-lcssa, %.preheader
  %.0212.lcssa = phi i64 [ 0, %.preheader ], [ %.lcssa.ph, %._crit_edge279.loopexit.unr-lcssa ], [ %210, %.lr.ph278.epil ]
  %211 = add nsw i64 %.0213.lcssa, 1
  %212 = tail call ptr @libmetis__idxmalloc(i64 noundef %211, ptr noundef nonnull @.str.8) #4
  %213 = getelementptr inbounds i8, ptr %1, i64 16
  store ptr %212, ptr %213, align 8, !tbaa !29
  %214 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0213.lcssa, ptr noundef nonnull @.str.3) #4
  %215 = getelementptr inbounds i8, ptr %1, i64 24
  store ptr %214, ptr %215, align 8, !tbaa !33
  %216 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0213.lcssa, ptr noundef nonnull @.str.4) #4
  %217 = getelementptr inbounds i8, ptr %1, i64 88
  store ptr %216, ptr %217, align 8, !tbaa !34
  %218 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0213.lcssa, ptr noundef nonnull @.str.5) #4
  %219 = getelementptr inbounds i8, ptr %1, i64 104
  store ptr %218, ptr %219, align 8, !tbaa !35
  %220 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0212.lcssa, ptr noundef nonnull @.str.9) #4
  %221 = getelementptr inbounds i8, ptr %1, i64 40
  store ptr %220, ptr %221, align 8, !tbaa !31
  %222 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0212.lcssa, ptr noundef nonnull @.str.6) #4
  %223 = getelementptr inbounds i8, ptr %1, i64 48
  store ptr %222, ptr %223, align 8, !tbaa !36
  %224 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef -1, ptr noundef %11) #4
  store i64 0, ptr %212, align 8, !tbaa !9
  br i1 %97, label %.lr.ph296, label %._crit_edge302.thread.critedge

.lr.ph296:                                        ; preds = %._crit_edge279, %._crit_edge291
  %.5294 = phi i64 [ %225, %._crit_edge291 ], [ 0, %._crit_edge279 ]
  %.4219293 = phi i64 [ %.5220.lcssa, %._crit_edge291 ], [ 0, %._crit_edge279 ]
  %225 = add nuw nsw i64 %.5294, 1
  %226 = getelementptr inbounds i64, ptr %5, i64 %225
  %227 = load i64, ptr %226, align 8, !tbaa !9
  %228 = getelementptr inbounds i64, ptr %5, i64 %.5294
  %229 = load i64, ptr %228, align 8, !tbaa !9
  %230 = sub nsw i64 %227, %229
  %231 = getelementptr inbounds i64, ptr %214, i64 %.5294
  store i64 %230, ptr %231, align 8, !tbaa !9
  %232 = getelementptr inbounds i64, ptr %11, i64 %.5294
  store i64 %.5294, ptr %232, align 8, !tbaa !9
  %233 = load i64, ptr %228, align 8, !tbaa !9
  %234 = load i64, ptr %226, align 8, !tbaa !9
  %235 = icmp slt i64 %233, %234
  br i1 %235, label %.lr.ph290, label %._crit_edge291

.lr.ph290:                                        ; preds = %.lr.ph296, %._crit_edge285
  %236 = phi i64 [ %257, %._crit_edge285 ], [ %234, %.lr.ph296 ]
  %.3211288 = phi i64 [ %258, %._crit_edge285 ], [ %233, %.lr.ph296 ]
  %.5220287 = phi i64 [ %.6221.lcssa, %._crit_edge285 ], [ %.4219293, %.lr.ph296 ]
  %237 = getelementptr inbounds i64, ptr %6, i64 %.3211288
  %238 = load i64, ptr %237, align 8, !tbaa !9
  %239 = getelementptr inbounds i64, ptr %3, i64 %238
  %240 = load i64, ptr %239, align 8, !tbaa !9
  %241 = getelementptr i8, ptr %239, i64 8
  %242 = load i64, ptr %241, align 8, !tbaa !9
  %243 = icmp slt i64 %240, %242
  br i1 %243, label %.lr.ph284, label %._crit_edge285

.lr.ph284:                                        ; preds = %.lr.ph290, %253
  %.6221282 = phi i64 [ %.7222, %253 ], [ %.5220287, %.lr.ph290 ]
  %.1225281 = phi i64 [ %254, %253 ], [ %240, %.lr.ph290 ]
  %244 = getelementptr inbounds i64, ptr %4, i64 %.1225281
  %245 = load i64, ptr %244, align 8, !tbaa !9
  %246 = getelementptr inbounds i64, ptr %12, i64 %245
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = getelementptr inbounds i64, ptr %11, i64 %247
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %.not = icmp eq i64 %249, %.5294
  br i1 %.not, label %253, label %250

250:                                              ; preds = %.lr.ph284
  %251 = add nsw i64 %.6221282, 1
  %252 = getelementptr inbounds i64, ptr %220, i64 %.6221282
  store i64 %247, ptr %252, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %250, %.lr.ph284
  %.7222 = phi i64 [ %251, %250 ], [ %.6221282, %.lr.ph284 ]
  store i64 %.5294, ptr %248, align 8, !tbaa !9
  %254 = add nsw i64 %.1225281, 1
  %255 = load i64, ptr %241, align 8, !tbaa !9
  %256 = icmp slt i64 %254, %255
  br i1 %256, label %.lr.ph284, label %._crit_edge285.loopexit, !llvm.loop !50

._crit_edge285.loopexit:                          ; preds = %253
  %.pre = load i64, ptr %226, align 8, !tbaa !9
  br label %._crit_edge285

._crit_edge285:                                   ; preds = %._crit_edge285.loopexit, %.lr.ph290
  %257 = phi i64 [ %236, %.lr.ph290 ], [ %.pre, %._crit_edge285.loopexit ]
  %.6221.lcssa = phi i64 [ %.5220287, %.lr.ph290 ], [ %.7222, %._crit_edge285.loopexit ]
  %258 = add nsw i64 %.3211288, 1
  %259 = icmp slt i64 %258, %257
  br i1 %259, label %.lr.ph290, label %._crit_edge291, !llvm.loop !51

._crit_edge291:                                   ; preds = %._crit_edge285, %.lr.ph296
  %.5220.lcssa = phi i64 [ %.4219293, %.lr.ph296 ], [ %.6221.lcssa, %._crit_edge285 ]
  %260 = getelementptr inbounds i64, ptr %212, i64 %225
  store i64 %.5220.lcssa, ptr %260, align 8, !tbaa !9
  %exitcond314.not = icmp eq i64 %225, %.0213.lcssa
  br i1 %exitcond314.not, label %._crit_edge297, label %.lr.ph296, !llvm.loop !52

._crit_edge297:                                   ; preds = %._crit_edge291
  store i64 %.0213.lcssa, ptr %1, align 8, !tbaa !24
  %261 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %.5220.lcssa, ptr %261, align 8, !tbaa !27
  %262 = getelementptr inbounds i8, ptr %1, i64 208
  store i64 1, ptr %262, align 8, !tbaa !28
  %263 = load ptr, ptr %223, align 8, !tbaa !36
  %264 = tail call ptr @libmetis__idxset(i64 noundef %.5220.lcssa, i64 noundef 1, ptr noundef %263) #4
  br i1 %97, label %.lr.ph301, label %.loopexit.sink.split

._crit_edge302.thread.critedge:                   ; preds = %._crit_edge279
  store i64 %.0213.lcssa, ptr %1, align 8, !tbaa !24
  %265 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 0, ptr %265, align 8, !tbaa !27
  %266 = getelementptr inbounds i8, ptr %1, i64 208
  store i64 1, ptr %266, align 8, !tbaa !28
  %267 = load ptr, ptr %223, align 8, !tbaa !36
  %268 = tail call ptr @libmetis__idxset(i64 noundef 0, i64 noundef 1, ptr noundef %267) #4
  br label %.loopexit.sink.split

.lr.ph301:                                        ; preds = %._crit_edge297
  %269 = load ptr, ptr %217, align 8, !tbaa !34
  %min.iters.check365 = icmp ult i64 %.0213.lcssa, 10
  br i1 %min.iters.check365, label %scalar.ph364.preheader, label %vector.memcheck357

vector.memcheck357:                               ; preds = %.lr.ph301
  %270 = shl i64 %.0213.lcssa, 3
  %scevgep358 = getelementptr i8, ptr %269, i64 %270
  %271 = getelementptr i8, ptr %212, i64 %270
  %scevgep359 = getelementptr i8, ptr %271, i64 8
  %bound0360 = icmp ult ptr %269, %scevgep359
  %bound1361 = icmp ult ptr %212, %scevgep358
  %found.conflict362 = and i1 %bound0360, %bound1361
  br i1 %found.conflict362, label %scalar.ph364.preheader, label %vector.ph366

vector.ph366:                                     ; preds = %vector.memcheck357
  %n.vec368 = and i64 %.0213.lcssa, 9223372036854775804
  br label %vector.body370

vector.body370:                                   ; preds = %vector.body370, %vector.ph366
  %index371 = phi i64 [ 0, %vector.ph366 ], [ %index.next376, %vector.body370 ]
  %272 = or disjoint i64 %index371, 1
  %273 = getelementptr inbounds i64, ptr %212, i64 %272
  %274 = getelementptr inbounds i8, ptr %273, i64 16
  %wide.load372 = load <2 x i64>, ptr %273, align 8, !tbaa !9, !alias.scope !53
  %wide.load373 = load <2 x i64>, ptr %274, align 8, !tbaa !9, !alias.scope !53
  %275 = getelementptr inbounds i64, ptr %212, i64 %index371
  %276 = getelementptr inbounds i8, ptr %275, i64 16
  %wide.load374 = load <2 x i64>, ptr %275, align 8, !tbaa !9, !alias.scope !53
  %wide.load375 = load <2 x i64>, ptr %276, align 8, !tbaa !9, !alias.scope !53
  %277 = sub nsw <2 x i64> %wide.load372, %wide.load374
  %278 = sub nsw <2 x i64> %wide.load373, %wide.load375
  %279 = getelementptr inbounds i64, ptr %269, i64 %index371
  %280 = getelementptr inbounds i8, ptr %279, i64 16
  store <2 x i64> %277, ptr %279, align 8, !tbaa !9, !alias.scope !56, !noalias !53
  store <2 x i64> %278, ptr %280, align 8, !tbaa !9, !alias.scope !56, !noalias !53
  %index.next376 = add nuw i64 %index371, 4
  %281 = icmp eq i64 %index.next376, %n.vec368
  br i1 %281, label %middle.block363, label %vector.body370, !llvm.loop !58

middle.block363:                                  ; preds = %vector.body370
  %cmp.n377 = icmp eq i64 %.0213.lcssa, %n.vec368
  br i1 %cmp.n377, label %._crit_edge302, label %scalar.ph364.preheader

scalar.ph364.preheader:                           ; preds = %middle.block363, %vector.memcheck357, %.lr.ph301
  %.6299.ph = phi i64 [ 0, %vector.memcheck357 ], [ 0, %.lr.ph301 ], [ %n.vec368, %middle.block363 ]
  %xtraiter404 = and i64 %.0213.lcssa, 3
  %lcmp.mod405.not = icmp eq i64 %xtraiter404, 0
  br i1 %lcmp.mod405.not, label %scalar.ph364.prol.loopexit, label %scalar.ph364.prol

scalar.ph364.prol:                                ; preds = %scalar.ph364.preheader, %scalar.ph364.prol
  %.6299.prol = phi i64 [ %282, %scalar.ph364.prol ], [ %.6299.ph, %scalar.ph364.preheader ]
  %prol.iter406 = phi i64 [ %prol.iter406.next, %scalar.ph364.prol ], [ 0, %scalar.ph364.preheader ]
  %282 = add nuw nsw i64 %.6299.prol, 1
  %283 = getelementptr inbounds i64, ptr %212, i64 %282
  %284 = load i64, ptr %283, align 8, !tbaa !9
  %285 = getelementptr inbounds i64, ptr %212, i64 %.6299.prol
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = sub nsw i64 %284, %286
  %288 = getelementptr inbounds i64, ptr %269, i64 %.6299.prol
  store i64 %287, ptr %288, align 8, !tbaa !9
  %prol.iter406.next = add i64 %prol.iter406, 1
  %prol.iter406.cmp.not = icmp eq i64 %prol.iter406.next, %xtraiter404
  br i1 %prol.iter406.cmp.not, label %scalar.ph364.prol.loopexit, label %scalar.ph364.prol, !llvm.loop !59

scalar.ph364.prol.loopexit:                       ; preds = %scalar.ph364.prol, %scalar.ph364.preheader
  %.6299.unr = phi i64 [ %.6299.ph, %scalar.ph364.preheader ], [ %282, %scalar.ph364.prol ]
  %289 = sub nsw i64 %.6299.ph, %.0213.lcssa
  %290 = icmp ugt i64 %289, -4
  br i1 %290, label %._crit_edge302, label %scalar.ph364

scalar.ph364:                                     ; preds = %scalar.ph364.prol.loopexit, %scalar.ph364
  %.6299 = phi i64 [ %312, %scalar.ph364 ], [ %.6299.unr, %scalar.ph364.prol.loopexit ]
  %291 = add nuw nsw i64 %.6299, 1
  %292 = getelementptr inbounds i64, ptr %212, i64 %291
  %293 = load i64, ptr %292, align 8, !tbaa !9
  %294 = getelementptr inbounds i64, ptr %212, i64 %.6299
  %295 = load i64, ptr %294, align 8, !tbaa !9
  %296 = sub nsw i64 %293, %295
  %297 = getelementptr inbounds i64, ptr %269, i64 %.6299
  store i64 %296, ptr %297, align 8, !tbaa !9
  %298 = add nuw nsw i64 %.6299, 2
  %299 = getelementptr inbounds i64, ptr %212, i64 %298
  %300 = load i64, ptr %299, align 8, !tbaa !9
  %301 = getelementptr inbounds i64, ptr %212, i64 %291
  %302 = load i64, ptr %301, align 8, !tbaa !9
  %303 = sub nsw i64 %300, %302
  %304 = getelementptr inbounds i64, ptr %269, i64 %291
  store i64 %303, ptr %304, align 8, !tbaa !9
  %305 = add nuw nsw i64 %.6299, 3
  %306 = getelementptr inbounds i64, ptr %212, i64 %305
  %307 = load i64, ptr %306, align 8, !tbaa !9
  %308 = getelementptr inbounds i64, ptr %212, i64 %298
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = sub nsw i64 %307, %309
  %311 = getelementptr inbounds i64, ptr %269, i64 %298
  store i64 %310, ptr %311, align 8, !tbaa !9
  %312 = add nuw nsw i64 %.6299, 4
  %313 = getelementptr inbounds i64, ptr %212, i64 %312
  %314 = load i64, ptr %313, align 8, !tbaa !9
  %315 = getelementptr inbounds i64, ptr %212, i64 %305
  %316 = load i64, ptr %315, align 8, !tbaa !9
  %317 = sub nsw i64 %314, %316
  %318 = getelementptr inbounds i64, ptr %269, i64 %305
  store i64 %317, ptr %318, align 8, !tbaa !9
  %exitcond315.not.3 = icmp eq i64 %312, %.0213.lcssa
  br i1 %exitcond315.not.3, label %._crit_edge302, label %scalar.ph364, !llvm.loop !60

._crit_edge302:                                   ; preds = %scalar.ph364.prol.loopexit, %scalar.ph364, %middle.block363
  %319 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0213.lcssa, ptr noundef nonnull @.str.7) #4
  %320 = getelementptr inbounds i8, ptr %1, i64 96
  store ptr %319, ptr %320, align 8, !tbaa !46
  br i1 %97, label %.lr.ph305.preheader, label %.loopexit

.lr.ph305.preheader:                              ; preds = %._crit_edge302
  %min.iters.check380 = icmp ult i64 %.0213.lcssa, 4
  br i1 %min.iters.check380, label %.lr.ph305.preheader393, label %vector.ph381

vector.ph381:                                     ; preds = %.lr.ph305.preheader
  %n.vec383 = and i64 %.0213.lcssa, 9223372036854775804
  br label %vector.body385

vector.body385:                                   ; preds = %vector.body385, %vector.ph381
  %index386 = phi i64 [ 0, %vector.ph381 ], [ %index.next391, %vector.body385 ]
  %vec.ind387 = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph381 ], [ %vec.ind.next390, %vector.body385 ]
  %step.add388 = add <2 x i64> %vec.ind387, <i64 2, i64 2>
  %321 = getelementptr inbounds i64, ptr %319, i64 %index386
  %322 = getelementptr inbounds i8, ptr %321, i64 16
  store <2 x i64> %vec.ind387, ptr %321, align 8, !tbaa !9
  store <2 x i64> %step.add388, ptr %322, align 8, !tbaa !9
  %index.next391 = add nuw i64 %index386, 4
  %vec.ind.next390 = add <2 x i64> %vec.ind387, <i64 4, i64 4>
  %323 = icmp eq i64 %index.next391, %n.vec383
  br i1 %323, label %middle.block378, label %vector.body385, !llvm.loop !61

middle.block378:                                  ; preds = %vector.body385
  %cmp.n392 = icmp eq i64 %.0213.lcssa, %n.vec383
  br i1 %cmp.n392, label %.loopexit, label %.lr.ph305.preheader393

.lr.ph305.preheader393:                           ; preds = %middle.block378, %.lr.ph305.preheader
  %.7303.ph = phi i64 [ 0, %.lr.ph305.preheader ], [ %n.vec383, %middle.block378 ]
  br label %.lr.ph305

.lr.ph305:                                        ; preds = %.lr.ph305.preheader393, %.lr.ph305
  %.7303 = phi i64 [ %325, %.lr.ph305 ], [ %.7303.ph, %.lr.ph305.preheader393 ]
  %324 = getelementptr inbounds i64, ptr %319, i64 %.7303
  store i64 %.7303, ptr %324, align 8, !tbaa !9
  %325 = add nuw nsw i64 %.7303, 1
  %exitcond316.not = icmp eq i64 %325, %.0213.lcssa
  br i1 %exitcond316.not, label %.loopexit, label %.lr.ph305, !llvm.loop !62

.loopexit.sink.split:                             ; preds = %._crit_edge297, %._crit_edge302.thread.critedge, %99
  %.0213.lcssa.sink = phi i64 [ %2, %99 ], [ %.0213.lcssa, %._crit_edge302.thread.critedge ], [ %.0213.lcssa, %._crit_edge297 ]
  %326 = tail call ptr @libmetis__idxmalloc(i64 noundef %.0213.lcssa.sink, ptr noundef nonnull @.str.7) #4
  %327 = getelementptr inbounds i8, ptr %1, i64 96
  store ptr %326, ptr %327, align 8, !tbaa !46
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph275, %.lr.ph305, %middle.block345, %middle.block378, %.loopexit.sink.split, %._crit_edge272, %._crit_edge302
  call void (ptr, ...) @gk_free(ptr noundef nonnull %10, ptr noundef nonnull %9, ptr noundef nonnull %8, ptr noundef null) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  ret void
}

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

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

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

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

declare void @libmetis__InitGraph(ptr noundef) local_unnamed_addr #2

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #3

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!"long", !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 = !{!"KeyValueType", !10, i64 0, !10, i64 8}
!18 = !{!17, !10, i64 8}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = !{!25, !10, i64 0}
!25 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !26, i64 56, !26, i64 60, !26, i64 64, !26, i64 68, !26, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !10, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!26 = !{!"int", !7, i64 0}
!27 = !{!25, !10, i64 8}
!28 = !{!25, !10, i64 208}
!29 = !{!25, !6, i64 16}
!30 = !{!25, !26, i64 56}
!31 = !{!25, !6, i64 40}
!32 = !{!25, !26, i64 68}
!33 = !{!25, !6, i64 24}
!34 = !{!25, !6, i64 88}
!35 = !{!25, !6, i64 104}
!36 = !{!25, !6, i64 48}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = !{!41}
!41 = distinct !{!41, !39}
!42 = distinct !{!42, !12, !13, !14}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.unroll.disable"}
!45 = distinct !{!45, !12, !13}
!46 = !{!25, !6, i64 96}
!47 = distinct !{!47, !12, !13, !14}
!48 = distinct !{!48, !12, !14, !13}
!49 = distinct !{!49, !12}
!50 = distinct !{!50, !12}
!51 = distinct !{!51, !12}
!52 = distinct !{!52, !12}
!53 = !{!54}
!54 = distinct !{!54, !55}
!55 = distinct !{!55, !"LVerDomain"}
!56 = !{!57}
!57 = distinct !{!57, !55}
!58 = distinct !{!58, !12, !13, !14}
!59 = distinct !{!59, !44}
!60 = distinct !{!60, !12, !13}
!61 = distinct !{!61, !12, !13, !14}
!62 = distinct !{!62, !12, !14, !13}


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