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

; 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 [58 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

declare float @libmetis__Compute2WayHLoadImbalance(i64 noundef, ptr noundef, ptr noundef) #0

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

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

107:                                              ; preds = %4
  br label %108

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

111:                                              ; preds = %108
  br label %124

112:                                              ; preds = %108
  %113 = load i64, ptr %15, align 8, !tbaa !15
  %114 = sitofp i64 %113 to double
  %115 = fmul double 1.000000e-02, %114
  %116 = fcmp oge double %115, 1.500000e+01
  br i1 %116, label %117, label %121

117:                                              ; preds = %112
  %118 = load i64, ptr %15, align 8, !tbaa !15
  %119 = sitofp i64 %118 to double
  %120 = fmul double 1.000000e-02, %119
  br label %122

121:                                              ; preds = %112
  br label %122

122:                                              ; preds = %121, %117
  %123 = phi double [ %120, %117 ], [ 1.500000e+01, %121 ]
  br label %124

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

127:                                              ; preds = %148, %124
  %128 = load i64, ptr %9, align 8, !tbaa !15
  %129 = load i64, ptr %16, align 8, !tbaa !15
  %130 = icmp slt i64 %128, %129
  br i1 %130, label %131, label %151

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

148:                                              ; preds = %131
  %149 = load i64, ptr %9, align 8, !tbaa !15
  %150 = add nsw i64 %149, 1
  store i64 %150, ptr %9, align 8, !tbaa !15
  br label %127, !llvm.loop !27

151:                                              ; preds = %127
  store i64 0, ptr %9, align 8, !tbaa !15
  br label %152

152:                                              ; preds = %179, %151
  %153 = load i64, ptr %9, align 8, !tbaa !15
  %154 = load i64, ptr %15, align 8, !tbaa !15
  %155 = icmp slt i64 %153, %154
  br i1 %155, label %156, label %182

156:                                              ; preds = %152
  %157 = load i64, ptr %16, align 8, !tbaa !15
  %158 = load ptr, ptr %38, align 8, !tbaa !5
  %159 = load i64, ptr %9, align 8, !tbaa !15
  %160 = load i64, ptr %16, align 8, !tbaa !15
  %161 = mul nsw i64 %159, %160
  %162 = getelementptr inbounds float, ptr %158, i64 %161
  %163 = call i64 @gk_fargmax(i64 noundef %157, ptr noundef %162)
  %164 = load ptr, ptr %37, align 8, !tbaa !5
  %165 = load i64, ptr %9, align 8, !tbaa !15
  %166 = getelementptr inbounds i64, ptr %164, i64 %165
  store i64 %163, ptr %166, align 8, !tbaa !15
  %167 = load ptr, ptr %37, align 8, !tbaa !5
  %168 = load i64, ptr %9, align 8, !tbaa !15
  %169 = getelementptr inbounds i64, ptr %167, i64 %168
  %170 = load i64, ptr %169, align 8, !tbaa !15
  %171 = getelementptr inbounds [16 x [2 x i64]], ptr %50, i64 0, i64 %170
  %172 = load ptr, ptr %29, align 8, !tbaa !5
  %173 = load i64, ptr %9, align 8, !tbaa !15
  %174 = getelementptr inbounds i64, ptr %172, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !15
  %176 = getelementptr inbounds [2 x i64], ptr %171, i64 0, i64 %175
  %177 = load i64, ptr %176, align 8, !tbaa !15
  %178 = add nsw i64 %177, 1
  store i64 %178, ptr %176, align 8, !tbaa !15
  br label %179

179:                                              ; preds = %156
  %180 = load i64, ptr %9, align 8, !tbaa !15
  %181 = add nsw i64 %180, 1
  store i64 %181, ptr %9, align 8, !tbaa !15
  br label %152, !llvm.loop !29

182:                                              ; preds = %152
  store i64 0, ptr %19, align 8, !tbaa !15
  br label %183

183:                                              ; preds = %291, %182
  %184 = load i64, ptr %19, align 8, !tbaa !15
  %185 = icmp slt i64 %184, 2
  br i1 %185, label %186, label %294

186:                                              ; preds = %183
  store i64 0, ptr %11, align 8, !tbaa !15
  br label %187

187:                                              ; preds = %287, %186
  %188 = load i64, ptr %11, align 8, !tbaa !15
  %189 = load i64, ptr %16, align 8, !tbaa !15
  %190 = icmp slt i64 %188, %189
  br i1 %190, label %191, label %290

191:                                              ; preds = %187
  %192 = load i64, ptr %11, align 8, !tbaa !15
  %193 = getelementptr inbounds [16 x [2 x i64]], ptr %50, i64 0, i64 %192
  %194 = load i64, ptr %19, align 8, !tbaa !15
  %195 = getelementptr inbounds [2 x i64], ptr %193, i64 0, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !15
  %197 = icmp eq i64 %196, 0
  br i1 %197, label %198, label %286

198:                                              ; preds = %191
  store i64 0, ptr %9, align 8, !tbaa !15
  br label %199

199:                                              ; preds = %282, %198
  %200 = load i64, ptr %9, align 8, !tbaa !15
  %201 = load i64, ptr %15, align 8, !tbaa !15
  %202 = icmp slt i64 %200, %201
  br i1 %202, label %203, label %285

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

210:                                              ; preds = %203
  br label %282

211:                                              ; preds = %203
  %212 = load i64, ptr %16, align 8, !tbaa !15
  %213 = load ptr, ptr %38, align 8, !tbaa !5
  %214 = load i64, ptr %9, align 8, !tbaa !15
  %215 = load i64, ptr %16, align 8, !tbaa !15
  %216 = mul nsw i64 %214, %215
  %217 = getelementptr inbounds float, ptr %213, i64 %216
  %218 = call i64 @libmetis__famax2(i64 noundef %212, ptr noundef %217)
  store i64 %218, ptr %12, align 8, !tbaa !15
  %219 = load i64, ptr %12, align 8, !tbaa !15
  %220 = load i64, ptr %11, align 8, !tbaa !15
  %221 = icmp eq i64 %219, %220
  br i1 %221, label %222, label %281

222:                                              ; preds = %211
  %223 = load ptr, ptr %37, align 8, !tbaa !5
  %224 = load i64, ptr %9, align 8, !tbaa !15
  %225 = getelementptr inbounds i64, ptr %223, i64 %224
  %226 = load i64, ptr %225, align 8, !tbaa !15
  %227 = getelementptr inbounds [16 x [2 x i64]], ptr %50, i64 0, i64 %226
  %228 = load i64, ptr %19, align 8, !tbaa !15
  %229 = getelementptr inbounds [2 x i64], ptr %227, i64 0, i64 %228
  %230 = load i64, ptr %229, align 8, !tbaa !15
  %231 = load i64, ptr %11, align 8, !tbaa !15
  %232 = getelementptr inbounds [16 x [2 x i64]], ptr %50, i64 0, i64 %231
  %233 = load i64, ptr %19, align 8, !tbaa !15
  %234 = getelementptr inbounds [2 x i64], ptr %232, i64 0, i64 %233
  %235 = load i64, ptr %234, align 8, !tbaa !15
  %236 = icmp sgt i64 %230, %235
  br i1 %236, label %237, label %281

237:                                              ; preds = %222
  %238 = load ptr, ptr %38, align 8, !tbaa !5
  %239 = load i64, ptr %9, align 8, !tbaa !15
  %240 = load i64, ptr %16, align 8, !tbaa !15
  %241 = mul nsw i64 %239, %240
  %242 = load ptr, ptr %37, align 8, !tbaa !5
  %243 = load i64, ptr %9, align 8, !tbaa !15
  %244 = getelementptr inbounds i64, ptr %242, i64 %243
  %245 = load i64, ptr %244, align 8, !tbaa !15
  %246 = add nsw i64 %241, %245
  %247 = getelementptr inbounds float, ptr %238, i64 %246
  %248 = load float, ptr %247, align 4, !tbaa !9
  %249 = fpext float %248 to double
  %250 = load ptr, ptr %38, align 8, !tbaa !5
  %251 = load i64, ptr %9, align 8, !tbaa !15
  %252 = load i64, ptr %16, align 8, !tbaa !15
  %253 = mul nsw i64 %251, %252
  %254 = load i64, ptr %11, align 8, !tbaa !15
  %255 = add nsw i64 %253, %254
  %256 = getelementptr inbounds float, ptr %250, i64 %255
  %257 = load float, ptr %256, align 4, !tbaa !9
  %258 = fpext float %257 to double
  %259 = fmul double 1.300000e+00, %258
  %260 = fcmp olt double %249, %259
  br i1 %260, label %261, label %281

261:                                              ; preds = %237
  %262 = load ptr, ptr %37, align 8, !tbaa !5
  %263 = load i64, ptr %9, align 8, !tbaa !15
  %264 = getelementptr inbounds i64, ptr %262, i64 %263
  %265 = load i64, ptr %264, align 8, !tbaa !15
  %266 = getelementptr inbounds [16 x [2 x i64]], ptr %50, i64 0, i64 %265
  %267 = load i64, ptr %19, align 8, !tbaa !15
  %268 = getelementptr inbounds [2 x i64], ptr %266, i64 0, i64 %267
  %269 = load i64, ptr %268, align 8, !tbaa !15
  %270 = add nsw i64 %269, -1
  store i64 %270, ptr %268, align 8, !tbaa !15
  %271 = load i64, ptr %11, align 8, !tbaa !15
  %272 = getelementptr inbounds [16 x [2 x i64]], ptr %50, i64 0, i64 %271
  %273 = load i64, ptr %19, align 8, !tbaa !15
  %274 = getelementptr inbounds [2 x i64], ptr %272, i64 0, i64 %273
  %275 = load i64, ptr %274, align 8, !tbaa !15
  %276 = add nsw i64 %275, 1
  store i64 %276, ptr %274, align 8, !tbaa !15
  %277 = load i64, ptr %11, align 8, !tbaa !15
  %278 = load ptr, ptr %37, align 8, !tbaa !5
  %279 = load i64, ptr %9, align 8, !tbaa !15
  %280 = getelementptr inbounds i64, ptr %278, i64 %279
  store i64 %277, ptr %280, align 8, !tbaa !15
  br label %281

281:                                              ; preds = %261, %237, %222, %211
  br label %282

282:                                              ; preds = %281, %210
  %283 = load i64, ptr %9, align 8, !tbaa !15
  %284 = add nsw i64 %283, 1
  store i64 %284, ptr %9, align 8, !tbaa !15
  br label %199, !llvm.loop !30

285:                                              ; preds = %199
  br label %286

286:                                              ; preds = %285, %191
  br label %287

287:                                              ; preds = %286
  %288 = load i64, ptr %11, align 8, !tbaa !15
  %289 = add nsw i64 %288, 1
  store i64 %289, ptr %11, align 8, !tbaa !15
  br label %187, !llvm.loop !31

290:                                              ; preds = %187
  br label %291

291:                                              ; preds = %290
  %292 = load i64, ptr %19, align 8, !tbaa !15
  %293 = add nsw i64 %292, 1
  store i64 %293, ptr %19, align 8, !tbaa !15
  br label %183, !llvm.loop !32

294:                                              ; preds = %183
  store i64 0, ptr %9, align 8, !tbaa !15
  br label %295

295:                                              ; preds = %313, %294
  %296 = load i64, ptr %9, align 8, !tbaa !15
  %297 = load i64, ptr %16, align 8, !tbaa !15
  %298 = icmp slt i64 %296, %297
  br i1 %298, label %299, label %316

299:                                              ; preds = %295
  %300 = load ptr, ptr %7, align 8, !tbaa !5
  %301 = getelementptr inbounds float, ptr %300, i64 0
  %302 = load float, ptr %301, align 4, !tbaa !9
  %303 = load ptr, ptr %39, align 8, !tbaa !5
  %304 = load i64, ptr %9, align 8, !tbaa !15
  %305 = getelementptr inbounds float, ptr %303, i64 %304
  %306 = load float, ptr %305, align 4, !tbaa !9
  %307 = fsub float %302, %306
  %308 = fpext float %307 to double
  %309 = call double @llvm.fabs.f64(double %308)
  %310 = fptrunc double %309 to float
  %311 = load i64, ptr %9, align 8, !tbaa !15
  %312 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %311
  store float %310, ptr %312, align 4, !tbaa !9
  br label %313

313:                                              ; preds = %299
  %314 = load i64, ptr %9, align 8, !tbaa !15
  %315 = add nsw i64 %314, 1
  store i64 %315, ptr %9, align 8, !tbaa !15
  br label %295, !llvm.loop !33

316:                                              ; preds = %295
  %317 = load i64, ptr %16, align 8, !tbaa !15
  %318 = load ptr, ptr %39, align 8, !tbaa !5
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  %320 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %317, ptr noundef %318, ptr noundef %319)
  store float %320, ptr %41, align 4, !tbaa !9
  store float %320, ptr %42, align 4, !tbaa !9
  %321 = load ptr, ptr %6, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.graphdef, ptr %321, i32 0, i32 16
  %323 = load i64, ptr %322, align 8, !tbaa !34
  store i64 %323, ptr %47, align 8, !tbaa !15
  store i64 %323, ptr %48, align 8, !tbaa !15
  store i64 -1, ptr %49, align 8, !tbaa !15
  %324 = load ptr, ptr %5, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.controldef, ptr %324, i32 0, i32 1
  %326 = load i64, ptr %325, align 8, !tbaa !35
  %327 = and i64 %326, 8
  %328 = icmp ne i64 %327, 0
  br i1 %328, label %329, label %373

329:                                              ; preds = %316
  %330 = call i32 (ptr, ...) @mprintf(ptr noundef @.str)
  store i64 0, ptr %13, align 8, !tbaa !15
  br label %331

331:                                              ; preds = %349, %329
  %332 = load i64, ptr %13, align 8, !tbaa !15
  %333 = load i64, ptr %16, align 8, !tbaa !15
  %334 = icmp slt i64 %332, %333
  br i1 %334, label %335, label %352

335:                                              ; preds = %331
  %336 = load ptr, ptr %39, align 8, !tbaa !5
  %337 = load i64, ptr %13, align 8, !tbaa !15
  %338 = getelementptr inbounds float, ptr %336, i64 %337
  %339 = load float, ptr %338, align 4, !tbaa !9
  %340 = fpext float %339 to double
  %341 = load ptr, ptr %39, align 8, !tbaa !5
  %342 = load i64, ptr %16, align 8, !tbaa !15
  %343 = load i64, ptr %13, align 8, !tbaa !15
  %344 = add nsw i64 %342, %343
  %345 = getelementptr inbounds float, ptr %341, i64 %344
  %346 = load float, ptr %345, align 4, !tbaa !9
  %347 = fpext float %346 to double
  %348 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %340, double noundef %347)
  br label %349

349:                                              ; preds = %335
  %350 = load i64, ptr %13, align 8, !tbaa !15
  %351 = add nsw i64 %350, 1
  store i64 %351, ptr %13, align 8, !tbaa !15
  br label %331, !llvm.loop !39

352:                                              ; preds = %331
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds float, ptr %353, i64 0
  %355 = load float, ptr %354, align 4, !tbaa !9
  %356 = fpext float %355 to double
  %357 = load ptr, ptr %7, align 8, !tbaa !5
  %358 = getelementptr inbounds float, ptr %357, i64 1
  %359 = load float, ptr %358, align 4, !tbaa !9
  %360 = fpext float %359 to double
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.graphdef, ptr %361, i32 0, i32 0
  %363 = load i64, ptr %362, align 8, !tbaa !11
  %364 = load ptr, ptr %6, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.graphdef, ptr %364, i32 0, i32 20
  %366 = load i64, ptr %365, align 8, !tbaa !40
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.graphdef, ptr %367, i32 0, i32 16
  %369 = load i64, ptr %368, align 8, !tbaa !34
  %370 = load float, ptr %41, align 4, !tbaa !9
  %371 = fpext float %370 to double
  %372 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, double noundef %356, double noundef %360, i64 noundef %363, i64 noundef %366, i64 noundef %369, double noundef %371)
  br label %373

