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

; 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 [54 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1

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

104:                                              ; preds = %4
  %105 = load i64, ptr %15, align 8, !tbaa !9
  %106 = sitofp i64 %105 to double
  %107 = fmul double 1.000000e-02, %106
  br label %109

108:                                              ; preds = %4
  br label %109

109:                                              ; preds = %108, %104
  %110 = phi double [ %107, %104 ], [ 2.500000e+01, %108 ]
  %111 = fcmp oge double %110, 1.500000e+02
  br i1 %111, label %112, label %113

112:                                              ; preds = %109
  br label %125

113:                                              ; preds = %109
  %114 = load i64, ptr %15, align 8, !tbaa !9
  %115 = sitofp i64 %114 to double
  %116 = fmul double 1.000000e-02, %115
  %117 = fcmp oge double %116, 2.500000e+01
  br i1 %117, label %118, label %122

118:                                              ; preds = %113
  %119 = load i64, ptr %15, align 8, !tbaa !9
  %120 = sitofp i64 %119 to double
  %121 = fmul double 1.000000e-02, %120
  br label %123

122:                                              ; preds = %113
  br label %123

123:                                              ; preds = %122, %118
  %124 = phi double [ %121, %118 ], [ 2.500000e+01, %122 ]
  br label %125

125:                                              ; preds = %123, %112
  %126 = phi double [ 1.500000e+02, %112 ], [ %124, %123 ]
  %127 = fptosi double %126 to i64
  store i64 %127, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %128

128:                                              ; preds = %143, %125
  %129 = load i64, ptr %9, align 8, !tbaa !9
  %130 = load i64, ptr %16, align 8, !tbaa !9
  %131 = icmp slt i64 %129, %130
  br i1 %131, label %132, label %146

132:                                              ; preds = %128
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  %134 = load i64, ptr %9, align 8, !tbaa !9
  %135 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %134
  %136 = getelementptr inbounds [2 x %struct.PQueueType], ptr %135, i64 0, i64 0
  %137 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %133, ptr noundef %136, i64 noundef %137, i64 noundef 501)
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = load i64, ptr %9, align 8, !tbaa !9
  %140 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %139
  %141 = getelementptr inbounds [2 x %struct.PQueueType], ptr %140, i64 0, i64 1
  %142 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %138, ptr noundef %141, i64 noundef %142, i64 noundef 501)
  br label %143

143:                                              ; preds = %132
  %144 = load i64, ptr %9, align 8, !tbaa !9
  %145 = add nsw i64 %144, 1
  store i64 %145, ptr %9, align 8, !tbaa !9
  br label %128, !llvm.loop !25

146:                                              ; preds = %128
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %147

147:                                              ; preds = %162, %146
  %148 = load i64, ptr %9, align 8, !tbaa !9
  %149 = load i64, ptr %15, align 8, !tbaa !9
  %150 = icmp slt i64 %148, %149
  br i1 %150, label %151, label %165

151:                                              ; preds = %147
  %152 = load i64, ptr %16, align 8, !tbaa !9
  %153 = load ptr, ptr %38, align 8, !tbaa !5
  %154 = load i64, ptr %9, align 8, !tbaa !9
  %155 = load i64, ptr %16, align 8, !tbaa !9
  %156 = mul nsw i64 %154, %155
  %157 = getelementptr inbounds float, ptr %153, i64 %156
  %158 = call i64 @gk_fargmax(i64 noundef %152, ptr noundef %157)
  %159 = load ptr, ptr %37, align 8, !tbaa !5
  %160 = load i64, ptr %9, align 8, !tbaa !9
  %161 = getelementptr inbounds i64, ptr %159, i64 %160
  store i64 %158, ptr %161, align 8, !tbaa !9
  br label %162

162:                                              ; preds = %151
  %163 = load i64, ptr %9, align 8, !tbaa !9
  %164 = add nsw i64 %163, 1
  store i64 %164, ptr %9, align 8, !tbaa !9
  br label %147, !llvm.loop !27

165:                                              ; preds = %147
  %166 = load i64, ptr %16, align 8, !tbaa !9
  %167 = load ptr, ptr %39, align 8, !tbaa !5
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %166, ptr noundef %167, ptr noundef %168)
  store float %169, ptr %41, align 4, !tbaa !28
  %170 = load float, ptr %41, align 4, !tbaa !28
  %171 = load ptr, ptr %7, align 8, !tbaa !5
  %172 = getelementptr inbounds float, ptr %171, i64 0
  %173 = load float, ptr %172, align 4, !tbaa !28
  %174 = fmul float %170, %173
  %175 = getelementptr inbounds [2 x float], ptr %51, i64 0, i64 0
  store float %174, ptr %175, align 4, !tbaa !28
  %176 = load float, ptr %41, align 4, !tbaa !28
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  %178 = getelementptr inbounds float, ptr %177, i64 1
  %179 = load float, ptr %178, align 4, !tbaa !28
  %180 = fmul float %176, %179
  %181 = getelementptr inbounds [2 x float], ptr %51, i64 0, i64 1
  store float %180, ptr %181, align 4, !tbaa !28
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.controldef, ptr %182, i32 0, i32 1
  %184 = load i64, ptr %183, align 8, !tbaa !30
  %185 = and i64 %184, 8
  %186 = icmp ne i64 %185, 0
  br i1 %186, label %187, label %231

187:                                              ; preds = %165
  %188 = call i32 (ptr, ...) @mprintf(ptr noundef @.str)
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %189

189:                                              ; preds = %207, %187
  %190 = load i64, ptr %13, align 8, !tbaa !9
  %191 = load i64, ptr %16, align 8, !tbaa !9
  %192 = icmp slt i64 %190, %191
  br i1 %192, label %193, label %210

193:                                              ; preds = %189
  %194 = load ptr, ptr %39, align 8, !tbaa !5
  %195 = load i64, ptr %13, align 8, !tbaa !9
  %196 = getelementptr inbounds float, ptr %194, i64 %195
  %197 = load float, ptr %196, align 4, !tbaa !28
  %198 = fpext float %197 to double
  %199 = load ptr, ptr %39, align 8, !tbaa !5
  %200 = load i64, ptr %16, align 8, !tbaa !9
  %201 = load i64, ptr %13, align 8, !tbaa !9
  %202 = add nsw i64 %200, %201
  %203 = getelementptr inbounds float, ptr %199, i64 %202
  %204 = load float, ptr %203, align 4, !tbaa !28
  %205 = fpext float %204 to double
  %206 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %198, double noundef %205)
  br label %207

207:                                              ; preds = %193
  %208 = load i64, ptr %13, align 8, !tbaa !9
  %209 = add nsw i64 %208, 1
  store i64 %209, ptr %13, align 8, !tbaa !9
  br label %189, !llvm.loop !34

210:                                              ; preds = %189
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = getelementptr inbounds float, ptr %211, i64 0
  %213 = load float, ptr %212, align 4, !tbaa !28
  %214 = fpext float %213 to double
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = getelementptr inbounds float, ptr %215, i64 1
  %217 = load float, ptr %216, align 4, !tbaa !28
  %218 = fpext float %217 to double
  %219 = load ptr, ptr %6, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.graphdef, ptr %219, i32 0, i32 0
  %221 = load i64, ptr %220, align 8, !tbaa !11
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.graphdef, ptr %222, i32 0, i32 20
  %224 = load i64, ptr %223, align 8, !tbaa !35
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.graphdef, ptr %225, i32 0, i32 16
  %227 = load i64, ptr %226, align 8, !tbaa !36
  %228 = load float, ptr %41, align 4, !tbaa !28
  %229 = fpext float %228 to double
  %230 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, double noundef %214, double noundef %218, i64 noundef %221, i64 noundef %224, i64 noundef %227, double noundef %229)
  br label %231

231:                                              ; preds = %210, %165
  %232 = load i64, ptr %15, align 8, !tbaa !9
  %233 = load ptr, ptr %34, align 8, !tbaa !5
  %234 = call ptr @libmetis__idxset(i64 noundef %232, i64 noundef -1, ptr noundef %233)
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %235

235:                                              ; preds = %1149, %231
  %236 = load i64, ptr %21, align 8, !tbaa !9
  %237 = load i64, ptr %8, align 8, !tbaa !9
  %238 = icmp slt i64 %236, %237
  br i1 %238, label %239, label %1152

239:                                              ; preds = %235
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %240

240:                                              ; preds = %251, %239
  %241 = load i64, ptr %9, align 8, !tbaa !9
  %242 = load i64, ptr %16, align 8, !tbaa !9
  %243 = icmp slt i64 %241, %242
  br i1 %243, label %244, label %254

244:                                              ; preds = %240
  %245 = load i64, ptr %9, align 8, !tbaa !9
  %246 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %245
  %247 = getelementptr inbounds [2 x %struct.PQueueType], ptr %246, i64 0, i64 0
  call void @libmetis__PQueueReset(ptr noundef %247)
  %248 = load i64, ptr %9, align 8, !tbaa !9
  %249 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %248
  %250 = getelementptr inbounds [2 x %struct.PQueueType], ptr %249, i64 0, i64 1
  call void @libmetis__PQueueReset(ptr noundef %250)
  br label %251

251:                                              ; preds = %244
  %252 = load i64, ptr %9, align 8, !tbaa !9
  %253 = add nsw i64 %252, 1
  store i64 %253, ptr %9, align 8, !tbaa !9
  br label %240, !llvm.loop !37

254:                                              ; preds = %240
  store i64 -1, ptr %50, align 8, !tbaa !9
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.graphdef, ptr %255, i32 0, i32 16
  %257 = load i64, ptr %256, align 8, !tbaa !36
  store i64 %257, ptr %48, align 8, !tbaa !9
  store i64 %257, ptr %47, align 8, !tbaa !9
  store i64 %257, ptr %49, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %258

258:                                              ; preds = %276, %254
  %259 = load i64, ptr %9, align 8, !tbaa !9
  %260 = load i64, ptr %16, align 8, !tbaa !9
  %261 = icmp slt i64 %259, %260
  br i1 %261, label %262, label %279

262:                                              ; preds = %258
  %263 = load ptr, ptr %7, align 8, !tbaa !5
  %264 = getelementptr inbounds float, ptr %263, i64 0
  %265 = load float, ptr %264, align 4, !tbaa !28
  %266 = load ptr, ptr %39, align 8, !tbaa !5
  %267 = load i64, ptr %9, align 8, !tbaa !9
  %268 = getelementptr inbounds float, ptr %266, i64 %267
  %269 = load float, ptr %268, align 4, !tbaa !28
  %270 = fsub float %265, %269
  %271 = fpext float %270 to double
  %272 = call double @llvm.fabs.f64(double %271)
  %273 = fptrunc double %272 to float
  %274 = load i64, ptr %9, align 8, !tbaa !9
  %275 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %274
  store float %273, ptr %275, align 4, !tbaa !28
  br label %276

276:                                              ; preds = %262
  %277 = load i64, ptr %9, align 8, !tbaa !9
  %278 = add nsw i64 %277, 1
  store i64 %278, ptr %9, align 8, !tbaa !9
  br label %258, !llvm.loop !38

279:                                              ; preds = %258
  %280 = load i64, ptr %16, align 8, !tbaa !9
  %281 = load ptr, ptr %39, align 8, !tbaa !5
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  %283 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %280, ptr noundef %281, ptr noundef %282)
  store float %283, ptr %42, align 4, !tbaa !28
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.graphdef, ptr %284, i32 0, i32 20
  %286 = load i64, ptr %285, align 8, !tbaa !35
  store i64 %286, ptr %17, align 8, !tbaa !9
  %287 = load i64, ptr %17, align 8, !tbaa !9
  %288 = load ptr, ptr %36, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %287, ptr noundef %288, i64 noundef 1)
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %289

289:                                              ; preds = %322, %279
  %290 = load i64, ptr %10, align 8, !tbaa !9
  %291 = load i64, ptr %17, align 8, !tbaa !9
  %292 = icmp slt i64 %290, %291
  br i1 %292, label %293, label %325

293:                                              ; preds = %289
  %294 = load ptr, ptr %33, align 8, !tbaa !5
  %295 = load ptr, ptr %36, align 8, !tbaa !5
  %296 = load i64, ptr %10, align 8, !tbaa !9
  %297 = getelementptr inbounds i64, ptr %295, i64 %296
  %298 = load i64, ptr %297, align 8, !tbaa !9
  %299 = getelementptr inbounds i64, ptr %294, i64 %298
  %300 = load i64, ptr %299, align 8, !tbaa !9
  store i64 %300, ptr %9, align 8, !tbaa !9
  %301 = load ptr, ptr %37, align 8, !tbaa !5
  %302 = load i64, ptr %9, align 8, !tbaa !9
  %303 = getelementptr inbounds i64, ptr %301, i64 %302
  %304 = load i64, ptr %303, align 8, !tbaa !9
  %305 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %304
  %306 = load ptr, ptr %29, align 8, !tbaa !5
  %307 = load i64, ptr %9, align 8, !tbaa !9
  %308 = getelementptr inbounds i64, ptr %306, i64 %307
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = getelementptr inbounds [2 x %struct.PQueueType], ptr %305, i64 0, i64 %309
  %311 = load i64, ptr %9, align 8, !tbaa !9
  %312 = load ptr, ptr %31, align 8, !tbaa !5
  %313 = load i64, ptr %9, align 8, !tbaa !9
  %314 = getelementptr inbounds i64, ptr %312, i64 %313
  %315 = load i64, ptr %314, align 8, !tbaa !9
  %316 = load ptr, ptr %30, align 8, !tbaa !5
  %317 = load i64, ptr %9, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !9
  %320 = sub nsw i64 %315, %319
  %321 = call i64 @libmetis__PQueueInsert(ptr noundef %310, i64 noundef %311, i64 noundef %320)
  br label %322

322:                                              ; preds = %293
  %323 = load i64, ptr %10, align 8, !tbaa !9
  %324 = add nsw i64 %323, 1
  store i64 %324, ptr %10, align 8, !tbaa !9
  br label %289, !llvm.loop !39

325:                                              ; preds = %289
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %326

326:                                              ; preds = %812, %325
  %327 = load i64, ptr %18, align 8, !tbaa !9
  %328 = load i64, ptr %15, align 8, !tbaa !9
  %329 = icmp slt i64 %327, %328
  br i1 %329, label %330, label %815

330:                                              ; preds = %326
  %331 = load i64, ptr %16, align 8, !tbaa !9
  %332 = load ptr, ptr %39, align 8, !tbaa !5
  %333 = getelementptr inbounds [2 x float], ptr %51, i64 0, i64 0
  %334 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 0
  call void @libmetis__SelectQueue(i64 noundef %331, ptr noundef %332, ptr noundef %333, ptr noundef %19, ptr noundef %25, ptr noundef %334)
  %335 = load i64, ptr %19, align 8, !tbaa !9
  %336 = add nsw i64 %335, 1
  %337 = srem i64 %336, 2
  store i64 %337, ptr %20, align 8, !tbaa !9
  %338 = load i64, ptr %19, align 8, !tbaa !9
  %339 = icmp eq i64 %338, -1
  br i1 %339, label %347, label %340

340:                                              ; preds = %330
  %341 = load i64, ptr %25, align 8, !tbaa !9
  %342 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %341
  %343 = load i64, ptr %19, align 8, !tbaa !9
  %344 = getelementptr inbounds [2 x %struct.PQueueType], ptr %342, i64 0, i64 %343
  %345 = call i64 @libmetis__PQueueGetMax(ptr noundef %344)
  store i64 %345, ptr %45, align 8, !tbaa !9
  %346 = icmp eq i64 %345, -1
  br i1 %346, label %347, label %348

