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

; 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.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 }
%struct.controldef = type { i64, i64, i64, i64, i64, i64, float, i64, i64, i64, i64, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i64, i64, ptr, ptr, i64, ptr, ptr }
%struct.KeyValueType = type { i64, i64 }

@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) #1

declare i64 @libmetis__idxsum(i64 noundef, ptr noundef, i64 noundef) #1

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

declare i64 @libmetis__idxargmax(i64 noundef, ptr noundef) #1

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

declare void @libmetis__idxwspacefree(ptr noundef, i64 noundef) #1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__EliminateVolSubDomainEdges(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, 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 i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i64 %2, ptr %7, align 8, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  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
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.graphdef, ptr %44, i32 0, i32 0
  %46 = load i64, ptr %45, align 8, !tbaa !11
  store i64 %46, ptr %15, align 8, !tbaa !9
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graphdef, ptr %47, i32 0, i32 2
  %49 = load ptr, ptr %48, align 8, !tbaa !14
  store ptr %49, ptr %30, align 8, !tbaa !5
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graphdef, ptr %50, i32 0, i32 5
  %52 = load ptr, ptr %51, align 8, !tbaa !15
  store ptr %52, ptr %31, align 8, !tbaa !5
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graphdef, ptr %53, i32 0, i32 3
  %55 = load ptr, ptr %54, align 8, !tbaa !16
  store ptr %55, ptr %32, align 8, !tbaa !5
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graphdef, ptr %56, i32 0, i32 6
  %58 = load ptr, ptr %57, align 8, !tbaa !17
  store ptr %58, ptr %33, align 8, !tbaa !5
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graphdef, ptr %59, i32 0, i32 18
  %61 = load ptr, ptr %60, align 8, !tbaa !18
  store ptr %61, ptr %35, align 8, !tbaa !5
  %62 = load i64, ptr %7, align 8, !tbaa !9
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.graphdef, ptr %63, i32 0, i32 19
  %65 = load ptr, ptr %64, align 8, !tbaa !19
  %66 = call ptr @libmetis__idxset(i64 noundef %62, i64 noundef 0, ptr noundef %65)
  store ptr %66, ptr %34, align 8, !tbaa !5
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = load i64, ptr %7, align 8, !tbaa !9
  %69 = call ptr @libmetis__idxwspacemalloc(ptr noundef %67, i64 noundef %68)
  store ptr %69, ptr %36, align 8, !tbaa !5
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = load i64, ptr %7, align 8, !tbaa !9
  %72 = call ptr @libmetis__idxwspacemalloc(ptr noundef %70, i64 noundef %71)
  store ptr %72, ptr %38, align 8, !tbaa !5
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = load i64, ptr %7, align 8, !tbaa !9
  %75 = call ptr @libmetis__idxwspacemalloc(ptr noundef %73, i64 noundef %74)
  store ptr %75, ptr %40, align 8, !tbaa !5
  %76 = load ptr, ptr %5, align 8, !tbaa !5
  %77 = load i64, ptr %15, align 8, !tbaa !9
  %78 = call ptr @libmetis__idxwspacemalloc(ptr noundef %76, i64 noundef %77)
  store ptr %78, ptr %41, align 8, !tbaa !5
  %79 = load i64, ptr %7, align 8, !tbaa !9
  %80 = load i64, ptr %7, align 8, !tbaa !9
  %81 = mul nsw i64 %79, %80
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.controldef, ptr %82, i32 0, i32 11
  %84 = getelementptr inbounds %struct.workspacedef, ptr %83, i32 0, i32 7
  %85 = load ptr, ptr %84, align 8, !tbaa !20
  %86 = call ptr @libmetis__idxset(i64 noundef %81, i64 noundef 0, ptr noundef %85)
  store ptr %86, ptr %37, align 8, !tbaa !5
  %87 = load i64, ptr %7, align 8, !tbaa !9
  %88 = mul i64 %87, 16
  %89 = call ptr @gk_malloc(i64 noundef %88, ptr noundef @.str.11)
  store ptr %89, ptr %42, align 8, !tbaa !5
  %90 = load i64, ptr %7, align 8, !tbaa !9
  %91 = mul i64 %90, 16
  %92 = call ptr @gk_malloc(i64 noundef %91, ptr noundef @.str.11)
  store ptr %92, ptr %43, align 8, !tbaa !5
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %93

93:                                               ; preds = %156, %4
  %94 = load i64, ptr %9, align 8, !tbaa !9
  %95 = load i64, ptr %15, align 8, !tbaa !9
  %96 = icmp slt i64 %94, %95
  br i1 %96, label %97, label %159

97:                                               ; preds = %93
  %98 = load ptr, ptr %35, align 8, !tbaa !5
  %99 = load i64, ptr %9, align 8, !tbaa !9
  %100 = getelementptr inbounds i64, ptr %98, i64 %99
  %101 = load i64, ptr %100, align 8, !tbaa !9
  store i64 %101, ptr %13, align 8, !tbaa !9
  %102 = load ptr, ptr %32, align 8, !tbaa !5
  %103 = load i64, ptr %9, align 8, !tbaa !9
  %104 = getelementptr inbounds i64, ptr %102, i64 %103
  %105 = load i64, ptr %104, align 8, !tbaa !9
  %106 = load ptr, ptr %34, align 8, !tbaa !5
  %107 = load i64, ptr %13, align 8, !tbaa !9
  %108 = getelementptr inbounds i64, ptr %106, i64 %107
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = add nsw i64 %109, %105
  store i64 %110, ptr %108, align 8, !tbaa !9
  %111 = load ptr, ptr %30, align 8, !tbaa !5
  %112 = load i64, ptr %9, align 8, !tbaa !9
  %113 = getelementptr inbounds i64, ptr %111, i64 %112
  %114 = load i64, ptr %113, align 8, !tbaa !9
  store i64 %114, ptr %11, align 8, !tbaa !9
  br label %115

115:                                              ; preds = %152, %97
  %116 = load i64, ptr %11, align 8, !tbaa !9
  %117 = load ptr, ptr %30, align 8, !tbaa !5
  %118 = load i64, ptr %9, align 8, !tbaa !9
  %119 = add nsw i64 %118, 1
  %120 = getelementptr inbounds i64, ptr %117, i64 %119
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = icmp slt i64 %116, %121
  br i1 %122, label %123, label %155

123:                                              ; preds = %115
  %124 = load ptr, ptr %31, align 8, !tbaa !5
  %125 = load i64, ptr %11, align 8, !tbaa !9
  %126 = getelementptr inbounds i64, ptr %124, i64 %125
  %127 = load i64, ptr %126, align 8, !tbaa !9
  store i64 %127, ptr %12, align 8, !tbaa !9
  %128 = load ptr, ptr %35, align 8, !tbaa !5
  %129 = load i64, ptr %12, align 8, !tbaa !9
  %130 = getelementptr inbounds i64, ptr %128, i64 %129
  %131 = load i64, ptr %130, align 8, !tbaa !9
  %132 = load i64, ptr %13, align 8, !tbaa !9
  %133 = icmp ne i64 %131, %132
  br i1 %133, label %134, label %151

134:                                              ; preds = %123
  %135 = load ptr, ptr %33, align 8, !tbaa !5
  %136 = load i64, ptr %11, align 8, !tbaa !9
  %137 = getelementptr inbounds i64, ptr %135, i64 %136
  %138 = load i64, ptr %137, align 8, !tbaa !9
  %139 = load ptr, ptr %37, align 8, !tbaa !5
  %140 = load i64, ptr %13, align 8, !tbaa !9
  %141 = load i64, ptr %7, align 8, !tbaa !9
  %142 = mul nsw i64 %140, %141
  %143 = load ptr, ptr %35, align 8, !tbaa !5
  %144 = load i64, ptr %12, align 8, !tbaa !9
  %145 = getelementptr inbounds i64, ptr %143, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = add nsw i64 %142, %146
  %148 = getelementptr inbounds i64, ptr %139, i64 %147
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = add nsw i64 %149, %138
  store i64 %150, ptr %148, align 8, !tbaa !9
  br label %151

151:                                              ; preds = %134, %123
  br label %152

152:                                              ; preds = %151
  %153 = load i64, ptr %11, align 8, !tbaa !9
  %154 = add nsw i64 %153, 1
  store i64 %154, ptr %11, align 8, !tbaa !9
  br label %115, !llvm.loop !25

155:                                              ; preds = %115
  br label %156

156:                                              ; preds = %155
  %157 = load i64, ptr %9, align 8, !tbaa !9
  %158 = add nsw i64 %157, 1
  store i64 %158, ptr %9, align 8, !tbaa !9
  br label %93, !llvm.loop !27

159:                                              ; preds = %93
  %160 = load i64, ptr %7, align 8, !tbaa !9
  %161 = load ptr, ptr %34, align 8, !tbaa !5
  %162 = call i64 @libmetis__idxsum(i64 noundef %160, ptr noundef %161, i64 noundef 1)
  store i64 %162, ptr %29, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %181, %159
  %164 = load i64, ptr %9, align 8, !tbaa !9
  %165 = load i64, ptr %7, align 8, !tbaa !9
  %166 = icmp slt i64 %164, %165
  br i1 %166, label %167, label %184

167:                                              ; preds = %163
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = load i64, ptr %9, align 8, !tbaa !9
  %170 = getelementptr inbounds float, ptr %168, i64 %169
  %171 = load float, ptr %170, align 4, !tbaa !28
  %172 = fpext float %171 to double
  %173 = fmul double 1.250000e+00, %172
  %174 = load i64, ptr %29, align 8, !tbaa !9
  %175 = sitofp i64 %174 to double
  %176 = fmul double %173, %175
  %177 = fptosi double %176 to i64
  %178 = load ptr, ptr %36, align 8, !tbaa !5
  %179 = load i64, ptr %9, align 8, !tbaa !9
  %180 = getelementptr inbounds i64, ptr %178, i64 %179
  store i64 %177, ptr %180, align 8, !tbaa !9
  br label %181

181:                                              ; preds = %167
  %182 = load i64, ptr %9, align 8, !tbaa !9
  %183 = add nsw i64 %182, 1
  store i64 %183, ptr %9, align 8, !tbaa !9
  br label %163, !llvm.loop !29

184:                                              ; preds = %163
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %185

185:                                              ; preds = %216, %184
  %186 = load i64, ptr %9, align 8, !tbaa !9
  %187 = load i64, ptr %7, align 8, !tbaa !9
  %188 = icmp slt i64 %186, %187
  br i1 %188, label %189, label %219

189:                                              ; preds = %185
  store i64 0, ptr %12, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %190

190:                                              ; preds = %208, %189
  %191 = load i64, ptr %11, align 8, !tbaa !9
  %192 = load i64, ptr %7, align 8, !tbaa !9
  %193 = icmp slt i64 %191, %192
  br i1 %193, label %194, label %211

194:                                              ; preds = %190
  %195 = load ptr, ptr %37, align 8, !tbaa !5
  %196 = load i64, ptr %9, align 8, !tbaa !9
  %197 = load i64, ptr %7, align 8, !tbaa !9
  %198 = mul nsw i64 %196, %197
  %199 = load i64, ptr %11, align 8, !tbaa !9
  %200 = add nsw i64 %198, %199
  %201 = getelementptr inbounds i64, ptr %195, i64 %200
  %202 = load i64, ptr %201, align 8, !tbaa !9
  %203 = icmp sgt i64 %202, 0
  br i1 %203, label %204, label %207

204:                                              ; preds = %194
  %205 = load i64, ptr %12, align 8, !tbaa !9
  %206 = add nsw i64 %205, 1
  store i64 %206, ptr %12, align 8, !tbaa !9
  br label %207

207:                                              ; preds = %204, %194
  br label %208

208:                                              ; preds = %207
  %209 = load i64, ptr %11, align 8, !tbaa !9
  %210 = add nsw i64 %209, 1
  store i64 %210, ptr %11, align 8, !tbaa !9
  br label %190, !llvm.loop !30

211:                                              ; preds = %190
  %212 = load i64, ptr %12, align 8, !tbaa !9
  %213 = load ptr, ptr %38, align 8, !tbaa !5
  %214 = load i64, ptr %9, align 8, !tbaa !9
  %215 = getelementptr inbounds i64, ptr %213, i64 %214
  store i64 %212, ptr %215, align 8, !tbaa !9
  br label %216

216:                                              ; preds = %211
  %217 = load i64, ptr %9, align 8, !tbaa !9
  %218 = add nsw i64 %217, 1
  store i64 %218, ptr %9, align 8, !tbaa !9
  br label %185, !llvm.loop !31

219:                                              ; preds = %185
  br label %220

220:                                              ; preds = %866, %219
  %221 = load i64, ptr %7, align 8, !tbaa !9
  %222 = load ptr, ptr %38, align 8, !tbaa !5
  %223 = call i64 @libmetis__idxsum(i64 noundef %221, ptr noundef %222, i64 noundef 1)
  store i64 %223, ptr %16, align 8, !tbaa !9
  %224 = load i64, ptr %16, align 8, !tbaa !9
  %225 = load i64, ptr %7, align 8, !tbaa !9
  %226 = sdiv i64 %224, %225
  store i64 %226, ptr %18, align 8, !tbaa !9
  %227 = load ptr, ptr %38, align 8, !tbaa !5
  %228 = load i64, ptr %7, align 8, !tbaa !9
  %229 = load ptr, ptr %38, align 8, !tbaa !5
  %230 = call i64 @libmetis__idxargmax(i64 noundef %228, ptr noundef %229)
  %231 = getelementptr inbounds i64, ptr %227, i64 %230
  %232 = load i64, ptr %231, align 8, !tbaa !9
  store i64 %232, ptr %17, align 8, !tbaa !9
  %233 = load i64, ptr %17, align 8, !tbaa !9
  %234 = sitofp i64 %233 to double
  %235 = load i64, ptr %18, align 8, !tbaa !9
  %236 = sitofp i64 %235 to double
  %237 = fmul double 1.500000e+00, %236
  %238 = fcmp olt double %234, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %220
  br label %867

