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

; 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 }

@.str = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [8 x i8], align 1

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

108:                                              ; preds = %5
  %109 = load i64, ptr %17, align 8, !tbaa !9
  %110 = sitofp i64 %109 to double
  %111 = fmul double 1.000000e-02, %110
  br label %113

112:                                              ; preds = %5
  br label %113

113:                                              ; preds = %112, %108
  %114 = phi double [ %111, %108 ], [ 1.500000e+01, %112 ]
  %115 = fcmp oge double %114, 1.000000e+02
  br i1 %115, label %116, label %117

116:                                              ; preds = %113
  br label %129

117:                                              ; preds = %113
  %118 = load i64, ptr %17, align 8, !tbaa !9
  %119 = sitofp i64 %118 to double
  %120 = fmul double 1.000000e-02, %119
  %121 = fcmp oge double %120, 1.500000e+01
  br i1 %121, label %122, label %126

122:                                              ; preds = %117
  %123 = load i64, ptr %17, align 8, !tbaa !9
  %124 = sitofp i64 %123 to double
  %125 = fmul double 1.000000e-02, %124
  br label %127

126:                                              ; preds = %117
  br label %127

127:                                              ; preds = %126, %122
  %128 = phi double [ %125, %122 ], [ 1.500000e+01, %126 ]
  br label %129

129:                                              ; preds = %127, %116
  %130 = phi double [ 1.000000e+02, %116 ], [ %128, %127 ]
  %131 = fptosi double %130 to i64
  store i64 %131, ptr %25, align 8, !tbaa !9
  %132 = load i64, ptr %18, align 8, !tbaa !9
  %133 = load ptr, ptr %41, align 8, !tbaa !5
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds [16 x float], ptr %43, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %132, ptr noundef %133, ptr noundef %134, ptr noundef %135)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %136

136:                                              ; preds = %175, %129
  %137 = load i64, ptr %11, align 8, !tbaa !9
  %138 = load i64, ptr %18, align 8, !tbaa !9
  %139 = icmp slt i64 %137, %138
  br i1 %139, label %140, label %178

140:                                              ; preds = %136
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = getelementptr inbounds float, ptr %141, i64 0
  %143 = load float, ptr %142, align 4, !tbaa !25
  %144 = load ptr, ptr %41, align 8, !tbaa !5
  %145 = load i64, ptr %11, align 8, !tbaa !9
  %146 = getelementptr inbounds float, ptr %144, i64 %145
  %147 = load float, ptr %146, align 4, !tbaa !25
  %148 = fsub float %143, %147
  %149 = fpext float %148 to double
  %150 = call double @llvm.fabs.f64(double %149)
  %151 = fptrunc double %150 to float
  %152 = load i64, ptr %11, align 8, !tbaa !9
  %153 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 %152
  store float %151, ptr %153, align 4, !tbaa !25
  %154 = load i64, ptr %11, align 8, !tbaa !9
  %155 = getelementptr inbounds [16 x float], ptr %43, i64 0, i64 %154
  %156 = load float, ptr %155, align 4, !tbaa !25
  %157 = load ptr, ptr %9, align 8, !tbaa !5
  %158 = load i64, ptr %11, align 8, !tbaa !9
  %159 = getelementptr inbounds float, ptr %157, i64 %158
  %160 = load float, ptr %159, align 4, !tbaa !25
  %161 = fcmp oge float %156, %160
  br i1 %161, label %162, label %166

162:                                              ; preds = %140
  %163 = load i64, ptr %11, align 8, !tbaa !9
  %164 = getelementptr inbounds [16 x float], ptr %43, i64 0, i64 %163
  %165 = load float, ptr %164, align 4, !tbaa !25
  br label %171

166:                                              ; preds = %140
  %167 = load ptr, ptr %9, align 8, !tbaa !5
  %168 = load i64, ptr %11, align 8, !tbaa !9
  %169 = getelementptr inbounds float, ptr %167, i64 %168
  %170 = load float, ptr %169, align 4, !tbaa !25
  br label %171

171:                                              ; preds = %166, %162
  %172 = phi float [ %165, %162 ], [ %170, %166 ]
  %173 = load i64, ptr %11, align 8, !tbaa !9
  %174 = getelementptr inbounds [16 x float], ptr %54, i64 0, i64 %173
  store float %172, ptr %174, align 4, !tbaa !25
  br label %175

175:                                              ; preds = %171
  %176 = load i64, ptr %11, align 8, !tbaa !9
  %177 = add nsw i64 %176, 1
  store i64 %177, ptr %11, align 8, !tbaa !9
  br label %136, !llvm.loop !27

178:                                              ; preds = %136
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = load i64, ptr %18, align 8, !tbaa !9
  %181 = mul nsw i64 2, %180
  %182 = call ptr @libmetis__fwspacemalloc(ptr noundef %179, i64 noundef %181)
  store ptr %182, ptr %53, align 8, !tbaa !5
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = load i64, ptr %18, align 8, !tbaa !9
  %185 = mul nsw i64 2, %184
  %186 = call ptr @libmetis__fwspacemalloc(ptr noundef %183, i64 noundef %185)
  store ptr %186, ptr %52, align 8, !tbaa !5
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %187

187:                                              ; preds = %234, %178
  %188 = load i64, ptr %11, align 8, !tbaa !9
  %189 = icmp slt i64 %188, 2
  br i1 %189, label %190, label %237

190:                                              ; preds = %187
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %191

191:                                              ; preds = %230, %190
  %192 = load i64, ptr %13, align 8, !tbaa !9
  %193 = load i64, ptr %18, align 8, !tbaa !9
  %194 = icmp slt i64 %192, %193
  br i1 %194, label %195, label %233

195:                                              ; preds = %191
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = load i64, ptr %11, align 8, !tbaa !9
  %198 = getelementptr inbounds float, ptr %196, i64 %197
  %199 = load float, ptr %198, align 4, !tbaa !25
  %200 = load i64, ptr %13, align 8, !tbaa !9
  %201 = getelementptr inbounds [16 x float], ptr %54, i64 0, i64 %200
  %202 = load float, ptr %201, align 4, !tbaa !25
  %203 = fmul float %199, %202
  %204 = load ptr, ptr %52, align 8, !tbaa !5
  %205 = load i64, ptr %11, align 8, !tbaa !9
  %206 = load i64, ptr %18, align 8, !tbaa !9
  %207 = mul nsw i64 %205, %206
  %208 = load i64, ptr %13, align 8, !tbaa !9
  %209 = add nsw i64 %207, %208
  %210 = getelementptr inbounds float, ptr %204, i64 %209
  store float %203, ptr %210, align 4, !tbaa !25
  %211 = load ptr, ptr %8, align 8, !tbaa !5
  %212 = load i64, ptr %11, align 8, !tbaa !9
  %213 = getelementptr inbounds float, ptr %211, i64 %212
  %214 = load float, ptr %213, align 4, !tbaa !25
  %215 = fpext float %214 to double
  %216 = load i64, ptr %13, align 8, !tbaa !9
  %217 = getelementptr inbounds [16 x float], ptr %54, i64 0, i64 %216
  %218 = load float, ptr %217, align 4, !tbaa !25
  %219 = fpext float %218 to double
  %220 = fdiv double 1.000000e+00, %219
  %221 = fmul double %215, %220
  %222 = fptrunc double %221 to float
  %223 = load ptr, ptr %53, align 8, !tbaa !5
  %224 = load i64, ptr %11, align 8, !tbaa !9
  %225 = load i64, ptr %18, align 8, !tbaa !9
  %226 = mul nsw i64 %224, %225
  %227 = load i64, ptr %13, align 8, !tbaa !9
  %228 = add nsw i64 %226, %227
  %229 = getelementptr inbounds float, ptr %223, i64 %228
  store float %222, ptr %229, align 4, !tbaa !25
  br label %230

230:                                              ; preds = %195
  %231 = load i64, ptr %13, align 8, !tbaa !9
  %232 = add nsw i64 %231, 1
  store i64 %232, ptr %13, align 8, !tbaa !9
  br label %191, !llvm.loop !29

233:                                              ; preds = %191
  br label %234

234:                                              ; preds = %233
  %235 = load i64, ptr %11, align 8, !tbaa !9
  %236 = add nsw i64 %235, 1
  store i64 %236, ptr %11, align 8, !tbaa !9
  br label %187, !llvm.loop !30

237:                                              ; preds = %187
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %238

238:                                              ; preds = %253, %237
  %239 = load i64, ptr %11, align 8, !tbaa !9
  %240 = load i64, ptr %18, align 8, !tbaa !9
  %241 = icmp slt i64 %239, %240
  br i1 %241, label %242, label %256

242:                                              ; preds = %238
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = load i64, ptr %11, align 8, !tbaa !9
  %245 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %244
  %246 = getelementptr inbounds [2 x %struct.PQueueType], ptr %245, i64 0, i64 0
  %247 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %243, ptr noundef %246, i64 noundef %247, i64 noundef 501)
  %248 = load ptr, ptr %6, align 8, !tbaa !5
  %249 = load i64, ptr %11, align 8, !tbaa !9
  %250 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %249
  %251 = getelementptr inbounds [2 x %struct.PQueueType], ptr %250, i64 0, i64 1
  %252 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %248, ptr noundef %251, i64 noundef %252, i64 noundef 501)
  br label %253

253:                                              ; preds = %242
  %254 = load i64, ptr %11, align 8, !tbaa !9
  %255 = add nsw i64 %254, 1
  store i64 %255, ptr %11, align 8, !tbaa !9
  br label %238, !llvm.loop !31

256:                                              ; preds = %238
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %272, %256
  %258 = load i64, ptr %11, align 8, !tbaa !9
  %259 = load i64, ptr %17, align 8, !tbaa !9
  %260 = icmp slt i64 %258, %259
  br i1 %260, label %261, label %275

261:                                              ; preds = %257
  %262 = load i64, ptr %18, align 8, !tbaa !9
  %263 = load ptr, ptr %40, align 8, !tbaa !5
  %264 = load i64, ptr %11, align 8, !tbaa !9
  %265 = load i64, ptr %18, align 8, !tbaa !9
  %266 = mul nsw i64 %264, %265
  %267 = getelementptr inbounds float, ptr %263, i64 %266
  %268 = call i64 @gk_fargmax(i64 noundef %262, ptr noundef %267)
  %269 = load ptr, ptr %39, align 8, !tbaa !5
  %270 = load i64, ptr %11, align 8, !tbaa !9
  %271 = getelementptr inbounds i64, ptr %269, i64 %270
  store i64 %268, ptr %271, align 8, !tbaa !9
  br label %272

272:                                              ; preds = %261
  %273 = load i64, ptr %11, align 8, !tbaa !9
  %274 = add nsw i64 %273, 1
  store i64 %274, ptr %11, align 8, !tbaa !9
  br label %257, !llvm.loop !32

275:                                              ; preds = %257
  %276 = load ptr, ptr %6, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.controldef, ptr %276, i32 0, i32 1
  %278 = load i64, ptr %277, align 8, !tbaa !33
  %279 = and i64 %278, 8
  %280 = icmp ne i64 %279, 0
  br i1 %280, label %281, label %338

281:                                              ; preds = %275
  %282 = call i32 (ptr, ...) @mprintf(ptr noundef @.str)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %283

283:                                              ; preds = %301, %281
  %284 = load i64, ptr %15, align 8, !tbaa !9
  %285 = load i64, ptr %18, align 8, !tbaa !9
  %286 = icmp slt i64 %284, %285
  br i1 %286, label %287, label %304

287:                                              ; preds = %283
  %288 = load ptr, ptr %41, align 8, !tbaa !5
  %289 = load i64, ptr %15, align 8, !tbaa !9
  %290 = getelementptr inbounds float, ptr %288, i64 %289
  %291 = load float, ptr %290, align 4, !tbaa !25
  %292 = fpext float %291 to double
  %293 = load ptr, ptr %41, align 8, !tbaa !5
  %294 = load i64, ptr %18, align 8, !tbaa !9
  %295 = load i64, ptr %15, align 8, !tbaa !9
  %296 = add nsw i64 %294, %295
  %297 = getelementptr inbounds float, ptr %293, i64 %296
  %298 = load float, ptr %297, align 4, !tbaa !25
  %299 = fpext float %298 to double
  %300 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %292, double noundef %299)
  br label %301

301:                                              ; preds = %287
  %302 = load i64, ptr %15, align 8, !tbaa !9
  %303 = add nsw i64 %302, 1
  store i64 %303, ptr %15, align 8, !tbaa !9
  br label %283, !llvm.loop !37

304:                                              ; preds = %283
  %305 = load ptr, ptr %8, align 8, !tbaa !5
  %306 = getelementptr inbounds float, ptr %305, i64 0
  %307 = load float, ptr %306, align 4, !tbaa !25
  %308 = fpext float %307 to double
  %309 = load ptr, ptr %8, align 8, !tbaa !5
  %310 = getelementptr inbounds float, ptr %309, i64 1
  %311 = load float, ptr %310, align 4, !tbaa !25
  %312 = fpext float %311 to double
  %313 = load ptr, ptr %7, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.graphdef, ptr %313, i32 0, i32 0
  %315 = load i64, ptr %314, align 8, !tbaa !11
  %316 = load ptr, ptr %7, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.graphdef, ptr %316, i32 0, i32 20
  %318 = load i64, ptr %317, align 8, !tbaa !38
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.graphdef, ptr %319, i32 0, i32 16
  %321 = load i64, ptr %320, align 8, !tbaa !39
  %322 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, double noundef %308, double noundef %312, i64 noundef %315, i64 noundef %318, i64 noundef %321)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %323

323:                                              ; preds = %333, %304
  %324 = load i64, ptr %11, align 8, !tbaa !9
  %325 = load i64, ptr %18, align 8, !tbaa !9
  %326 = icmp slt i64 %324, %325
  br i1 %326, label %327, label %336

327:                                              ; preds = %323
  %328 = load i64, ptr %11, align 8, !tbaa !9
  %329 = getelementptr inbounds [16 x float], ptr %43, i64 0, i64 %328
  %330 = load float, ptr %329, align 4, !tbaa !25
  %331 = fpext float %330 to double
  %332 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, double noundef %331)
  br label %333

333:                                              ; preds = %327
  %334 = load i64, ptr %11, align 8, !tbaa !9
  %335 = add nsw i64 %334, 1
  store i64 %335, ptr %11, align 8, !tbaa !9
  br label %323, !llvm.loop !40

336:                                              ; preds = %323
  %337 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4)
  br label %338

338:                                              ; preds = %336, %275
  %339 = load i64, ptr %17, align 8, !tbaa !9
  %340 = load ptr, ptr %36, align 8, !tbaa !5
  %341 = call ptr @libmetis__idxset(i64 noundef %339, i64 noundef -1, ptr noundef %340)
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %342

342:                                              ; preds = %1250, %338
  %343 = load i64, ptr %23, align 8, !tbaa !9
  %344 = load i64, ptr %10, align 8, !tbaa !9
  %345 = icmp slt i64 %343, %344
  br i1 %345, label %346, label %1253

346:                                              ; preds = %342
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %347

347:                                              ; preds = %358, %346
  %348 = load i64, ptr %11, align 8, !tbaa !9
  %349 = load i64, ptr %18, align 8, !tbaa !9
  %350 = icmp slt i64 %348, %349
  br i1 %350, label %351, label %361

351:                                              ; preds = %347
  %352 = load i64, ptr %11, align 8, !tbaa !9
  %353 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %352
  %354 = getelementptr inbounds [2 x %struct.PQueueType], ptr %353, i64 0, i64 0
  call void @libmetis__PQueueReset(ptr noundef %354)
  %355 = load i64, ptr %11, align 8, !tbaa !9
  %356 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %355
  %357 = getelementptr inbounds [2 x %struct.PQueueType], ptr %356, i64 0, i64 1
  call void @libmetis__PQueueReset(ptr noundef %357)
  br label %358

358:                                              ; preds = %351
  %359 = load i64, ptr %11, align 8, !tbaa !9
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %11, align 8, !tbaa !9
  br label %347, !llvm.loop !41

361:                                              ; preds = %347
  store i64 -1, ptr %51, align 8, !tbaa !9
  %362 = load ptr, ptr %7, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.graphdef, ptr %362, i32 0, i32 16
  %364 = load i64, ptr %363, align 8, !tbaa !39
  store i64 %364, ptr %49, align 8, !tbaa !9
  store i64 %364, ptr %48, align 8, !tbaa !9
  store i64 %364, ptr %50, align 8, !tbaa !9
  %365 = load i64, ptr %18, align 8, !tbaa !9
  %366 = load ptr, ptr %41, align 8, !tbaa !5
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = getelementptr inbounds [16 x float], ptr %44, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %365, ptr noundef %366, ptr noundef %367, ptr noundef %368)
  %369 = load ptr, ptr %7, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.graphdef, ptr %369, i32 0, i32 20
  %371 = load i64, ptr %370, align 8, !tbaa !38
  store i64 %371, ptr %19, align 8, !tbaa !9
  %372 = load i64, ptr %19, align 8, !tbaa !9
  %373 = load ptr, ptr %38, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %372, ptr noundef %373, i64 noundef 1)
  store i64 0, ptr %12, align 8, !tbaa !9
  br label %374

374:                                              ; preds = %407, %361
  %375 = load i64, ptr %12, align 8, !tbaa !9
  %376 = load i64, ptr %19, align 8, !tbaa !9
  %377 = icmp slt i64 %375, %376
  br i1 %377, label %378, label %410