373:                                              ; preds = %352, %316
  %374 = load i64, ptr %15, align 8, !tbaa !15
  %375 = load ptr, ptr %34, align 8, !tbaa !5
  %376 = call ptr @libmetis__idxset(i64 noundef %374, i64 noundef -1, ptr noundef %375)
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.graphdef, ptr %377, i32 0, i32 20
  %379 = load i64, ptr %378, align 8, !tbaa !40
  store i64 %379, ptr %17, align 8, !tbaa !15
  %380 = load i64, ptr %15, align 8, !tbaa !15
  %381 = load ptr, ptr %36, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %380, ptr noundef %381, i64 noundef 1)
  store i64 0, ptr %10, align 8, !tbaa !15
  br label %382

382:                                              ; preds = %412, %373
  %383 = load i64, ptr %10, align 8, !tbaa !15
  %384 = load i64, ptr %15, align 8, !tbaa !15
  %385 = icmp slt i64 %383, %384
  br i1 %385, label %386, label %415

386:                                              ; preds = %382
  %387 = load ptr, ptr %36, align 8, !tbaa !5
  %388 = load i64, ptr %10, align 8, !tbaa !15
  %389 = getelementptr inbounds i64, ptr %387, i64 %388
  %390 = load i64, ptr %389, align 8, !tbaa !15
  store i64 %390, ptr %9, align 8, !tbaa !15
  %391 = load ptr, ptr %37, align 8, !tbaa !5
  %392 = load i64, ptr %9, align 8, !tbaa !15
  %393 = getelementptr inbounds i64, ptr %391, i64 %392
  %394 = load i64, ptr %393, align 8, !tbaa !15
  %395 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %394
  %396 = load ptr, ptr %29, align 8, !tbaa !5
  %397 = load i64, ptr %9, align 8, !tbaa !15
  %398 = getelementptr inbounds i64, ptr %396, i64 %397
  %399 = load i64, ptr %398, align 8, !tbaa !15
  %400 = getelementptr inbounds [2 x %struct.PQueueType], ptr %395, i64 0, i64 %399
  %401 = load i64, ptr %9, align 8, !tbaa !15
  %402 = load ptr, ptr %31, align 8, !tbaa !5
  %403 = load i64, ptr %9, align 8, !tbaa !15
  %404 = getelementptr inbounds i64, ptr %402, i64 %403
  %405 = load i64, ptr %404, align 8, !tbaa !15
  %406 = load ptr, ptr %30, align 8, !tbaa !5
  %407 = load i64, ptr %9, align 8, !tbaa !15
  %408 = getelementptr inbounds i64, ptr %406, i64 %407
  %409 = load i64, ptr %408, align 8, !tbaa !15
  %410 = sub nsw i64 %405, %409
  %411 = call i64 @libmetis__PQueueInsert(ptr noundef %400, i64 noundef %401, i64 noundef %410)
  br label %412

412:                                              ; preds = %386
  %413 = load i64, ptr %10, align 8, !tbaa !15
  %414 = add nsw i64 %413, 1
  store i64 %414, ptr %10, align 8, !tbaa !15
  br label %382, !llvm.loop !41

415:                                              ; preds = %382
  store i64 0, ptr %18, align 8, !tbaa !15
  br label %416

416:                                              ; preds = %888, %415
  %417 = load i64, ptr %18, align 8, !tbaa !15
  %418 = load i64, ptr %15, align 8, !tbaa !15
  %419 = icmp slt i64 %417, %418
  br i1 %419, label %420, label %891

420:                                              ; preds = %416
  %421 = load float, ptr %42, align 4, !tbaa !9
  %422 = load float, ptr %8, align 4, !tbaa !9
  %423 = fcmp olt float %421, %422
  br i1 %423, label %424, label %425

424:                                              ; preds = %420
  br label %891

425:                                              ; preds = %420
  %426 = load i64, ptr %16, align 8, !tbaa !15
  %427 = load ptr, ptr %39, align 8, !tbaa !5
  %428 = load ptr, ptr %7, align 8, !tbaa !5
  %429 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 0
  call void @libmetis__SelectQueue(i64 noundef %426, ptr noundef %427, ptr noundef %428, ptr noundef %19, ptr noundef %25, ptr noundef %429)
  %430 = load i64, ptr %19, align 8, !tbaa !15
  %431 = add nsw i64 %430, 1
  %432 = srem i64 %431, 2
  store i64 %432, ptr %20, align 8, !tbaa !15
  %433 = load i64, ptr %19, align 8, !tbaa !15
  %434 = icmp eq i64 %433, -1
  br i1 %434, label %442, label %435

435:                                              ; preds = %425
  %436 = load i64, ptr %25, align 8, !tbaa !15
  %437 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %436
  %438 = load i64, ptr %19, align 8, !tbaa !15
  %439 = getelementptr inbounds [2 x %struct.PQueueType], ptr %437, i64 0, i64 %438
  %440 = call i64 @libmetis__PQueueGetMax(ptr noundef %439)
  store i64 %440, ptr %45, align 8, !tbaa !15
  %441 = icmp eq i64 %440, -1
  br i1 %441, label %442, label %443

442:                                              ; preds = %435, %425
  br label %891

443:                                              ; preds = %435
  %444 = load i64, ptr %16, align 8, !tbaa !15
  %445 = load ptr, ptr %38, align 8, !tbaa !5
  %446 = load i64, ptr %45, align 8, !tbaa !15
  %447 = load i64, ptr %16, align 8, !tbaa !15
  %448 = mul nsw i64 %446, %447
  %449 = getelementptr inbounds float, ptr %445, i64 %448
  %450 = load ptr, ptr %39, align 8, !tbaa !5
  %451 = load i64, ptr %20, align 8, !tbaa !15
  %452 = load i64, ptr %16, align 8, !tbaa !15
  %453 = mul nsw i64 %451, %452
  %454 = getelementptr inbounds float, ptr %450, i64 %453
  %455 = call ptr @gk_faxpy(i64 noundef %444, float noundef 1.000000e+00, ptr noundef %449, i64 noundef 1, ptr noundef %454, i64 noundef 1)
  %456 = load i64, ptr %16, align 8, !tbaa !15
  %457 = load ptr, ptr %38, align 8, !tbaa !5
  %458 = load i64, ptr %45, align 8, !tbaa !15
  %459 = load i64, ptr %16, align 8, !tbaa !15
  %460 = mul nsw i64 %458, %459
  %461 = getelementptr inbounds float, ptr %457, i64 %460
  %462 = load ptr, ptr %39, align 8, !tbaa !5
  %463 = load i64, ptr %19, align 8, !tbaa !15
  %464 = load i64, ptr %16, align 8, !tbaa !15
  %465 = mul nsw i64 %463, %464
  %466 = getelementptr inbounds float, ptr %462, i64 %465
  %467 = call ptr @gk_faxpy(i64 noundef %456, float noundef -1.000000e+00, ptr noundef %461, i64 noundef 1, ptr noundef %466, i64 noundef 1)
  %468 = load ptr, ptr %31, align 8, !tbaa !5
  %469 = load i64, ptr %45, align 8, !tbaa !15
  %470 = getelementptr inbounds i64, ptr %468, i64 %469
  %471 = load i64, ptr %470, align 8, !tbaa !15
  %472 = load ptr, ptr %30, align 8, !tbaa !5
  %473 = load i64, ptr %45, align 8, !tbaa !15
  %474 = getelementptr inbounds i64, ptr %472, i64 %473
  %475 = load i64, ptr %474, align 8, !tbaa !15
  %476 = sub nsw i64 %471, %475
  %477 = load i64, ptr %48, align 8, !tbaa !15
  %478 = sub nsw i64 %477, %476
  store i64 %478, ptr %48, align 8, !tbaa !15
  %479 = load i64, ptr %16, align 8, !tbaa !15
  %480 = load ptr, ptr %39, align 8, !tbaa !5
  %481 = load ptr, ptr %7, align 8, !tbaa !5
  %482 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %479, ptr noundef %480, ptr noundef %481)
  store float %482, ptr %43, align 4, !tbaa !9
  %483 = load float, ptr %43, align 4, !tbaa !9
  %484 = load float, ptr %42, align 4, !tbaa !9
  %485 = fcmp olt float %483, %484
  br i1 %485, label %505, label %486

486:                                              ; preds = %443
  %487 = load float, ptr %43, align 4, !tbaa !9
  %488 = load float, ptr %42, align 4, !tbaa !9
  %489 = fcmp oeq float %487, %488
  br i1 %489, label %490, label %531

490:                                              ; preds = %486
  %491 = load i64, ptr %48, align 8, !tbaa !15
  %492 = load i64, ptr %47, align 8, !tbaa !15
  %493 = icmp slt i64 %491, %492
  br i1 %493, label %505, label %494

494:                                              ; preds = %490
  %495 = load i64, ptr %48, align 8, !tbaa !15
  %496 = load i64, ptr %47, align 8, !tbaa !15
  %497 = icmp eq i64 %495, %496
  br i1 %497, label %498, label %531

498:                                              ; preds = %494
  %499 = load i64, ptr %16, align 8, !tbaa !15
  %500 = load ptr, ptr %39, align 8, !tbaa !5
  %501 = load ptr, ptr %7, align 8, !tbaa !5
  %502 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  %503 = call i64 @libmetis__BetterBalance(i64 noundef %499, ptr noundef %500, ptr noundef %501, ptr noundef %502)
  %504 = icmp ne i64 %503, 0
  br i1 %504, label %505, label %531

505:                                              ; preds = %498, %490, %443
  %506 = load i64, ptr %48, align 8, !tbaa !15
  store i64 %506, ptr %47, align 8, !tbaa !15
  %507 = load float, ptr %43, align 4, !tbaa !9
  store float %507, ptr %42, align 4, !tbaa !9
  %508 = load i64, ptr %18, align 8, !tbaa !15
  store i64 %508, ptr %49, align 8, !tbaa !15
  store i64 0, ptr %9, align 8, !tbaa !15
  br label %509

509:                                              ; preds = %527, %505
  %510 = load i64, ptr %9, align 8, !tbaa !15
  %511 = load i64, ptr %16, align 8, !tbaa !15
  %512 = icmp slt i64 %510, %511
  br i1 %512, label %513, label %530

513:                                              ; preds = %509
  %514 = load ptr, ptr %7, align 8, !tbaa !5
  %515 = getelementptr inbounds float, ptr %514, i64 0
  %516 = load float, ptr %515, align 4, !tbaa !9
  %517 = load ptr, ptr %39, align 8, !tbaa !5
  %518 = load i64, ptr %9, align 8, !tbaa !15
  %519 = getelementptr inbounds float, ptr %517, i64 %518
  %520 = load float, ptr %519, align 4, !tbaa !9
  %521 = fsub float %516, %520
  %522 = fpext float %521 to double
  %523 = call double @llvm.fabs.f64(double %522)
  %524 = fptrunc double %523 to float
  %525 = load i64, ptr %9, align 8, !tbaa !15
  %526 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %525
  store float %524, ptr %526, align 4, !tbaa !9
  br label %527

527:                                              ; preds = %513
  %528 = load i64, ptr %9, align 8, !tbaa !15
  %529 = add nsw i64 %528, 1
  store i64 %529, ptr %9, align 8, !tbaa !15
  br label %509, !llvm.loop !42

530:                                              ; preds = %509
  br label %574

531:                                              ; preds = %498, %494, %486
  %532 = load i64, ptr %18, align 8, !tbaa !15
  %533 = load i64, ptr %49, align 8, !tbaa !15
  %534 = sub nsw i64 %532, %533
  %535 = load i64, ptr %23, align 8, !tbaa !15
  %536 = icmp sgt i64 %534, %535
  br i1 %536, label %537, label %573

537:                                              ; preds = %531
  %538 = load ptr, ptr %31, align 8, !tbaa !5
  %539 = load i64, ptr %45, align 8, !tbaa !15
  %540 = getelementptr inbounds i64, ptr %538, i64 %539
  %541 = load i64, ptr %540, align 8, !tbaa !15
  %542 = load ptr, ptr %30, align 8, !tbaa !5
  %543 = load i64, ptr %45, align 8, !tbaa !15
  %544 = getelementptr inbounds i64, ptr %542, i64 %543
  %545 = load i64, ptr %544, align 8, !tbaa !15
  %546 = sub nsw i64 %541, %545
  %547 = load i64, ptr %48, align 8, !tbaa !15
  %548 = add nsw i64 %547, %546
  store i64 %548, ptr %48, align 8, !tbaa !15
  %549 = load i64, ptr %16, align 8, !tbaa !15
  %550 = load ptr, ptr %38, align 8, !tbaa !5
  %551 = load i64, ptr %45, align 8, !tbaa !15
  %552 = load i64, ptr %16, align 8, !tbaa !15
  %553 = mul nsw i64 %551, %552
  %554 = getelementptr inbounds float, ptr %550, i64 %553
  %555 = load ptr, ptr %39, align 8, !tbaa !5
  %556 = load i64, ptr %19, align 8, !tbaa !15
  %557 = load i64, ptr %16, align 8, !tbaa !15
  %558 = mul nsw i64 %556, %557
  %559 = getelementptr inbounds float, ptr %555, i64 %558
  %560 = call ptr @gk_faxpy(i64 noundef %549, float noundef 1.000000e+00, ptr noundef %554, i64 noundef 1, ptr noundef %559, i64 noundef 1)
  %561 = load i64, ptr %16, align 8, !tbaa !15
  %562 = load ptr, ptr %38, align 8, !tbaa !5
  %563 = load i64, ptr %45, align 8, !tbaa !15
  %564 = load i64, ptr %16, align 8, !tbaa !15
  %565 = mul nsw i64 %563, %564
  %566 = getelementptr inbounds float, ptr %562, i64 %565
  %567 = load ptr, ptr %39, align 8, !tbaa !5
  %568 = load i64, ptr %20, align 8, !tbaa !15
  %569 = load i64, ptr %16, align 8, !tbaa !15
  %570 = mul nsw i64 %568, %569
  %571 = getelementptr inbounds float, ptr %567, i64 %570
  %572 = call ptr @gk_faxpy(i64 noundef %561, float noundef -1.000000e+00, ptr noundef %566, i64 noundef 1, ptr noundef %571, i64 noundef 1)
  br label %891

573:                                              ; preds = %531
  br label %574

574:                                              ; preds = %573, %530
  %575 = load i64, ptr %20, align 8, !tbaa !15
  %576 = load ptr, ptr %29, align 8, !tbaa !5
  %577 = load i64, ptr %45, align 8, !tbaa !15
  %578 = getelementptr inbounds i64, ptr %576, i64 %577
  store i64 %575, ptr %578, align 8, !tbaa !15
  %579 = load i64, ptr %18, align 8, !tbaa !15
  %580 = load ptr, ptr %34, align 8, !tbaa !5
  %581 = load i64, ptr %45, align 8, !tbaa !15
  %582 = getelementptr inbounds i64, ptr %580, i64 %581
  store i64 %579, ptr %582, align 8, !tbaa !15
  %583 = load i64, ptr %45, align 8, !tbaa !15
  %584 = load ptr, ptr %35, align 8, !tbaa !5
  %585 = load i64, ptr %18, align 8, !tbaa !15
  %586 = getelementptr inbounds i64, ptr %584, i64 %585
  store i64 %583, ptr %586, align 8, !tbaa !15
  %587 = load ptr, ptr %5, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.controldef, ptr %587, i32 0, i32 1
  %589 = load i64, ptr %588, align 8, !tbaa !35
  %590 = and i64 %589, 32
  %591 = icmp ne i64 %590, 0
  br i1 %591, label %592, label %634

592:                                              ; preds = %574
  %593 = load i64, ptr %45, align 8, !tbaa !15
  %594 = load i64, ptr %19, align 8, !tbaa !15
  %595 = load i64, ptr %25, align 8, !tbaa !15
  %596 = load ptr, ptr %31, align 8, !tbaa !5
  %597 = load i64, ptr %45, align 8, !tbaa !15
  %598 = getelementptr inbounds i64, ptr %596, i64 %597
  %599 = load i64, ptr %598, align 8, !tbaa !15
  %600 = load ptr, ptr %30, align 8, !tbaa !5
  %601 = load i64, ptr %45, align 8, !tbaa !15
  %602 = getelementptr inbounds i64, ptr %600, i64 %601
  %603 = load i64, ptr %602, align 8, !tbaa !15
  %604 = sub nsw i64 %599, %603
  %605 = load i64, ptr %48, align 8, !tbaa !15
  %606 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %593, i64 noundef %594, i64 noundef %595, i64 noundef %604, i64 noundef %605)
  store i64 0, ptr %13, align 8, !tbaa !15
  br label %607