347:                                              ; preds = %340, %330
  br label %815

348:                                              ; preds = %340
  %349 = load i64, ptr %16, align 8, !tbaa !9
  %350 = load ptr, ptr %38, align 8, !tbaa !5
  %351 = load i64, ptr %45, align 8, !tbaa !9
  %352 = load i64, ptr %16, align 8, !tbaa !9
  %353 = mul nsw i64 %351, %352
  %354 = getelementptr inbounds float, ptr %350, i64 %353
  %355 = load ptr, ptr %39, align 8, !tbaa !5
  %356 = load i64, ptr %20, align 8, !tbaa !9
  %357 = load i64, ptr %16, align 8, !tbaa !9
  %358 = mul nsw i64 %356, %357
  %359 = getelementptr inbounds float, ptr %355, i64 %358
  %360 = call ptr @gk_faxpy(i64 noundef %349, float noundef 1.000000e+00, ptr noundef %354, i64 noundef 1, ptr noundef %359, i64 noundef 1)
  %361 = load i64, ptr %16, align 8, !tbaa !9
  %362 = load ptr, ptr %38, align 8, !tbaa !5
  %363 = load i64, ptr %45, align 8, !tbaa !9
  %364 = load i64, ptr %16, align 8, !tbaa !9
  %365 = mul nsw i64 %363, %364
  %366 = getelementptr inbounds float, ptr %362, i64 %365
  %367 = load ptr, ptr %39, align 8, !tbaa !5
  %368 = load i64, ptr %19, align 8, !tbaa !9
  %369 = load i64, ptr %16, align 8, !tbaa !9
  %370 = mul nsw i64 %368, %369
  %371 = getelementptr inbounds float, ptr %367, i64 %370
  %372 = call ptr @gk_faxpy(i64 noundef %361, float noundef -1.000000e+00, ptr noundef %366, i64 noundef 1, ptr noundef %371, i64 noundef 1)
  %373 = load ptr, ptr %31, align 8, !tbaa !5
  %374 = load i64, ptr %45, align 8, !tbaa !9
  %375 = getelementptr inbounds i64, ptr %373, i64 %374
  %376 = load i64, ptr %375, align 8, !tbaa !9
  %377 = load ptr, ptr %30, align 8, !tbaa !5
  %378 = load i64, ptr %45, align 8, !tbaa !9
  %379 = getelementptr inbounds i64, ptr %377, i64 %378
  %380 = load i64, ptr %379, align 8, !tbaa !9
  %381 = sub nsw i64 %376, %380
  %382 = load i64, ptr %49, align 8, !tbaa !9
  %383 = sub nsw i64 %382, %381
  store i64 %383, ptr %49, align 8, !tbaa !9
  %384 = load i64, ptr %16, align 8, !tbaa !9
  %385 = load ptr, ptr %39, align 8, !tbaa !5
  %386 = load ptr, ptr %7, align 8, !tbaa !5
  %387 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %384, ptr noundef %385, ptr noundef %386)
  store float %387, ptr %43, align 4, !tbaa !28
  %388 = load i64, ptr %49, align 8, !tbaa !9
  %389 = load i64, ptr %47, align 8, !tbaa !9
  %390 = icmp slt i64 %388, %389
  br i1 %390, label %391, label %397

391:                                              ; preds = %348
  %392 = load float, ptr %43, align 4, !tbaa !28
  %393 = load float, ptr %41, align 4, !tbaa !28
  %394 = fsub float %392, %393
  %395 = fpext float %394 to double
  %396 = fcmp ole double %395, 1.000000e-05
  br i1 %396, label %416, label %397

397:                                              ; preds = %391, %348
  %398 = load i64, ptr %49, align 8, !tbaa !9
  %399 = load i64, ptr %47, align 8, !tbaa !9
  %400 = icmp eq i64 %398, %399
  br i1 %400, label %401, label %442

401:                                              ; preds = %397
  %402 = load float, ptr %43, align 4, !tbaa !28
  %403 = load float, ptr %42, align 4, !tbaa !28
  %404 = fcmp olt float %402, %403
  br i1 %404, label %416, label %405

405:                                              ; preds = %401
  %406 = load float, ptr %43, align 4, !tbaa !28
  %407 = load float, ptr %42, align 4, !tbaa !28
  %408 = fcmp oeq float %406, %407
  br i1 %408, label %409, label %442

409:                                              ; preds = %405
  %410 = load i64, ptr %16, align 8, !tbaa !9
  %411 = load ptr, ptr %39, align 8, !tbaa !5
  %412 = load ptr, ptr %7, align 8, !tbaa !5
  %413 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  %414 = call i64 @libmetis__BetterBalance(i64 noundef %410, ptr noundef %411, ptr noundef %412, ptr noundef %413)
  %415 = icmp ne i64 %414, 0
  br i1 %415, label %416, label %442

416:                                              ; preds = %409, %401, %391
  %417 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %417, ptr %47, align 8, !tbaa !9
  %418 = load float, ptr %43, align 4, !tbaa !28
  store float %418, ptr %42, align 4, !tbaa !28
  %419 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %419, ptr %50, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %420

420:                                              ; preds = %438, %416
  %421 = load i64, ptr %9, align 8, !tbaa !9
  %422 = load i64, ptr %16, align 8, !tbaa !9
  %423 = icmp slt i64 %421, %422
  br i1 %423, label %424, label %441

424:                                              ; preds = %420
  %425 = load ptr, ptr %7, align 8, !tbaa !5
  %426 = getelementptr inbounds float, ptr %425, i64 0
  %427 = load float, ptr %426, align 4, !tbaa !28
  %428 = load ptr, ptr %39, align 8, !tbaa !5
  %429 = load i64, ptr %9, align 8, !tbaa !9
  %430 = getelementptr inbounds float, ptr %428, i64 %429
  %431 = load float, ptr %430, align 4, !tbaa !28
  %432 = fsub float %427, %431
  %433 = fpext float %432 to double
  %434 = call double @llvm.fabs.f64(double %433)
  %435 = fptrunc double %434 to float
  %436 = load i64, ptr %9, align 8, !tbaa !9
  %437 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %436
  store float %435, ptr %437, align 4, !tbaa !28
  br label %438

438:                                              ; preds = %424
  %439 = load i64, ptr %9, align 8, !tbaa !9
  %440 = add nsw i64 %439, 1
  store i64 %440, ptr %9, align 8, !tbaa !9
  br label %420, !llvm.loop !40

441:                                              ; preds = %420
  br label %485

442:                                              ; preds = %409, %405, %397
  %443 = load i64, ptr %18, align 8, !tbaa !9
  %444 = load i64, ptr %50, align 8, !tbaa !9
  %445 = sub nsw i64 %443, %444
  %446 = load i64, ptr %23, align 8, !tbaa !9
  %447 = icmp sgt i64 %445, %446
  br i1 %447, label %448, label %484

448:                                              ; preds = %442
  %449 = load ptr, ptr %31, align 8, !tbaa !5
  %450 = load i64, ptr %45, align 8, !tbaa !9
  %451 = getelementptr inbounds i64, ptr %449, i64 %450
  %452 = load i64, ptr %451, align 8, !tbaa !9
  %453 = load ptr, ptr %30, align 8, !tbaa !5
  %454 = load i64, ptr %45, align 8, !tbaa !9
  %455 = getelementptr inbounds i64, ptr %453, i64 %454
  %456 = load i64, ptr %455, align 8, !tbaa !9
  %457 = sub nsw i64 %452, %456
  %458 = load i64, ptr %49, align 8, !tbaa !9
  %459 = add nsw i64 %458, %457
  store i64 %459, ptr %49, align 8, !tbaa !9
  %460 = load i64, ptr %16, align 8, !tbaa !9
  %461 = load ptr, ptr %38, align 8, !tbaa !5
  %462 = load i64, ptr %45, align 8, !tbaa !9
  %463 = load i64, ptr %16, align 8, !tbaa !9
  %464 = mul nsw i64 %462, %463
  %465 = getelementptr inbounds float, ptr %461, i64 %464
  %466 = load ptr, ptr %39, align 8, !tbaa !5
  %467 = load i64, ptr %19, align 8, !tbaa !9
  %468 = load i64, ptr %16, align 8, !tbaa !9
  %469 = mul nsw i64 %467, %468
  %470 = getelementptr inbounds float, ptr %466, i64 %469
  %471 = call ptr @gk_faxpy(i64 noundef %460, float noundef 1.000000e+00, ptr noundef %465, i64 noundef 1, ptr noundef %470, i64 noundef 1)
  %472 = load i64, ptr %16, align 8, !tbaa !9
  %473 = load ptr, ptr %38, align 8, !tbaa !5
  %474 = load i64, ptr %45, align 8, !tbaa !9
  %475 = load i64, ptr %16, align 8, !tbaa !9
  %476 = mul nsw i64 %474, %475
  %477 = getelementptr inbounds float, ptr %473, i64 %476
  %478 = load ptr, ptr %39, align 8, !tbaa !5
  %479 = load i64, ptr %20, align 8, !tbaa !9
  %480 = load i64, ptr %16, align 8, !tbaa !9
  %481 = mul nsw i64 %479, %480
  %482 = getelementptr inbounds float, ptr %478, i64 %481
  %483 = call ptr @gk_faxpy(i64 noundef %472, float noundef -1.000000e+00, ptr noundef %477, i64 noundef 1, ptr noundef %482, i64 noundef 1)
  br label %815

484:                                              ; preds = %442
  br label %485

485:                                              ; preds = %484, %441
  %486 = load i64, ptr %20, align 8, !tbaa !9
  %487 = load ptr, ptr %29, align 8, !tbaa !5
  %488 = load i64, ptr %45, align 8, !tbaa !9
  %489 = getelementptr inbounds i64, ptr %487, i64 %488
  store i64 %486, ptr %489, align 8, !tbaa !9
  %490 = load i64, ptr %18, align 8, !tbaa !9
  %491 = load ptr, ptr %34, align 8, !tbaa !5
  %492 = load i64, ptr %45, align 8, !tbaa !9
  %493 = getelementptr inbounds i64, ptr %491, i64 %492
  store i64 %490, ptr %493, align 8, !tbaa !9
  %494 = load i64, ptr %45, align 8, !tbaa !9
  %495 = load ptr, ptr %35, align 8, !tbaa !5
  %496 = load i64, ptr %18, align 8, !tbaa !9
  %497 = getelementptr inbounds i64, ptr %495, i64 %496
  store i64 %494, ptr %497, align 8, !tbaa !9
  %498 = load ptr, ptr %5, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.controldef, ptr %498, i32 0, i32 1
  %500 = load i64, ptr %499, align 8, !tbaa !30
  %501 = and i64 %500, 32
  %502 = icmp ne i64 %501, 0
  br i1 %502, label %503, label %545

503:                                              ; preds = %485
  %504 = load i64, ptr %45, align 8, !tbaa !9
  %505 = load i64, ptr %19, align 8, !tbaa !9
  %506 = load i64, ptr %25, align 8, !tbaa !9
  %507 = load ptr, ptr %31, align 8, !tbaa !5
  %508 = load i64, ptr %45, align 8, !tbaa !9
  %509 = getelementptr inbounds i64, ptr %507, i64 %508
  %510 = load i64, ptr %509, align 8, !tbaa !9
  %511 = load ptr, ptr %30, align 8, !tbaa !5
  %512 = load i64, ptr %45, align 8, !tbaa !9
  %513 = getelementptr inbounds i64, ptr %511, i64 %512
  %514 = load i64, ptr %513, align 8, !tbaa !9
  %515 = sub nsw i64 %510, %514
  %516 = load i64, ptr %49, align 8, !tbaa !9
  %517 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %504, i64 noundef %505, i64 noundef %506, i64 noundef %515, i64 noundef %516)
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %518

518:                                              ; preds = %536, %503
  %519 = load i64, ptr %13, align 8, !tbaa !9
  %520 = load i64, ptr %16, align 8, !tbaa !9
  %521 = icmp slt i64 %519, %520
  br i1 %521, label %522, label %539

522:                                              ; preds = %518
  %523 = load ptr, ptr %39, align 8, !tbaa !5
  %524 = load i64, ptr %13, align 8, !tbaa !9
  %525 = getelementptr inbounds float, ptr %523, i64 %524
  %526 = load float, ptr %525, align 4, !tbaa !28
  %527 = fpext float %526 to double
  %528 = load ptr, ptr %39, align 8, !tbaa !5
  %529 = load i64, ptr %16, align 8, !tbaa !9
  %530 = load i64, ptr %13, align 8, !tbaa !9
  %531 = add nsw i64 %529, %530
  %532 = getelementptr inbounds float, ptr %528, i64 %531
  %533 = load float, ptr %532, align 4, !tbaa !28
  %534 = fpext float %533 to double
  %535 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %527, double noundef %534)
  br label %536

536:                                              ; preds = %522
  %537 = load i64, ptr %13, align 8, !tbaa !9
  %538 = add nsw i64 %537, 1
  store i64 %538, ptr %13, align 8, !tbaa !9
  br label %518, !llvm.loop !41

539:                                              ; preds = %518
  %540 = load float, ptr %42, align 4, !tbaa !28
  %541 = fpext float %540 to double
  %542 = load float, ptr %43, align 4, !tbaa !28
  %543 = fpext float %542 to double
  %544 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, double noundef %541, double noundef %543)
  br label %545

545:                                              ; preds = %539, %485
  br label %546

546:                                              ; preds = %545
  %547 = load ptr, ptr %30, align 8, !tbaa !5
  %548 = load i64, ptr %45, align 8, !tbaa !9
  %549 = getelementptr inbounds i64, ptr %547, i64 %548
  %550 = load i64, ptr %549, align 8, !tbaa !9
  store i64 %550, ptr %24, align 8, !tbaa !9
  %551 = load ptr, ptr %31, align 8, !tbaa !5
  %552 = load i64, ptr %45, align 8, !tbaa !9
  %553 = getelementptr inbounds i64, ptr %551, i64 %552
  %554 = load i64, ptr %553, align 8, !tbaa !9
  %555 = load ptr, ptr %30, align 8, !tbaa !5
  %556 = load i64, ptr %45, align 8, !tbaa !9
  %557 = getelementptr inbounds i64, ptr %555, i64 %556
  store i64 %554, ptr %557, align 8, !tbaa !9
  %558 = load i64, ptr %24, align 8, !tbaa !9
  %559 = load ptr, ptr %31, align 8, !tbaa !5
  %560 = load i64, ptr %45, align 8, !tbaa !9
  %561 = getelementptr inbounds i64, ptr %559, i64 %560
  store i64 %558, ptr %561, align 8, !tbaa !9
  br label %562

562:                                              ; preds = %546
  br label %563

563:                                              ; preds = %562
  %564 = load ptr, ptr %31, align 8, !tbaa !5
  %565 = load i64, ptr %45, align 8, !tbaa !9
  %566 = getelementptr inbounds i64, ptr %564, i64 %565
  %567 = load i64, ptr %566, align 8, !tbaa !9
  %568 = icmp eq i64 %567, 0
  br i1 %568, label %569, label %608