378:                                              ; preds = %374
  %379 = load ptr, ptr %35, align 8, !tbaa !5
  %380 = load ptr, ptr %38, align 8, !tbaa !5
  %381 = load i64, ptr %12, align 8, !tbaa !9
  %382 = getelementptr inbounds i64, ptr %380, i64 %381
  %383 = load i64, ptr %382, align 8, !tbaa !9
  %384 = getelementptr inbounds i64, ptr %379, i64 %383
  %385 = load i64, ptr %384, align 8, !tbaa !9
  store i64 %385, ptr %11, align 8, !tbaa !9
  %386 = load ptr, ptr %39, align 8, !tbaa !5
  %387 = load i64, ptr %11, align 8, !tbaa !9
  %388 = getelementptr inbounds i64, ptr %386, i64 %387
  %389 = load i64, ptr %388, align 8, !tbaa !9
  %390 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %389
  %391 = load ptr, ptr %31, align 8, !tbaa !5
  %392 = load i64, ptr %11, align 8, !tbaa !9
  %393 = getelementptr inbounds i64, ptr %391, i64 %392
  %394 = load i64, ptr %393, align 8, !tbaa !9
  %395 = getelementptr inbounds [2 x %struct.PQueueType], ptr %390, i64 0, i64 %394
  %396 = load i64, ptr %11, align 8, !tbaa !9
  %397 = load ptr, ptr %33, align 8, !tbaa !5
  %398 = load i64, ptr %11, align 8, !tbaa !9
  %399 = getelementptr inbounds i64, ptr %397, i64 %398
  %400 = load i64, ptr %399, align 8, !tbaa !9
  %401 = load ptr, ptr %32, align 8, !tbaa !5
  %402 = load i64, ptr %11, align 8, !tbaa !9
  %403 = getelementptr inbounds i64, ptr %401, i64 %402
  %404 = load i64, ptr %403, align 8, !tbaa !9
  %405 = sub nsw i64 %400, %404
  %406 = call i64 @libmetis__PQueueInsert(ptr noundef %395, i64 noundef %396, i64 noundef %405)
  br label %407

407:                                              ; preds = %378
  %408 = load i64, ptr %12, align 8, !tbaa !9
  %409 = add nsw i64 %408, 1
  store i64 %409, ptr %12, align 8, !tbaa !9
  br label %374, !llvm.loop !42

410:                                              ; preds = %374
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %411

411:                                              ; preds = %899, %410
  %412 = load i64, ptr %20, align 8, !tbaa !9
  %413 = load i64, ptr %17, align 8, !tbaa !9
  %414 = icmp slt i64 %412, %413
  br i1 %414, label %415, label %902

415:                                              ; preds = %411
  %416 = load i64, ptr %18, align 8, !tbaa !9
  %417 = load ptr, ptr %41, align 8, !tbaa !5
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  %419 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 0
  %420 = load ptr, ptr %52, align 8, !tbaa !5
  call void @libmetis__SelectQueue2(i64 noundef %416, ptr noundef %417, ptr noundef %418, ptr noundef %21, ptr noundef %27, ptr noundef %419, ptr noundef %420)
  %421 = load i64, ptr %21, align 8, !tbaa !9
  %422 = add nsw i64 %421, 1
  %423 = srem i64 %422, 2
  store i64 %423, ptr %22, align 8, !tbaa !9
  %424 = load i64, ptr %21, align 8, !tbaa !9
  %425 = icmp eq i64 %424, -1
  br i1 %425, label %433, label %426

426:                                              ; preds = %415
  %427 = load i64, ptr %27, align 8, !tbaa !9
  %428 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %427
  %429 = load i64, ptr %21, align 8, !tbaa !9
  %430 = getelementptr inbounds [2 x %struct.PQueueType], ptr %428, i64 0, i64 %429
  %431 = call i64 @libmetis__PQueueGetMax(ptr noundef %430)
  store i64 %431, ptr %46, align 8, !tbaa !9
  %432 = icmp eq i64 %431, -1
  br i1 %432, label %433, label %434

433:                                              ; preds = %426, %415
  br label %902

434:                                              ; preds = %426
  %435 = load ptr, ptr %33, align 8, !tbaa !5
  %436 = load i64, ptr %46, align 8, !tbaa !9
  %437 = getelementptr inbounds i64, ptr %435, i64 %436
  %438 = load i64, ptr %437, align 8, !tbaa !9
  %439 = load ptr, ptr %32, align 8, !tbaa !5
  %440 = load i64, ptr %46, align 8, !tbaa !9
  %441 = getelementptr inbounds i64, ptr %439, i64 %440
  %442 = load i64, ptr %441, align 8, !tbaa !9
  %443 = sub nsw i64 %438, %442
  %444 = load i64, ptr %50, align 8, !tbaa !9
  %445 = sub nsw i64 %444, %443
  store i64 %445, ptr %50, align 8, !tbaa !9
  %446 = load i64, ptr %18, align 8, !tbaa !9
  %447 = load ptr, ptr %40, align 8, !tbaa !5
  %448 = load i64, ptr %46, align 8, !tbaa !9
  %449 = load i64, ptr %18, align 8, !tbaa !9
  %450 = mul nsw i64 %448, %449
  %451 = getelementptr inbounds float, ptr %447, i64 %450
  %452 = load ptr, ptr %41, align 8, !tbaa !5
  %453 = load i64, ptr %22, align 8, !tbaa !9
  %454 = load i64, ptr %18, align 8, !tbaa !9
  %455 = mul nsw i64 %453, %454
  %456 = getelementptr inbounds float, ptr %452, i64 %455
  %457 = call ptr @gk_faxpy(i64 noundef %446, float noundef 1.000000e+00, ptr noundef %451, i64 noundef 1, ptr noundef %456, i64 noundef 1)
  %458 = load i64, ptr %18, align 8, !tbaa !9
  %459 = load ptr, ptr %40, align 8, !tbaa !5
  %460 = load i64, ptr %46, align 8, !tbaa !9
  %461 = load i64, ptr %18, align 8, !tbaa !9
  %462 = mul nsw i64 %460, %461
  %463 = getelementptr inbounds float, ptr %459, i64 %462
  %464 = load ptr, ptr %41, align 8, !tbaa !5
  %465 = load i64, ptr %21, align 8, !tbaa !9
  %466 = load i64, ptr %18, align 8, !tbaa !9
  %467 = mul nsw i64 %465, %466
  %468 = getelementptr inbounds float, ptr %464, i64 %467
  %469 = call ptr @gk_faxpy(i64 noundef %458, float noundef -1.000000e+00, ptr noundef %463, i64 noundef 1, ptr noundef %468, i64 noundef 1)
  %470 = load i64, ptr %18, align 8, !tbaa !9
  %471 = load ptr, ptr %41, align 8, !tbaa !5
  %472 = load ptr, ptr %8, align 8, !tbaa !5
  %473 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %470, ptr noundef %471, ptr noundef %472, ptr noundef %473)
  %474 = load i64, ptr %50, align 8, !tbaa !9
  %475 = load i64, ptr %48, align 8, !tbaa !9
  %476 = icmp slt i64 %474, %475
  br i1 %476, label %477, label %483

477:                                              ; preds = %434
  %478 = load i64, ptr %18, align 8, !tbaa !9
  %479 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 0
  %480 = getelementptr inbounds [16 x float], ptr %54, i64 0, i64 0
  %481 = call i64 @libmetis__AreAllBelow(i64 noundef %478, ptr noundef %479, ptr noundef %480)
  %482 = icmp ne i64 %481, 0
  br i1 %482, label %494, label %483

483:                                              ; preds = %477, %434
  %484 = load i64, ptr %50, align 8, !tbaa !9
  %485 = load i64, ptr %48, align 8, !tbaa !9
  %486 = icmp eq i64 %484, %485
  br i1 %486, label %487, label %511

487:                                              ; preds = %483
  %488 = load i64, ptr %18, align 8, !tbaa !9
  %489 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 0
  %490 = getelementptr inbounds [16 x float], ptr %44, i64 0, i64 0
  %491 = getelementptr inbounds [16 x float], ptr %54, i64 0, i64 0
  %492 = call i64 @libmetis__IsBetter2wayBalance(i64 noundef %488, ptr noundef %489, ptr noundef %490, ptr noundef %491)
  %493 = icmp ne i64 %492, 0
  br i1 %493, label %494, label %511

494:                                              ; preds = %487, %477
  %495 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %495, ptr %48, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %496

496:                                              ; preds = %506, %494
  %497 = load i64, ptr %11, align 8, !tbaa !9
  %498 = load i64, ptr %18, align 8, !tbaa !9
  %499 = icmp slt i64 %497, %498
  br i1 %499, label %500, label %509

500:                                              ; preds = %496
  %501 = load i64, ptr %11, align 8, !tbaa !9
  %502 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 %501
  %503 = load float, ptr %502, align 4, !tbaa !25
  %504 = load i64, ptr %11, align 8, !tbaa !9
  %505 = getelementptr inbounds [16 x float], ptr %44, i64 0, i64 %504
  store float %503, ptr %505, align 4, !tbaa !25
  br label %506

506:                                              ; preds = %500
  %507 = load i64, ptr %11, align 8, !tbaa !9
  %508 = add nsw i64 %507, 1
  store i64 %508, ptr %11, align 8, !tbaa !9
  br label %496, !llvm.loop !43

509:                                              ; preds = %496
  %510 = load i64, ptr %20, align 8, !tbaa !9
  store i64 %510, ptr %51, align 8, !tbaa !9
  br label %554

511:                                              ; preds = %487, %483
  %512 = load i64, ptr %20, align 8, !tbaa !9
  %513 = load i64, ptr %51, align 8, !tbaa !9
  %514 = sub nsw i64 %512, %513
  %515 = load i64, ptr %25, align 8, !tbaa !9
  %516 = icmp sgt i64 %514, %515
  br i1 %516, label %517, label %553

517:                                              ; preds = %511
  %518 = load ptr, ptr %33, align 8, !tbaa !5
  %519 = load i64, ptr %46, align 8, !tbaa !9
  %520 = getelementptr inbounds i64, ptr %518, i64 %519
  %521 = load i64, ptr %520, align 8, !tbaa !9
  %522 = load ptr, ptr %32, align 8, !tbaa !5
  %523 = load i64, ptr %46, align 8, !tbaa !9
  %524 = getelementptr inbounds i64, ptr %522, i64 %523
  %525 = load i64, ptr %524, align 8, !tbaa !9
  %526 = sub nsw i64 %521, %525
  %527 = load i64, ptr %50, align 8, !tbaa !9
  %528 = add nsw i64 %527, %526
  store i64 %528, ptr %50, align 8, !tbaa !9
  %529 = load i64, ptr %18, align 8, !tbaa !9
  %530 = load ptr, ptr %40, align 8, !tbaa !5
  %531 = load i64, ptr %46, align 8, !tbaa !9
  %532 = load i64, ptr %18, align 8, !tbaa !9
  %533 = mul nsw i64 %531, %532
  %534 = getelementptr inbounds float, ptr %530, i64 %533
  %535 = load ptr, ptr %41, align 8, !tbaa !5
  %536 = load i64, ptr %21, align 8, !tbaa !9
  %537 = load i64, ptr %18, align 8, !tbaa !9
  %538 = mul nsw i64 %536, %537
  %539 = getelementptr inbounds float, ptr %535, i64 %538
  %540 = call ptr @gk_faxpy(i64 noundef %529, float noundef 1.000000e+00, ptr noundef %534, i64 noundef 1, ptr noundef %539, i64 noundef 1)
  %541 = load i64, ptr %18, align 8, !tbaa !9
  %542 = load ptr, ptr %40, align 8, !tbaa !5
  %543 = load i64, ptr %46, align 8, !tbaa !9
  %544 = load i64, ptr %18, align 8, !tbaa !9
  %545 = mul nsw i64 %543, %544
  %546 = getelementptr inbounds float, ptr %542, i64 %545
  %547 = load ptr, ptr %41, align 8, !tbaa !5
  %548 = load i64, ptr %22, align 8, !tbaa !9
  %549 = load i64, ptr %18, align 8, !tbaa !9
  %550 = mul nsw i64 %548, %549
  %551 = getelementptr inbounds float, ptr %547, i64 %550
  %552 = call ptr @gk_faxpy(i64 noundef %541, float noundef -1.000000e+00, ptr noundef %546, i64 noundef 1, ptr noundef %551, i64 noundef 1)
  br label %902

553:                                              ; preds = %511
  br label %554

554:                                              ; preds = %553, %509
  %555 = load i64, ptr %22, align 8, !tbaa !9
  %556 = load ptr, ptr %31, align 8, !tbaa !5
  %557 = load i64, ptr %46, align 8, !tbaa !9
  %558 = getelementptr inbounds i64, ptr %556, i64 %557
  store i64 %555, ptr %558, align 8, !tbaa !9
  %559 = load i64, ptr %20, align 8, !tbaa !9
  %560 = load ptr, ptr %36, align 8, !tbaa !5
  %561 = load i64, ptr %46, align 8, !tbaa !9
  %562 = getelementptr inbounds i64, ptr %560, i64 %561
  store i64 %559, ptr %562, align 8, !tbaa !9
  %563 = load i64, ptr %46, align 8, !tbaa !9
  %564 = load ptr, ptr %37, align 8, !tbaa !5
  %565 = load i64, ptr %20, align 8, !tbaa !9
  %566 = getelementptr inbounds i64, ptr %564, i64 %565
  store i64 %563, ptr %566, align 8, !tbaa !9
  %567 = load ptr, ptr %6, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.controldef, ptr %567, i32 0, i32 1
  %569 = load i64, ptr %568, align 8, !tbaa !33
  %570 = and i64 %569, 32
  %571 = icmp ne i64 %570, 0
  br i1 %571, label %572, label %632

572:                                              ; preds = %554
  %573 = load i64, ptr %46, align 8, !tbaa !9
  %574 = load i64, ptr %21, align 8, !tbaa !9
  %575 = load i64, ptr %27, align 8, !tbaa !9
  %576 = load ptr, ptr %33, align 8, !tbaa !5
  %577 = load i64, ptr %46, align 8, !tbaa !9
  %578 = getelementptr inbounds i64, ptr %576, i64 %577
  %579 = load i64, ptr %578, align 8, !tbaa !9
  %580 = load ptr, ptr %32, align 8, !tbaa !5
  %581 = load i64, ptr %46, align 8, !tbaa !9
  %582 = getelementptr inbounds i64, ptr %580, i64 %581
  %583 = load i64, ptr %582, align 8, !tbaa !9
  %584 = sub nsw i64 %579, %583
  %585 = load i64, ptr %50, align 8, !tbaa !9
  %586 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %573, i64 noundef %574, i64 noundef %575, i64 noundef %584, i64 noundef %585)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %587

587:                                              ; preds = %605, %572
  %588 = load i64, ptr %15, align 8, !tbaa !9
  %589 = load i64, ptr %18, align 8, !tbaa !9
  %590 = icmp slt i64 %588, %589
  br i1 %590, label %591, label %608

591:                                              ; preds = %587
  %592 = load ptr, ptr %41, align 8, !tbaa !5
  %593 = load i64, ptr %15, align 8, !tbaa !9
  %594 = getelementptr inbounds float, ptr %592, i64 %593
  %595 = load float, ptr %594, align 4, !tbaa !25
  %596 = fpext float %595 to double
  %597 = load ptr, ptr %41, align 8, !tbaa !5
  %598 = load i64, ptr %18, align 8, !tbaa !9
  %599 = load i64, ptr %15, align 8, !tbaa !9
  %600 = add nsw i64 %598, %599
  %601 = getelementptr inbounds float, ptr %597, i64 %600
  %602 = load float, ptr %601, align 4, !tbaa !25
  %603 = fpext float %602 to double
  %604 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %596, double noundef %603)
  br label %605

605:                                              ; preds = %591
  %606 = load i64, ptr %15, align 8, !tbaa !9
  %607 = add nsw i64 %606, 1
  store i64 %607, ptr %15, align 8, !tbaa !9
  br label %587, !llvm.loop !44

608:                                              ; preds = %587
  %609 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %610

610:                                              ; preds = %620, %608
  %611 = load i64, ptr %11, align 8, !tbaa !9
  %612 = load i64, ptr %18, align 8, !tbaa !9
  %613 = icmp slt i64 %611, %612
  br i1 %613, label %614, label %623

614:                                              ; preds = %610
  %615 = load i64, ptr %11, align 8, !tbaa !9
  %616 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 %615
  %617 = load float, ptr %616, align 4, !tbaa !25
  %618 = fpext float %617 to double
  %619 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, double noundef %618)
  br label %620

620:                                              ; preds = %614
  %621 = load i64, ptr %11, align 8, !tbaa !9
  %622 = add nsw i64 %621, 1
  store i64 %622, ptr %11, align 8, !tbaa !9
  br label %610, !llvm.loop !45

623:                                              ; preds = %610
  %624 = load i64, ptr %51, align 8, !tbaa !9
  %625 = load i64, ptr %20, align 8, !tbaa !9
  %626 = icmp eq i64 %624, %625
  br i1 %626, label %627, label %629

627:                                              ; preds = %623
  %628 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.7)
  br label %631

629:                                              ; preds = %623
  %630 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4)
  br label %631

631:                                              ; preds = %629, %627
  br label %632

632:                                              ; preds = %631, %554
  br label %633

633:                                              ; preds = %632
  %634 = load ptr, ptr %32, align 8, !tbaa !5
  %635 = load i64, ptr %46, align 8, !tbaa !9
  %636 = getelementptr inbounds i64, ptr %634, i64 %635
  %637 = load i64, ptr %636, align 8, !tbaa !9
  store i64 %637, ptr %26, align 8, !tbaa !9
  %638 = load ptr, ptr %33, align 8, !tbaa !5
  %639 = load i64, ptr %46, align 8, !tbaa !9
  %640 = getelementptr inbounds i64, ptr %638, i64 %639
  %641 = load i64, ptr %640, align 8, !tbaa !9
  %642 = load ptr, ptr %32, align 8, !tbaa !5
  %643 = load i64, ptr %46, align 8, !tbaa !9
  %644 = getelementptr inbounds i64, ptr %642, i64 %643
  store i64 %641, ptr %644, align 8, !tbaa !9
  %645 = load i64, ptr %26, align 8, !tbaa !9
  %646 = load ptr, ptr %33, align 8, !tbaa !5
  %647 = load i64, ptr %46, align 8, !tbaa !9
  %648 = getelementptr inbounds i64, ptr %646, i64 %647
  store i64 %645, ptr %648, align 8, !tbaa !9
  br label %649