607:                                              ; preds = %625, %592
  %608 = load i64, ptr %13, align 8, !tbaa !15
  %609 = load i64, ptr %16, align 8, !tbaa !15
  %610 = icmp slt i64 %608, %609
  br i1 %610, label %611, label %628

611:                                              ; preds = %607
  %612 = load ptr, ptr %39, align 8, !tbaa !5
  %613 = load i64, ptr %13, align 8, !tbaa !15
  %614 = getelementptr inbounds float, ptr %612, i64 %613
  %615 = load float, ptr %614, align 4, !tbaa !9
  %616 = fpext float %615 to double
  %617 = load ptr, ptr %39, align 8, !tbaa !5
  %618 = load i64, ptr %16, align 8, !tbaa !15
  %619 = load i64, ptr %13, align 8, !tbaa !15
  %620 = add nsw i64 %618, %619
  %621 = getelementptr inbounds float, ptr %617, i64 %620
  %622 = load float, ptr %621, align 4, !tbaa !9
  %623 = fpext float %622 to double
  %624 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %616, double noundef %623)
  br label %625

625:                                              ; preds = %611
  %626 = load i64, ptr %13, align 8, !tbaa !15
  %627 = add nsw i64 %626, 1
  store i64 %627, ptr %13, align 8, !tbaa !15
  br label %607, !llvm.loop !43

628:                                              ; preds = %607
  %629 = load float, ptr %42, align 4, !tbaa !9
  %630 = fpext float %629 to double
  %631 = load float, ptr %43, align 4, !tbaa !9
  %632 = fpext float %631 to double
  %633 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, double noundef %630, double noundef %632)
  br label %634

634:                                              ; preds = %628, %574
  br label %635

635:                                              ; preds = %634
  %636 = load ptr, ptr %30, align 8, !tbaa !5
  %637 = load i64, ptr %45, align 8, !tbaa !15
  %638 = getelementptr inbounds i64, ptr %636, i64 %637
  %639 = load i64, ptr %638, align 8, !tbaa !15
  store i64 %639, ptr %24, align 8, !tbaa !15
  %640 = load ptr, ptr %31, align 8, !tbaa !5
  %641 = load i64, ptr %45, align 8, !tbaa !15
  %642 = getelementptr inbounds i64, ptr %640, i64 %641
  %643 = load i64, ptr %642, align 8, !tbaa !15
  %644 = load ptr, ptr %30, align 8, !tbaa !5
  %645 = load i64, ptr %45, align 8, !tbaa !15
  %646 = getelementptr inbounds i64, ptr %644, i64 %645
  store i64 %643, ptr %646, align 8, !tbaa !15
  %647 = load i64, ptr %24, align 8, !tbaa !15
  %648 = load ptr, ptr %31, align 8, !tbaa !5
  %649 = load i64, ptr %45, align 8, !tbaa !15
  %650 = getelementptr inbounds i64, ptr %648, i64 %649
  store i64 %647, ptr %650, align 8, !tbaa !15
  br label %651

651:                                              ; preds = %635
  br label %652

652:                                              ; preds = %651
  %653 = load ptr, ptr %31, align 8, !tbaa !5
  %654 = load i64, ptr %45, align 8, !tbaa !15
  %655 = getelementptr inbounds i64, ptr %653, i64 %654
  %656 = load i64, ptr %655, align 8, !tbaa !15
  %657 = icmp eq i64 %656, 0
  br i1 %657, label %658, label %703

658:                                              ; preds = %652
  %659 = load ptr, ptr %32, align 8, !tbaa !5
  %660 = load i64, ptr %45, align 8, !tbaa !15
  %661 = getelementptr inbounds i64, ptr %659, i64 %660
  %662 = load i64, ptr %661, align 8, !tbaa !15
  %663 = icmp ne i64 %662, -1
  br i1 %663, label %664, label %703

664:                                              ; preds = %658
  %665 = load ptr, ptr %26, align 8, !tbaa !5
  %666 = load i64, ptr %45, align 8, !tbaa !15
  %667 = getelementptr inbounds i64, ptr %665, i64 %666
  %668 = load i64, ptr %667, align 8, !tbaa !15
  %669 = load ptr, ptr %26, align 8, !tbaa !5
  %670 = load i64, ptr %45, align 8, !tbaa !15
  %671 = add nsw i64 %670, 1
  %672 = getelementptr inbounds i64, ptr %669, i64 %671
  %673 = load i64, ptr %672, align 8, !tbaa !15
  %674 = icmp slt i64 %668, %673
  br i1 %674, label %675, label %703

675:                                              ; preds = %664
  br label %676

676:                                              ; preds = %675
  %677 = load ptr, ptr %33, align 8, !tbaa !5
  %678 = load i64, ptr %17, align 8, !tbaa !15
  %679 = add nsw i64 %678, -1
  store i64 %679, ptr %17, align 8, !tbaa !15
  %680 = getelementptr inbounds i64, ptr %677, i64 %679
  %681 = load i64, ptr %680, align 8, !tbaa !15
  %682 = load ptr, ptr %33, align 8, !tbaa !5
  %683 = load ptr, ptr %32, align 8, !tbaa !5
  %684 = load i64, ptr %45, align 8, !tbaa !15
  %685 = getelementptr inbounds i64, ptr %683, i64 %684
  %686 = load i64, ptr %685, align 8, !tbaa !15
  %687 = getelementptr inbounds i64, ptr %682, i64 %686
  store i64 %681, ptr %687, align 8, !tbaa !15
  %688 = load ptr, ptr %32, align 8, !tbaa !5
  %689 = load i64, ptr %45, align 8, !tbaa !15
  %690 = getelementptr inbounds i64, ptr %688, i64 %689
  %691 = load i64, ptr %690, align 8, !tbaa !15
  %692 = load ptr, ptr %32, align 8, !tbaa !5
  %693 = load ptr, ptr %33, align 8, !tbaa !5
  %694 = load i64, ptr %17, align 8, !tbaa !15
  %695 = getelementptr inbounds i64, ptr %693, i64 %694
  %696 = load i64, ptr %695, align 8, !tbaa !15
  %697 = getelementptr inbounds i64, ptr %692, i64 %696
  store i64 %691, ptr %697, align 8, !tbaa !15
  %698 = load ptr, ptr %32, align 8, !tbaa !5
  %699 = load i64, ptr %45, align 8, !tbaa !15
  %700 = getelementptr inbounds i64, ptr %698, i64 %699
  store i64 -1, ptr %700, align 8, !tbaa !15
  br label %701

701:                                              ; preds = %676
  br label %702

702:                                              ; preds = %701
  br label %703

703:                                              ; preds = %702, %664, %658, %652
  %704 = load ptr, ptr %31, align 8, !tbaa !5
  %705 = load i64, ptr %45, align 8, !tbaa !15
  %706 = getelementptr inbounds i64, ptr %704, i64 %705
  %707 = load i64, ptr %706, align 8, !tbaa !15
  %708 = icmp sgt i64 %707, 0
  br i1 %708, label %709, label %728

709:                                              ; preds = %703
  %710 = load ptr, ptr %32, align 8, !tbaa !5
  %711 = load i64, ptr %45, align 8, !tbaa !15
  %712 = getelementptr inbounds i64, ptr %710, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !15
  %714 = icmp eq i64 %713, -1
  br i1 %714, label %715, label %728

715:                                              ; preds = %709
  br label %716

716:                                              ; preds = %715
  %717 = load i64, ptr %45, align 8, !tbaa !15
  %718 = load ptr, ptr %33, align 8, !tbaa !5
  %719 = load i64, ptr %17, align 8, !tbaa !15
  %720 = getelementptr inbounds i64, ptr %718, i64 %719
  store i64 %717, ptr %720, align 8, !tbaa !15
  %721 = load i64, ptr %17, align 8, !tbaa !15
  %722 = add nsw i64 %721, 1
  store i64 %722, ptr %17, align 8, !tbaa !15
  %723 = load ptr, ptr %32, align 8, !tbaa !5
  %724 = load i64, ptr %45, align 8, !tbaa !15
  %725 = getelementptr inbounds i64, ptr %723, i64 %724
  store i64 %721, ptr %725, align 8, !tbaa !15
  br label %726

726:                                              ; preds = %716
  br label %727

727:                                              ; preds = %726
  br label %728

728:                                              ; preds = %727, %709, %703
  %729 = load ptr, ptr %26, align 8, !tbaa !5
  %730 = load i64, ptr %45, align 8, !tbaa !15
  %731 = getelementptr inbounds i64, ptr %729, i64 %730
  %732 = load i64, ptr %731, align 8, !tbaa !15
  store i64 %732, ptr %11, align 8, !tbaa !15
  br label %733

733:                                              ; preds = %884, %728
  %734 = load i64, ptr %11, align 8, !tbaa !15
  %735 = load ptr, ptr %26, align 8, !tbaa !5
  %736 = load i64, ptr %45, align 8, !tbaa !15
  %737 = add nsw i64 %736, 1
  %738 = getelementptr inbounds i64, ptr %735, i64 %737
  %739 = load i64, ptr %738, align 8, !tbaa !15
  %740 = icmp slt i64 %734, %739
  br i1 %740, label %741, label %887

741:                                              ; preds = %733
  %742 = load ptr, ptr %27, align 8, !tbaa !5
  %743 = load i64, ptr %11, align 8, !tbaa !15
  %744 = getelementptr inbounds i64, ptr %742, i64 %743
  %745 = load i64, ptr %744, align 8, !tbaa !15
  store i64 %745, ptr %12, align 8, !tbaa !15
  %746 = load ptr, ptr %31, align 8, !tbaa !5
  %747 = load i64, ptr %12, align 8, !tbaa !15
  %748 = getelementptr inbounds i64, ptr %746, i64 %747
  %749 = load i64, ptr %748, align 8, !tbaa !15
  %750 = load ptr, ptr %30, align 8, !tbaa !5
  %751 = load i64, ptr %12, align 8, !tbaa !15
  %752 = getelementptr inbounds i64, ptr %750, i64 %751
  %753 = load i64, ptr %752, align 8, !tbaa !15
  %754 = sub nsw i64 %749, %753
  store i64 %754, ptr %46, align 8, !tbaa !15
  %755 = load i64, ptr %20, align 8, !tbaa !15
  %756 = load ptr, ptr %29, align 8, !tbaa !5
  %757 = load i64, ptr %12, align 8, !tbaa !15
  %758 = getelementptr inbounds i64, ptr %756, i64 %757
  %759 = load i64, ptr %758, align 8, !tbaa !15
  %760 = icmp eq i64 %755, %759
  br i1 %760, label %761, label %766

761:                                              ; preds = %741
  %762 = load ptr, ptr %28, align 8, !tbaa !5
  %763 = load i64, ptr %11, align 8, !tbaa !15
  %764 = getelementptr inbounds i64, ptr %762, i64 %763
  %765 = load i64, ptr %764, align 8, !tbaa !15
  br label %772

766:                                              ; preds = %741
  %767 = load ptr, ptr %28, align 8, !tbaa !5
  %768 = load i64, ptr %11, align 8, !tbaa !15
  %769 = getelementptr inbounds i64, ptr %767, i64 %768
  %770 = load i64, ptr %769, align 8, !tbaa !15
  %771 = sub nsw i64 0, %770
  br label %772

772:                                              ; preds = %766, %761
  %773 = phi i64 [ %765, %761 ], [ %771, %766 ]
  store i64 %773, ptr %14, align 8, !tbaa !15
  br label %774

774:                                              ; preds = %772
  %775 = load i64, ptr %14, align 8, !tbaa !15
  %776 = load ptr, ptr %30, align 8, !tbaa !5
  %777 = load i64, ptr %12, align 8, !tbaa !15
  %778 = getelementptr inbounds i64, ptr %776, i64 %777
  %779 = load i64, ptr %778, align 8, !tbaa !15
  %780 = add nsw i64 %779, %775
  store i64 %780, ptr %778, align 8, !tbaa !15
  %781 = load i64, ptr %14, align 8, !tbaa !15
  %782 = load ptr, ptr %31, align 8, !tbaa !5
  %783 = load i64, ptr %12, align 8, !tbaa !15
  %784 = getelementptr inbounds i64, ptr %782, i64 %783
  %785 = load i64, ptr %784, align 8, !tbaa !15
  %786 = sub nsw i64 %785, %781
  store i64 %786, ptr %784, align 8, !tbaa !15
  br label %787

787:                                              ; preds = %774
  br label %788

788:                                              ; preds = %787
  %789 = load ptr, ptr %34, align 8, !tbaa !5
  %790 = load i64, ptr %12, align 8, !tbaa !15
  %791 = getelementptr inbounds i64, ptr %789, i64 %790
  %792 = load i64, ptr %791, align 8, !tbaa !15
  %793 = icmp eq i64 %792, -1
  br i1 %793, label %794, label %817

794:                                              ; preds = %788
  %795 = load ptr, ptr %37, align 8, !tbaa !5
  %796 = load i64, ptr %12, align 8, !tbaa !15
  %797 = getelementptr inbounds i64, ptr %795, i64 %796
  %798 = load i64, ptr %797, align 8, !tbaa !15
  %799 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %798
  %800 = load ptr, ptr %29, align 8, !tbaa !5
  %801 = load i64, ptr %12, align 8, !tbaa !15
  %802 = getelementptr inbounds i64, ptr %800, i64 %801
  %803 = load i64, ptr %802, align 8, !tbaa !15
  %804 = getelementptr inbounds [2 x %struct.PQueueType], ptr %799, i64 0, i64 %803
  %805 = load i64, ptr %12, align 8, !tbaa !15
  %806 = load i64, ptr %46, align 8, !tbaa !15
  %807 = load ptr, ptr %31, align 8, !tbaa !5
  %808 = load i64, ptr %12, align 8, !tbaa !15
  %809 = getelementptr inbounds i64, ptr %807, i64 %808
  %810 = load i64, ptr %809, align 8, !tbaa !15
  %811 = load ptr, ptr %30, align 8, !tbaa !5
  %812 = load i64, ptr %12, align 8, !tbaa !15
  %813 = getelementptr inbounds i64, ptr %811, i64 %812
  %814 = load i64, ptr %813, align 8, !tbaa !15
  %815 = sub nsw i64 %810, %814
  %816 = call i64 @libmetis__PQueueUpdate(ptr noundef %804, i64 noundef %805, i64 noundef %806, i64 noundef %815)
  br label %817

817:                                              ; preds = %794, %788
  %818 = load ptr, ptr %31, align 8, !tbaa !5
  %819 = load i64, ptr %12, align 8, !tbaa !15
  %820 = getelementptr inbounds i64, ptr %818, i64 %819
  %821 = load i64, ptr %820, align 8, !tbaa !15
  %822 = icmp eq i64 %821, 0
  br i1 %822, label %823, label %857

823:                                              ; preds = %817
  %824 = load ptr, ptr %32, align 8, !tbaa !5
  %825 = load i64, ptr %12, align 8, !tbaa !15
  %826 = getelementptr inbounds i64, ptr %824, i64 %825
  %827 = load i64, ptr %826, align 8, !tbaa !15
  %828 = icmp ne i64 %827, -1
  br i1 %828, label %829, label %857

829:                                              ; preds = %823
  br label %830