569:                                              ; preds = %563
  %570 = load ptr, ptr %26, align 8, !tbaa !5
  %571 = load i64, ptr %45, align 8, !tbaa !9
  %572 = getelementptr inbounds i64, ptr %570, i64 %571
  %573 = load i64, ptr %572, align 8, !tbaa !9
  %574 = load ptr, ptr %26, align 8, !tbaa !5
  %575 = load i64, ptr %45, align 8, !tbaa !9
  %576 = add nsw i64 %575, 1
  %577 = getelementptr inbounds i64, ptr %574, i64 %576
  %578 = load i64, ptr %577, align 8, !tbaa !9
  %579 = icmp slt i64 %573, %578
  br i1 %579, label %580, label %608

580:                                              ; preds = %569
  br label %581

581:                                              ; preds = %580
  %582 = load ptr, ptr %33, align 8, !tbaa !5
  %583 = load i64, ptr %17, align 8, !tbaa !9
  %584 = add nsw i64 %583, -1
  store i64 %584, ptr %17, align 8, !tbaa !9
  %585 = getelementptr inbounds i64, ptr %582, i64 %584
  %586 = load i64, ptr %585, align 8, !tbaa !9
  %587 = load ptr, ptr %33, align 8, !tbaa !5
  %588 = load ptr, ptr %32, align 8, !tbaa !5
  %589 = load i64, ptr %45, align 8, !tbaa !9
  %590 = getelementptr inbounds i64, ptr %588, i64 %589
  %591 = load i64, ptr %590, align 8, !tbaa !9
  %592 = getelementptr inbounds i64, ptr %587, i64 %591
  store i64 %586, ptr %592, align 8, !tbaa !9
  %593 = load ptr, ptr %32, align 8, !tbaa !5
  %594 = load i64, ptr %45, align 8, !tbaa !9
  %595 = getelementptr inbounds i64, ptr %593, i64 %594
  %596 = load i64, ptr %595, align 8, !tbaa !9
  %597 = load ptr, ptr %32, align 8, !tbaa !5
  %598 = load ptr, ptr %33, align 8, !tbaa !5
  %599 = load i64, ptr %17, align 8, !tbaa !9
  %600 = getelementptr inbounds i64, ptr %598, i64 %599
  %601 = load i64, ptr %600, align 8, !tbaa !9
  %602 = getelementptr inbounds i64, ptr %597, i64 %601
  store i64 %596, ptr %602, align 8, !tbaa !9
  %603 = load ptr, ptr %32, align 8, !tbaa !5
  %604 = load i64, ptr %45, align 8, !tbaa !9
  %605 = getelementptr inbounds i64, ptr %603, i64 %604
  store i64 -1, ptr %605, align 8, !tbaa !9
  br label %606

606:                                              ; preds = %581
  br label %607

607:                                              ; preds = %606
  br label %608

608:                                              ; preds = %607, %569, %563
  %609 = load ptr, ptr %26, align 8, !tbaa !5
  %610 = load i64, ptr %45, align 8, !tbaa !9
  %611 = getelementptr inbounds i64, ptr %609, i64 %610
  %612 = load i64, ptr %611, align 8, !tbaa !9
  store i64 %612, ptr %11, align 8, !tbaa !9
  br label %613

613:                                              ; preds = %808, %608
  %614 = load i64, ptr %11, align 8, !tbaa !9
  %615 = load ptr, ptr %26, align 8, !tbaa !5
  %616 = load i64, ptr %45, align 8, !tbaa !9
  %617 = add nsw i64 %616, 1
  %618 = getelementptr inbounds i64, ptr %615, i64 %617
  %619 = load i64, ptr %618, align 8, !tbaa !9
  %620 = icmp slt i64 %614, %619
  br i1 %620, label %621, label %811

621:                                              ; preds = %613
  %622 = load ptr, ptr %27, align 8, !tbaa !5
  %623 = load i64, ptr %11, align 8, !tbaa !9
  %624 = getelementptr inbounds i64, ptr %622, i64 %623
  %625 = load i64, ptr %624, align 8, !tbaa !9
  store i64 %625, ptr %12, align 8, !tbaa !9
  %626 = load ptr, ptr %31, align 8, !tbaa !5
  %627 = load i64, ptr %12, align 8, !tbaa !9
  %628 = getelementptr inbounds i64, ptr %626, i64 %627
  %629 = load i64, ptr %628, align 8, !tbaa !9
  %630 = load ptr, ptr %30, align 8, !tbaa !5
  %631 = load i64, ptr %12, align 8, !tbaa !9
  %632 = getelementptr inbounds i64, ptr %630, i64 %631
  %633 = load i64, ptr %632, align 8, !tbaa !9
  %634 = sub nsw i64 %629, %633
  store i64 %634, ptr %46, align 8, !tbaa !9
  %635 = load i64, ptr %20, align 8, !tbaa !9
  %636 = load ptr, ptr %29, align 8, !tbaa !5
  %637 = load i64, ptr %12, align 8, !tbaa !9
  %638 = getelementptr inbounds i64, ptr %636, i64 %637
  %639 = load i64, ptr %638, align 8, !tbaa !9
  %640 = icmp eq i64 %635, %639
  br i1 %640, label %641, label %646

641:                                              ; preds = %621
  %642 = load ptr, ptr %28, align 8, !tbaa !5
  %643 = load i64, ptr %11, align 8, !tbaa !9
  %644 = getelementptr inbounds i64, ptr %642, i64 %643
  %645 = load i64, ptr %644, align 8, !tbaa !9
  br label %652

646:                                              ; preds = %621
  %647 = load ptr, ptr %28, align 8, !tbaa !5
  %648 = load i64, ptr %11, align 8, !tbaa !9
  %649 = getelementptr inbounds i64, ptr %647, i64 %648
  %650 = load i64, ptr %649, align 8, !tbaa !9
  %651 = sub nsw i64 0, %650
  br label %652

652:                                              ; preds = %646, %641
  %653 = phi i64 [ %645, %641 ], [ %651, %646 ]
  store i64 %653, ptr %14, align 8, !tbaa !9
  br label %654

654:                                              ; preds = %652
  %655 = load i64, ptr %14, align 8, !tbaa !9
  %656 = load ptr, ptr %30, align 8, !tbaa !5
  %657 = load i64, ptr %12, align 8, !tbaa !9
  %658 = getelementptr inbounds i64, ptr %656, i64 %657
  %659 = load i64, ptr %658, align 8, !tbaa !9
  %660 = add nsw i64 %659, %655
  store i64 %660, ptr %658, align 8, !tbaa !9
  %661 = load i64, ptr %14, align 8, !tbaa !9
  %662 = load ptr, ptr %31, align 8, !tbaa !5
  %663 = load i64, ptr %12, align 8, !tbaa !9
  %664 = getelementptr inbounds i64, ptr %662, i64 %663
  %665 = load i64, ptr %664, align 8, !tbaa !9
  %666 = sub nsw i64 %665, %661
  store i64 %666, ptr %664, align 8, !tbaa !9
  br label %667

667:                                              ; preds = %654
  br label %668

668:                                              ; preds = %667
  %669 = load ptr, ptr %32, align 8, !tbaa !5
  %670 = load i64, ptr %12, align 8, !tbaa !9
  %671 = getelementptr inbounds i64, ptr %669, i64 %670
  %672 = load i64, ptr %671, align 8, !tbaa !9
  %673 = icmp ne i64 %672, -1
  br i1 %673, label %674, label %759

674:                                              ; preds = %668
  %675 = load ptr, ptr %31, align 8, !tbaa !5
  %676 = load i64, ptr %12, align 8, !tbaa !9
  %677 = getelementptr inbounds i64, ptr %675, i64 %676
  %678 = load i64, ptr %677, align 8, !tbaa !9
  %679 = icmp eq i64 %678, 0
  br i1 %679, label %680, label %728

680:                                              ; preds = %674
  br label %681

681:                                              ; preds = %680
  %682 = load ptr, ptr %33, align 8, !tbaa !5
  %683 = load i64, ptr %17, align 8, !tbaa !9
  %684 = add nsw i64 %683, -1
  store i64 %684, ptr %17, align 8, !tbaa !9
  %685 = getelementptr inbounds i64, ptr %682, i64 %684
  %686 = load i64, ptr %685, align 8, !tbaa !9
  %687 = load ptr, ptr %33, align 8, !tbaa !5
  %688 = load ptr, ptr %32, align 8, !tbaa !5
  %689 = load i64, ptr %12, align 8, !tbaa !9
  %690 = getelementptr inbounds i64, ptr %688, i64 %689
  %691 = load i64, ptr %690, align 8, !tbaa !9
  %692 = getelementptr inbounds i64, ptr %687, i64 %691
  store i64 %686, ptr %692, align 8, !tbaa !9
  %693 = load ptr, ptr %32, align 8, !tbaa !5
  %694 = load i64, ptr %12, align 8, !tbaa !9
  %695 = getelementptr inbounds i64, ptr %693, i64 %694
  %696 = load i64, ptr %695, align 8, !tbaa !9
  %697 = load ptr, ptr %32, align 8, !tbaa !5
  %698 = load ptr, ptr %33, align 8, !tbaa !5
  %699 = load i64, ptr %17, align 8, !tbaa !9
  %700 = getelementptr inbounds i64, ptr %698, i64 %699
  %701 = load i64, ptr %700, align 8, !tbaa !9
  %702 = getelementptr inbounds i64, ptr %697, i64 %701
  store i64 %696, ptr %702, align 8, !tbaa !9
  %703 = load ptr, ptr %32, align 8, !tbaa !5
  %704 = load i64, ptr %12, align 8, !tbaa !9
  %705 = getelementptr inbounds i64, ptr %703, i64 %704
  store i64 -1, ptr %705, align 8, !tbaa !9
  br label %706

706:                                              ; preds = %681
  br label %707

707:                                              ; preds = %706
  %708 = load ptr, ptr %34, align 8, !tbaa !5
  %709 = load i64, ptr %12, align 8, !tbaa !9
  %710 = getelementptr inbounds i64, ptr %708, i64 %709
  %711 = load i64, ptr %710, align 8, !tbaa !9
  %712 = icmp eq i64 %711, -1
  br i1 %712, label %713, label %727

713:                                              ; preds = %707
  %714 = load ptr, ptr %37, align 8, !tbaa !5
  %715 = load i64, ptr %12, align 8, !tbaa !9
  %716 = getelementptr inbounds i64, ptr %714, i64 %715
  %717 = load i64, ptr %716, align 8, !tbaa !9
  %718 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %717
  %719 = load ptr, ptr %29, align 8, !tbaa !5
  %720 = load i64, ptr %12, align 8, !tbaa !9
  %721 = getelementptr inbounds i64, ptr %719, i64 %720
  %722 = load i64, ptr %721, align 8, !tbaa !9
  %723 = getelementptr inbounds [2 x %struct.PQueueType], ptr %718, i64 0, i64 %722
  %724 = load i64, ptr %12, align 8, !tbaa !9
  %725 = load i64, ptr %46, align 8, !tbaa !9
  %726 = call i64 @libmetis__PQueueDelete(ptr noundef %723, i64 noundef %724, i64 noundef %725)
  br label %727

727:                                              ; preds = %713, %707
  br label %758

728:                                              ; preds = %674
  %729 = load ptr, ptr %34, align 8, !tbaa !5
  %730 = load i64, ptr %12, align 8, !tbaa !9
  %731 = getelementptr inbounds i64, ptr %729, i64 %730
  %732 = load i64, ptr %731, align 8, !tbaa !9
  %733 = icmp eq i64 %732, -1
  br i1 %733, label %734, label %757

734:                                              ; preds = %728
  %735 = load ptr, ptr %37, align 8, !tbaa !5
  %736 = load i64, ptr %12, align 8, !tbaa !9
  %737 = getelementptr inbounds i64, ptr %735, i64 %736
  %738 = load i64, ptr %737, align 8, !tbaa !9
  %739 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %738
  %740 = load ptr, ptr %29, align 8, !tbaa !5
  %741 = load i64, ptr %12, align 8, !tbaa !9
  %742 = getelementptr inbounds i64, ptr %740, i64 %741
  %743 = load i64, ptr %742, align 8, !tbaa !9
  %744 = getelementptr inbounds [2 x %struct.PQueueType], ptr %739, i64 0, i64 %743
  %745 = load i64, ptr %12, align 8, !tbaa !9
  %746 = load i64, ptr %46, align 8, !tbaa !9
  %747 = load ptr, ptr %31, align 8, !tbaa !5
  %748 = load i64, ptr %12, align 8, !tbaa !9
  %749 = getelementptr inbounds i64, ptr %747, i64 %748
  %750 = load i64, ptr %749, align 8, !tbaa !9
  %751 = load ptr, ptr %30, align 8, !tbaa !5
  %752 = load i64, ptr %12, align 8, !tbaa !9
  %753 = getelementptr inbounds i64, ptr %751, i64 %752
  %754 = load i64, ptr %753, align 8, !tbaa !9
  %755 = sub nsw i64 %750, %754
  %756 = call i64 @libmetis__PQueueUpdate(ptr noundef %744, i64 noundef %745, i64 noundef %746, i64 noundef %755)
  br label %757

757:                                              ; preds = %734, %728
  br label %758

758:                                              ; preds = %757, %727
  br label %807

759:                                              ; preds = %668
  %760 = load ptr, ptr %31, align 8, !tbaa !5
  %761 = load i64, ptr %12, align 8, !tbaa !9
  %762 = getelementptr inbounds i64, ptr %760, i64 %761
  %763 = load i64, ptr %762, align 8, !tbaa !9
  %764 = icmp sgt i64 %763, 0
  br i1 %764, label %765, label %806

765:                                              ; preds = %759
  br label %766

766:                                              ; preds = %765
  %767 = load i64, ptr %12, align 8, !tbaa !9
  %768 = load ptr, ptr %33, align 8, !tbaa !5
  %769 = load i64, ptr %17, align 8, !tbaa !9
  %770 = getelementptr inbounds i64, ptr %768, i64 %769
  store i64 %767, ptr %770, align 8, !tbaa !9
  %771 = load i64, ptr %17, align 8, !tbaa !9
  %772 = add nsw i64 %771, 1
  store i64 %772, ptr %17, align 8, !tbaa !9
  %773 = load ptr, ptr %32, align 8, !tbaa !5
  %774 = load i64, ptr %12, align 8, !tbaa !9
  %775 = getelementptr inbounds i64, ptr %773, i64 %774
  store i64 %771, ptr %775, align 8, !tbaa !9
  br label %776

776:                                              ; preds = %766
  br label %777

777:                                              ; preds = %776
  %778 = load ptr, ptr %34, align 8, !tbaa !5
  %779 = load i64, ptr %12, align 8, !tbaa !9
  %780 = getelementptr inbounds i64, ptr %778, i64 %779
  %781 = load i64, ptr %780, align 8, !tbaa !9
  %782 = icmp eq i64 %781, -1
  br i1 %782, label %783, label %805

783:                                              ; preds = %777
  %784 = load ptr, ptr %37, align 8, !tbaa !5
  %785 = load i64, ptr %12, align 8, !tbaa !9
  %786 = getelementptr inbounds i64, ptr %784, i64 %785
  %787 = load i64, ptr %786, align 8, !tbaa !9
  %788 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %787
  %789 = load ptr, ptr %29, align 8, !tbaa !5
  %790 = load i64, ptr %12, align 8, !tbaa !9
  %791 = getelementptr inbounds i64, ptr %789, i64 %790
  %792 = load i64, ptr %791, align 8, !tbaa !9
  %793 = getelementptr inbounds [2 x %struct.PQueueType], ptr %788, i64 0, i64 %792
  %794 = load i64, ptr %12, align 8, !tbaa !9
  %795 = load ptr, ptr %31, align 8, !tbaa !5
  %796 = load i64, ptr %12, align 8, !tbaa !9
  %797 = getelementptr inbounds i64, ptr %795, i64 %796
  %798 = load i64, ptr %797, align 8, !tbaa !9
  %799 = load ptr, ptr %30, align 8, !tbaa !5
  %800 = load i64, ptr %12, align 8, !tbaa !9
  %801 = getelementptr inbounds i64, ptr %799, i64 %800
  %802 = load i64, ptr %801, align 8, !tbaa !9
  %803 = sub nsw i64 %798, %802
  %804 = call i64 @libmetis__PQueueInsert(ptr noundef %793, i64 noundef %794, i64 noundef %803)
  br label %805

