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

; 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.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%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.nrinfodef = type { [2 x i64] }

@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeRefine(ptr noundef %0, ptr noundef %1, float noundef %2, i64 noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca float, align 4
  %8 = alloca i64, 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 ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca [2 x %struct.PQueueType], align 16
  %33 = alloca ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca [2 x i64], align 16
  %47 = alloca [2 x i64], align 16
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store float %2, ptr %7, align 4, !tbaa !9
  store i64 %3, ptr %8, align 8, !tbaa !11
  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 176, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #3
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.graphdef, ptr %48, i32 0, i32 0
  %50 = load i64, ptr %49, align 8, !tbaa !13
  store i64 %50, ptr %15, align 8, !tbaa !11
  %51 = load ptr, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.graphdef, ptr %51, i32 0, i32 2
  %53 = load ptr, ptr %52, align 8, !tbaa !16
  store ptr %53, ptr %19, align 8, !tbaa !5
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.graphdef, ptr %54, i32 0, i32 5
  %56 = load ptr, ptr %55, align 8, !tbaa !17
  store ptr %56, ptr %21, align 8, !tbaa !5
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.graphdef, ptr %57, i32 0, i32 3
  %59 = load ptr, ptr %58, align 8, !tbaa !18
  store ptr %59, ptr %20, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.graphdef, ptr %60, i32 0, i32 22
  %62 = load ptr, ptr %61, align 8, !tbaa !19
  store ptr %62, ptr %25, align 8, !tbaa !5
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.graphdef, ptr %63, i32 0, i32 21
  %65 = load ptr, ptr %64, align 8, !tbaa !20
  store ptr %65, ptr %26, align 8, !tbaa !5
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.graphdef, ptr %66, i32 0, i32 18
  %68 = load ptr, ptr %67, align 8, !tbaa !21
  store ptr %68, ptr %22, align 8, !tbaa !5
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.graphdef, ptr %69, i32 0, i32 19
  %71 = load ptr, ptr %70, align 8, !tbaa !22
  store ptr %71, ptr %23, align 8, !tbaa !5
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.graphdef, ptr %72, i32 0, i32 27
  %74 = load ptr, ptr %73, align 8, !tbaa !23
  store ptr %74, ptr %33, align 8, !tbaa !5
  %75 = load i64, ptr %15, align 8, !tbaa !11
  %76 = load ptr, ptr %19, align 8, !tbaa !5
  %77 = load ptr, ptr %21, align 8, !tbaa !5
  %78 = load ptr, ptr %20, align 8, !tbaa !5
  %79 = call i64 @libmetis__ComputeMaxNodeGain(i64 noundef %75, ptr noundef %76, ptr noundef %77, ptr noundef %78)
  store i64 %79, ptr %9, align 8, !tbaa !11
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 0
  %82 = load i64, ptr %15, align 8, !tbaa !11
  %83 = load i64, ptr %9, align 8, !tbaa !11
  call void @libmetis__PQueueInit(ptr noundef %80, ptr noundef %81, i64 noundef %82, i64 noundef %83)
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 1
  %86 = load i64, ptr %15, align 8, !tbaa !11
  %87 = load i64, ptr %9, align 8, !tbaa !11
  call void @libmetis__PQueueInit(ptr noundef %84, ptr noundef %85, i64 noundef %86, i64 noundef %87)
  %88 = load ptr, ptr %5, align 8, !tbaa !5
  %89 = load i64, ptr %15, align 8, !tbaa !11
  %90 = call ptr @libmetis__idxwspacemalloc(ptr noundef %88, i64 noundef %89)
  store ptr %90, ptr %29, align 8, !tbaa !5
  %91 = load ptr, ptr %5, align 8, !tbaa !5
  %92 = load i64, ptr %15, align 8, !tbaa !11
  %93 = call ptr @libmetis__idxwspacemalloc(ptr noundef %91, i64 noundef %92)
  store ptr %93, ptr %30, align 8, !tbaa !5
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = load i64, ptr %15, align 8, !tbaa !11
  %96 = add nsw i64 %95, 1
  %97 = call ptr @libmetis__idxwspacemalloc(ptr noundef %94, i64 noundef %96)
  store ptr %97, ptr %27, align 8, !tbaa !5
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = load i64, ptr %15, align 8, !tbaa !11
  %100 = call ptr @libmetis__idxwspacemalloc(ptr noundef %98, i64 noundef %99)
  store ptr %100, ptr %28, align 8, !tbaa !5
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = load i64, ptr %15, align 8, !tbaa !11
  %103 = call ptr @libmetis__idxwspacemalloc(ptr noundef %101, i64 noundef %102)
  store ptr %103, ptr %31, align 8, !tbaa !5
  %104 = load ptr, ptr %5, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.controldef, ptr %104, i32 0, i32 1
  %106 = load i64, ptr %105, align 8, !tbaa !24
  %107 = and i64 %106, 8
  %108 = icmp ne i64 %107, 0
  br i1 %108, label %109, label %126

109:                                              ; preds = %4
  %110 = load ptr, ptr %23, align 8, !tbaa !5
  %111 = getelementptr inbounds i64, ptr %110, i64 0
  %112 = load i64, ptr %111, align 8, !tbaa !11
  %113 = load ptr, ptr %23, align 8, !tbaa !5
  %114 = getelementptr inbounds i64, ptr %113, i64 1
  %115 = load i64, ptr %114, align 8, !tbaa !11
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.graphdef, ptr %116, i32 0, i32 0
  %118 = load i64, ptr %117, align 8, !tbaa !13
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.graphdef, ptr %119, i32 0, i32 20
  %121 = load i64, ptr %120, align 8, !tbaa !28
  %122 = load ptr, ptr %6, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.graphdef, ptr %122, i32 0, i32 16
  %124 = load i64, ptr %123, align 8, !tbaa !29
  %125 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, i64 noundef %112, i64 noundef %115, i64 noundef %118, i64 noundef %121, i64 noundef %124)
  br label %126

126:                                              ; preds = %109, %4
  %127 = load float, ptr %7, align 4, !tbaa !9
  %128 = load ptr, ptr %23, align 8, !tbaa !5
  %129 = getelementptr inbounds i64, ptr %128, i64 0
  %130 = load i64, ptr %129, align 8, !tbaa !11
  %131 = load ptr, ptr %23, align 8, !tbaa !5
  %132 = getelementptr inbounds i64, ptr %131, i64 1
  %133 = load i64, ptr %132, align 8, !tbaa !11
  %134 = add nsw i64 %130, %133
  %135 = load ptr, ptr %23, align 8, !tbaa !5
  %136 = getelementptr inbounds i64, ptr %135, i64 2
  %137 = load i64, ptr %136, align 8, !tbaa !11
  %138 = add nsw i64 %134, %137
  %139 = sitofp i64 %138 to float
  %140 = fmul float %127, %139
  %141 = fdiv float %140, 2.000000e+00
  %142 = fptosi float %141 to i32
  %143 = sext i32 %142 to i64
  store i64 %143, ptr %43, align 8, !tbaa !11
  store i64 0, ptr %39, align 8, !tbaa !11
  br label %144

144:                                              ; preds = %1168, %126
  %145 = load i64, ptr %39, align 8, !tbaa !11
  %146 = load i64, ptr %8, align 8, !tbaa !11
  %147 = icmp slt i64 %145, %146
  br i1 %147, label %148, label %1171

148:                                              ; preds = %144
  %149 = load i64, ptr %15, align 8, !tbaa !11
  %150 = load ptr, ptr %29, align 8, !tbaa !5
  %151 = call ptr @libmetis__idxset(i64 noundef %149, i64 noundef -1, ptr noundef %150)
  %152 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 0
  call void @libmetis__PQueueReset(ptr noundef %152)
  %153 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 1
  call void @libmetis__PQueueReset(ptr noundef %153)
  store i64 -1, ptr %38, align 8, !tbaa !11
  %154 = load ptr, ptr %6, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.graphdef, ptr %154, i32 0, i32 16
  %156 = load i64, ptr %155, align 8, !tbaa !29
  store i64 %156, ptr %36, align 8, !tbaa !11
  store i64 %156, ptr %37, align 8, !tbaa !11
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.graphdef, ptr %157, i32 0, i32 20
  %159 = load i64, ptr %158, align 8, !tbaa !28
  store i64 %159, ptr %16, align 8, !tbaa !11
  %160 = load i64, ptr %16, align 8, !tbaa !11
  %161 = load ptr, ptr %31, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %160, ptr noundef %161, i64 noundef 1)
  store i64 0, ptr %10, align 8, !tbaa !11
  br label %162

162:                                              ; preds = %202, %148
  %163 = load i64, ptr %10, align 8, !tbaa !11
  %164 = load i64, ptr %16, align 8, !tbaa !11
  %165 = icmp slt i64 %163, %164
  br i1 %165, label %166, label %205

166:                                              ; preds = %162
  %167 = load ptr, ptr %25, align 8, !tbaa !5
  %168 = load ptr, ptr %31, align 8, !tbaa !5
  %169 = load i64, ptr %10, align 8, !tbaa !11
  %170 = getelementptr inbounds i64, ptr %168, i64 %169
  %171 = load i64, ptr %170, align 8, !tbaa !11
  %172 = getelementptr inbounds i64, ptr %167, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !11
  store i64 %173, ptr %9, align 8, !tbaa !11
  %174 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 0
  %175 = load i64, ptr %9, align 8, !tbaa !11
  %176 = load ptr, ptr %20, align 8, !tbaa !5
  %177 = load i64, ptr %9, align 8, !tbaa !11
  %178 = getelementptr inbounds i64, ptr %176, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !11
  %180 = load ptr, ptr %33, align 8, !tbaa !5
  %181 = load i64, ptr %9, align 8, !tbaa !11
  %182 = getelementptr inbounds %struct.nrinfodef, ptr %180, i64 %181
  %183 = getelementptr inbounds %struct.nrinfodef, ptr %182, i32 0, i32 0
  %184 = getelementptr inbounds [2 x i64], ptr %183, i64 0, i64 1
  %185 = load i64, ptr %184, align 8, !tbaa !11
  %186 = sub nsw i64 %179, %185
  %187 = call i64 @libmetis__PQueueInsert(ptr noundef %174, i64 noundef %175, i64 noundef %186)
  %188 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 1
  %189 = load i64, ptr %9, align 8, !tbaa !11
  %190 = load ptr, ptr %20, align 8, !tbaa !5
  %191 = load i64, ptr %9, align 8, !tbaa !11
  %192 = getelementptr inbounds i64, ptr %190, i64 %191
  %193 = load i64, ptr %192, align 8, !tbaa !11
  %194 = load ptr, ptr %33, align 8, !tbaa !5
  %195 = load i64, ptr %9, align 8, !tbaa !11
  %196 = getelementptr inbounds %struct.nrinfodef, ptr %194, i64 %195
  %197 = getelementptr inbounds %struct.nrinfodef, ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds [2 x i64], ptr %197, i64 0, i64 0
  %199 = load i64, ptr %198, align 8, !tbaa !11
  %200 = sub nsw i64 %193, %199
  %201 = call i64 @libmetis__PQueueInsert(ptr noundef %188, i64 noundef %189, i64 noundef %200)
  br label %202

202:                                              ; preds = %166
  %203 = load i64, ptr %10, align 8, !tbaa !11
  %204 = add nsw i64 %203, 1
  store i64 %204, ptr %10, align 8, !tbaa !11
  br label %162, !llvm.loop !30

205:                                              ; preds = %162
  %206 = load ptr, ptr %5, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.controldef, ptr %206, i32 0, i32 10
  %208 = load i64, ptr %207, align 8, !tbaa !32
  %209 = and i64 %208, 1
  %210 = icmp ne i64 %209, 0
  br i1 %210, label %211, label %221

211:                                              ; preds = %205
  %212 = load i64, ptr %16, align 8, !tbaa !11
  %213 = mul nsw i64 5, %212
  %214 = icmp sge i64 %213, 400
  br i1 %214, label %215, label %216

215:                                              ; preds = %211
  br label %219

216:                                              ; preds = %211
  %217 = load i64, ptr %16, align 8, !tbaa !11
  %218 = mul nsw i64 5, %217
  br label %219

219:                                              ; preds = %216, %215
  %220 = phi i64 [ 400, %215 ], [ %218, %216 ]
  br label %231

221:                                              ; preds = %205
  %222 = load i64, ptr %16, align 8, !tbaa !11
  %223 = mul nsw i64 2, %222
  %224 = icmp sge i64 %223, 300
  br i1 %224, label %225, label %226

225:                                              ; preds = %221
  br label %229

226:                                              ; preds = %221
  %227 = load i64, ptr %16, align 8, !tbaa !11
  %228 = mul nsw i64 2, %227
  br label %229

229:                                              ; preds = %226, %225
  %230 = phi i64 [ 300, %225 ], [ %228, %226 ]
  br label %231

231:                                              ; preds = %229, %219
  %232 = phi i64 [ %220, %219 ], [ %230, %229 ]
  store i64 %232, ptr %42, align 8, !tbaa !11
  store i64 0, ptr %18, align 8, !tbaa !11
  %233 = load ptr, ptr %27, align 8, !tbaa !5
  %234 = getelementptr inbounds i64, ptr %233, i64 0
  store i64 0, ptr %234, align 8, !tbaa !11
  %235 = load ptr, ptr %23, align 8, !tbaa !5
  %236 = getelementptr inbounds i64, ptr %235, i64 0
  %237 = load i64, ptr %236, align 8, !tbaa !11
  %238 = load ptr, ptr %23, align 8, !tbaa !5
  %239 = getelementptr inbounds i64, ptr %238, i64 1
  %240 = load i64, ptr %239, align 8, !tbaa !11
  %241 = sub nsw i64 %237, %240
  %242 = icmp sgt i64 %241, 0
  br i1 %242, label %243, label %251

243:                                              ; preds = %231
  %244 = load ptr, ptr %23, align 8, !tbaa !5
  %245 = getelementptr inbounds i64, ptr %244, i64 0
  %246 = load i64, ptr %245, align 8, !tbaa !11
  %247 = load ptr, ptr %23, align 8, !tbaa !5
  %248 = getelementptr inbounds i64, ptr %247, i64 1
  %249 = load i64, ptr %248, align 8, !tbaa !11
  %250 = sub nsw i64 %246, %249
  br label %260

251:                                              ; preds = %231
  %252 = load ptr, ptr %23, align 8, !tbaa !5
  %253 = getelementptr inbounds i64, ptr %252, i64 0
  %254 = load i64, ptr %253, align 8, !tbaa !11
  %255 = load ptr, ptr %23, align 8, !tbaa !5
  %256 = getelementptr inbounds i64, ptr %255, i64 1
  %257 = load i64, ptr %256, align 8, !tbaa !11
  %258 = sub nsw i64 %254, %257
  %259 = sub nsw i64 0, %258
  br label %260