649:                                              ; preds = %633
  br label %650

650:                                              ; preds = %649
  %651 = load ptr, ptr %33, align 8, !tbaa !5
  %652 = load i64, ptr %46, align 8, !tbaa !9
  %653 = getelementptr inbounds i64, ptr %651, i64 %652
  %654 = load i64, ptr %653, align 8, !tbaa !9
  %655 = icmp eq i64 %654, 0
  br i1 %655, label %656, label %695

656:                                              ; preds = %650
  %657 = load ptr, ptr %28, align 8, !tbaa !5
  %658 = load i64, ptr %46, align 8, !tbaa !9
  %659 = getelementptr inbounds i64, ptr %657, i64 %658
  %660 = load i64, ptr %659, align 8, !tbaa !9
  %661 = load ptr, ptr %28, align 8, !tbaa !5
  %662 = load i64, ptr %46, align 8, !tbaa !9
  %663 = add nsw i64 %662, 1
  %664 = getelementptr inbounds i64, ptr %661, i64 %663
  %665 = load i64, ptr %664, align 8, !tbaa !9
  %666 = icmp slt i64 %660, %665
  br i1 %666, label %667, label %695

667:                                              ; preds = %656
  br label %668

668:                                              ; preds = %667
  %669 = load ptr, ptr %35, align 8, !tbaa !5
  %670 = load i64, ptr %19, align 8, !tbaa !9
  %671 = add nsw i64 %670, -1
  store i64 %671, ptr %19, align 8, !tbaa !9
  %672 = getelementptr inbounds i64, ptr %669, i64 %671
  %673 = load i64, ptr %672, align 8, !tbaa !9
  %674 = load ptr, ptr %35, align 8, !tbaa !5
  %675 = load ptr, ptr %34, align 8, !tbaa !5
  %676 = load i64, ptr %46, align 8, !tbaa !9
  %677 = getelementptr inbounds i64, ptr %675, i64 %676
  %678 = load i64, ptr %677, align 8, !tbaa !9
  %679 = getelementptr inbounds i64, ptr %674, i64 %678
  store i64 %673, ptr %679, align 8, !tbaa !9
  %680 = load ptr, ptr %34, align 8, !tbaa !5
  %681 = load i64, ptr %46, align 8, !tbaa !9
  %682 = getelementptr inbounds i64, ptr %680, i64 %681
  %683 = load i64, ptr %682, align 8, !tbaa !9
  %684 = load ptr, ptr %34, align 8, !tbaa !5
  %685 = load ptr, ptr %35, align 8, !tbaa !5
  %686 = load i64, ptr %19, align 8, !tbaa !9
  %687 = getelementptr inbounds i64, ptr %685, i64 %686
  %688 = load i64, ptr %687, align 8, !tbaa !9
  %689 = getelementptr inbounds i64, ptr %684, i64 %688
  store i64 %683, ptr %689, align 8, !tbaa !9
  %690 = load ptr, ptr %34, align 8, !tbaa !5
  %691 = load i64, ptr %46, align 8, !tbaa !9
  %692 = getelementptr inbounds i64, ptr %690, i64 %691
  store i64 -1, ptr %692, align 8, !tbaa !9
  br label %693

693:                                              ; preds = %668
  br label %694

694:                                              ; preds = %693
  br label %695

695:                                              ; preds = %694, %656, %650
  %696 = load ptr, ptr %28, align 8, !tbaa !5
  %697 = load i64, ptr %46, align 8, !tbaa !9
  %698 = getelementptr inbounds i64, ptr %696, i64 %697
  %699 = load i64, ptr %698, align 8, !tbaa !9
  store i64 %699, ptr %13, align 8, !tbaa !9
  br label %700

700:                                              ; preds = %895, %695
  %701 = load i64, ptr %13, align 8, !tbaa !9
  %702 = load ptr, ptr %28, align 8, !tbaa !5
  %703 = load i64, ptr %46, align 8, !tbaa !9
  %704 = add nsw i64 %703, 1
  %705 = getelementptr inbounds i64, ptr %702, i64 %704
  %706 = load i64, ptr %705, align 8, !tbaa !9
  %707 = icmp slt i64 %701, %706
  br i1 %707, label %708, label %898

708:                                              ; preds = %700
  %709 = load ptr, ptr %29, align 8, !tbaa !5
  %710 = load i64, ptr %13, align 8, !tbaa !9
  %711 = getelementptr inbounds i64, ptr %709, i64 %710
  %712 = load i64, ptr %711, align 8, !tbaa !9
  store i64 %712, ptr %14, align 8, !tbaa !9
  %713 = load ptr, ptr %33, align 8, !tbaa !5
  %714 = load i64, ptr %14, align 8, !tbaa !9
  %715 = getelementptr inbounds i64, ptr %713, i64 %714
  %716 = load i64, ptr %715, align 8, !tbaa !9
  %717 = load ptr, ptr %32, align 8, !tbaa !5
  %718 = load i64, ptr %14, align 8, !tbaa !9
  %719 = getelementptr inbounds i64, ptr %717, i64 %718
  %720 = load i64, ptr %719, align 8, !tbaa !9
  %721 = sub nsw i64 %716, %720
  store i64 %721, ptr %47, align 8, !tbaa !9
  %722 = load i64, ptr %22, align 8, !tbaa !9
  %723 = load ptr, ptr %31, align 8, !tbaa !5
  %724 = load i64, ptr %14, align 8, !tbaa !9
  %725 = getelementptr inbounds i64, ptr %723, i64 %724
  %726 = load i64, ptr %725, align 8, !tbaa !9
  %727 = icmp eq i64 %722, %726
  br i1 %727, label %728, label %733

728:                                              ; preds = %708
  %729 = load ptr, ptr %30, align 8, !tbaa !5
  %730 = load i64, ptr %13, align 8, !tbaa !9
  %731 = getelementptr inbounds i64, ptr %729, i64 %730
  %732 = load i64, ptr %731, align 8, !tbaa !9
  br label %739

733:                                              ; preds = %708
  %734 = load ptr, ptr %30, align 8, !tbaa !5
  %735 = load i64, ptr %13, align 8, !tbaa !9
  %736 = getelementptr inbounds i64, ptr %734, i64 %735
  %737 = load i64, ptr %736, align 8, !tbaa !9
  %738 = sub nsw i64 0, %737
  br label %739

739:                                              ; preds = %733, %728
  %740 = phi i64 [ %732, %728 ], [ %738, %733 ]
  store i64 %740, ptr %16, align 8, !tbaa !9
  br label %741

741:                                              ; preds = %739
  %742 = load i64, ptr %16, align 8, !tbaa !9
  %743 = load ptr, ptr %32, align 8, !tbaa !5
  %744 = load i64, ptr %14, align 8, !tbaa !9
  %745 = getelementptr inbounds i64, ptr %743, i64 %744
  %746 = load i64, ptr %745, align 8, !tbaa !9
  %747 = add nsw i64 %746, %742
  store i64 %747, ptr %745, align 8, !tbaa !9
  %748 = load i64, ptr %16, align 8, !tbaa !9
  %749 = load ptr, ptr %33, align 8, !tbaa !5
  %750 = load i64, ptr %14, align 8, !tbaa !9
  %751 = getelementptr inbounds i64, ptr %749, i64 %750
  %752 = load i64, ptr %751, align 8, !tbaa !9
  %753 = sub nsw i64 %752, %748
  store i64 %753, ptr %751, align 8, !tbaa !9
  br label %754

754:                                              ; preds = %741
  br label %755

755:                                              ; preds = %754
  %756 = load ptr, ptr %34, align 8, !tbaa !5
  %757 = load i64, ptr %14, align 8, !tbaa !9
  %758 = getelementptr inbounds i64, ptr %756, i64 %757
  %759 = load i64, ptr %758, align 8, !tbaa !9
  %760 = icmp ne i64 %759, -1
  br i1 %760, label %761, label %846

761:                                              ; preds = %755
  %762 = load ptr, ptr %33, align 8, !tbaa !5
  %763 = load i64, ptr %14, align 8, !tbaa !9
  %764 = getelementptr inbounds i64, ptr %762, i64 %763
  %765 = load i64, ptr %764, align 8, !tbaa !9
  %766 = icmp eq i64 %765, 0
  br i1 %766, label %767, label %815

767:                                              ; preds = %761
  br label %768

768:                                              ; preds = %767
  %769 = load ptr, ptr %35, align 8, !tbaa !5
  %770 = load i64, ptr %19, align 8, !tbaa !9
  %771 = add nsw i64 %770, -1
  store i64 %771, ptr %19, align 8, !tbaa !9
  %772 = getelementptr inbounds i64, ptr %769, i64 %771
  %773 = load i64, ptr %772, align 8, !tbaa !9
  %774 = load ptr, ptr %35, align 8, !tbaa !5
  %775 = load ptr, ptr %34, align 8, !tbaa !5
  %776 = load i64, ptr %14, align 8, !tbaa !9
  %777 = getelementptr inbounds i64, ptr %775, i64 %776
  %778 = load i64, ptr %777, align 8, !tbaa !9
  %779 = getelementptr inbounds i64, ptr %774, i64 %778
  store i64 %773, ptr %779, align 8, !tbaa !9
  %780 = load ptr, ptr %34, align 8, !tbaa !5
  %781 = load i64, ptr %14, align 8, !tbaa !9
  %782 = getelementptr inbounds i64, ptr %780, i64 %781
  %783 = load i64, ptr %782, align 8, !tbaa !9
  %784 = load ptr, ptr %34, align 8, !tbaa !5
  %785 = load ptr, ptr %35, align 8, !tbaa !5
  %786 = load i64, ptr %19, align 8, !tbaa !9
  %787 = getelementptr inbounds i64, ptr %785, i64 %786
  %788 = load i64, ptr %787, align 8, !tbaa !9
  %789 = getelementptr inbounds i64, ptr %784, i64 %788
  store i64 %783, ptr %789, align 8, !tbaa !9
  %790 = load ptr, ptr %34, align 8, !tbaa !5
  %791 = load i64, ptr %14, align 8, !tbaa !9
  %792 = getelementptr inbounds i64, ptr %790, i64 %791
  store i64 -1, ptr %792, align 8, !tbaa !9
  br label %793

793:                                              ; preds = %768
  br label %794

794:                                              ; preds = %793
  %795 = load ptr, ptr %36, align 8, !tbaa !5
  %796 = load i64, ptr %14, align 8, !tbaa !9
  %797 = getelementptr inbounds i64, ptr %795, i64 %796
  %798 = load i64, ptr %797, align 8, !tbaa !9
  %799 = icmp eq i64 %798, -1
  br i1 %799, label %800, label %814

800:                                              ; preds = %794
  %801 = load ptr, ptr %39, align 8, !tbaa !5
  %802 = load i64, ptr %14, align 8, !tbaa !9
  %803 = getelementptr inbounds i64, ptr %801, i64 %802
  %804 = load i64, ptr %803, align 8, !tbaa !9
  %805 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %804
  %806 = load ptr, ptr %31, align 8, !tbaa !5
  %807 = load i64, ptr %14, align 8, !tbaa !9
  %808 = getelementptr inbounds i64, ptr %806, i64 %807
  %809 = load i64, ptr %808, align 8, !tbaa !9
  %810 = getelementptr inbounds [2 x %struct.PQueueType], ptr %805, i64 0, i64 %809
  %811 = load i64, ptr %14, align 8, !tbaa !9
  %812 = load i64, ptr %47, align 8, !tbaa !9
  %813 = call i64 @libmetis__PQueueDelete(ptr noundef %810, i64 noundef %811, i64 noundef %812)
  br label %814

814:                                              ; preds = %800, %794
  br label %845

815:                                              ; preds = %761
  %816 = load ptr, ptr %36, align 8, !tbaa !5
  %817 = load i64, ptr %14, align 8, !tbaa !9
  %818 = getelementptr inbounds i64, ptr %816, i64 %817
  %819 = load i64, ptr %818, align 8, !tbaa !9
  %820 = icmp eq i64 %819, -1
  br i1 %820, label %821, label %844

821:                                              ; preds = %815
  %822 = load ptr, ptr %39, align 8, !tbaa !5
  %823 = load i64, ptr %14, align 8, !tbaa !9
  %824 = getelementptr inbounds i64, ptr %822, i64 %823
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %825
  %827 = load ptr, ptr %31, align 8, !tbaa !5
  %828 = load i64, ptr %14, align 8, !tbaa !9
  %829 = getelementptr inbounds i64, ptr %827, i64 %828
  %830 = load i64, ptr %829, align 8, !tbaa !9
  %831 = getelementptr inbounds [2 x %struct.PQueueType], ptr %826, i64 0, i64 %830
  %832 = load i64, ptr %14, align 8, !tbaa !9
  %833 = load i64, ptr %47, align 8, !tbaa !9
  %834 = load ptr, ptr %33, align 8, !tbaa !5
  %835 = load i64, ptr %14, align 8, !tbaa !9
  %836 = getelementptr inbounds i64, ptr %834, i64 %835
  %837 = load i64, ptr %836, align 8, !tbaa !9
  %838 = load ptr, ptr %32, align 8, !tbaa !5
  %839 = load i64, ptr %14, align 8, !tbaa !9
  %840 = getelementptr inbounds i64, ptr %838, i64 %839
  %841 = load i64, ptr %840, align 8, !tbaa !9
  %842 = sub nsw i64 %837, %841
  %843 = call i64 @libmetis__PQueueUpdate(ptr noundef %831, i64 noundef %832, i64 noundef %833, i64 noundef %842)
  br label %844

844:                                              ; preds = %821, %815
  br label %845

845:                                              ; preds = %844, %814
  br label %894

846:                                              ; preds = %755
  %847 = load ptr, ptr %33, align 8, !tbaa !5
  %848 = load i64, ptr %14, align 8, !tbaa !9
  %849 = getelementptr inbounds i64, ptr %847, i64 %848
  %850 = load i64, ptr %849, align 8, !tbaa !9
  %851 = icmp sgt i64 %850, 0
  br i1 %851, label %852, label %893

852:                                              ; preds = %846
  br label %853

853:                                              ; preds = %852
  %854 = load i64, ptr %14, align 8, !tbaa !9
  %855 = load ptr, ptr %35, align 8, !tbaa !5
  %856 = load i64, ptr %19, align 8, !tbaa !9
  %857 = getelementptr inbounds i64, ptr %855, i64 %856
  store i64 %854, ptr %857, align 8, !tbaa !9
  %858 = load i64, ptr %19, align 8, !tbaa !9
  %859 = add nsw i64 %858, 1
  store i64 %859, ptr %19, align 8, !tbaa !9
  %860 = load ptr, ptr %34, align 8, !tbaa !5
  %861 = load i64, ptr %14, align 8, !tbaa !9
  %862 = getelementptr inbounds i64, ptr %860, i64 %861
  store i64 %858, ptr %862, align 8, !tbaa !9
  br label %863

863:                                              ; preds = %853
  br label %864

864:                                              ; preds = %863
  %865 = load ptr, ptr %36, align 8, !tbaa !5
  %866 = load i64, ptr %14, align 8, !tbaa !9
  %867 = getelementptr inbounds i64, ptr %865, i64 %866
  %868 = load i64, ptr %867, align 8, !tbaa !9
  %869 = icmp eq i64 %868, -1
  br i1 %869, label %870, label %892

870:                                              ; preds = %864
  %871 = load ptr, ptr %39, align 8, !tbaa !5
  %872 = load i64, ptr %14, align 8, !tbaa !9
  %873 = getelementptr inbounds i64, ptr %871, i64 %872
  %874 = load i64, ptr %873, align 8, !tbaa !9
  %875 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %874
  %876 = load ptr, ptr %31, align 8, !tbaa !5
  %877 = load i64, ptr %14, align 8, !tbaa !9
  %878 = getelementptr inbounds i64, ptr %876, i64 %877
  %879 = load i64, ptr %878, align 8, !tbaa !9
  %880 = getelementptr inbounds [2 x %struct.PQueueType], ptr %875, i64 0, i64 %879
  %881 = load i64, ptr %14, align 8, !tbaa !9
  %882 = load ptr, ptr %33, align 8, !tbaa !5
  %883 = load i64, ptr %14, align 8, !tbaa !9
  %884 = getelementptr inbounds i64, ptr %882, i64 %883
  %885 = load i64, ptr %884, align 8, !tbaa !9
  %886 = load ptr, ptr %32, align 8, !tbaa !5
  %887 = load i64, ptr %14, align 8, !tbaa !9
  %888 = getelementptr inbounds i64, ptr %886, i64 %887
  %889 = load i64, ptr %888, align 8, !tbaa !9
  %890 = sub nsw i64 %885, %889
  %891 = call i64 @libmetis__PQueueInsert(ptr noundef %880, i64 noundef %881, i64 noundef %890)
  br label %892

892:                                              ; preds = %870, %864
  br label %893

893:                                              ; preds = %892, %846
  br label %894

894:                                              ; preds = %893, %845
  br label %895

895:                                              ; preds = %894
  %896 = load i64, ptr %13, align 8, !tbaa !9
  %897 = add nsw i64 %896, 1
  store i64 %897, ptr %13, align 8, !tbaa !9
  br label %700, !llvm.loop !46

898:                                              ; preds = %700
  br label %899

899:                                              ; preds = %898
  %900 = load i64, ptr %20, align 8, !tbaa !9
  %901 = add nsw i64 %900, 1
  store i64 %901, ptr %20, align 8, !tbaa !9
  br label %411, !llvm.loop !47

902:                                              ; preds = %517, %433, %411
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %903