805:                                              ; preds = %783, %777
  br label %806

806:                                              ; preds = %805, %759
  br label %807

807:                                              ; preds = %806, %758
  br label %808

808:                                              ; preds = %807
  %809 = load i64, ptr %11, align 8, !tbaa !9
  %810 = add nsw i64 %809, 1
  store i64 %810, ptr %11, align 8, !tbaa !9
  br label %613, !llvm.loop !42

811:                                              ; preds = %613
  br label %812

812:                                              ; preds = %811
  %813 = load i64, ptr %18, align 8, !tbaa !9
  %814 = add nsw i64 %813, 1
  store i64 %814, ptr %18, align 8, !tbaa !9
  br label %326, !llvm.loop !43

815:                                              ; preds = %448, %347, %326
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %816

816:                                              ; preds = %827, %815
  %817 = load i64, ptr %9, align 8, !tbaa !9
  %818 = load i64, ptr %18, align 8, !tbaa !9
  %819 = icmp slt i64 %817, %818
  br i1 %819, label %820, label %830

820:                                              ; preds = %816
  %821 = load ptr, ptr %34, align 8, !tbaa !5
  %822 = load ptr, ptr %35, align 8, !tbaa !5
  %823 = load i64, ptr %9, align 8, !tbaa !9
  %824 = getelementptr inbounds i64, ptr %822, i64 %823
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = getelementptr inbounds i64, ptr %821, i64 %825
  store i64 -1, ptr %826, align 8, !tbaa !9
  br label %827

827:                                              ; preds = %820
  %828 = load i64, ptr %9, align 8, !tbaa !9
  %829 = add nsw i64 %828, 1
  store i64 %829, ptr %9, align 8, !tbaa !9
  br label %816, !llvm.loop !44

830:                                              ; preds = %816
  %831 = load i64, ptr %18, align 8, !tbaa !9
  %832 = add nsw i64 %831, -1
  store i64 %832, ptr %18, align 8, !tbaa !9
  br label %833

833:                                              ; preds = %1092, %830
  %834 = load i64, ptr %18, align 8, !tbaa !9
  %835 = load i64, ptr %50, align 8, !tbaa !9
  %836 = icmp sgt i64 %834, %835
  br i1 %836, label %837, label %1095

837:                                              ; preds = %833
  %838 = load ptr, ptr %35, align 8, !tbaa !5
  %839 = load i64, ptr %18, align 8, !tbaa !9
  %840 = getelementptr inbounds i64, ptr %838, i64 %839
  %841 = load i64, ptr %840, align 8, !tbaa !9
  store i64 %841, ptr %45, align 8, !tbaa !9
  %842 = load ptr, ptr %29, align 8, !tbaa !5
  %843 = load i64, ptr %45, align 8, !tbaa !9
  %844 = getelementptr inbounds i64, ptr %842, i64 %843
  %845 = load i64, ptr %844, align 8, !tbaa !9
  %846 = add nsw i64 %845, 1
  %847 = srem i64 %846, 2
  %848 = load ptr, ptr %29, align 8, !tbaa !5
  %849 = load i64, ptr %45, align 8, !tbaa !9
  %850 = getelementptr inbounds i64, ptr %848, i64 %849
  store i64 %847, ptr %850, align 8, !tbaa !9
  store i64 %847, ptr %20, align 8, !tbaa !9
  br label %851

851:                                              ; preds = %837
  %852 = load ptr, ptr %30, align 8, !tbaa !5
  %853 = load i64, ptr %45, align 8, !tbaa !9
  %854 = getelementptr inbounds i64, ptr %852, i64 %853
  %855 = load i64, ptr %854, align 8, !tbaa !9
  store i64 %855, ptr %24, align 8, !tbaa !9
  %856 = load ptr, ptr %31, align 8, !tbaa !5
  %857 = load i64, ptr %45, align 8, !tbaa !9
  %858 = getelementptr inbounds i64, ptr %856, i64 %857
  %859 = load i64, ptr %858, align 8, !tbaa !9
  %860 = load ptr, ptr %30, align 8, !tbaa !5
  %861 = load i64, ptr %45, align 8, !tbaa !9
  %862 = getelementptr inbounds i64, ptr %860, i64 %861
  store i64 %859, ptr %862, align 8, !tbaa !9
  %863 = load i64, ptr %24, align 8, !tbaa !9
  %864 = load ptr, ptr %31, align 8, !tbaa !5
  %865 = load i64, ptr %45, align 8, !tbaa !9
  %866 = getelementptr inbounds i64, ptr %864, i64 %865
  store i64 %863, ptr %866, align 8, !tbaa !9
  br label %867

867:                                              ; preds = %851
  br label %868

868:                                              ; preds = %867
  %869 = load ptr, ptr %31, align 8, !tbaa !5
  %870 = load i64, ptr %45, align 8, !tbaa !9
  %871 = getelementptr inbounds i64, ptr %869, i64 %870
  %872 = load i64, ptr %871, align 8, !tbaa !9
  %873 = icmp eq i64 %872, 0
  br i1 %873, label %874, label %919

874:                                              ; preds = %868
  %875 = load ptr, ptr %32, align 8, !tbaa !5
  %876 = load i64, ptr %45, align 8, !tbaa !9
  %877 = getelementptr inbounds i64, ptr %875, i64 %876
  %878 = load i64, ptr %877, align 8, !tbaa !9
  %879 = icmp ne i64 %878, -1
  br i1 %879, label %880, label %919

880:                                              ; preds = %874
  %881 = load ptr, ptr %26, align 8, !tbaa !5
  %882 = load i64, ptr %45, align 8, !tbaa !9
  %883 = getelementptr inbounds i64, ptr %881, i64 %882
  %884 = load i64, ptr %883, align 8, !tbaa !9
  %885 = load ptr, ptr %26, align 8, !tbaa !5
  %886 = load i64, ptr %45, align 8, !tbaa !9
  %887 = add nsw i64 %886, 1
  %888 = getelementptr inbounds i64, ptr %885, i64 %887
  %889 = load i64, ptr %888, align 8, !tbaa !9
  %890 = icmp slt i64 %884, %889
  br i1 %890, label %891, label %919

891:                                              ; preds = %880
  br label %892

892:                                              ; preds = %891
  %893 = load ptr, ptr %33, align 8, !tbaa !5
  %894 = load i64, ptr %17, align 8, !tbaa !9
  %895 = add nsw i64 %894, -1
  store i64 %895, ptr %17, align 8, !tbaa !9
  %896 = getelementptr inbounds i64, ptr %893, i64 %895
  %897 = load i64, ptr %896, align 8, !tbaa !9
  %898 = load ptr, ptr %33, align 8, !tbaa !5
  %899 = load ptr, ptr %32, align 8, !tbaa !5
  %900 = load i64, ptr %45, align 8, !tbaa !9
  %901 = getelementptr inbounds i64, ptr %899, i64 %900
  %902 = load i64, ptr %901, align 8, !tbaa !9
  %903 = getelementptr inbounds i64, ptr %898, i64 %902
  store i64 %897, ptr %903, align 8, !tbaa !9
  %904 = load ptr, ptr %32, align 8, !tbaa !5
  %905 = load i64, ptr %45, align 8, !tbaa !9
  %906 = getelementptr inbounds i64, ptr %904, i64 %905
  %907 = load i64, ptr %906, align 8, !tbaa !9
  %908 = load ptr, ptr %32, align 8, !tbaa !5
  %909 = load ptr, ptr %33, align 8, !tbaa !5
  %910 = load i64, ptr %17, 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 %907, ptr %913, align 8, !tbaa !9
  %914 = load ptr, ptr %32, align 8, !tbaa !5
  %915 = load i64, ptr %45, align 8, !tbaa !9
  %916 = getelementptr inbounds i64, ptr %914, i64 %915
  store i64 -1, ptr %916, align 8, !tbaa !9
  br label %917

917:                                              ; preds = %892
  br label %918

918:                                              ; preds = %917
  br label %945

919:                                              ; preds = %880, %874, %868
  %920 = load ptr, ptr %31, align 8, !tbaa !5
  %921 = load i64, ptr %45, align 8, !tbaa !9
  %922 = getelementptr inbounds i64, ptr %920, i64 %921
  %923 = load i64, ptr %922, align 8, !tbaa !9
  %924 = icmp sgt i64 %923, 0
  br i1 %924, label %925, label %944

925:                                              ; preds = %919
  %926 = load ptr, ptr %32, align 8, !tbaa !5
  %927 = load i64, ptr %45, align 8, !tbaa !9
  %928 = getelementptr inbounds i64, ptr %926, i64 %927
  %929 = load i64, ptr %928, align 8, !tbaa !9
  %930 = icmp eq i64 %929, -1
  br i1 %930, label %931, label %944

931:                                              ; preds = %925
  br label %932

932:                                              ; preds = %931
  %933 = load i64, ptr %45, align 8, !tbaa !9
  %934 = load ptr, ptr %33, align 8, !tbaa !5
  %935 = load i64, ptr %17, align 8, !tbaa !9
  %936 = getelementptr inbounds i64, ptr %934, i64 %935
  store i64 %933, ptr %936, align 8, !tbaa !9
  %937 = load i64, ptr %17, align 8, !tbaa !9
  %938 = add nsw i64 %937, 1
  store i64 %938, ptr %17, align 8, !tbaa !9
  %939 = load ptr, ptr %32, align 8, !tbaa !5
  %940 = load i64, ptr %45, align 8, !tbaa !9
  %941 = getelementptr inbounds i64, ptr %939, i64 %940
  store i64 %937, ptr %941, align 8, !tbaa !9
  br label %942

942:                                              ; preds = %932
  br label %943

943:                                              ; preds = %942
  br label %944

944:                                              ; preds = %943, %925, %919
  br label %945

945:                                              ; preds = %944, %918
  %946 = load i64, ptr %16, align 8, !tbaa !9
  %947 = load ptr, ptr %38, align 8, !tbaa !5
  %948 = load i64, ptr %45, align 8, !tbaa !9
  %949 = load i64, ptr %16, align 8, !tbaa !9
  %950 = mul nsw i64 %948, %949
  %951 = getelementptr inbounds float, ptr %947, i64 %950
  %952 = load ptr, ptr %39, align 8, !tbaa !5
  %953 = load i64, ptr %20, align 8, !tbaa !9
  %954 = load i64, ptr %16, align 8, !tbaa !9
  %955 = mul nsw i64 %953, %954
  %956 = getelementptr inbounds float, ptr %952, i64 %955
  %957 = call ptr @gk_faxpy(i64 noundef %946, float noundef 1.000000e+00, ptr noundef %951, i64 noundef 1, ptr noundef %956, i64 noundef 1)
  %958 = load i64, ptr %16, align 8, !tbaa !9
  %959 = load ptr, ptr %38, align 8, !tbaa !5
  %960 = load i64, ptr %45, align 8, !tbaa !9
  %961 = load i64, ptr %16, align 8, !tbaa !9
  %962 = mul nsw i64 %960, %961
  %963 = getelementptr inbounds float, ptr %959, i64 %962
  %964 = load ptr, ptr %39, align 8, !tbaa !5
  %965 = load i64, ptr %20, align 8, !tbaa !9
  %966 = add nsw i64 %965, 1
  %967 = srem i64 %966, 2
  %968 = load i64, ptr %16, align 8, !tbaa !9
  %969 = mul nsw i64 %967, %968
  %970 = getelementptr inbounds float, ptr %964, i64 %969
  %971 = call ptr @gk_faxpy(i64 noundef %958, float noundef -1.000000e+00, ptr noundef %963, i64 noundef 1, ptr noundef %970, i64 noundef 1)
  %972 = load ptr, ptr %26, align 8, !tbaa !5
  %973 = load i64, ptr %45, align 8, !tbaa !9
  %974 = getelementptr inbounds i64, ptr %972, i64 %973
  %975 = load i64, ptr %974, align 8, !tbaa !9
  store i64 %975, ptr %11, align 8, !tbaa !9
  br label %976

976:                                              ; preds = %1088, %945
  %977 = load i64, ptr %11, align 8, !tbaa !9
  %978 = load ptr, ptr %26, align 8, !tbaa !5
  %979 = load i64, ptr %45, align 8, !tbaa !9
  %980 = add nsw i64 %979, 1
  %981 = getelementptr inbounds i64, ptr %978, i64 %980
  %982 = load i64, ptr %981, align 8, !tbaa !9
  %983 = icmp slt i64 %977, %982
  br i1 %983, label %984, label %1091

984:                                              ; preds = %976
  %985 = load ptr, ptr %27, align 8, !tbaa !5
  %986 = load i64, ptr %11, align 8, !tbaa !9
  %987 = getelementptr inbounds i64, ptr %985, i64 %986
  %988 = load i64, ptr %987, align 8, !tbaa !9
  store i64 %988, ptr %12, align 8, !tbaa !9
  %989 = load i64, ptr %20, align 8, !tbaa !9
  %990 = load ptr, ptr %29, align 8, !tbaa !5
  %991 = load i64, ptr %12, align 8, !tbaa !9
  %992 = getelementptr inbounds i64, ptr %990, i64 %991
  %993 = load i64, ptr %992, align 8, !tbaa !9
  %994 = icmp eq i64 %989, %993
  br i1 %994, label %995, label %1000

995:                                              ; preds = %984
  %996 = load ptr, ptr %28, align 8, !tbaa !5
  %997 = load i64, ptr %11, align 8, !tbaa !9
  %998 = getelementptr inbounds i64, ptr %996, i64 %997
  %999 = load i64, ptr %998, align 8, !tbaa !9
  br label %1006

1000:                                             ; preds = %984
  %1001 = load ptr, ptr %28, align 8, !tbaa !5
  %1002 = load i64, ptr %11, align 8, !tbaa !9
  %1003 = getelementptr inbounds i64, ptr %1001, i64 %1002
  %1004 = load i64, ptr %1003, align 8, !tbaa !9
  %1005 = sub nsw i64 0, %1004
  br label %1006

1006:                                             ; preds = %1000, %995
  %1007 = phi i64 [ %999, %995 ], [ %1005, %1000 ]
  store i64 %1007, ptr %14, align 8, !tbaa !9
  br label %1008

1008:                                             ; preds = %1006
  %1009 = load i64, ptr %14, align 8, !tbaa !9
  %1010 = load ptr, ptr %30, align 8, !tbaa !5
  %1011 = load i64, ptr %12, align 8, !tbaa !9
  %1012 = getelementptr inbounds i64, ptr %1010, i64 %1011
  %1013 = load i64, ptr %1012, align 8, !tbaa !9
  %1014 = add nsw i64 %1013, %1009
  store i64 %1014, ptr %1012, align 8, !tbaa !9
  %1015 = load i64, ptr %14, align 8, !tbaa !9
  %1016 = load ptr, ptr %31, align 8, !tbaa !5
  %1017 = load i64, ptr %12, align 8, !tbaa !9
  %1018 = getelementptr inbounds i64, ptr %1016, i64 %1017
  %1019 = load i64, ptr %1018, align 8, !tbaa !9
  %1020 = sub nsw i64 %1019, %1015
  store i64 %1020, ptr %1018, align 8, !tbaa !9
  br label %1021