240:                                              ; preds = %220
  %241 = load i64, ptr %7, align 8, !tbaa !9
  %242 = load ptr, ptr %38, align 8, !tbaa !5
  %243 = call i64 @libmetis__idxargmax(i64 noundef %241, ptr noundef %242)
  store i64 %243, ptr %13, align 8, !tbaa !9
  %244 = load ptr, ptr %37, align 8, !tbaa !5
  %245 = load i64, ptr %13, align 8, !tbaa !9
  %246 = load i64, ptr %7, align 8, !tbaa !9
  %247 = mul nsw i64 %245, %246
  %248 = getelementptr inbounds i64, ptr %244, i64 %247
  store ptr %248, ptr %39, align 8, !tbaa !5
  %249 = load i64, ptr %7, align 8, !tbaa !9
  %250 = load ptr, ptr %39, align 8, !tbaa !5
  %251 = call i64 @libmetis__idxsum(i64 noundef %249, ptr noundef %250, i64 noundef 1)
  store i64 %251, ptr %19, align 8, !tbaa !9
  store i64 0, ptr %22, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %252

252:                                              ; preds = %278, %240
  %253 = load i64, ptr %9, align 8, !tbaa !9
  %254 = load i64, ptr %7, align 8, !tbaa !9
  %255 = icmp slt i64 %253, %254
  br i1 %255, label %256, label %281

256:                                              ; preds = %252
  %257 = load ptr, ptr %39, align 8, !tbaa !5
  %258 = load i64, ptr %9, align 8, !tbaa !9
  %259 = getelementptr inbounds i64, ptr %257, i64 %258
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = icmp sgt i64 %260, 0
  br i1 %261, label %262, label %277

262:                                              ; preds = %256
  %263 = load ptr, ptr %39, align 8, !tbaa !5
  %264 = load i64, ptr %9, 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 %43, align 8, !tbaa !5
  %268 = load i64, ptr %22, align 8, !tbaa !9
  %269 = getelementptr inbounds %struct.KeyValueType, ptr %267, i64 %268
  %270 = getelementptr inbounds %struct.KeyValueType, ptr %269, i32 0, i32 0
  store i64 %266, ptr %270, align 8, !tbaa !32
  %271 = load i64, ptr %9, align 8, !tbaa !9
  %272 = load ptr, ptr %43, align 8, !tbaa !5
  %273 = load i64, ptr %22, align 8, !tbaa !9
  %274 = add nsw i64 %273, 1
  store i64 %274, ptr %22, align 8, !tbaa !9
  %275 = getelementptr inbounds %struct.KeyValueType, ptr %272, i64 %273
  %276 = getelementptr inbounds %struct.KeyValueType, ptr %275, i32 0, i32 1
  store i64 %271, ptr %276, align 8, !tbaa !34
  br label %277

277:                                              ; preds = %262, %256
  br label %278

278:                                              ; preds = %277
  %279 = load i64, ptr %9, align 8, !tbaa !9
  %280 = add nsw i64 %279, 1
  store i64 %280, ptr %9, align 8, !tbaa !9
  br label %252, !llvm.loop !35

281:                                              ; preds = %252
  %282 = load i64, ptr %22, align 8, !tbaa !9
  %283 = load ptr, ptr %43, align 8, !tbaa !5
  call void @libmetis__ikeysort(i64 noundef %282, ptr noundef %283)
  store i64 0, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %26, align 8, !tbaa !9
  br label %284

284:                                              ; preds = %859, %281
  %285 = load i64, ptr %26, align 8, !tbaa !9
  %286 = load i64, ptr %22, align 8, !tbaa !9
  %287 = icmp slt i64 %285, %286
  br i1 %287, label %288, label %862

288:                                              ; preds = %284
  %289 = load ptr, ptr %43, align 8, !tbaa !5
  %290 = load i64, ptr %26, align 8, !tbaa !9
  %291 = getelementptr inbounds %struct.KeyValueType, ptr %289, i64 %290
  %292 = getelementptr inbounds %struct.KeyValueType, ptr %291, i32 0, i32 0
  %293 = load i64, ptr %292, align 8, !tbaa !32
  %294 = load i64, ptr %19, align 8, !tbaa !9
  %295 = load ptr, ptr %38, align 8, !tbaa !5
  %296 = load i64, ptr %13, align 8, !tbaa !9
  %297 = getelementptr inbounds i64, ptr %295, i64 %296
  %298 = load i64, ptr %297, align 8, !tbaa !9
  %299 = mul nsw i64 2, %298
  %300 = sdiv i64 %294, %299
  %301 = icmp sgt i64 %293, %300
  br i1 %301, label %302, label %303

302:                                              ; preds = %288
  br label %862

303:                                              ; preds = %288
  %304 = load ptr, ptr %43, align 8, !tbaa !5
  %305 = load i64, ptr %26, align 8, !tbaa !9
  %306 = getelementptr inbounds %struct.KeyValueType, ptr %304, i64 %305
  %307 = getelementptr inbounds %struct.KeyValueType, ptr %306, i32 0, i32 1
  %308 = load i64, ptr %307, align 8, !tbaa !34
  store i64 %308, ptr %14, align 8, !tbaa !9
  %309 = load i64, ptr %7, align 8, !tbaa !9
  %310 = load ptr, ptr %40, align 8, !tbaa !5
  %311 = call ptr @libmetis__idxset(i64 noundef %309, i64 noundef 0, ptr noundef %310)
  store i64 0, ptr %20, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %312

312:                                              ; preds = %358, %303
  %313 = load i64, ptr %9, align 8, !tbaa !9
  %314 = load i64, ptr %15, align 8, !tbaa !9
  %315 = icmp slt i64 %313, %314
  br i1 %315, label %316, label %361

316:                                              ; preds = %312
  %317 = load ptr, ptr %35, align 8, !tbaa !5
  %318 = load i64, ptr %9, align 8, !tbaa !9
  %319 = getelementptr inbounds i64, ptr %317, i64 %318
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = load i64, ptr %14, align 8, !tbaa !9
  %322 = icmp eq i64 %320, %321
  br i1 %322, label %323, label %357

323:                                              ; preds = %316
  %324 = load ptr, ptr %30, align 8, !tbaa !5
  %325 = load i64, ptr %9, align 8, !tbaa !9
  %326 = getelementptr inbounds i64, ptr %324, i64 %325
  %327 = load i64, ptr %326, align 8, !tbaa !9
  store i64 %327, ptr %11, align 8, !tbaa !9
  br label %328

328:                                              ; preds = %353, %323
  %329 = load i64, ptr %11, align 8, !tbaa !9
  %330 = load ptr, ptr %30, align 8, !tbaa !5
  %331 = load i64, ptr %9, align 8, !tbaa !9
  %332 = add nsw i64 %331, 1
  %333 = getelementptr inbounds i64, ptr %330, i64 %332
  %334 = load i64, ptr %333, align 8, !tbaa !9
  %335 = icmp slt i64 %329, %334
  br i1 %335, label %336, label %356

336:                                              ; preds = %328
  %337 = load ptr, ptr %35, align 8, !tbaa !5
  %338 = load ptr, ptr %31, align 8, !tbaa !5
  %339 = load i64, ptr %11, align 8, !tbaa !9
  %340 = getelementptr inbounds i64, ptr %338, i64 %339
  %341 = load i64, ptr %340, align 8, !tbaa !9
  %342 = getelementptr inbounds i64, ptr %337, i64 %341
  %343 = load i64, ptr %342, align 8, !tbaa !9
  %344 = load i64, ptr %13, align 8, !tbaa !9
  %345 = icmp eq i64 %343, %344
  br i1 %345, label %346, label %352

346:                                              ; preds = %336
  %347 = load i64, ptr %9, align 8, !tbaa !9
  %348 = load ptr, ptr %41, align 8, !tbaa !5
  %349 = load i64, ptr %20, align 8, !tbaa !9
  %350 = add nsw i64 %349, 1
  store i64 %350, ptr %20, align 8, !tbaa !9
  %351 = getelementptr inbounds i64, ptr %348, i64 %349
  store i64 %347, ptr %351, align 8, !tbaa !9
  br label %356

352:                                              ; preds = %336
  br label %353

353:                                              ; preds = %352
  %354 = load i64, ptr %11, align 8, !tbaa !9
  %355 = add nsw i64 %354, 1
  store i64 %355, ptr %11, align 8, !tbaa !9
  br label %328, !llvm.loop !36

356:                                              ; preds = %346, %328
  br label %357

357:                                              ; preds = %356, %316
  br label %358

358:                                              ; preds = %357
  %359 = load i64, ptr %9, align 8, !tbaa !9
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %9, align 8, !tbaa !9
  br label %312, !llvm.loop !37

361:                                              ; preds = %312
  store i64 0, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %362

362:                                              ; preds = %418, %361
  %363 = load i64, ptr %10, align 8, !tbaa !9
  %364 = load i64, ptr %20, align 8, !tbaa !9
  %365 = icmp slt i64 %363, %364
  br i1 %365, label %366, label %421

366:                                              ; preds = %362
  %367 = load ptr, ptr %41, align 8, !tbaa !5
  %368 = load i64, ptr %10, align 8, !tbaa !9
  %369 = getelementptr inbounds i64, ptr %367, i64 %368
  %370 = load i64, ptr %369, align 8, !tbaa !9
  store i64 %370, ptr %9, align 8, !tbaa !9
  %371 = load ptr, ptr %32, align 8, !tbaa !5
  %372 = load i64, ptr %9, align 8, !tbaa !9
  %373 = getelementptr inbounds i64, ptr %371, i64 %372
  %374 = load i64, ptr %373, align 8, !tbaa !9
  %375 = load i64, ptr %28, align 8, !tbaa !9
  %376 = add nsw i64 %375, %374
  store i64 %376, ptr %28, align 8, !tbaa !9
  %377 = load ptr, ptr %30, align 8, !tbaa !5
  %378 = load i64, ptr %9, align 8, !tbaa !9
  %379 = getelementptr inbounds i64, ptr %377, i64 %378
  %380 = load i64, ptr %379, align 8, !tbaa !9
  store i64 %380, ptr %11, align 8, !tbaa !9
  br label %381

381:                                              ; preds = %414, %366
  %382 = load i64, ptr %11, align 8, !tbaa !9
  %383 = load ptr, ptr %30, align 8, !tbaa !5
  %384 = load i64, ptr %9, align 8, !tbaa !9
  %385 = add nsw i64 %384, 1
  %386 = getelementptr inbounds i64, ptr %383, i64 %385
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = icmp slt i64 %382, %387
  br i1 %388, label %389, label %417

389:                                              ; preds = %381
  %390 = load ptr, ptr %31, align 8, !tbaa !5
  %391 = load i64, ptr %11, align 8, !tbaa !9
  %392 = getelementptr inbounds i64, ptr %390, i64 %391
  %393 = load i64, ptr %392, align 8, !tbaa !9
  store i64 %393, ptr %12, align 8, !tbaa !9
  %394 = load ptr, ptr %35, align 8, !tbaa !5
  %395 = load i64, ptr %12, align 8, !tbaa !9
  %396 = getelementptr inbounds i64, ptr %394, i64 %395
  %397 = load i64, ptr %396, align 8, !tbaa !9
  %398 = load i64, ptr %14, align 8, !tbaa !9
  %399 = icmp ne i64 %397, %398
  br i1 %399, label %400, label %413

400:                                              ; preds = %389
  %401 = load ptr, ptr %33, align 8, !tbaa !5
  %402 = load i64, ptr %11, align 8, !tbaa !9
  %403 = getelementptr inbounds i64, ptr %401, i64 %402
  %404 = load i64, ptr %403, align 8, !tbaa !9
  %405 = load ptr, ptr %40, align 8, !tbaa !5
  %406 = load ptr, ptr %35, align 8, !tbaa !5
  %407 = load i64, ptr %12, align 8, !tbaa !9
  %408 = getelementptr inbounds i64, ptr %406, i64 %407
  %409 = load i64, ptr %408, align 8, !tbaa !9
  %410 = getelementptr inbounds i64, ptr %405, i64 %409
  %411 = load i64, ptr %410, align 8, !tbaa !9
  %412 = add nsw i64 %411, %404
  store i64 %412, ptr %410, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %400, %389
  br label %414

414:                                              ; preds = %413
  %415 = load i64, ptr %11, align 8, !tbaa !9
  %416 = add nsw i64 %415, 1
  store i64 %416, ptr %11, align 8, !tbaa !9
  br label %381, !llvm.loop !38

417:                                              ; preds = %381
  br label %418

418:                                              ; preds = %417
  %419 = load i64, ptr %10, align 8, !tbaa !9
  %420 = add nsw i64 %419, 1
  store i64 %420, ptr %10, align 8, !tbaa !9
  br label %362, !llvm.loop !39

421:                                              ; preds = %362
  store i64 0, ptr %21, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %422

422:                                              ; preds = %449, %421
  %423 = load i64, ptr %9, align 8, !tbaa !9
  %424 = load i64, ptr %7, align 8, !tbaa !9
  %425 = icmp slt i64 %423, %424
  br i1 %425, label %426, label %452

426:                                              ; preds = %422
  %427 = load ptr, ptr %40, align 8, !tbaa !5
  %428 = load i64, ptr %9, align 8, !tbaa !9
  %429 = getelementptr inbounds i64, ptr %427, i64 %428
  %430 = load i64, ptr %429, align 8, !tbaa !9
  %431 = icmp sgt i64 %430, 0
  br i1 %431, label %432, label %448