830:                                              ; preds = %829
  %831 = load ptr, ptr %33, align 8, !tbaa !5
  %832 = load i64, ptr %17, align 8, !tbaa !15
  %833 = add nsw i64 %832, -1
  store i64 %833, ptr %17, align 8, !tbaa !15
  %834 = getelementptr inbounds i64, ptr %831, i64 %833
  %835 = load i64, ptr %834, align 8, !tbaa !15
  %836 = load ptr, ptr %33, align 8, !tbaa !5
  %837 = load ptr, ptr %32, align 8, !tbaa !5
  %838 = load i64, ptr %12, align 8, !tbaa !15
  %839 = getelementptr inbounds i64, ptr %837, i64 %838
  %840 = load i64, ptr %839, align 8, !tbaa !15
  %841 = getelementptr inbounds i64, ptr %836, i64 %840
  store i64 %835, ptr %841, align 8, !tbaa !15
  %842 = load ptr, ptr %32, align 8, !tbaa !5
  %843 = load i64, ptr %12, align 8, !tbaa !15
  %844 = getelementptr inbounds i64, ptr %842, i64 %843
  %845 = load i64, ptr %844, align 8, !tbaa !15
  %846 = load ptr, ptr %32, align 8, !tbaa !5
  %847 = load ptr, ptr %33, align 8, !tbaa !5
  %848 = load i64, ptr %17, align 8, !tbaa !15
  %849 = getelementptr inbounds i64, ptr %847, i64 %848
  %850 = load i64, ptr %849, align 8, !tbaa !15
  %851 = getelementptr inbounds i64, ptr %846, i64 %850
  store i64 %845, ptr %851, align 8, !tbaa !15
  %852 = load ptr, ptr %32, align 8, !tbaa !5
  %853 = load i64, ptr %12, align 8, !tbaa !15
  %854 = getelementptr inbounds i64, ptr %852, i64 %853
  store i64 -1, ptr %854, align 8, !tbaa !15
  br label %855

855:                                              ; preds = %830
  br label %856

856:                                              ; preds = %855
  br label %883

857:                                              ; preds = %823, %817
  %858 = load ptr, ptr %31, align 8, !tbaa !5
  %859 = load i64, ptr %12, align 8, !tbaa !15
  %860 = getelementptr inbounds i64, ptr %858, i64 %859
  %861 = load i64, ptr %860, align 8, !tbaa !15
  %862 = icmp sgt i64 %861, 0
  br i1 %862, label %863, label %882

863:                                              ; preds = %857
  %864 = load ptr, ptr %32, align 8, !tbaa !5
  %865 = load i64, ptr %12, align 8, !tbaa !15
  %866 = getelementptr inbounds i64, ptr %864, i64 %865
  %867 = load i64, ptr %866, align 8, !tbaa !15
  %868 = icmp eq i64 %867, -1
  br i1 %868, label %869, label %882

869:                                              ; preds = %863
  br label %870

870:                                              ; preds = %869
  %871 = load i64, ptr %12, align 8, !tbaa !15
  %872 = load ptr, ptr %33, align 8, !tbaa !5
  %873 = load i64, ptr %17, align 8, !tbaa !15
  %874 = getelementptr inbounds i64, ptr %872, i64 %873
  store i64 %871, ptr %874, align 8, !tbaa !15
  %875 = load i64, ptr %17, align 8, !tbaa !15
  %876 = add nsw i64 %875, 1
  store i64 %876, ptr %17, align 8, !tbaa !15
  %877 = load ptr, ptr %32, align 8, !tbaa !5
  %878 = load i64, ptr %12, align 8, !tbaa !15
  %879 = getelementptr inbounds i64, ptr %877, i64 %878
  store i64 %875, ptr %879, align 8, !tbaa !15
  br label %880

880:                                              ; preds = %870
  br label %881

881:                                              ; preds = %880
  br label %882

882:                                              ; preds = %881, %863, %857
  br label %883

883:                                              ; preds = %882, %856
  br label %884

884:                                              ; preds = %883
  %885 = load i64, ptr %11, align 8, !tbaa !15
  %886 = add nsw i64 %885, 1
  store i64 %886, ptr %11, align 8, !tbaa !15
  br label %733, !llvm.loop !44

887:                                              ; preds = %733
  br label %888

888:                                              ; preds = %887
  %889 = load i64, ptr %18, align 8, !tbaa !15
  %890 = add nsw i64 %889, 1
  store i64 %890, ptr %18, align 8, !tbaa !15
  br label %416, !llvm.loop !45

891:                                              ; preds = %537, %442, %424, %416
  %892 = load i64, ptr %18, align 8, !tbaa !15
  %893 = add nsw i64 %892, -1
  store i64 %893, ptr %18, align 8, !tbaa !15
  br label %894

894:                                              ; preds = %1153, %891
  %895 = load i64, ptr %18, align 8, !tbaa !15
  %896 = load i64, ptr %49, align 8, !tbaa !15
  %897 = icmp sgt i64 %895, %896
  br i1 %897, label %898, label %1156

898:                                              ; preds = %894
  %899 = load ptr, ptr %35, align 8, !tbaa !5
  %900 = load i64, ptr %18, align 8, !tbaa !15
  %901 = getelementptr inbounds i64, ptr %899, i64 %900
  %902 = load i64, ptr %901, align 8, !tbaa !15
  store i64 %902, ptr %45, align 8, !tbaa !15
  %903 = load ptr, ptr %29, align 8, !tbaa !5
  %904 = load i64, ptr %45, align 8, !tbaa !15
  %905 = getelementptr inbounds i64, ptr %903, i64 %904
  %906 = load i64, ptr %905, align 8, !tbaa !15
  %907 = add nsw i64 %906, 1
  %908 = srem i64 %907, 2
  %909 = load ptr, ptr %29, align 8, !tbaa !5
  %910 = load i64, ptr %45, align 8, !tbaa !15
  %911 = getelementptr inbounds i64, ptr %909, i64 %910
  store i64 %908, ptr %911, align 8, !tbaa !15
  store i64 %908, ptr %20, align 8, !tbaa !15
  br label %912

912:                                              ; preds = %898
  %913 = load ptr, ptr %30, align 8, !tbaa !5
  %914 = load i64, ptr %45, align 8, !tbaa !15
  %915 = getelementptr inbounds i64, ptr %913, i64 %914
  %916 = load i64, ptr %915, align 8, !tbaa !15
  store i64 %916, ptr %24, align 8, !tbaa !15
  %917 = load ptr, ptr %31, align 8, !tbaa !5
  %918 = load i64, ptr %45, align 8, !tbaa !15
  %919 = getelementptr inbounds i64, ptr %917, i64 %918
  %920 = load i64, ptr %919, align 8, !tbaa !15
  %921 = load ptr, ptr %30, align 8, !tbaa !5
  %922 = load i64, ptr %45, align 8, !tbaa !15
  %923 = getelementptr inbounds i64, ptr %921, i64 %922
  store i64 %920, ptr %923, align 8, !tbaa !15
  %924 = load i64, ptr %24, align 8, !tbaa !15
  %925 = load ptr, ptr %31, align 8, !tbaa !5
  %926 = load i64, ptr %45, align 8, !tbaa !15
  %927 = getelementptr inbounds i64, ptr %925, i64 %926
  store i64 %924, ptr %927, align 8, !tbaa !15
  br label %928

928:                                              ; preds = %912
  br label %929

929:                                              ; preds = %928
  %930 = load ptr, ptr %31, align 8, !tbaa !5
  %931 = load i64, ptr %45, align 8, !tbaa !15
  %932 = getelementptr inbounds i64, ptr %930, i64 %931
  %933 = load i64, ptr %932, align 8, !tbaa !15
  %934 = icmp eq i64 %933, 0
  br i1 %934, label %935, label %980

935:                                              ; preds = %929
  %936 = load ptr, ptr %32, align 8, !tbaa !5
  %937 = load i64, ptr %45, align 8, !tbaa !15
  %938 = getelementptr inbounds i64, ptr %936, i64 %937
  %939 = load i64, ptr %938, align 8, !tbaa !15
  %940 = icmp ne i64 %939, -1
  br i1 %940, label %941, label %980

941:                                              ; preds = %935
  %942 = load ptr, ptr %26, align 8, !tbaa !5
  %943 = load i64, ptr %45, align 8, !tbaa !15
  %944 = getelementptr inbounds i64, ptr %942, i64 %943
  %945 = load i64, ptr %944, align 8, !tbaa !15
  %946 = load ptr, ptr %26, align 8, !tbaa !5
  %947 = load i64, ptr %45, align 8, !tbaa !15
  %948 = add nsw i64 %947, 1
  %949 = getelementptr inbounds i64, ptr %946, i64 %948
  %950 = load i64, ptr %949, align 8, !tbaa !15
  %951 = icmp slt i64 %945, %950
  br i1 %951, label %952, label %980

952:                                              ; preds = %941
  br label %953

953:                                              ; preds = %952
  %954 = load ptr, ptr %33, align 8, !tbaa !5
  %955 = load i64, ptr %17, align 8, !tbaa !15
  %956 = add nsw i64 %955, -1
  store i64 %956, ptr %17, align 8, !tbaa !15
  %957 = getelementptr inbounds i64, ptr %954, i64 %956
  %958 = load i64, ptr %957, align 8, !tbaa !15
  %959 = load ptr, ptr %33, align 8, !tbaa !5
  %960 = load ptr, ptr %32, align 8, !tbaa !5
  %961 = load i64, ptr %45, align 8, !tbaa !15
  %962 = getelementptr inbounds i64, ptr %960, i64 %961
  %963 = load i64, ptr %962, align 8, !tbaa !15
  %964 = getelementptr inbounds i64, ptr %959, i64 %963
  store i64 %958, ptr %964, align 8, !tbaa !15
  %965 = load ptr, ptr %32, align 8, !tbaa !5
  %966 = load i64, ptr %45, align 8, !tbaa !15
  %967 = getelementptr inbounds i64, ptr %965, i64 %966
  %968 = load i64, ptr %967, align 8, !tbaa !15
  %969 = load ptr, ptr %32, align 8, !tbaa !5
  %970 = load ptr, ptr %33, align 8, !tbaa !5
  %971 = load i64, ptr %17, align 8, !tbaa !15
  %972 = getelementptr inbounds i64, ptr %970, i64 %971
  %973 = load i64, ptr %972, align 8, !tbaa !15
  %974 = getelementptr inbounds i64, ptr %969, i64 %973
  store i64 %968, ptr %974, align 8, !tbaa !15
  %975 = load ptr, ptr %32, align 8, !tbaa !5
  %976 = load i64, ptr %45, align 8, !tbaa !15
  %977 = getelementptr inbounds i64, ptr %975, i64 %976
  store i64 -1, ptr %977, align 8, !tbaa !15
  br label %978

978:                                              ; preds = %953
  br label %979

979:                                              ; preds = %978
  br label %1006

980:                                              ; preds = %941, %935, %929
  %981 = load ptr, ptr %31, align 8, !tbaa !5
  %982 = load i64, ptr %45, align 8, !tbaa !15
  %983 = getelementptr inbounds i64, ptr %981, i64 %982
  %984 = load i64, ptr %983, align 8, !tbaa !15
  %985 = icmp sgt i64 %984, 0
  br i1 %985, label %986, label %1005

986:                                              ; preds = %980
  %987 = load ptr, ptr %32, align 8, !tbaa !5
  %988 = load i64, ptr %45, align 8, !tbaa !15
  %989 = getelementptr inbounds i64, ptr %987, i64 %988
  %990 = load i64, ptr %989, align 8, !tbaa !15
  %991 = icmp eq i64 %990, -1
  br i1 %991, label %992, label %1005

992:                                              ; preds = %986
  br label %993

993:                                              ; preds = %992
  %994 = load i64, ptr %45, align 8, !tbaa !15
  %995 = load ptr, ptr %33, align 8, !tbaa !5
  %996 = load i64, ptr %17, align 8, !tbaa !15
  %997 = getelementptr inbounds i64, ptr %995, i64 %996
  store i64 %994, ptr %997, align 8, !tbaa !15
  %998 = load i64, ptr %17, align 8, !tbaa !15
  %999 = add nsw i64 %998, 1
  store i64 %999, ptr %17, align 8, !tbaa !15
  %1000 = load ptr, ptr %32, align 8, !tbaa !5
  %1001 = load i64, ptr %45, align 8, !tbaa !15
  %1002 = getelementptr inbounds i64, ptr %1000, i64 %1001
  store i64 %998, ptr %1002, align 8, !tbaa !15
  br label %1003

1003:                                             ; preds = %993
  br label %1004

1004:                                             ; preds = %1003
  br label %1005

1005:                                             ; preds = %1004, %986, %980
  br label %1006

1006:                                             ; preds = %1005, %979
  %1007 = load i64, ptr %16, align 8, !tbaa !15
  %1008 = load ptr, ptr %38, align 8, !tbaa !5
  %1009 = load i64, ptr %45, align 8, !tbaa !15
  %1010 = load i64, ptr %16, align 8, !tbaa !15
  %1011 = mul nsw i64 %1009, %1010
  %1012 = getelementptr inbounds float, ptr %1008, i64 %1011
  %1013 = load ptr, ptr %39, align 8, !tbaa !5
  %1014 = load i64, ptr %20, align 8, !tbaa !15
  %1015 = load i64, ptr %16, align 8, !tbaa !15
  %1016 = mul nsw i64 %1014, %1015
  %1017 = getelementptr inbounds float, ptr %1013, i64 %1016
  %1018 = call ptr @gk_faxpy(i64 noundef %1007, float noundef 1.000000e+00, ptr noundef %1012, i64 noundef 1, ptr noundef %1017, i64 noundef 1)
  %1019 = load i64, ptr %16, align 8, !tbaa !15
  %1020 = load ptr, ptr %38, align 8, !tbaa !5
  %1021 = load i64, ptr %45, align 8, !tbaa !15
  %1022 = load i64, ptr %16, align 8, !tbaa !15
  %1023 = mul nsw i64 %1021, %1022
  %1024 = getelementptr inbounds float, ptr %1020, i64 %1023
  %1025 = load ptr, ptr %39, align 8, !tbaa !5
  %1026 = load i64, ptr %20, align 8, !tbaa !15
  %1027 = add nsw i64 %1026, 1
  %1028 = srem i64 %1027, 2
  %1029 = load i64, ptr %16, align 8, !tbaa !15
  %1030 = mul nsw i64 %1028, %1029
  %1031 = getelementptr inbounds float, ptr %1025, i64 %1030
  %1032 = call ptr @gk_faxpy(i64 noundef %1019, float noundef -1.000000e+00, ptr noundef %1024, i64 noundef 1, ptr noundef %1031, i64 noundef 1)
  %1033 = load ptr, ptr %26, align 8, !tbaa !5
  %1034 = load i64, ptr %45, align 8, !tbaa !15
  %1035 = getelementptr inbounds i64, ptr %1033, i64 %1034
  %1036 = load i64, ptr %1035, align 8, !tbaa !15
  store i64 %1036, ptr %11, align 8, !tbaa !15
  br label %1037

1037:                                             ; preds = %1149, %1006
  %1038 = load i64, ptr %11, align 8, !tbaa !15
  %1039 = load ptr, ptr %26, align 8, !tbaa !5
  %1040 = load i64, ptr %45, align 8, !tbaa !15
  %1041 = add nsw i64 %1040, 1
  %1042 = getelementptr inbounds i64, ptr %1039, i64 %1041
  %1043 = load i64, ptr %1042, align 8, !tbaa !15
  %1044 = icmp slt i64 %1038, %1043
  br i1 %1044, label %1045, label %1152

1045:                                             ; preds = %1037
  %1046 = load ptr, ptr %27, align 8, !tbaa !5
  %1047 = load i64, ptr %11, align 8, !tbaa !15
  %1048 = getelementptr inbounds i64, ptr %1046, i64 %1047
  %1049 = load i64, ptr %1048, align 8, !tbaa !15
  store i64 %1049, ptr %12, align 8, !tbaa !15
  %1050 = load i64, ptr %20, align 8, !tbaa !15
  %1051 = load ptr, ptr %29, align 8, !tbaa !5
  %1052 = load i64, ptr %12, align 8, !tbaa !15
  %1053 = getelementptr inbounds i64, ptr %1051, i64 %1052
  %1054 = load i64, ptr %1053, align 8, !tbaa !15
  %1055 = icmp eq i64 %1050, %1054
  br i1 %1055, label %1056, label %1061

1056:                                             ; preds = %1045
  %1057 = load ptr, ptr %28, align 8, !tbaa !5
  %1058 = load i64, ptr %11, align 8, !tbaa !15
  %1059 = getelementptr inbounds i64, ptr %1057, i64 %1058
  %1060 = load i64, ptr %1059, align 8, !tbaa !15
  br label %1067

1061:                                             ; preds = %1045
  %1062 = load ptr, ptr %28, align 8, !tbaa !5
  %1063 = load i64, ptr %11, align 8, !tbaa !15
  %1064 = getelementptr inbounds i64, ptr %1062, i64 %1063
  %1065 = load i64, ptr %1064, align 8, !tbaa !15
  %1066 = sub nsw i64 0, %1065
  br label %1067