1021:                                             ; preds = %1008
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load ptr, ptr %32, align 8, !tbaa !5
  %1024 = load i64, ptr %12, align 8, !tbaa !9
  %1025 = getelementptr inbounds i64, ptr %1023, i64 %1024
  %1026 = load i64, ptr %1025, align 8, !tbaa !9
  %1027 = icmp ne i64 %1026, -1
  br i1 %1027, label %1028, label %1062

1028:                                             ; preds = %1022
  %1029 = load ptr, ptr %31, align 8, !tbaa !5
  %1030 = load i64, ptr %12, align 8, !tbaa !9
  %1031 = getelementptr inbounds i64, ptr %1029, i64 %1030
  %1032 = load i64, ptr %1031, align 8, !tbaa !9
  %1033 = icmp eq i64 %1032, 0
  br i1 %1033, label %1034, label %1062

1034:                                             ; preds = %1028
  br label %1035

1035:                                             ; preds = %1034
  %1036 = load ptr, ptr %33, align 8, !tbaa !5
  %1037 = load i64, ptr %17, align 8, !tbaa !9
  %1038 = add nsw i64 %1037, -1
  store i64 %1038, ptr %17, align 8, !tbaa !9
  %1039 = getelementptr inbounds i64, ptr %1036, i64 %1038
  %1040 = load i64, ptr %1039, align 8, !tbaa !9
  %1041 = load ptr, ptr %33, align 8, !tbaa !5
  %1042 = load ptr, ptr %32, align 8, !tbaa !5
  %1043 = load i64, ptr %12, align 8, !tbaa !9
  %1044 = getelementptr inbounds i64, ptr %1042, i64 %1043
  %1045 = load i64, ptr %1044, align 8, !tbaa !9
  %1046 = getelementptr inbounds i64, ptr %1041, i64 %1045
  store i64 %1040, ptr %1046, align 8, !tbaa !9
  %1047 = load ptr, ptr %32, align 8, !tbaa !5
  %1048 = load i64, ptr %12, align 8, !tbaa !9
  %1049 = getelementptr inbounds i64, ptr %1047, i64 %1048
  %1050 = load i64, ptr %1049, align 8, !tbaa !9
  %1051 = load ptr, ptr %32, align 8, !tbaa !5
  %1052 = load ptr, ptr %33, align 8, !tbaa !5
  %1053 = load i64, ptr %17, align 8, !tbaa !9
  %1054 = getelementptr inbounds i64, ptr %1052, i64 %1053
  %1055 = load i64, ptr %1054, align 8, !tbaa !9
  %1056 = getelementptr inbounds i64, ptr %1051, i64 %1055
  store i64 %1050, ptr %1056, align 8, !tbaa !9
  %1057 = load ptr, ptr %32, align 8, !tbaa !5
  %1058 = load i64, ptr %12, align 8, !tbaa !9
  %1059 = getelementptr inbounds i64, ptr %1057, i64 %1058
  store i64 -1, ptr %1059, align 8, !tbaa !9
  br label %1060

1060:                                             ; preds = %1035
  br label %1061

1061:                                             ; preds = %1060
  br label %1062

1062:                                             ; preds = %1061, %1028, %1022
  %1063 = load ptr, ptr %32, align 8, !tbaa !5
  %1064 = load i64, ptr %12, align 8, !tbaa !9
  %1065 = getelementptr inbounds i64, ptr %1063, i64 %1064
  %1066 = load i64, ptr %1065, align 8, !tbaa !9
  %1067 = icmp eq i64 %1066, -1
  br i1 %1067, label %1068, label %1087

1068:                                             ; preds = %1062
  %1069 = load ptr, ptr %31, align 8, !tbaa !5
  %1070 = load i64, ptr %12, align 8, !tbaa !9
  %1071 = getelementptr inbounds i64, ptr %1069, i64 %1070
  %1072 = load i64, ptr %1071, align 8, !tbaa !9
  %1073 = icmp sgt i64 %1072, 0
  br i1 %1073, label %1074, label %1087

1074:                                             ; preds = %1068
  br label %1075

1075:                                             ; preds = %1074
  %1076 = load i64, ptr %12, align 8, !tbaa !9
  %1077 = load ptr, ptr %33, align 8, !tbaa !5
  %1078 = load i64, ptr %17, align 8, !tbaa !9
  %1079 = getelementptr inbounds i64, ptr %1077, i64 %1078
  store i64 %1076, ptr %1079, align 8, !tbaa !9
  %1080 = load i64, ptr %17, align 8, !tbaa !9
  %1081 = add nsw i64 %1080, 1
  store i64 %1081, ptr %17, align 8, !tbaa !9
  %1082 = load ptr, ptr %32, align 8, !tbaa !5
  %1083 = load i64, ptr %12, align 8, !tbaa !9
  %1084 = getelementptr inbounds i64, ptr %1082, i64 %1083
  store i64 %1080, ptr %1084, align 8, !tbaa !9
  br label %1085

1085:                                             ; preds = %1075
  br label %1086

1086:                                             ; preds = %1085
  br label %1087

1087:                                             ; preds = %1086, %1068, %1062
  br label %1088

1088:                                             ; preds = %1087
  %1089 = load i64, ptr %11, align 8, !tbaa !9
  %1090 = add nsw i64 %1089, 1
  store i64 %1090, ptr %11, align 8, !tbaa !9
  br label %976, !llvm.loop !45

1091:                                             ; preds = %976
  br label %1092

1092:                                             ; preds = %1091
  %1093 = load i64, ptr %18, align 8, !tbaa !9
  %1094 = add nsw i64 %1093, -1
  store i64 %1094, ptr %18, align 8, !tbaa !9
  br label %833, !llvm.loop !46

1095:                                             ; preds = %833
  %1096 = load ptr, ptr %5, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.controldef, ptr %1096, i32 0, i32 1
  %1098 = load i64, ptr %1097, align 8, !tbaa !30
  %1099 = and i64 %1098, 8
  %1100 = icmp ne i64 %1099, 0
  br i1 %1100, label %1101, label %1134

1101:                                             ; preds = %1095
  %1102 = load i64, ptr %47, align 8, !tbaa !9
  %1103 = load i64, ptr %50, align 8, !tbaa !9
  %1104 = load i64, ptr %17, align 8, !tbaa !9
  %1105 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %1102, i64 noundef %1103, i64 noundef %1104)
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %1106

1106:                                             ; preds = %1124, %1101
  %1107 = load i64, ptr %13, align 8, !tbaa !9
  %1108 = load i64, ptr %16, align 8, !tbaa !9
  %1109 = icmp slt i64 %1107, %1108
  br i1 %1109, label %1110, label %1127

1110:                                             ; preds = %1106
  %1111 = load ptr, ptr %39, align 8, !tbaa !5
  %1112 = load i64, ptr %13, align 8, !tbaa !9
  %1113 = getelementptr inbounds float, ptr %1111, i64 %1112
  %1114 = load float, ptr %1113, align 4, !tbaa !28
  %1115 = fpext float %1114 to double
  %1116 = load ptr, ptr %39, align 8, !tbaa !5
  %1117 = load i64, ptr %16, align 8, !tbaa !9
  %1118 = load i64, ptr %13, align 8, !tbaa !9
  %1119 = add nsw i64 %1117, %1118
  %1120 = getelementptr inbounds float, ptr %1116, i64 %1119
  %1121 = load float, ptr %1120, align 4, !tbaa !28
  %1122 = fpext float %1121 to double
  %1123 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %1115, double noundef %1122)
  br label %1124

1124:                                             ; preds = %1110
  %1125 = load i64, ptr %13, align 8, !tbaa !9
  %1126 = add nsw i64 %1125, 1
  store i64 %1126, ptr %13, align 8, !tbaa !9
  br label %1106, !llvm.loop !47

1127:                                             ; preds = %1106
  %1128 = load i64, ptr %16, align 8, !tbaa !9
  %1129 = load ptr, ptr %39, align 8, !tbaa !5
  %1130 = load ptr, ptr %7, align 8, !tbaa !5
  %1131 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %1128, ptr noundef %1129, ptr noundef %1130)
  %1132 = fpext float %1131 to double
  %1133 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6, double noundef %1132)
  br label %1134

1134:                                             ; preds = %1127, %1095
  %1135 = load i64, ptr %47, align 8, !tbaa !9
  %1136 = load ptr, ptr %6, align 8, !tbaa !5
  %1137 = getelementptr inbounds %struct.graphdef, ptr %1136, i32 0, i32 16
  store i64 %1135, ptr %1137, align 8, !tbaa !36
  %1138 = load i64, ptr %17, align 8, !tbaa !9
  %1139 = load ptr, ptr %6, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.graphdef, ptr %1139, i32 0, i32 20
  store i64 %1138, ptr %1140, align 8, !tbaa !35
  %1141 = load i64, ptr %50, align 8, !tbaa !9
  %1142 = icmp eq i64 %1141, -1
  br i1 %1142, label %1147, label %1143

1143:                                             ; preds = %1134
  %1144 = load i64, ptr %47, align 8, !tbaa !9
  %1145 = load i64, ptr %48, align 8, !tbaa !9
  %1146 = icmp eq i64 %1144, %1145
  br i1 %1146, label %1147, label %1148

1147:                                             ; preds = %1143, %1134
  br label %1152

1148:                                             ; preds = %1143
  br label %1149

1149:                                             ; preds = %1148
  %1150 = load i64, ptr %21, align 8, !tbaa !9
  %1151 = add nsw i64 %1150, 1
  store i64 %1151, ptr %21, align 8, !tbaa !9
  br label %235, !llvm.loop !48

1152:                                             ; preds = %1147, %235
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %1153

1153:                                             ; preds = %1166, %1152
  %1154 = load i64, ptr %9, align 8, !tbaa !9
  %1155 = load i64, ptr %16, align 8, !tbaa !9
  %1156 = icmp slt i64 %1154, %1155
  br i1 %1156, label %1157, label %1169

1157:                                             ; preds = %1153
  %1158 = load ptr, ptr %5, align 8, !tbaa !5
  %1159 = load i64, ptr %9, align 8, !tbaa !9
  %1160 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1159
  %1161 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1160, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1158, ptr noundef %1161)
  %1162 = load ptr, ptr %5, align 8, !tbaa !5
  %1163 = load i64, ptr %9, align 8, !tbaa !9
  %1164 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1163
  %1165 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1164, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1162, ptr noundef %1165)
  br label %1166

1166:                                             ; preds = %1157
  %1167 = load i64, ptr %9, align 8, !tbaa !9
  %1168 = add nsw i64 %1167, 1
  store i64 %1168, ptr %9, align 8, !tbaa !9
  br label %1153, !llvm.loop !49

1169:                                             ; preds = %1153
  %1170 = load ptr, ptr %5, align 8, !tbaa !5
  %1171 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1170, i64 noundef %1171)
  %1172 = load ptr, ptr %5, align 8, !tbaa !5
  %1173 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1172, i64 noundef %1173)
  %1174 = load ptr, ptr %5, align 8, !tbaa !5
  %1175 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1174, i64 noundef %1175)
  %1176 = load ptr, ptr %5, align 8, !tbaa !5
  %1177 = load i64, ptr %15, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1176, i64 noundef %1177)
  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 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 2816, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 64, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #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__PQueueInit(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #2

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

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

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

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

declare void @libmetis__PQueueReset(ptr noundef) #2

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

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__SelectQueue(i64 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

; Function Attrs: nounwind uwtable
declare dso_local i64 @libmetis__BetterBalance(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

; 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 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!29, !29, i64 0}
!29 = !{!"float", !7, i64 0}
!30 = !{!31, !10, i64 8}
!31 = !{!"controldef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !29, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !32, i64 88, !33, i64 152, !33, i64 160, !33, i64 168, !33, i64 176, !33, i64 184, !33, i64 192, !33, i64 200, !33, i64 208, !33, i64 216, !33, i64 224, !33, i64 232, !33, i64 240, !33, i64 248, !33, i64 256, !33, i64 264, !33, i64 272}
!32 = !{!"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}
!33 = !{!"double", !7, i64 0}
!34 = distinct !{!34, !26}
!35 = !{!12, !10, i64 144}
!36 = !{!12, !10, i64 112}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = distinct !{!41, !26}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !26}
!47 = distinct !{!47, !26}
!48 = distinct !{!48, !26}
!49 = distinct !{!49, !26}


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

%struct.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 [54 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1

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

.preheader506:                                    ; preds = %.lr.ph, %4
  %46 = icmp sgt i64 %11, 0
  br i1 %46, label %.lr.ph518, label %._crit_edge

.lr.ph:                                           ; preds = %4, %.lr.ph
  %.0459516 = phi i64 [ %49, %.lr.ph ], [ 0, %4 ]
  %47 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %.0459516
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %47, i64 noundef %11, i64 noundef 501) #4
  %48 = getelementptr inbounds i8, ptr %47, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %48, i64 noundef %11, i64 noundef 501) #4
  %49 = add nuw nsw i64 %.0459516, 1
  %exitcond.not = icmp eq i64 %49, %13
  br i1 %exitcond.not, label %.preheader506, label %.lr.ph, !llvm.loop !23

.lr.ph518:                                        ; preds = %.preheader506, %.lr.ph518
  %.1460517 = phi i64 [ %54, %.lr.ph518 ], [ 0, %.preheader506 ]
  %50 = mul nsw i64 %.1460517, %13
  %51 = getelementptr inbounds float, ptr %17, i64 %50
  %52 = call i64 @gk_fargmax(i64 noundef %13, ptr noundef %51) #4
  %53 = getelementptr inbounds i64, ptr %38, i64 %.1460517
  store i64 %52, ptr %53, align 8, !tbaa !25
  %54 = add nuw nsw i64 %.1460517, 1
  %exitcond597.not = icmp eq i64 %54, %11
  br i1 %exitcond597.not, label %._crit_edge, label %.lr.ph518, !llvm.loop !26

._crit_edge:                                      ; preds = %.lr.ph518, %.preheader506
  %55 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef %2)
  %56 = getelementptr inbounds i8, ptr %2, i64 4
  %57 = load <2 x float>, ptr %2, align 4, !tbaa !27
  %58 = insertelement <2 x float> poison, float %55, i64 0
  %59 = shufflevector <2 x float> %58, <2 x float> poison, <2 x i32> zeroinitializer
  %60 = fmul <2 x float> %59, %57
  store <2 x float> %60, ptr %10, align 8, !tbaa !27
  %61 = getelementptr inbounds i8, ptr %0, i64 8
  %62 = load i64, ptr %61, align 8, !tbaa !29
  %63 = and i64 %62, 8
  %.not = icmp eq i64 %63, 0
  br i1 %.not, label %87, label %64

64:                                               ; preds = %._crit_edge
  %65 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str) #4
  br i1 %45, label %.lr.ph521, label %._crit_edge522

.lr.ph521:                                        ; preds = %64
  %66 = getelementptr float, ptr %29, i64 %13
  br label %67