260:                                              ; preds = %251, %243
  %261 = phi i64 [ %250, %243 ], [ %259, %251 ]
  store i64 %261, ptr %44, align 8, !tbaa !11
  %262 = load ptr, ptr %23, align 8, !tbaa !5
  %263 = getelementptr inbounds i64, ptr %262, i64 0
  %264 = load i64, ptr %263, align 8, !tbaa !11
  %265 = load ptr, ptr %23, align 8, !tbaa !5
  %266 = getelementptr inbounds i64, ptr %265, i64 1
  %267 = load i64, ptr %266, align 8, !tbaa !11
  %268 = icmp slt i64 %264, %267
  %269 = zext i1 %268 to i64
  %270 = select i1 %268, i32 0, i32 1
  %271 = sext i32 %270 to i64
  store i64 %271, ptr %40, align 8, !tbaa !11
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %272

272:                                              ; preds = %902, %260
  %273 = load i64, ptr %17, align 8, !tbaa !11
  %274 = load i64, ptr %15, align 8, !tbaa !11
  %275 = icmp slt i64 %273, %274
  br i1 %275, label %276, label %905

276:                                              ; preds = %272
  %277 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 0
  %278 = call i64 @libmetis__PQueueSeeMax(ptr noundef %277)
  %279 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  store i64 %278, ptr %279, align 16, !tbaa !11
  %280 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 1
  %281 = call i64 @libmetis__PQueueSeeMax(ptr noundef %280)
  %282 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  store i64 %281, ptr %282, align 8, !tbaa !11
  %283 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  %284 = load i64, ptr %283, align 16, !tbaa !11
  %285 = icmp ne i64 %284, -1
  br i1 %285, label %286, label %357

286:                                              ; preds = %276
  %287 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  %288 = load i64, ptr %287, align 8, !tbaa !11
  %289 = icmp ne i64 %288, -1
  br i1 %289, label %290, label %357

290:                                              ; preds = %286
  %291 = load ptr, ptr %20, align 8, !tbaa !5
  %292 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  %293 = load i64, ptr %292, align 16, !tbaa !11
  %294 = getelementptr inbounds i64, ptr %291, i64 %293
  %295 = load i64, ptr %294, align 8, !tbaa !11
  %296 = load ptr, ptr %33, align 8, !tbaa !5
  %297 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  %298 = load i64, ptr %297, align 16, !tbaa !11
  %299 = getelementptr inbounds %struct.nrinfodef, ptr %296, i64 %298
  %300 = getelementptr inbounds %struct.nrinfodef, ptr %299, i32 0, i32 0
  %301 = getelementptr inbounds [2 x i64], ptr %300, i64 0, i64 1
  %302 = load i64, ptr %301, align 8, !tbaa !11
  %303 = sub nsw i64 %295, %302
  %304 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 0
  store i64 %303, ptr %304, align 16, !tbaa !11
  %305 = load ptr, ptr %20, align 8, !tbaa !5
  %306 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  %307 = load i64, ptr %306, align 8, !tbaa !11
  %308 = getelementptr inbounds i64, ptr %305, i64 %307
  %309 = load i64, ptr %308, align 8, !tbaa !11
  %310 = load ptr, ptr %33, align 8, !tbaa !5
  %311 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  %312 = load i64, ptr %311, align 8, !tbaa !11
  %313 = getelementptr inbounds %struct.nrinfodef, ptr %310, i64 %312
  %314 = getelementptr inbounds %struct.nrinfodef, ptr %313, i32 0, i32 0
  %315 = getelementptr inbounds [2 x i64], ptr %314, i64 0, i64 0
  %316 = load i64, ptr %315, align 8, !tbaa !11
  %317 = sub nsw i64 %309, %316
  %318 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 1
  store i64 %317, ptr %318, align 8, !tbaa !11
  %319 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 0
  %320 = load i64, ptr %319, align 16, !tbaa !11
  %321 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 1
  %322 = load i64, ptr %321, align 8, !tbaa !11
  %323 = icmp sgt i64 %320, %322
  br i1 %323, label %324, label %325

324:                                              ; preds = %290
  br label %337

325:                                              ; preds = %290
  %326 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 0
  %327 = load i64, ptr %326, align 16, !tbaa !11
  %328 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 1
  %329 = load i64, ptr %328, align 8, !tbaa !11
  %330 = icmp slt i64 %327, %329
  br i1 %330, label %331, label %332

331:                                              ; preds = %325
  br label %335

332:                                              ; preds = %325
  %333 = load i64, ptr %39, align 8, !tbaa !11
  %334 = srem i64 %333, 2
  br label %335

335:                                              ; preds = %332, %331
  %336 = phi i64 [ 1, %331 ], [ %334, %332 ]
  br label %337

337:                                              ; preds = %335, %324
  %338 = phi i64 [ 0, %324 ], [ %336, %335 ]
  store i64 %338, ptr %40, align 8, !tbaa !11
  %339 = load ptr, ptr %23, align 8, !tbaa !5
  %340 = load i64, ptr %40, align 8, !tbaa !11
  %341 = getelementptr inbounds i64, ptr %339, i64 %340
  %342 = load i64, ptr %341, align 8, !tbaa !11
  %343 = load ptr, ptr %20, align 8, !tbaa !5
  %344 = load i64, ptr %40, align 8, !tbaa !11
  %345 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 %344
  %346 = load i64, ptr %345, align 8, !tbaa !11
  %347 = getelementptr inbounds i64, ptr %343, i64 %346
  %348 = load i64, ptr %347, align 8, !tbaa !11
  %349 = add nsw i64 %342, %348
  %350 = load i64, ptr %43, align 8, !tbaa !11
  %351 = icmp sgt i64 %349, %350
  br i1 %351, label %352, label %356

352:                                              ; preds = %337
  %353 = load i64, ptr %40, align 8, !tbaa !11
  %354 = add nsw i64 %353, 1
  %355 = srem i64 %354, 2
  store i64 %355, ptr %40, align 8, !tbaa !11
  br label %356

356:                                              ; preds = %352, %337
  br label %404

357:                                              ; preds = %286, %276
  %358 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  %359 = load i64, ptr %358, align 16, !tbaa !11
  %360 = icmp eq i64 %359, -1
  br i1 %360, label %361, label %366

361:                                              ; preds = %357
  %362 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  %363 = load i64, ptr %362, align 8, !tbaa !11
  %364 = icmp eq i64 %363, -1
  br i1 %364, label %365, label %366

365:                                              ; preds = %361
  br label %905

366:                                              ; preds = %361, %357
  %367 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  %368 = load i64, ptr %367, align 16, !tbaa !11
  %369 = icmp ne i64 %368, -1
  br i1 %369, label %370, label %383

370:                                              ; preds = %366
  %371 = load ptr, ptr %23, align 8, !tbaa !5
  %372 = getelementptr inbounds i64, ptr %371, i64 0
  %373 = load i64, ptr %372, align 8, !tbaa !11
  %374 = load ptr, ptr %20, align 8, !tbaa !5
  %375 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 0
  %376 = load i64, ptr %375, align 16, !tbaa !11
  %377 = getelementptr inbounds i64, ptr %374, i64 %376
  %378 = load i64, ptr %377, align 8, !tbaa !11
  %379 = add nsw i64 %373, %378
  %380 = load i64, ptr %43, align 8, !tbaa !11
  %381 = icmp sle i64 %379, %380
  br i1 %381, label %382, label %383

382:                                              ; preds = %370
  store i64 0, ptr %40, align 8, !tbaa !11
  br label %402

383:                                              ; preds = %370, %366
  %384 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  %385 = load i64, ptr %384, align 8, !tbaa !11
  %386 = icmp ne i64 %385, -1
  br i1 %386, label %387, label %400

387:                                              ; preds = %383
  %388 = load ptr, ptr %23, align 8, !tbaa !5
  %389 = getelementptr inbounds i64, ptr %388, i64 1
  %390 = load i64, ptr %389, align 8, !tbaa !11
  %391 = load ptr, ptr %20, align 8, !tbaa !5
  %392 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 1
  %393 = load i64, ptr %392, align 8, !tbaa !11
  %394 = getelementptr inbounds i64, ptr %391, i64 %393
  %395 = load i64, ptr %394, align 8, !tbaa !11
  %396 = add nsw i64 %390, %395
  %397 = load i64, ptr %43, align 8, !tbaa !11
  %398 = icmp sle i64 %396, %397
  br i1 %398, label %399, label %400

399:                                              ; preds = %387
  store i64 1, ptr %40, align 8, !tbaa !11
  br label %401

400:                                              ; preds = %387, %383
  br label %905

401:                                              ; preds = %399
  br label %402

402:                                              ; preds = %401, %382
  br label %403

403:                                              ; preds = %402
  br label %404

404:                                              ; preds = %403, %356
  %405 = load i64, ptr %40, align 8, !tbaa !11
  %406 = add nsw i64 %405, 1
  %407 = srem i64 %406, 2
  store i64 %407, ptr %41, align 8, !tbaa !11
  %408 = load i64, ptr %40, align 8, !tbaa !11
  %409 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 %408
  %410 = call i64 @libmetis__PQueueGetMax(ptr noundef %409)
  store i64 %410, ptr %34, align 8, !tbaa !11
  %411 = load ptr, ptr %29, align 8, !tbaa !5
  %412 = load i64, ptr %34, align 8, !tbaa !11
  %413 = getelementptr inbounds i64, ptr %411, i64 %412
  %414 = load i64, ptr %413, align 8, !tbaa !11
  %415 = icmp eq i64 %414, -1
  br i1 %415, label %416, label %433

416:                                              ; preds = %404
  %417 = load i64, ptr %41, align 8, !tbaa !11
  %418 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 %417
  %419 = load i64, ptr %34, align 8, !tbaa !11
  %420 = load ptr, ptr %20, align 8, !tbaa !5
  %421 = load i64, ptr %34, align 8, !tbaa !11
  %422 = getelementptr inbounds i64, ptr %420, i64 %421
  %423 = load i64, ptr %422, align 8, !tbaa !11
  %424 = load ptr, ptr %33, align 8, !tbaa !5
  %425 = load i64, ptr %34, align 8, !tbaa !11
  %426 = getelementptr inbounds %struct.nrinfodef, ptr %424, i64 %425
  %427 = getelementptr inbounds %struct.nrinfodef, ptr %426, i32 0, i32 0
  %428 = load i64, ptr %40, align 8, !tbaa !11
  %429 = getelementptr inbounds [2 x i64], ptr %427, i64 0, i64 %428
  %430 = load i64, ptr %429, align 8, !tbaa !11
  %431 = sub nsw i64 %423, %430
  %432 = call i64 @libmetis__PQueueDelete(ptr noundef %418, i64 noundef %419, i64 noundef %431)
  br label %433

433:                                              ; preds = %416, %404
  %434 = load ptr, ptr %20, align 8, !tbaa !5
  %435 = load i64, ptr %34, align 8, !tbaa !11
  %436 = getelementptr inbounds i64, ptr %434, i64 %435
  %437 = load i64, ptr %436, align 8, !tbaa !11
  %438 = load ptr, ptr %33, align 8, !tbaa !5
  %439 = load i64, ptr %34, align 8, !tbaa !11
  %440 = getelementptr inbounds %struct.nrinfodef, ptr %438, i64 %439
  %441 = getelementptr inbounds %struct.nrinfodef, ptr %440, i32 0, i32 0
  %442 = load i64, ptr %41, align 8, !tbaa !11
  %443 = getelementptr inbounds [2 x i64], ptr %441, i64 0, i64 %442
  %444 = load i64, ptr %443, align 8, !tbaa !11
  %445 = sub nsw i64 %437, %444
  %446 = load ptr, ptr %23, align 8, !tbaa !5
  %447 = getelementptr inbounds i64, ptr %446, i64 2
  %448 = load i64, ptr %447, align 8, !tbaa !11
  %449 = sub nsw i64 %448, %445
  store i64 %449, ptr %447, align 8, !tbaa !11
  %450 = load ptr, ptr %23, align 8, !tbaa !5
  %451 = load i64, ptr %40, align 8, !tbaa !11
  %452 = getelementptr inbounds i64, ptr %450, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !11
  %454 = load ptr, ptr %20, align 8, !tbaa !5
  %455 = load i64, ptr %34, align 8, !tbaa !11
  %456 = getelementptr inbounds i64, ptr %454, i64 %455
  %457 = load i64, ptr %456, align 8, !tbaa !11
  %458 = add nsw i64 %453, %457
  %459 = load ptr, ptr %23, align 8, !tbaa !5
  %460 = load i64, ptr %41, align 8, !tbaa !11
  %461 = getelementptr inbounds i64, ptr %459, i64 %460
  %462 = load i64, ptr %461, align 8, !tbaa !11
  %463 = load ptr, ptr %33, align 8, !tbaa !5
  %464 = load i64, ptr %34, align 8, !tbaa !11
  %465 = getelementptr inbounds %struct.nrinfodef, ptr %463, i64 %464
  %466 = getelementptr inbounds %struct.nrinfodef, ptr %465, i32 0, i32 0
  %467 = load i64, ptr %41, align 8, !tbaa !11
  %468 = getelementptr inbounds [2 x i64], ptr %466, i64 0, i64 %467
  %469 = load i64, ptr %468, align 8, !tbaa !11
  %470 = sub nsw i64 %462, %469
  %471 = sub nsw i64 %458, %470
  %472 = icmp sgt i64 %471, 0
  br i1 %472, label %473, label %496

473:                                              ; preds = %433
  %474 = load ptr, ptr %23, align 8, !tbaa !5
  %475 = load i64, ptr %40, align 8, !tbaa !11
  %476 = getelementptr inbounds i64, ptr %474, i64 %475
  %477 = load i64, ptr %476, align 8, !tbaa !11
  %478 = load ptr, ptr %20, align 8, !tbaa !5
  %479 = load i64, ptr %34, align 8, !tbaa !11
  %480 = getelementptr inbounds i64, ptr %478, i64 %479
  %481 = load i64, ptr %480, align 8, !tbaa !11
  %482 = add nsw i64 %477, %481
  %483 = load ptr, ptr %23, align 8, !tbaa !5
  %484 = load i64, ptr %41, align 8, !tbaa !11
  %485 = getelementptr inbounds i64, ptr %483, i64 %484
  %486 = load i64, ptr %485, align 8, !tbaa !11
  %487 = load ptr, ptr %33, align 8, !tbaa !5
  %488 = load i64, ptr %34, align 8, !tbaa !11
  %489 = getelementptr inbounds %struct.nrinfodef, ptr %487, i64 %488
  %490 = getelementptr inbounds %struct.nrinfodef, ptr %489, i32 0, i32 0
  %491 = load i64, ptr %41, align 8, !tbaa !11
  %492 = getelementptr inbounds [2 x i64], ptr %490, i64 0, i64 %491
  %493 = load i64, ptr %492, align 8, !tbaa !11
  %494 = sub nsw i64 %486, %493
  %495 = sub nsw i64 %482, %494
  br label %520