1067:                                             ; preds = %1061, %1056
  %1068 = phi i64 [ %1060, %1056 ], [ %1066, %1061 ]
  store i64 %1068, ptr %14, align 8, !tbaa !15
  br label %1069

1069:                                             ; preds = %1067
  %1070 = load i64, ptr %14, align 8, !tbaa !15
  %1071 = load ptr, ptr %30, align 8, !tbaa !5
  %1072 = load i64, ptr %12, align 8, !tbaa !15
  %1073 = getelementptr inbounds i64, ptr %1071, i64 %1072
  %1074 = load i64, ptr %1073, align 8, !tbaa !15
  %1075 = add nsw i64 %1074, %1070
  store i64 %1075, ptr %1073, align 8, !tbaa !15
  %1076 = load i64, ptr %14, align 8, !tbaa !15
  %1077 = load ptr, ptr %31, align 8, !tbaa !5
  %1078 = load i64, ptr %12, align 8, !tbaa !15
  %1079 = getelementptr inbounds i64, ptr %1077, i64 %1078
  %1080 = load i64, ptr %1079, align 8, !tbaa !15
  %1081 = sub nsw i64 %1080, %1076
  store i64 %1081, ptr %1079, align 8, !tbaa !15
  br label %1082

1082:                                             ; preds = %1069
  br label %1083

1083:                                             ; preds = %1082
  %1084 = load ptr, ptr %32, align 8, !tbaa !5
  %1085 = load i64, ptr %12, align 8, !tbaa !15
  %1086 = getelementptr inbounds i64, ptr %1084, i64 %1085
  %1087 = load i64, ptr %1086, align 8, !tbaa !15
  %1088 = icmp ne i64 %1087, -1
  br i1 %1088, label %1089, label %1123

1089:                                             ; preds = %1083
  %1090 = load ptr, ptr %31, align 8, !tbaa !5
  %1091 = load i64, ptr %12, align 8, !tbaa !15
  %1092 = getelementptr inbounds i64, ptr %1090, i64 %1091
  %1093 = load i64, ptr %1092, align 8, !tbaa !15
  %1094 = icmp eq i64 %1093, 0
  br i1 %1094, label %1095, label %1123

1095:                                             ; preds = %1089
  br label %1096

1096:                                             ; preds = %1095
  %1097 = load ptr, ptr %33, align 8, !tbaa !5
  %1098 = load i64, ptr %17, align 8, !tbaa !15
  %1099 = add nsw i64 %1098, -1
  store i64 %1099, ptr %17, align 8, !tbaa !15
  %1100 = getelementptr inbounds i64, ptr %1097, i64 %1099
  %1101 = load i64, ptr %1100, align 8, !tbaa !15
  %1102 = load ptr, ptr %33, align 8, !tbaa !5
  %1103 = load ptr, ptr %32, align 8, !tbaa !5
  %1104 = load i64, ptr %12, align 8, !tbaa !15
  %1105 = getelementptr inbounds i64, ptr %1103, i64 %1104
  %1106 = load i64, ptr %1105, align 8, !tbaa !15
  %1107 = getelementptr inbounds i64, ptr %1102, i64 %1106
  store i64 %1101, ptr %1107, align 8, !tbaa !15
  %1108 = load ptr, ptr %32, align 8, !tbaa !5
  %1109 = load i64, ptr %12, align 8, !tbaa !15
  %1110 = getelementptr inbounds i64, ptr %1108, i64 %1109
  %1111 = load i64, ptr %1110, align 8, !tbaa !15
  %1112 = load ptr, ptr %32, align 8, !tbaa !5
  %1113 = load ptr, ptr %33, align 8, !tbaa !5
  %1114 = load i64, ptr %17, align 8, !tbaa !15
  %1115 = getelementptr inbounds i64, ptr %1113, i64 %1114
  %1116 = load i64, ptr %1115, align 8, !tbaa !15
  %1117 = getelementptr inbounds i64, ptr %1112, i64 %1116
  store i64 %1111, ptr %1117, align 8, !tbaa !15
  %1118 = load ptr, ptr %32, align 8, !tbaa !5
  %1119 = load i64, ptr %12, align 8, !tbaa !15
  %1120 = getelementptr inbounds i64, ptr %1118, i64 %1119
  store i64 -1, ptr %1120, align 8, !tbaa !15
  br label %1121

1121:                                             ; preds = %1096
  br label %1122

1122:                                             ; preds = %1121
  br label %1123

1123:                                             ; preds = %1122, %1089, %1083
  %1124 = load ptr, ptr %32, align 8, !tbaa !5
  %1125 = load i64, ptr %12, align 8, !tbaa !15
  %1126 = getelementptr inbounds i64, ptr %1124, i64 %1125
  %1127 = load i64, ptr %1126, align 8, !tbaa !15
  %1128 = icmp eq i64 %1127, -1
  br i1 %1128, label %1129, label %1148

1129:                                             ; preds = %1123
  %1130 = load ptr, ptr %31, align 8, !tbaa !5
  %1131 = load i64, ptr %12, align 8, !tbaa !15
  %1132 = getelementptr inbounds i64, ptr %1130, i64 %1131
  %1133 = load i64, ptr %1132, align 8, !tbaa !15
  %1134 = icmp sgt i64 %1133, 0
  br i1 %1134, label %1135, label %1148

1135:                                             ; preds = %1129
  br label %1136

1136:                                             ; preds = %1135
  %1137 = load i64, ptr %12, align 8, !tbaa !15
  %1138 = load ptr, ptr %33, align 8, !tbaa !5
  %1139 = load i64, ptr %17, align 8, !tbaa !15
  %1140 = getelementptr inbounds i64, ptr %1138, i64 %1139
  store i64 %1137, ptr %1140, align 8, !tbaa !15
  %1141 = load i64, ptr %17, align 8, !tbaa !15
  %1142 = add nsw i64 %1141, 1
  store i64 %1142, ptr %17, align 8, !tbaa !15
  %1143 = load ptr, ptr %32, align 8, !tbaa !5
  %1144 = load i64, ptr %12, align 8, !tbaa !15
  %1145 = getelementptr inbounds i64, ptr %1143, i64 %1144
  store i64 %1141, ptr %1145, align 8, !tbaa !15
  br label %1146

1146:                                             ; preds = %1136
  br label %1147

1147:                                             ; preds = %1146
  br label %1148

1148:                                             ; preds = %1147, %1129, %1123
  br label %1149

1149:                                             ; preds = %1148
  %1150 = load i64, ptr %11, align 8, !tbaa !15
  %1151 = add nsw i64 %1150, 1
  store i64 %1151, ptr %11, align 8, !tbaa !15
  br label %1037, !llvm.loop !46

1152:                                             ; preds = %1037
  br label %1153

1153:                                             ; preds = %1152
  %1154 = load i64, ptr %18, align 8, !tbaa !15
  %1155 = add nsw i64 %1154, -1
  store i64 %1155, ptr %18, align 8, !tbaa !15
  br label %894, !llvm.loop !47

1156:                                             ; preds = %894
  %1157 = load ptr, ptr %5, align 8, !tbaa !5
  %1158 = getelementptr inbounds %struct.controldef, ptr %1157, i32 0, i32 1
  %1159 = load i64, ptr %1158, align 8, !tbaa !35
  %1160 = and i64 %1159, 8
  %1161 = icmp ne i64 %1160, 0
  br i1 %1161, label %1162, label %1195

1162:                                             ; preds = %1156
  %1163 = load i64, ptr %47, align 8, !tbaa !15
  %1164 = load i64, ptr %49, align 8, !tbaa !15
  %1165 = load i64, ptr %17, align 8, !tbaa !15
  %1166 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %1163, i64 noundef %1164, i64 noundef %1165)
  store i64 0, ptr %13, align 8, !tbaa !15
  br label %1167

1167:                                             ; preds = %1185, %1162
  %1168 = load i64, ptr %13, align 8, !tbaa !15
  %1169 = load i64, ptr %16, align 8, !tbaa !15
  %1170 = icmp slt i64 %1168, %1169
  br i1 %1170, label %1171, label %1188

1171:                                             ; preds = %1167
  %1172 = load ptr, ptr %39, align 8, !tbaa !5
  %1173 = load i64, ptr %13, align 8, !tbaa !15
  %1174 = getelementptr inbounds float, ptr %1172, i64 %1173
  %1175 = load float, ptr %1174, align 4, !tbaa !9
  %1176 = fpext float %1175 to double
  %1177 = load ptr, ptr %39, align 8, !tbaa !5
  %1178 = load i64, ptr %16, align 8, !tbaa !15
  %1179 = load i64, ptr %13, align 8, !tbaa !15
  %1180 = add nsw i64 %1178, %1179
  %1181 = getelementptr inbounds float, ptr %1177, i64 %1180
  %1182 = load float, ptr %1181, align 4, !tbaa !9
  %1183 = fpext float %1182 to double
  %1184 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %1176, double noundef %1183)
  br label %1185

1185:                                             ; preds = %1171
  %1186 = load i64, ptr %13, align 8, !tbaa !15
  %1187 = add nsw i64 %1186, 1
  store i64 %1187, ptr %13, align 8, !tbaa !15
  br label %1167, !llvm.loop !48

1188:                                             ; preds = %1167
  %1189 = load i64, ptr %16, align 8, !tbaa !15
  %1190 = load ptr, ptr %39, align 8, !tbaa !5
  %1191 = load ptr, ptr %7, align 8, !tbaa !5
  %1192 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %1189, ptr noundef %1190, ptr noundef %1191)
  %1193 = fpext float %1192 to double
  %1194 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6, double noundef %1193)
  br label %1195

1195:                                             ; preds = %1188, %1156
  %1196 = load i64, ptr %47, align 8, !tbaa !15
  %1197 = load ptr, ptr %6, align 8, !tbaa !5
  %1198 = getelementptr inbounds %struct.graphdef, ptr %1197, i32 0, i32 16
  store i64 %1196, ptr %1198, align 8, !tbaa !34
  %1199 = load i64, ptr %17, align 8, !tbaa !15
  %1200 = load ptr, ptr %6, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.graphdef, ptr %1200, i32 0, i32 20
  store i64 %1199, ptr %1201, align 8, !tbaa !40
  store i64 0, ptr %9, align 8, !tbaa !15
  br label %1202

1202:                                             ; preds = %1215, %1195
  %1203 = load i64, ptr %9, align 8, !tbaa !15
  %1204 = load i64, ptr %16, align 8, !tbaa !15
  %1205 = icmp slt i64 %1203, %1204
  br i1 %1205, label %1206, label %1218

1206:                                             ; preds = %1202
  %1207 = load ptr, ptr %5, align 8, !tbaa !5
  %1208 = load i64, ptr %9, align 8, !tbaa !15
  %1209 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1208
  %1210 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1209, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1207, ptr noundef %1210)
  %1211 = load ptr, ptr %5, align 8, !tbaa !5
  %1212 = load i64, ptr %9, align 8, !tbaa !15
  %1213 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1212
  %1214 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1213, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1211, ptr noundef %1214)
  br label %1215

1215:                                             ; preds = %1206
  %1216 = load i64, ptr %9, align 8, !tbaa !15
  %1217 = add nsw i64 %1216, 1
  store i64 %1217, ptr %9, align 8, !tbaa !15
  br label %1202, !llvm.loop !49

1218:                                             ; preds = %1202
  %1219 = load ptr, ptr %5, align 8, !tbaa !5
  %1220 = load i64, ptr %15, align 8, !tbaa !15
  call void @libmetis__idxwspacefree(ptr noundef %1219, i64 noundef %1220)
  %1221 = load ptr, ptr %5, align 8, !tbaa !5
  %1222 = load i64, ptr %15, align 8, !tbaa !15
  call void @libmetis__idxwspacefree(ptr noundef %1221, i64 noundef %1222)
  %1223 = load ptr, ptr %5, align 8, !tbaa !5
  %1224 = load i64, ptr %15, align 8, !tbaa !15
  call void @libmetis__idxwspacefree(ptr noundef %1223, i64 noundef %1224)
  %1225 = load ptr, ptr %5, align 8, !tbaa !5
  %1226 = load i64, ptr %15, align 8, !tbaa !15
  call void @libmetis__idxwspacefree(ptr noundef %1225, i64 noundef %1226)
  call void @llvm.lifetime.end.p0(i64 256, 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) #2

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

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

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

declare i64 @libmetis__famax2(i64 noundef, ptr noundef) #0

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

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

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

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

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

declare void @libmetis__SelectQueue(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i64 @libmetis__PQueueGetMax(ptr noundef) #0

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

declare i64 @libmetis__BetterBalance(i64 noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

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

attributes #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 = { 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!"float", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"graphdef", !13, i64 0, !13, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !14, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !13, i64 112, !13, i64 120, !6, i64 128, !6, i64 136, !13, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !13, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!13 = !{!"long", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!13, !13, i64 0}
!16 = !{!12, !13, i64 208}
!17 = !{!12, !6, i64 16}
!18 = !{!12, !6, i64 216}
!19 = !{!12, !6, i64 40}
!20 = !{!12, !6, i64 48}
!21 = !{!12, !6, i64 128}
!22 = !{!12, !6, i64 168}
!23 = !{!12, !6, i64 176}
!24 = !{!12, !6, i64 224}
!25 = !{!12, !6, i64 152}
!26 = !{!12, !6, i64 160}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}
!33 = distinct !{!33, !28}
!34 = !{!12, !13, i64 112}
!35 = !{!36, !13, i64 8}
!36 = !{!"controldef", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !10, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !37, i64 88, !38, i64 152, !38, i64 160, !38, i64 168, !38, i64 176, !38, i64 184, !38, i64 192, !38, i64 200, !38, i64 208, !38, i64 216, !38, i64 224, !38, i64 232, !38, i64 240, !38, i64 248, !38, i64 256, !38, i64 264, !38, i64 272}
!37 = !{!"workspacedef", !6, i64 0, !13, i64 8, !13, i64 16, !6, i64 24, !6, i64 32, !13, i64 40, !6, i64 48, !6, i64 56}
!38 = !{!"double", !7, i64 0}
!39 = distinct !{!39, !28}
!40 = !{!12, !13, i64 144}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}
!43 = distinct !{!43, !28}
!44 = distinct !{!44, !28}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28}
!49 = distinct !{!49, !28}


; 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 [58 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

declare float @libmetis__Compute2WayHLoadImbalance(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MocGeneral2WayBalance(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, float noundef %3) local_unnamed_addr #1 {
  %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 [16 x [2 x i64]], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 2816, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %10) #5
  %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) #5
  %36 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %11) #5
  %37 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %11) #5
  %38 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %11) #5
  %39 = sitofp i64 %11 to double
  %40 = fmul double %39, 1.000000e-02
  %41 = fcmp oge double %40, 1.500000e+01
  %42 = select i1 %41, double %40, double 1.500000e+01
  %.inv = fcmp oge double %42, 1.000000e+02
  %43 = select i1 %.inv, double 1.000000e+02, double %42
  %44 = fptosi double %43 to i64
  %45 = icmp sgt i64 %13, 0
  br i1 %45, label %.lr.ph, label %.preheader523.thread

.preheader523:                                    ; preds = %.lr.ph
  %46 = icmp sgt i64 %11, 0
  br i1 %46, label %.lr.ph535.preheader, label %.preheader522.thread

.lr.ph535.preheader:                              ; preds = %.preheader523.thread, %.preheader523
  br label %.lr.ph535

.preheader523.thread:                             ; preds = %4
  %47 = icmp sgt i64 %11, 0
  br i1 %47, label %.lr.ph535.preheader, label %.preheader518.thread630

.lr.ph:                                           ; preds = %4, %.lr.ph
  %.0471533 = phi i64 [ %51, %.lr.ph ], [ 0, %4 ]
  %48 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %.0471533
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %48, i64 noundef %11, i64 noundef 501) #5
  %49 = getelementptr inbounds i8, ptr %48, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %49, i64 noundef %11, i64 noundef 501) #5
  %50 = getelementptr inbounds [16 x [2 x i64]], ptr %10, i64 0, i64 %.0471533
  %51 = add nuw nsw i64 %.0471533, 1
  %exitcond.not = icmp eq i64 %51, %13
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %50, i8 0, i64 16, i1 false)
  br i1 %exitcond.not, label %.preheader523, label %.lr.ph, !llvm.loop !23