432:                                              ; preds = %426
  %433 = load ptr, ptr %40, align 8, !tbaa !5
  %434 = load i64, ptr %9, align 8, !tbaa !9
  %435 = getelementptr inbounds i64, ptr %433, i64 %434
  %436 = load i64, ptr %435, align 8, !tbaa !9
  %437 = sub nsw i64 0, %436
  %438 = load ptr, ptr %42, align 8, !tbaa !5
  %439 = load i64, ptr %21, align 8, !tbaa !9
  %440 = getelementptr inbounds %struct.KeyValueType, ptr %438, i64 %439
  %441 = getelementptr inbounds %struct.KeyValueType, ptr %440, i32 0, i32 0
  store i64 %437, ptr %441, align 8, !tbaa !32
  %442 = load i64, ptr %9, align 8, !tbaa !9
  %443 = load ptr, ptr %42, align 8, !tbaa !5
  %444 = load i64, ptr %21, align 8, !tbaa !9
  %445 = add nsw i64 %444, 1
  store i64 %445, ptr %21, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct.KeyValueType, ptr %443, i64 %444
  %447 = getelementptr inbounds %struct.KeyValueType, ptr %446, i32 0, i32 1
  store i64 %442, ptr %447, align 8, !tbaa !34
  br label %448

448:                                              ; preds = %432, %426
  br label %449

449:                                              ; preds = %448
  %450 = load i64, ptr %9, align 8, !tbaa !9
  %451 = add nsw i64 %450, 1
  store i64 %451, ptr %9, align 8, !tbaa !9
  br label %422, !llvm.loop !40

452:                                              ; preds = %422
  %453 = load i64, ptr %21, align 8, !tbaa !9
  %454 = load ptr, ptr %42, align 8, !tbaa !5
  call void @libmetis__ikeysort(i64 noundef %453, ptr noundef %454)
  store i64 -1, ptr %24, align 8, !tbaa !9
  store i64 -1, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %455

455:                                              ; preds = %577, %452
  %456 = load i64, ptr %9, align 8, !tbaa !9
  %457 = load i64, ptr %21, align 8, !tbaa !9
  %458 = icmp slt i64 %456, %457
  br i1 %458, label %459, label %580

459:                                              ; preds = %455
  %460 = load ptr, ptr %42, align 8, !tbaa !5
  %461 = load i64, ptr %9, align 8, !tbaa !9
  %462 = getelementptr inbounds %struct.KeyValueType, ptr %460, i64 %461
  %463 = getelementptr inbounds %struct.KeyValueType, ptr %462, i32 0, i32 1
  %464 = load i64, ptr %463, align 8, !tbaa !34
  store i64 %464, ptr %12, align 8, !tbaa !9
  %465 = load ptr, ptr %39, align 8, !tbaa !5
  %466 = load i64, ptr %12, align 8, !tbaa !9
  %467 = getelementptr inbounds i64, ptr %465, i64 %466
  %468 = load i64, ptr %467, align 8, !tbaa !9
  %469 = icmp sgt i64 %468, 0
  br i1 %469, label %470, label %576

470:                                              ; preds = %459
  %471 = load ptr, ptr %34, align 8, !tbaa !5
  %472 = load i64, ptr %12, align 8, !tbaa !9
  %473 = getelementptr inbounds i64, ptr %471, i64 %472
  %474 = load i64, ptr %473, align 8, !tbaa !9
  %475 = load i64, ptr %28, align 8, !tbaa !9
  %476 = add nsw i64 %474, %475
  %477 = load ptr, ptr %36, align 8, !tbaa !5
  %478 = load i64, ptr %12, align 8, !tbaa !9
  %479 = getelementptr inbounds i64, ptr %477, i64 %478
  %480 = load i64, ptr %479, align 8, !tbaa !9
  %481 = icmp sgt i64 %476, %480
  br i1 %481, label %482, label %483

482:                                              ; preds = %470
  br label %577

483:                                              ; preds = %470
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %484

484:                                              ; preds = %517, %483
  %485 = load i64, ptr %11, align 8, !tbaa !9
  %486 = load i64, ptr %7, align 8, !tbaa !9
  %487 = icmp slt i64 %485, %486
  br i1 %487, label %488, label %520

488:                                              ; preds = %484
  %489 = load ptr, ptr %40, align 8, !tbaa !5
  %490 = load i64, ptr %11, align 8, !tbaa !9
  %491 = getelementptr inbounds i64, ptr %489, i64 %490
  %492 = load i64, ptr %491, align 8, !tbaa !9
  %493 = icmp sgt i64 %492, 0
  br i1 %493, label %494, label %516

494:                                              ; preds = %488
  %495 = load ptr, ptr %38, align 8, !tbaa !5
  %496 = load i64, ptr %11, align 8, !tbaa !9
  %497 = getelementptr inbounds i64, ptr %495, i64 %496
  %498 = load i64, ptr %497, align 8, !tbaa !9
  %499 = load ptr, ptr %38, align 8, !tbaa !5
  %500 = load i64, ptr %13, align 8, !tbaa !9
  %501 = getelementptr inbounds i64, ptr %499, i64 %500
  %502 = load i64, ptr %501, align 8, !tbaa !9
  %503 = sub nsw i64 %502, 1
  %504 = icmp sge i64 %498, %503
  br i1 %504, label %505, label %516

505:                                              ; preds = %494
  %506 = load ptr, ptr %37, align 8, !tbaa !5
  %507 = load i64, ptr %7, align 8, !tbaa !9
  %508 = load i64, ptr %11, align 8, !tbaa !9
  %509 = mul nsw i64 %507, %508
  %510 = load i64, ptr %12, align 8, !tbaa !9
  %511 = add nsw i64 %509, %510
  %512 = getelementptr inbounds i64, ptr %506, i64 %511
  %513 = load i64, ptr %512, align 8, !tbaa !9
  %514 = icmp eq i64 %513, 0
  br i1 %514, label %515, label %516

515:                                              ; preds = %505
  br label %520

516:                                              ; preds = %505, %494, %488
  br label %517

517:                                              ; preds = %516
  %518 = load i64, ptr %11, align 8, !tbaa !9
  %519 = add nsw i64 %518, 1
  store i64 %519, ptr %11, align 8, !tbaa !9
  br label %484, !llvm.loop !41

520:                                              ; preds = %515, %484
  %521 = load i64, ptr %11, align 8, !tbaa !9
  %522 = load i64, ptr %7, align 8, !tbaa !9
  %523 = icmp eq i64 %521, %522
  br i1 %523, label %524, label %575

524:                                              ; preds = %520
  store i64 0, ptr %25, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %525

525:                                              ; preds = %549, %524
  %526 = load i64, ptr %11, align 8, !tbaa !9
  %527 = load i64, ptr %7, align 8, !tbaa !9
  %528 = icmp slt i64 %526, %527
  br i1 %528, label %529, label %552

529:                                              ; preds = %525
  %530 = load ptr, ptr %40, align 8, !tbaa !5
  %531 = load i64, ptr %11, align 8, !tbaa !9
  %532 = getelementptr inbounds i64, ptr %530, i64 %531
  %533 = load i64, ptr %532, align 8, !tbaa !9
  %534 = icmp sgt i64 %533, 0
  br i1 %534, label %535, label %548

535:                                              ; preds = %529
  %536 = load ptr, ptr %37, align 8, !tbaa !5
  %537 = load i64, ptr %7, align 8, !tbaa !9
  %538 = load i64, ptr %12, align 8, !tbaa !9
  %539 = mul nsw i64 %537, %538
  %540 = load i64, ptr %11, align 8, !tbaa !9
  %541 = add nsw i64 %539, %540
  %542 = getelementptr inbounds i64, ptr %536, i64 %541
  %543 = load i64, ptr %542, align 8, !tbaa !9
  %544 = icmp eq i64 %543, 0
  br i1 %544, label %545, label %548

545:                                              ; preds = %535
  %546 = load i64, ptr %25, align 8, !tbaa !9
  %547 = add nsw i64 %546, 1
  store i64 %547, ptr %25, align 8, !tbaa !9
  br label %548

548:                                              ; preds = %545, %535, %529
  br label %549

549:                                              ; preds = %548
  %550 = load i64, ptr %11, align 8, !tbaa !9
  %551 = add nsw i64 %550, 1
  store i64 %551, ptr %11, align 8, !tbaa !9
  br label %525, !llvm.loop !42

552:                                              ; preds = %525
  %553 = load i64, ptr %24, align 8, !tbaa !9
  %554 = icmp eq i64 %553, -1
  br i1 %554, label %555, label %569

555:                                              ; preds = %552
  %556 = load ptr, ptr %38, align 8, !tbaa !5
  %557 = load i64, ptr %12, align 8, !tbaa !9
  %558 = getelementptr inbounds i64, ptr %556, i64 %557
  %559 = load i64, ptr %558, align 8, !tbaa !9
  %560 = load i64, ptr %25, align 8, !tbaa !9
  %561 = add nsw i64 %559, %560
  %562 = load ptr, ptr %38, align 8, !tbaa !5
  %563 = load i64, ptr %13, align 8, !tbaa !9
  %564 = getelementptr inbounds i64, ptr %562, i64 %563
  %565 = load i64, ptr %564, align 8, !tbaa !9
  %566 = icmp slt i64 %561, %565
  br i1 %566, label %567, label %569

567:                                              ; preds = %555
  %568 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %568, ptr %24, align 8, !tbaa !9
  br label %569

569:                                              ; preds = %567, %555, %552
  %570 = load i64, ptr %25, align 8, !tbaa !9
  %571 = icmp eq i64 %570, 0
  br i1 %571, label %572, label %574

572:                                              ; preds = %569
  %573 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %573, ptr %23, align 8, !tbaa !9
  br label %580

574:                                              ; preds = %569
  br label %575

575:                                              ; preds = %574, %520
  br label %576

576:                                              ; preds = %575, %459
  br label %577

577:                                              ; preds = %576, %482
  %578 = load i64, ptr %9, align 8, !tbaa !9
  %579 = add nsw i64 %578, 1
  store i64 %579, ptr %9, align 8, !tbaa !9
  br label %455, !llvm.loop !43

580:                                              ; preds = %572, %455
  %581 = load i64, ptr %23, align 8, !tbaa !9
  %582 = icmp eq i64 %581, -1
  br i1 %582, label %583, label %588

583:                                              ; preds = %580
  %584 = load i64, ptr %24, align 8, !tbaa !9
  %585 = icmp ne i64 %584, -1
  br i1 %585, label %586, label %588

586:                                              ; preds = %583
  %587 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %587, ptr %23, align 8, !tbaa !9
  br label %588

588:                                              ; preds = %586, %583, %580
  %589 = load i64, ptr %23, align 8, !tbaa !9
  %590 = icmp eq i64 %589, -1
  br i1 %590, label %591, label %592

591:                                              ; preds = %588
  br label %859

592:                                              ; preds = %588
  br label %593

593:                                              ; preds = %592
  %594 = load i64, ptr %28, align 8, !tbaa !9
  %595 = load ptr, ptr %34, align 8, !tbaa !5
  %596 = load i64, ptr %23, align 8, !tbaa !9
  %597 = getelementptr inbounds i64, ptr %595, i64 %596
  %598 = load i64, ptr %597, align 8, !tbaa !9
  %599 = add nsw i64 %598, %594
  store i64 %599, ptr %597, align 8, !tbaa !9
  %600 = load i64, ptr %28, align 8, !tbaa !9
  %601 = load ptr, ptr %34, align 8, !tbaa !5
  %602 = load i64, ptr %14, align 8, !tbaa !9
  %603 = getelementptr inbounds i64, ptr %601, i64 %602
  %604 = load i64, ptr %603, align 8, !tbaa !9
  %605 = sub nsw i64 %604, %600
  store i64 %605, ptr %603, align 8, !tbaa !9
  br label %606

606:                                              ; preds = %593
  br label %607

607:                                              ; preds = %606
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %608

608:                                              ; preds = %855, %607
  %609 = load i64, ptr %10, align 8, !tbaa !9
  %610 = load i64, ptr %20, align 8, !tbaa !9
  %611 = icmp slt i64 %609, %610
  br i1 %611, label %612, label %858

612:                                              ; preds = %608
  %613 = load ptr, ptr %41, align 8, !tbaa !5
  %614 = load i64, ptr %10, align 8, !tbaa !9
  %615 = getelementptr inbounds i64, ptr %613, i64 %614
  %616 = load i64, ptr %615, align 8, !tbaa !9
  store i64 %616, ptr %9, align 8, !tbaa !9
  %617 = load i64, ptr %23, align 8, !tbaa !9
  %618 = load ptr, ptr %35, align 8, !tbaa !5
  %619 = load i64, ptr %9, align 8, !tbaa !9
  %620 = getelementptr inbounds i64, ptr %618, i64 %619
  store i64 %617, ptr %620, align 8, !tbaa !9
  %621 = load ptr, ptr %30, align 8, !tbaa !5
  %622 = load i64, ptr %9, align 8, !tbaa !9
  %623 = getelementptr inbounds i64, ptr %621, i64 %622
  %624 = load i64, ptr %623, align 8, !tbaa !9
  store i64 %624, ptr %11, align 8, !tbaa !9
  br label %625

625:                                              ; preds = %749, %612
  %626 = load i64, ptr %11, align 8, !tbaa !9
  %627 = load ptr, ptr %30, align 8, !tbaa !5
  %628 = load i64, ptr %9, align 8, !tbaa !9
  %629 = add nsw i64 %628, 1
  %630 = getelementptr inbounds i64, ptr %627, i64 %629
  %631 = load i64, ptr %630, align 8, !tbaa !9
  %632 = icmp slt i64 %626, %631
  br i1 %632, label %633, label %752