903:                                              ; preds = %914, %902
  %904 = load i64, ptr %11, align 8, !tbaa !9
  %905 = load i64, ptr %20, align 8, !tbaa !9
  %906 = icmp slt i64 %904, %905
  br i1 %906, label %907, label %917

907:                                              ; preds = %903
  %908 = load ptr, ptr %36, align 8, !tbaa !5
  %909 = load ptr, ptr %37, align 8, !tbaa !5
  %910 = load i64, ptr %11, align 8, !tbaa !9
  %911 = getelementptr inbounds i64, ptr %909, i64 %910
  %912 = load i64, ptr %911, align 8, !tbaa !9
  %913 = getelementptr inbounds i64, ptr %908, i64 %912
  store i64 -1, ptr %913, align 8, !tbaa !9
  br label %914

914:                                              ; preds = %907
  %915 = load i64, ptr %11, align 8, !tbaa !9
  %916 = add nsw i64 %915, 1
  store i64 %916, ptr %11, align 8, !tbaa !9
  br label %903, !llvm.loop !48

917:                                              ; preds = %903
  %918 = load i64, ptr %20, align 8, !tbaa !9
  %919 = add nsw i64 %918, -1
  store i64 %919, ptr %20, align 8, !tbaa !9
  br label %920

920:                                              ; preds = %1179, %917
  %921 = load i64, ptr %20, align 8, !tbaa !9
  %922 = load i64, ptr %51, align 8, !tbaa !9
  %923 = icmp sgt i64 %921, %922
  br i1 %923, label %924, label %1182

924:                                              ; preds = %920
  %925 = load ptr, ptr %37, align 8, !tbaa !5
  %926 = load i64, ptr %20, align 8, !tbaa !9
  %927 = getelementptr inbounds i64, ptr %925, i64 %926
  %928 = load i64, ptr %927, align 8, !tbaa !9
  store i64 %928, ptr %46, align 8, !tbaa !9
  %929 = load ptr, ptr %31, align 8, !tbaa !5
  %930 = load i64, ptr %46, align 8, !tbaa !9
  %931 = getelementptr inbounds i64, ptr %929, i64 %930
  %932 = load i64, ptr %931, align 8, !tbaa !9
  %933 = add nsw i64 %932, 1
  %934 = srem i64 %933, 2
  %935 = load ptr, ptr %31, align 8, !tbaa !5
  %936 = load i64, ptr %46, align 8, !tbaa !9
  %937 = getelementptr inbounds i64, ptr %935, i64 %936
  store i64 %934, ptr %937, align 8, !tbaa !9
  store i64 %934, ptr %22, align 8, !tbaa !9
  br label %938

938:                                              ; preds = %924
  %939 = load ptr, ptr %32, align 8, !tbaa !5
  %940 = load i64, ptr %46, align 8, !tbaa !9
  %941 = getelementptr inbounds i64, ptr %939, i64 %940
  %942 = load i64, ptr %941, align 8, !tbaa !9
  store i64 %942, ptr %26, align 8, !tbaa !9
  %943 = load ptr, ptr %33, align 8, !tbaa !5
  %944 = load i64, ptr %46, align 8, !tbaa !9
  %945 = getelementptr inbounds i64, ptr %943, i64 %944
  %946 = load i64, ptr %945, align 8, !tbaa !9
  %947 = load ptr, ptr %32, align 8, !tbaa !5
  %948 = load i64, ptr %46, align 8, !tbaa !9
  %949 = getelementptr inbounds i64, ptr %947, i64 %948
  store i64 %946, ptr %949, align 8, !tbaa !9
  %950 = load i64, ptr %26, align 8, !tbaa !9
  %951 = load ptr, ptr %33, align 8, !tbaa !5
  %952 = load i64, ptr %46, align 8, !tbaa !9
  %953 = getelementptr inbounds i64, ptr %951, i64 %952
  store i64 %950, ptr %953, align 8, !tbaa !9
  br label %954

954:                                              ; preds = %938
  br label %955

955:                                              ; preds = %954
  %956 = load ptr, ptr %33, align 8, !tbaa !5
  %957 = load i64, ptr %46, align 8, !tbaa !9
  %958 = getelementptr inbounds i64, ptr %956, i64 %957
  %959 = load i64, ptr %958, align 8, !tbaa !9
  %960 = icmp eq i64 %959, 0
  br i1 %960, label %961, label %1006

961:                                              ; preds = %955
  %962 = load ptr, ptr %34, align 8, !tbaa !5
  %963 = load i64, ptr %46, align 8, !tbaa !9
  %964 = getelementptr inbounds i64, ptr %962, i64 %963
  %965 = load i64, ptr %964, align 8, !tbaa !9
  %966 = icmp ne i64 %965, -1
  br i1 %966, label %967, label %1006

967:                                              ; preds = %961
  %968 = load ptr, ptr %28, align 8, !tbaa !5
  %969 = load i64, ptr %46, align 8, !tbaa !9
  %970 = getelementptr inbounds i64, ptr %968, i64 %969
  %971 = load i64, ptr %970, align 8, !tbaa !9
  %972 = load ptr, ptr %28, align 8, !tbaa !5
  %973 = load i64, ptr %46, align 8, !tbaa !9
  %974 = add nsw i64 %973, 1
  %975 = getelementptr inbounds i64, ptr %972, i64 %974
  %976 = load i64, ptr %975, align 8, !tbaa !9
  %977 = icmp slt i64 %971, %976
  br i1 %977, label %978, label %1006

978:                                              ; preds = %967
  br label %979

979:                                              ; preds = %978
  %980 = load ptr, ptr %35, align 8, !tbaa !5
  %981 = load i64, ptr %19, align 8, !tbaa !9
  %982 = add nsw i64 %981, -1
  store i64 %982, ptr %19, align 8, !tbaa !9
  %983 = getelementptr inbounds i64, ptr %980, i64 %982
  %984 = load i64, ptr %983, align 8, !tbaa !9
  %985 = load ptr, ptr %35, align 8, !tbaa !5
  %986 = load ptr, ptr %34, align 8, !tbaa !5
  %987 = load i64, ptr %46, align 8, !tbaa !9
  %988 = getelementptr inbounds i64, ptr %986, i64 %987
  %989 = load i64, ptr %988, align 8, !tbaa !9
  %990 = getelementptr inbounds i64, ptr %985, i64 %989
  store i64 %984, ptr %990, align 8, !tbaa !9
  %991 = load ptr, ptr %34, align 8, !tbaa !5
  %992 = load i64, ptr %46, align 8, !tbaa !9
  %993 = getelementptr inbounds i64, ptr %991, i64 %992
  %994 = load i64, ptr %993, align 8, !tbaa !9
  %995 = load ptr, ptr %34, align 8, !tbaa !5
  %996 = load ptr, ptr %35, align 8, !tbaa !5
  %997 = load i64, ptr %19, align 8, !tbaa !9
  %998 = getelementptr inbounds i64, ptr %996, i64 %997
  %999 = load i64, ptr %998, align 8, !tbaa !9
  %1000 = getelementptr inbounds i64, ptr %995, i64 %999
  store i64 %994, ptr %1000, align 8, !tbaa !9
  %1001 = load ptr, ptr %34, align 8, !tbaa !5
  %1002 = load i64, ptr %46, align 8, !tbaa !9
  %1003 = getelementptr inbounds i64, ptr %1001, i64 %1002
  store i64 -1, ptr %1003, align 8, !tbaa !9
  br label %1004

1004:                                             ; preds = %979
  br label %1005

1005:                                             ; preds = %1004
  br label %1032

1006:                                             ; preds = %967, %961, %955
  %1007 = load ptr, ptr %33, align 8, !tbaa !5
  %1008 = load i64, ptr %46, align 8, !tbaa !9
  %1009 = getelementptr inbounds i64, ptr %1007, i64 %1008
  %1010 = load i64, ptr %1009, align 8, !tbaa !9
  %1011 = icmp sgt i64 %1010, 0
  br i1 %1011, label %1012, label %1031

1012:                                             ; preds = %1006
  %1013 = load ptr, ptr %34, align 8, !tbaa !5
  %1014 = load i64, ptr %46, align 8, !tbaa !9
  %1015 = getelementptr inbounds i64, ptr %1013, i64 %1014
  %1016 = load i64, ptr %1015, align 8, !tbaa !9
  %1017 = icmp eq i64 %1016, -1
  br i1 %1017, label %1018, label %1031

1018:                                             ; preds = %1012
  br label %1019

1019:                                             ; preds = %1018
  %1020 = load i64, ptr %46, align 8, !tbaa !9
  %1021 = load ptr, ptr %35, align 8, !tbaa !5
  %1022 = load i64, ptr %19, align 8, !tbaa !9
  %1023 = getelementptr inbounds i64, ptr %1021, i64 %1022
  store i64 %1020, ptr %1023, align 8, !tbaa !9
  %1024 = load i64, ptr %19, align 8, !tbaa !9
  %1025 = add nsw i64 %1024, 1
  store i64 %1025, ptr %19, align 8, !tbaa !9
  %1026 = load ptr, ptr %34, align 8, !tbaa !5
  %1027 = load i64, ptr %46, align 8, !tbaa !9
  %1028 = getelementptr inbounds i64, ptr %1026, i64 %1027
  store i64 %1024, ptr %1028, align 8, !tbaa !9
  br label %1029

1029:                                             ; preds = %1019
  br label %1030

1030:                                             ; preds = %1029
  br label %1031

1031:                                             ; preds = %1030, %1012, %1006
  br label %1032

1032:                                             ; preds = %1031, %1005
  %1033 = load i64, ptr %18, align 8, !tbaa !9
  %1034 = load ptr, ptr %40, align 8, !tbaa !5
  %1035 = load i64, ptr %46, align 8, !tbaa !9
  %1036 = load i64, ptr %18, align 8, !tbaa !9
  %1037 = mul nsw i64 %1035, %1036
  %1038 = getelementptr inbounds float, ptr %1034, i64 %1037
  %1039 = load ptr, ptr %41, align 8, !tbaa !5
  %1040 = load i64, ptr %22, align 8, !tbaa !9
  %1041 = load i64, ptr %18, align 8, !tbaa !9
  %1042 = mul nsw i64 %1040, %1041
  %1043 = getelementptr inbounds float, ptr %1039, i64 %1042
  %1044 = call ptr @gk_faxpy(i64 noundef %1033, float noundef 1.000000e+00, ptr noundef %1038, i64 noundef 1, ptr noundef %1043, i64 noundef 1)
  %1045 = load i64, ptr %18, align 8, !tbaa !9
  %1046 = load ptr, ptr %40, align 8, !tbaa !5
  %1047 = load i64, ptr %46, align 8, !tbaa !9
  %1048 = load i64, ptr %18, align 8, !tbaa !9
  %1049 = mul nsw i64 %1047, %1048
  %1050 = getelementptr inbounds float, ptr %1046, i64 %1049
  %1051 = load ptr, ptr %41, align 8, !tbaa !5
  %1052 = load i64, ptr %22, align 8, !tbaa !9
  %1053 = add nsw i64 %1052, 1
  %1054 = srem i64 %1053, 2
  %1055 = load i64, ptr %18, align 8, !tbaa !9
  %1056 = mul nsw i64 %1054, %1055
  %1057 = getelementptr inbounds float, ptr %1051, i64 %1056
  %1058 = call ptr @gk_faxpy(i64 noundef %1045, float noundef -1.000000e+00, ptr noundef %1050, i64 noundef 1, ptr noundef %1057, i64 noundef 1)
  %1059 = load ptr, ptr %28, align 8, !tbaa !5
  %1060 = load i64, ptr %46, align 8, !tbaa !9
  %1061 = getelementptr inbounds i64, ptr %1059, i64 %1060
  %1062 = load i64, ptr %1061, align 8, !tbaa !9
  store i64 %1062, ptr %13, align 8, !tbaa !9
  br label %1063

1063:                                             ; preds = %1175, %1032
  %1064 = load i64, ptr %13, align 8, !tbaa !9
  %1065 = load ptr, ptr %28, align 8, !tbaa !5
  %1066 = load i64, ptr %46, align 8, !tbaa !9
  %1067 = add nsw i64 %1066, 1
  %1068 = getelementptr inbounds i64, ptr %1065, i64 %1067
  %1069 = load i64, ptr %1068, align 8, !tbaa !9
  %1070 = icmp slt i64 %1064, %1069
  br i1 %1070, label %1071, label %1178

1071:                                             ; preds = %1063
  %1072 = load ptr, ptr %29, align 8, !tbaa !5
  %1073 = load i64, ptr %13, align 8, !tbaa !9
  %1074 = getelementptr inbounds i64, ptr %1072, i64 %1073
  %1075 = load i64, ptr %1074, align 8, !tbaa !9
  store i64 %1075, ptr %14, align 8, !tbaa !9
  %1076 = load i64, ptr %22, align 8, !tbaa !9
  %1077 = load ptr, ptr %31, align 8, !tbaa !5
  %1078 = load i64, ptr %14, align 8, !tbaa !9
  %1079 = getelementptr inbounds i64, ptr %1077, i64 %1078
  %1080 = load i64, ptr %1079, align 8, !tbaa !9
  %1081 = icmp eq i64 %1076, %1080
  br i1 %1081, label %1082, label %1087

1082:                                             ; preds = %1071
  %1083 = load ptr, ptr %30, align 8, !tbaa !5
  %1084 = load i64, ptr %13, align 8, !tbaa !9
  %1085 = getelementptr inbounds i64, ptr %1083, i64 %1084
  %1086 = load i64, ptr %1085, align 8, !tbaa !9
  br label %1093

1087:                                             ; preds = %1071
  %1088 = load ptr, ptr %30, align 8, !tbaa !5
  %1089 = load i64, ptr %13, align 8, !tbaa !9
  %1090 = getelementptr inbounds i64, ptr %1088, i64 %1089
  %1091 = load i64, ptr %1090, align 8, !tbaa !9
  %1092 = sub nsw i64 0, %1091
  br label %1093

1093:                                             ; preds = %1087, %1082
  %1094 = phi i64 [ %1086, %1082 ], [ %1092, %1087 ]
  store i64 %1094, ptr %16, align 8, !tbaa !9
  br label %1095

1095:                                             ; preds = %1093
  %1096 = load i64, ptr %16, align 8, !tbaa !9
  %1097 = load ptr, ptr %32, align 8, !tbaa !5
  %1098 = load i64, ptr %14, align 8, !tbaa !9
  %1099 = getelementptr inbounds i64, ptr %1097, i64 %1098
  %1100 = load i64, ptr %1099, align 8, !tbaa !9
  %1101 = add nsw i64 %1100, %1096
  store i64 %1101, ptr %1099, align 8, !tbaa !9
  %1102 = load i64, ptr %16, align 8, !tbaa !9
  %1103 = load ptr, ptr %33, align 8, !tbaa !5
  %1104 = load i64, ptr %14, align 8, !tbaa !9
  %1105 = getelementptr inbounds i64, ptr %1103, i64 %1104
  %1106 = load i64, ptr %1105, align 8, !tbaa !9
  %1107 = sub nsw i64 %1106, %1102
  store i64 %1107, ptr %1105, align 8, !tbaa !9
  br label %1108

1108:                                             ; preds = %1095
  br label %1109

1109:                                             ; preds = %1108
  %1110 = load ptr, ptr %34, align 8, !tbaa !5
  %1111 = load i64, ptr %14, align 8, !tbaa !9
  %1112 = getelementptr inbounds i64, ptr %1110, i64 %1111
  %1113 = load i64, ptr %1112, align 8, !tbaa !9
  %1114 = icmp ne i64 %1113, -1
  br i1 %1114, label %1115, label %1149

1115:                                             ; preds = %1109
  %1116 = load ptr, ptr %33, align 8, !tbaa !5
  %1117 = load i64, ptr %14, align 8, !tbaa !9
  %1118 = getelementptr inbounds i64, ptr %1116, i64 %1117
  %1119 = load i64, ptr %1118, align 8, !tbaa !9
  %1120 = icmp eq i64 %1119, 0
  br i1 %1120, label %1121, label %1149

1121:                                             ; preds = %1115
  br label %1122

1122:                                             ; preds = %1121
  %1123 = load ptr, ptr %35, align 8, !tbaa !5
  %1124 = load i64, ptr %19, align 8, !tbaa !9
  %1125 = add nsw i64 %1124, -1
  store i64 %1125, ptr %19, align 8, !tbaa !9
  %1126 = getelementptr inbounds i64, ptr %1123, i64 %1125
  %1127 = load i64, ptr %1126, align 8, !tbaa !9
  %1128 = load ptr, ptr %35, align 8, !tbaa !5
  %1129 = load ptr, ptr %34, align 8, !tbaa !5
  %1130 = load i64, ptr %14, align 8, !tbaa !9
  %1131 = getelementptr inbounds i64, ptr %1129, i64 %1130
  %1132 = load i64, ptr %1131, align 8, !tbaa !9
  %1133 = getelementptr inbounds i64, ptr %1128, i64 %1132
  store i64 %1127, ptr %1133, align 8, !tbaa !9
  %1134 = load ptr, ptr %34, align 8, !tbaa !5
  %1135 = load i64, ptr %14, align 8, !tbaa !9
  %1136 = getelementptr inbounds i64, ptr %1134, i64 %1135
  %1137 = load i64, ptr %1136, align 8, !tbaa !9
  %1138 = load ptr, ptr %34, align 8, !tbaa !5
  %1139 = load ptr, ptr %35, align 8, !tbaa !5
  %1140 = load i64, ptr %19, align 8, !tbaa !9
  %1141 = getelementptr inbounds i64, ptr %1139, i64 %1140
  %1142 = load i64, ptr %1141, align 8, !tbaa !9
  %1143 = getelementptr inbounds i64, ptr %1138, i64 %1142
  store i64 %1137, ptr %1143, align 8, !tbaa !9
  %1144 = load ptr, ptr %34, align 8, !tbaa !5
  %1145 = load i64, ptr %14, align 8, !tbaa !9
  %1146 = getelementptr inbounds i64, ptr %1144, i64 %1145
  store i64 -1, ptr %1146, align 8, !tbaa !9
  br label %1147