.preheader522:                                    ; preds = %.lr.ph535
  store i64 0, ptr %5, align 8, !tbaa !25
  br i1 %45, label %.preheader521.us.us, label %.preheader518.thread630

.preheader522.thread:                             ; preds = %.preheader523
  br i1 %45, label %.preheader518.thread, label %.preheader518.thread630

.preheader521.us.us:                              ; preds = %.preheader522, %.preheader521.us.us.backedge
  %.0476538.us.us.us = phi i64 [ %.0476538.us.us.us.be, %.preheader521.us.us.backedge ], [ 0, %.preheader522 ]
  %52 = load i64, ptr %5, align 8, !tbaa !25
  %53 = getelementptr inbounds [16 x [2 x i64]], ptr %10, i64 0, i64 %.0476538.us.us.us, i64 %52
  %54 = load i64, ptr %53, align 8, !tbaa !25
  %55 = icmp eq i64 %54, 0
  br i1 %55, label %.preheader519.us.us.us, label %..loopexit520_crit_edge.us.us.us

..loopexit520_crit_edge.us.us.us:                 ; preds = %87, %.preheader521.us.us
  %56 = add nuw nsw i64 %.0476538.us.us.us, 1
  %exitcond621.not = icmp eq i64 %56, %13
  br i1 %exitcond621.not, label %._crit_edge.split.us.us.us, label %.preheader521.us.us.backedge

.preheader521.us.us.backedge:                     ; preds = %..loopexit520_crit_edge.us.us.us, %._crit_edge.split.us.us.us
  %.0476538.us.us.us.be = phi i64 [ %56, %..loopexit520_crit_edge.us.us.us ], [ 0, %._crit_edge.split.us.us.us ]
  br label %.preheader521.us.us, !llvm.loop !26

.preheader519.us.us.us:                           ; preds = %.preheader521.us.us, %87
  %.2536.us.us.us = phi i64 [ %88, %87 ], [ 0, %.preheader521.us.us ]
  %57 = getelementptr inbounds i64, ptr %23, i64 %.2536.us.us.us
  %58 = load i64, ptr %57, align 8, !tbaa !25
  %59 = load i64, ptr %5, align 8, !tbaa !25
  %.not509.us.us.us = icmp eq i64 %58, %59
  br i1 %.not509.us.us.us, label %60, label %87

60:                                               ; preds = %.preheader519.us.us.us
  %61 = mul nuw nsw i64 %.2536.us.us.us, %13
  %62 = getelementptr inbounds float, ptr %17, i64 %61
  %63 = call i64 @libmetis__famax2(i64 noundef %13, ptr noundef %62) #5
  %64 = icmp eq i64 %63, %.0476538.us.us.us
  br i1 %64, label %65, label %87

65:                                               ; preds = %60
  %66 = getelementptr inbounds i64, ptr %38, i64 %.2536.us.us.us
  %67 = load i64, ptr %66, align 8, !tbaa !25
  %68 = load i64, ptr %5, align 8, !tbaa !25
  %69 = getelementptr inbounds [16 x [2 x i64]], ptr %10, i64 0, i64 %67, i64 %68
  %70 = load i64, ptr %69, align 8, !tbaa !25
  %71 = getelementptr inbounds [16 x [2 x i64]], ptr %10, i64 0, i64 %.0476538.us.us.us, i64 %68
  %72 = load i64, ptr %71, align 8, !tbaa !25
  %73 = icmp sgt i64 %70, %72
  br i1 %73, label %74, label %87

74:                                               ; preds = %65
  %75 = getelementptr float, ptr %62, i64 %67
  %76 = load float, ptr %75, align 4, !tbaa !27
  %77 = fpext float %76 to double
  %78 = getelementptr float, ptr %62, i64 %.0476538.us.us.us
  %79 = load float, ptr %78, align 4, !tbaa !27
  %80 = fpext float %79 to double
  %81 = fmul double %80, 1.300000e+00
  %82 = fcmp ogt double %81, %77
  br i1 %82, label %83, label %87

83:                                               ; preds = %74
  %84 = add nsw i64 %70, -1
  store i64 %84, ptr %69, align 8, !tbaa !25
  %85 = load i64, ptr %71, align 8, !tbaa !25
  %86 = add nsw i64 %85, 1
  store i64 %86, ptr %71, align 8, !tbaa !25
  store i64 %.0476538.us.us.us, ptr %66, align 8, !tbaa !25
  br label %87

87:                                               ; preds = %83, %74, %65, %60, %.preheader519.us.us.us
  %88 = add nuw nsw i64 %.2536.us.us.us, 1
  %exitcond620.not = icmp eq i64 %88, %11
  br i1 %exitcond620.not, label %..loopexit520_crit_edge.us.us.us, label %.preheader519.us.us.us, !llvm.loop !29

._crit_edge.split.us.us.us:                       ; preds = %..loopexit520_crit_edge.us.us.us
  %89 = load i64, ptr %5, align 8, !tbaa !25
  %90 = add nsw i64 %89, 1
  store i64 %90, ptr %5, align 8, !tbaa !25
  %91 = icmp slt i64 %89, 1
  br i1 %91, label %.preheader521.us.us.backedge, label %.preheader518

.preheader518.thread:                             ; preds = %.preheader522.thread
  store i64 2, ptr %5, align 8, !tbaa !25
  br label %.lr.ph549

.preheader518.thread630:                          ; preds = %.preheader523.thread, %.preheader522, %.preheader522.thread
  %92 = phi i1 [ false, %.preheader522.thread ], [ true, %.preheader522 ], [ false, %.preheader523.thread ]
  store i64 2, ptr %5, align 8, !tbaa !25
  br label %._crit_edge

.lr.ph535:                                        ; preds = %.lr.ph535.preheader, %.lr.ph535
  %.1472534 = phi i64 [ %102, %.lr.ph535 ], [ 0, %.lr.ph535.preheader ]
  %93 = mul nsw i64 %.1472534, %13
  %94 = getelementptr inbounds float, ptr %17, i64 %93
  %95 = call i64 @gk_fargmax(i64 noundef %13, ptr noundef %94) #5
  %96 = getelementptr inbounds i64, ptr %38, i64 %.1472534
  store i64 %95, ptr %96, align 8, !tbaa !25
  %97 = getelementptr inbounds i64, ptr %23, i64 %.1472534
  %98 = load i64, ptr %97, align 8, !tbaa !25
  %99 = getelementptr inbounds [16 x [2 x i64]], ptr %10, i64 0, i64 %95, i64 %98
  %100 = load i64, ptr %99, align 8, !tbaa !25
  %101 = add nsw i64 %100, 1
  store i64 %101, ptr %99, align 8, !tbaa !25
  %102 = add nuw nsw i64 %.1472534, 1
  %exitcond618.not = icmp eq i64 %102, %11
  br i1 %exitcond618.not, label %.preheader522, label %.lr.ph535, !llvm.loop !30

.preheader518:                                    ; preds = %._crit_edge.split.us.us.us
  br i1 %45, label %.lr.ph549, label %._crit_edge

.lr.ph549:                                        ; preds = %.preheader518.thread, %.preheader518
  %103 = phi i1 [ false, %.preheader518.thread ], [ true, %.preheader518 ]
  %104 = load float, ptr %2, align 4, !tbaa !27
  %min.iters.check = icmp ult i64 %13, 8
  %105 = sub i64 %8, %30
  %diff.check = icmp ult i64 %105, 32
  %or.cond661 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond661, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph549
  %n.vec = and i64 %13, -8
  %broadcast.splatinsert = insertelement <4 x float> poison, float %104, 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 ]
  %106 = getelementptr inbounds float, ptr %29, i64 %index
  %107 = getelementptr inbounds i8, ptr %106, i64 16
  %wide.load = load <4 x float>, ptr %106, align 4, !tbaa !27
  %wide.load643 = load <4 x float>, ptr %107, align 4, !tbaa !27
  %108 = fsub <4 x float> %broadcast.splat, %wide.load
  %109 = fsub <4 x float> %broadcast.splat, %wide.load643
  %110 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %108)
  %111 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %109)
  %112 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  store <4 x float> %110, ptr %112, align 16, !tbaa !27
  store <4 x float> %111, ptr %113, align 16, !tbaa !27
  %index.next = add nuw i64 %index, 8
  %114 = icmp eq i64 %index.next, %n.vec
  br i1 %114, label %middle.block, label %vector.body, !llvm.loop !31

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph549
  %.3548.ph = phi i64 [ 0, %.lr.ph549 ], [ %n.vec, %middle.block ]
  %.neg670 = or disjoint i64 %.3548.ph, 1
  %xtraiter = and i64 %13, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %115 = getelementptr inbounds float, ptr %29, i64 %.3548.ph
  %116 = load float, ptr %115, align 4, !tbaa !27
  %117 = fsub float %104, %116
  %118 = call float @llvm.fabs.f32(float %117)
  %119 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.3548.ph
  store float %118, ptr %119, align 16, !tbaa !27
  %120 = or disjoint i64 %.3548.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.3548.unr = phi i64 [ %.3548.ph, %scalar.ph.preheader ], [ %120, %scalar.ph.prol ]
  %121 = icmp eq i64 %13, %.neg670
  br i1 %121, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.3548 = phi i64 [ %133, %scalar.ph ], [ %.3548.unr, %scalar.ph.prol.loopexit ]
  %122 = getelementptr inbounds float, ptr %29, i64 %.3548
  %123 = load float, ptr %122, align 4, !tbaa !27
  %124 = fsub float %104, %123
  %125 = call float @llvm.fabs.f32(float %124)
  %126 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.3548
  store float %125, ptr %126, align 4, !tbaa !27
  %127 = add nuw nsw i64 %.3548, 1
  %128 = getelementptr inbounds float, ptr %29, i64 %127
  %129 = load float, ptr %128, align 4, !tbaa !27
  %130 = fsub float %104, %129
  %131 = call float @llvm.fabs.f32(float %130)
  %132 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %127
  store float %131, ptr %132, align 4, !tbaa !27
  %133 = add nuw nsw i64 %.3548, 2
  %exitcond622.not.1 = icmp eq i64 %133, %13
  br i1 %exitcond622.not.1, label %._crit_edge, label %scalar.ph, !llvm.loop !34

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader518.thread630, %.preheader518
  %134 = phi i1 [ %92, %.preheader518.thread630 ], [ true, %.preheader518 ], [ %103, %middle.block ], [ %103, %scalar.ph ], [ %103, %scalar.ph.prol.loopexit ]
  %135 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef %2) #5
  %136 = getelementptr inbounds i8, ptr %1, i64 112
  %137 = load i64, ptr %136, align 8, !tbaa !35
  %138 = getelementptr inbounds i8, ptr %0, i64 8
  %139 = load i64, ptr %138, align 8, !tbaa !36
  %140 = and i64 %139, 8
  %.not = icmp eq i64 %140, 0
  br i1 %.not, label %164, label %141

141:                                              ; preds = %._crit_edge
  %142 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str) #5
  br i1 %45, label %.lr.ph552, label %._crit_edge553

.lr.ph552:                                        ; preds = %141
  %143 = getelementptr float, ptr %29, i64 %13
  br label %144

144:                                              ; preds = %.lr.ph552, %144
  %.0479550 = phi i64 [ 0, %.lr.ph552 ], [ %152, %144 ]
  %145 = getelementptr inbounds float, ptr %29, i64 %.0479550
  %146 = load float, ptr %145, align 4, !tbaa !27
  %147 = fpext float %146 to double
  %148 = getelementptr float, ptr %143, i64 %.0479550
  %149 = load float, ptr %148, align 4, !tbaa !27
  %150 = fpext float %149 to double
  %151 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %147, double noundef %150) #5
  %152 = add nuw nsw i64 %.0479550, 1
  %exitcond623.not = icmp eq i64 %152, %13
  br i1 %exitcond623.not, label %._crit_edge553, label %144, !llvm.loop !40

._crit_edge553:                                   ; preds = %144, %141
  %153 = load float, ptr %2, align 4, !tbaa !27
  %154 = fpext float %153 to double
  %155 = getelementptr inbounds i8, ptr %2, i64 4
  %156 = load float, ptr %155, align 4, !tbaa !27
  %157 = fpext float %156 to double
  %158 = load i64, ptr %1, align 8, !tbaa !5
  %159 = getelementptr inbounds i8, ptr %1, i64 144
  %160 = load i64, ptr %159, align 8, !tbaa !41
  %161 = load i64, ptr %136, align 8, !tbaa !35
  %162 = fpext float %135 to double
  %163 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, double noundef %154, double noundef %157, i64 noundef %158, i64 noundef %160, i64 noundef %161, double noundef %162) #5
  br label %164

164:                                              ; preds = %._crit_edge553, %._crit_edge
  %165 = call ptr @libmetis__idxset(i64 noundef %11, i64 noundef -1, ptr noundef %35) #5
  %166 = getelementptr inbounds i8, ptr %1, i64 144
  %167 = load i64, ptr %166, align 8, !tbaa !41
  call void @libmetis__RandomPermute(i64 noundef %11, ptr noundef %37, i64 noundef 1) #5
  br i1 %134, label %.lr.ph556, label %.loopexit517

.preheader:                                       ; preds = %.lr.ph556
  %168 = icmp slt i64 %11, 1
  %169 = fcmp olt float %135, %3
  %or.cond569 = select i1 %168, i1 true, i1 %169
  br i1 %or.cond569, label %.loopexit517, label %.lr.ph577

.lr.ph577:                                        ; preds = %.preheader
  %170 = getelementptr float, ptr %29, i64 %13
  %171 = sub i64 %8, %30
  %min.iters.check648 = icmp ult i64 %13, 8
  %diff.check645 = icmp ult i64 %171, 32
  %or.cond662 = select i1 %min.iters.check648, i1 true, i1 %diff.check645
  %n.vec651 = and i64 %13, 9223372036854775800
  %cmp.n660 = icmp eq i64 %13, %n.vec651
  %xtraiter668 = and i64 %13, 1
  %lcmp.mod669.not = icmp eq i64 %xtraiter668, 0
  br label %186

.lr.ph556:                                        ; preds = %164, %.lr.ph556
  %.0473554 = phi i64 [ %185, %.lr.ph556 ], [ 0, %164 ]
  %172 = getelementptr inbounds i64, ptr %37, i64 %.0473554
  %173 = load i64, ptr %172, align 8, !tbaa !25
  %174 = getelementptr inbounds i64, ptr %38, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !25
  %176 = getelementptr inbounds i64, ptr %23, i64 %173
  %177 = load i64, ptr %176, align 8, !tbaa !25
  %178 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %175, i64 %177
  %179 = getelementptr inbounds i64, ptr %27, i64 %173
  %180 = load i64, ptr %179, align 8, !tbaa !25
  %181 = getelementptr inbounds i64, ptr %25, i64 %173
  %182 = load i64, ptr %181, align 8, !tbaa !25
  %183 = sub nsw i64 %180, %182
  %184 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %178, i64 noundef %173, i64 noundef %183) #5
  %185 = add nuw nsw i64 %.0473554, 1
  %exitcond624.not = icmp eq i64 %185, %11
  br i1 %exitcond624.not, label %.preheader, label %.lr.ph556, !llvm.loop !42

186:                                              ; preds = %.lr.ph577, %._crit_edge568
  %.0576 = phi i64 [ -1, %.lr.ph577 ], [ %.1, %._crit_edge568 ]
  %.0468575 = phi i64 [ %137, %.lr.ph577 ], [ %210, %._crit_edge568 ]
  %.0469574 = phi i64 [ %137, %.lr.ph577 ], [ %.1470, %._crit_edge568 ]
  %.0474573 = phi float [ %135, %.lr.ph577 ], [ %.1475, %._crit_edge568 ]
  %.0482571 = phi i64 [ %167, %.lr.ph577 ], [ %.3485.lcssa, %._crit_edge568 ]
  %.0488570 = phi i64 [ 0, %.lr.ph577 ], [ %370, %._crit_edge568 ]
  call void @libmetis__SelectQueue(i64 noundef %13, ptr noundef %29, ptr noundef %2, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %9) #5
  %187 = load i64, ptr %5, align 8, !tbaa !25
  %188 = add nsw i64 %187, 1
  %189 = srem i64 %188, 2
  %190 = icmp eq i64 %187, -1
  br i1 %190, label %.loopexit517, label %191