67:                                               ; preds = %.lr.ph521, %67
  %.0468519 = phi i64 [ 0, %.lr.ph521 ], [ %75, %67 ]
  %68 = getelementptr inbounds float, ptr %29, i64 %.0468519
  %69 = load float, ptr %68, align 4, !tbaa !27
  %70 = fpext float %69 to double
  %71 = getelementptr float, ptr %66, i64 %.0468519
  %72 = load float, ptr %71, align 4, !tbaa !27
  %73 = fpext float %72 to double
  %74 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %70, double noundef %73) #4
  %75 = add nuw nsw i64 %.0468519, 1
  %exitcond598.not = icmp eq i64 %75, %13
  br i1 %exitcond598.not, label %._crit_edge522, label %67, !llvm.loop !33

._crit_edge522:                                   ; preds = %67, %64
  %76 = load float, ptr %2, align 4, !tbaa !27
  %77 = fpext float %76 to double
  %78 = load float, ptr %56, align 4, !tbaa !27
  %79 = fpext float %78 to double
  %80 = load i64, ptr %1, align 8, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %1, i64 144
  %82 = load i64, ptr %81, align 8, !tbaa !34
  %83 = getelementptr inbounds i8, ptr %1, i64 112
  %84 = load i64, ptr %83, align 8, !tbaa !35
  %85 = fpext float %55 to double
  %86 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, double noundef %77, double noundef %79, i64 noundef %80, i64 noundef %82, i64 noundef %84, double noundef %85) #4
  br label %87

87:                                               ; preds = %._crit_edge522, %._crit_edge
  %88 = call ptr @libmetis__idxset(i64 noundef %11, i64 noundef -1, ptr noundef %35) #4
  %89 = icmp sgt i64 %3, 0
  br i1 %89, label %.preheader505.lr.ph, label %._crit_edge585

.preheader505.lr.ph:                              ; preds = %87
  %90 = getelementptr inbounds i8, ptr %1, i64 112
  %91 = getelementptr inbounds i8, ptr %1, i64 144
  %92 = getelementptr float, ptr %29, i64 %13
  %93 = sub i64 %8, %30
  %min.iters.check664 = icmp ult i64 %13, 8
  %diff.check661 = icmp ult i64 %93, 32
  %or.cond677 = select i1 %min.iters.check664, i1 true, i1 %diff.check661
  %n.vec667 = and i64 %13, 9223372036854775800
  %cmp.n676 = icmp eq i64 %13, %n.vec667
  %xtraiter = and i64 %13, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %min.iters.check = icmp ult i64 %13, 8
  %diff.check = icmp ult i64 %93, 32
  %or.cond678 = select i1 %min.iters.check, i1 true, i1 %diff.check
  %n.vec = and i64 %13, 9223372036854775800
  %cmp.n = icmp eq i64 %13, %n.vec
  %xtraiter694 = and i64 %13, 1
  %lcmp.mod695.not = icmp eq i64 %xtraiter694, 0
  br label %.preheader505

.preheader505:                                    ; preds = %469, %.preheader505.lr.ph
  %.0480584 = phi i64 [ 0, %.preheader505.lr.ph ], [ %472, %469 ]
  br i1 %45, label %.lr.ph524, label %._crit_edge525.thread

._crit_edge525.thread:                            ; preds = %.preheader505
  %94 = load i64, ptr %90, align 8, !tbaa !35
  br label %._crit_edge529

.lr.ph524:                                        ; preds = %.preheader505, %.lr.ph524
  %.2523 = phi i64 [ %97, %.lr.ph524 ], [ 0, %.preheader505 ]
  %95 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %.2523
  call void @libmetis__PQueueReset(ptr noundef nonnull %95) #4
  %96 = getelementptr inbounds i8, ptr %95, i64 88
  call void @libmetis__PQueueReset(ptr noundef nonnull %96) #4
  %97 = add nuw nsw i64 %.2523, 1
  %exitcond599.not = icmp eq i64 %97, %13
  br i1 %exitcond599.not, label %._crit_edge525, label %.lr.ph524, !llvm.loop !36

._crit_edge525:                                   ; preds = %.lr.ph524
  %98 = load i64, ptr %90, align 8, !tbaa !35
  br i1 %45, label %.lr.ph528, label %._crit_edge529

.lr.ph528:                                        ; preds = %._crit_edge525
  %99 = load float, ptr %2, align 4, !tbaa !27
  br i1 %or.cond677, label %scalar.ph663.preheader, label %vector.ph665

vector.ph665:                                     ; preds = %.lr.ph528
  %broadcast.splatinsert673 = insertelement <4 x float> poison, float %99, i64 0
  %broadcast.splat674 = shufflevector <4 x float> %broadcast.splatinsert673, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body669

vector.body669:                                   ; preds = %vector.body669, %vector.ph665
  %index670 = phi i64 [ 0, %vector.ph665 ], [ %index.next675, %vector.body669 ]
  %100 = getelementptr inbounds float, ptr %29, i64 %index670
  %101 = getelementptr inbounds i8, ptr %100, i64 16
  %wide.load671 = load <4 x float>, ptr %100, align 4, !tbaa !27
  %wide.load672 = load <4 x float>, ptr %101, align 4, !tbaa !27
  %102 = fsub <4 x float> %broadcast.splat674, %wide.load671
  %103 = fsub <4 x float> %broadcast.splat674, %wide.load672
  %104 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %102)
  %105 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %103)
  %106 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index670
  %107 = getelementptr inbounds i8, ptr %106, i64 16
  store <4 x float> %104, ptr %106, align 16, !tbaa !27
  store <4 x float> %105, ptr %107, align 16, !tbaa !27
  %index.next675 = add nuw i64 %index670, 8
  %108 = icmp eq i64 %index.next675, %n.vec667
  br i1 %108, label %middle.block662, label %vector.body669, !llvm.loop !37

middle.block662:                                  ; preds = %vector.body669
  br i1 %cmp.n676, label %._crit_edge529, label %scalar.ph663.preheader

scalar.ph663.preheader:                           ; preds = %middle.block662, %.lr.ph528
  %.3526.ph = phi i64 [ 0, %.lr.ph528 ], [ %n.vec667, %middle.block662 ]
  %.neg698 = or disjoint i64 %.3526.ph, 1
  br i1 %lcmp.mod.not, label %scalar.ph663.prol.loopexit, label %scalar.ph663.prol

scalar.ph663.prol:                                ; preds = %scalar.ph663.preheader
  %109 = getelementptr inbounds float, ptr %29, i64 %.3526.ph
  %110 = load float, ptr %109, align 4, !tbaa !27
  %111 = fsub float %99, %110
  %112 = call float @llvm.fabs.f32(float %111)
  %113 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.3526.ph
  store float %112, ptr %113, align 16, !tbaa !27
  %114 = or disjoint i64 %.3526.ph, 1
  br label %scalar.ph663.prol.loopexit

scalar.ph663.prol.loopexit:                       ; preds = %scalar.ph663.prol, %scalar.ph663.preheader
  %.3526.unr = phi i64 [ %.3526.ph, %scalar.ph663.preheader ], [ %114, %scalar.ph663.prol ]
  %115 = icmp eq i64 %13, %.neg698
  br i1 %115, label %._crit_edge529, label %scalar.ph663

scalar.ph663:                                     ; preds = %scalar.ph663.prol.loopexit, %scalar.ph663
  %.3526 = phi i64 [ %127, %scalar.ph663 ], [ %.3526.unr, %scalar.ph663.prol.loopexit ]
  %116 = getelementptr inbounds float, ptr %29, i64 %.3526
  %117 = load float, ptr %116, align 4, !tbaa !27
  %118 = fsub float %99, %117
  %119 = call float @llvm.fabs.f32(float %118)
  %120 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.3526
  store float %119, ptr %120, align 4, !tbaa !27
  %121 = add nuw nsw i64 %.3526, 1
  %122 = getelementptr inbounds float, ptr %29, i64 %121
  %123 = load float, ptr %122, align 4, !tbaa !27
  %124 = fsub float %99, %123
  %125 = call float @llvm.fabs.f32(float %124)
  %126 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %121
  store float %125, ptr %126, align 4, !tbaa !27
  %127 = add nuw nsw i64 %.3526, 2
  %exitcond600.not.1 = icmp eq i64 %127, %13
  br i1 %exitcond600.not.1, label %._crit_edge529, label %scalar.ph663, !llvm.loop !40

._crit_edge529:                                   ; preds = %scalar.ph663.prol.loopexit, %scalar.ph663, %middle.block662, %._crit_edge525.thread, %._crit_edge525
  %128 = phi i64 [ %94, %._crit_edge525.thread ], [ %98, %._crit_edge525 ], [ %98, %middle.block662 ], [ %98, %scalar.ph663 ], [ %98, %scalar.ph663.prol.loopexit ]
  %129 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef nonnull %2)
  %130 = load i64, ptr %91, align 8, !tbaa !34
  call void @libmetis__RandomPermute(i64 noundef %130, ptr noundef %37, i64 noundef 1) #4
  %131 = icmp sgt i64 %130, 0
  br i1 %131, label %.lr.ph532, label %.preheader503

.preheader503:                                    ; preds = %.lr.ph532, %._crit_edge529
  br i1 %46, label %.lr.ph552, label %.preheader

.lr.ph532:                                        ; preds = %._crit_edge529, %.lr.ph532
  %.0463530 = phi i64 [ %147, %.lr.ph532 ], [ 0, %._crit_edge529 ]
  %132 = getelementptr inbounds i64, ptr %37, i64 %.0463530
  %133 = load i64, ptr %132, align 8, !tbaa !25
  %134 = getelementptr inbounds i64, ptr %34, i64 %133
  %135 = load i64, ptr %134, align 8, !tbaa !25
  %136 = getelementptr inbounds i64, ptr %38, i64 %135
  %137 = load i64, ptr %136, align 8, !tbaa !25
  %138 = getelementptr inbounds i64, ptr %23, i64 %135
  %139 = load i64, ptr %138, align 8, !tbaa !25
  %140 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %137, i64 %139
  %141 = getelementptr inbounds i64, ptr %27, i64 %135
  %142 = load i64, ptr %141, align 8, !tbaa !25
  %143 = getelementptr inbounds i64, ptr %25, i64 %135
  %144 = load i64, ptr %143, align 8, !tbaa !25
  %145 = sub nsw i64 %142, %144
  %146 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %140, i64 noundef %135, i64 noundef %145) #4
  %147 = add nuw nsw i64 %.0463530, 1
  %exitcond601.not = icmp eq i64 %147, %130
  br i1 %exitcond601.not, label %.preheader503, label %.lr.ph532, !llvm.loop !41

.lr.ph552:                                        ; preds = %.preheader503, %._crit_edge544
  %.0551 = phi i64 [ %.1, %._crit_edge544 ], [ -1, %.preheader503 ]
  %.0458550 = phi i64 [ %171, %._crit_edge544 ], [ %128, %.preheader503 ]
  %.0461549 = phi i64 [ %.1462, %._crit_edge544 ], [ %128, %.preheader503 ]
  %.0466548 = phi float [ %.1467, %._crit_edge544 ], [ %129, %.preheader503 ]
  %.0471546 = phi i64 [ %.2473.lcssa, %._crit_edge544 ], [ %130, %.preheader503 ]
  %.0478545 = phi i64 [ %343, %._crit_edge544 ], [ 0, %.preheader503 ]
  call void @libmetis__SelectQueue(i64 noundef %13, ptr noundef %29, ptr noundef nonnull %10, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %9)
  %148 = load i64, ptr %5, align 8, !tbaa !25
  %149 = add nsw i64 %148, 1
  %150 = srem i64 %149, 2
  %151 = icmp eq i64 %148, -1
  br i1 %151, label %.loopexit504, label %152

152:                                              ; preds = %.lr.ph552
  %153 = load i64, ptr %6, align 8, !tbaa !25
  %154 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %153, i64 %148
  %155 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %154) #4
  %156 = icmp eq i64 %155, -1
  br i1 %156, label %.loopexit504, label %157

157:                                              ; preds = %152
  %158 = mul nsw i64 %155, %13
  %159 = getelementptr inbounds float, ptr %17, i64 %158
  %160 = mul nsw i64 %150, %13
  %161 = getelementptr inbounds float, ptr %29, i64 %160
  %162 = call ptr @gk_faxpy(i64 noundef %13, float noundef 1.000000e+00, ptr noundef %159, i64 noundef 1, ptr noundef %161, i64 noundef 1) #4
  %163 = load i64, ptr %5, align 8, !tbaa !25
  %164 = mul nsw i64 %163, %13
  %165 = getelementptr inbounds float, ptr %29, i64 %164
  %166 = call ptr @gk_faxpy(i64 noundef %13, float noundef -1.000000e+00, ptr noundef %159, i64 noundef 1, ptr noundef %165, i64 noundef 1) #4
  %167 = getelementptr inbounds i64, ptr %27, i64 %155
  %168 = load i64, ptr %167, align 8, !tbaa !25
  %169 = getelementptr inbounds i64, ptr %25, i64 %155
  %170 = load i64, ptr %169, align 8, !tbaa !25
  %.neg = sub i64 %170, %168
  %171 = add i64 %.neg, %.0458550
  %172 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef nonnull %2)
  %173 = icmp slt i64 %171, %.0461549
  br i1 %173, label %174, label %178

174:                                              ; preds = %157
  %175 = fsub float %172, %55
  %176 = fpext float %175 to double
  %177 = fcmp ugt double %176, 1.000000e-05
  br i1 %177, label %178, label %186

178:                                              ; preds = %174, %157
  %179 = icmp eq i64 %171, %.0461549
  br i1 %179, label %180, label %216

180:                                              ; preds = %178
  %181 = fcmp olt float %172, %.0466548
  br i1 %181, label %186, label %182

182:                                              ; preds = %180
  %183 = fcmp oeq float %172, %.0466548
  br i1 %183, label %184, label %216

184:                                              ; preds = %182
  %185 = call i64 @libmetis__BetterBalance(i64 noundef %13, ptr noundef %29, ptr noundef nonnull %2, ptr noundef nonnull %7)
  %.not492 = icmp eq i64 %185, 0
  br i1 %.not492, label %216, label %186

186:                                              ; preds = %184, %180, %174
  br i1 %45, label %.lr.ph535, label %.loopexit502

.lr.ph535:                                        ; preds = %186
  %187 = load float, ptr %2, align 4, !tbaa !27
  br i1 %or.cond678, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph535
  %broadcast.splatinsert = insertelement <4 x float> poison, float %187, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %188 = getelementptr inbounds float, ptr %29, i64 %index
  %189 = getelementptr inbounds i8, ptr %188, i64 16
  %wide.load = load <4 x float>, ptr %188, align 4, !tbaa !27
  %wide.load659 = load <4 x float>, ptr %189, align 4, !tbaa !27
  %190 = fsub <4 x float> %broadcast.splat, %wide.load
  %191 = fsub <4 x float> %broadcast.splat, %wide.load659
  %192 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %190)
  %193 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %191)
  %194 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index
  %195 = getelementptr inbounds i8, ptr %194, i64 16
  store <4 x float> %192, ptr %194, align 16, !tbaa !27
  store <4 x float> %193, ptr %195, align 16, !tbaa !27
  %index.next = add nuw i64 %index, 8
  %196 = icmp eq i64 %index.next, %n.vec
  br i1 %196, label %middle.block, label %vector.body, !llvm.loop !42

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit502, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph535
  %.4533.ph = phi i64 [ 0, %.lr.ph535 ], [ %n.vec, %middle.block ]
  %.neg699 = or disjoint i64 %.4533.ph, 1
  br i1 %lcmp.mod695.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %197 = getelementptr inbounds float, ptr %29, i64 %.4533.ph
  %198 = load float, ptr %197, align 4, !tbaa !27
  %199 = fsub float %187, %198
  %200 = call float @llvm.fabs.f32(float %199)
  %201 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.4533.ph
  store float %200, ptr %201, align 16, !tbaa !27
  %202 = or disjoint i64 %.4533.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.4533.unr = phi i64 [ %.4533.ph, %scalar.ph.preheader ], [ %202, %scalar.ph.prol ]
  %203 = icmp eq i64 %13, %.neg699
  br i1 %203, label %.loopexit502, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.4533 = phi i64 [ %215, %scalar.ph ], [ %.4533.unr, %scalar.ph.prol.loopexit ]
  %204 = getelementptr inbounds float, ptr %29, i64 %.4533
  %205 = load float, ptr %204, align 4, !tbaa !27
  %206 = fsub float %187, %205
  %207 = call float @llvm.fabs.f32(float %206)
  %208 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.4533
  store float %207, ptr %208, align 4, !tbaa !27
  %209 = add nuw nsw i64 %.4533, 1
  %210 = getelementptr inbounds float, ptr %29, i64 %209
  %211 = load float, ptr %210, align 4, !tbaa !27
  %212 = fsub float %187, %211
  %213 = call float @llvm.fabs.f32(float %212)
  %214 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %209
  store float %213, ptr %214, align 4, !tbaa !27
  %215 = add nuw nsw i64 %.4533, 2
  %exitcond602.not.1 = icmp eq i64 %215, %13
  br i1 %exitcond602.not.1, label %.loopexit502, label %scalar.ph, !llvm.loop !43