633:                                              ; preds = %625
  %634 = load ptr, ptr %31, align 8, !tbaa !5
  %635 = load i64, ptr %11, align 8, !tbaa !9
  %636 = getelementptr inbounds i64, ptr %634, i64 %635
  %637 = load i64, ptr %636, align 8, !tbaa !9
  store i64 %637, ptr %12, align 8, !tbaa !9
  %638 = load ptr, ptr %35, align 8, !tbaa !5
  %639 = load i64, ptr %12, align 8, !tbaa !9
  %640 = getelementptr inbounds i64, ptr %638, i64 %639
  %641 = load i64, ptr %640, align 8, !tbaa !9
  %642 = load i64, ptr %14, align 8, !tbaa !9
  %643 = icmp ne i64 %641, %642
  br i1 %643, label %644, label %748

644:                                              ; preds = %633
  %645 = load ptr, ptr %37, align 8, !tbaa !5
  %646 = load i64, ptr %7, align 8, !tbaa !9
  %647 = load i64, ptr %14, align 8, !tbaa !9
  %648 = mul nsw i64 %646, %647
  %649 = load ptr, ptr %35, align 8, !tbaa !5
  %650 = load i64, ptr %12, align 8, !tbaa !9
  %651 = getelementptr inbounds i64, ptr %649, i64 %650
  %652 = load i64, ptr %651, align 8, !tbaa !9
  %653 = add nsw i64 %648, %652
  %654 = getelementptr inbounds i64, ptr %645, i64 %653
  %655 = load i64, ptr %654, align 8, !tbaa !9
  %656 = icmp eq i64 %655, 0
  br i1 %656, label %657, label %659

657:                                              ; preds = %644
  %658 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.12)
  br label %659

659:                                              ; preds = %657, %644
  %660 = load ptr, ptr %33, align 8, !tbaa !5
  %661 = load i64, ptr %11, align 8, !tbaa !9
  %662 = getelementptr inbounds i64, ptr %660, i64 %661
  %663 = load i64, ptr %662, align 8, !tbaa !9
  %664 = load ptr, ptr %37, align 8, !tbaa !5
  %665 = load i64, ptr %7, align 8, !tbaa !9
  %666 = load i64, ptr %14, align 8, !tbaa !9
  %667 = mul nsw i64 %665, %666
  %668 = load ptr, ptr %35, align 8, !tbaa !5
  %669 = load i64, ptr %12, align 8, !tbaa !9
  %670 = getelementptr inbounds i64, ptr %668, i64 %669
  %671 = load i64, ptr %670, align 8, !tbaa !9
  %672 = add nsw i64 %667, %671
  %673 = getelementptr inbounds i64, ptr %664, i64 %672
  %674 = load i64, ptr %673, align 8, !tbaa !9
  %675 = sub nsw i64 %674, %663
  store i64 %675, ptr %673, align 8, !tbaa !9
  %676 = load ptr, ptr %37, align 8, !tbaa !5
  %677 = load i64, ptr %7, align 8, !tbaa !9
  %678 = load i64, ptr %14, align 8, !tbaa !9
  %679 = mul nsw i64 %677, %678
  %680 = load ptr, ptr %35, align 8, !tbaa !5
  %681 = load i64, ptr %12, align 8, !tbaa !9
  %682 = getelementptr inbounds i64, ptr %680, i64 %681
  %683 = load i64, ptr %682, align 8, !tbaa !9
  %684 = add nsw i64 %679, %683
  %685 = getelementptr inbounds i64, ptr %676, i64 %684
  %686 = load i64, ptr %685, align 8, !tbaa !9
  %687 = icmp eq i64 %686, 0
  br i1 %687, label %688, label %694

688:                                              ; preds = %659
  %689 = load ptr, ptr %38, align 8, !tbaa !5
  %690 = load i64, ptr %14, align 8, !tbaa !9
  %691 = getelementptr inbounds i64, ptr %689, i64 %690
  %692 = load i64, ptr %691, align 8, !tbaa !9
  %693 = add nsw i64 %692, -1
  store i64 %693, ptr %691, align 8, !tbaa !9
  br label %694

694:                                              ; preds = %688, %659
  %695 = load ptr, ptr %37, align 8, !tbaa !5
  %696 = load i64, ptr %7, align 8, !tbaa !9
  %697 = load ptr, ptr %35, align 8, !tbaa !5
  %698 = load i64, ptr %12, align 8, !tbaa !9
  %699 = getelementptr inbounds i64, ptr %697, i64 %698
  %700 = load i64, ptr %699, align 8, !tbaa !9
  %701 = mul nsw i64 %696, %700
  %702 = load i64, ptr %14, align 8, !tbaa !9
  %703 = add nsw i64 %701, %702
  %704 = getelementptr inbounds i64, ptr %695, i64 %703
  %705 = load i64, ptr %704, align 8, !tbaa !9
  %706 = icmp eq i64 %705, 0
  br i1 %706, label %707, label %709

707:                                              ; preds = %694
  %708 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.12)
  br label %709

709:                                              ; preds = %707, %694
  %710 = load ptr, ptr %33, align 8, !tbaa !5
  %711 = load i64, ptr %11, align 8, !tbaa !9
  %712 = getelementptr inbounds i64, ptr %710, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !9
  %714 = load ptr, ptr %37, align 8, !tbaa !5
  %715 = load i64, ptr %7, align 8, !tbaa !9
  %716 = load ptr, ptr %35, align 8, !tbaa !5
  %717 = load i64, ptr %12, align 8, !tbaa !9
  %718 = getelementptr inbounds i64, ptr %716, i64 %717
  %719 = load i64, ptr %718, align 8, !tbaa !9
  %720 = mul nsw i64 %715, %719
  %721 = load i64, ptr %14, align 8, !tbaa !9
  %722 = add nsw i64 %720, %721
  %723 = getelementptr inbounds i64, ptr %714, i64 %722
  %724 = load i64, ptr %723, align 8, !tbaa !9
  %725 = sub nsw i64 %724, %713
  store i64 %725, ptr %723, align 8, !tbaa !9
  %726 = load ptr, ptr %37, align 8, !tbaa !5
  %727 = load i64, ptr %7, align 8, !tbaa !9
  %728 = load ptr, ptr %35, align 8, !tbaa !5
  %729 = load i64, ptr %12, align 8, !tbaa !9
  %730 = getelementptr inbounds i64, ptr %728, i64 %729
  %731 = load i64, ptr %730, align 8, !tbaa !9
  %732 = mul nsw i64 %727, %731
  %733 = load i64, ptr %14, align 8, !tbaa !9
  %734 = add nsw i64 %732, %733
  %735 = getelementptr inbounds i64, ptr %726, i64 %734
  %736 = load i64, ptr %735, align 8, !tbaa !9
  %737 = icmp eq i64 %736, 0
  br i1 %737, label %738, label %747

738:                                              ; preds = %709
  %739 = load ptr, ptr %38, align 8, !tbaa !5
  %740 = load ptr, ptr %35, align 8, !tbaa !5
  %741 = load i64, ptr %12, align 8, !tbaa !9
  %742 = getelementptr inbounds i64, ptr %740, i64 %741
  %743 = load i64, ptr %742, align 8, !tbaa !9
  %744 = getelementptr inbounds i64, ptr %739, i64 %743
  %745 = load i64, ptr %744, align 8, !tbaa !9
  %746 = add nsw i64 %745, -1
  store i64 %746, ptr %744, align 8, !tbaa !9
  br label %747

747:                                              ; preds = %738, %709
  br label %748

748:                                              ; preds = %747, %633
  br label %749

749:                                              ; preds = %748
  %750 = load i64, ptr %11, align 8, !tbaa !9
  %751 = add nsw i64 %750, 1
  store i64 %751, ptr %11, align 8, !tbaa !9
  br label %625, !llvm.loop !44

752:                                              ; preds = %625
  %753 = load ptr, ptr %30, align 8, !tbaa !5
  %754 = load i64, ptr %9, align 8, !tbaa !9
  %755 = getelementptr inbounds i64, ptr %753, i64 %754
  %756 = load i64, ptr %755, align 8, !tbaa !9
  store i64 %756, ptr %11, align 8, !tbaa !9
  br label %757

757:                                              ; preds = %851, %752
  %758 = load i64, ptr %11, align 8, !tbaa !9
  %759 = load ptr, ptr %30, align 8, !tbaa !5
  %760 = load i64, ptr %9, align 8, !tbaa !9
  %761 = add nsw i64 %760, 1
  %762 = getelementptr inbounds i64, ptr %759, i64 %761
  %763 = load i64, ptr %762, align 8, !tbaa !9
  %764 = icmp slt i64 %758, %763
  br i1 %764, label %765, label %854

765:                                              ; preds = %757
  %766 = load ptr, ptr %31, align 8, !tbaa !5
  %767 = load i64, ptr %11, align 8, !tbaa !9
  %768 = getelementptr inbounds i64, ptr %766, i64 %767
  %769 = load i64, ptr %768, align 8, !tbaa !9
  store i64 %769, ptr %12, align 8, !tbaa !9
  %770 = load ptr, ptr %35, align 8, !tbaa !5
  %771 = load i64, ptr %12, align 8, !tbaa !9
  %772 = getelementptr inbounds i64, ptr %770, i64 %771
  %773 = load i64, ptr %772, align 8, !tbaa !9
  %774 = load i64, ptr %23, align 8, !tbaa !9
  %775 = icmp ne i64 %773, %774
  br i1 %775, label %776, label %850

776:                                              ; preds = %765
  %777 = load ptr, ptr %37, align 8, !tbaa !5
  %778 = load i64, ptr %7, align 8, !tbaa !9
  %779 = load i64, ptr %23, align 8, !tbaa !9
  %780 = mul nsw i64 %778, %779
  %781 = load ptr, ptr %35, align 8, !tbaa !5
  %782 = load i64, ptr %12, align 8, !tbaa !9
  %783 = getelementptr inbounds i64, ptr %781, i64 %782
  %784 = load i64, ptr %783, align 8, !tbaa !9
  %785 = add nsw i64 %780, %784
  %786 = getelementptr inbounds i64, ptr %777, i64 %785
  %787 = load i64, ptr %786, align 8, !tbaa !9
  %788 = icmp eq i64 %787, 0
  br i1 %788, label %789, label %795

789:                                              ; preds = %776
  %790 = load ptr, ptr %38, align 8, !tbaa !5
  %791 = load i64, ptr %23, align 8, !tbaa !9
  %792 = getelementptr inbounds i64, ptr %790, i64 %791
  %793 = load i64, ptr %792, align 8, !tbaa !9
  %794 = add nsw i64 %793, 1
  store i64 %794, ptr %792, align 8, !tbaa !9
  br label %795

795:                                              ; preds = %789, %776
  %796 = load ptr, ptr %33, align 8, !tbaa !5
  %797 = load i64, ptr %11, align 8, !tbaa !9
  %798 = getelementptr inbounds i64, ptr %796, i64 %797
  %799 = load i64, ptr %798, align 8, !tbaa !9
  %800 = load ptr, ptr %37, align 8, !tbaa !5
  %801 = load i64, ptr %7, align 8, !tbaa !9
  %802 = load i64, ptr %23, align 8, !tbaa !9
  %803 = mul nsw i64 %801, %802
  %804 = load ptr, ptr %35, align 8, !tbaa !5
  %805 = load i64, ptr %12, align 8, !tbaa !9
  %806 = getelementptr inbounds i64, ptr %804, i64 %805
  %807 = load i64, ptr %806, align 8, !tbaa !9
  %808 = add nsw i64 %803, %807
  %809 = getelementptr inbounds i64, ptr %800, i64 %808
  %810 = load i64, ptr %809, align 8, !tbaa !9
  %811 = add nsw i64 %810, %799
  store i64 %811, ptr %809, align 8, !tbaa !9
  %812 = load ptr, ptr %37, align 8, !tbaa !5
  %813 = load i64, ptr %7, align 8, !tbaa !9
  %814 = load ptr, ptr %35, align 8, !tbaa !5
  %815 = load i64, ptr %12, align 8, !tbaa !9
  %816 = getelementptr inbounds i64, ptr %814, i64 %815
  %817 = load i64, ptr %816, align 8, !tbaa !9
  %818 = mul nsw i64 %813, %817
  %819 = load i64, ptr %23, align 8, !tbaa !9
  %820 = add nsw i64 %818, %819
  %821 = getelementptr inbounds i64, ptr %812, i64 %820
  %822 = load i64, ptr %821, align 8, !tbaa !9
  %823 = icmp eq i64 %822, 0
  br i1 %823, label %824, label %833

824:                                              ; preds = %795
  %825 = load ptr, ptr %38, align 8, !tbaa !5
  %826 = load ptr, ptr %35, align 8, !tbaa !5
  %827 = load i64, ptr %12, align 8, !tbaa !9
  %828 = getelementptr inbounds i64, ptr %826, i64 %827
  %829 = load i64, ptr %828, align 8, !tbaa !9
  %830 = getelementptr inbounds i64, ptr %825, i64 %829
  %831 = load i64, ptr %830, align 8, !tbaa !9
  %832 = add nsw i64 %831, 1
  store i64 %832, ptr %830, align 8, !tbaa !9
  br label %833

833:                                              ; preds = %824, %795
  %834 = load ptr, ptr %33, align 8, !tbaa !5
  %835 = load i64, ptr %11, align 8, !tbaa !9
  %836 = getelementptr inbounds i64, ptr %834, i64 %835
  %837 = load i64, ptr %836, align 8, !tbaa !9
  %838 = load ptr, ptr %37, align 8, !tbaa !5
  %839 = load i64, ptr %7, align 8, !tbaa !9
  %840 = load ptr, ptr %35, align 8, !tbaa !5
  %841 = load i64, ptr %12, align 8, !tbaa !9
  %842 = getelementptr inbounds i64, ptr %840, i64 %841
  %843 = load i64, ptr %842, align 8, !tbaa !9
  %844 = mul nsw i64 %839, %843
  %845 = load i64, ptr %23, align 8, !tbaa !9
  %846 = add nsw i64 %844, %845
  %847 = getelementptr inbounds i64, ptr %838, i64 %846
  %848 = load i64, ptr %847, align 8, !tbaa !9
  %849 = add nsw i64 %848, %837
  store i64 %849, ptr %847, align 8, !tbaa !9
  br label %850