496:                                              ; preds = %433
  %497 = load ptr, ptr %23, align 8, !tbaa !5
  %498 = load i64, ptr %40, align 8, !tbaa !11
  %499 = getelementptr inbounds i64, ptr %497, i64 %498
  %500 = load i64, ptr %499, align 8, !tbaa !11
  %501 = load ptr, ptr %20, align 8, !tbaa !5
  %502 = load i64, ptr %34, align 8, !tbaa !11
  %503 = getelementptr inbounds i64, ptr %501, i64 %502
  %504 = load i64, ptr %503, align 8, !tbaa !11
  %505 = add nsw i64 %500, %504
  %506 = load ptr, ptr %23, align 8, !tbaa !5
  %507 = load i64, ptr %41, align 8, !tbaa !11
  %508 = getelementptr inbounds i64, ptr %506, i64 %507
  %509 = load i64, ptr %508, align 8, !tbaa !11
  %510 = load ptr, ptr %33, align 8, !tbaa !5
  %511 = load i64, ptr %34, align 8, !tbaa !11
  %512 = getelementptr inbounds %struct.nrinfodef, ptr %510, i64 %511
  %513 = getelementptr inbounds %struct.nrinfodef, ptr %512, i32 0, i32 0
  %514 = load i64, ptr %41, align 8, !tbaa !11
  %515 = getelementptr inbounds [2 x i64], ptr %513, i64 0, i64 %514
  %516 = load i64, ptr %515, align 8, !tbaa !11
  %517 = sub nsw i64 %509, %516
  %518 = sub nsw i64 %505, %517
  %519 = sub nsw i64 0, %518
  br label %520

520:                                              ; preds = %496, %473
  %521 = phi i64 [ %495, %473 ], [ %519, %496 ]
  store i64 %521, ptr %45, align 8, !tbaa !11
  %522 = load ptr, ptr %23, align 8, !tbaa !5
  %523 = getelementptr inbounds i64, ptr %522, i64 2
  %524 = load i64, ptr %523, align 8, !tbaa !11
  %525 = load i64, ptr %36, align 8, !tbaa !11
  %526 = icmp slt i64 %524, %525
  br i1 %526, label %537, label %527

527:                                              ; preds = %520
  %528 = load ptr, ptr %23, align 8, !tbaa !5
  %529 = getelementptr inbounds i64, ptr %528, i64 2
  %530 = load i64, ptr %529, align 8, !tbaa !11
  %531 = load i64, ptr %36, align 8, !tbaa !11
  %532 = icmp eq i64 %530, %531
  br i1 %532, label %533, label %543

533:                                              ; preds = %527
  %534 = load i64, ptr %45, align 8, !tbaa !11
  %535 = load i64, ptr %44, align 8, !tbaa !11
  %536 = icmp slt i64 %534, %535
  br i1 %536, label %537, label %543

537:                                              ; preds = %533, %520
  %538 = load ptr, ptr %23, align 8, !tbaa !5
  %539 = getelementptr inbounds i64, ptr %538, i64 2
  %540 = load i64, ptr %539, align 8, !tbaa !11
  store i64 %540, ptr %36, align 8, !tbaa !11
  %541 = load i64, ptr %17, align 8, !tbaa !11
  store i64 %541, ptr %38, align 8, !tbaa !11
  %542 = load i64, ptr %45, align 8, !tbaa !11
  store i64 %542, ptr %44, align 8, !tbaa !11
  br label %567

543:                                              ; preds = %533, %527
  %544 = load i64, ptr %17, align 8, !tbaa !11
  %545 = load i64, ptr %38, align 8, !tbaa !11
  %546 = sub nsw i64 %544, %545
  %547 = load i64, ptr %42, align 8, !tbaa !11
  %548 = icmp sgt i64 %546, %547
  br i1 %548, label %549, label %566

549:                                              ; preds = %543
  %550 = load ptr, ptr %20, align 8, !tbaa !5
  %551 = load i64, ptr %34, align 8, !tbaa !11
  %552 = getelementptr inbounds i64, ptr %550, i64 %551
  %553 = load i64, ptr %552, align 8, !tbaa !11
  %554 = load ptr, ptr %33, align 8, !tbaa !5
  %555 = load i64, ptr %34, align 8, !tbaa !11
  %556 = getelementptr inbounds %struct.nrinfodef, ptr %554, i64 %555
  %557 = getelementptr inbounds %struct.nrinfodef, ptr %556, i32 0, i32 0
  %558 = load i64, ptr %41, align 8, !tbaa !11
  %559 = getelementptr inbounds [2 x i64], ptr %557, i64 0, i64 %558
  %560 = load i64, ptr %559, align 8, !tbaa !11
  %561 = sub nsw i64 %553, %560
  %562 = load ptr, ptr %23, align 8, !tbaa !5
  %563 = getelementptr inbounds i64, ptr %562, i64 2
  %564 = load i64, ptr %563, align 8, !tbaa !11
  %565 = add nsw i64 %564, %561
  store i64 %565, ptr %563, align 8, !tbaa !11
  br label %905

566:                                              ; preds = %543
  br label %567

567:                                              ; preds = %566, %537
  br label %568

568:                                              ; preds = %567
  %569 = load ptr, ptr %25, align 8, !tbaa !5
  %570 = load i64, ptr %16, align 8, !tbaa !11
  %571 = add nsw i64 %570, -1
  store i64 %571, ptr %16, align 8, !tbaa !11
  %572 = getelementptr inbounds i64, ptr %569, i64 %571
  %573 = load i64, ptr %572, align 8, !tbaa !11
  %574 = load ptr, ptr %25, align 8, !tbaa !5
  %575 = load ptr, ptr %26, align 8, !tbaa !5
  %576 = load i64, ptr %34, align 8, !tbaa !11
  %577 = getelementptr inbounds i64, ptr %575, i64 %576
  %578 = load i64, ptr %577, align 8, !tbaa !11
  %579 = getelementptr inbounds i64, ptr %574, i64 %578
  store i64 %573, ptr %579, align 8, !tbaa !11
  %580 = load ptr, ptr %26, align 8, !tbaa !5
  %581 = load i64, ptr %34, align 8, !tbaa !11
  %582 = getelementptr inbounds i64, ptr %580, i64 %581
  %583 = load i64, ptr %582, align 8, !tbaa !11
  %584 = load ptr, ptr %26, align 8, !tbaa !5
  %585 = load ptr, ptr %25, align 8, !tbaa !5
  %586 = load i64, ptr %16, align 8, !tbaa !11
  %587 = getelementptr inbounds i64, ptr %585, i64 %586
  %588 = load i64, ptr %587, align 8, !tbaa !11
  %589 = getelementptr inbounds i64, ptr %584, i64 %588
  store i64 %583, ptr %589, align 8, !tbaa !11
  %590 = load ptr, ptr %26, align 8, !tbaa !5
  %591 = load i64, ptr %34, align 8, !tbaa !11
  %592 = getelementptr inbounds i64, ptr %590, i64 %591
  store i64 -1, ptr %592, align 8, !tbaa !11
  br label %593

593:                                              ; preds = %568
  br label %594

594:                                              ; preds = %593
  %595 = load ptr, ptr %20, align 8, !tbaa !5
  %596 = load i64, ptr %34, align 8, !tbaa !11
  %597 = getelementptr inbounds i64, ptr %595, i64 %596
  %598 = load i64, ptr %597, align 8, !tbaa !11
  %599 = load ptr, ptr %23, align 8, !tbaa !5
  %600 = load i64, ptr %40, align 8, !tbaa !11
  %601 = getelementptr inbounds i64, ptr %599, i64 %600
  %602 = load i64, ptr %601, align 8, !tbaa !11
  %603 = add nsw i64 %602, %598
  store i64 %603, ptr %601, align 8, !tbaa !11
  %604 = load i64, ptr %40, align 8, !tbaa !11
  %605 = load ptr, ptr %22, align 8, !tbaa !5
  %606 = load i64, ptr %34, align 8, !tbaa !11
  %607 = getelementptr inbounds i64, ptr %605, i64 %606
  store i64 %604, ptr %607, align 8, !tbaa !11
  %608 = load i64, ptr %17, align 8, !tbaa !11
  %609 = load ptr, ptr %29, align 8, !tbaa !5
  %610 = load i64, ptr %34, align 8, !tbaa !11
  %611 = getelementptr inbounds i64, ptr %609, i64 %610
  store i64 %608, ptr %611, align 8, !tbaa !11
  %612 = load i64, ptr %34, align 8, !tbaa !11
  %613 = load ptr, ptr %30, align 8, !tbaa !5
  %614 = load i64, ptr %17, align 8, !tbaa !11
  %615 = getelementptr inbounds i64, ptr %613, i64 %614
  store i64 %612, ptr %615, align 8, !tbaa !11
  %616 = load ptr, ptr %19, align 8, !tbaa !5
  %617 = load i64, ptr %34, align 8, !tbaa !11
  %618 = getelementptr inbounds i64, ptr %616, i64 %617
  %619 = load i64, ptr %618, align 8, !tbaa !11
  store i64 %619, ptr %11, align 8, !tbaa !11
  br label %620

620:                                              ; preds = %856, %594
  %621 = load i64, ptr %11, align 8, !tbaa !11
  %622 = load ptr, ptr %19, align 8, !tbaa !5
  %623 = load i64, ptr %34, align 8, !tbaa !11
  %624 = add nsw i64 %623, 1
  %625 = getelementptr inbounds i64, ptr %622, i64 %624
  %626 = load i64, ptr %625, align 8, !tbaa !11
  %627 = icmp slt i64 %621, %626
  br i1 %627, label %628, label %859

628:                                              ; preds = %620
  %629 = load ptr, ptr %21, align 8, !tbaa !5
  %630 = load i64, ptr %11, align 8, !tbaa !11
  %631 = getelementptr inbounds i64, ptr %629, i64 %630
  %632 = load i64, ptr %631, align 8, !tbaa !11
  store i64 %632, ptr %12, align 8, !tbaa !11
  %633 = load ptr, ptr %22, align 8, !tbaa !5
  %634 = load i64, ptr %12, align 8, !tbaa !11
  %635 = getelementptr inbounds i64, ptr %633, i64 %634
  %636 = load i64, ptr %635, align 8, !tbaa !11
  %637 = icmp eq i64 %636, 2
  br i1 %637, label %638, label %690

638:                                              ; preds = %628
  %639 = load ptr, ptr %20, align 8, !tbaa !5
  %640 = load i64, ptr %12, align 8, !tbaa !11
  %641 = getelementptr inbounds i64, ptr %639, i64 %640
  %642 = load i64, ptr %641, align 8, !tbaa !11
  %643 = load ptr, ptr %33, align 8, !tbaa !5
  %644 = load i64, ptr %12, align 8, !tbaa !11
  %645 = getelementptr inbounds %struct.nrinfodef, ptr %643, i64 %644
  %646 = getelementptr inbounds %struct.nrinfodef, ptr %645, i32 0, i32 0
  %647 = load i64, ptr %40, align 8, !tbaa !11
  %648 = getelementptr inbounds [2 x i64], ptr %646, i64 0, i64 %647
  %649 = load i64, ptr %648, align 8, !tbaa !11
  %650 = sub nsw i64 %642, %649
  store i64 %650, ptr %35, align 8, !tbaa !11
  %651 = load ptr, ptr %20, align 8, !tbaa !5
  %652 = load i64, ptr %34, align 8, !tbaa !11
  %653 = getelementptr inbounds i64, ptr %651, i64 %652
  %654 = load i64, ptr %653, align 8, !tbaa !11
  %655 = load ptr, ptr %33, align 8, !tbaa !5
  %656 = load i64, ptr %12, align 8, !tbaa !11
  %657 = getelementptr inbounds %struct.nrinfodef, ptr %655, i64 %656
  %658 = getelementptr inbounds %struct.nrinfodef, ptr %657, i32 0, i32 0
  %659 = load i64, ptr %40, align 8, !tbaa !11
  %660 = getelementptr inbounds [2 x i64], ptr %658, i64 0, i64 %659
  %661 = load i64, ptr %660, align 8, !tbaa !11
  %662 = add nsw i64 %661, %654
  store i64 %662, ptr %660, align 8, !tbaa !11
  %663 = load ptr, ptr %29, align 8, !tbaa !5
  %664 = load i64, ptr %12, align 8, !tbaa !11
  %665 = getelementptr inbounds i64, ptr %663, i64 %664
  %666 = load i64, ptr %665, align 8, !tbaa !11
  %667 = icmp eq i64 %666, -1
  br i1 %667, label %677, label %668

668:                                              ; preds = %638
  %669 = load ptr, ptr %29, align 8, !tbaa !5
  %670 = load i64, ptr %12, align 8, !tbaa !11
  %671 = getelementptr inbounds i64, ptr %669, i64 %670
  %672 = load i64, ptr %671, align 8, !tbaa !11
  %673 = load i64, ptr %41, align 8, !tbaa !11
  %674 = add nsw i64 2, %673
  %675 = sub nsw i64 0, %674
  %676 = icmp eq i64 %672, %675
  br i1 %676, label %677, label %689

677:                                              ; preds = %668, %638
  %678 = load i64, ptr %41, align 8, !tbaa !11
  %679 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 %678
  %680 = load i64, ptr %12, align 8, !tbaa !11
  %681 = load i64, ptr %35, align 8, !tbaa !11
  %682 = load i64, ptr %35, align 8, !tbaa !11
  %683 = load ptr, ptr %20, align 8, !tbaa !5
  %684 = load i64, ptr %34, align 8, !tbaa !11
  %685 = getelementptr inbounds i64, ptr %683, i64 %684
  %686 = load i64, ptr %685, align 8, !tbaa !11
  %687 = sub nsw i64 %682, %686
  %688 = call i64 @libmetis__PQueueUpdate(ptr noundef %679, i64 noundef %680, i64 noundef %681, i64 noundef %687)
  br label %689

689:                                              ; preds = %677, %668
  br label %855

690:                                              ; preds = %628
  %691 = load ptr, ptr %22, align 8, !tbaa !5
  %692 = load i64, ptr %12, align 8, !tbaa !11
  %693 = getelementptr inbounds i64, ptr %691, i64 %692
  %694 = load i64, ptr %693, align 8, !tbaa !11
  %695 = load i64, ptr %41, align 8, !tbaa !11
  %696 = icmp eq i64 %694, %695
  br i1 %696, label %697, label %854

697:                                              ; preds = %690
  br label %698

698:                                              ; preds = %697
  %699 = load i64, ptr %12, align 8, !tbaa !11
  %700 = load ptr, ptr %25, align 8, !tbaa !5
  %701 = load i64, ptr %16, align 8, !tbaa !11
  %702 = getelementptr inbounds i64, ptr %700, i64 %701
  store i64 %699, ptr %702, align 8, !tbaa !11
  %703 = load i64, ptr %16, align 8, !tbaa !11
  %704 = add nsw i64 %703, 1
  store i64 %704, ptr %16, align 8, !tbaa !11
  %705 = load ptr, ptr %26, align 8, !tbaa !5
  %706 = load i64, ptr %12, align 8, !tbaa !11
  %707 = getelementptr inbounds i64, ptr %705, i64 %706
  store i64 %703, ptr %707, align 8, !tbaa !11
  br label %708