1147:                                             ; preds = %1122
  br label %1148

1148:                                             ; preds = %1147
  br label %1149

1149:                                             ; preds = %1148, %1115, %1109
  %1150 = load ptr, ptr %34, align 8, !tbaa !5
  %1151 = load i64, ptr %14, align 8, !tbaa !9
  %1152 = getelementptr inbounds i64, ptr %1150, i64 %1151
  %1153 = load i64, ptr %1152, align 8, !tbaa !9
  %1154 = icmp eq i64 %1153, -1
  br i1 %1154, label %1155, label %1174

1155:                                             ; preds = %1149
  %1156 = load ptr, ptr %33, align 8, !tbaa !5
  %1157 = load i64, ptr %14, align 8, !tbaa !9
  %1158 = getelementptr inbounds i64, ptr %1156, i64 %1157
  %1159 = load i64, ptr %1158, align 8, !tbaa !9
  %1160 = icmp sgt i64 %1159, 0
  br i1 %1160, label %1161, label %1174

1161:                                             ; preds = %1155
  br label %1162

1162:                                             ; preds = %1161
  %1163 = load i64, ptr %14, align 8, !tbaa !9
  %1164 = load ptr, ptr %35, align 8, !tbaa !5
  %1165 = load i64, ptr %19, align 8, !tbaa !9
  %1166 = getelementptr inbounds i64, ptr %1164, i64 %1165
  store i64 %1163, ptr %1166, align 8, !tbaa !9
  %1167 = load i64, ptr %19, align 8, !tbaa !9
  %1168 = add nsw i64 %1167, 1
  store i64 %1168, ptr %19, align 8, !tbaa !9
  %1169 = load ptr, ptr %34, align 8, !tbaa !5
  %1170 = load i64, ptr %14, align 8, !tbaa !9
  %1171 = getelementptr inbounds i64, ptr %1169, i64 %1170
  store i64 %1167, ptr %1171, align 8, !tbaa !9
  br label %1172

1172:                                             ; preds = %1162
  br label %1173

1173:                                             ; preds = %1172
  br label %1174

1174:                                             ; preds = %1173, %1155, %1149
  br label %1175

1175:                                             ; preds = %1174
  %1176 = load i64, ptr %13, align 8, !tbaa !9
  %1177 = add nsw i64 %1176, 1
  store i64 %1177, ptr %13, align 8, !tbaa !9
  br label %1063, !llvm.loop !49

1178:                                             ; preds = %1063
  br label %1179

1179:                                             ; preds = %1178
  %1180 = load i64, ptr %20, align 8, !tbaa !9
  %1181 = add nsw i64 %1180, -1
  store i64 %1181, ptr %20, align 8, !tbaa !9
  br label %920, !llvm.loop !50

1182:                                             ; preds = %920
  %1183 = load ptr, ptr %6, align 8, !tbaa !5
  %1184 = getelementptr inbounds %struct.controldef, ptr %1183, i32 0, i32 1
  %1185 = load i64, ptr %1184, align 8, !tbaa !33
  %1186 = and i64 %1185, 8
  %1187 = icmp ne i64 %1186, 0
  br i1 %1187, label %1188, label %1235

1188:                                             ; preds = %1182
  %1189 = load i64, ptr %48, align 8, !tbaa !9
  %1190 = load i64, ptr %51, align 8, !tbaa !9
  %1191 = load i64, ptr %19, align 8, !tbaa !9
  %1192 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.8, i64 noundef %1189, i64 noundef %1190, i64 noundef %1191)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %1193

1193:                                             ; preds = %1211, %1188
  %1194 = load i64, ptr %15, align 8, !tbaa !9
  %1195 = load i64, ptr %18, align 8, !tbaa !9
  %1196 = icmp slt i64 %1194, %1195
  br i1 %1196, label %1197, label %1214

1197:                                             ; preds = %1193
  %1198 = load ptr, ptr %41, align 8, !tbaa !5
  %1199 = load i64, ptr %15, align 8, !tbaa !9
  %1200 = getelementptr inbounds float, ptr %1198, i64 %1199
  %1201 = load float, ptr %1200, align 4, !tbaa !25
  %1202 = fpext float %1201 to double
  %1203 = load ptr, ptr %41, align 8, !tbaa !5
  %1204 = load i64, ptr %18, align 8, !tbaa !9
  %1205 = load i64, ptr %15, align 8, !tbaa !9
  %1206 = add nsw i64 %1204, %1205
  %1207 = getelementptr inbounds float, ptr %1203, i64 %1206
  %1208 = load float, ptr %1207, align 4, !tbaa !25
  %1209 = fpext float %1208 to double
  %1210 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %1202, double noundef %1209)
  br label %1211

1211:                                             ; preds = %1197
  %1212 = load i64, ptr %15, align 8, !tbaa !9
  %1213 = add nsw i64 %1212, 1
  store i64 %1213, ptr %15, align 8, !tbaa !9
  br label %1193, !llvm.loop !51

1214:                                             ; preds = %1193
  %1215 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.9)
  %1216 = load i64, ptr %18, align 8, !tbaa !9
  %1217 = load ptr, ptr %41, align 8, !tbaa !5
  %1218 = load ptr, ptr %8, align 8, !tbaa !5
  %1219 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %1216, ptr noundef %1217, ptr noundef %1218, ptr noundef %1219)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %1220

1220:                                             ; preds = %1230, %1214
  %1221 = load i64, ptr %11, align 8, !tbaa !9
  %1222 = load i64, ptr %18, align 8, !tbaa !9
  %1223 = icmp slt i64 %1221, %1222
  br i1 %1223, label %1224, label %1233

1224:                                             ; preds = %1220
  %1225 = load i64, ptr %11, align 8, !tbaa !9
  %1226 = getelementptr inbounds [16 x float], ptr %55, i64 0, i64 %1225
  %1227 = load float, ptr %1226, align 4, !tbaa !25
  %1228 = fpext float %1227 to double
  %1229 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, double noundef %1228)
  br label %1230

1230:                                             ; preds = %1224
  %1231 = load i64, ptr %11, align 8, !tbaa !9
  %1232 = add nsw i64 %1231, 1
  store i64 %1232, ptr %11, align 8, !tbaa !9
  br label %1220, !llvm.loop !52

1233:                                             ; preds = %1220
  %1234 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4)
  br label %1235

1235:                                             ; preds = %1233, %1182
  %1236 = load i64, ptr %48, align 8, !tbaa !9
  %1237 = load ptr, ptr %7, align 8, !tbaa !5
  %1238 = getelementptr inbounds %struct.graphdef, ptr %1237, i32 0, i32 16
  store i64 %1236, ptr %1238, align 8, !tbaa !39
  %1239 = load i64, ptr %19, align 8, !tbaa !9
  %1240 = load ptr, ptr %7, align 8, !tbaa !5
  %1241 = getelementptr inbounds %struct.graphdef, ptr %1240, i32 0, i32 20
  store i64 %1239, ptr %1241, align 8, !tbaa !38
  %1242 = load i64, ptr %51, align 8, !tbaa !9
  %1243 = icmp eq i64 %1242, -1
  br i1 %1243, label %1248, label %1244

1244:                                             ; preds = %1235
  %1245 = load i64, ptr %48, align 8, !tbaa !9
  %1246 = load i64, ptr %49, align 8, !tbaa !9
  %1247 = icmp eq i64 %1245, %1246
  br i1 %1247, label %1248, label %1249

1248:                                             ; preds = %1244, %1235
  br label %1253

1249:                                             ; preds = %1244
  br label %1250

1250:                                             ; preds = %1249
  %1251 = load i64, ptr %23, align 8, !tbaa !9
  %1252 = add nsw i64 %1251, 1
  store i64 %1252, ptr %23, align 8, !tbaa !9
  br label %342, !llvm.loop !53

1253:                                             ; preds = %1248, %342
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %1254

1254:                                             ; preds = %1267, %1253
  %1255 = load i64, ptr %11, align 8, !tbaa !9
  %1256 = load i64, ptr %18, align 8, !tbaa !9
  %1257 = icmp slt i64 %1255, %1256
  br i1 %1257, label %1258, label %1270

1258:                                             ; preds = %1254
  %1259 = load ptr, ptr %6, align 8, !tbaa !5
  %1260 = load i64, ptr %11, align 8, !tbaa !9
  %1261 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %1260
  %1262 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1261, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1259, ptr noundef %1262)
  %1263 = load ptr, ptr %6, align 8, !tbaa !5
  %1264 = load i64, ptr %11, align 8, !tbaa !9
  %1265 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %45, i64 0, i64 %1264
  %1266 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1265, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1263, ptr noundef %1266)
  br label %1267

1267:                                             ; preds = %1258
  %1268 = load i64, ptr %11, align 8, !tbaa !9
  %1269 = add nsw i64 %1268, 1
  store i64 %1269, ptr %11, align 8, !tbaa !9
  br label %1254, !llvm.loop !54

1270:                                             ; preds = %1254
  %1271 = load ptr, ptr %6, align 8, !tbaa !5
  %1272 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1271, i64 noundef %1272)
  %1273 = load ptr, ptr %6, align 8, !tbaa !5
  %1274 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1273, i64 noundef %1274)
  %1275 = load ptr, ptr %6, align 8, !tbaa !5
  %1276 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1275, i64 noundef %1276)
  %1277 = load ptr, ptr %6, align 8, !tbaa !5
  %1278 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1277, i64 noundef %1278)
  %1279 = load ptr, ptr %6, align 8, !tbaa !5
  %1280 = load i64, ptr %18, align 8, !tbaa !9
  %1281 = mul nsw i64 2, %1280
  call void @fwspacefree(ptr noundef %1279, i64 noundef %1281)
  %1282 = load ptr, ptr %6, align 8, !tbaa !5
  %1283 = load i64, ptr %18, align 8, !tbaa !9
  %1284 = mul nsw i64 2, %1283
  call void @fwspacefree(ptr noundef %1282, i64 noundef %1284)
  call void @llvm.lifetime.end.p0(i64 64, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 2816, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  ret void
}

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #3

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

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

declare i64 @gk_fargmax(i64 noundef, ptr 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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #2

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #2

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

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

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

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

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

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


; 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 }

@.str = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MocFM_2WayEdgeRefine2(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, i64 noundef %4) local_unnamed_addr #0 {
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca [16 x float], align 16
  %9 = alloca [16 x float], align 16
  %10 = alloca [16 x [2 x %struct.PQueueType]], align 16
  %11 = alloca [16 x float], align 16
  %12 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 2816, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #4
  %13 = load i64, ptr %1, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %1, i64 208
  %15 = load i64, ptr %14, align 8, !tbaa !12
  %16 = getelementptr inbounds i8, ptr %1, i64 16
  %17 = load ptr, ptr %16, align 8, !tbaa !13
  %18 = getelementptr inbounds i8, ptr %1, i64 216
  %19 = load ptr, ptr %18, align 8, !tbaa !14
  %20 = getelementptr inbounds i8, ptr %1, i64 40
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %22 = getelementptr inbounds i8, ptr %1, i64 48
  %23 = load ptr, ptr %22, align 8, !tbaa !16
  %24 = getelementptr inbounds i8, ptr %1, i64 128
  %25 = load ptr, ptr %24, align 8, !tbaa !17
  %26 = getelementptr inbounds i8, ptr %1, i64 168
  %27 = load ptr, ptr %26, align 8, !tbaa !18
  %28 = getelementptr inbounds i8, ptr %1, i64 176
  %29 = load ptr, ptr %28, align 8, !tbaa !19
  %30 = getelementptr inbounds i8, ptr %1, i64 224
  %31 = load ptr, ptr %30, align 8, !tbaa !20
  %32 = getelementptr inbounds i8, ptr %1, i64 152
  %33 = load ptr, ptr %32, align 8, !tbaa !21
  %34 = getelementptr inbounds i8, ptr %1, i64 160
  %35 = load ptr, ptr %34, align 8, !tbaa !22
  %36 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %13) #4
  %37 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %13) #4
  %38 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %13) #4
  %39 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %13) #4
  %40 = sitofp i64 %13 to double
  %41 = fmul double %40, 1.000000e-02
  %42 = fcmp oge double %41, 1.500000e+01
  %43 = select i1 %42, double %41, double 1.500000e+01
  %.inv = fcmp oge double %43, 1.000000e+02
  %44 = select i1 %.inv, double 1.000000e+02, double %43
  %45 = fptosi double %44 to i64
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %8) #4
  %46 = icmp sgt i64 %15, 0
  br i1 %46, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %5
  %min.iters.check = icmp ult i64 %15, 8
  br i1 %min.iters.check, label %.lr.ph.preheader811, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %15, 9223372036854775800
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %47 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %index
  %48 = getelementptr inbounds i8, ptr %47, i64 16
  %wide.load = load <4 x float>, ptr %47, align 16, !tbaa !23
  %wide.load716 = load <4 x float>, ptr %48, align 16, !tbaa !23
  %49 = getelementptr inbounds float, ptr %3, i64 %index
  %50 = getelementptr inbounds i8, ptr %49, i64 16
  %wide.load717 = load <4 x float>, ptr %49, align 4, !tbaa !23
  %wide.load718 = load <4 x float>, ptr %50, align 4, !tbaa !23
  %51 = fcmp oge <4 x float> %wide.load, %wide.load717
  %52 = fcmp oge <4 x float> %wide.load716, %wide.load718
  %53 = select <4 x i1> %51, <4 x float> %wide.load, <4 x float> %wide.load717
  %54 = select <4 x i1> %52, <4 x float> %wide.load716, <4 x float> %wide.load718
  %55 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %index
  %56 = getelementptr inbounds i8, ptr %55, i64 16
  store <4 x float> %53, ptr %55, align 16, !tbaa !23
  store <4 x float> %54, ptr %56, align 16, !tbaa !23
  %index.next = add nuw i64 %index, 8
  %57 = icmp eq i64 %index.next, %n.vec
  br i1 %57, label %middle.block, label %vector.body, !llvm.loop !25

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %15, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader811

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

.lr.ph:                                           ; preds = %.lr.ph.preheader811, %.lr.ph
  %.0555 = phi i64 [ %63, %.lr.ph ], [ %.0555.ph, %.lr.ph.preheader811 ]
  %58 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %.0555
  %59 = load float, ptr %58, align 4, !tbaa !23
  %60 = getelementptr inbounds float, ptr %3, i64 %.0555
  %61 = load float, ptr %60, align 4, !tbaa !23
  %.inv538 = fcmp oge float %59, %61
  %. = select i1 %.inv538, float %59, float %61
  %62 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %.0555
  store float %., ptr %62, align 4, !tbaa !23
  %63 = add nuw nsw i64 %.0555, 1
  %exitcond.not = icmp eq i64 %63, %15
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !29

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %5
  %64 = shl nsw i64 %15, 1
  %65 = call ptr @libmetis__fwspacemalloc(ptr noundef %0, i64 noundef %64) #4
  %66 = call ptr @libmetis__fwspacemalloc(ptr noundef %0, i64 noundef %64) #4
  br i1 %46, label %.preheader545.us.preheader.preheader, label %.preheader543

.preheader545.us.preheader.preheader:             ; preds = %._crit_edge
  %min.iters.check739 = icmp ult i64 %15, 4
  br i1 %min.iters.check739, label %.preheader545.us.preheader.preheader810, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader545.us.preheader.preheader
  %67 = shl i64 %15, 2
  %scevgep = getelementptr i8, ptr %66, i64 %67
  %scevgep719 = getelementptr i8, ptr %65, i64 %67
  %scevgep720 = getelementptr i8, ptr %2, i64 4
  %scevgep721 = getelementptr i8, ptr %11, i64 %67
  %bound0 = icmp ult ptr %66, %scevgep719
  %bound1 = icmp ult ptr %65, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0722 = icmp ult ptr %66, %scevgep720
  %bound1723 = icmp ugt ptr %scevgep, %2
  %found.conflict724 = and i1 %bound0722, %bound1723
  %conflict.rdx = or i1 %found.conflict, %found.conflict724
  %bound0725 = icmp ult ptr %66, %scevgep721
  %bound1726 = icmp ult ptr %11, %scevgep
  %found.conflict727 = and i1 %bound0725, %bound1726
  %conflict.rdx728 = or i1 %conflict.rdx, %found.conflict727
  %bound0729 = icmp ult ptr %65, %scevgep720
  %bound1730 = icmp ugt ptr %scevgep719, %2
  %found.conflict731 = and i1 %bound0729, %bound1730
  %conflict.rdx732 = or i1 %conflict.rdx728, %found.conflict731
  %bound0733 = icmp ult ptr %65, %scevgep721
  %bound1734 = icmp ult ptr %11, %scevgep719
  %found.conflict735 = and i1 %bound0733, %bound1734
  %conflict.rdx736 = or i1 %conflict.rdx732, %found.conflict735
  br i1 %conflict.rdx736, label %.preheader545.us.preheader.preheader810, label %vector.ph740

vector.ph740:                                     ; preds = %vector.memcheck
  %n.vec742 = and i64 %15, 9223372036854775804
  %68 = load float, ptr %2, align 4, !tbaa !23, !alias.scope !30
  %broadcast.splatinsert = insertelement <4 x float> poison, float %68, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %69 = load float, ptr %2, align 4, !tbaa !23, !alias.scope !30
  %broadcast.splatinsert747 = insertelement <4 x float> poison, float %69, i64 0
  %broadcast.splat748 = shufflevector <4 x float> %broadcast.splatinsert747, <4 x float> poison, <4 x i32> zeroinitializer
  %70 = fpext <4 x float> %broadcast.splat748 to <4 x double>
  br label %vector.body744