850:                                              ; preds = %833, %765
  br label %851

851:                                              ; preds = %850
  %852 = load i64, ptr %11, align 8, !tbaa !9
  %853 = add nsw i64 %852, 1
  store i64 %853, ptr %11, align 8, !tbaa !9
  br label %757, !llvm.loop !45

854:                                              ; preds = %757
  br label %855

855:                                              ; preds = %854
  %856 = load i64, ptr %10, align 8, !tbaa !9
  %857 = add nsw i64 %856, 1
  store i64 %857, ptr %10, align 8, !tbaa !9
  br label %608, !llvm.loop !46

858:                                              ; preds = %608
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %862

859:                                              ; preds = %591
  %860 = load i64, ptr %26, align 8, !tbaa !9
  %861 = add nsw i64 %860, 1
  store i64 %861, ptr %26, align 8, !tbaa !9
  br label %284, !llvm.loop !47

862:                                              ; preds = %858, %302, %284
  %863 = load i64, ptr %27, align 8, !tbaa !9
  %864 = icmp eq i64 %863, 0
  br i1 %864, label %865, label %866

865:                                              ; preds = %862
  br label %867

866:                                              ; preds = %862
  br label %220

867:                                              ; preds = %865, %239
  %868 = load ptr, ptr %5, align 8, !tbaa !5
  %869 = load i64, ptr %7, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %868, i64 noundef %869)
  %870 = load ptr, ptr %5, align 8, !tbaa !5
  %871 = load i64, ptr %7, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %870, i64 noundef %871)
  %872 = load ptr, ptr %5, align 8, !tbaa !5
  %873 = load i64, ptr %7, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %872, i64 noundef %873)
  %874 = load ptr, ptr %5, align 8, !tbaa !5
  %875 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %874, i64 noundef %875)
  call void (ptr, ...) @gk_free(ptr noundef %42, ptr noundef %43, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  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 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  ret void
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #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 = !{!12, !10, i64 0}
!12 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, 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}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !6, i64 16}
!15 = !{!12, !6, i64 40}
!16 = !{!12, !6, i64 24}
!17 = !{!12, !6, i64 48}
!18 = !{!12, !6, i64 128}
!19 = !{!12, !6, i64 136}
!20 = !{!21, !6, i64 144}
!21 = !{!"controldef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !22, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !23, i64 88, !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, !24, i64 232, !24, i64 240, !24, i64 248, !24, i64 256, !24, i64 264, !24, i64 272}
!22 = !{!"float", !7, i64 0}
!23 = !{!"workspacedef", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56}
!24 = !{!"double", !7, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!22, !22, i64 0}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = !{!33, !10, i64 0}
!33 = !{!"KeyValueType", !10, i64 0, !10, i64 8}
!34 = !{!33, !10, i64 8}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = distinct !{!41, !26}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !26}
!47 = distinct !{!47, !26}


; 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.11 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #1

declare i64 @libmetis__idxsum(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

declare i32 @mprintf(ptr noundef, ...) local_unnamed_addr #1

declare i64 @libmetis__idxargmax(i64 noundef, ptr noundef) local_unnamed_addr #1

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

declare void @libmetis__idxwspacefree(ptr noundef, i64 noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__EliminateVolSubDomainEdges(ptr noundef %0, ptr nocapture noundef readonly %1, i64 noundef %2, ptr nocapture noundef readonly %3) local_unnamed_addr #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  %7 = load i64, ptr %1, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 16
  %9 = load ptr, ptr %8, align 8, !tbaa !12
  %10 = getelementptr inbounds i8, ptr %1, i64 40
  %11 = load ptr, ptr %10, align 8, !tbaa !13
  %12 = getelementptr inbounds i8, ptr %1, i64 24
  %13 = load ptr, ptr %12, align 8, !tbaa !14
  %14 = getelementptr inbounds i8, ptr %1, i64 48
  %15 = load ptr, ptr %14, align 8, !tbaa !15
  %16 = getelementptr inbounds i8, ptr %1, i64 128
  %17 = load ptr, ptr %16, align 8, !tbaa !16
  %18 = getelementptr inbounds i8, ptr %1, i64 136
  %19 = load ptr, ptr %18, align 8, !tbaa !17
  %20 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef 0, ptr noundef %19) #4
  %21 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %22 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %23 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %24 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %7) #4
  %25 = mul nsw i64 %2, %2
  %26 = getelementptr inbounds i8, ptr %0, i64 144
  %27 = load ptr, ptr %26, align 8, !tbaa !18
  %28 = tail call ptr @libmetis__idxset(i64 noundef %25, i64 noundef 0, ptr noundef %27) #4
  %29 = shl i64 %2, 4
  %30 = tail call ptr @gk_malloc(i64 noundef %29, ptr noundef nonnull @.str.11) #4
  store ptr %30, ptr %5, align 8, !tbaa !23
  %31 = tail call ptr @gk_malloc(i64 noundef %29, ptr noundef nonnull @.str.11) #4
  store ptr %31, ptr %6, align 8, !tbaa !23
  %32 = icmp sgt i64 %7, 0
  br i1 %32, label %.lr.ph383, label %._crit_edge

.loopexit378:                                     ; preds = %60, %.lr.ph383
  %exitcond.not = icmp eq i64 %42, %7
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph383, !llvm.loop !24

.lr.ph383:                                        ; preds = %4, %.loopexit378
  %.0382 = phi i64 [ %42, %.loopexit378 ], [ 0, %4 ]
  %33 = getelementptr inbounds i64, ptr %17, i64 %.0382
  %34 = load i64, ptr %33, align 8, !tbaa !26
  %35 = getelementptr inbounds i64, ptr %13, i64 %.0382
  %36 = load i64, ptr %35, align 8, !tbaa !26
  %37 = getelementptr inbounds i64, ptr %20, i64 %34
  %38 = load i64, ptr %37, align 8, !tbaa !26
  %39 = add nsw i64 %38, %36
  store i64 %39, ptr %37, align 8, !tbaa !26
  %40 = getelementptr inbounds i64, ptr %9, i64 %.0382
  %41 = load i64, ptr %40, align 8, !tbaa !26
  %42 = add nuw nsw i64 %.0382, 1
  %43 = getelementptr inbounds i64, ptr %9, i64 %42
  %44 = load i64, ptr %43, align 8, !tbaa !26
  %45 = icmp slt i64 %41, %44
  br i1 %45, label %.lr.ph, label %.loopexit378

.lr.ph:                                           ; preds = %.lr.ph383
  %46 = mul nsw i64 %34, %2
  %47 = getelementptr i64, ptr %28, i64 %46
  br label %48

48:                                               ; preds = %.lr.ph, %60
  %49 = phi i64 [ %44, %.lr.ph ], [ %61, %60 ]
  %.0327381 = phi i64 [ %41, %.lr.ph ], [ %62, %60 ]
  %50 = getelementptr inbounds i64, ptr %11, i64 %.0327381
  %51 = load i64, ptr %50, align 8, !tbaa !26
  %52 = getelementptr inbounds i64, ptr %17, i64 %51
  %53 = load i64, ptr %52, align 8, !tbaa !26
  %.not366 = icmp eq i64 %53, %34
  br i1 %.not366, label %60, label %54

54:                                               ; preds = %48
  %55 = getelementptr inbounds i64, ptr %15, i64 %.0327381
  %56 = load i64, ptr %55, align 8, !tbaa !26
  %57 = getelementptr i64, ptr %47, i64 %53
  %58 = load i64, ptr %57, align 8, !tbaa !26
  %59 = add nsw i64 %58, %56
  store i64 %59, ptr %57, align 8, !tbaa !26
  %.pre = load i64, ptr %43, align 8, !tbaa !26
  br label %60

60:                                               ; preds = %48, %54
  %61 = phi i64 [ %49, %48 ], [ %.pre, %54 ]
  %62 = add nsw i64 %.0327381, 1
  %63 = icmp slt i64 %62, %61
  br i1 %63, label %48, label %.loopexit378, !llvm.loop !27

._crit_edge:                                      ; preds = %.loopexit378, %4
  %64 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %20, i64 noundef 1) #4
  %65 = icmp sgt i64 %2, 0
  br i1 %65, label %.lr.ph386, label %.preheader374.preheader

.lr.ph386:                                        ; preds = %._crit_edge
  %66 = sitofp i64 %64 to double
  %min.iters.check = icmp eq i64 %2, 1
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph386
  %.1384.ph = phi i64 [ 0, %.lr.ph386 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph386
  %n.vec = and i64 %2, 9223372036854775806
  %broadcast.splatinsert = insertelement <2 x double> poison, double %66, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %67 = getelementptr inbounds float, ptr %3, i64 %index
  %wide.load = load <2 x float>, ptr %67, align 4, !tbaa !28
  %68 = fpext <2 x float> %wide.load to <2 x double>
  %69 = fmul <2 x double> %68, <double 1.250000e+00, double 1.250000e+00>
  %70 = fmul <2 x double> %69, %broadcast.splat
  %71 = fptosi <2 x double> %70 to <2 x i64>
  %72 = getelementptr inbounds i64, ptr %21, i64 %index
  store <2 x i64> %71, ptr %72, align 8, !tbaa !26
  %index.next = add nuw i64 %index, 2
  %73 = icmp eq i64 %index.next, %n.vec
  br i1 %73, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %2
  br i1 %cmp.n, label %.preheader377, label %scalar.ph.preheader

.preheader377:                                    ; preds = %scalar.ph, %middle.block
  br i1 %65, label %.preheader376.us.preheader, label %.preheader374.preheader

.preheader376.us.preheader:                       ; preds = %.preheader377
  %min.iters.check514 = icmp ult i64 %2, 4
  %n.vec517 = and i64 %2, 9223372036854775804
  %cmp.n525 = icmp eq i64 %n.vec517, %2
  br label %.preheader376.us

.preheader374.preheader:                          ; preds = %._crit_edge390.us, %._crit_edge, %.preheader377
  %74 = add i64 %2, -1
  %xtraiter = and i64 %2, 1
  %75 = icmp eq i64 %74, 0
  %unroll_iter = and i64 %2, 9223372036854775806
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %xtraiter535 = and i64 %2, 1
  %76 = icmp eq i64 %74, 0
  %unroll_iter538 = and i64 %2, 9223372036854775806
  %lcmp.mod536.not = icmp eq i64 %xtraiter535, 0
  %xtraiter540 = and i64 %2, 1
  %77 = icmp eq i64 %74, 0
  %unroll_iter543 = and i64 %2, 9223372036854775806
  %lcmp.mod541.not = icmp eq i64 %xtraiter540, 0
  br label %.preheader374

.preheader376.us:                                 ; preds = %.preheader376.us.preheader, %._crit_edge390.us
  %.2391.us = phi i64 [ %96, %._crit_edge390.us ], [ 0, %.preheader376.us.preheader ]
  %78 = mul nuw nsw i64 %.2391.us, %2
  %79 = getelementptr i64, ptr %28, i64 %78
  br i1 %min.iters.check514, label %scalar.ph513.preheader, label %vector.body519

vector.body519:                                   ; preds = %.preheader376.us, %vector.body519
  %index520 = phi i64 [ %index.next524, %vector.body519 ], [ 0, %.preheader376.us ]
  %vec.phi = phi <2 x i64> [ %86, %vector.body519 ], [ zeroinitializer, %.preheader376.us ]
  %vec.phi521 = phi <2 x i64> [ %87, %vector.body519 ], [ zeroinitializer, %.preheader376.us ]
  %80 = getelementptr i64, ptr %79, i64 %index520
  %81 = getelementptr i8, ptr %80, i64 16
  %wide.load522 = load <2 x i64>, ptr %80, align 8, !tbaa !26
  %wide.load523 = load <2 x i64>, ptr %81, align 8, !tbaa !26
  %82 = icmp sgt <2 x i64> %wide.load522, zeroinitializer
  %83 = icmp sgt <2 x i64> %wide.load523, zeroinitializer
  %84 = zext <2 x i1> %82 to <2 x i64>
  %85 = zext <2 x i1> %83 to <2 x i64>
  %86 = add <2 x i64> %vec.phi, %84
  %87 = add <2 x i64> %vec.phi521, %85
  %index.next524 = add nuw i64 %index520, 4
  %88 = icmp eq i64 %index.next524, %n.vec517
  br i1 %88, label %middle.block512, label %vector.body519, !llvm.loop !32

middle.block512:                                  ; preds = %vector.body519
  %bin.rdx = add <2 x i64> %87, %86
  %89 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  br i1 %cmp.n525, label %._crit_edge390.us, label %scalar.ph513.preheader

scalar.ph513.preheader:                           ; preds = %middle.block512, %.preheader376.us
  %.1328388.us.ph = phi i64 [ 0, %.preheader376.us ], [ %n.vec517, %middle.block512 ]
  %.0334387.us.ph = phi i64 [ 0, %.preheader376.us ], [ %89, %middle.block512 ]
  br label %scalar.ph513

scalar.ph513:                                     ; preds = %scalar.ph513.preheader, %scalar.ph513
  %.1328388.us = phi i64 [ %94, %scalar.ph513 ], [ %.1328388.us.ph, %scalar.ph513.preheader ]
  %.0334387.us = phi i64 [ %spec.select.us, %scalar.ph513 ], [ %.0334387.us.ph, %scalar.ph513.preheader ]
  %90 = getelementptr i64, ptr %79, i64 %.1328388.us
  %91 = load i64, ptr %90, align 8, !tbaa !26
  %92 = icmp sgt i64 %91, 0
  %93 = zext i1 %92 to i64
  %spec.select.us = add nuw nsw i64 %.0334387.us, %93
  %94 = add nuw nsw i64 %.1328388.us, 1
  %exitcond469.not = icmp eq i64 %94, %2
  br i1 %exitcond469.not, label %._crit_edge390.us, label %scalar.ph513, !llvm.loop !33

._crit_edge390.us:                                ; preds = %scalar.ph513, %middle.block512
  %spec.select.us.lcssa = phi i64 [ %89, %middle.block512 ], [ %spec.select.us, %scalar.ph513 ]
  %95 = getelementptr inbounds i64, ptr %22, i64 %.2391.us
  store i64 %spec.select.us.lcssa, ptr %95, align 8, !tbaa !26
  %96 = add nuw nsw i64 %.2391.us, 1
  %exitcond470.not = icmp eq i64 %96, %2
  br i1 %exitcond470.not, label %.preheader374.preheader, label %.preheader376.us, !llvm.loop !34

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.1384 = phi i64 [ %104, %scalar.ph ], [ %.1384.ph, %scalar.ph.preheader ]
  %97 = getelementptr inbounds float, ptr %3, i64 %.1384
  %98 = load float, ptr %97, align 4, !tbaa !28
  %99 = fpext float %98 to double
  %100 = fmul double %99, 1.250000e+00
  %101 = fmul double %100, %66
  %102 = fptosi double %101 to i64
  %103 = getelementptr inbounds i64, ptr %21, i64 %.1384
  store i64 %102, ptr %103, align 8, !tbaa !26
  %104 = add nuw nsw i64 %.1384, 1
  %exitcond468.not = icmp eq i64 %104, %2
  br i1 %exitcond468.not, label %.preheader377, label %scalar.ph, !llvm.loop !35

.preheader374:                                    ; preds = %.preheader374.backedge, %.preheader374.preheader
  %105 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %22, i64 noundef 1) #4
  %106 = sdiv i64 %105, %2
  %107 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %108 = getelementptr inbounds i64, ptr %22, i64 %107
  %109 = load i64, ptr %108, align 8, !tbaa !26
  %110 = sitofp i64 %109 to double
  %111 = sitofp i64 %106 to double
  %112 = fmul double %111, 1.500000e+00
  %113 = fcmp ogt double %112, %110
  br i1 %113, label %.critedge, label %114