216:                                              ; preds = %184, %182, %178
  %217 = sub nsw i64 %.0478545, %.0551
  %218 = icmp sgt i64 %217, %44
  br i1 %218, label %219, label %.loopexit502

219:                                              ; preds = %216
  %220 = load i64, ptr %5, align 8, !tbaa !25
  %221 = mul nsw i64 %220, %13
  %222 = getelementptr inbounds float, ptr %29, i64 %221
  %223 = call ptr @gk_faxpy(i64 noundef %13, float noundef 1.000000e+00, ptr noundef %159, i64 noundef 1, ptr noundef %222, i64 noundef 1) #4
  %224 = call ptr @gk_faxpy(i64 noundef %13, float noundef -1.000000e+00, ptr noundef %159, i64 noundef 1, ptr noundef %161, i64 noundef 1) #4
  br label %.loopexit504

.loopexit502:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %186, %216
  %.1467 = phi float [ %.0466548, %216 ], [ %172, %186 ], [ %172, %middle.block ], [ %172, %scalar.ph ], [ %172, %scalar.ph.prol.loopexit ]
  %.1462 = phi i64 [ %.0461549, %216 ], [ %171, %186 ], [ %171, %middle.block ], [ %171, %scalar.ph ], [ %171, %scalar.ph.prol.loopexit ]
  %.1 = phi i64 [ %.0551, %216 ], [ %.0478545, %186 ], [ %.0478545, %middle.block ], [ %.0478545, %scalar.ph ], [ %.0478545, %scalar.ph.prol.loopexit ]
  %225 = getelementptr inbounds i64, ptr %23, i64 %155
  store i64 %150, ptr %225, align 8, !tbaa !25
  %226 = getelementptr inbounds i64, ptr %35, i64 %155
  store i64 %.0478545, ptr %226, align 8, !tbaa !25
  %227 = getelementptr inbounds i64, ptr %36, i64 %.0478545
  store i64 %155, ptr %227, align 8, !tbaa !25
  %228 = load i64, ptr %61, align 8, !tbaa !29
  %229 = and i64 %228, 32
  %.not493 = icmp eq i64 %229, 0
  br i1 %.not493, label %248, label %230

230:                                              ; preds = %.loopexit502
  %231 = load i64, ptr %5, align 8, !tbaa !25
  %232 = load i64, ptr %6, align 8, !tbaa !25
  %233 = load i64, ptr %167, align 8, !tbaa !25
  %234 = load i64, ptr %169, align 8, !tbaa !25
  %235 = sub nsw i64 %233, %234
  %236 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %155, i64 noundef %231, i64 noundef %232, i64 noundef %235, i64 noundef %171) #4
  br i1 %45, label %.lr.ph538, label %._crit_edge539

.lr.ph538:                                        ; preds = %230, %.lr.ph538
  %.1469536 = phi i64 [ %244, %.lr.ph538 ], [ 0, %230 ]
  %237 = getelementptr inbounds float, ptr %29, i64 %.1469536
  %238 = load float, ptr %237, align 4, !tbaa !27
  %239 = fpext float %238 to double
  %240 = getelementptr float, ptr %92, i64 %.1469536
  %241 = load float, ptr %240, align 4, !tbaa !27
  %242 = fpext float %241 to double
  %243 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %239, double noundef %242) #4
  %244 = add nuw nsw i64 %.1469536, 1
  %exitcond603.not = icmp eq i64 %244, %13
  br i1 %exitcond603.not, label %._crit_edge539, label %.lr.ph538, !llvm.loop !44

._crit_edge539:                                   ; preds = %.lr.ph538, %230
  %245 = fpext float %.1467 to double
  %246 = fpext float %172 to double
  %247 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, double noundef %245, double noundef %246) #4
  br label %248

248:                                              ; preds = %.loopexit502, %._crit_edge539
  %249 = load i64, ptr %169, align 8, !tbaa !25
  %250 = load i64, ptr %167, align 8, !tbaa !25
  store i64 %250, ptr %169, align 8, !tbaa !25
  store i64 %249, ptr %167, align 8, !tbaa !25
  %251 = icmp eq i64 %249, 0
  br i1 %251, label %252, label %267

252:                                              ; preds = %248
  %253 = getelementptr inbounds i64, ptr %15, i64 %155
  %254 = load i64, ptr %253, align 8, !tbaa !25
  %255 = getelementptr i8, ptr %253, i64 8
  %256 = load i64, ptr %255, align 8, !tbaa !25
  %257 = icmp slt i64 %254, %256
  br i1 %257, label %258, label %267

258:                                              ; preds = %252
  %259 = add nsw i64 %.0471546, -1
  %260 = getelementptr inbounds i64, ptr %34, i64 %259
  %261 = load i64, ptr %260, align 8, !tbaa !25
  %262 = getelementptr inbounds i64, ptr %32, i64 %155
  %263 = load i64, ptr %262, align 8, !tbaa !25
  %264 = getelementptr inbounds i64, ptr %34, i64 %263
  store i64 %261, ptr %264, align 8, !tbaa !25
  %265 = load i64, ptr %262, align 8, !tbaa !25
  %266 = getelementptr inbounds i64, ptr %32, i64 %261
  store i64 %265, ptr %266, align 8, !tbaa !25
  store i64 -1, ptr %262, align 8, !tbaa !25
  br label %267

267:                                              ; preds = %258, %252, %248
  %.1472 = phi i64 [ %259, %258 ], [ %.0471546, %252 ], [ %.0471546, %248 ]
  %268 = getelementptr inbounds i64, ptr %15, i64 %155
  %269 = load i64, ptr %268, align 8, !tbaa !25
  %270 = getelementptr i8, ptr %268, i64 8
  %271 = load i64, ptr %270, align 8, !tbaa !25
  %272 = icmp slt i64 %269, %271
  br i1 %272, label %.lr.ph543, label %._crit_edge544

.lr.ph543:                                        ; preds = %267, %339
  %.0464541 = phi i64 [ %340, %339 ], [ %269, %267 ]
  %.2473540 = phi i64 [ %.3474, %339 ], [ %.1472, %267 ]
  %273 = getelementptr inbounds i64, ptr %19, i64 %.0464541
  %274 = load i64, ptr %273, align 8, !tbaa !25
  %275 = getelementptr inbounds i64, ptr %27, i64 %274
  %276 = load i64, ptr %275, align 8, !tbaa !25
  %277 = getelementptr inbounds i64, ptr %25, i64 %274
  %278 = load i64, ptr %277, align 8, !tbaa !25
  %279 = sub nsw i64 %276, %278
  %280 = getelementptr inbounds i64, ptr %23, i64 %274
  %281 = load i64, ptr %280, align 8, !tbaa !25
  %282 = icmp eq i64 %150, %281
  %283 = getelementptr inbounds i64, ptr %21, i64 %.0464541
  %284 = load i64, ptr %283, align 8, !tbaa !25
  %285 = sub nsw i64 0, %284
  %286 = select i1 %282, i64 %284, i64 %285
  %287 = add nsw i64 %286, %278
  store i64 %287, ptr %277, align 8, !tbaa !25
  %288 = load i64, ptr %275, align 8, !tbaa !25
  %289 = sub nsw i64 %288, %286
  store i64 %289, ptr %275, align 8, !tbaa !25
  %290 = getelementptr inbounds i64, ptr %32, i64 %274
  %291 = load i64, ptr %290, align 8, !tbaa !25
  %.not494 = icmp eq i64 %291, -1
  br i1 %.not494, label %322, label %292

292:                                              ; preds = %.lr.ph543
  %293 = icmp eq i64 %288, %286
  br i1 %293, label %294, label %310

294:                                              ; preds = %292
  %295 = add nsw i64 %.2473540, -1
  %296 = getelementptr inbounds i64, ptr %34, i64 %295
  %297 = load i64, ptr %296, align 8, !tbaa !25
  %298 = getelementptr inbounds i64, ptr %34, i64 %291
  store i64 %297, ptr %298, align 8, !tbaa !25
  %299 = load i64, ptr %290, align 8, !tbaa !25
  %300 = getelementptr inbounds i64, ptr %32, i64 %297
  store i64 %299, ptr %300, align 8, !tbaa !25
  store i64 -1, ptr %290, align 8, !tbaa !25
  %301 = getelementptr inbounds i64, ptr %35, i64 %274
  %302 = load i64, ptr %301, align 8, !tbaa !25
  %303 = icmp eq i64 %302, -1
  br i1 %303, label %304, label %339

304:                                              ; preds = %294
  %305 = getelementptr inbounds i64, ptr %38, i64 %274
  %306 = load i64, ptr %305, align 8, !tbaa !25
  %307 = load i64, ptr %280, align 8, !tbaa !25
  %308 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %306, i64 %307
  %309 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %308, i64 noundef %274, i64 noundef %279) #4
  br label %339

310:                                              ; preds = %292
  %311 = getelementptr inbounds i64, ptr %35, i64 %274
  %312 = load i64, ptr %311, align 8, !tbaa !25
  %313 = icmp eq i64 %312, -1
  br i1 %313, label %314, label %339

314:                                              ; preds = %310
  %315 = getelementptr inbounds i64, ptr %38, i64 %274
  %316 = load i64, ptr %315, align 8, !tbaa !25
  %317 = load i64, ptr %280, align 8, !tbaa !25
  %318 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %316, i64 %317
  %319 = load i64, ptr %277, align 8, !tbaa !25
  %320 = sub nsw i64 %289, %319
  %321 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %318, i64 noundef %274, i64 noundef %279, i64 noundef %320) #4
  br label %339

322:                                              ; preds = %.lr.ph543
  %323 = icmp sgt i64 %289, 0
  br i1 %323, label %324, label %339

324:                                              ; preds = %322
  %325 = getelementptr inbounds i64, ptr %34, i64 %.2473540
  store i64 %274, ptr %325, align 8, !tbaa !25
  %326 = add nsw i64 %.2473540, 1
  store i64 %.2473540, ptr %290, align 8, !tbaa !25
  %327 = getelementptr inbounds i64, ptr %35, i64 %274
  %328 = load i64, ptr %327, align 8, !tbaa !25
  %329 = icmp eq i64 %328, -1
  br i1 %329, label %330, label %339

330:                                              ; preds = %324
  %331 = getelementptr inbounds i64, ptr %38, i64 %274
  %332 = load i64, ptr %331, align 8, !tbaa !25
  %333 = load i64, ptr %280, align 8, !tbaa !25
  %334 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %332, i64 %333
  %335 = load i64, ptr %275, align 8, !tbaa !25
  %336 = load i64, ptr %277, align 8, !tbaa !25
  %337 = sub nsw i64 %335, %336
  %338 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %334, i64 noundef %274, i64 noundef %337) #4
  br label %339

339:                                              ; preds = %310, %314, %294, %304, %324, %330, %322
  %.3474 = phi i64 [ %295, %304 ], [ %295, %294 ], [ %.2473540, %314 ], [ %.2473540, %310 ], [ %326, %330 ], [ %326, %324 ], [ %.2473540, %322 ]
  %340 = add nsw i64 %.0464541, 1
  %341 = load i64, ptr %270, align 8, !tbaa !25
  %342 = icmp slt i64 %340, %341
  br i1 %342, label %.lr.ph543, label %._crit_edge544, !llvm.loop !45

._crit_edge544:                                   ; preds = %339, %267
  %.2473.lcssa = phi i64 [ %.1472, %267 ], [ %.3474, %339 ]
  %343 = add nuw nsw i64 %.0478545, 1
  %exitcond604.not = icmp eq i64 %343, %11
  br i1 %exitcond604.not, label %.lr.ph569.preheader, label %.lr.ph552, !llvm.loop !46

.loopexit504:                                     ; preds = %152, %.lr.ph552, %219
  %.not591 = icmp eq i64 %.0478545, 0
  br i1 %.not591, label %.preheader, label %.lr.ph569.preheader

.lr.ph569.preheader:                              ; preds = %._crit_edge544, %.loopexit504
  %.0508627 = phi i64 [ %.0551, %.loopexit504 ], [ %.1, %._crit_edge544 ]
  %.0461510626 = phi i64 [ %.0461549, %.loopexit504 ], [ %.1462, %._crit_edge544 ]
  %.0471512625 = phi i64 [ %.0471546, %.loopexit504 ], [ %.2473.lcssa, %._crit_edge544 ]
  %.0478514624 = phi i64 [ %.0478545, %.loopexit504 ], [ %11, %._crit_edge544 ]
  %xtraiter696 = and i64 %.0478514624, 3
  %344 = icmp ult i64 %.0478514624, 4
  br i1 %344, label %.preheader.loopexit.unr-lcssa, label %.lr.ph569.preheader.new

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

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph569, %.lr.ph569.preheader
  %.5567.unr = phi i64 [ 0, %.lr.ph569.preheader ], [ %365, %.lr.ph569 ]
  %lcmp.mod697.not = icmp eq i64 %xtraiter696, 0
  br i1 %lcmp.mod697.not, label %.preheader, label %.lr.ph569.epil