708:                                              ; preds = %698
  br label %709

709:                                              ; preds = %708
  %710 = load i64, ptr %12, align 8, !tbaa !11
  %711 = load ptr, ptr %28, align 8, !tbaa !5
  %712 = load i64, ptr %18, align 8, !tbaa !11
  %713 = add nsw i64 %712, 1
  store i64 %713, ptr %18, align 8, !tbaa !11
  %714 = getelementptr inbounds i64, ptr %711, i64 %712
  store i64 %710, ptr %714, align 8, !tbaa !11
  %715 = load ptr, ptr %22, align 8, !tbaa !5
  %716 = load i64, ptr %12, align 8, !tbaa !11
  %717 = getelementptr inbounds i64, ptr %715, i64 %716
  store i64 2, ptr %717, align 8, !tbaa !11
  %718 = load ptr, ptr %20, align 8, !tbaa !5
  %719 = load i64, ptr %12, align 8, !tbaa !11
  %720 = getelementptr inbounds i64, ptr %718, i64 %719
  %721 = load i64, ptr %720, align 8, !tbaa !11
  %722 = load ptr, ptr %23, align 8, !tbaa !5
  %723 = load i64, ptr %41, align 8, !tbaa !11
  %724 = getelementptr inbounds i64, ptr %722, i64 %723
  %725 = load i64, ptr %724, align 8, !tbaa !11
  %726 = sub nsw i64 %725, %721
  store i64 %726, ptr %724, align 8, !tbaa !11
  %727 = load ptr, ptr %33, align 8, !tbaa !5
  %728 = load i64, ptr %12, align 8, !tbaa !11
  %729 = getelementptr inbounds %struct.nrinfodef, ptr %727, i64 %728
  %730 = getelementptr inbounds %struct.nrinfodef, ptr %729, i32 0, i32 0
  %731 = getelementptr inbounds [2 x i64], ptr %730, i64 0, i64 0
  store ptr %731, ptr %24, align 8, !tbaa !5
  %732 = load ptr, ptr %24, align 8, !tbaa !5
  %733 = getelementptr inbounds i64, ptr %732, i64 1
  store i64 0, ptr %733, align 8, !tbaa !11
  %734 = load ptr, ptr %24, align 8, !tbaa !5
  %735 = getelementptr inbounds i64, ptr %734, i64 0
  store i64 0, ptr %735, align 8, !tbaa !11
  %736 = load ptr, ptr %19, align 8, !tbaa !5
  %737 = load i64, ptr %12, align 8, !tbaa !11
  %738 = getelementptr inbounds i64, ptr %736, i64 %737
  %739 = load i64, ptr %738, align 8, !tbaa !11
  store i64 %739, ptr %13, align 8, !tbaa !11
  br label %740

740:                                              ; preds = %824, %709
  %741 = load i64, ptr %13, align 8, !tbaa !11
  %742 = load ptr, ptr %19, align 8, !tbaa !5
  %743 = load i64, ptr %12, align 8, !tbaa !11
  %744 = add nsw i64 %743, 1
  %745 = getelementptr inbounds i64, ptr %742, i64 %744
  %746 = load i64, ptr %745, align 8, !tbaa !11
  %747 = icmp slt i64 %741, %746
  br i1 %747, label %748, label %827

748:                                              ; preds = %740
  %749 = load ptr, ptr %21, align 8, !tbaa !5
  %750 = load i64, ptr %13, align 8, !tbaa !11
  %751 = getelementptr inbounds i64, ptr %749, i64 %750
  %752 = load i64, ptr %751, align 8, !tbaa !11
  store i64 %752, ptr %14, align 8, !tbaa !11
  %753 = load ptr, ptr %22, align 8, !tbaa !5
  %754 = load i64, ptr %14, align 8, !tbaa !11
  %755 = getelementptr inbounds i64, ptr %753, i64 %754
  %756 = load i64, ptr %755, align 8, !tbaa !11
  %757 = icmp ne i64 %756, 2
  br i1 %757, label %758, label %771

758:                                              ; preds = %748
  %759 = load ptr, ptr %20, align 8, !tbaa !5
  %760 = load i64, ptr %14, align 8, !tbaa !11
  %761 = getelementptr inbounds i64, ptr %759, i64 %760
  %762 = load i64, ptr %761, align 8, !tbaa !11
  %763 = load ptr, ptr %24, align 8, !tbaa !5
  %764 = load ptr, ptr %22, align 8, !tbaa !5
  %765 = load i64, ptr %14, align 8, !tbaa !11
  %766 = getelementptr inbounds i64, ptr %764, i64 %765
  %767 = load i64, ptr %766, align 8, !tbaa !11
  %768 = getelementptr inbounds i64, ptr %763, i64 %767
  %769 = load i64, ptr %768, align 8, !tbaa !11
  %770 = add nsw i64 %769, %762
  store i64 %770, ptr %768, align 8, !tbaa !11
  br label %823

771:                                              ; preds = %748
  %772 = load ptr, ptr %20, align 8, !tbaa !5
  %773 = load i64, ptr %14, align 8, !tbaa !11
  %774 = getelementptr inbounds i64, ptr %772, i64 %773
  %775 = load i64, ptr %774, align 8, !tbaa !11
  %776 = load ptr, ptr %33, align 8, !tbaa !5
  %777 = load i64, ptr %14, align 8, !tbaa !11
  %778 = getelementptr inbounds %struct.nrinfodef, ptr %776, i64 %777
  %779 = getelementptr inbounds %struct.nrinfodef, ptr %778, i32 0, i32 0
  %780 = load i64, ptr %41, align 8, !tbaa !11
  %781 = getelementptr inbounds [2 x i64], ptr %779, i64 0, i64 %780
  %782 = load i64, ptr %781, align 8, !tbaa !11
  %783 = sub nsw i64 %775, %782
  store i64 %783, ptr %35, align 8, !tbaa !11
  %784 = load ptr, ptr %20, align 8, !tbaa !5
  %785 = load i64, ptr %12, align 8, !tbaa !11
  %786 = getelementptr inbounds i64, ptr %784, i64 %785
  %787 = load i64, ptr %786, align 8, !tbaa !11
  %788 = load ptr, ptr %33, align 8, !tbaa !5
  %789 = load i64, ptr %14, align 8, !tbaa !11
  %790 = getelementptr inbounds %struct.nrinfodef, ptr %788, i64 %789
  %791 = getelementptr inbounds %struct.nrinfodef, ptr %790, i32 0, i32 0
  %792 = load i64, ptr %41, align 8, !tbaa !11
  %793 = getelementptr inbounds [2 x i64], ptr %791, i64 0, i64 %792
  %794 = load i64, ptr %793, align 8, !tbaa !11
  %795 = sub nsw i64 %794, %787
  store i64 %795, ptr %793, align 8, !tbaa !11
  %796 = load ptr, ptr %29, align 8, !tbaa !5
  %797 = load i64, ptr %14, align 8, !tbaa !11
  %798 = getelementptr inbounds i64, ptr %796, i64 %797
  %799 = load i64, ptr %798, align 8, !tbaa !11
  %800 = icmp eq i64 %799, -1
  br i1 %800, label %810, label %801

801:                                              ; preds = %771
  %802 = load ptr, ptr %29, align 8, !tbaa !5
  %803 = load i64, ptr %14, align 8, !tbaa !11
  %804 = getelementptr inbounds i64, ptr %802, i64 %803
  %805 = load i64, ptr %804, align 8, !tbaa !11
  %806 = load i64, ptr %40, align 8, !tbaa !11
  %807 = add nsw i64 2, %806
  %808 = sub nsw i64 0, %807
  %809 = icmp eq i64 %805, %808
  br i1 %809, label %810, label %822

810:                                              ; preds = %801, %771
  %811 = load i64, ptr %40, align 8, !tbaa !11
  %812 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 %811
  %813 = load i64, ptr %14, align 8, !tbaa !11
  %814 = load i64, ptr %35, align 8, !tbaa !11
  %815 = load i64, ptr %35, align 8, !tbaa !11
  %816 = load ptr, ptr %20, align 8, !tbaa !5
  %817 = load i64, ptr %12, align 8, !tbaa !11
  %818 = getelementptr inbounds i64, ptr %816, i64 %817
  %819 = load i64, ptr %818, align 8, !tbaa !11
  %820 = add nsw i64 %815, %819
  %821 = call i64 @libmetis__PQueueUpdate(ptr noundef %812, i64 noundef %813, i64 noundef %814, i64 noundef %820)
  br label %822

822:                                              ; preds = %810, %801
  br label %823

823:                                              ; preds = %822, %758
  br label %824

824:                                              ; preds = %823
  %825 = load i64, ptr %13, align 8, !tbaa !11
  %826 = add nsw i64 %825, 1
  store i64 %826, ptr %13, align 8, !tbaa !11
  br label %740, !llvm.loop !33

827:                                              ; preds = %740
  %828 = load ptr, ptr %29, align 8, !tbaa !5
  %829 = load i64, ptr %12, align 8, !tbaa !11
  %830 = getelementptr inbounds i64, ptr %828, i64 %829
  %831 = load i64, ptr %830, align 8, !tbaa !11
  %832 = icmp eq i64 %831, -1
  br i1 %832, label %833, label %853

833:                                              ; preds = %827
  %834 = load i64, ptr %40, align 8, !tbaa !11
  %835 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 %834
  %836 = load i64, ptr %12, align 8, !tbaa !11
  %837 = load ptr, ptr %20, align 8, !tbaa !5
  %838 = load i64, ptr %12, align 8, !tbaa !11
  %839 = getelementptr inbounds i64, ptr %837, i64 %838
  %840 = load i64, ptr %839, align 8, !tbaa !11
  %841 = load ptr, ptr %24, align 8, !tbaa !5
  %842 = load i64, ptr %41, align 8, !tbaa !11
  %843 = getelementptr inbounds i64, ptr %841, i64 %842
  %844 = load i64, ptr %843, align 8, !tbaa !11
  %845 = sub nsw i64 %840, %844
  %846 = call i64 @libmetis__PQueueInsert(ptr noundef %835, i64 noundef %836, i64 noundef %845)
  %847 = load i64, ptr %40, align 8, !tbaa !11
  %848 = add nsw i64 2, %847
  %849 = sub nsw i64 0, %848
  %850 = load ptr, ptr %29, align 8, !tbaa !5
  %851 = load i64, ptr %12, align 8, !tbaa !11
  %852 = getelementptr inbounds i64, ptr %850, i64 %851
  store i64 %849, ptr %852, align 8, !tbaa !11
  br label %853

853:                                              ; preds = %833, %827
  br label %854

854:                                              ; preds = %853, %690
  br label %855

855:                                              ; preds = %854, %689
  br label %856

856:                                              ; preds = %855
  %857 = load i64, ptr %11, align 8, !tbaa !11
  %858 = add nsw i64 %857, 1
  store i64 %858, ptr %11, align 8, !tbaa !11
  br label %620, !llvm.loop !34

859:                                              ; preds = %620
  %860 = load i64, ptr %18, align 8, !tbaa !11
  %861 = load ptr, ptr %27, align 8, !tbaa !5
  %862 = load i64, ptr %17, align 8, !tbaa !11
  %863 = add nsw i64 %862, 1
  %864 = getelementptr inbounds i64, ptr %861, i64 %863
  store i64 %860, ptr %864, align 8, !tbaa !11
  %865 = load ptr, ptr %5, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.controldef, ptr %865, i32 0, i32 1
  %867 = load i64, ptr %866, align 8, !tbaa !24
  %868 = and i64 %867, 32
  %869 = icmp ne i64 %868, 0
  br i1 %869, label %870, label %901

870:                                              ; preds = %859
  %871 = load i64, ptr %34, align 8, !tbaa !11
  %872 = load i64, ptr %40, align 8, !tbaa !11
  %873 = load i64, ptr %40, align 8, !tbaa !11
  %874 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 %873
  %875 = load i64, ptr %874, align 8, !tbaa !11
  %876 = load i64, ptr %41, align 8, !tbaa !11
  %877 = getelementptr inbounds [2 x i64], ptr %47, i64 0, i64 %876
  %878 = load i64, ptr %877, align 8, !tbaa !11
  %879 = load ptr, ptr %20, align 8, !tbaa !5
  %880 = load i64, ptr %40, align 8, !tbaa !11
  %881 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 %880
  %882 = load i64, ptr %881, align 8, !tbaa !11
  %883 = getelementptr inbounds i64, ptr %879, i64 %882
  %884 = load i64, ptr %883, align 8, !tbaa !11
  %885 = load ptr, ptr %20, align 8, !tbaa !5
  %886 = load i64, ptr %41, align 8, !tbaa !11
  %887 = getelementptr inbounds [2 x i64], ptr %46, i64 0, i64 %886
  %888 = load i64, ptr %887, align 8, !tbaa !11
  %889 = getelementptr inbounds i64, ptr %885, i64 %888
  %890 = load i64, ptr %889, align 8, !tbaa !11
  %891 = load ptr, ptr %23, align 8, !tbaa !5
  %892 = getelementptr inbounds i64, ptr %891, i64 0
  %893 = load i64, ptr %892, align 8, !tbaa !11
  %894 = load ptr, ptr %23, align 8, !tbaa !5
  %895 = getelementptr inbounds i64, ptr %894, i64 1
  %896 = load i64, ptr %895, align 8, !tbaa !11
  %897 = load ptr, ptr %23, align 8, !tbaa !5
  %898 = getelementptr inbounds i64, ptr %897, i64 2
  %899 = load i64, ptr %898, align 8, !tbaa !11
  %900 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %871, i64 noundef %872, i64 noundef %875, i64 noundef %878, i64 noundef %884, i64 noundef %890, i64 noundef %893, i64 noundef %896, i64 noundef %899)
  br label %901

901:                                              ; preds = %870, %859
  br label %902

902:                                              ; preds = %901
  %903 = load i64, ptr %17, align 8, !tbaa !11
  %904 = add nsw i64 %903, 1
  store i64 %904, ptr %17, align 8, !tbaa !11
  br label %272, !llvm.loop !35

905:                                              ; preds = %549, %400, %365, %272
  %906 = load i64, ptr %17, align 8, !tbaa !11
  %907 = add nsw i64 %906, -1
  store i64 %907, ptr %17, align 8, !tbaa !11
  br label %908

908:                                              ; preds = %1133, %905
  %909 = load i64, ptr %17, align 8, !tbaa !11
  %910 = load i64, ptr %38, align 8, !tbaa !11
  %911 = icmp sgt i64 %909, %910
  br i1 %911, label %912, label %1136