vector.body744:                                   ; preds = %vector.body744, %vector.ph740
  %index745 = phi i64 [ 0, %vector.ph740 ], [ %index.next750, %vector.body744 ]
  %71 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %index745
  %wide.load746 = load <4 x float>, ptr %71, align 16, !tbaa !23, !alias.scope !33
  %72 = fmul <4 x float> %broadcast.splat, %wide.load746
  %73 = getelementptr inbounds float, ptr %66, i64 %index745
  store <4 x float> %72, ptr %73, align 4, !tbaa !23, !alias.scope !35, !noalias !37
  %wide.load749 = load <4 x float>, ptr %71, align 16, !tbaa !23, !alias.scope !33
  %74 = fpext <4 x float> %wide.load749 to <4 x double>
  %75 = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %74
  %76 = fmul <4 x double> %75, %70
  %77 = fptrunc <4 x double> %76 to <4 x float>
  %78 = getelementptr inbounds float, ptr %65, i64 %index745
  store <4 x float> %77, ptr %78, align 4, !tbaa !23, !alias.scope !39, !noalias !40
  %index.next750 = add nuw i64 %index745, 4
  %79 = icmp eq i64 %index.next750, %n.vec742
  br i1 %79, label %middle.block737, label %vector.body744, !llvm.loop !41

middle.block737:                                  ; preds = %vector.body744
  %cmp.n751 = icmp eq i64 %15, %n.vec742
  br i1 %cmp.n751, label %._crit_edge558.us, label %.preheader545.us.preheader.preheader810

.preheader545.us.preheader.preheader810:          ; preds = %middle.block737, %vector.memcheck, %.preheader545.us.preheader.preheader
  %.0495556.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader545.us.preheader.preheader ], [ %n.vec742, %middle.block737 ]
  br label %.preheader545.us.preheader

.preheader545.us.preheader:                       ; preds = %.preheader545.us.preheader.preheader810, %.preheader545.us.preheader
  %.0495556.us = phi i64 [ %93, %.preheader545.us.preheader ], [ %.0495556.us.ph, %.preheader545.us.preheader.preheader810 ]
  %80 = load float, ptr %2, align 4, !tbaa !23
  %81 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %.0495556.us
  %82 = load float, ptr %81, align 4, !tbaa !23
  %83 = fmul float %80, %82
  %84 = getelementptr inbounds float, ptr %66, i64 %.0495556.us
  store float %83, ptr %84, align 4, !tbaa !23
  %85 = load float, ptr %2, align 4, !tbaa !23
  %86 = fpext float %85 to double
  %87 = load float, ptr %81, align 4, !tbaa !23
  %88 = fpext float %87 to double
  %89 = fdiv double 1.000000e+00, %88
  %90 = fmul double %89, %86
  %91 = fptrunc double %90 to float
  %92 = getelementptr inbounds float, ptr %65, i64 %.0495556.us
  store float %91, ptr %92, align 4, !tbaa !23
  %93 = add nuw nsw i64 %.0495556.us, 1
  %exitcond651.not = icmp eq i64 %93, %15
  br i1 %exitcond651.not, label %._crit_edge558.us, label %.preheader545.us.preheader, !llvm.loop !42

._crit_edge558.us:                                ; preds = %.preheader545.us.preheader, %middle.block737
  %94 = getelementptr inbounds i8, ptr %2, i64 4
  %min.iters.check780 = icmp ult i64 %15, 4
  br i1 %min.iters.check780, label %scalar.ph779.preheader, label %vector.memcheck752

vector.memcheck752:                               ; preds = %._crit_edge558.us
  %95 = shl i64 %15, 2
  %scevgep753 = getelementptr i8, ptr %66, i64 %95
  %96 = shl i64 %15, 3
  %scevgep754 = getelementptr i8, ptr %66, i64 %96
  %scevgep755 = getelementptr i8, ptr %65, i64 %95
  %scevgep756 = getelementptr i8, ptr %65, i64 %96
  %scevgep757 = getelementptr i8, ptr %2, i64 8
  %bound0759 = icmp ult ptr %scevgep753, %scevgep756
  %bound1760 = icmp ult ptr %scevgep755, %scevgep754
  %found.conflict761 = and i1 %bound0759, %bound1760
  %bound0762 = icmp ult ptr %scevgep753, %scevgep757
  %bound1763 = icmp ult ptr %94, %scevgep754
  %found.conflict764 = and i1 %bound0762, %bound1763
  %conflict.rdx765 = or i1 %found.conflict761, %found.conflict764
  %bound0766 = icmp ult ptr %66, %11
  %bound1767 = icmp ult ptr %11, %scevgep754
  %found.conflict768 = and i1 %bound0766, %bound1767
  %conflict.rdx769 = or i1 %conflict.rdx765, %found.conflict768
  %bound0770 = icmp ult ptr %scevgep755, %scevgep757
  %bound1771 = icmp ult ptr %94, %scevgep756
  %found.conflict772 = and i1 %bound0770, %bound1771
  %conflict.rdx773 = or i1 %conflict.rdx769, %found.conflict772
  %bound0774 = icmp ult ptr %65, %11
  %bound1775 = icmp ult ptr %11, %scevgep756
  %found.conflict776 = and i1 %bound0774, %bound1775
  %conflict.rdx777 = or i1 %conflict.rdx773, %found.conflict776
  br i1 %conflict.rdx777, label %scalar.ph779.preheader, label %vector.ph781

vector.ph781:                                     ; preds = %vector.memcheck752
  %n.vec783 = and i64 %15, 9223372036854775804
  %97 = load float, ptr %94, align 4, !tbaa !23, !alias.scope !43
  %broadcast.splatinsert788 = insertelement <4 x float> poison, float %97, i64 0
  %broadcast.splat789 = shufflevector <4 x float> %broadcast.splatinsert788, <4 x float> poison, <4 x i32> zeroinitializer
  %98 = load float, ptr %94, align 4, !tbaa !23, !alias.scope !43
  %broadcast.splatinsert790 = insertelement <4 x float> poison, float %98, i64 0
  %broadcast.splat791 = shufflevector <4 x float> %broadcast.splatinsert790, <4 x float> poison, <4 x i32> zeroinitializer
  %99 = fpext <4 x float> %broadcast.splat791 to <4 x double>
  br label %vector.body785

vector.body785:                                   ; preds = %vector.body785, %vector.ph781
  %index786 = phi i64 [ 0, %vector.ph781 ], [ %index.next793, %vector.body785 ]
  %100 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %index786
  %wide.load787 = load <4 x float>, ptr %100, align 16, !tbaa !23, !alias.scope !46
  %101 = fmul <4 x float> %broadcast.splat789, %wide.load787
  %102 = add nuw nsw i64 %index786, %15
  %103 = getelementptr inbounds float, ptr %66, i64 %102
  store <4 x float> %101, ptr %103, align 4, !tbaa !23, !alias.scope !48, !noalias !50
  %wide.load792 = load <4 x float>, ptr %100, align 16, !tbaa !23, !alias.scope !46
  %104 = fpext <4 x float> %wide.load792 to <4 x double>
  %105 = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %104
  %106 = fmul <4 x double> %105, %99
  %107 = fptrunc <4 x double> %106 to <4 x float>
  %108 = getelementptr inbounds float, ptr %65, i64 %102
  store <4 x float> %107, ptr %108, align 4, !tbaa !23, !alias.scope !52, !noalias !53
  %index.next793 = add nuw i64 %index786, 4
  %109 = icmp eq i64 %index.next793, %n.vec783
  br i1 %109, label %middle.block778, label %vector.body785, !llvm.loop !54

middle.block778:                                  ; preds = %vector.body785
  %cmp.n794 = icmp eq i64 %15, %n.vec783
  br i1 %cmp.n794, label %.preheader544, label %scalar.ph779.preheader

scalar.ph779.preheader:                           ; preds = %middle.block778, %vector.memcheck752, %._crit_edge558.us
  %.0495556.us.1.ph = phi i64 [ 0, %vector.memcheck752 ], [ 0, %._crit_edge558.us ], [ %n.vec783, %middle.block778 ]
  br label %scalar.ph779

scalar.ph779:                                     ; preds = %scalar.ph779.preheader, %scalar.ph779
  %.0495556.us.1 = phi i64 [ %124, %scalar.ph779 ], [ %.0495556.us.1.ph, %scalar.ph779.preheader ]
  %110 = load float, ptr %94, align 4, !tbaa !23
  %111 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %.0495556.us.1
  %112 = load float, ptr %111, align 4, !tbaa !23
  %113 = fmul float %110, %112
  %114 = add nuw nsw i64 %.0495556.us.1, %15
  %115 = getelementptr inbounds float, ptr %66, i64 %114
  store float %113, ptr %115, align 4, !tbaa !23
  %116 = load float, ptr %94, align 4, !tbaa !23
  %117 = fpext float %116 to double
  %118 = load float, ptr %111, align 4, !tbaa !23
  %119 = fpext float %118 to double
  %120 = fdiv double 1.000000e+00, %119
  %121 = fmul double %120, %117
  %122 = fptrunc double %121 to float
  %123 = getelementptr inbounds float, ptr %65, i64 %114
  store float %122, ptr %123, align 4, !tbaa !23
  %124 = add nuw nsw i64 %.0495556.us.1, 1
  %exitcond651.1.not = icmp eq i64 %124, %15
  br i1 %exitcond651.1.not, label %.preheader544, label %scalar.ph779, !llvm.loop !55

.preheader544:                                    ; preds = %scalar.ph779, %middle.block778
  br i1 %46, label %.lr.ph561, label %.preheader543

.preheader543:                                    ; preds = %.lr.ph561, %._crit_edge, %.preheader544
  %125 = icmp sgt i64 %13, 0
  br i1 %125, label %.lr.ph563, label %._crit_edge564

.lr.ph561:                                        ; preds = %.preheader544, %.lr.ph561
  %.2560 = phi i64 [ %128, %.lr.ph561 ], [ 0, %.preheader544 ]
  %126 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %.2560
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %126, i64 noundef %13, i64 noundef 501) #4
  %127 = getelementptr inbounds i8, ptr %126, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %127, i64 noundef %13, i64 noundef 501) #4
  %128 = add nuw nsw i64 %.2560, 1
  %exitcond652.not = icmp eq i64 %128, %15
  br i1 %exitcond652.not, label %.preheader543, label %.lr.ph561, !llvm.loop !56

.lr.ph563:                                        ; preds = %.preheader543, %.lr.ph563
  %.3562 = phi i64 [ %133, %.lr.ph563 ], [ 0, %.preheader543 ]
  %129 = mul nsw i64 %.3562, %15
  %130 = getelementptr inbounds float, ptr %19, i64 %129
  %131 = call i64 @gk_fargmax(i64 noundef %15, ptr noundef %130) #4
  %132 = getelementptr inbounds i64, ptr %39, i64 %.3562
  store i64 %131, ptr %132, align 8, !tbaa !57
  %133 = add nuw nsw i64 %.3562, 1
  %exitcond653.not = icmp eq i64 %133, %13
  br i1 %exitcond653.not, label %._crit_edge564, label %.lr.ph563, !llvm.loop !58

._crit_edge564:                                   ; preds = %.lr.ph563, %.preheader543
  %134 = getelementptr inbounds i8, ptr %0, i64 8
  %135 = load i64, ptr %134, align 8, !tbaa !59
  %136 = and i64 %135, 8
  %.not = icmp eq i64 %136, 0
  br i1 %.not, label %166, label %137

137:                                              ; preds = %._crit_edge564
  %138 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str) #4
  br i1 %46, label %.lr.ph567, label %._crit_edge568

.lr.ph567:                                        ; preds = %137
  %139 = getelementptr float, ptr %31, i64 %15
  br label %140

140:                                              ; preds = %.lr.ph567, %140
  %.0500565 = phi i64 [ 0, %.lr.ph567 ], [ %148, %140 ]
  %141 = getelementptr inbounds float, ptr %31, i64 %.0500565
  %142 = load float, ptr %141, align 4, !tbaa !23
  %143 = fpext float %142 to double
  %144 = getelementptr float, ptr %139, i64 %.0500565
  %145 = load float, ptr %144, align 4, !tbaa !23
  %146 = fpext float %145 to double
  %147 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %143, double noundef %146) #4
  %148 = add nuw nsw i64 %.0500565, 1
  %exitcond654.not = icmp eq i64 %148, %15
  br i1 %exitcond654.not, label %._crit_edge568, label %140, !llvm.loop !63

._crit_edge568:                                   ; preds = %140, %137
  %149 = load float, ptr %2, align 4, !tbaa !23
  %150 = fpext float %149 to double
  %151 = getelementptr inbounds i8, ptr %2, i64 4
  %152 = load float, ptr %151, align 4, !tbaa !23
  %153 = fpext float %152 to double
  %154 = load i64, ptr %1, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %1, i64 144
  %156 = load i64, ptr %155, align 8, !tbaa !64
  %157 = getelementptr inbounds i8, ptr %1, i64 112
  %158 = load i64, ptr %157, align 8, !tbaa !65
  %159 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, double noundef %150, double noundef %153, i64 noundef %154, i64 noundef %156, i64 noundef %158) #4
  br i1 %46, label %.lr.ph571, label %._crit_edge572

.lr.ph571:                                        ; preds = %._crit_edge568, %.lr.ph571
  %.4569 = phi i64 [ %164, %.lr.ph571 ], [ 0, %._crit_edge568 ]
  %160 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %.4569
  %161 = load float, ptr %160, align 4, !tbaa !23
  %162 = fpext float %161 to double
  %163 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, double noundef %162) #4
  %164 = add nuw nsw i64 %.4569, 1
  %exitcond655.not = icmp eq i64 %164, %15
  br i1 %exitcond655.not, label %._crit_edge572, label %.lr.ph571, !llvm.loop !66

._crit_edge572:                                   ; preds = %.lr.ph571, %._crit_edge568
  %165 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4) #4
  br label %166

166:                                              ; preds = %._crit_edge572, %._crit_edge564
  %167 = call ptr @libmetis__idxset(i64 noundef %13, i64 noundef -1, ptr noundef %36) #4
  %168 = icmp sgt i64 %4, 0
  br i1 %168, label %.preheader542.lr.ph, label %._crit_edge638

.preheader542.lr.ph:                              ; preds = %166
  %169 = getelementptr inbounds i8, ptr %1, i64 112
  %170 = getelementptr inbounds i8, ptr %1, i64 144
  %171 = getelementptr float, ptr %31, i64 %15
  %172 = shl nuw i64 %15, 2
  br label %.preheader542

.preheader542:                                    ; preds = %491, %.preheader542.lr.ph
  %.0514637 = phi i64 [ 0, %.preheader542.lr.ph ], [ %494, %491 ]
  br i1 %46, label %.lr.ph574, label %._crit_edge575

.lr.ph574:                                        ; preds = %.preheader542, %.lr.ph574
  %.5573 = phi i64 [ %175, %.lr.ph574 ], [ 0, %.preheader542 ]
  %173 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %.5573
  call void @libmetis__PQueueReset(ptr noundef nonnull %173) #4
  %174 = getelementptr inbounds i8, ptr %173, i64 88
  call void @libmetis__PQueueReset(ptr noundef nonnull %174) #4
  %175 = add nuw nsw i64 %.5573, 1
  %exitcond656.not = icmp eq i64 %175, %15
  br i1 %exitcond656.not, label %._crit_edge575, label %.lr.ph574, !llvm.loop !67

._crit_edge575:                                   ; preds = %.lr.ph574, %.preheader542
  %176 = load i64, ptr %169, align 8, !tbaa !65
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %9) #4
  %177 = load i64, ptr %170, align 8, !tbaa !64
  call void @libmetis__RandomPermute(i64 noundef %177, ptr noundef %38, i64 noundef 1) #4
  %178 = icmp sgt i64 %177, 0
  br i1 %178, label %.lr.ph578, label %.preheader540

.preheader540:                                    ; preds = %.lr.ph578, %._crit_edge575
  br i1 %125, label %.lr.ph601, label %.preheader

.lr.ph578:                                        ; preds = %._crit_edge575, %.lr.ph578
  %.0491576 = phi i64 [ %194, %.lr.ph578 ], [ 0, %._crit_edge575 ]
  %179 = getelementptr inbounds i64, ptr %38, i64 %.0491576
  %180 = load i64, ptr %179, align 8, !tbaa !57
  %181 = getelementptr inbounds i64, ptr %35, i64 %180
  %182 = load i64, ptr %181, align 8, !tbaa !57
  %183 = getelementptr inbounds i64, ptr %39, i64 %182
  %184 = load i64, ptr %183, align 8, !tbaa !57
  %185 = getelementptr inbounds i64, ptr %25, i64 %182
  %186 = load i64, ptr %185, align 8, !tbaa !57
  %187 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %184, i64 %186
  %188 = getelementptr inbounds i64, ptr %29, i64 %182
  %189 = load i64, ptr %188, align 8, !tbaa !57
  %190 = getelementptr inbounds i64, ptr %27, i64 %182
  %191 = load i64, ptr %190, align 8, !tbaa !57
  %192 = sub nsw i64 %189, %191
  %193 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %187, i64 noundef %182, i64 noundef %192) #4
  %194 = add nuw nsw i64 %.0491576, 1
  %exitcond657.not = icmp eq i64 %194, %177
  br i1 %exitcond657.not, label %.preheader540, label %.lr.ph578, !llvm.loop !68

.lr.ph601:                                        ; preds = %.preheader540, %._crit_edge594
  %.0492600 = phi i64 [ %.1493, %._crit_edge594 ], [ -1, %.preheader540 ]
  %.0494599 = phi i64 [ %209, %._crit_edge594 ], [ %176, %.preheader540 ]
  %.0498598 = phi i64 [ %.1499, %._crit_edge594 ], [ %176, %.preheader540 ]
  %.0503596 = phi i64 [ %.2505.lcssa, %._crit_edge594 ], [ %177, %.preheader540 ]
  %.0512595 = phi i64 [ %360, %._crit_edge594 ], [ 0, %.preheader540 ]
  call void @libmetis__SelectQueue2(i64 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %66)
  %195 = load i64, ptr %6, align 8, !tbaa !57
  %196 = add nsw i64 %195, 1
  %197 = srem i64 %196, 2
  %198 = icmp eq i64 %195, -1
  br i1 %198, label %.loopexit541, label %199