114:                                              ; preds = %.preheader374
  %115 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %22) #4
  %116 = mul nsw i64 %115, %2
  %117 = getelementptr inbounds i64, ptr %28, i64 %116
  %118 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %117, i64 noundef 1) #4
  br i1 %65, label %.lr.ph395.preheader, label %._crit_edge396.thread

.lr.ph395.preheader:                              ; preds = %114
  br i1 %75, label %._crit_edge396.unr-lcssa, label %.lr.ph395

._crit_edge396.thread:                            ; preds = %114
  tail call void @libmetis__ikeysort(i64 noundef 0, ptr noundef %31) #4
  br label %.critedge

.lr.ph395:                                        ; preds = %.lr.ph395.preheader, %134
  %.3393 = phi i64 [ %135, %134 ], [ 0, %.lr.ph395.preheader ]
  %.0340392 = phi i64 [ %.1341.1, %134 ], [ 0, %.lr.ph395.preheader ]
  %niter = phi i64 [ %niter.next.1, %134 ], [ 0, %.lr.ph395.preheader ]
  %119 = getelementptr inbounds i64, ptr %117, i64 %.3393
  %120 = load i64, ptr %119, align 8, !tbaa !26
  %121 = icmp sgt i64 %120, 0
  br i1 %121, label %122, label %.lr.ph395.1

122:                                              ; preds = %.lr.ph395
  %123 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.0340392
  store i64 %120, ptr %123, align 8, !tbaa !36
  %124 = add nsw i64 %.0340392, 1
  %125 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.0340392, i32 1
  store i64 %.3393, ptr %125, align 8, !tbaa !38
  br label %.lr.ph395.1

.lr.ph395.1:                                      ; preds = %.lr.ph395, %122
  %.1341 = phi i64 [ %124, %122 ], [ %.0340392, %.lr.ph395 ]
  %126 = or disjoint i64 %.3393, 1
  %127 = getelementptr inbounds i64, ptr %117, i64 %126
  %128 = load i64, ptr %127, align 8, !tbaa !26
  %129 = icmp sgt i64 %128, 0
  br i1 %129, label %130, label %134

130:                                              ; preds = %.lr.ph395.1
  %131 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.1341
  store i64 %128, ptr %131, align 8, !tbaa !36
  %132 = add nsw i64 %.1341, 1
  %133 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.1341, i32 1
  store i64 %126, ptr %133, align 8, !tbaa !38
  br label %134

134:                                              ; preds = %130, %.lr.ph395.1
  %.1341.1 = phi i64 [ %132, %130 ], [ %.1341, %.lr.ph395.1 ]
  %135 = add nuw nsw i64 %.3393, 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_edge396.unr-lcssa, label %.lr.ph395, !llvm.loop !39

._crit_edge396.unr-lcssa:                         ; preds = %134, %.lr.ph395.preheader
  %.1341.lcssa.ph = phi i64 [ poison, %.lr.ph395.preheader ], [ %.1341.1, %134 ]
  %.3393.unr = phi i64 [ 0, %.lr.ph395.preheader ], [ %135, %134 ]
  %.0340392.unr = phi i64 [ 0, %.lr.ph395.preheader ], [ %.1341.1, %134 ]
  br i1 %lcmp.mod.not, label %._crit_edge396, label %.lr.ph395.epil

.lr.ph395.epil:                                   ; preds = %._crit_edge396.unr-lcssa
  %136 = getelementptr inbounds i64, ptr %117, i64 %.3393.unr
  %137 = load i64, ptr %136, align 8, !tbaa !26
  %138 = icmp sgt i64 %137, 0
  br i1 %138, label %139, label %._crit_edge396

139:                                              ; preds = %.lr.ph395.epil
  %140 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.0340392.unr
  store i64 %137, ptr %140, align 8, !tbaa !36
  %141 = add nsw i64 %.0340392.unr, 1
  %142 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.0340392.unr, i32 1
  store i64 %.3393.unr, ptr %142, align 8, !tbaa !38
  br label %._crit_edge396

._crit_edge396:                                   ; preds = %.lr.ph395.epil, %139, %._crit_edge396.unr-lcssa
  %.1341.lcssa = phi i64 [ %.1341.lcssa.ph, %._crit_edge396.unr-lcssa ], [ %141, %139 ], [ %.0340392.unr, %.lr.ph395.epil ]
  tail call void @libmetis__ikeysort(i64 noundef %.1341.lcssa, ptr noundef %31) #4
  %143 = icmp sgt i64 %.1341.lcssa, 0
  br i1 %143, label %.lr.ph442, label %.critedge

.lr.ph442:                                        ; preds = %._crit_edge396
  %144 = getelementptr inbounds i64, ptr %22, i64 %115
  br label %147

145:                                              ; preds = %._crit_edge434
  %146 = add nuw nsw i64 %.0350440, 1
  %exitcond479.not = icmp eq i64 %146, %.1341.lcssa
  br i1 %exitcond479.not, label %.critedge, label %147, !llvm.loop !40

147:                                              ; preds = %.lr.ph442, %145
  %.0350440 = phi i64 [ 0, %.lr.ph442 ], [ %146, %145 ]
  %148 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %.0350440
  %149 = load i64, ptr %148, align 8, !tbaa !36
  %150 = load i64, ptr %144, align 8, !tbaa !26
  %151 = shl nsw i64 %150, 1
  %152 = sdiv i64 %118, %151
  %153 = icmp sgt i64 %149, %152
  br i1 %153, label %.critedge, label %154

154:                                              ; preds = %147
  %155 = getelementptr inbounds i8, ptr %148, i64 8
  %156 = load i64, ptr %155, align 8, !tbaa !38
  %157 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef 0, ptr noundef %23) #4
  br i1 %32, label %.lr.ph404, label %.preheader371

.preheader372:                                    ; preds = %.loopexit
  %158 = icmp sgt i64 %.1337, 0
  br i1 %158, label %.lr.ph412, label %.preheader371

.lr.ph404:                                        ; preds = %154, %.loopexit
  %.4401 = phi i64 [ %178, %.loopexit ], [ 0, %154 ]
  %.0336400 = phi i64 [ %.1337, %.loopexit ], [ 0, %154 ]
  %159 = getelementptr inbounds i64, ptr %17, i64 %.4401
  %160 = load i64, ptr %159, align 8, !tbaa !26
  %161 = icmp eq i64 %160, %156
  br i1 %161, label %162, label %.loopexit

162:                                              ; preds = %.lr.ph404
  %163 = getelementptr inbounds i64, ptr %9, i64 %.4401
  %164 = load i64, ptr %163, align 8, !tbaa !26
  %165 = getelementptr inbounds i8, ptr %163, i64 8
  %166 = load i64, ptr %165, align 8, !tbaa !26
  %167 = icmp slt i64 %164, %166
  br i1 %167, label %.lr.ph399, label %.loopexit

168:                                              ; preds = %.lr.ph399
  %169 = add i64 %.2329397, 1
  %exitcond472.not = icmp eq i64 %169, %166
  br i1 %exitcond472.not, label %.loopexit, label %.lr.ph399, !llvm.loop !41

.lr.ph399:                                        ; preds = %162, %168
  %.2329397 = phi i64 [ %169, %168 ], [ %164, %162 ]
  %170 = getelementptr inbounds i64, ptr %11, i64 %.2329397
  %171 = load i64, ptr %170, align 8, !tbaa !26
  %172 = getelementptr inbounds i64, ptr %17, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !26
  %174 = icmp eq i64 %173, %115
  br i1 %174, label %175, label %168

175:                                              ; preds = %.lr.ph399
  %176 = add nsw i64 %.0336400, 1
  %177 = getelementptr inbounds i64, ptr %24, i64 %.0336400
  store i64 %.4401, ptr %177, align 8, !tbaa !26
  br label %.loopexit

.loopexit:                                        ; preds = %168, %162, %.lr.ph404, %175
  %.1337 = phi i64 [ %176, %175 ], [ %.0336400, %.lr.ph404 ], [ %.0336400, %162 ], [ %.0336400, %168 ]
  %178 = add nuw nsw i64 %.4401, 1
  %exitcond473.not = icmp eq i64 %178, %7
  br i1 %exitcond473.not, label %.preheader372, label %.lr.ph404, !llvm.loop !42

.preheader371:                                    ; preds = %._crit_edge409, %154, %.preheader372
  %179 = phi i1 [ false, %.preheader372 ], [ false, %154 ], [ %158, %._crit_edge409 ]
  %.0336.lcssa499 = phi i64 [ %.1337, %.preheader372 ], [ 0, %154 ], [ %.1337, %._crit_edge409 ]
  %.0352.lcssa = phi i64 [ 0, %.preheader372 ], [ 0, %154 ], [ %184, %._crit_edge409 ]
  br i1 %65, label %.lr.ph416.preheader, label %._crit_edge417.thread

.lr.ph416.preheader:                              ; preds = %.preheader371
  br i1 %76, label %._crit_edge417.unr-lcssa, label %.lr.ph416

._crit_edge417.thread:                            ; preds = %.preheader371
  tail call void @libmetis__ikeysort(i64 noundef 0, ptr noundef %30) #4
  br label %._crit_edge434

.lr.ph412:                                        ; preds = %.preheader372, %._crit_edge409
  %.0325411 = phi i64 [ %205, %._crit_edge409 ], [ 0, %.preheader372 ]
  %.0352410 = phi i64 [ %184, %._crit_edge409 ], [ 0, %.preheader372 ]
  %180 = getelementptr inbounds i64, ptr %24, i64 %.0325411
  %181 = load i64, ptr %180, align 8, !tbaa !26
  %182 = getelementptr inbounds i64, ptr %13, i64 %181
  %183 = load i64, ptr %182, align 8, !tbaa !26
  %184 = add nsw i64 %183, %.0352410
  %185 = getelementptr inbounds i64, ptr %9, i64 %181
  %186 = load i64, ptr %185, align 8, !tbaa !26
  %187 = getelementptr i8, ptr %185, i64 8
  %188 = load i64, ptr %187, align 8, !tbaa !26
  %189 = icmp slt i64 %186, %188
  br i1 %189, label %.lr.ph408, label %._crit_edge409

.lr.ph408:                                        ; preds = %.lr.ph412, %201
  %190 = phi i64 [ %202, %201 ], [ %188, %.lr.ph412 ]
  %.3330406 = phi i64 [ %203, %201 ], [ %186, %.lr.ph412 ]
  %191 = getelementptr inbounds i64, ptr %11, i64 %.3330406
  %192 = load i64, ptr %191, align 8, !tbaa !26
  %193 = getelementptr inbounds i64, ptr %17, i64 %192
  %194 = load i64, ptr %193, align 8, !tbaa !26
  %.not365 = icmp eq i64 %194, %156
  br i1 %.not365, label %201, label %195

195:                                              ; preds = %.lr.ph408
  %196 = getelementptr inbounds i64, ptr %15, i64 %.3330406
  %197 = load i64, ptr %196, align 8, !tbaa !26
  %198 = getelementptr inbounds i64, ptr %23, i64 %194
  %199 = load i64, ptr %198, align 8, !tbaa !26
  %200 = add nsw i64 %199, %197
  store i64 %200, ptr %198, align 8, !tbaa !26
  %.pre481 = load i64, ptr %187, align 8, !tbaa !26
  br label %201