912:                                              ; preds = %908
  %913 = load ptr, ptr %30, align 8, !tbaa !5
  %914 = load i64, ptr %17, align 8, !tbaa !11
  %915 = getelementptr inbounds i64, ptr %913, i64 %914
  %916 = load i64, ptr %915, align 8, !tbaa !11
  store i64 %916, ptr %34, align 8, !tbaa !11
  %917 = load ptr, ptr %22, align 8, !tbaa !5
  %918 = load i64, ptr %34, align 8, !tbaa !11
  %919 = getelementptr inbounds i64, ptr %917, i64 %918
  %920 = load i64, ptr %919, align 8, !tbaa !11
  store i64 %920, ptr %40, align 8, !tbaa !11
  %921 = load i64, ptr %40, align 8, !tbaa !11
  %922 = add nsw i64 %921, 1
  %923 = srem i64 %922, 2
  store i64 %923, ptr %41, align 8, !tbaa !11
  br label %924

924:                                              ; preds = %912
  %925 = load ptr, ptr %20, align 8, !tbaa !5
  %926 = load i64, ptr %34, align 8, !tbaa !11
  %927 = getelementptr inbounds i64, ptr %925, i64 %926
  %928 = load i64, ptr %927, align 8, !tbaa !11
  %929 = load ptr, ptr %23, align 8, !tbaa !5
  %930 = getelementptr inbounds i64, ptr %929, i64 2
  %931 = load i64, ptr %930, align 8, !tbaa !11
  %932 = add nsw i64 %931, %928
  store i64 %932, ptr %930, align 8, !tbaa !11
  %933 = load ptr, ptr %20, align 8, !tbaa !5
  %934 = load i64, ptr %34, align 8, !tbaa !11
  %935 = getelementptr inbounds i64, ptr %933, i64 %934
  %936 = load i64, ptr %935, align 8, !tbaa !11
  %937 = load ptr, ptr %23, align 8, !tbaa !5
  %938 = load i64, ptr %40, align 8, !tbaa !11
  %939 = getelementptr inbounds i64, ptr %937, i64 %938
  %940 = load i64, ptr %939, align 8, !tbaa !11
  %941 = sub nsw i64 %940, %936
  store i64 %941, ptr %939, align 8, !tbaa !11
  br label %942

942:                                              ; preds = %924
  br label %943

943:                                              ; preds = %942
  %944 = load ptr, ptr %22, align 8, !tbaa !5
  %945 = load i64, ptr %34, align 8, !tbaa !11
  %946 = getelementptr inbounds i64, ptr %944, i64 %945
  store i64 2, ptr %946, align 8, !tbaa !11
  br label %947

947:                                              ; preds = %943
  %948 = load i64, ptr %34, align 8, !tbaa !11
  %949 = load ptr, ptr %25, align 8, !tbaa !5
  %950 = load i64, ptr %16, align 8, !tbaa !11
  %951 = getelementptr inbounds i64, ptr %949, i64 %950
  store i64 %948, ptr %951, align 8, !tbaa !11
  %952 = load i64, ptr %16, align 8, !tbaa !11
  %953 = add nsw i64 %952, 1
  store i64 %953, ptr %16, align 8, !tbaa !11
  %954 = load ptr, ptr %26, align 8, !tbaa !5
  %955 = load i64, ptr %34, align 8, !tbaa !11
  %956 = getelementptr inbounds i64, ptr %954, i64 %955
  store i64 %952, ptr %956, align 8, !tbaa !11
  br label %957

957:                                              ; preds = %947
  br label %958

958:                                              ; preds = %957
  %959 = load ptr, ptr %33, align 8, !tbaa !5
  %960 = load i64, ptr %34, align 8, !tbaa !11
  %961 = getelementptr inbounds %struct.nrinfodef, ptr %959, i64 %960
  %962 = getelementptr inbounds %struct.nrinfodef, ptr %961, i32 0, i32 0
  %963 = getelementptr inbounds [2 x i64], ptr %962, i64 0, i64 0
  store ptr %963, ptr %24, align 8, !tbaa !5
  %964 = load ptr, ptr %24, align 8, !tbaa !5
  %965 = getelementptr inbounds i64, ptr %964, i64 1
  store i64 0, ptr %965, align 8, !tbaa !11
  %966 = load ptr, ptr %24, align 8, !tbaa !5
  %967 = getelementptr inbounds i64, ptr %966, i64 0
  store i64 0, ptr %967, align 8, !tbaa !11
  %968 = load ptr, ptr %19, align 8, !tbaa !5
  %969 = load i64, ptr %34, align 8, !tbaa !11
  %970 = getelementptr inbounds i64, ptr %968, i64 %969
  %971 = load i64, ptr %970, align 8, !tbaa !11
  store i64 %971, ptr %11, align 8, !tbaa !11
  br label %972

972:                                              ; preds = %1017, %958
  %973 = load i64, ptr %11, align 8, !tbaa !11
  %974 = load ptr, ptr %19, align 8, !tbaa !5
  %975 = load i64, ptr %34, align 8, !tbaa !11
  %976 = add nsw i64 %975, 1
  %977 = getelementptr inbounds i64, ptr %974, i64 %976
  %978 = load i64, ptr %977, align 8, !tbaa !11
  %979 = icmp slt i64 %973, %978
  br i1 %979, label %980, label %1020

980:                                              ; preds = %972
  %981 = load ptr, ptr %21, align 8, !tbaa !5
  %982 = load i64, ptr %11, align 8, !tbaa !11
  %983 = getelementptr inbounds i64, ptr %981, i64 %982
  %984 = load i64, ptr %983, align 8, !tbaa !11
  store i64 %984, ptr %12, align 8, !tbaa !11
  %985 = load ptr, ptr %22, align 8, !tbaa !5
  %986 = load i64, ptr %12, align 8, !tbaa !11
  %987 = getelementptr inbounds i64, ptr %985, i64 %986
  %988 = load i64, ptr %987, align 8, !tbaa !11
  %989 = icmp eq i64 %988, 2
  br i1 %989, label %990, label %1003

990:                                              ; preds = %980
  %991 = load ptr, ptr %20, align 8, !tbaa !5
  %992 = load i64, ptr %34, align 8, !tbaa !11
  %993 = getelementptr inbounds i64, ptr %991, i64 %992
  %994 = load i64, ptr %993, align 8, !tbaa !11
  %995 = load ptr, ptr %33, align 8, !tbaa !5
  %996 = load i64, ptr %12, align 8, !tbaa !11
  %997 = getelementptr inbounds %struct.nrinfodef, ptr %995, i64 %996
  %998 = getelementptr inbounds %struct.nrinfodef, ptr %997, i32 0, i32 0
  %999 = load i64, ptr %40, align 8, !tbaa !11
  %1000 = getelementptr inbounds [2 x i64], ptr %998, i64 0, i64 %999
  %1001 = load i64, ptr %1000, align 8, !tbaa !11
  %1002 = sub nsw i64 %1001, %994
  store i64 %1002, ptr %1000, align 8, !tbaa !11
  br label %1016

1003:                                             ; preds = %980
  %1004 = load ptr, ptr %20, align 8, !tbaa !5
  %1005 = load i64, ptr %12, align 8, !tbaa !11
  %1006 = getelementptr inbounds i64, ptr %1004, i64 %1005
  %1007 = load i64, ptr %1006, align 8, !tbaa !11
  %1008 = load ptr, ptr %24, align 8, !tbaa !5
  %1009 = load ptr, ptr %22, align 8, !tbaa !5
  %1010 = load i64, ptr %12, align 8, !tbaa !11
  %1011 = getelementptr inbounds i64, ptr %1009, i64 %1010
  %1012 = load i64, ptr %1011, align 8, !tbaa !11
  %1013 = getelementptr inbounds i64, ptr %1008, i64 %1012
  %1014 = load i64, ptr %1013, align 8, !tbaa !11
  %1015 = add nsw i64 %1014, %1007
  store i64 %1015, ptr %1013, align 8, !tbaa !11
  br label %1016

1016:                                             ; preds = %1003, %990
  br label %1017

1017:                                             ; preds = %1016
  %1018 = load i64, ptr %11, align 8, !tbaa !11
  %1019 = add nsw i64 %1018, 1
  store i64 %1019, ptr %11, align 8, !tbaa !11
  br label %972, !llvm.loop !36

1020:                                             ; preds = %972
  %1021 = load ptr, ptr %27, align 8, !tbaa !5
  %1022 = load i64, ptr %17, align 8, !tbaa !11
  %1023 = getelementptr inbounds i64, ptr %1021, i64 %1022
  %1024 = load i64, ptr %1023, align 8, !tbaa !11
  store i64 %1024, ptr %11, align 8, !tbaa !11
  br label %1025

1025:                                             ; preds = %1129, %1020
  %1026 = load i64, ptr %11, align 8, !tbaa !11
  %1027 = load ptr, ptr %27, align 8, !tbaa !5
  %1028 = load i64, ptr %17, align 8, !tbaa !11
  %1029 = add nsw i64 %1028, 1
  %1030 = getelementptr inbounds i64, ptr %1027, i64 %1029
  %1031 = load i64, ptr %1030, align 8, !tbaa !11
  %1032 = icmp slt i64 %1026, %1031
  br i1 %1032, label %1033, label %1132

1033:                                             ; preds = %1025
  %1034 = load ptr, ptr %28, align 8, !tbaa !5
  %1035 = load i64, ptr %11, align 8, !tbaa !11
  %1036 = getelementptr inbounds i64, ptr %1034, i64 %1035
  %1037 = load i64, ptr %1036, align 8, !tbaa !11
  store i64 %1037, ptr %12, align 8, !tbaa !11
  %1038 = load i64, ptr %41, align 8, !tbaa !11
  %1039 = load ptr, ptr %22, align 8, !tbaa !5
  %1040 = load i64, ptr %12, align 8, !tbaa !11
  %1041 = getelementptr inbounds i64, ptr %1039, i64 %1040
  store i64 %1038, ptr %1041, align 8, !tbaa !11
  br label %1042

1042:                                             ; preds = %1033
  %1043 = load ptr, ptr %20, align 8, !tbaa !5
  %1044 = load i64, ptr %12, align 8, !tbaa !11
  %1045 = getelementptr inbounds i64, ptr %1043, i64 %1044
  %1046 = load i64, ptr %1045, align 8, !tbaa !11
  %1047 = load ptr, ptr %23, align 8, !tbaa !5
  %1048 = load i64, ptr %41, align 8, !tbaa !11
  %1049 = getelementptr inbounds i64, ptr %1047, i64 %1048
  %1050 = load i64, ptr %1049, align 8, !tbaa !11
  %1051 = add nsw i64 %1050, %1046
  store i64 %1051, ptr %1049, align 8, !tbaa !11
  %1052 = load ptr, ptr %20, align 8, !tbaa !5
  %1053 = load i64, ptr %12, align 8, !tbaa !11
  %1054 = getelementptr inbounds i64, ptr %1052, i64 %1053
  %1055 = load i64, ptr %1054, align 8, !tbaa !11
  %1056 = load ptr, ptr %23, align 8, !tbaa !5
  %1057 = getelementptr inbounds i64, ptr %1056, i64 2
  %1058 = load i64, ptr %1057, align 8, !tbaa !11
  %1059 = sub nsw i64 %1058, %1055
  store i64 %1059, ptr %1057, align 8, !tbaa !11
  br label %1060

1060:                                             ; preds = %1042
  br label %1061

1061:                                             ; preds = %1060
  br label %1062

1062:                                             ; preds = %1061
  %1063 = load ptr, ptr %25, align 8, !tbaa !5
  %1064 = load i64, ptr %16, align 8, !tbaa !11
  %1065 = add nsw i64 %1064, -1
  store i64 %1065, ptr %16, align 8, !tbaa !11
  %1066 = getelementptr inbounds i64, ptr %1063, i64 %1065
  %1067 = load i64, ptr %1066, align 8, !tbaa !11
  %1068 = load ptr, ptr %25, align 8, !tbaa !5
  %1069 = load ptr, ptr %26, align 8, !tbaa !5
  %1070 = load i64, ptr %12, align 8, !tbaa !11
  %1071 = getelementptr inbounds i64, ptr %1069, i64 %1070
  %1072 = load i64, ptr %1071, align 8, !tbaa !11
  %1073 = getelementptr inbounds i64, ptr %1068, i64 %1072
  store i64 %1067, ptr %1073, align 8, !tbaa !11
  %1074 = load ptr, ptr %26, align 8, !tbaa !5
  %1075 = load i64, ptr %12, align 8, !tbaa !11
  %1076 = getelementptr inbounds i64, ptr %1074, i64 %1075
  %1077 = load i64, ptr %1076, align 8, !tbaa !11
  %1078 = load ptr, ptr %26, align 8, !tbaa !5
  %1079 = load ptr, ptr %25, align 8, !tbaa !5
  %1080 = load i64, ptr %16, align 8, !tbaa !11
  %1081 = getelementptr inbounds i64, ptr %1079, i64 %1080
  %1082 = load i64, ptr %1081, align 8, !tbaa !11
  %1083 = getelementptr inbounds i64, ptr %1078, i64 %1082
  store i64 %1077, ptr %1083, align 8, !tbaa !11
  %1084 = load ptr, ptr %26, align 8, !tbaa !5
  %1085 = load i64, ptr %12, align 8, !tbaa !11
  %1086 = getelementptr inbounds i64, ptr %1084, i64 %1085
  store i64 -1, ptr %1086, align 8, !tbaa !11
  br label %1087

1087:                                             ; preds = %1062
  br label %1088

1088:                                             ; preds = %1087
  %1089 = load ptr, ptr %19, align 8, !tbaa !5
  %1090 = load i64, ptr %12, align 8, !tbaa !11
  %1091 = getelementptr inbounds i64, ptr %1089, i64 %1090
  %1092 = load i64, ptr %1091, align 8, !tbaa !11
  store i64 %1092, ptr %13, align 8, !tbaa !11
  br label %1093

1093:                                             ; preds = %1125, %1088
  %1094 = load i64, ptr %13, align 8, !tbaa !11
  %1095 = load ptr, ptr %19, align 8, !tbaa !5
  %1096 = load i64, ptr %12, align 8, !tbaa !11
  %1097 = add nsw i64 %1096, 1
  %1098 = getelementptr inbounds i64, ptr %1095, i64 %1097
  %1099 = load i64, ptr %1098, align 8, !tbaa !11
  %1100 = icmp slt i64 %1094, %1099
  br i1 %1100, label %1101, label %1128

1101:                                             ; preds = %1093
  %1102 = load ptr, ptr %21, align 8, !tbaa !5
  %1103 = load i64, ptr %13, align 8, !tbaa !11
  %1104 = getelementptr inbounds i64, ptr %1102, i64 %1103
  %1105 = load i64, ptr %1104, align 8, !tbaa !11
  store i64 %1105, ptr %14, align 8, !tbaa !11
  %1106 = load ptr, ptr %22, align 8, !tbaa !5
  %1107 = load i64, ptr %14, align 8, !tbaa !11
  %1108 = getelementptr inbounds i64, ptr %1106, i64 %1107
  %1109 = load i64, ptr %1108, align 8, !tbaa !11
  %1110 = icmp eq i64 %1109, 2
  br i1 %1110, label %1111, label %1124