191:                                              ; preds = %186
  %192 = load i64, ptr %6, align 8, !tbaa !25
  %193 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %192, i64 %187
  %194 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %193) #5
  %195 = icmp eq i64 %194, -1
  br i1 %195, label %.loopexit517, label %196

196:                                              ; preds = %191
  %197 = mul nsw i64 %194, %13
  %198 = getelementptr inbounds float, ptr %17, i64 %197
  %199 = mul nsw i64 %189, %13
  %200 = getelementptr inbounds float, ptr %29, i64 %199
  %201 = call ptr @gk_faxpy(i64 noundef %13, float noundef 1.000000e+00, ptr noundef %198, i64 noundef 1, ptr noundef %200, i64 noundef 1) #5
  %202 = load i64, ptr %5, align 8, !tbaa !25
  %203 = mul nsw i64 %202, %13
  %204 = getelementptr inbounds float, ptr %29, i64 %203
  %205 = call ptr @gk_faxpy(i64 noundef %13, float noundef -1.000000e+00, ptr noundef %198, i64 noundef 1, ptr noundef %204, i64 noundef 1) #5
  %206 = getelementptr inbounds i64, ptr %27, i64 %194
  %207 = load i64, ptr %206, align 8, !tbaa !25
  %208 = getelementptr inbounds i64, ptr %25, i64 %194
  %209 = load i64, ptr %208, align 8, !tbaa !25
  %.neg = sub i64 %209, %207
  %210 = add i64 %.neg, %.0468575
  %211 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef %2) #5
  %212 = fcmp olt float %211, %.0474573
  br i1 %212, label %221, label %213

213:                                              ; preds = %196
  %214 = fcmp oeq float %211, %.0474573
  br i1 %214, label %215, label %251

215:                                              ; preds = %213
  %216 = icmp slt i64 %210, %.0469574
  br i1 %216, label %221, label %217

217:                                              ; preds = %215
  %218 = icmp eq i64 %210, %.0469574
  br i1 %218, label %219, label %251

219:                                              ; preds = %217
  %220 = call i64 @libmetis__BetterBalance(i64 noundef %13, ptr noundef %29, ptr noundef %2, ptr noundef nonnull %7) #5
  %.not502 = icmp eq i64 %220, 0
  br i1 %.not502, label %251, label %221

221:                                              ; preds = %219, %215, %196
  br i1 %45, label %.lr.ph559, label %.loopexit516

.lr.ph559:                                        ; preds = %221
  %222 = load float, ptr %2, align 4, !tbaa !27
  br i1 %or.cond662, label %scalar.ph647.preheader, label %vector.ph649

vector.ph649:                                     ; preds = %.lr.ph559
  %broadcast.splatinsert657 = insertelement <4 x float> poison, float %222, i64 0
  %broadcast.splat658 = shufflevector <4 x float> %broadcast.splatinsert657, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body653

vector.body653:                                   ; preds = %vector.body653, %vector.ph649
  %index654 = phi i64 [ 0, %vector.ph649 ], [ %index.next659, %vector.body653 ]
  %223 = getelementptr inbounds float, ptr %29, i64 %index654
  %224 = getelementptr inbounds i8, ptr %223, i64 16
  %wide.load655 = load <4 x float>, ptr %223, align 4, !tbaa !27
  %wide.load656 = load <4 x float>, ptr %224, align 4, !tbaa !27
  %225 = fsub <4 x float> %broadcast.splat658, %wide.load655
  %226 = fsub <4 x float> %broadcast.splat658, %wide.load656
  %227 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %225)
  %228 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %226)
  %229 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index654
  %230 = getelementptr inbounds i8, ptr %229, i64 16
  store <4 x float> %227, ptr %229, align 16, !tbaa !27
  store <4 x float> %228, ptr %230, align 16, !tbaa !27
  %index.next659 = add nuw i64 %index654, 8
  %231 = icmp eq i64 %index.next659, %n.vec651
  br i1 %231, label %middle.block646, label %vector.body653, !llvm.loop !43

middle.block646:                                  ; preds = %vector.body653
  br i1 %cmp.n660, label %.loopexit516, label %scalar.ph647.preheader

scalar.ph647.preheader:                           ; preds = %middle.block646, %.lr.ph559
  %.4557.ph = phi i64 [ 0, %.lr.ph559 ], [ %n.vec651, %middle.block646 ]
  %.neg671 = or disjoint i64 %.4557.ph, 1
  br i1 %lcmp.mod669.not, label %scalar.ph647.prol.loopexit, label %scalar.ph647.prol

scalar.ph647.prol:                                ; preds = %scalar.ph647.preheader
  %232 = getelementptr inbounds float, ptr %29, i64 %.4557.ph
  %233 = load float, ptr %232, align 4, !tbaa !27
  %234 = fsub float %222, %233
  %235 = call float @llvm.fabs.f32(float %234)
  %236 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.4557.ph
  store float %235, ptr %236, align 16, !tbaa !27
  %237 = or disjoint i64 %.4557.ph, 1
  br label %scalar.ph647.prol.loopexit

scalar.ph647.prol.loopexit:                       ; preds = %scalar.ph647.prol, %scalar.ph647.preheader
  %.4557.unr = phi i64 [ %.4557.ph, %scalar.ph647.preheader ], [ %237, %scalar.ph647.prol ]
  %238 = icmp eq i64 %13, %.neg671
  br i1 %238, label %.loopexit516, label %scalar.ph647

scalar.ph647:                                     ; preds = %scalar.ph647.prol.loopexit, %scalar.ph647
  %.4557 = phi i64 [ %250, %scalar.ph647 ], [ %.4557.unr, %scalar.ph647.prol.loopexit ]
  %239 = getelementptr inbounds float, ptr %29, i64 %.4557
  %240 = load float, ptr %239, align 4, !tbaa !27
  %241 = fsub float %222, %240
  %242 = call float @llvm.fabs.f32(float %241)
  %243 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.4557
  store float %242, ptr %243, align 4, !tbaa !27
  %244 = add nuw nsw i64 %.4557, 1
  %245 = getelementptr inbounds float, ptr %29, i64 %244
  %246 = load float, ptr %245, align 4, !tbaa !27
  %247 = fsub float %222, %246
  %248 = call float @llvm.fabs.f32(float %247)
  %249 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %244
  store float %248, ptr %249, align 4, !tbaa !27
  %250 = add nuw nsw i64 %.4557, 2
  %exitcond625.not.1 = icmp eq i64 %250, %13
  br i1 %exitcond625.not.1, label %.loopexit516, label %scalar.ph647, !llvm.loop !44

251:                                              ; preds = %219, %217, %213
  %252 = sub nsw i64 %.0488570, %.0576
  %253 = icmp sgt i64 %252, %44
  br i1 %253, label %254, label %.loopexit516

254:                                              ; preds = %251
  %255 = load i64, ptr %5, align 8, !tbaa !25
  %256 = mul nsw i64 %255, %13
  %257 = getelementptr inbounds float, ptr %29, i64 %256
  %258 = call ptr @gk_faxpy(i64 noundef %13, float noundef 1.000000e+00, ptr noundef %198, i64 noundef 1, ptr noundef %257, i64 noundef 1) #5
  %259 = call ptr @gk_faxpy(i64 noundef %13, float noundef -1.000000e+00, ptr noundef %198, i64 noundef 1, ptr noundef %200, i64 noundef 1) #5
  br label %.loopexit517

.loopexit516:                                     ; preds = %scalar.ph647.prol.loopexit, %scalar.ph647, %middle.block646, %221, %251
  %.1475 = phi float [ %.0474573, %251 ], [ %211, %221 ], [ %211, %middle.block646 ], [ %211, %scalar.ph647 ], [ %211, %scalar.ph647.prol.loopexit ]
  %.1470 = phi i64 [ %.0469574, %251 ], [ %210, %221 ], [ %210, %middle.block646 ], [ %210, %scalar.ph647 ], [ %210, %scalar.ph647.prol.loopexit ]
  %.1 = phi i64 [ %.0576, %251 ], [ %.0488570, %221 ], [ %.0488570, %middle.block646 ], [ %.0488570, %scalar.ph647 ], [ %.0488570, %scalar.ph647.prol.loopexit ]
  %260 = getelementptr inbounds i64, ptr %23, i64 %194
  store i64 %189, ptr %260, align 8, !tbaa !25
  %261 = getelementptr inbounds i64, ptr %35, i64 %194
  store i64 %.0488570, ptr %261, align 8, !tbaa !25
  %262 = getelementptr inbounds i64, ptr %36, i64 %.0488570
  store i64 %194, ptr %262, align 8, !tbaa !25
  %263 = load i64, ptr %138, align 8, !tbaa !36
  %264 = and i64 %263, 32
  %.not503 = icmp eq i64 %264, 0
  br i1 %.not503, label %283, label %265

265:                                              ; preds = %.loopexit516
  %266 = load i64, ptr %5, align 8, !tbaa !25
  %267 = load i64, ptr %6, align 8, !tbaa !25
  %268 = load i64, ptr %206, align 8, !tbaa !25
  %269 = load i64, ptr %208, align 8, !tbaa !25
  %270 = sub nsw i64 %268, %269
  %271 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %194, i64 noundef %266, i64 noundef %267, i64 noundef %270, i64 noundef %210) #5
  br i1 %45, label %.lr.ph562, label %._crit_edge563

.lr.ph562:                                        ; preds = %265, %.lr.ph562
  %.1480560 = phi i64 [ %279, %.lr.ph562 ], [ 0, %265 ]
  %272 = getelementptr inbounds float, ptr %29, i64 %.1480560
  %273 = load float, ptr %272, align 4, !tbaa !27
  %274 = fpext float %273 to double
  %275 = getelementptr float, ptr %170, i64 %.1480560
  %276 = load float, ptr %275, align 4, !tbaa !27
  %277 = fpext float %276 to double
  %278 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %274, double noundef %277) #5
  %279 = add nuw nsw i64 %.1480560, 1
  %exitcond626.not = icmp eq i64 %279, %13
  br i1 %exitcond626.not, label %._crit_edge563, label %.lr.ph562, !llvm.loop !45

._crit_edge563:                                   ; preds = %.lr.ph562, %265
  %280 = fpext float %.1475 to double
  %281 = fpext float %211 to double
  %282 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, double noundef %280, double noundef %281) #5
  br label %283

283:                                              ; preds = %.loopexit516, %._crit_edge563
  %284 = load i64, ptr %208, align 8, !tbaa !25
  %285 = load i64, ptr %206, align 8, !tbaa !25
  store i64 %285, ptr %208, align 8, !tbaa !25
  store i64 %284, ptr %206, align 8, !tbaa !25
  %286 = icmp eq i64 %284, 0
  br i1 %286, label %287, label %thread-pre-split

287:                                              ; preds = %283
  %288 = getelementptr inbounds i64, ptr %32, i64 %194
  %289 = load i64, ptr %288, align 8, !tbaa !25
  %.not504 = icmp eq i64 %289, -1
  br i1 %.not504, label %thread-pre-split.thread, label %290

290:                                              ; preds = %287
  %291 = getelementptr inbounds i64, ptr %15, i64 %194
  %292 = load i64, ptr %291, align 8, !tbaa !25
  %293 = getelementptr i8, ptr %291, i64 8
  %294 = load i64, ptr %293, align 8, !tbaa !25
  %295 = icmp slt i64 %292, %294
  br i1 %295, label %296, label %thread-pre-split.thread

296:                                              ; preds = %290
  %297 = add nsw i64 %.0482571, -1
  %298 = getelementptr inbounds i64, ptr %34, i64 %297
  %299 = load i64, ptr %298, align 8, !tbaa !25
  %300 = getelementptr inbounds i64, ptr %34, i64 %289
  store i64 %299, ptr %300, align 8, !tbaa !25
  %301 = load i64, ptr %288, align 8, !tbaa !25
  %302 = getelementptr inbounds i64, ptr %32, i64 %299
  store i64 %301, ptr %302, align 8, !tbaa !25
  store i64 -1, ptr %288, align 8, !tbaa !25
  %.pr.pre = load i64, ptr %206, align 8, !tbaa !25
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %296, %283
  %303 = phi i64 [ %284, %283 ], [ %.pr.pre, %296 ]
  %.1483 = phi i64 [ %.0482571, %283 ], [ %297, %296 ]
  %304 = icmp sgt i64 %303, 0
  br i1 %304, label %305, label %thread-pre-split.thread

305:                                              ; preds = %thread-pre-split
  %306 = getelementptr inbounds i64, ptr %32, i64 %194
  %307 = load i64, ptr %306, align 8, !tbaa !25
  %308 = icmp eq i64 %307, -1
  br i1 %308, label %309, label %thread-pre-split.thread

309:                                              ; preds = %305
  %310 = getelementptr inbounds i64, ptr %34, i64 %.1483
  store i64 %194, ptr %310, align 8, !tbaa !25
  %311 = add nsw i64 %.1483, 1
  store i64 %.1483, ptr %306, align 8, !tbaa !25
  br label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %290, %287, %309, %305, %thread-pre-split
  %.2484 = phi i64 [ %311, %309 ], [ %.1483, %305 ], [ %.1483, %thread-pre-split ], [ %.0482571, %287 ], [ %.0482571, %290 ]
  %312 = getelementptr inbounds i64, ptr %15, i64 %194
  %313 = load i64, ptr %312, align 8, !tbaa !25
  %314 = getelementptr i8, ptr %312, i64 8
  %315 = load i64, ptr %314, align 8, !tbaa !25
  %316 = icmp slt i64 %313, %315
  br i1 %316, label %.lr.ph567, label %._crit_edge568

.lr.ph567:                                        ; preds = %thread-pre-split.thread, %.thread
  %.1477565 = phi i64 [ %367, %.thread ], [ %313, %thread-pre-split.thread ]
  %.3485564 = phi i64 [ %.4486, %.thread ], [ %.2484, %thread-pre-split.thread ]
  %317 = getelementptr inbounds i64, ptr %19, i64 %.1477565
  %318 = load i64, ptr %317, align 8, !tbaa !25
  %319 = getelementptr inbounds i64, ptr %27, i64 %318
  %320 = load i64, ptr %319, align 8, !tbaa !25
  %321 = getelementptr inbounds i64, ptr %25, i64 %318
  %322 = load i64, ptr %321, align 8, !tbaa !25
  %323 = getelementptr inbounds i64, ptr %23, i64 %318
  %324 = load i64, ptr %323, align 8, !tbaa !25
  %325 = icmp eq i64 %189, %324
  %326 = getelementptr inbounds i64, ptr %21, i64 %.1477565
  %327 = load i64, ptr %326, align 8, !tbaa !25
  %328 = sub nsw i64 0, %327
  %329 = select i1 %325, i64 %327, i64 %328
  %330 = add nsw i64 %329, %322
  store i64 %330, ptr %321, align 8, !tbaa !25
  %331 = load i64, ptr %319, align 8, !tbaa !25
  %332 = sub nsw i64 %331, %329
  store i64 %332, ptr %319, align 8, !tbaa !25
  %333 = getelementptr inbounds i64, ptr %35, i64 %318
  %334 = load i64, ptr %333, align 8, !tbaa !25
  %335 = icmp eq i64 %334, -1
  br i1 %335, label %336, label %345

336:                                              ; preds = %.lr.ph567
  %337 = sub nsw i64 %320, %322
  %338 = getelementptr inbounds i64, ptr %38, i64 %318
  %339 = load i64, ptr %338, align 8, !tbaa !25
  %340 = load i64, ptr %323, align 8, !tbaa !25
  %341 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %339, i64 %340
  %342 = load i64, ptr %321, align 8, !tbaa !25
  %343 = sub nsw i64 %332, %342
  %344 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %341, i64 noundef %318, i64 noundef %337, i64 noundef %343) #5
  %.pr511 = load i64, ptr %319, align 8, !tbaa !25
  br label %345

345:                                              ; preds = %336, %.lr.ph567
  %346 = phi i64 [ %.pr511, %336 ], [ %332, %.lr.ph567 ]
  %347 = icmp eq i64 %346, 0
  br i1 %347, label %348, label %358