.lr.ph569.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph569.epil
  %.5567.epil = phi i64 [ %348, %.lr.ph569.epil ], [ %.5567.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph569.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %345 = getelementptr inbounds i64, ptr %36, i64 %.5567.epil
  %346 = load i64, ptr %345, align 8, !tbaa !25
  %347 = getelementptr inbounds i64, ptr %35, i64 %346
  store i64 -1, ptr %347, align 8, !tbaa !25
  %348 = add nuw nsw i64 %.5567.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter696
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph569.epil, !llvm.loop !47

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph569.epil, %.preheader503, %.loopexit504
  %.0508617 = phi i64 [ %.0551, %.loopexit504 ], [ -1, %.preheader503 ], [ %.0508627, %.lr.ph569.epil ], [ %.0508627, %.preheader.loopexit.unr-lcssa ]
  %.0461510616 = phi i64 [ %.0461549, %.loopexit504 ], [ %128, %.preheader503 ], [ %.0461510626, %.lr.ph569.epil ], [ %.0461510626, %.preheader.loopexit.unr-lcssa ]
  %.0471512615 = phi i64 [ %.0471546, %.loopexit504 ], [ %130, %.preheader503 ], [ %.0471512625, %.lr.ph569.epil ], [ %.0471512625, %.preheader.loopexit.unr-lcssa ]
  %.0478514614 = phi i64 [ 0, %.loopexit504 ], [ 0, %.preheader503 ], [ %.0478514624, %.lr.ph569.epil ], [ %.0478514624, %.preheader.loopexit.unr-lcssa ]
  %.1479574 = add nsw i64 %.0478514614, -1
  %349 = icmp sgt i64 %.1479574, %.0508617
  br i1 %349, label %.lr.ph577, label %._crit_edge578

.lr.ph569:                                        ; preds = %.lr.ph569, %.lr.ph569.preheader.new
  %.5567 = phi i64 [ 0, %.lr.ph569.preheader.new ], [ %365, %.lr.ph569 ]
  %niter = phi i64 [ 0, %.lr.ph569.preheader.new ], [ %niter.next.3, %.lr.ph569 ]
  %350 = getelementptr inbounds i64, ptr %36, i64 %.5567
  %351 = load i64, ptr %350, align 8, !tbaa !25
  %352 = getelementptr inbounds i64, ptr %35, i64 %351
  store i64 -1, ptr %352, align 8, !tbaa !25
  %353 = or disjoint i64 %.5567, 1
  %354 = getelementptr inbounds i64, ptr %36, i64 %353
  %355 = load i64, ptr %354, align 8, !tbaa !25
  %356 = getelementptr inbounds i64, ptr %35, i64 %355
  store i64 -1, ptr %356, align 8, !tbaa !25
  %357 = or disjoint i64 %.5567, 2
  %358 = getelementptr inbounds i64, ptr %36, i64 %357
  %359 = load i64, ptr %358, align 8, !tbaa !25
  %360 = getelementptr inbounds i64, ptr %35, i64 %359
  store i64 -1, ptr %360, align 8, !tbaa !25
  %361 = or disjoint i64 %.5567, 3
  %362 = getelementptr inbounds i64, ptr %36, i64 %361
  %363 = load i64, ptr %362, align 8, !tbaa !25
  %364 = getelementptr inbounds i64, ptr %35, i64 %363
  store i64 -1, ptr %364, align 8, !tbaa !25
  %365 = add nuw nsw i64 %.5567, 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.ph569, !llvm.loop !49

.loopexit:                                        ; preds = %450, %.thread
  %.6477.lcssa = phi i64 [ %.5476, %.thread ], [ %.8, %450 ]
  %.1479 = add nsw i64 %.1479576, -1
  %366 = icmp sgt i64 %.1479, %.0508617
  br i1 %366, label %.lr.ph577, label %._crit_edge578, !llvm.loop !50

.lr.ph577:                                        ; preds = %.preheader, %.loopexit
  %.1479576 = phi i64 [ %.1479, %.loopexit ], [ %.1479574, %.preheader ]
  %.4475575 = phi i64 [ %.6477.lcssa, %.loopexit ], [ %.0471512615, %.preheader ]
  %367 = getelementptr inbounds i64, ptr %36, i64 %.1479576
  %368 = load i64, ptr %367, align 8, !tbaa !25
  %369 = getelementptr inbounds i64, ptr %23, i64 %368
  %370 = load i64, ptr %369, align 8, !tbaa !25
  %371 = add nsw i64 %370, 1
  %372 = srem i64 %371, 2
  store i64 %372, ptr %369, align 8, !tbaa !25
  %373 = getelementptr inbounds i64, ptr %25, i64 %368
  %374 = load i64, ptr %373, align 8, !tbaa !25
  %375 = getelementptr inbounds i64, ptr %27, i64 %368
  %376 = load i64, ptr %375, align 8, !tbaa !25
  store i64 %376, ptr %373, align 8, !tbaa !25
  store i64 %374, ptr %375, align 8, !tbaa !25
  %377 = icmp eq i64 %374, 0
  br i1 %377, label %378, label %394

378:                                              ; preds = %.lr.ph577
  %379 = getelementptr inbounds i64, ptr %32, i64 %368
  %380 = load i64, ptr %379, align 8, !tbaa !25
  %.not496 = icmp eq i64 %380, -1
  br i1 %.not496, label %.thread, label %381

381:                                              ; preds = %378
  %382 = getelementptr inbounds i64, ptr %15, i64 %368
  %383 = load i64, ptr %382, align 8, !tbaa !25
  %384 = getelementptr i8, ptr %382, i64 8
  %385 = load i64, ptr %384, align 8, !tbaa !25
  %386 = icmp slt i64 %383, %385
  br i1 %386, label %387, label %.thread

387:                                              ; preds = %381
  %388 = add nsw i64 %.4475575, -1
  %389 = getelementptr inbounds i64, ptr %34, i64 %388
  %390 = load i64, ptr %389, align 8, !tbaa !25
  %391 = getelementptr inbounds i64, ptr %34, i64 %380
  store i64 %390, ptr %391, align 8, !tbaa !25
  %392 = load i64, ptr %379, align 8, !tbaa !25
  %393 = getelementptr inbounds i64, ptr %32, i64 %390
  store i64 %392, ptr %393, align 8, !tbaa !25
  store i64 -1, ptr %379, align 8, !tbaa !25
  br label %.thread

394:                                              ; preds = %.lr.ph577
  %395 = icmp sgt i64 %374, 0
  br i1 %395, label %396, label %.thread

396:                                              ; preds = %394
  %397 = getelementptr inbounds i64, ptr %32, i64 %368
  %398 = load i64, ptr %397, align 8, !tbaa !25
  %399 = icmp eq i64 %398, -1
  br i1 %399, label %400, label %.thread

400:                                              ; preds = %396
  %401 = getelementptr inbounds i64, ptr %34, i64 %.4475575
  store i64 %368, ptr %401, align 8, !tbaa !25
  %402 = add nsw i64 %.4475575, 1
  store i64 %.4475575, ptr %397, align 8, !tbaa !25
  br label %.thread

.thread:                                          ; preds = %378, %381, %394, %396, %400, %387
  %.5476 = phi i64 [ %388, %387 ], [ %402, %400 ], [ %.4475575, %396 ], [ %.4475575, %394 ], [ %.4475575, %381 ], [ %.4475575, %378 ]
  %403 = mul nsw i64 %368, %13
  %404 = getelementptr inbounds float, ptr %17, i64 %403
  %405 = mul nsw i64 %372, %13
  %406 = getelementptr inbounds float, ptr %29, i64 %405
  %407 = call ptr @gk_faxpy(i64 noundef %13, float noundef 1.000000e+00, ptr noundef %404, i64 noundef 1, ptr noundef %406, i64 noundef 1) #4
  %408 = and i64 %372, 1
  %409 = xor i64 %408, 1
  %410 = mul nuw nsw i64 %409, %13
  %411 = getelementptr inbounds float, ptr %29, i64 %410
  %412 = call ptr @gk_faxpy(i64 noundef %13, float noundef -1.000000e+00, ptr noundef %404, i64 noundef 1, ptr noundef %411, i64 noundef 1) #4
  %413 = getelementptr inbounds i64, ptr %15, i64 %368
  %414 = load i64, ptr %413, align 8, !tbaa !25
  %415 = getelementptr i8, ptr %413, i64 8
  %416 = load i64, ptr %415, align 8, !tbaa !25
  %417 = icmp slt i64 %414, %416
  br i1 %417, label %.lr.ph572, label %.loopexit

.lr.ph572:                                        ; preds = %.thread, %450
  %.1465571 = phi i64 [ %451, %450 ], [ %414, %.thread ]
  %.6477570 = phi i64 [ %.8, %450 ], [ %.5476, %.thread ]
  %418 = getelementptr inbounds i64, ptr %19, i64 %.1465571
  %419 = load i64, ptr %418, align 8, !tbaa !25
  %420 = getelementptr inbounds i64, ptr %23, i64 %419
  %421 = load i64, ptr %420, align 8, !tbaa !25
  %422 = icmp eq i64 %372, %421
  %423 = getelementptr inbounds i64, ptr %21, i64 %.1465571
  %424 = load i64, ptr %423, align 8, !tbaa !25
  %425 = sub nsw i64 0, %424
  %426 = select i1 %422, i64 %424, i64 %425
  %427 = getelementptr inbounds i64, ptr %25, i64 %419
  %428 = load i64, ptr %427, align 8, !tbaa !25
  %429 = add nsw i64 %428, %426
  store i64 %429, ptr %427, align 8, !tbaa !25
  %430 = getelementptr inbounds i64, ptr %27, i64 %419
  %431 = load i64, ptr %430, align 8, !tbaa !25
  %432 = sub nsw i64 %431, %426
  store i64 %432, ptr %430, align 8, !tbaa !25
  %433 = getelementptr inbounds i64, ptr %32, i64 %419
  %434 = load i64, ptr %433, align 8, !tbaa !25
  %.not497 = icmp ne i64 %434, -1
  %435 = icmp eq i64 %431, %426
  %or.cond = select i1 %.not497, i1 %435, i1 false
  br i1 %or.cond, label %.thread499, label %442

.thread499:                                       ; preds = %.lr.ph572
  %436 = add nsw i64 %.6477570, -1
  %437 = getelementptr inbounds i64, ptr %34, i64 %436
  %438 = load i64, ptr %437, align 8, !tbaa !25
  %439 = getelementptr inbounds i64, ptr %34, i64 %434
  store i64 %438, ptr %439, align 8, !tbaa !25
  %440 = load i64, ptr %433, align 8, !tbaa !25
  %441 = getelementptr inbounds i64, ptr %32, i64 %438
  store i64 %440, ptr %441, align 8, !tbaa !25
  store i64 -1, ptr %433, align 8, !tbaa !25
  %.pre = load i64, ptr %430, align 8, !tbaa !25
  br label %444

442:                                              ; preds = %.lr.ph572
  %443 = icmp eq i64 %434, -1
  br i1 %443, label %444, label %450

444:                                              ; preds = %.thread499, %442
  %445 = phi i64 [ %.pre, %.thread499 ], [ %432, %442 ]
  %.7501 = phi i64 [ %436, %.thread499 ], [ %.6477570, %442 ]
  %446 = icmp sgt i64 %445, 0
  br i1 %446, label %447, label %450

447:                                              ; preds = %444
  %448 = getelementptr inbounds i64, ptr %34, i64 %.7501
  store i64 %419, ptr %448, align 8, !tbaa !25
  %449 = add nsw i64 %.7501, 1
  store i64 %.7501, ptr %433, align 8, !tbaa !25
  br label %450

450:                                              ; preds = %442, %444, %447
  %.8 = phi i64 [ %449, %447 ], [ %.7501, %444 ], [ %.6477570, %442 ]
  %451 = add nsw i64 %.1465571, 1
  %452 = load i64, ptr %415, align 8, !tbaa !25
  %453 = icmp slt i64 %451, %452
  br i1 %453, label %.lr.ph572, label %.loopexit, !llvm.loop !51

._crit_edge578:                                   ; preds = %.loopexit, %.preheader
  %.4475.lcssa = phi i64 [ %.0471512615, %.preheader ], [ %.6477.lcssa, %.loopexit ]
  %454 = load i64, ptr %61, align 8, !tbaa !29
  %455 = and i64 %454, 8
  %.not495 = icmp eq i64 %455, 0
  br i1 %.not495, label %469, label %456

456:                                              ; preds = %._crit_edge578
  %457 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %.0461510616, i64 noundef %.0508617, i64 noundef %.4475.lcssa) #4
  br i1 %45, label %.lr.ph582, label %._crit_edge583

.lr.ph582:                                        ; preds = %456, %.lr.ph582
  %.2470580 = phi i64 [ %465, %.lr.ph582 ], [ 0, %456 ]
  %458 = getelementptr inbounds float, ptr %29, i64 %.2470580
  %459 = load float, ptr %458, align 4, !tbaa !27
  %460 = fpext float %459 to double
  %461 = getelementptr float, ptr %92, i64 %.2470580
  %462 = load float, ptr %461, align 4, !tbaa !27
  %463 = fpext float %462 to double
  %464 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %460, double noundef %463) #4
  %465 = add nuw nsw i64 %.2470580, 1
  %exitcond606.not = icmp eq i64 %465, %13
  br i1 %exitcond606.not, label %._crit_edge583, label %.lr.ph582, !llvm.loop !52

._crit_edge583:                                   ; preds = %.lr.ph582, %456
  %466 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef nonnull %2)
  %467 = fpext float %466 to double
  %468 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6, double noundef %467) #4
  br label %469

469:                                              ; preds = %._crit_edge583, %._crit_edge578
  store i64 %.0461510616, ptr %90, align 8, !tbaa !35
  store i64 %.4475.lcssa, ptr %91, align 8, !tbaa !34
  %470 = icmp eq i64 %.0508617, -1
  %471 = icmp eq i64 %.0461510616, %128
  %or.cond498 = select i1 %470, i1 true, i1 %471
  %472 = add nuw nsw i64 %.0480584, 1
  %exitcond607.not = icmp eq i64 %472, %3
  %or.cond643 = select i1 %or.cond498, i1 true, i1 %exitcond607.not
  br i1 %or.cond643, label %._crit_edge585, label %.preheader505, !llvm.loop !53

._crit_edge585:                                   ; preds = %469, %87
  br i1 %45, label %.lr.ph589, label %._crit_edge590

.lr.ph589:                                        ; preds = %._crit_edge585, %.lr.ph589
  %.6587 = phi i64 [ %475, %.lr.ph589 ], [ 0, %._crit_edge585 ]
  %473 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %.6587
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %473) #4
  %474 = getelementptr inbounds i8, ptr %473, i64 88
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %474) #4
  %475 = add nuw nsw i64 %.6587, 1
  %exitcond608.not = icmp eq i64 %475, %13
  br i1 %exitcond608.not, label %._crit_edge590, label %.lr.ph589, !llvm.loop !54

._crit_edge590:                                   ; preds = %.lr.ph589, %._crit_edge585
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %11) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %11) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %11) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 2816, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  ret void
}

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

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

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__SelectQueue(i64 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

; Function Attrs: nounwind uwtable
declare dso_local i64 @libmetis__BetterBalance(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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fabs.v4f32(<4 x float>) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!7, !7, i64 0}
!26 = distinct !{!26, !24}
!27 = !{!28, !28, i64 0}
!28 = !{!"float", !8, i64 0}
!29 = !{!30, !7, i64 8}
!30 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !28, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !31, i64 88, !32, i64 152, !32, i64 160, !32, i64 168, !32, i64 176, !32, i64 184, !32, i64 192, !32, i64 200, !32, i64 208, !32, i64 216, !32, i64 224, !32, i64 232, !32, i64 240, !32, i64 248, !32, i64 256, !32, i64 264, !32, i64 272}
!31 = !{!"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}
!32 = !{!"double", !8, i64 0}
!33 = distinct !{!33, !24}
!34 = !{!6, !7, i64 144}
!35 = !{!6, !7, i64 112}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24, !38, !39}
!38 = !{!"llvm.loop.isvectorized", i32 1}
!39 = !{!"llvm.loop.unroll.runtime.disable"}
!40 = distinct !{!40, !24, !38}
!41 = distinct !{!41, !24}
!42 = distinct !{!42, !24, !38, !39}
!43 = distinct !{!43, !24, !38}
!44 = distinct !{!44, !24}
!45 = distinct !{!45, !24}
!46 = distinct !{!46, !24}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.unroll.disable"}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}
!52 = distinct !{!52, !24}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}


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