201:                                              ; preds = %.lr.ph408, %195
  %202 = phi i64 [ %190, %.lr.ph408 ], [ %.pre481, %195 ]
  %203 = add nsw i64 %.3330406, 1
  %204 = icmp slt i64 %203, %202
  br i1 %204, label %.lr.ph408, label %._crit_edge409, !llvm.loop !43

._crit_edge409:                                   ; preds = %201, %.lr.ph412
  %205 = add nuw nsw i64 %.0325411, 1
  %exitcond474.not = icmp eq i64 %205, %.1337
  br i1 %exitcond474.not, label %.preheader371, label %.lr.ph412, !llvm.loop !44

.lr.ph416:                                        ; preds = %.lr.ph416.preheader, %223
  %.5415 = phi i64 [ %224, %223 ], [ 0, %.lr.ph416.preheader ]
  %.0338414 = phi i64 [ %.1339.1, %223 ], [ 0, %.lr.ph416.preheader ]
  %niter539 = phi i64 [ %niter539.next.1, %223 ], [ 0, %.lr.ph416.preheader ]
  %206 = getelementptr inbounds i64, ptr %23, i64 %.5415
  %207 = load i64, ptr %206, align 8, !tbaa !26
  %208 = icmp sgt i64 %207, 0
  br i1 %208, label %209, label %.lr.ph416.1

209:                                              ; preds = %.lr.ph416
  %210 = sub nsw i64 0, %207
  %211 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.0338414
  store i64 %210, ptr %211, align 8, !tbaa !36
  %212 = add nsw i64 %.0338414, 1
  %213 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.0338414, i32 1
  store i64 %.5415, ptr %213, align 8, !tbaa !38
  br label %.lr.ph416.1

.lr.ph416.1:                                      ; preds = %.lr.ph416, %209
  %.1339 = phi i64 [ %212, %209 ], [ %.0338414, %.lr.ph416 ]
  %214 = or disjoint i64 %.5415, 1
  %215 = getelementptr inbounds i64, ptr %23, i64 %214
  %216 = load i64, ptr %215, align 8, !tbaa !26
  %217 = icmp sgt i64 %216, 0
  br i1 %217, label %218, label %223

218:                                              ; preds = %.lr.ph416.1
  %219 = sub nsw i64 0, %216
  %220 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.1339
  store i64 %219, ptr %220, align 8, !tbaa !36
  %221 = add nsw i64 %.1339, 1
  %222 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.1339, i32 1
  store i64 %214, ptr %222, align 8, !tbaa !38
  br label %223

223:                                              ; preds = %218, %.lr.ph416.1
  %.1339.1 = phi i64 [ %221, %218 ], [ %.1339, %.lr.ph416.1 ]
  %224 = add nuw nsw i64 %.5415, 2
  %niter539.next.1 = add i64 %niter539, 2
  %niter539.ncmp.1 = icmp eq i64 %niter539.next.1, %unroll_iter538
  br i1 %niter539.ncmp.1, label %._crit_edge417.unr-lcssa, label %.lr.ph416, !llvm.loop !45

._crit_edge417.unr-lcssa:                         ; preds = %223, %.lr.ph416.preheader
  %.1339.lcssa.ph = phi i64 [ poison, %.lr.ph416.preheader ], [ %.1339.1, %223 ]
  %.5415.unr = phi i64 [ 0, %.lr.ph416.preheader ], [ %224, %223 ]
  %.0338414.unr = phi i64 [ 0, %.lr.ph416.preheader ], [ %.1339.1, %223 ]
  br i1 %lcmp.mod536.not, label %._crit_edge417, label %.lr.ph416.epil

.lr.ph416.epil:                                   ; preds = %._crit_edge417.unr-lcssa
  %225 = getelementptr inbounds i64, ptr %23, i64 %.5415.unr
  %226 = load i64, ptr %225, align 8, !tbaa !26
  %227 = icmp sgt i64 %226, 0
  br i1 %227, label %228, label %._crit_edge417

228:                                              ; preds = %.lr.ph416.epil
  %229 = sub nsw i64 0, %226
  %230 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.0338414.unr
  store i64 %229, ptr %230, align 8, !tbaa !36
  %231 = add nsw i64 %.0338414.unr, 1
  %232 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.0338414.unr, i32 1
  store i64 %.5415.unr, ptr %232, align 8, !tbaa !38
  br label %._crit_edge417

._crit_edge417:                                   ; preds = %.lr.ph416.epil, %228, %._crit_edge417.unr-lcssa
  %.1339.lcssa = phi i64 [ %.1339.lcssa.ph, %._crit_edge417.unr-lcssa ], [ %231, %228 ], [ %.0338414.unr, %.lr.ph416.epil ]
  tail call void @libmetis__ikeysort(i64 noundef %.1339.lcssa, ptr noundef %30) #4
  %233 = icmp sgt i64 %.1339.lcssa, 0
  br i1 %233, label %.lr.ph433, label %._crit_edge434

.lr.ph433:                                        ; preds = %._crit_edge417, %300
  %.6431 = phi i64 [ %301, %300 ], [ 0, %._crit_edge417 ]
  %.0344430 = phi i64 [ %.2346, %300 ], [ -1, %._crit_edge417 ]
  %234 = getelementptr inbounds %struct.KeyValueType, ptr %30, i64 %.6431, i32 1
  %235 = load i64, ptr %234, align 8, !tbaa !38
  %236 = getelementptr inbounds i64, ptr %117, i64 %235
  %237 = load i64, ptr %236, align 8, !tbaa !26
  %238 = icmp sgt i64 %237, 0
  br i1 %238, label %239, label %300

239:                                              ; preds = %.lr.ph433
  %240 = getelementptr inbounds i64, ptr %20, i64 %235
  %241 = load i64, ptr %240, align 8, !tbaa !26
  %242 = add nsw i64 %241, %.0352.lcssa
  %243 = getelementptr inbounds i64, ptr %21, i64 %235
  %244 = load i64, ptr %243, align 8, !tbaa !26
  %245 = icmp sgt i64 %242, %244
  br i1 %245, label %300, label %.preheader370

.preheader370:                                    ; preds = %239
  %invariant.gep = getelementptr i64, ptr %28, i64 %235
  br i1 %65, label %.lr.ph420, label %._crit_edge421

.lr.ph420:                                        ; preds = %.preheader370, %258
  %.4331419 = phi i64 [ %259, %258 ], [ 0, %.preheader370 ]
  %246 = getelementptr inbounds i64, ptr %23, i64 %.4331419
  %247 = load i64, ptr %246, align 8, !tbaa !26
  %248 = icmp sgt i64 %247, 0
  br i1 %248, label %249, label %258

249:                                              ; preds = %.lr.ph420
  %250 = getelementptr inbounds i64, ptr %22, i64 %.4331419
  %251 = load i64, ptr %250, align 8, !tbaa !26
  %252 = load i64, ptr %144, align 8, !tbaa !26
  %253 = add nsw i64 %252, -1
  %.not = icmp slt i64 %251, %253
  br i1 %.not, label %258, label %254

254:                                              ; preds = %249
  %255 = mul nuw nsw i64 %.4331419, %2
  %gep = getelementptr i64, ptr %invariant.gep, i64 %255
  %256 = load i64, ptr %gep, align 8, !tbaa !26
  %257 = icmp eq i64 %256, 0
  br i1 %257, label %._crit_edge421, label %258

258:                                              ; preds = %.lr.ph420, %249, %254
  %259 = add nuw nsw i64 %.4331419, 1
  %exitcond476.not = icmp eq i64 %259, %2
  br i1 %exitcond476.not, label %.preheader, label %.lr.ph420, !llvm.loop !46

._crit_edge421:                                   ; preds = %254, %.preheader370
  %.4331.lcssa = phi i64 [ 0, %.preheader370 ], [ %.4331419, %254 ]
  %260 = icmp eq i64 %.4331.lcssa, %2
  br i1 %260, label %.preheader, label %300

.preheader:                                       ; preds = %258, %._crit_edge421
  br i1 %65, label %.lr.ph427, label %._crit_edge428

.lr.ph427:                                        ; preds = %.preheader
  %261 = mul nsw i64 %235, %2
  %262 = getelementptr i64, ptr %28, i64 %261
  br i1 %77, label %._crit_edge428.loopexit.unr-lcssa, label %.lr.ph427.new

.lr.ph427.new:                                    ; preds = %.lr.ph427, %281
  %.5332426 = phi i64 [ %282, %281 ], [ 0, %.lr.ph427 ]
  %.0348425 = phi i64 [ %.1349.1, %281 ], [ 0, %.lr.ph427 ]
  %niter544 = phi i64 [ %niter544.next.1, %281 ], [ 0, %.lr.ph427 ]
  %263 = getelementptr inbounds i64, ptr %23, i64 %.5332426
  %264 = load i64, ptr %263, align 8, !tbaa !26
  %265 = icmp sgt i64 %264, 0
  br i1 %265, label %266, label %271

266:                                              ; preds = %.lr.ph427.new
  %267 = getelementptr i64, ptr %262, i64 %.5332426
  %268 = load i64, ptr %267, align 8, !tbaa !26
  %269 = icmp eq i64 %268, 0
  %270 = zext i1 %269 to i64
  %spec.select367 = add nsw i64 %.0348425, %270
  br label %271

271:                                              ; preds = %266, %.lr.ph427.new
  %.1349 = phi i64 [ %.0348425, %.lr.ph427.new ], [ %spec.select367, %266 ]
  %272 = or disjoint i64 %.5332426, 1
  %273 = getelementptr inbounds i64, ptr %23, i64 %272
  %274 = load i64, ptr %273, align 8, !tbaa !26
  %275 = icmp sgt i64 %274, 0
  br i1 %275, label %276, label %281

276:                                              ; preds = %271
  %277 = getelementptr i64, ptr %262, i64 %272
  %278 = load i64, ptr %277, align 8, !tbaa !26
  %279 = icmp eq i64 %278, 0
  %280 = zext i1 %279 to i64
  %spec.select367.1 = add nsw i64 %.1349, %280
  br label %281

281:                                              ; preds = %276, %271
  %.1349.1 = phi i64 [ %.1349, %271 ], [ %spec.select367.1, %276 ]
  %282 = add nuw nsw i64 %.5332426, 2
  %niter544.next.1 = add i64 %niter544, 2
  %niter544.ncmp.1 = icmp eq i64 %niter544.next.1, %unroll_iter543
  br i1 %niter544.ncmp.1, label %._crit_edge428.loopexit.unr-lcssa, label %.lr.ph427.new, !llvm.loop !47

._crit_edge428.loopexit.unr-lcssa:                ; preds = %281, %.lr.ph427
  %.1349.lcssa.ph = phi i64 [ poison, %.lr.ph427 ], [ %.1349.1, %281 ]
  %.5332426.unr = phi i64 [ 0, %.lr.ph427 ], [ %282, %281 ]
  %.0348425.unr = phi i64 [ 0, %.lr.ph427 ], [ %.1349.1, %281 ]
  br i1 %lcmp.mod541.not, label %._crit_edge428, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge428.loopexit.unr-lcssa
  %283 = getelementptr inbounds i64, ptr %23, i64 %.5332426.unr
  %284 = load i64, ptr %283, align 8, !tbaa !26
  %285 = icmp sgt i64 %284, 0
  br i1 %285, label %286, label %._crit_edge428

286:                                              ; preds = %.epil.preheader
  %287 = getelementptr i64, ptr %262, i64 %.5332426.unr
  %288 = load i64, ptr %287, align 8, !tbaa !26
  %289 = icmp eq i64 %288, 0
  %290 = zext i1 %289 to i64
  %spec.select367.epil = add nsw i64 %.0348425.unr, %290
  br label %._crit_edge428

._crit_edge428:                                   ; preds = %._crit_edge428.loopexit.unr-lcssa, %286, %.epil.preheader, %.preheader
  %.0348.lcssa = phi i64 [ 0, %.preheader ], [ %.1349.lcssa.ph, %._crit_edge428.loopexit.unr-lcssa ], [ %.0348425.unr, %.epil.preheader ], [ %spec.select367.epil, %286 ]
  %291 = icmp eq i64 %.0344430, -1
  br i1 %291, label %292, label %298

292:                                              ; preds = %._crit_edge428
  %293 = getelementptr inbounds i64, ptr %22, i64 %235
  %294 = load i64, ptr %293, align 8, !tbaa !26
  %295 = add nsw i64 %294, %.0348.lcssa
  %296 = load i64, ptr %144, align 8, !tbaa !26
  %297 = icmp slt i64 %295, %296
  %spec.select368 = select i1 %297, i64 %235, i64 -1
  br label %298

298:                                              ; preds = %292, %._crit_edge428
  %.1345 = phi i64 [ %.0344430, %._crit_edge428 ], [ %spec.select368, %292 ]
  %299 = icmp eq i64 %.0348.lcssa, 0
  br i1 %299, label %._crit_edge434, label %300

300:                                              ; preds = %.lr.ph433, %298, %._crit_edge421, %239
  %.2346 = phi i64 [ %.0344430, %239 ], [ %.1345, %298 ], [ %.0344430, %._crit_edge421 ], [ %.0344430, %.lr.ph433 ]
  %301 = add nuw nsw i64 %.6431, 1
  %exitcond478.not = icmp eq i64 %301, %.1339.lcssa
  br i1 %exitcond478.not, label %._crit_edge434, label %.lr.ph433, !llvm.loop !48