348:                                              ; preds = %345
  %349 = getelementptr inbounds i64, ptr %32, i64 %318
  %350 = load i64, ptr %349, align 8, !tbaa !25
  %.not505 = icmp eq i64 %350, -1
  br i1 %.not505, label %.thread, label %351

351:                                              ; preds = %348
  %352 = add nsw i64 %.3485564, -1
  %353 = getelementptr inbounds i64, ptr %34, i64 %352
  %354 = load i64, ptr %353, align 8, !tbaa !25
  %355 = getelementptr inbounds i64, ptr %34, i64 %350
  store i64 %354, ptr %355, align 8, !tbaa !25
  %356 = load i64, ptr %349, align 8, !tbaa !25
  %357 = getelementptr inbounds i64, ptr %32, i64 %354
  store i64 %356, ptr %357, align 8, !tbaa !25
  store i64 -1, ptr %349, align 8, !tbaa !25
  br label %.thread

358:                                              ; preds = %345
  %359 = icmp sgt i64 %346, 0
  br i1 %359, label %360, label %.thread

360:                                              ; preds = %358
  %361 = getelementptr inbounds i64, ptr %32, i64 %318
  %362 = load i64, ptr %361, align 8, !tbaa !25
  %363 = icmp eq i64 %362, -1
  br i1 %363, label %364, label %.thread

364:                                              ; preds = %360
  %365 = getelementptr inbounds i64, ptr %34, i64 %.3485564
  store i64 %318, ptr %365, align 8, !tbaa !25
  %366 = add nsw i64 %.3485564, 1
  store i64 %.3485564, ptr %361, align 8, !tbaa !25
  br label %.thread

.thread:                                          ; preds = %348, %351, %364, %360, %358
  %.4486 = phi i64 [ %352, %351 ], [ %366, %364 ], [ %.3485564, %360 ], [ %.3485564, %358 ], [ %.3485564, %348 ]
  %367 = add nsw i64 %.1477565, 1
  %368 = load i64, ptr %314, align 8, !tbaa !25
  %369 = icmp slt i64 %367, %368
  br i1 %369, label %.lr.ph567, label %._crit_edge568, !llvm.loop !46

._crit_edge568:                                   ; preds = %.thread, %thread-pre-split.thread
  %.3485.lcssa = phi i64 [ %.2484, %thread-pre-split.thread ], [ %.4486, %.thread ]
  %370 = add nuw nsw i64 %.0488570, 1
  %371 = icmp sge i64 %370, %11
  %372 = fcmp olt float %.1475, %3
  %or.cond = select i1 %371, i1 true, i1 %372
  br i1 %or.cond, label %.loopexit517, label %186, !llvm.loop !47

.loopexit517:                                     ; preds = %._crit_edge568, %191, %186, %164, %.preheader, %254
  %.0488531 = phi i64 [ %.0488570, %254 ], [ 0, %.preheader ], [ 0, %164 ], [ %370, %._crit_edge568 ], [ %.0488570, %191 ], [ %.0488570, %186 ]
  %.0482529 = phi i64 [ %.0482571, %254 ], [ %167, %.preheader ], [ %167, %164 ], [ %.3485.lcssa, %._crit_edge568 ], [ %.0482571, %191 ], [ %.0482571, %186 ]
  %.0469527 = phi i64 [ %.0469574, %254 ], [ %137, %.preheader ], [ %137, %164 ], [ %.1470, %._crit_edge568 ], [ %.0469574, %191 ], [ %.0469574, %186 ]
  %.0525 = phi i64 [ %.0576, %254 ], [ -1, %.preheader ], [ -1, %164 ], [ %.1, %._crit_edge568 ], [ %.0576, %191 ], [ %.0576, %186 ]
  %.1489596 = add nsw i64 %.0488531, -1
  %373 = icmp sgt i64 %.1489596, %.0525
  br i1 %373, label %.lr.ph600, label %._crit_edge601

.loopexit:                                        ; preds = %458, %.thread512
  %.7.lcssa = phi i64 [ %.6, %.thread512 ], [ %.9, %458 ]
  %.1489 = add nsw i64 %.1489598, -1
  %374 = icmp sgt i64 %.1489, %.0525
  br i1 %374, label %.lr.ph600, label %._crit_edge601, !llvm.loop !48

.lr.ph600:                                        ; preds = %.loopexit517, %.loopexit
  %.1489598 = phi i64 [ %.1489, %.loopexit ], [ %.1489596, %.loopexit517 ]
  %.5487597 = phi i64 [ %.7.lcssa, %.loopexit ], [ %.0482529, %.loopexit517 ]
  %375 = getelementptr inbounds i64, ptr %36, i64 %.1489598
  %376 = load i64, ptr %375, align 8, !tbaa !25
  %377 = getelementptr inbounds i64, ptr %23, i64 %376
  %378 = load i64, ptr %377, align 8, !tbaa !25
  %379 = add nsw i64 %378, 1
  %380 = srem i64 %379, 2
  store i64 %380, ptr %377, align 8, !tbaa !25
  %381 = getelementptr inbounds i64, ptr %25, i64 %376
  %382 = load i64, ptr %381, align 8, !tbaa !25
  %383 = getelementptr inbounds i64, ptr %27, i64 %376
  %384 = load i64, ptr %383, align 8, !tbaa !25
  store i64 %384, ptr %381, align 8, !tbaa !25
  store i64 %382, ptr %383, align 8, !tbaa !25
  %385 = icmp eq i64 %382, 0
  br i1 %385, label %386, label %402

386:                                              ; preds = %.lr.ph600
  %387 = getelementptr inbounds i64, ptr %32, i64 %376
  %388 = load i64, ptr %387, align 8, !tbaa !25
  %.not507 = icmp eq i64 %388, -1
  br i1 %.not507, label %.thread512, label %389

389:                                              ; preds = %386
  %390 = getelementptr inbounds i64, ptr %15, i64 %376
  %391 = load i64, ptr %390, align 8, !tbaa !25
  %392 = getelementptr i8, ptr %390, i64 8
  %393 = load i64, ptr %392, align 8, !tbaa !25
  %394 = icmp slt i64 %391, %393
  br i1 %394, label %395, label %.thread512

395:                                              ; preds = %389
  %396 = add nsw i64 %.5487597, -1
  %397 = getelementptr inbounds i64, ptr %34, i64 %396
  %398 = load i64, ptr %397, align 8, !tbaa !25
  %399 = getelementptr inbounds i64, ptr %34, i64 %388
  store i64 %398, ptr %399, align 8, !tbaa !25
  %400 = load i64, ptr %387, align 8, !tbaa !25
  %401 = getelementptr inbounds i64, ptr %32, i64 %398
  store i64 %400, ptr %401, align 8, !tbaa !25
  store i64 -1, ptr %387, align 8, !tbaa !25
  br label %.thread512

402:                                              ; preds = %.lr.ph600
  %403 = icmp sgt i64 %382, 0
  br i1 %403, label %404, label %.thread512

404:                                              ; preds = %402
  %405 = getelementptr inbounds i64, ptr %32, i64 %376
  %406 = load i64, ptr %405, align 8, !tbaa !25
  %407 = icmp eq i64 %406, -1
  br i1 %407, label %408, label %.thread512

408:                                              ; preds = %404
  %409 = getelementptr inbounds i64, ptr %34, i64 %.5487597
  store i64 %376, ptr %409, align 8, !tbaa !25
  %410 = add nsw i64 %.5487597, 1
  store i64 %.5487597, ptr %405, align 8, !tbaa !25
  br label %.thread512

.thread512:                                       ; preds = %386, %389, %402, %404, %408, %395
  %.6 = phi i64 [ %396, %395 ], [ %410, %408 ], [ %.5487597, %404 ], [ %.5487597, %402 ], [ %.5487597, %389 ], [ %.5487597, %386 ]
  %411 = mul nsw i64 %376, %13
  %412 = getelementptr inbounds float, ptr %17, i64 %411
  %413 = mul nsw i64 %380, %13
  %414 = getelementptr inbounds float, ptr %29, i64 %413
  %415 = call ptr @gk_faxpy(i64 noundef %13, float noundef 1.000000e+00, ptr noundef %412, i64 noundef 1, ptr noundef %414, i64 noundef 1) #5
  %416 = and i64 %380, 1
  %417 = xor i64 %416, 1
  %418 = mul nuw nsw i64 %417, %13
  %419 = getelementptr inbounds float, ptr %29, i64 %418
  %420 = call ptr @gk_faxpy(i64 noundef %13, float noundef -1.000000e+00, ptr noundef %412, i64 noundef 1, ptr noundef %419, i64 noundef 1) #5
  %421 = getelementptr inbounds i64, ptr %15, i64 %376
  %422 = load i64, ptr %421, align 8, !tbaa !25
  %423 = getelementptr i8, ptr %421, i64 8
  %424 = load i64, ptr %423, align 8, !tbaa !25
  %425 = icmp slt i64 %422, %424
  br i1 %425, label %.lr.ph594, label %.loopexit

.lr.ph594:                                        ; preds = %.thread512, %458
  %.2478593 = phi i64 [ %459, %458 ], [ %422, %.thread512 ]
  %.7592 = phi i64 [ %.9, %458 ], [ %.6, %.thread512 ]
  %426 = getelementptr inbounds i64, ptr %19, i64 %.2478593
  %427 = load i64, ptr %426, align 8, !tbaa !25
  %428 = getelementptr inbounds i64, ptr %23, i64 %427
  %429 = load i64, ptr %428, align 8, !tbaa !25
  %430 = icmp eq i64 %380, %429
  %431 = getelementptr inbounds i64, ptr %21, i64 %.2478593
  %432 = load i64, ptr %431, align 8, !tbaa !25
  %433 = sub nsw i64 0, %432
  %434 = select i1 %430, i64 %432, i64 %433
  %435 = getelementptr inbounds i64, ptr %25, i64 %427
  %436 = load i64, ptr %435, align 8, !tbaa !25
  %437 = add nsw i64 %436, %434
  store i64 %437, ptr %435, align 8, !tbaa !25
  %438 = getelementptr inbounds i64, ptr %27, i64 %427
  %439 = load i64, ptr %438, align 8, !tbaa !25
  %440 = sub nsw i64 %439, %434
  store i64 %440, ptr %438, align 8, !tbaa !25
  %441 = getelementptr inbounds i64, ptr %32, i64 %427
  %442 = load i64, ptr %441, align 8, !tbaa !25
  %.not508 = icmp ne i64 %442, -1
  %443 = icmp eq i64 %439, %434
  %or.cond510 = select i1 %.not508, i1 %443, i1 false
  br i1 %or.cond510, label %.thread513, label %450

.thread513:                                       ; preds = %.lr.ph594
  %444 = add nsw i64 %.7592, -1
  %445 = getelementptr inbounds i64, ptr %34, i64 %444
  %446 = load i64, ptr %445, align 8, !tbaa !25
  %447 = getelementptr inbounds i64, ptr %34, i64 %442
  store i64 %446, ptr %447, align 8, !tbaa !25
  %448 = load i64, ptr %441, align 8, !tbaa !25
  %449 = getelementptr inbounds i64, ptr %32, i64 %446
  store i64 %448, ptr %449, align 8, !tbaa !25
  store i64 -1, ptr %441, align 8, !tbaa !25
  %.pre = load i64, ptr %438, align 8, !tbaa !25
  br label %452

450:                                              ; preds = %.lr.ph594
  %451 = icmp eq i64 %442, -1
  br i1 %451, label %452, label %458

452:                                              ; preds = %.thread513, %450
  %453 = phi i64 [ %.pre, %.thread513 ], [ %440, %450 ]
  %.8515 = phi i64 [ %444, %.thread513 ], [ %.7592, %450 ]
  %454 = icmp sgt i64 %453, 0
  br i1 %454, label %455, label %458

455:                                              ; preds = %452
  %456 = getelementptr inbounds i64, ptr %34, i64 %.8515
  store i64 %427, ptr %456, align 8, !tbaa !25
  %457 = add nsw i64 %.8515, 1
  store i64 %.8515, ptr %441, align 8, !tbaa !25
  br label %458

458:                                              ; preds = %450, %452, %455
  %.9 = phi i64 [ %457, %455 ], [ %.8515, %452 ], [ %.7592, %450 ]
  %459 = add nsw i64 %.2478593, 1
  %460 = load i64, ptr %423, align 8, !tbaa !25
  %461 = icmp slt i64 %459, %460
  br i1 %461, label %.lr.ph594, label %.loopexit, !llvm.loop !49

._crit_edge601:                                   ; preds = %.loopexit, %.loopexit517
  %.5487.lcssa = phi i64 [ %.0482529, %.loopexit517 ], [ %.7.lcssa, %.loopexit ]
  %462 = load i64, ptr %138, align 8, !tbaa !36
  %463 = and i64 %462, 8
  %.not506 = icmp eq i64 %463, 0
  br i1 %.not506, label %479, label %464

464:                                              ; preds = %._crit_edge601
  %465 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %.0469527, i64 noundef %.0525, i64 noundef %.5487.lcssa) #5
  br i1 %45, label %.lr.ph605, label %._crit_edge606

.lr.ph605:                                        ; preds = %464
  %466 = getelementptr float, ptr %29, i64 %13
  br label %467

467:                                              ; preds = %.lr.ph605, %467
  %.2481603 = phi i64 [ 0, %.lr.ph605 ], [ %475, %467 ]
  %468 = getelementptr inbounds float, ptr %29, i64 %.2481603
  %469 = load float, ptr %468, align 4, !tbaa !27
  %470 = fpext float %469 to double
  %471 = getelementptr float, ptr %466, i64 %.2481603
  %472 = load float, ptr %471, align 4, !tbaa !27
  %473 = fpext float %472 to double
  %474 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %470, double noundef %473) #5
  %475 = add nuw nsw i64 %.2481603, 1
  %exitcond627.not = icmp eq i64 %475, %13
  br i1 %exitcond627.not, label %._crit_edge606, label %467, !llvm.loop !50

._crit_edge606:                                   ; preds = %467, %464
  %476 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %13, ptr noundef %29, ptr noundef %2) #5
  %477 = fpext float %476 to double
  %478 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6, double noundef %477) #5
  br label %479

479:                                              ; preds = %._crit_edge606, %._crit_edge601
  store i64 %.0469527, ptr %136, align 8, !tbaa !35
  store i64 %.5487.lcssa, ptr %166, align 8, !tbaa !41
  br i1 %45, label %.lr.ph609, label %._crit_edge610

.lr.ph609:                                        ; preds = %479, %.lr.ph609
  %.5607 = phi i64 [ %482, %.lr.ph609 ], [ 0, %479 ]
  %480 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %.5607
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %480) #5
  %481 = getelementptr inbounds i8, ptr %480, i64 88
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %481) #5
  %482 = add nuw nsw i64 %.5607, 1
  %exitcond628.not = icmp eq i64 %482, %13
  br i1 %exitcond628.not, label %._crit_edge610, label %.lr.ph609, !llvm.loop !51

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

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

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

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

declare i64 @gk_fargmax(i64 noundef, ptr noundef) local_unnamed_addr #0

declare i64 @libmetis__famax2(i64 noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

declare 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 #0

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

declare i64 @libmetis__BetterBalance(i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

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

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

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

attributes #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 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !7, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !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 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24, !32, !33}
!32 = !{!"llvm.loop.isvectorized", i32 1}
!33 = !{!"llvm.loop.unroll.runtime.disable"}
!34 = distinct !{!34, !24, !32}
!35 = !{!6, !7, i64 112}
!36 = !{!37, !7, i64 8}
!37 = !{!"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, !38, i64 88, !39, i64 152, !39, i64 160, !39, i64 168, !39, i64 176, !39, i64 184, !39, i64 192, !39, i64 200, !39, i64 208, !39, i64 216, !39, i64 224, !39, i64 232, !39, i64 240, !39, i64 248, !39, i64 256, !39, i64 264, !39, i64 272}
!38 = !{!"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}
!39 = !{!"double", !8, i64 0}
!40 = distinct !{!40, !24}
!41 = !{!6, !7, i64 144}
!42 = distinct !{!42, !24}
!43 = distinct !{!43, !24, !32, !33}
!44 = distinct !{!44, !24, !32}
!45 = distinct !{!45, !24}
!46 = distinct !{!46, !24}
!47 = distinct !{!47, !24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}


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