199:                                              ; preds = %.lr.ph601
  %200 = load i64, ptr %7, align 8, !tbaa !57
  %201 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %200, i64 %195
  %202 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %201) #4
  %203 = icmp eq i64 %202, -1
  br i1 %203, label %.loopexit541, label %204

204:                                              ; preds = %199
  %205 = getelementptr inbounds i64, ptr %29, i64 %202
  %206 = load i64, ptr %205, align 8, !tbaa !57
  %207 = getelementptr inbounds i64, ptr %27, i64 %202
  %208 = load i64, ptr %207, align 8, !tbaa !57
  %.neg = sub i64 %208, %206
  %209 = add i64 %.neg, %.0494599
  %210 = mul nsw i64 %202, %15
  %211 = getelementptr inbounds float, ptr %19, i64 %210
  %212 = mul nsw i64 %197, %15
  %213 = getelementptr inbounds float, ptr %31, i64 %212
  %214 = call ptr @gk_faxpy(i64 noundef %15, float noundef 1.000000e+00, ptr noundef %211, i64 noundef 1, ptr noundef %213, i64 noundef 1) #4
  %215 = load i64, ptr %6, align 8, !tbaa !57
  %216 = mul nsw i64 %215, %15
  %217 = getelementptr inbounds float, ptr %31, i64 %216
  %218 = call ptr @gk_faxpy(i64 noundef %15, float noundef -1.000000e+00, ptr noundef %211, i64 noundef 1, ptr noundef %217, i64 noundef 1) #4
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %12) #4
  %219 = icmp slt i64 %209, %.0498598
  br i1 %219, label %220, label %222

220:                                              ; preds = %204
  %221 = call i64 @libmetis__AreAllBelow(i64 noundef %15, ptr noundef nonnull %12, ptr noundef nonnull %11) #4
  %.not527 = icmp eq i64 %221, 0
  br i1 %.not527, label %222, label %226

222:                                              ; preds = %220, %204
  %223 = icmp eq i64 %209, %.0498598
  br i1 %223, label %224, label %227

224:                                              ; preds = %222
  %225 = call i64 @libmetis__IsBetter2wayBalance(i64 noundef %15, ptr noundef nonnull %12, ptr noundef nonnull %9, ptr noundef nonnull %11)
  %.not528 = icmp eq i64 %225, 0
  br i1 %.not528, label %227, label %226

226:                                              ; preds = %224, %220
  br i1 %46, label %.lr.ph581.preheader, label %.loopexit539

.lr.ph581.preheader:                              ; preds = %226
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %9, ptr nonnull align 16 %12, i64 %172, i1 false), !tbaa !23
  br label %.loopexit539

227:                                              ; preds = %224, %222
  %228 = sub nsw i64 %.0512595, %.0492600
  %229 = icmp sgt i64 %228, %45
  br i1 %229, label %230, label %.loopexit539

230:                                              ; preds = %227
  %231 = load i64, ptr %6, align 8, !tbaa !57
  %232 = mul nsw i64 %231, %15
  %233 = getelementptr inbounds float, ptr %31, i64 %232
  %234 = call ptr @gk_faxpy(i64 noundef %15, float noundef 1.000000e+00, ptr noundef %211, i64 noundef 1, ptr noundef %233, i64 noundef 1) #4
  %235 = call ptr @gk_faxpy(i64 noundef %15, float noundef -1.000000e+00, ptr noundef %211, i64 noundef 1, ptr noundef %213, i64 noundef 1) #4
  br label %.loopexit541

.loopexit539:                                     ; preds = %.lr.ph581.preheader, %226, %227
  %.1499 = phi i64 [ %.0498598, %227 ], [ %209, %226 ], [ %209, %.lr.ph581.preheader ]
  %.1493 = phi i64 [ %.0492600, %227 ], [ %.0512595, %226 ], [ %.0512595, %.lr.ph581.preheader ]
  %236 = getelementptr inbounds i64, ptr %25, i64 %202
  store i64 %197, ptr %236, align 8, !tbaa !57
  %237 = getelementptr inbounds i64, ptr %36, i64 %202
  store i64 %.0512595, ptr %237, align 8, !tbaa !57
  %238 = getelementptr inbounds i64, ptr %37, i64 %.0512595
  store i64 %202, ptr %238, align 8, !tbaa !57
  %239 = load i64, ptr %134, align 8, !tbaa !59
  %240 = and i64 %239, 32
  %.not529 = icmp eq i64 %240, 0
  br i1 %.not529, label %265, label %241

241:                                              ; preds = %.loopexit539
  %242 = load i64, ptr %6, align 8, !tbaa !57
  %243 = load i64, ptr %7, align 8, !tbaa !57
  %244 = load i64, ptr %205, align 8, !tbaa !57
  %245 = load i64, ptr %207, align 8, !tbaa !57
  %246 = sub nsw i64 %244, %245
  %247 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %202, i64 noundef %242, i64 noundef %243, i64 noundef %246, i64 noundef %209) #4
  br i1 %46, label %.lr.ph584, label %._crit_edge585.thread

._crit_edge585.thread:                            ; preds = %241
  %248 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6) #4
  br label %._crit_edge589

.lr.ph584:                                        ; preds = %241, %.lr.ph584
  %.1501582 = phi i64 [ %256, %.lr.ph584 ], [ 0, %241 ]
  %249 = getelementptr inbounds float, ptr %31, i64 %.1501582
  %250 = load float, ptr %249, align 4, !tbaa !23
  %251 = fpext float %250 to double
  %252 = getelementptr float, ptr %171, i64 %.1501582
  %253 = load float, ptr %252, align 4, !tbaa !23
  %254 = fpext float %253 to double
  %255 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %251, double noundef %254) #4
  %256 = add nuw nsw i64 %.1501582, 1
  %exitcond658.not = icmp eq i64 %256, %15
  br i1 %exitcond658.not, label %._crit_edge585, label %.lr.ph584, !llvm.loop !69

._crit_edge585:                                   ; preds = %.lr.ph584
  %257 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6) #4
  br i1 %46, label %.lr.ph588, label %._crit_edge589

.lr.ph588:                                        ; preds = %._crit_edge585, %.lr.ph588
  %.7586 = phi i64 [ %262, %.lr.ph588 ], [ 0, %._crit_edge585 ]
  %258 = getelementptr inbounds [16 x float], ptr %12, i64 0, i64 %.7586
  %259 = load float, ptr %258, align 4, !tbaa !23
  %260 = fpext float %259 to double
  %261 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, double noundef %260) #4
  %262 = add nuw nsw i64 %.7586, 1
  %exitcond659.not = icmp eq i64 %262, %15
  br i1 %exitcond659.not, label %._crit_edge589, label %.lr.ph588, !llvm.loop !70

._crit_edge589:                                   ; preds = %.lr.ph588, %._crit_edge585.thread, %._crit_edge585
  %263 = icmp eq i64 %.1493, %.0512595
  %.str.7..str.4 = select i1 %263, ptr @.str.7, ptr @.str.4
  %264 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull %.str.7..str.4) #4
  br label %265

265:                                              ; preds = %._crit_edge589, %.loopexit539
  %266 = load i64, ptr %207, align 8, !tbaa !57
  %267 = load i64, ptr %205, align 8, !tbaa !57
  store i64 %267, ptr %207, align 8, !tbaa !57
  store i64 %266, ptr %205, align 8, !tbaa !57
  %268 = icmp eq i64 %266, 0
  br i1 %268, label %269, label %284

269:                                              ; preds = %265
  %270 = getelementptr inbounds i64, ptr %17, i64 %202
  %271 = load i64, ptr %270, align 8, !tbaa !57
  %272 = getelementptr i8, ptr %270, i64 8
  %273 = load i64, ptr %272, align 8, !tbaa !57
  %274 = icmp slt i64 %271, %273
  br i1 %274, label %275, label %284

275:                                              ; preds = %269
  %276 = add nsw i64 %.0503596, -1
  %277 = getelementptr inbounds i64, ptr %35, i64 %276
  %278 = load i64, ptr %277, align 8, !tbaa !57
  %279 = getelementptr inbounds i64, ptr %33, i64 %202
  %280 = load i64, ptr %279, align 8, !tbaa !57
  %281 = getelementptr inbounds i64, ptr %35, i64 %280
  store i64 %278, ptr %281, align 8, !tbaa !57
  %282 = load i64, ptr %279, align 8, !tbaa !57
  %283 = getelementptr inbounds i64, ptr %33, i64 %278
  store i64 %282, ptr %283, align 8, !tbaa !57
  store i64 -1, ptr %279, align 8, !tbaa !57
  br label %284

284:                                              ; preds = %275, %269, %265
  %.1504 = phi i64 [ %276, %275 ], [ %.0503596, %269 ], [ %.0503596, %265 ]
  %285 = getelementptr inbounds i64, ptr %17, i64 %202
  %286 = load i64, ptr %285, align 8, !tbaa !57
  %287 = getelementptr i8, ptr %285, i64 8
  %288 = load i64, ptr %287, align 8, !tbaa !57
  %289 = icmp slt i64 %286, %288
  br i1 %289, label %.lr.ph593, label %._crit_edge594

.lr.ph593:                                        ; preds = %284, %356
  %.1496591 = phi i64 [ %357, %356 ], [ %286, %284 ]
  %.2505590 = phi i64 [ %.3506, %356 ], [ %.1504, %284 ]
  %290 = getelementptr inbounds i64, ptr %21, i64 %.1496591
  %291 = load i64, ptr %290, align 8, !tbaa !57
  %292 = getelementptr inbounds i64, ptr %29, i64 %291
  %293 = load i64, ptr %292, align 8, !tbaa !57
  %294 = getelementptr inbounds i64, ptr %27, i64 %291
  %295 = load i64, ptr %294, align 8, !tbaa !57
  %296 = sub nsw i64 %293, %295
  %297 = getelementptr inbounds i64, ptr %25, i64 %291
  %298 = load i64, ptr %297, align 8, !tbaa !57
  %299 = icmp eq i64 %197, %298
  %300 = getelementptr inbounds i64, ptr %23, i64 %.1496591
  %301 = load i64, ptr %300, align 8, !tbaa !57
  %302 = sub nsw i64 0, %301
  %303 = select i1 %299, i64 %301, i64 %302
  %304 = add nsw i64 %303, %295
  store i64 %304, ptr %294, align 8, !tbaa !57
  %305 = load i64, ptr %292, align 8, !tbaa !57
  %306 = sub nsw i64 %305, %303
  store i64 %306, ptr %292, align 8, !tbaa !57
  %307 = getelementptr inbounds i64, ptr %33, i64 %291
  %308 = load i64, ptr %307, align 8, !tbaa !57
  %.not530 = icmp eq i64 %308, -1
  br i1 %.not530, label %339, label %309

309:                                              ; preds = %.lr.ph593
  %310 = icmp eq i64 %305, %303
  br i1 %310, label %311, label %327

311:                                              ; preds = %309
  %312 = add nsw i64 %.2505590, -1
  %313 = getelementptr inbounds i64, ptr %35, i64 %312
  %314 = load i64, ptr %313, align 8, !tbaa !57
  %315 = getelementptr inbounds i64, ptr %35, i64 %308
  store i64 %314, ptr %315, align 8, !tbaa !57
  %316 = load i64, ptr %307, align 8, !tbaa !57
  %317 = getelementptr inbounds i64, ptr %33, i64 %314
  store i64 %316, ptr %317, align 8, !tbaa !57
  store i64 -1, ptr %307, align 8, !tbaa !57
  %318 = getelementptr inbounds i64, ptr %36, i64 %291
  %319 = load i64, ptr %318, align 8, !tbaa !57
  %320 = icmp eq i64 %319, -1
  br i1 %320, label %321, label %356

321:                                              ; preds = %311
  %322 = getelementptr inbounds i64, ptr %39, i64 %291
  %323 = load i64, ptr %322, align 8, !tbaa !57
  %324 = load i64, ptr %297, align 8, !tbaa !57
  %325 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %323, i64 %324
  %326 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %325, i64 noundef %291, i64 noundef %296) #4
  br label %356

327:                                              ; preds = %309
  %328 = getelementptr inbounds i64, ptr %36, i64 %291
  %329 = load i64, ptr %328, align 8, !tbaa !57
  %330 = icmp eq i64 %329, -1
  br i1 %330, label %331, label %356

331:                                              ; preds = %327
  %332 = getelementptr inbounds i64, ptr %39, i64 %291
  %333 = load i64, ptr %332, align 8, !tbaa !57
  %334 = load i64, ptr %297, align 8, !tbaa !57
  %335 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %333, i64 %334
  %336 = load i64, ptr %294, align 8, !tbaa !57
  %337 = sub nsw i64 %306, %336
  %338 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %335, i64 noundef %291, i64 noundef %296, i64 noundef %337) #4
  br label %356

339:                                              ; preds = %.lr.ph593
  %340 = icmp sgt i64 %306, 0
  br i1 %340, label %341, label %356

341:                                              ; preds = %339
  %342 = getelementptr inbounds i64, ptr %35, i64 %.2505590
  store i64 %291, ptr %342, align 8, !tbaa !57
  %343 = add nsw i64 %.2505590, 1
  store i64 %.2505590, ptr %307, align 8, !tbaa !57
  %344 = getelementptr inbounds i64, ptr %36, i64 %291
  %345 = load i64, ptr %344, align 8, !tbaa !57
  %346 = icmp eq i64 %345, -1
  br i1 %346, label %347, label %356

347:                                              ; preds = %341
  %348 = getelementptr inbounds i64, ptr %39, i64 %291
  %349 = load i64, ptr %348, align 8, !tbaa !57
  %350 = load i64, ptr %297, align 8, !tbaa !57
  %351 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %349, i64 %350
  %352 = load i64, ptr %292, align 8, !tbaa !57
  %353 = load i64, ptr %294, align 8, !tbaa !57
  %354 = sub nsw i64 %352, %353
  %355 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %351, i64 noundef %291, i64 noundef %354) #4
  br label %356

356:                                              ; preds = %327, %331, %311, %321, %341, %347, %339
  %.3506 = phi i64 [ %312, %321 ], [ %312, %311 ], [ %.2505590, %331 ], [ %.2505590, %327 ], [ %343, %347 ], [ %343, %341 ], [ %.2505590, %339 ]
  %357 = add nsw i64 %.1496591, 1
  %358 = load i64, ptr %287, align 8, !tbaa !57
  %359 = icmp slt i64 %357, %358
  br i1 %359, label %.lr.ph593, label %._crit_edge594, !llvm.loop !71

._crit_edge594:                                   ; preds = %356, %284
  %.2505.lcssa = phi i64 [ %.1504, %284 ], [ %.3506, %356 ]
  %360 = add nuw nsw i64 %.0512595, 1
  %exitcond660.not = icmp eq i64 %360, %13
  br i1 %exitcond660.not, label %.lr.ph618.preheader, label %.lr.ph601, !llvm.loop !72

.loopexit541:                                     ; preds = %199, %.lr.ph601, %230
  %.not644 = icmp eq i64 %.0512595, 0
  br i1 %.not644, label %.preheader, label %.lr.ph618.preheader

.lr.ph618.preheader:                              ; preds = %._crit_edge594, %.loopexit541
  %.0492547684 = phi i64 [ %.0492600, %.loopexit541 ], [ %.1493, %._crit_edge594 ]
  %.0498549683 = phi i64 [ %.0498598, %.loopexit541 ], [ %.1499, %._crit_edge594 ]
  %.0503551682 = phi i64 [ %.0503596, %.loopexit541 ], [ %.2505.lcssa, %._crit_edge594 ]
  %.0512553681 = phi i64 [ %.0512595, %.loopexit541 ], [ %13, %._crit_edge594 ]
  %xtraiter = and i64 %.0512553681, 3
  %361 = icmp ult i64 %.0512553681, 4
  br i1 %361, label %.preheader.loopexit.unr-lcssa, label %.lr.ph618.preheader.new