1111:                                             ; preds = %1101
  %1112 = load ptr, ptr %20, align 8, !tbaa !5
  %1113 = load i64, ptr %12, align 8, !tbaa !11
  %1114 = getelementptr inbounds i64, ptr %1112, i64 %1113
  %1115 = load i64, ptr %1114, align 8, !tbaa !11
  %1116 = load ptr, ptr %33, align 8, !tbaa !5
  %1117 = load i64, ptr %14, align 8, !tbaa !11
  %1118 = getelementptr inbounds %struct.nrinfodef, ptr %1116, i64 %1117
  %1119 = getelementptr inbounds %struct.nrinfodef, ptr %1118, i32 0, i32 0
  %1120 = load i64, ptr %41, align 8, !tbaa !11
  %1121 = getelementptr inbounds [2 x i64], ptr %1119, i64 0, i64 %1120
  %1122 = load i64, ptr %1121, align 8, !tbaa !11
  %1123 = add nsw i64 %1122, %1115
  store i64 %1123, ptr %1121, align 8, !tbaa !11
  br label %1124

1124:                                             ; preds = %1111, %1101
  br label %1125

1125:                                             ; preds = %1124
  %1126 = load i64, ptr %13, align 8, !tbaa !11
  %1127 = add nsw i64 %1126, 1
  store i64 %1127, ptr %13, align 8, !tbaa !11
  br label %1093, !llvm.loop !37

1128:                                             ; preds = %1093
  br label %1129

1129:                                             ; preds = %1128
  %1130 = load i64, ptr %11, align 8, !tbaa !11
  %1131 = add nsw i64 %1130, 1
  store i64 %1131, ptr %11, align 8, !tbaa !11
  br label %1025, !llvm.loop !38

1132:                                             ; preds = %1025
  br label %1133

1133:                                             ; preds = %1132
  %1134 = load i64, ptr %17, align 8, !tbaa !11
  %1135 = add nsw i64 %1134, -1
  store i64 %1135, ptr %17, align 8, !tbaa !11
  br label %908, !llvm.loop !39

1136:                                             ; preds = %908
  %1137 = load ptr, ptr %5, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.controldef, ptr %1137, i32 0, i32 1
  %1139 = load i64, ptr %1138, align 8, !tbaa !24
  %1140 = and i64 %1139, 8
  %1141 = icmp ne i64 %1140, 0
  br i1 %1141, label %1142, label %1153

1142:                                             ; preds = %1136
  %1143 = load i64, ptr %36, align 8, !tbaa !11
  %1144 = load i64, ptr %38, align 8, !tbaa !11
  %1145 = load ptr, ptr %23, align 8, !tbaa !5
  %1146 = getelementptr inbounds i64, ptr %1145, i64 0
  %1147 = load i64, ptr %1146, align 8, !tbaa !11
  %1148 = load ptr, ptr %23, align 8, !tbaa !5
  %1149 = getelementptr inbounds i64, ptr %1148, i64 1
  %1150 = load i64, ptr %1149, align 8, !tbaa !11
  %1151 = load i64, ptr %16, align 8, !tbaa !11
  %1152 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %1143, i64 noundef %1144, i64 noundef %1147, i64 noundef %1150, i64 noundef %1151)
  br label %1153

1153:                                             ; preds = %1142, %1136
  %1154 = load i64, ptr %36, align 8, !tbaa !11
  %1155 = load ptr, ptr %6, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.graphdef, ptr %1155, i32 0, i32 16
  store i64 %1154, ptr %1156, align 8, !tbaa !29
  %1157 = load i64, ptr %16, align 8, !tbaa !11
  %1158 = load ptr, ptr %6, align 8, !tbaa !5
  %1159 = getelementptr inbounds %struct.graphdef, ptr %1158, i32 0, i32 20
  store i64 %1157, ptr %1159, align 8, !tbaa !28
  %1160 = load i64, ptr %38, align 8, !tbaa !11
  %1161 = icmp eq i64 %1160, -1
  br i1 %1161, label %1166, label %1162

1162:                                             ; preds = %1153
  %1163 = load i64, ptr %36, align 8, !tbaa !11
  %1164 = load i64, ptr %37, align 8, !tbaa !11
  %1165 = icmp sge i64 %1163, %1164
  br i1 %1165, label %1166, label %1167

1166:                                             ; preds = %1162, %1153
  br label %1171

1167:                                             ; preds = %1162
  br label %1168

1168:                                             ; preds = %1167
  %1169 = load i64, ptr %39, align 8, !tbaa !11
  %1170 = add nsw i64 %1169, 1
  store i64 %1170, ptr %39, align 8, !tbaa !11
  br label %144, !llvm.loop !40

1171:                                             ; preds = %1166, %144
  %1172 = load ptr, ptr %5, align 8, !tbaa !5
  %1173 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1172, ptr noundef %1173)
  %1174 = load ptr, ptr %5, align 8, !tbaa !5
  %1175 = getelementptr inbounds [2 x %struct.PQueueType], ptr %32, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1174, ptr noundef %1175)
  %1176 = load ptr, ptr %5, align 8, !tbaa !5
  %1177 = load i64, ptr %15, align 8, !tbaa !11
  %1178 = add nsw i64 %1177, 1
  call void @libmetis__idxwspacefree(ptr noundef %1176, i64 noundef %1178)
  %1179 = load ptr, ptr %5, align 8, !tbaa !5
  %1180 = load i64, ptr %15, align 8, !tbaa !11
  call void @libmetis__idxwspacefree(ptr noundef %1179, i64 noundef %1180)
  %1181 = load ptr, ptr %5, align 8, !tbaa !5
  %1182 = load i64, ptr %15, align 8, !tbaa !11
  call void @libmetis__idxwspacefree(ptr noundef %1181, i64 noundef %1182)
  %1183 = load ptr, ptr %5, align 8, !tbaa !5
  %1184 = load i64, ptr %15, align 8, !tbaa !11
  call void @libmetis__idxwspacefree(ptr noundef %1183, i64 noundef %1184)
  %1185 = load ptr, ptr %5, align 8, !tbaa !5
  %1186 = load i64, ptr %15, align 8, !tbaa !11
  call void @libmetis__idxwspacefree(ptr noundef %1185, i64 noundef %1186)
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  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 176, 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
}

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @libmetis__ComputeMaxNodeGain(i64 noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

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

declare void @libmetis__PQueueReset(ptr noundef) #2

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

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

declare i64 @libmetis__PQueueSeeMax(ptr noundef) #2

declare i64 @libmetis__PQueueGetMax(ptr noundef) #2

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

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

declare void @libmetis__PQueueFree(ptr noundef, ptr noundef) #2

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

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

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

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

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


; 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.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%struct.nrinfodef = type { [2 x i64] }

@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeRefine(ptr noundef %0, ptr nocapture noundef %1, float noundef %2, i64 noundef %3) local_unnamed_addr #0 {
  %5 = alloca [2 x %struct.PQueueType], align 16
  %6 = alloca [2 x i64], align 16
  %7 = alloca [2 x i64], align 16
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  %8 = load i64, ptr %1, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %1, i64 40
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 24
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %1, i64 160
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %1, i64 152
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 128
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %1, i64 136
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = getelementptr inbounds i8, ptr %1, i64 200
  %24 = load ptr, ptr %23, align 8, !tbaa !19
  %25 = tail call i64 @libmetis__ComputeMaxNodeGain(i64 noundef %8, ptr noundef %10, ptr noundef %12, ptr noundef %14)
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %5, i64 noundef %8, i64 noundef %25) #5
  %26 = getelementptr inbounds i8, ptr %5, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %26, i64 noundef %8, i64 noundef %25) #5
  %27 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #5
  %28 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #5
  %29 = add nsw i64 %8, 1
  %30 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %29) #5
  %31 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #5
  %32 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #5
  %33 = getelementptr inbounds i8, ptr %0, i64 8
  %34 = load i64, ptr %33, align 8, !tbaa !20
  %35 = and i64 %34, 8
  %.not = icmp eq i64 %35, 0
  br i1 %.not, label %46, label %36

36:                                               ; preds = %4
  %37 = load i64, ptr %22, align 8, !tbaa !25
  %38 = getelementptr inbounds i8, ptr %22, i64 8
  %39 = load i64, ptr %38, align 8, !tbaa !25
  %40 = load i64, ptr %1, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %1, i64 144
  %42 = load i64, ptr %41, align 8, !tbaa !26
  %43 = getelementptr inbounds i8, ptr %1, i64 112
  %44 = load i64, ptr %43, align 8, !tbaa !27
  %45 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, i64 noundef %37, i64 noundef %39, i64 noundef %40, i64 noundef %42, i64 noundef %44) #5
  br label %46

46:                                               ; preds = %36, %4
  %47 = load i64, ptr %22, align 8, !tbaa !25
  %48 = getelementptr inbounds i8, ptr %22, i64 8
  %49 = load i64, ptr %48, align 8, !tbaa !25
  %50 = add nsw i64 %49, %47
  %51 = getelementptr inbounds i8, ptr %22, i64 16
  %52 = load i64, ptr %51, align 8, !tbaa !25
  %53 = add nsw i64 %50, %52
  %54 = sitofp i64 %53 to float
  %55 = fmul float %54, %2
  %56 = fmul float %55, 5.000000e-01
  %57 = fptosi float %56 to i32
  %58 = sext i32 %57 to i64
  %59 = icmp sgt i64 %3, 0
  br i1 %59, label %.lr.ph556, label %._crit_edge557

.lr.ph556:                                        ; preds = %46
  %60 = getelementptr inbounds i8, ptr %1, i64 112
  %61 = getelementptr inbounds i8, ptr %1, i64 144
  %62 = getelementptr inbounds i8, ptr %0, i64 80
  %63 = icmp sgt i64 %8, 0
  %64 = getelementptr inbounds i8, ptr %6, i64 8
  %65 = getelementptr inbounds i8, ptr %7, i64 8
  br label %66

66:                                               ; preds = %409, %.lr.ph556
  %.0426553 = phi i64 [ 0, %.lr.ph556 ], [ %411, %409 ]
  %67 = call ptr @libmetis__idxset(i64 noundef %8, i64 noundef -1, ptr noundef %27) #5
  call void @libmetis__PQueueReset(ptr noundef nonnull %5) #5
  call void @libmetis__PQueueReset(ptr noundef nonnull %26) #5
  %68 = load i64, ptr %60, align 8, !tbaa !27
  %69 = load i64, ptr %61, align 8, !tbaa !26
  call void @libmetis__RandomPermute(i64 noundef %69, ptr noundef %32, i64 noundef 1) #5
  %70 = icmp sgt i64 %69, 0
  br i1 %70, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %66, %.lr.ph
  %.0422487 = phi i64 [ %86, %.lr.ph ], [ 0, %66 ]
  %71 = getelementptr inbounds i64, ptr %32, i64 %.0422487
  %72 = load i64, ptr %71, align 8, !tbaa !25
  %73 = getelementptr inbounds i64, ptr %16, i64 %72
  %74 = load i64, ptr %73, align 8, !tbaa !25
  %75 = getelementptr inbounds i64, ptr %14, i64 %74
  %76 = load i64, ptr %75, align 8, !tbaa !25
  %77 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %74
  %78 = getelementptr inbounds i8, ptr %77, i64 8
  %79 = load i64, ptr %78, align 8, !tbaa !25
  %80 = sub nsw i64 %76, %79
  %81 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %5, i64 noundef %74, i64 noundef %80) #5
  %82 = load i64, ptr %75, align 8, !tbaa !25
  %83 = load i64, ptr %77, align 8, !tbaa !25
  %84 = sub nsw i64 %82, %83
  %85 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %26, i64 noundef %74, i64 noundef %84) #5
  %86 = add nuw nsw i64 %.0422487, 1
  %exitcond.not = icmp eq i64 %86, %69
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

._crit_edge:                                      ; preds = %.lr.ph, %66
  %87 = load i64, ptr %62, align 8, !tbaa !30
  %88 = and i64 %87, 1
  %.not458 = icmp eq i64 %88, 0
  br i1 %.not458, label %93, label %89

89:                                               ; preds = %._crit_edge
  %90 = mul nsw i64 %69, 5
  %91 = icmp sgt i64 %69, 79
  %92 = select i1 %91, i64 400, i64 %90
  br label %97

93:                                               ; preds = %._crit_edge
  %94 = shl nsw i64 %69, 1
  %95 = icmp sgt i64 %69, 149
  %96 = select i1 %95, i64 300, i64 %94
  br label %97

97:                                               ; preds = %93, %89
  %98 = phi i64 [ %92, %89 ], [ %96, %93 ]
  store i64 0, ptr %30, align 8, !tbaa !25
  br i1 %63, label %.lr.ph508, label %.loopexit476

.lr.ph508:                                        ; preds = %97
  %99 = load i64, ptr %22, align 8, !tbaa !25
  %100 = load i64, ptr %48, align 8, !tbaa !25
  %101 = sub nsw i64 %99, %100
  %102 = call i64 @llvm.abs.i64(i64 %101, i1 true)
  %103 = and i64 %.0426553, 1
  br label %104

104:                                              ; preds = %.lr.ph508, %311
  %.0506 = phi i64 [ %102, %.lr.ph508 ], [ %.1, %311 ]
  %.0427505 = phi i64 [ -1, %.lr.ph508 ], [ %.1428, %311 ]
  %.0429504 = phi i64 [ %68, %.lr.ph508 ], [ %.1430, %311 ]
  %.0433503 = phi i64 [ %69, %.lr.ph508 ], [ %.1434.lcssa, %311 ]
  %.0436502 = phi i64 [ 0, %.lr.ph508 ], [ %290, %311 ]
  %.0438501 = phi i64 [ 0, %.lr.ph508 ], [ %.1439.lcssa, %311 ]
  %105 = call i64 @libmetis__PQueueSeeMax(ptr noundef nonnull %5) #5
  store i64 %105, ptr %6, align 16, !tbaa !25
  %106 = call i64 @libmetis__PQueueSeeMax(ptr noundef nonnull %26) #5
  store i64 %106, ptr %64, align 8, !tbaa !25
  %107 = icmp ne i64 %105, -1
  %108 = icmp ne i64 %106, -1
  %or.cond = select i1 %107, i1 %108, i1 false
  br i1 %or.cond, label %109, label %132