._crit_edge434:                                   ; preds = %300, %298, %._crit_edge417.thread, %._crit_edge417
  %.3347 = phi i64 [ -1, %._crit_edge417 ], [ -1, %._crit_edge417.thread ], [ %.1345, %298 ], [ %.2346, %300 ]
  %.0342 = phi i64 [ -1, %._crit_edge417 ], [ -1, %._crit_edge417.thread ], [ %235, %298 ], [ -1, %300 ]
  %302 = icmp eq i64 %.0342, -1
  %303 = icmp ne i64 %.3347, -1
  %or.cond = select i1 %302, i1 %303, i1 false
  %spec.select369 = select i1 %or.cond, i64 %.3347, i64 %.0342
  %304 = icmp eq i64 %spec.select369, -1
  br i1 %304, label %145, label %305

305:                                              ; preds = %._crit_edge434
  %306 = getelementptr inbounds i64, ptr %20, i64 %spec.select369
  %307 = load i64, ptr %306, align 8, !tbaa !26
  %308 = add nsw i64 %307, %.0352.lcssa
  store i64 %308, ptr %306, align 8, !tbaa !26
  %309 = getelementptr inbounds i64, ptr %20, i64 %156
  %310 = load i64, ptr %309, align 8, !tbaa !26
  %311 = sub nsw i64 %310, %.0352.lcssa
  store i64 %311, ptr %309, align 8, !tbaa !26
  br i1 %179, label %.lr.ph465, label %.preheader374.backedge

.preheader374.backedge:                           ; preds = %._crit_edge462, %305
  br label %.preheader374

.lr.ph465:                                        ; preds = %305
  %invariant.gep445 = getelementptr i64, ptr %28, i64 %156
  %312 = mul nsw i64 %156, %2
  %313 = getelementptr i64, ptr %28, i64 %312
  %314 = getelementptr inbounds i64, ptr %22, i64 %156
  %invariant.gep455 = getelementptr i64, ptr %28, i64 %spec.select369
  %315 = mul nsw i64 %spec.select369, %2
  %316 = getelementptr i64, ptr %28, i64 %315
  %317 = getelementptr inbounds i64, ptr %22, i64 %spec.select369
  br label %318

318:                                              ; preds = %.lr.ph465, %._crit_edge462
  %.1326463 = phi i64 [ 0, %.lr.ph465 ], [ %412, %._crit_edge462 ]
  %319 = getelementptr inbounds i64, ptr %24, i64 %.1326463
  %320 = load i64, ptr %319, align 8, !tbaa !26
  %321 = getelementptr inbounds i64, ptr %17, i64 %320
  store i64 %spec.select369, ptr %321, align 8, !tbaa !26
  %322 = getelementptr inbounds i64, ptr %9, i64 %320
  %323 = load i64, ptr %322, align 8, !tbaa !26
  %324 = getelementptr i8, ptr %322, i64 8
  %325 = load i64, ptr %324, align 8, !tbaa !26
  %326 = icmp slt i64 %323, %325
  br i1 %326, label %.lr.ph453, label %._crit_edge454

.lr.ph453:                                        ; preds = %318, %370
  %.6333451 = phi i64 [ %371, %370 ], [ %323, %318 ]
  %327 = getelementptr inbounds i64, ptr %11, i64 %.6333451
  %328 = load i64, ptr %327, align 8, !tbaa !26
  %329 = getelementptr inbounds i64, ptr %17, i64 %328
  %330 = load i64, ptr %329, align 8, !tbaa !26
  %.not364 = icmp eq i64 %330, %156
  br i1 %.not364, label %370, label %331

331:                                              ; preds = %.lr.ph453
  %332 = getelementptr i64, ptr %313, i64 %330
  %333 = load i64, ptr %332, align 8, !tbaa !26
  %334 = icmp eq i64 %333, 0
  br i1 %334, label %335, label %337

335:                                              ; preds = %331
  %336 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.12) #4
  %.pre482 = load i64, ptr %329, align 8, !tbaa !26
  %.phi.trans.insert = getelementptr i64, ptr %313, i64 %.pre482
  %.pre483 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !26
  br label %337

337:                                              ; preds = %335, %331
  %338 = phi i64 [ %.pre483, %335 ], [ %333, %331 ]
  %339 = phi i64 [ %.pre482, %335 ], [ %330, %331 ]
  %340 = getelementptr inbounds i64, ptr %15, i64 %.6333451
  %341 = load i64, ptr %340, align 8, !tbaa !26
  %342 = getelementptr i64, ptr %313, i64 %339
  %343 = sub nsw i64 %338, %341
  store i64 %343, ptr %342, align 8, !tbaa !26
  %344 = load i64, ptr %329, align 8, !tbaa !26
  %345 = getelementptr i64, ptr %313, i64 %344
  %346 = load i64, ptr %345, align 8, !tbaa !26
  %347 = icmp eq i64 %346, 0
  br i1 %347, label %348, label %351

348:                                              ; preds = %337
  %349 = load i64, ptr %314, align 8, !tbaa !26
  %350 = add nsw i64 %349, -1
  store i64 %350, ptr %314, align 8, !tbaa !26
  %.pre484 = load i64, ptr %329, align 8, !tbaa !26
  br label %351

351:                                              ; preds = %348, %337
  %352 = phi i64 [ %.pre484, %348 ], [ %344, %337 ]
  %353 = mul nsw i64 %352, %2
  %gep446 = getelementptr i64, ptr %invariant.gep445, i64 %353
  %354 = load i64, ptr %gep446, align 8, !tbaa !26
  %355 = icmp eq i64 %354, 0
  br i1 %355, label %356, label %358

356:                                              ; preds = %351
  %357 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.12) #4
  %.pre485 = load i64, ptr %329, align 8, !tbaa !26
  %.pre492 = mul nsw i64 %.pre485, %2
  %gep448.phi.trans.insert = getelementptr i64, ptr %invariant.gep445, i64 %.pre492
  %.pre495 = load i64, ptr %gep448.phi.trans.insert, align 8, !tbaa !26
  br label %358

358:                                              ; preds = %356, %351
  %359 = phi i64 [ %.pre495, %356 ], [ %354, %351 ]
  %.pre-phi = phi i64 [ %.pre492, %356 ], [ %353, %351 ]
  %360 = load i64, ptr %340, align 8, !tbaa !26
  %gep448 = getelementptr i64, ptr %invariant.gep445, i64 %.pre-phi
  %361 = sub nsw i64 %359, %360
  store i64 %361, ptr %gep448, align 8, !tbaa !26
  %362 = load i64, ptr %329, align 8, !tbaa !26
  %363 = mul nsw i64 %362, %2
  %gep450 = getelementptr i64, ptr %invariant.gep445, i64 %363
  %364 = load i64, ptr %gep450, align 8, !tbaa !26
  %365 = icmp eq i64 %364, 0
  br i1 %365, label %366, label %370

366:                                              ; preds = %358
  %367 = getelementptr inbounds i64, ptr %22, i64 %362
  %368 = load i64, ptr %367, align 8, !tbaa !26
  %369 = add nsw i64 %368, -1
  store i64 %369, ptr %367, align 8, !tbaa !26
  br label %370

370:                                              ; preds = %.lr.ph453, %366, %358
  %371 = add nsw i64 %.6333451, 1
  %372 = load i64, ptr %324, align 8, !tbaa !26
  %373 = icmp slt i64 %371, %372
  br i1 %373, label %.lr.ph453, label %._crit_edge454.loopexit, !llvm.loop !49

._crit_edge454.loopexit:                          ; preds = %370
  %.pre486 = load i64, ptr %322, align 8, !tbaa !26
  br label %._crit_edge454

._crit_edge454:                                   ; preds = %._crit_edge454.loopexit, %318
  %374 = phi i64 [ %372, %._crit_edge454.loopexit ], [ %325, %318 ]
  %375 = phi i64 [ %.pre486, %._crit_edge454.loopexit ], [ %323, %318 ]
  %376 = icmp slt i64 %375, %374
  br i1 %376, label %.lr.ph461, label %._crit_edge462

.lr.ph461:                                        ; preds = %._crit_edge454, %408
  %377 = phi i64 [ %409, %408 ], [ %374, %._crit_edge454 ]
  %.7459 = phi i64 [ %410, %408 ], [ %375, %._crit_edge454 ]
  %378 = getelementptr inbounds i64, ptr %11, i64 %.7459
  %379 = load i64, ptr %378, align 8, !tbaa !26
  %380 = getelementptr inbounds i64, ptr %17, i64 %379
  %381 = load i64, ptr %380, align 8, !tbaa !26
  %.not363 = icmp eq i64 %381, %spec.select369
  br i1 %.not363, label %408, label %382

382:                                              ; preds = %.lr.ph461
  %383 = getelementptr i64, ptr %316, i64 %381
  %384 = load i64, ptr %383, align 8, !tbaa !26
  %385 = icmp eq i64 %384, 0
  br i1 %385, label %386, label %389

386:                                              ; preds = %382
  %387 = load i64, ptr %317, align 8, !tbaa !26
  %388 = add nsw i64 %387, 1
  store i64 %388, ptr %317, align 8, !tbaa !26
  %.pre487 = load i64, ptr %380, align 8, !tbaa !26
  %.phi.trans.insert488 = getelementptr i64, ptr %316, i64 %.pre487
  %.pre489 = load i64, ptr %.phi.trans.insert488, align 8, !tbaa !26
  br label %389

389:                                              ; preds = %386, %382
  %390 = phi i64 [ %.pre489, %386 ], [ %384, %382 ]
  %391 = phi i64 [ %.pre487, %386 ], [ %381, %382 ]
  %392 = getelementptr inbounds i64, ptr %15, i64 %.7459
  %393 = load i64, ptr %392, align 8, !tbaa !26
  %394 = getelementptr i64, ptr %316, i64 %391
  %395 = add nsw i64 %390, %393
  store i64 %395, ptr %394, align 8, !tbaa !26
  %396 = load i64, ptr %380, align 8, !tbaa !26
  %397 = mul nsw i64 %396, %2
  %gep456 = getelementptr i64, ptr %invariant.gep455, i64 %397
  %398 = load i64, ptr %gep456, align 8, !tbaa !26
  %399 = icmp eq i64 %398, 0
  br i1 %399, label %400, label %404

400:                                              ; preds = %389
  %401 = getelementptr inbounds i64, ptr %22, i64 %396
  %402 = load i64, ptr %401, align 8, !tbaa !26
  %403 = add nsw i64 %402, 1
  store i64 %403, ptr %401, align 8, !tbaa !26
  %.pre490 = load i64, ptr %380, align 8, !tbaa !26
  %.pre493 = mul nsw i64 %.pre490, %2
  %gep458.phi.trans.insert = getelementptr i64, ptr %invariant.gep455, i64 %.pre493
  %.pre496 = load i64, ptr %gep458.phi.trans.insert, align 8, !tbaa !26
  br label %404

404:                                              ; preds = %400, %389
  %405 = phi i64 [ %.pre496, %400 ], [ %398, %389 ]
  %.pre-phi494 = phi i64 [ %.pre493, %400 ], [ %397, %389 ]
  %406 = load i64, ptr %392, align 8, !tbaa !26
  %gep458 = getelementptr i64, ptr %invariant.gep455, i64 %.pre-phi494
  %407 = add nsw i64 %405, %406
  store i64 %407, ptr %gep458, align 8, !tbaa !26
  %.pre491 = load i64, ptr %324, align 8, !tbaa !26
  br label %408

408:                                              ; preds = %.lr.ph461, %404
  %409 = phi i64 [ %377, %.lr.ph461 ], [ %.pre491, %404 ]
  %410 = add nsw i64 %.7459, 1
  %411 = icmp slt i64 %410, %409
  br i1 %411, label %.lr.ph461, label %._crit_edge462, !llvm.loop !50

._crit_edge462:                                   ; preds = %408, %._crit_edge454
  %412 = add nuw nsw i64 %.1326463, 1
  %exitcond480.not = icmp eq i64 %412, %.0336.lcssa499
  br i1 %exitcond480.not, label %.preheader374.backedge, label %318, !llvm.loop !51

.critedge:                                        ; preds = %.preheader374, %._crit_edge396, %145, %147, %._crit_edge396.thread
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %7) #4
  call void (ptr, ...) @gk_free(ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef null) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  ret void
}

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #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, !7, i64 0}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !7, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !10, i64 16}
!13 = !{!6, !10, i64 40}
!14 = !{!6, !10, i64 24}
!15 = !{!6, !10, i64 48}
!16 = !{!6, !10, i64 128}
!17 = !{!6, !10, i64 136}
!18 = !{!19, !10, i64 144}
!19 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !20, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !21, i64 88, !22, i64 152, !22, i64 160, !22, i64 168, !22, i64 176, !22, i64 184, !22, i64 192, !22, i64 200, !22, i64 208, !22, i64 216, !22, i64 224, !22, i64 232, !22, i64 240, !22, i64 248, !22, i64 256, !22, i64 264, !22, i64 272}
!20 = !{!"float", !8, i64 0}
!21 = !{!"workspacedef", !10, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !10, i64 48, !10, i64 56}
!22 = !{!"double", !8, i64 0}
!23 = !{!10, !10, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!7, !7, i64 0}
!27 = distinct !{!27, !25}
!28 = !{!20, !20, i64 0}
!29 = distinct !{!29, !25, !30, !31}
!30 = !{!"llvm.loop.isvectorized", i32 1}
!31 = !{!"llvm.loop.unroll.runtime.disable"}
!32 = distinct !{!32, !25, !30, !31}
!33 = distinct !{!33, !25, !31, !30}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25, !31, !30}
!36 = !{!37, !7, i64 0}
!37 = !{!"KeyValueType", !7, i64 0, !7, i64 8}
!38 = !{!37, !7, i64 8}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}
!47 = distinct !{!47, !25}
!48 = distinct !{!48, !25}
!49 = distinct !{!49, !25}
!50 = distinct !{!50, !25}
!51 = distinct !{!51, !25}


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