.lr.ph618.preheader.new:                          ; preds = %.lr.ph618.preheader
  %unroll_iter = and i64 %.0512553681, 9223372036854775804
  br label %.lr.ph618

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph618, %.lr.ph618.preheader
  %.8616.unr = phi i64 [ 0, %.lr.ph618.preheader ], [ %382, %.lr.ph618 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.lr.ph618.epil

.lr.ph618.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph618.epil
  %.8616.epil = phi i64 [ %365, %.lr.ph618.epil ], [ %.8616.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph618.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %362 = getelementptr inbounds i64, ptr %37, i64 %.8616.epil
  %363 = load i64, ptr %362, align 8, !tbaa !57
  %364 = getelementptr inbounds i64, ptr %36, i64 %363
  store i64 -1, ptr %364, align 8, !tbaa !57
  %365 = add nuw nsw i64 %.8616.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph618.epil, !llvm.loop !73

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph618.epil, %.preheader540, %.loopexit541
  %.0492547674 = phi i64 [ %.0492600, %.loopexit541 ], [ -1, %.preheader540 ], [ %.0492547684, %.lr.ph618.epil ], [ %.0492547684, %.preheader.loopexit.unr-lcssa ]
  %.0498549673 = phi i64 [ %.0498598, %.loopexit541 ], [ %176, %.preheader540 ], [ %.0498549683, %.lr.ph618.epil ], [ %.0498549683, %.preheader.loopexit.unr-lcssa ]
  %.0503551672 = phi i64 [ %.0503596, %.loopexit541 ], [ %177, %.preheader540 ], [ %.0503551682, %.lr.ph618.epil ], [ %.0503551682, %.preheader.loopexit.unr-lcssa ]
  %.0512553671 = phi i64 [ 0, %.loopexit541 ], [ 0, %.preheader540 ], [ %.0512553681, %.lr.ph618.epil ], [ %.0512553681, %.preheader.loopexit.unr-lcssa ]
  %.1513623 = add nsw i64 %.0512553671, -1
  %366 = icmp sgt i64 %.1513623, %.0492547674
  br i1 %366, label %.lr.ph626, label %._crit_edge627

.lr.ph618:                                        ; preds = %.lr.ph618, %.lr.ph618.preheader.new
  %.8616 = phi i64 [ 0, %.lr.ph618.preheader.new ], [ %382, %.lr.ph618 ]
  %niter = phi i64 [ 0, %.lr.ph618.preheader.new ], [ %niter.next.3, %.lr.ph618 ]
  %367 = getelementptr inbounds i64, ptr %37, i64 %.8616
  %368 = load i64, ptr %367, align 8, !tbaa !57
  %369 = getelementptr inbounds i64, ptr %36, i64 %368
  store i64 -1, ptr %369, align 8, !tbaa !57
  %370 = or disjoint i64 %.8616, 1
  %371 = getelementptr inbounds i64, ptr %37, i64 %370
  %372 = load i64, ptr %371, align 8, !tbaa !57
  %373 = getelementptr inbounds i64, ptr %36, i64 %372
  store i64 -1, ptr %373, align 8, !tbaa !57
  %374 = or disjoint i64 %.8616, 2
  %375 = getelementptr inbounds i64, ptr %37, i64 %374
  %376 = load i64, ptr %375, align 8, !tbaa !57
  %377 = getelementptr inbounds i64, ptr %36, i64 %376
  store i64 -1, ptr %377, align 8, !tbaa !57
  %378 = or disjoint i64 %.8616, 3
  %379 = getelementptr inbounds i64, ptr %37, i64 %378
  %380 = load i64, ptr %379, align 8, !tbaa !57
  %381 = getelementptr inbounds i64, ptr %36, i64 %380
  store i64 -1, ptr %381, align 8, !tbaa !57
  %382 = add nuw nsw i64 %.8616, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph618, !llvm.loop !75

.loopexit:                                        ; preds = %467, %.thread
  %.6509.lcssa = phi i64 [ %.5508, %.thread ], [ %.8511, %467 ]
  %.1513 = add nsw i64 %.1513625, -1
  %383 = icmp sgt i64 %.1513, %.0492547674
  br i1 %383, label %.lr.ph626, label %._crit_edge627, !llvm.loop !76

.lr.ph626:                                        ; preds = %.preheader, %.loopexit
  %.1513625 = phi i64 [ %.1513, %.loopexit ], [ %.1513623, %.preheader ]
  %.4507624 = phi i64 [ %.6509.lcssa, %.loopexit ], [ %.0503551672, %.preheader ]
  %384 = getelementptr inbounds i64, ptr %37, i64 %.1513625
  %385 = load i64, ptr %384, align 8, !tbaa !57
  %386 = getelementptr inbounds i64, ptr %25, i64 %385
  %387 = load i64, ptr %386, align 8, !tbaa !57
  %388 = add nsw i64 %387, 1
  %389 = srem i64 %388, 2
  store i64 %389, ptr %386, align 8, !tbaa !57
  %390 = getelementptr inbounds i64, ptr %27, i64 %385
  %391 = load i64, ptr %390, align 8, !tbaa !57
  %392 = getelementptr inbounds i64, ptr %29, i64 %385
  %393 = load i64, ptr %392, align 8, !tbaa !57
  store i64 %393, ptr %390, align 8, !tbaa !57
  store i64 %391, ptr %392, align 8, !tbaa !57
  %394 = icmp eq i64 %391, 0
  br i1 %394, label %395, label %411

395:                                              ; preds = %.lr.ph626
  %396 = getelementptr inbounds i64, ptr %33, i64 %385
  %397 = load i64, ptr %396, align 8, !tbaa !57
  %.not532 = icmp eq i64 %397, -1
  br i1 %.not532, label %.thread, label %398

398:                                              ; preds = %395
  %399 = getelementptr inbounds i64, ptr %17, i64 %385
  %400 = load i64, ptr %399, align 8, !tbaa !57
  %401 = getelementptr i8, ptr %399, i64 8
  %402 = load i64, ptr %401, align 8, !tbaa !57
  %403 = icmp slt i64 %400, %402
  br i1 %403, label %404, label %.thread

404:                                              ; preds = %398
  %405 = add nsw i64 %.4507624, -1
  %406 = getelementptr inbounds i64, ptr %35, i64 %405
  %407 = load i64, ptr %406, align 8, !tbaa !57
  %408 = getelementptr inbounds i64, ptr %35, i64 %397
  store i64 %407, ptr %408, align 8, !tbaa !57
  %409 = load i64, ptr %396, align 8, !tbaa !57
  %410 = getelementptr inbounds i64, ptr %33, i64 %407
  store i64 %409, ptr %410, align 8, !tbaa !57
  store i64 -1, ptr %396, align 8, !tbaa !57
  br label %.thread

411:                                              ; preds = %.lr.ph626
  %412 = icmp sgt i64 %391, 0
  br i1 %412, label %413, label %.thread

413:                                              ; preds = %411
  %414 = getelementptr inbounds i64, ptr %33, i64 %385
  %415 = load i64, ptr %414, align 8, !tbaa !57
  %416 = icmp eq i64 %415, -1
  br i1 %416, label %417, label %.thread

417:                                              ; preds = %413
  %418 = getelementptr inbounds i64, ptr %35, i64 %.4507624
  store i64 %385, ptr %418, align 8, !tbaa !57
  %419 = add nsw i64 %.4507624, 1
  store i64 %.4507624, ptr %414, align 8, !tbaa !57
  br label %.thread

.thread:                                          ; preds = %395, %398, %411, %413, %417, %404
  %.5508 = phi i64 [ %405, %404 ], [ %419, %417 ], [ %.4507624, %413 ], [ %.4507624, %411 ], [ %.4507624, %398 ], [ %.4507624, %395 ]
  %420 = mul nsw i64 %385, %15
  %421 = getelementptr inbounds float, ptr %19, i64 %420
  %422 = mul nsw i64 %389, %15
  %423 = getelementptr inbounds float, ptr %31, i64 %422
  %424 = call ptr @gk_faxpy(i64 noundef %15, float noundef 1.000000e+00, ptr noundef %421, i64 noundef 1, ptr noundef %423, i64 noundef 1) #4
  %425 = and i64 %389, 1
  %426 = xor i64 %425, 1
  %427 = mul nuw nsw i64 %426, %15
  %428 = getelementptr inbounds float, ptr %31, i64 %427
  %429 = call ptr @gk_faxpy(i64 noundef %15, float noundef -1.000000e+00, ptr noundef %421, i64 noundef 1, ptr noundef %428, i64 noundef 1) #4
  %430 = getelementptr inbounds i64, ptr %17, i64 %385
  %431 = load i64, ptr %430, align 8, !tbaa !57
  %432 = getelementptr i8, ptr %430, i64 8
  %433 = load i64, ptr %432, align 8, !tbaa !57
  %434 = icmp slt i64 %431, %433
  br i1 %434, label %.lr.ph621, label %.loopexit

.lr.ph621:                                        ; preds = %.thread, %467
  %.2497620 = phi i64 [ %468, %467 ], [ %431, %.thread ]
  %.6509619 = phi i64 [ %.8511, %467 ], [ %.5508, %.thread ]
  %435 = getelementptr inbounds i64, ptr %21, i64 %.2497620
  %436 = load i64, ptr %435, align 8, !tbaa !57
  %437 = getelementptr inbounds i64, ptr %25, i64 %436
  %438 = load i64, ptr %437, align 8, !tbaa !57
  %439 = icmp eq i64 %389, %438
  %440 = getelementptr inbounds i64, ptr %23, i64 %.2497620
  %441 = load i64, ptr %440, align 8, !tbaa !57
  %442 = sub nsw i64 0, %441
  %443 = select i1 %439, i64 %441, i64 %442
  %444 = getelementptr inbounds i64, ptr %27, i64 %436
  %445 = load i64, ptr %444, align 8, !tbaa !57
  %446 = add nsw i64 %445, %443
  store i64 %446, ptr %444, align 8, !tbaa !57
  %447 = getelementptr inbounds i64, ptr %29, i64 %436
  %448 = load i64, ptr %447, align 8, !tbaa !57
  %449 = sub nsw i64 %448, %443
  store i64 %449, ptr %447, align 8, !tbaa !57
  %450 = getelementptr inbounds i64, ptr %33, i64 %436
  %451 = load i64, ptr %450, align 8, !tbaa !57
  %.not533 = icmp ne i64 %451, -1
  %452 = icmp eq i64 %448, %443
  %or.cond = select i1 %.not533, i1 %452, i1 false
  br i1 %or.cond, label %.thread535, label %459

.thread535:                                       ; preds = %.lr.ph621
  %453 = add nsw i64 %.6509619, -1
  %454 = getelementptr inbounds i64, ptr %35, i64 %453
  %455 = load i64, ptr %454, align 8, !tbaa !57
  %456 = getelementptr inbounds i64, ptr %35, i64 %451
  store i64 %455, ptr %456, align 8, !tbaa !57
  %457 = load i64, ptr %450, align 8, !tbaa !57
  %458 = getelementptr inbounds i64, ptr %33, i64 %455
  store i64 %457, ptr %458, align 8, !tbaa !57
  store i64 -1, ptr %450, align 8, !tbaa !57
  %.pre = load i64, ptr %447, align 8, !tbaa !57
  br label %461

459:                                              ; preds = %.lr.ph621
  %460 = icmp eq i64 %451, -1
  br i1 %460, label %461, label %467

461:                                              ; preds = %.thread535, %459
  %462 = phi i64 [ %.pre, %.thread535 ], [ %449, %459 ]
  %.7510537 = phi i64 [ %453, %.thread535 ], [ %.6509619, %459 ]
  %463 = icmp sgt i64 %462, 0
  br i1 %463, label %464, label %467

464:                                              ; preds = %461
  %465 = getelementptr inbounds i64, ptr %35, i64 %.7510537
  store i64 %436, ptr %465, align 8, !tbaa !57
  %466 = add nsw i64 %.7510537, 1
  store i64 %.7510537, ptr %450, align 8, !tbaa !57
  br label %467

467:                                              ; preds = %459, %461, %464
  %.8511 = phi i64 [ %466, %464 ], [ %.7510537, %461 ], [ %.6509619, %459 ]
  %468 = add nsw i64 %.2497620, 1
  %469 = load i64, ptr %432, align 8, !tbaa !57
  %470 = icmp slt i64 %468, %469
  br i1 %470, label %.lr.ph621, label %.loopexit, !llvm.loop !77

._crit_edge627:                                   ; preds = %.loopexit, %.preheader
  %.4507.lcssa = phi i64 [ %.0503551672, %.preheader ], [ %.6509.lcssa, %.loopexit ]
  %471 = load i64, ptr %134, align 8, !tbaa !59
  %472 = and i64 %471, 8
  %.not531 = icmp eq i64 %472, 0
  br i1 %.not531, label %491, label %473

473:                                              ; preds = %._crit_edge627
  %474 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.8, i64 noundef %.0498549673, i64 noundef %.0492547674, i64 noundef %.4507.lcssa) #4
  br i1 %46, label %.lr.ph631, label %._crit_edge636.critedge

.lr.ph631:                                        ; preds = %473, %.lr.ph631
  %.2502629 = phi i64 [ %482, %.lr.ph631 ], [ 0, %473 ]
  %475 = getelementptr inbounds float, ptr %31, i64 %.2502629
  %476 = load float, ptr %475, align 4, !tbaa !23
  %477 = fpext float %476 to double
  %478 = getelementptr float, ptr %171, i64 %.2502629
  %479 = load float, ptr %478, align 4, !tbaa !23
  %480 = fpext float %479 to double
  %481 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %477, double noundef %480) #4
  %482 = add nuw nsw i64 %.2502629, 1
  %exitcond662.not = icmp eq i64 %482, %15
  br i1 %exitcond662.not, label %._crit_edge632, label %.lr.ph631, !llvm.loop !78

._crit_edge632:                                   ; preds = %.lr.ph631
  %483 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.9) #4
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %12) #4
  br i1 %46, label %.lr.ph635, label %._crit_edge636

.lr.ph635:                                        ; preds = %._crit_edge632, %.lr.ph635
  %.9633 = phi i64 [ %488, %.lr.ph635 ], [ 0, %._crit_edge632 ]
  %484 = getelementptr inbounds [16 x float], ptr %12, i64 0, i64 %.9633
  %485 = load float, ptr %484, align 4, !tbaa !23
  %486 = fpext float %485 to double
  %487 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, double noundef %486) #4
  %488 = add nuw nsw i64 %.9633, 1
  %exitcond663.not = icmp eq i64 %488, %15
  br i1 %exitcond663.not, label %._crit_edge636, label %.lr.ph635, !llvm.loop !79

._crit_edge636.critedge:                          ; preds = %473
  %489 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.9) #4
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %12) #4
  br label %._crit_edge636

._crit_edge636:                                   ; preds = %.lr.ph635, %._crit_edge636.critedge, %._crit_edge632
  %490 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4) #4
  br label %491

491:                                              ; preds = %._crit_edge636, %._crit_edge627
  store i64 %.0498549673, ptr %169, align 8, !tbaa !65
  store i64 %.4507.lcssa, ptr %170, align 8, !tbaa !64
  %492 = icmp eq i64 %.0492547674, -1
  %493 = icmp eq i64 %.0498549673, %176
  %or.cond534 = select i1 %492, i1 true, i1 %493
  %494 = add nuw nsw i64 %.0514637, 1
  %exitcond664.not = icmp eq i64 %494, %4
  %or.cond700 = select i1 %or.cond534, i1 true, i1 %exitcond664.not
  br i1 %or.cond700, label %._crit_edge638, label %.preheader542, !llvm.loop !80

._crit_edge638:                                   ; preds = %491, %166
  br i1 %46, label %.lr.ph642, label %._crit_edge643

.lr.ph642:                                        ; preds = %._crit_edge638, %.lr.ph642
  %.10640 = phi i64 [ %497, %.lr.ph642 ], [ 0, %._crit_edge638 ]
  %495 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %.10640
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %495) #4
  %496 = getelementptr inbounds i8, ptr %495, i64 88
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %496) #4
  %497 = add nuw nsw i64 %.10640, 1
  %exitcond665.not = icmp eq i64 %497, %15
  br i1 %exitcond665.not, label %._crit_edge643, label %.lr.ph642, !llvm.loop !81

._crit_edge643:                                   ; preds = %.lr.ph642, %._crit_edge638
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %13) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %13) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %13) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %13) #4
  call void @fwspacefree(ptr noundef %0, i64 noundef %64) #4
  call void @fwspacefree(ptr noundef %0, i64 noundef %64) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 2816, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  ret void
}

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

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

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

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

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

declare i64 @gk_fargmax(i64 noundef, ptr 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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #2

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

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

declare void @fwspacefree(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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !7, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !7, i64 208}
!13 = !{!6, !10, i64 16}
!14 = !{!6, !10, i64 216}
!15 = !{!6, !10, i64 40}
!16 = !{!6, !10, i64 48}
!17 = !{!6, !10, i64 128}
!18 = !{!6, !10, i64 168}
!19 = !{!6, !10, i64 176}
!20 = !{!6, !10, i64 224}
!21 = !{!6, !10, i64 152}
!22 = !{!6, !10, i64 160}
!23 = !{!24, !24, i64 0}
!24 = !{!"float", !8, i64 0}
!25 = distinct !{!25, !26, !27, !28}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !26, !28, !27}
!30 = !{!31}
!31 = distinct !{!31, !32}
!32 = distinct !{!32, !"LVerDomain"}
!33 = !{!34}
!34 = distinct !{!34, !32}
!35 = !{!36}
!36 = distinct !{!36, !32}
!37 = !{!38, !31, !34}
!38 = distinct !{!38, !32}
!39 = !{!38}
!40 = !{!31, !34}
!41 = distinct !{!41, !26, !27, !28}
!42 = distinct !{!42, !26, !27}
!43 = !{!44}
!44 = distinct !{!44, !45}
!45 = distinct !{!45, !"LVerDomain"}
!46 = !{!47}
!47 = distinct !{!47, !45}
!48 = !{!49}
!49 = distinct !{!49, !45}
!50 = !{!51, !44, !47}
!51 = distinct !{!51, !45}
!52 = !{!51}
!53 = !{!44, !47}
!54 = distinct !{!54, !26, !27, !28}
!55 = distinct !{!55, !26, !27}
!56 = distinct !{!56, !26}
!57 = !{!7, !7, i64 0}
!58 = distinct !{!58, !26}
!59 = !{!60, !7, i64 8}
!60 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !24, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !61, i64 88, !62, i64 152, !62, i64 160, !62, i64 168, !62, i64 176, !62, i64 184, !62, i64 192, !62, i64 200, !62, i64 208, !62, i64 216, !62, i64 224, !62, i64 232, !62, i64 240, !62, i64 248, !62, i64 256, !62, i64 264, !62, i64 272}
!61 = !{!"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}
!62 = !{!"double", !8, i64 0}
!63 = distinct !{!63, !26}
!64 = !{!6, !7, i64 144}
!65 = !{!6, !7, i64 112}
!66 = distinct !{!66, !26}
!67 = distinct !{!67, !26}
!68 = distinct !{!68, !26}
!69 = distinct !{!69, !26}
!70 = distinct !{!70, !26}
!71 = distinct !{!71, !26}
!72 = distinct !{!72, !26}
!73 = distinct !{!73, !74}
!74 = !{!"llvm.loop.unroll.disable"}
!75 = distinct !{!75, !26}
!76 = distinct !{!76, !26}
!77 = distinct !{!77, !26}
!78 = distinct !{!78, !26}
!79 = distinct !{!79, !26}
!80 = distinct !{!80, !26}
!81 = distinct !{!81, !26}


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