109:                                              ; preds = %104
  %110 = getelementptr inbounds i64, ptr %14, i64 %105
  %111 = load i64, ptr %110, align 8, !tbaa !25
  %112 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %105, i32 0, i64 1
  %113 = load i64, ptr %112, align 8, !tbaa !25
  %114 = sub nsw i64 %111, %113
  store i64 %114, ptr %7, align 16, !tbaa !25
  %115 = getelementptr inbounds i64, ptr %14, i64 %106
  %116 = load i64, ptr %115, align 8, !tbaa !25
  %117 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %106
  %118 = load i64, ptr %117, align 8, !tbaa !25
  %119 = sub nsw i64 %116, %118
  store i64 %119, ptr %65, align 8, !tbaa !25
  %120 = icmp sgt i64 %114, %119
  %121 = icmp slt i64 %114, %119
  %spec.select = select i1 %121, i64 1, i64 %103
  %122 = select i1 %120, i64 0, i64 %spec.select
  %123 = getelementptr inbounds i64, ptr %22, i64 %122
  %124 = load i64, ptr %123, align 8, !tbaa !25
  %125 = getelementptr inbounds [2 x i64], ptr %6, i64 0, i64 %122
  %126 = load i64, ptr %125, align 8, !tbaa !25
  %127 = getelementptr inbounds i64, ptr %14, i64 %126
  %128 = load i64, ptr %127, align 8, !tbaa !25
  %129 = add nsw i64 %128, %124
  %130 = icmp sgt i64 %129, %58
  %131 = zext i1 %130 to i64
  %spec.select468 = xor i64 %122, %131
  br label %147

132:                                              ; preds = %104
  %133 = icmp eq i64 %105, -1
  %134 = icmp eq i64 %106, -1
  %or.cond5 = select i1 %133, i1 %134, i1 false
  br i1 %or.cond5, label %.loopexit476, label %135

135:                                              ; preds = %132
  br i1 %107, label %136, label %141

136:                                              ; preds = %135
  %137 = load i64, ptr %22, align 8, !tbaa !25
  %138 = getelementptr inbounds i64, ptr %14, i64 %105
  %139 = load i64, ptr %138, align 8, !tbaa !25
  %140 = add nsw i64 %139, %137
  %.not459 = icmp sgt i64 %140, %58
  br i1 %.not459, label %141, label %147

141:                                              ; preds = %136, %135
  br i1 %134, label %.loopexit476, label %142

142:                                              ; preds = %141
  %143 = load i64, ptr %48, align 8, !tbaa !25
  %144 = getelementptr inbounds i64, ptr %14, i64 %106
  %145 = load i64, ptr %144, align 8, !tbaa !25
  %146 = add nsw i64 %145, %143
  %.not461 = icmp sgt i64 %146, %58
  br i1 %.not461, label %.loopexit476, label %147

147:                                              ; preds = %109, %142, %136
  %.0425 = phi i64 [ %spec.select468, %109 ], [ 0, %136 ], [ 1, %142 ]
  %148 = xor i64 %.0425, 1
  %149 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %.0425
  %150 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %149) #5
  %151 = getelementptr inbounds i64, ptr %27, i64 %150
  %152 = load i64, ptr %151, align 8, !tbaa !25
  %153 = icmp eq i64 %152, -1
  br i1 %153, label %154, label %163

154:                                              ; preds = %147
  %155 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %148
  %156 = getelementptr inbounds i64, ptr %14, i64 %150
  %157 = load i64, ptr %156, align 8, !tbaa !25
  %158 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %150
  %159 = getelementptr inbounds [2 x i64], ptr %158, i64 0, i64 %.0425
  %160 = load i64, ptr %159, align 8, !tbaa !25
  %161 = sub nsw i64 %157, %160
  %162 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %155, i64 noundef %150, i64 noundef %161) #5
  br label %163

163:                                              ; preds = %154, %147
  %164 = getelementptr inbounds i64, ptr %14, i64 %150
  %165 = load i64, ptr %164, align 8, !tbaa !25
  %166 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %150
  %167 = getelementptr inbounds [2 x i64], ptr %166, i64 0, i64 %148
  %168 = load i64, ptr %167, align 8, !tbaa !25
  %.neg = sub i64 %168, %165
  %169 = load i64, ptr %51, align 8, !tbaa !25
  %170 = add i64 %.neg, %169
  store i64 %170, ptr %51, align 8, !tbaa !25
  %171 = getelementptr inbounds i64, ptr %22, i64 %.0425
  %172 = load i64, ptr %171, align 8, !tbaa !25
  %173 = load i64, ptr %164, align 8, !tbaa !25
  %174 = getelementptr inbounds i64, ptr %22, i64 %148
  %175 = load i64, ptr %174, align 8, !tbaa !25
  %176 = load i64, ptr %167, align 8, !tbaa !25
  %.neg462 = add i64 %173, %172
  %177 = sub i64 %.neg462, %175
  %178 = add i64 %177, %176
  %179 = call i64 @llvm.abs.i64(i64 %178, i1 true)
  %180 = icmp slt i64 %170, %.0429504
  br i1 %180, label %190, label %181

181:                                              ; preds = %163
  %182 = icmp eq i64 %170, %.0429504
  %183 = icmp slt i64 %179, %.0506
  %or.cond469 = select i1 %182, i1 %183, i1 false
  br i1 %or.cond469, label %190, label %184

184:                                              ; preds = %181
  %185 = sub nsw i64 %.0436502, %.0427505
  %186 = icmp sgt i64 %185, %98
  br i1 %186, label %187, label %190

187:                                              ; preds = %184
  %188 = add i64 %173, %170
  %189 = sub i64 %188, %176
  store i64 %189, ptr %51, align 8, !tbaa !25
  br label %.loopexit476

190:                                              ; preds = %163, %181, %184
  %.1430 = phi i64 [ %.0429504, %184 ], [ %.0429504, %181 ], [ %170, %163 ]
  %.1428 = phi i64 [ %.0427505, %184 ], [ %.0436502, %181 ], [ %.0436502, %163 ]
  %.1 = phi i64 [ %.0506, %184 ], [ %179, %181 ], [ %179, %163 ]
  %191 = add nsw i64 %.0433503, -1
  %192 = getelementptr inbounds i64, ptr %16, i64 %191
  %193 = load i64, ptr %192, align 8, !tbaa !25
  %194 = getelementptr inbounds i64, ptr %18, i64 %150
  %195 = load i64, ptr %194, align 8, !tbaa !25
  %196 = getelementptr inbounds i64, ptr %16, i64 %195
  store i64 %193, ptr %196, align 8, !tbaa !25
  %197 = load i64, ptr %194, align 8, !tbaa !25
  %198 = getelementptr inbounds i64, ptr %18, i64 %193
  store i64 %197, ptr %198, align 8, !tbaa !25
  store i64 -1, ptr %194, align 8, !tbaa !25
  %199 = load i64, ptr %164, align 8, !tbaa !25
  %200 = load i64, ptr %171, align 8, !tbaa !25
  %201 = add nsw i64 %200, %199
  store i64 %201, ptr %171, align 8, !tbaa !25
  %202 = getelementptr inbounds i64, ptr %20, i64 %150
  store i64 %.0425, ptr %202, align 8, !tbaa !25
  store i64 %.0436502, ptr %151, align 8, !tbaa !25
  %203 = getelementptr inbounds i64, ptr %28, i64 %.0436502
  store i64 %150, ptr %203, align 8, !tbaa !25
  %204 = getelementptr inbounds i64, ptr %10, i64 %150
  %205 = load i64, ptr %204, align 8, !tbaa !25
  %206 = getelementptr i8, ptr %204, i64 8
  %invariant.gep492 = getelementptr [2 x i64], ptr %24, i64 0, i64 %.0425
  %207 = load i64, ptr %206, align 8, !tbaa !25
  %208 = icmp slt i64 %205, %207
  br i1 %208, label %.lr.ph498, label %._crit_edge499

.lr.ph498:                                        ; preds = %190
  %invariant.gep = getelementptr [2 x i64], ptr %24, i64 0, i64 %148
  %209 = sub nuw nsw i64 -2, %.0425
  %.neg467 = add nuw nsw i64 %.0425, -3
  %210 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %148
  br label %211

211:                                              ; preds = %.lr.ph498, %286
  %.0423496 = phi i64 [ %205, %.lr.ph498 ], [ %287, %286 ]
  %.1434495 = phi i64 [ %191, %.lr.ph498 ], [ %.2435, %286 ]
  %.1439494 = phi i64 [ %.0438501, %.lr.ph498 ], [ %.2440, %286 ]
  %212 = getelementptr inbounds i64, ptr %12, i64 %.0423496
  %213 = load i64, ptr %212, align 8, !tbaa !25
  %214 = getelementptr inbounds i64, ptr %20, i64 %213
  %215 = load i64, ptr %214, align 8, !tbaa !25
  %216 = icmp eq i64 %215, 2
  br i1 %216, label %217, label %232

217:                                              ; preds = %211
  %218 = getelementptr inbounds i64, ptr %14, i64 %213
  %219 = load i64, ptr %218, align 8, !tbaa !25
  %gep493 = getelementptr %struct.nrinfodef, ptr %invariant.gep492, i64 %213
  %220 = load i64, ptr %gep493, align 8, !tbaa !25
  %221 = load i64, ptr %164, align 8, !tbaa !25
  %222 = add nsw i64 %221, %220
  store i64 %222, ptr %gep493, align 8, !tbaa !25
  %223 = getelementptr inbounds i64, ptr %27, i64 %213
  %224 = load i64, ptr %223, align 8, !tbaa !25
  %225 = icmp eq i64 %224, -1
  %226 = icmp eq i64 %224, %.neg467
  %or.cond470 = select i1 %225, i1 true, i1 %226
  br i1 %or.cond470, label %227, label %286

227:                                              ; preds = %217
  %228 = sub nsw i64 %219, %220
  %229 = load i64, ptr %164, align 8, !tbaa !25
  %230 = sub nsw i64 %228, %229
  %231 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %210, i64 noundef %213, i64 noundef %228, i64 noundef %230) #5
  br label %286

232:                                              ; preds = %211
  %233 = icmp eq i64 %215, %148
  br i1 %233, label %234, label %286

234:                                              ; preds = %232
  %235 = getelementptr inbounds i64, ptr %16, i64 %.1434495
  store i64 %213, ptr %235, align 8, !tbaa !25
  %236 = add nsw i64 %.1434495, 1
  %237 = getelementptr inbounds i64, ptr %18, i64 %213
  store i64 %.1434495, ptr %237, align 8, !tbaa !25
  %238 = add nsw i64 %.1439494, 1
  %239 = getelementptr inbounds i64, ptr %31, i64 %.1439494
  store i64 %213, ptr %239, align 8, !tbaa !25
  store i64 2, ptr %214, align 8, !tbaa !25
  %240 = getelementptr inbounds i64, ptr %14, i64 %213
  %241 = load i64, ptr %240, align 8, !tbaa !25
  %242 = load i64, ptr %174, align 8, !tbaa !25
  %243 = sub nsw i64 %242, %241
  store i64 %243, ptr %174, align 8, !tbaa !25
  %244 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %213
  %245 = getelementptr inbounds i64, ptr %10, i64 %213
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %244, i8 0, i64 16, i1 false)
  %246 = load i64, ptr %245, align 8, !tbaa !25
  %247 = getelementptr i8, ptr %245, i64 8
  %248 = load i64, ptr %247, align 8, !tbaa !25
  %249 = icmp slt i64 %246, %248
  br i1 %249, label %.lr.ph490, label %._crit_edge491

.lr.ph490:                                        ; preds = %234, %273
  %.0431488 = phi i64 [ %274, %273 ], [ %246, %234 ]
  %250 = getelementptr inbounds i64, ptr %12, i64 %.0431488
  %251 = load i64, ptr %250, align 8, !tbaa !25
  %252 = getelementptr inbounds i64, ptr %20, i64 %251
  %253 = load i64, ptr %252, align 8, !tbaa !25
  %.not466 = icmp eq i64 %253, 2
  %254 = getelementptr inbounds i64, ptr %14, i64 %251
  %255 = load i64, ptr %254, align 8, !tbaa !25
  br i1 %.not466, label %260, label %256

256:                                              ; preds = %.lr.ph490
  %257 = getelementptr inbounds i64, ptr %244, i64 %253
  %258 = load i64, ptr %257, align 8, !tbaa !25
  %259 = add nsw i64 %258, %255
  store i64 %259, ptr %257, align 8, !tbaa !25
  br label %273

260:                                              ; preds = %.lr.ph490
  %gep = getelementptr %struct.nrinfodef, ptr %invariant.gep, i64 %251
  %261 = load i64, ptr %gep, align 8, !tbaa !25
  %262 = load i64, ptr %240, align 8, !tbaa !25
  %263 = sub nsw i64 %261, %262
  store i64 %263, ptr %gep, align 8, !tbaa !25
  %264 = getelementptr inbounds i64, ptr %27, i64 %251
  %265 = load i64, ptr %264, align 8, !tbaa !25
  %266 = icmp eq i64 %265, -1
  %267 = icmp eq i64 %265, %209
  %or.cond472 = select i1 %266, i1 true, i1 %267
  br i1 %or.cond472, label %268, label %273

268:                                              ; preds = %260
  %269 = sub nsw i64 %255, %261
  %270 = load i64, ptr %240, align 8, !tbaa !25
  %271 = add nsw i64 %270, %269
  %272 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %149, i64 noundef %251, i64 noundef %269, i64 noundef %271) #5
  br label %273

273:                                              ; preds = %260, %256, %268
  %274 = add nsw i64 %.0431488, 1
  %275 = load i64, ptr %247, align 8, !tbaa !25
  %276 = icmp slt i64 %274, %275
  br i1 %276, label %.lr.ph490, label %._crit_edge491, !llvm.loop !31

._crit_edge491:                                   ; preds = %273, %234
  %277 = getelementptr inbounds i64, ptr %27, i64 %213
  %278 = load i64, ptr %277, align 8, !tbaa !25
  %279 = icmp eq i64 %278, -1
  br i1 %279, label %280, label %286

280:                                              ; preds = %._crit_edge491
  %281 = load i64, ptr %240, align 8, !tbaa !25
  %282 = getelementptr inbounds i64, ptr %244, i64 %148
  %283 = load i64, ptr %282, align 8, !tbaa !25
  %284 = sub nsw i64 %281, %283
  %285 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %149, i64 noundef %213, i64 noundef %284) #5
  store i64 %209, ptr %277, align 8, !tbaa !25
  br label %286

286:                                              ; preds = %217, %227, %._crit_edge491, %280, %232
  %.2440 = phi i64 [ %.1439494, %227 ], [ %238, %280 ], [ %238, %._crit_edge491 ], [ %.1439494, %232 ], [ %.1439494, %217 ]
  %.2435 = phi i64 [ %.1434495, %227 ], [ %236, %280 ], [ %236, %._crit_edge491 ], [ %.1434495, %232 ], [ %.1434495, %217 ]
  %287 = add nsw i64 %.0423496, 1
  %288 = load i64, ptr %206, align 8, !tbaa !25
  %289 = icmp slt i64 %287, %288
  br i1 %289, label %211, label %._crit_edge499, !llvm.loop !32

._crit_edge499:                                   ; preds = %286, %190
  %.1439.lcssa = phi i64 [ %.0438501, %190 ], [ %.2440, %286 ]
  %.1434.lcssa = phi i64 [ %191, %190 ], [ %.2435, %286 ]
  %290 = add nuw nsw i64 %.0436502, 1
  %291 = getelementptr inbounds i64, ptr %30, i64 %290
  store i64 %.1439.lcssa, ptr %291, align 8, !tbaa !25
  %292 = load i64, ptr %33, align 8, !tbaa !20
  %293 = and i64 %292, 32
  %.not465 = icmp eq i64 %293, 0
  br i1 %.not465, label %311, label %294

294:                                              ; preds = %._crit_edge499
  %295 = getelementptr inbounds [2 x i64], ptr %7, i64 0, i64 %.0425
  %296 = load i64, ptr %295, align 8, !tbaa !25
  %297 = getelementptr inbounds [2 x i64], ptr %7, i64 0, i64 %148
  %298 = load i64, ptr %297, align 8, !tbaa !25
  %299 = getelementptr inbounds [2 x i64], ptr %6, i64 0, i64 %.0425
  %300 = load i64, ptr %299, align 8, !tbaa !25
  %301 = getelementptr inbounds i64, ptr %14, i64 %300
  %302 = load i64, ptr %301, align 8, !tbaa !25
  %303 = getelementptr inbounds [2 x i64], ptr %6, i64 0, i64 %148
  %304 = load i64, ptr %303, align 8, !tbaa !25
  %305 = getelementptr inbounds i64, ptr %14, i64 %304
  %306 = load i64, ptr %305, align 8, !tbaa !25
  %307 = load i64, ptr %22, align 8, !tbaa !25
  %308 = load i64, ptr %48, align 8, !tbaa !25
  %309 = load i64, ptr %51, align 8, !tbaa !25
  %310 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %150, i64 noundef %.0425, i64 noundef %296, i64 noundef %298, i64 noundef %302, i64 noundef %306, i64 noundef %307, i64 noundef %308, i64 noundef %309) #5
  br label %311

311:                                              ; preds = %._crit_edge499, %294
  %exitcond566.not = icmp eq i64 %290, %8
  br i1 %exitcond566.not, label %.loopexit476, label %104, !llvm.loop !33

.loopexit476:                                     ; preds = %311, %132, %142, %141, %97, %187
  %.0436484 = phi i64 [ %.0436502, %187 ], [ 0, %97 ], [ %8, %311 ], [ %.0436502, %132 ], [ %.0436502, %142 ], [ %.0436502, %141 ]
  %.0433482 = phi i64 [ %.0433503, %187 ], [ %69, %97 ], [ %.1434.lcssa, %311 ], [ %.0433503, %132 ], [ %.0433503, %142 ], [ %.0433503, %141 ]
  %.0429480 = phi i64 [ %.0429504, %187 ], [ %68, %97 ], [ %.1430, %311 ], [ %.0429504, %132 ], [ %.0429504, %142 ], [ %.0429504, %141 ]
  %.0427478 = phi i64 [ %.0427505, %187 ], [ -1, %97 ], [ %.1428, %311 ], [ %.0427505, %132 ], [ %.0427505, %142 ], [ %.0427505, %141 ]
  %.1437545 = add nsw i64 %.0436484, -1
  %312 = icmp sgt i64 %.1437545, %.0427478
  br i1 %312, label %.lr.ph550, label %._crit_edge551

.loopexit:                                        ; preds = %._crit_edge539, %._crit_edge533
  %.4.lcssa = phi i64 [ %329, %._crit_edge533 ], [ %373, %._crit_edge539 ]
  %.1437 = add nsw i64 %.1437548, -1
  %313 = icmp sgt i64 %.1437, %.0427478
  br i1 %313, label %.lr.ph550, label %._crit_edge551, !llvm.loop !34

.lr.ph550:                                        ; preds = %.loopexit476, %.loopexit
  %.1437548 = phi i64 [ %.1437, %.loopexit ], [ %.1437545, %.loopexit476 ]
  %.3547 = phi i64 [ %.4.lcssa, %.loopexit ], [ %.0433482, %.loopexit476 ]
  %.1437.in546 = phi i64 [ %.1437548, %.loopexit ], [ %.0436484, %.loopexit476 ]
  %314 = getelementptr inbounds i64, ptr %28, i64 %.1437548
  %315 = load i64, ptr %314, align 8, !tbaa !25
  %316 = getelementptr inbounds i64, ptr %20, i64 %315
  %317 = load i64, ptr %316, align 8, !tbaa !25
  %318 = add nsw i64 %317, 1
  %319 = srem i64 %318, 2
  %320 = getelementptr inbounds i64, ptr %14, i64 %315
  %321 = load i64, ptr %320, align 8, !tbaa !25
  %322 = load i64, ptr %51, align 8, !tbaa !25
  %323 = add nsw i64 %322, %321
  store i64 %323, ptr %51, align 8, !tbaa !25
  %324 = load i64, ptr %320, align 8, !tbaa !25
  %325 = getelementptr inbounds i64, ptr %22, i64 %317
  %326 = load i64, ptr %325, align 8, !tbaa !25
  %327 = sub nsw i64 %326, %324
  store i64 %327, ptr %325, align 8, !tbaa !25
  store i64 2, ptr %316, align 8, !tbaa !25
  %328 = getelementptr inbounds i64, ptr %16, i64 %.3547
  store i64 %315, ptr %328, align 8, !tbaa !25
  %329 = add nsw i64 %.3547, 1
  %330 = getelementptr inbounds i64, ptr %18, i64 %315
  store i64 %.3547, ptr %330, align 8, !tbaa !25
  %331 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %315
  %332 = getelementptr inbounds i64, ptr %10, i64 %315
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %331, i8 0, i64 16, i1 false)
  %333 = load i64, ptr %332, align 8, !tbaa !25
  %334 = getelementptr i8, ptr %332, i64 8
  %invariant.gep528 = getelementptr [2 x i64], ptr %24, i64 0, i64 %317
  %335 = load i64, ptr %334, align 8, !tbaa !25
  %336 = icmp slt i64 %333, %335
  br i1 %336, label %.lr.ph532, label %._crit_edge533

.lr.ph532:                                        ; preds = %.lr.ph550, %352
  %.1424530 = phi i64 [ %353, %352 ], [ %333, %.lr.ph550 ]
  %337 = getelementptr inbounds i64, ptr %12, i64 %.1424530
  %338 = load i64, ptr %337, align 8, !tbaa !25
  %339 = getelementptr inbounds i64, ptr %20, i64 %338
  %340 = load i64, ptr %339, align 8, !tbaa !25
  %341 = icmp eq i64 %340, 2
  br i1 %341, label %342, label %346

342:                                              ; preds = %.lr.ph532
  %343 = load i64, ptr %320, align 8, !tbaa !25
  %gep529 = getelementptr %struct.nrinfodef, ptr %invariant.gep528, i64 %338
  %344 = load i64, ptr %gep529, align 8, !tbaa !25
  %345 = sub nsw i64 %344, %343
  store i64 %345, ptr %gep529, align 8, !tbaa !25
  br label %352

346:                                              ; preds = %.lr.ph532
  %347 = getelementptr inbounds i64, ptr %14, i64 %338
  %348 = load i64, ptr %347, align 8, !tbaa !25
  %349 = getelementptr inbounds i64, ptr %331, i64 %340
  %350 = load i64, ptr %349, align 8, !tbaa !25
  %351 = add nsw i64 %350, %348
  store i64 %351, ptr %349, align 8, !tbaa !25
  br label %352

352:                                              ; preds = %342, %346
  %353 = add nsw i64 %.1424530, 1
  %354 = load i64, ptr %334, align 8, !tbaa !25
  %355 = icmp slt i64 %353, %354
  br i1 %355, label %.lr.ph532, label %._crit_edge533, !llvm.loop !35

._crit_edge533:                                   ; preds = %352, %.lr.ph550
  %356 = getelementptr inbounds i64, ptr %30, i64 %.1437548
  %357 = load i64, ptr %356, align 8, !tbaa !25
  %358 = getelementptr inbounds i64, ptr %30, i64 %.1437.in546
  %359 = load i64, ptr %358, align 8, !tbaa !25
  %360 = icmp slt i64 %357, %359
  br i1 %360, label %.lr.ph543, label %.loopexit

.lr.ph543:                                        ; preds = %._crit_edge533
  %361 = getelementptr inbounds i64, ptr %22, i64 %319
  %invariant.gep534 = getelementptr [2 x i64], ptr %24, i64 0, i64 %319
  br label %362

362:                                              ; preds = %.lr.ph543, %._crit_edge539
  %.2541 = phi i64 [ %357, %.lr.ph543 ], [ %400, %._crit_edge539 ]
  %.4540 = phi i64 [ %329, %.lr.ph543 ], [ %373, %._crit_edge539 ]
  %363 = getelementptr inbounds i64, ptr %31, i64 %.2541
  %364 = load i64, ptr %363, align 8, !tbaa !25
  %365 = getelementptr inbounds i64, ptr %20, i64 %364
  store i64 %319, ptr %365, align 8, !tbaa !25
  %366 = getelementptr inbounds i64, ptr %14, i64 %364
  %367 = load i64, ptr %366, align 8, !tbaa !25
  %368 = load i64, ptr %361, align 8, !tbaa !25
  %369 = add nsw i64 %368, %367
  store i64 %369, ptr %361, align 8, !tbaa !25
  %370 = load i64, ptr %366, align 8, !tbaa !25
  %371 = load i64, ptr %51, align 8, !tbaa !25
  %372 = sub nsw i64 %371, %370
  store i64 %372, ptr %51, align 8, !tbaa !25
  %373 = add nsw i64 %.4540, -1
  %374 = getelementptr inbounds i64, ptr %16, i64 %373
  %375 = load i64, ptr %374, align 8, !tbaa !25
  %376 = getelementptr inbounds i64, ptr %18, i64 %364
  %377 = load i64, ptr %376, align 8, !tbaa !25
  %378 = getelementptr inbounds i64, ptr %16, i64 %377
  store i64 %375, ptr %378, align 8, !tbaa !25
  %379 = load i64, ptr %376, align 8, !tbaa !25
  %380 = getelementptr inbounds i64, ptr %18, i64 %375
  store i64 %379, ptr %380, align 8, !tbaa !25
  store i64 -1, ptr %376, align 8, !tbaa !25
  %381 = getelementptr inbounds i64, ptr %10, i64 %364
  %382 = load i64, ptr %381, align 8, !tbaa !25
  %383 = getelementptr i8, ptr %381, i64 8
  %384 = load i64, ptr %383, align 8, !tbaa !25
  %385 = icmp slt i64 %382, %384
  br i1 %385, label %.lr.ph538, label %._crit_edge539

.lr.ph538:                                        ; preds = %362, %396
  %386 = phi i64 [ %397, %396 ], [ %384, %362 ]
  %.1432536 = phi i64 [ %398, %396 ], [ %382, %362 ]
  %387 = getelementptr inbounds i64, ptr %12, i64 %.1432536
  %388 = load i64, ptr %387, align 8, !tbaa !25
  %389 = getelementptr inbounds i64, ptr %20, i64 %388
  %390 = load i64, ptr %389, align 8, !tbaa !25
  %391 = icmp eq i64 %390, 2
  br i1 %391, label %392, label %396

392:                                              ; preds = %.lr.ph538
  %393 = load i64, ptr %366, align 8, !tbaa !25
  %gep535 = getelementptr %struct.nrinfodef, ptr %invariant.gep534, i64 %388
  %394 = load i64, ptr %gep535, align 8, !tbaa !25
  %395 = add nsw i64 %394, %393
  store i64 %395, ptr %gep535, align 8, !tbaa !25
  %.pre = load i64, ptr %383, align 8, !tbaa !25
  br label %396

396:                                              ; preds = %.lr.ph538, %392
  %397 = phi i64 [ %386, %.lr.ph538 ], [ %.pre, %392 ]
  %398 = add nsw i64 %.1432536, 1
  %399 = icmp slt i64 %398, %397
  br i1 %399, label %.lr.ph538, label %._crit_edge539, !llvm.loop !36

._crit_edge539:                                   ; preds = %396, %362
  %400 = add nsw i64 %.2541, 1
  %401 = load i64, ptr %358, align 8, !tbaa !25
  %402 = icmp slt i64 %400, %401
  br i1 %402, label %362, label %.loopexit, !llvm.loop !37

._crit_edge551:                                   ; preds = %.loopexit, %.loopexit476
  %.3.lcssa = phi i64 [ %.0433482, %.loopexit476 ], [ %.4.lcssa, %.loopexit ]
  %403 = load i64, ptr %33, align 8, !tbaa !20
  %404 = and i64 %403, 8
  %.not463 = icmp eq i64 %404, 0
  br i1 %.not463, label %409, label %405

405:                                              ; preds = %._crit_edge551
  %406 = load i64, ptr %22, align 8, !tbaa !25
  %407 = load i64, ptr %48, align 8, !tbaa !25
  %408 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %.0429480, i64 noundef %.0427478, i64 noundef %406, i64 noundef %407, i64 noundef %.3.lcssa) #5
  br label %409

409:                                              ; preds = %405, %._crit_edge551
  store i64 %.0429480, ptr %60, align 8, !tbaa !27
  store i64 %.3.lcssa, ptr %61, align 8, !tbaa !26
  %410 = icmp eq i64 %.0427478, -1
  %.not464 = icmp sge i64 %.0429480, %68
  %or.cond473.not577 = select i1 %410, i1 true, i1 %.not464
  %411 = add nuw nsw i64 %.0426553, 1
  %exitcond567.not = icmp eq i64 %411, %3
  %or.cond575 = select i1 %or.cond473.not577, i1 true, i1 %exitcond567.not
  br i1 %or.cond575, label %._crit_edge557, label %66, !llvm.loop !38

._crit_edge557:                                   ; preds = %409, %46
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %5) #5
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %26) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %29) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %8) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %8) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %8) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %5) #5
  ret void
}

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @libmetis__ComputeMaxNodeGain(i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

declare void @libmetis__PQueueReset(ptr noundef) local_unnamed_addr #2

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

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

declare i64 @libmetis__PQueueSeeMax(ptr noundef) local_unnamed_addr #2

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #2

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

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

declare void @libmetis__PQueueFree(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"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 160}
!16 = !{!6, !10, i64 152}
!17 = !{!6, !10, i64 128}
!18 = !{!6, !10, i64 136}
!19 = !{!6, !10, i64 200}
!20 = !{!21, !7, i64 8}
!21 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !22, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, 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", !8, i64 0}
!23 = !{!"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}
!24 = !{!"double", !8, i64 0}
!25 = !{!7, !7, i64 0}
!26 = !{!6, !7, i64 144}
!27 = !{!6, !7, i64 112}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!21, !7, i64 80}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !29}
!33 = distinct !{!33, !29}
!34 = distinct !{!34, !29}
!35 = distinct !{!35, !29}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = distinct !{!38, !29}


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