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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%struct.graphdef = type { i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr }
%struct.controldef = type { i64, i64, i64, i64, i64, i64, float, i64, i64, i64, i64, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i64, i64, ptr, ptr, i64, ptr, ptr }

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

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

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

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

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

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

108:                                              ; preds = %4
  br label %109

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

112:                                              ; preds = %109
  br label %125

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

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

122:                                              ; preds = %113
  br label %123

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

125:                                              ; preds = %123, %112
  %126 = phi double [ 1.000000e+02, %112 ], [ %124, %123 ]
  %127 = fptosi double %126 to i64
  store i64 %127, ptr %23, align 8, !tbaa !13
  %128 = load ptr, ptr %5, align 8, !tbaa !5
  %129 = load i64, ptr %16, align 8, !tbaa !13
  %130 = mul nsw i64 2, %129
  %131 = call ptr @libmetis__fwspacemalloc(ptr noundef %128, i64 noundef %130)
  store ptr %131, ptr %50, align 8, !tbaa !5
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = load i64, ptr %16, align 8, !tbaa !13
  %134 = mul nsw i64 2, %133
  %135 = call ptr @libmetis__fwspacemalloc(ptr noundef %132, i64 noundef %134)
  store ptr %135, ptr %49, align 8, !tbaa !5
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %136

136:                                              ; preds = %185, %125
  %137 = load i64, ptr %9, align 8, !tbaa !13
  %138 = icmp slt i64 %137, 2
  br i1 %138, label %139, label %188

139:                                              ; preds = %136
  store i64 0, ptr %11, align 8, !tbaa !13
  br label %140

140:                                              ; preds = %181, %139
  %141 = load i64, ptr %11, align 8, !tbaa !13
  %142 = load i64, ptr %16, align 8, !tbaa !13
  %143 = icmp slt i64 %141, %142
  br i1 %143, label %144, label %184

144:                                              ; preds = %140
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = load i64, ptr %9, align 8, !tbaa !13
  %147 = getelementptr inbounds float, ptr %145, i64 %146
  %148 = load float, ptr %147, align 4, !tbaa !25
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = load i64, ptr %11, align 8, !tbaa !13
  %151 = getelementptr inbounds float, ptr %149, i64 %150
  %152 = load float, ptr %151, align 4, !tbaa !25
  %153 = fmul float %148, %152
  %154 = load ptr, ptr %49, align 8, !tbaa !5
  %155 = load i64, ptr %9, align 8, !tbaa !13
  %156 = load i64, ptr %16, align 8, !tbaa !13
  %157 = mul nsw i64 %155, %156
  %158 = load i64, ptr %11, align 8, !tbaa !13
  %159 = add nsw i64 %157, %158
  %160 = getelementptr inbounds float, ptr %154, i64 %159
  store float %153, ptr %160, align 4, !tbaa !25
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = load i64, ptr %9, align 8, !tbaa !13
  %163 = getelementptr inbounds float, ptr %161, i64 %162
  %164 = load float, ptr %163, align 4, !tbaa !25
  %165 = fpext float %164 to double
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = load i64, ptr %11, align 8, !tbaa !13
  %168 = getelementptr inbounds float, ptr %166, i64 %167
  %169 = load float, ptr %168, align 4, !tbaa !25
  %170 = fpext float %169 to double
  %171 = fdiv double 1.000000e+00, %170
  %172 = fmul double %165, %171
  %173 = fptrunc double %172 to float
  %174 = load ptr, ptr %50, align 8, !tbaa !5
  %175 = load i64, ptr %9, align 8, !tbaa !13
  %176 = load i64, ptr %16, align 8, !tbaa !13
  %177 = mul nsw i64 %175, %176
  %178 = load i64, ptr %11, align 8, !tbaa !13
  %179 = add nsw i64 %177, %178
  %180 = getelementptr inbounds float, ptr %174, i64 %179
  store float %173, ptr %180, align 4, !tbaa !25
  br label %181

181:                                              ; preds = %144
  %182 = load i64, ptr %11, align 8, !tbaa !13
  %183 = add nsw i64 %182, 1
  store i64 %183, ptr %11, align 8, !tbaa !13
  br label %140, !llvm.loop !27

184:                                              ; preds = %140
  br label %185

185:                                              ; preds = %184
  %186 = load i64, ptr %9, align 8, !tbaa !13
  %187 = add nsw i64 %186, 1
  store i64 %187, ptr %9, align 8, !tbaa !13
  br label %136, !llvm.loop !29

188:                                              ; preds = %136
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %189

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

193:                                              ; preds = %189
  %194 = load ptr, ptr %5, align 8, !tbaa !5
  %195 = load i64, ptr %9, align 8, !tbaa !13
  %196 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %195
  %197 = getelementptr inbounds [2 x %struct.PQueueType], ptr %196, i64 0, i64 0
  %198 = load i64, ptr %15, align 8, !tbaa !13
  call void @libmetis__PQueueInit(ptr noundef %194, ptr noundef %197, i64 noundef %198, i64 noundef 501)
  %199 = load ptr, ptr %5, align 8, !tbaa !5
  %200 = load i64, ptr %9, align 8, !tbaa !13
  %201 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %200
  %202 = getelementptr inbounds [2 x %struct.PQueueType], ptr %201, i64 0, i64 1
  %203 = load i64, ptr %15, align 8, !tbaa !13
  call void @libmetis__PQueueInit(ptr noundef %199, ptr noundef %202, i64 noundef %203, i64 noundef 501)
  br label %204

204:                                              ; preds = %193
  %205 = load i64, ptr %9, align 8, !tbaa !13
  %206 = add nsw i64 %205, 1
  store i64 %206, ptr %9, align 8, !tbaa !13
  br label %189, !llvm.loop !30

207:                                              ; preds = %189
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %208

208:                                              ; preds = %223, %207
  %209 = load i64, ptr %9, align 8, !tbaa !13
  %210 = load i64, ptr %15, align 8, !tbaa !13
  %211 = icmp slt i64 %209, %210
  br i1 %211, label %212, label %226

212:                                              ; preds = %208
  %213 = load i64, ptr %16, align 8, !tbaa !13
  %214 = load ptr, ptr %38, align 8, !tbaa !5
  %215 = load i64, ptr %9, align 8, !tbaa !13
  %216 = load i64, ptr %16, align 8, !tbaa !13
  %217 = mul nsw i64 %215, %216
  %218 = getelementptr inbounds float, ptr %214, i64 %217
  %219 = call i64 @gk_fargmax(i64 noundef %213, ptr noundef %218)
  %220 = load ptr, ptr %37, align 8, !tbaa !5
  %221 = load i64, ptr %9, align 8, !tbaa !13
  %222 = getelementptr inbounds i64, ptr %220, i64 %221
  store i64 %219, ptr %222, align 8, !tbaa !13
  br label %223

223:                                              ; preds = %212
  %224 = load i64, ptr %9, align 8, !tbaa !13
  %225 = add nsw i64 %224, 1
  store i64 %225, ptr %9, align 8, !tbaa !13
  br label %208, !llvm.loop !31

226:                                              ; preds = %208
  %227 = load i64, ptr %16, align 8, !tbaa !13
  %228 = load ptr, ptr %39, align 8, !tbaa !5
  %229 = load ptr, ptr %7, align 8, !tbaa !5
  %230 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %227, ptr noundef %228, ptr noundef %229, ptr noundef %230)
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %231

231:                                              ; preds = %241, %226
  %232 = load i64, ptr %9, align 8, !tbaa !13
  %233 = load i64, ptr %16, align 8, !tbaa !13
  %234 = icmp slt i64 %232, %233
  br i1 %234, label %235, label %244

235:                                              ; preds = %231
  %236 = load i64, ptr %9, align 8, !tbaa !13
  %237 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %236
  %238 = load float, ptr %237, align 4, !tbaa !25
  %239 = load i64, ptr %9, align 8, !tbaa !13
  %240 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 %239
  store float %238, ptr %240, align 4, !tbaa !25
  br label %241

241:                                              ; preds = %235
  %242 = load i64, ptr %9, align 8, !tbaa !13
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %9, align 8, !tbaa !13
  br label %231, !llvm.loop !32

244:                                              ; preds = %231
  %245 = load ptr, ptr %6, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.graphdef, ptr %245, i32 0, i32 16
  %247 = load i64, ptr %246, align 8, !tbaa !33
  store i64 %247, ptr %46, align 8, !tbaa !13
  store i64 %247, ptr %47, align 8, !tbaa !13
  store i64 -1, ptr %48, align 8, !tbaa !13
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.controldef, ptr %248, i32 0, i32 1
  %250 = load i64, ptr %249, align 8, !tbaa !34
  %251 = and i64 %250, 8
  %252 = icmp ne i64 %251, 0
  br i1 %252, label %253, label %310

253:                                              ; preds = %244
  %254 = call i32 (ptr, ...) @mprintf(ptr noundef @.str)
  store i64 0, ptr %13, align 8, !tbaa !13
  br label %255

255:                                              ; preds = %273, %253
  %256 = load i64, ptr %13, align 8, !tbaa !13
  %257 = load i64, ptr %16, align 8, !tbaa !13
  %258 = icmp slt i64 %256, %257
  br i1 %258, label %259, label %276

259:                                              ; preds = %255
  %260 = load ptr, ptr %39, align 8, !tbaa !5
  %261 = load i64, ptr %13, align 8, !tbaa !13
  %262 = getelementptr inbounds float, ptr %260, i64 %261
  %263 = load float, ptr %262, align 4, !tbaa !25
  %264 = fpext float %263 to double
  %265 = load ptr, ptr %39, align 8, !tbaa !5
  %266 = load i64, ptr %16, align 8, !tbaa !13
  %267 = load i64, ptr %13, align 8, !tbaa !13
  %268 = add nsw i64 %266, %267
  %269 = getelementptr inbounds float, ptr %265, i64 %268
  %270 = load float, ptr %269, align 4, !tbaa !25
  %271 = fpext float %270 to double
  %272 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %264, double noundef %271)
  br label %273

273:                                              ; preds = %259
  %274 = load i64, ptr %13, align 8, !tbaa !13
  %275 = add nsw i64 %274, 1
  store i64 %275, ptr %13, align 8, !tbaa !13
  br label %255, !llvm.loop !38

276:                                              ; preds = %255
  %277 = load ptr, ptr %7, align 8, !tbaa !5
  %278 = getelementptr inbounds float, ptr %277, i64 0
  %279 = load float, ptr %278, align 4, !tbaa !25
  %280 = fpext float %279 to double
  %281 = load ptr, ptr %7, align 8, !tbaa !5
  %282 = getelementptr inbounds float, ptr %281, i64 1
  %283 = load float, ptr %282, align 4, !tbaa !25
  %284 = fpext float %283 to double
  %285 = load ptr, ptr %6, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.graphdef, ptr %285, i32 0, i32 0
  %287 = load i64, ptr %286, align 8, !tbaa !9
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.graphdef, ptr %288, i32 0, i32 20
  %290 = load i64, ptr %289, align 8, !tbaa !39
  %291 = load ptr, ptr %6, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.graphdef, ptr %291, i32 0, i32 16
  %293 = load i64, ptr %292, align 8, !tbaa !33
  %294 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, double noundef %280, double noundef %284, i64 noundef %287, i64 noundef %290, i64 noundef %293)
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %295

295:                                              ; preds = %305, %276
  %296 = load i64, ptr %9, align 8, !tbaa !13
  %297 = load i64, ptr %16, align 8, !tbaa !13
  %298 = icmp slt i64 %296, %297
  br i1 %298, label %299, label %308

299:                                              ; preds = %295
  %300 = load i64, ptr %9, align 8, !tbaa !13
  %301 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %300
  %302 = load float, ptr %301, align 4, !tbaa !25
  %303 = fpext float %302 to double
  %304 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, double noundef %303)
  br label %305

305:                                              ; preds = %299
  %306 = load i64, ptr %9, align 8, !tbaa !13
  %307 = add nsw i64 %306, 1
  store i64 %307, ptr %9, align 8, !tbaa !13
  br label %295, !llvm.loop !40

308:                                              ; preds = %295
  %309 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4)
  br label %310

310:                                              ; preds = %308, %244
  %311 = load i64, ptr %15, align 8, !tbaa !13
  %312 = load ptr, ptr %34, align 8, !tbaa !5
  %313 = call ptr @libmetis__idxset(i64 noundef %311, i64 noundef -1, ptr noundef %312)
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.graphdef, ptr %314, i32 0, i32 20
  %316 = load i64, ptr %315, align 8, !tbaa !39
  store i64 %316, ptr %17, align 8, !tbaa !13
  %317 = load i64, ptr %15, align 8, !tbaa !13
  %318 = load ptr, ptr %36, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %317, ptr noundef %318, i64 noundef 1)
  store i64 0, ptr %10, align 8, !tbaa !13
  br label %319

319:                                              ; preds = %349, %310
  %320 = load i64, ptr %10, align 8, !tbaa !13
  %321 = load i64, ptr %15, align 8, !tbaa !13
  %322 = icmp slt i64 %320, %321
  br i1 %322, label %323, label %352

323:                                              ; preds = %319
  %324 = load ptr, ptr %36, align 8, !tbaa !5
  %325 = load i64, ptr %10, align 8, !tbaa !13
  %326 = getelementptr inbounds i64, ptr %324, i64 %325
  %327 = load i64, ptr %326, align 8, !tbaa !13
  store i64 %327, ptr %9, align 8, !tbaa !13
  %328 = load ptr, ptr %37, align 8, !tbaa !5
  %329 = load i64, ptr %9, align 8, !tbaa !13
  %330 = getelementptr inbounds i64, ptr %328, i64 %329
  %331 = load i64, ptr %330, align 8, !tbaa !13
  %332 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %331
  %333 = load ptr, ptr %29, align 8, !tbaa !5
  %334 = load i64, ptr %9, align 8, !tbaa !13
  %335 = getelementptr inbounds i64, ptr %333, i64 %334
  %336 = load i64, ptr %335, align 8, !tbaa !13
  %337 = getelementptr inbounds [2 x %struct.PQueueType], ptr %332, i64 0, i64 %336
  %338 = load i64, ptr %9, align 8, !tbaa !13
  %339 = load ptr, ptr %31, align 8, !tbaa !5
  %340 = load i64, ptr %9, align 8, !tbaa !13
  %341 = getelementptr inbounds i64, ptr %339, i64 %340
  %342 = load i64, ptr %341, align 8, !tbaa !13
  %343 = load ptr, ptr %30, align 8, !tbaa !5
  %344 = load i64, ptr %9, align 8, !tbaa !13
  %345 = getelementptr inbounds i64, ptr %343, i64 %344
  %346 = load i64, ptr %345, align 8, !tbaa !13
  %347 = sub nsw i64 %342, %346
  %348 = call i64 @libmetis__PQueueInsert(ptr noundef %337, i64 noundef %338, i64 noundef %347)
  br label %349

349:                                              ; preds = %323
  %350 = load i64, ptr %10, align 8, !tbaa !13
  %351 = add nsw i64 %350, 1
  store i64 %351, ptr %10, align 8, !tbaa !13
  br label %319, !llvm.loop !41

352:                                              ; preds = %319
  store i64 0, ptr %18, align 8, !tbaa !13
  br label %353

353:                                              ; preds = %836, %352
  %354 = load i64, ptr %18, align 8, !tbaa !13
  %355 = load i64, ptr %15, align 8, !tbaa !13
  %356 = icmp slt i64 %354, %355
  br i1 %356, label %357, label %839

357:                                              ; preds = %353
  %358 = load i64, ptr %16, align 8, !tbaa !13
  %359 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 0
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = call i64 @libmetis__AreAllBelow(i64 noundef %358, ptr noundef %359, ptr noundef %360)
  %362 = icmp ne i64 %361, 0
  br i1 %362, label %363, label %364

363:                                              ; preds = %357
  br label %839

364:                                              ; preds = %357
  %365 = load i64, ptr %16, align 8, !tbaa !13
  %366 = load ptr, ptr %39, align 8, !tbaa !5
  %367 = load ptr, ptr %7, align 8, !tbaa !5
  %368 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 0
  %369 = load ptr, ptr %49, align 8, !tbaa !5
  call void @libmetis__SelectQueue3(i64 noundef %365, ptr noundef %366, ptr noundef %367, ptr noundef %19, ptr noundef %25, ptr noundef %368, ptr noundef %369)
  %370 = load i64, ptr %19, align 8, !tbaa !13
  %371 = add nsw i64 %370, 1
  %372 = srem i64 %371, 2
  store i64 %372, ptr %20, align 8, !tbaa !13
  %373 = load i64, ptr %19, align 8, !tbaa !13
  %374 = icmp eq i64 %373, -1
  br i1 %374, label %382, label %375

375:                                              ; preds = %364
  %376 = load i64, ptr %25, align 8, !tbaa !13
  %377 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %376
  %378 = load i64, ptr %19, align 8, !tbaa !13
  %379 = getelementptr inbounds [2 x %struct.PQueueType], ptr %377, i64 0, i64 %378
  %380 = call i64 @libmetis__PQueueGetMax(ptr noundef %379)
  store i64 %380, ptr %44, align 8, !tbaa !13
  %381 = icmp eq i64 %380, -1
  br i1 %381, label %382, label %383

382:                                              ; preds = %375, %364
  br label %839

383:                                              ; preds = %375
  %384 = load i64, ptr %16, align 8, !tbaa !13
  %385 = load ptr, ptr %38, align 8, !tbaa !5
  %386 = load i64, ptr %44, align 8, !tbaa !13
  %387 = load i64, ptr %16, align 8, !tbaa !13
  %388 = mul nsw i64 %386, %387
  %389 = getelementptr inbounds float, ptr %385, i64 %388
  %390 = load ptr, ptr %39, align 8, !tbaa !5
  %391 = load i64, ptr %20, align 8, !tbaa !13
  %392 = load i64, ptr %16, align 8, !tbaa !13
  %393 = mul nsw i64 %391, %392
  %394 = getelementptr inbounds float, ptr %390, i64 %393
  %395 = call ptr @gk_faxpy(i64 noundef %384, float noundef 1.000000e+00, ptr noundef %389, i64 noundef 1, ptr noundef %394, i64 noundef 1)
  %396 = load i64, ptr %16, align 8, !tbaa !13
  %397 = load ptr, ptr %38, align 8, !tbaa !5
  %398 = load i64, ptr %44, align 8, !tbaa !13
  %399 = load i64, ptr %16, align 8, !tbaa !13
  %400 = mul nsw i64 %398, %399
  %401 = getelementptr inbounds float, ptr %397, i64 %400
  %402 = load ptr, ptr %39, align 8, !tbaa !5
  %403 = load i64, ptr %19, align 8, !tbaa !13
  %404 = load i64, ptr %16, align 8, !tbaa !13
  %405 = mul nsw i64 %403, %404
  %406 = getelementptr inbounds float, ptr %402, i64 %405
  %407 = call ptr @gk_faxpy(i64 noundef %396, float noundef -1.000000e+00, ptr noundef %401, i64 noundef 1, ptr noundef %406, i64 noundef 1)
  %408 = load ptr, ptr %31, align 8, !tbaa !5
  %409 = load i64, ptr %44, align 8, !tbaa !13
  %410 = getelementptr inbounds i64, ptr %408, i64 %409
  %411 = load i64, ptr %410, align 8, !tbaa !13
  %412 = load ptr, ptr %30, align 8, !tbaa !5
  %413 = load i64, ptr %44, align 8, !tbaa !13
  %414 = getelementptr inbounds i64, ptr %412, i64 %413
  %415 = load i64, ptr %414, align 8, !tbaa !13
  %416 = sub nsw i64 %411, %415
  %417 = load i64, ptr %47, align 8, !tbaa !13
  %418 = sub nsw i64 %417, %416
  store i64 %418, ptr %47, align 8, !tbaa !13
  %419 = load i64, ptr %16, align 8, !tbaa !13
  %420 = load ptr, ptr %39, align 8, !tbaa !5
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %419, ptr noundef %420, ptr noundef %421, ptr noundef %422)
  %423 = load i64, ptr %16, align 8, !tbaa !13
  %424 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 0
  %425 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 0
  %426 = load ptr, ptr %8, align 8, !tbaa !5
  %427 = call i64 @libmetis__IsBetter2wayBalance(i64 noundef %423, ptr noundef %424, ptr noundef %425, ptr noundef %426)
  %428 = icmp ne i64 %427, 0
  br i1 %428, label %440, label %429

429:                                              ; preds = %383
  %430 = load i64, ptr %16, align 8, !tbaa !13
  %431 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 0
  %432 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  %433 = load ptr, ptr %8, align 8, !tbaa !5
  %434 = call i64 @libmetis__IsBetter2wayBalance(i64 noundef %430, ptr noundef %431, ptr noundef %432, ptr noundef %433)
  %435 = icmp ne i64 %434, 0
  br i1 %435, label %436, label %457

436:                                              ; preds = %429
  %437 = load i64, ptr %47, align 8, !tbaa !13
  %438 = load i64, ptr %46, align 8, !tbaa !13
  %439 = icmp slt i64 %437, %438
  br i1 %439, label %440, label %457

440:                                              ; preds = %436, %383
  %441 = load i64, ptr %47, align 8, !tbaa !13
  store i64 %441, ptr %46, align 8, !tbaa !13
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %442

442:                                              ; preds = %452, %440
  %443 = load i64, ptr %9, align 8, !tbaa !13
  %444 = load i64, ptr %16, align 8, !tbaa !13
  %445 = icmp slt i64 %443, %444
  br i1 %445, label %446, label %455

446:                                              ; preds = %442
  %447 = load i64, ptr %9, align 8, !tbaa !13
  %448 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 %447
  %449 = load float, ptr %448, align 4, !tbaa !25
  %450 = load i64, ptr %9, align 8, !tbaa !13
  %451 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 %450
  store float %449, ptr %451, align 4, !tbaa !25
  br label %452

452:                                              ; preds = %446
  %453 = load i64, ptr %9, align 8, !tbaa !13
  %454 = add nsw i64 %453, 1
  store i64 %454, ptr %9, align 8, !tbaa !13
  br label %442, !llvm.loop !42

455:                                              ; preds = %442
  %456 = load i64, ptr %18, align 8, !tbaa !13
  store i64 %456, ptr %48, align 8, !tbaa !13
  br label %500

457:                                              ; preds = %436, %429
  %458 = load i64, ptr %18, align 8, !tbaa !13
  %459 = load i64, ptr %48, align 8, !tbaa !13
  %460 = sub nsw i64 %458, %459
  %461 = load i64, ptr %23, align 8, !tbaa !13
  %462 = icmp sgt i64 %460, %461
  br i1 %462, label %463, label %499

463:                                              ; preds = %457
  %464 = load ptr, ptr %31, align 8, !tbaa !5
  %465 = load i64, ptr %44, align 8, !tbaa !13
  %466 = getelementptr inbounds i64, ptr %464, i64 %465
  %467 = load i64, ptr %466, align 8, !tbaa !13
  %468 = load ptr, ptr %30, align 8, !tbaa !5
  %469 = load i64, ptr %44, align 8, !tbaa !13
  %470 = getelementptr inbounds i64, ptr %468, i64 %469
  %471 = load i64, ptr %470, align 8, !tbaa !13
  %472 = sub nsw i64 %467, %471
  %473 = load i64, ptr %47, align 8, !tbaa !13
  %474 = add nsw i64 %473, %472
  store i64 %474, ptr %47, align 8, !tbaa !13
  %475 = load i64, ptr %16, align 8, !tbaa !13
  %476 = load ptr, ptr %38, align 8, !tbaa !5
  %477 = load i64, ptr %44, align 8, !tbaa !13
  %478 = load i64, ptr %16, align 8, !tbaa !13
  %479 = mul nsw i64 %477, %478
  %480 = getelementptr inbounds float, ptr %476, i64 %479
  %481 = load ptr, ptr %39, align 8, !tbaa !5
  %482 = load i64, ptr %19, align 8, !tbaa !13
  %483 = load i64, ptr %16, align 8, !tbaa !13
  %484 = mul nsw i64 %482, %483
  %485 = getelementptr inbounds float, ptr %481, i64 %484
  %486 = call ptr @gk_faxpy(i64 noundef %475, float noundef 1.000000e+00, ptr noundef %480, i64 noundef 1, ptr noundef %485, i64 noundef 1)
  %487 = load i64, ptr %16, align 8, !tbaa !13
  %488 = load ptr, ptr %38, align 8, !tbaa !5
  %489 = load i64, ptr %44, align 8, !tbaa !13
  %490 = load i64, ptr %16, align 8, !tbaa !13
  %491 = mul nsw i64 %489, %490
  %492 = getelementptr inbounds float, ptr %488, i64 %491
  %493 = load ptr, ptr %39, align 8, !tbaa !5
  %494 = load i64, ptr %20, align 8, !tbaa !13
  %495 = load i64, ptr %16, align 8, !tbaa !13
  %496 = mul nsw i64 %494, %495
  %497 = getelementptr inbounds float, ptr %493, i64 %496
  %498 = call ptr @gk_faxpy(i64 noundef %487, float noundef -1.000000e+00, ptr noundef %492, i64 noundef 1, ptr noundef %497, i64 noundef 1)
  br label %839

499:                                              ; preds = %457
  br label %500

500:                                              ; preds = %499, %455
  %501 = load i64, ptr %20, align 8, !tbaa !13
  %502 = load ptr, ptr %29, align 8, !tbaa !5
  %503 = load i64, ptr %44, align 8, !tbaa !13
  %504 = getelementptr inbounds i64, ptr %502, i64 %503
  store i64 %501, ptr %504, align 8, !tbaa !13
  %505 = load i64, ptr %18, align 8, !tbaa !13
  %506 = load ptr, ptr %34, align 8, !tbaa !5
  %507 = load i64, ptr %44, align 8, !tbaa !13
  %508 = getelementptr inbounds i64, ptr %506, i64 %507
  store i64 %505, ptr %508, align 8, !tbaa !13
  %509 = load i64, ptr %44, align 8, !tbaa !13
  %510 = load ptr, ptr %35, align 8, !tbaa !5
  %511 = load i64, ptr %18, align 8, !tbaa !13
  %512 = getelementptr inbounds i64, ptr %510, i64 %511
  store i64 %509, ptr %512, align 8, !tbaa !13
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.controldef, ptr %513, i32 0, i32 1
  %515 = load i64, ptr %514, align 8, !tbaa !34
  %516 = and i64 %515, 32
  %517 = icmp ne i64 %516, 0
  br i1 %517, label %518, label %582

518:                                              ; preds = %500
  %519 = load i64, ptr %44, align 8, !tbaa !13
  %520 = load i64, ptr %19, align 8, !tbaa !13
  %521 = load i64, ptr %25, align 8, !tbaa !13
  %522 = load ptr, ptr %31, align 8, !tbaa !5
  %523 = load i64, ptr %44, align 8, !tbaa !13
  %524 = getelementptr inbounds i64, ptr %522, i64 %523
  %525 = load i64, ptr %524, align 8, !tbaa !13
  %526 = load ptr, ptr %30, align 8, !tbaa !5
  %527 = load i64, ptr %44, align 8, !tbaa !13
  %528 = getelementptr inbounds i64, ptr %526, i64 %527
  %529 = load i64, ptr %528, align 8, !tbaa !13
  %530 = sub nsw i64 %525, %529
  %531 = load i64, ptr %47, align 8, !tbaa !13
  %532 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %519, i64 noundef %520, i64 noundef %521, i64 noundef %530, i64 noundef %531)
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %533

533:                                              ; preds = %551, %518
  %534 = load i64, ptr %9, align 8, !tbaa !13
  %535 = load i64, ptr %16, align 8, !tbaa !13
  %536 = icmp slt i64 %534, %535
  br i1 %536, label %537, label %554

537:                                              ; preds = %533
  %538 = load ptr, ptr %39, align 8, !tbaa !5
  %539 = load i64, ptr %9, align 8, !tbaa !13
  %540 = getelementptr inbounds float, ptr %538, i64 %539
  %541 = load float, ptr %540, align 4, !tbaa !25
  %542 = fpext float %541 to double
  %543 = load ptr, ptr %39, align 8, !tbaa !5
  %544 = load i64, ptr %16, align 8, !tbaa !13
  %545 = load i64, ptr %9, align 8, !tbaa !13
  %546 = add nsw i64 %544, %545
  %547 = getelementptr inbounds float, ptr %543, i64 %546
  %548 = load float, ptr %547, align 4, !tbaa !25
  %549 = fpext float %548 to double
  %550 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %542, double noundef %549)
  br label %551

551:                                              ; preds = %537
  %552 = load i64, ptr %9, align 8, !tbaa !13
  %553 = add nsw i64 %552, 1
  store i64 %553, ptr %9, align 8, !tbaa !13
  br label %533, !llvm.loop !43

554:                                              ; preds = %533
  %555 = load i64, ptr %16, align 8, !tbaa !13
  %556 = load ptr, ptr %39, align 8, !tbaa !5
  %557 = load ptr, ptr %7, align 8, !tbaa !5
  %558 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %555, ptr noundef %556, ptr noundef %557, ptr noundef %558)
  %559 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6)
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %560

560:                                              ; preds = %570, %554
  %561 = load i64, ptr %9, align 8, !tbaa !13
  %562 = load i64, ptr %16, align 8, !tbaa !13
  %563 = icmp slt i64 %561, %562
  br i1 %563, label %564, label %573

564:                                              ; preds = %560
  %565 = load i64, ptr %9, align 8, !tbaa !13
  %566 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 %565
  %567 = load float, ptr %566, align 4, !tbaa !25
  %568 = fpext float %567 to double
  %569 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, double noundef %568)
  br label %570

570:                                              ; preds = %564
  %571 = load i64, ptr %9, align 8, !tbaa !13
  %572 = add nsw i64 %571, 1
  store i64 %572, ptr %9, align 8, !tbaa !13
  br label %560, !llvm.loop !44

573:                                              ; preds = %560
  %574 = load i64, ptr %48, align 8, !tbaa !13
  %575 = load i64, ptr %18, align 8, !tbaa !13
  %576 = icmp eq i64 %574, %575
  br i1 %576, label %577, label %579

577:                                              ; preds = %573
  %578 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.7)
  br label %581

579:                                              ; preds = %573
  %580 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.8)
  br label %581

581:                                              ; preds = %579, %577
  br label %582

582:                                              ; preds = %581, %500
  br label %583

583:                                              ; preds = %582
  %584 = load ptr, ptr %30, align 8, !tbaa !5
  %585 = load i64, ptr %44, align 8, !tbaa !13
  %586 = getelementptr inbounds i64, ptr %584, i64 %585
  %587 = load i64, ptr %586, align 8, !tbaa !13
  store i64 %587, ptr %24, align 8, !tbaa !13
  %588 = load ptr, ptr %31, align 8, !tbaa !5
  %589 = load i64, ptr %44, align 8, !tbaa !13
  %590 = getelementptr inbounds i64, ptr %588, i64 %589
  %591 = load i64, ptr %590, align 8, !tbaa !13
  %592 = load ptr, ptr %30, align 8, !tbaa !5
  %593 = load i64, ptr %44, align 8, !tbaa !13
  %594 = getelementptr inbounds i64, ptr %592, i64 %593
  store i64 %591, ptr %594, align 8, !tbaa !13
  %595 = load i64, ptr %24, align 8, !tbaa !13
  %596 = load ptr, ptr %31, align 8, !tbaa !5
  %597 = load i64, ptr %44, align 8, !tbaa !13
  %598 = getelementptr inbounds i64, ptr %596, i64 %597
  store i64 %595, ptr %598, align 8, !tbaa !13
  br label %599

599:                                              ; preds = %583
  br label %600

600:                                              ; preds = %599
  %601 = load ptr, ptr %31, align 8, !tbaa !5
  %602 = load i64, ptr %44, align 8, !tbaa !13
  %603 = getelementptr inbounds i64, ptr %601, i64 %602
  %604 = load i64, ptr %603, align 8, !tbaa !13
  %605 = icmp eq i64 %604, 0
  br i1 %605, label %606, label %651

606:                                              ; preds = %600
  %607 = load ptr, ptr %32, align 8, !tbaa !5
  %608 = load i64, ptr %44, align 8, !tbaa !13
  %609 = getelementptr inbounds i64, ptr %607, i64 %608
  %610 = load i64, ptr %609, align 8, !tbaa !13
  %611 = icmp ne i64 %610, -1
  br i1 %611, label %612, label %651

612:                                              ; preds = %606
  %613 = load ptr, ptr %26, align 8, !tbaa !5
  %614 = load i64, ptr %44, align 8, !tbaa !13
  %615 = getelementptr inbounds i64, ptr %613, i64 %614
  %616 = load i64, ptr %615, align 8, !tbaa !13
  %617 = load ptr, ptr %26, align 8, !tbaa !5
  %618 = load i64, ptr %44, align 8, !tbaa !13
  %619 = add nsw i64 %618, 1
  %620 = getelementptr inbounds i64, ptr %617, i64 %619
  %621 = load i64, ptr %620, align 8, !tbaa !13
  %622 = icmp slt i64 %616, %621
  br i1 %622, label %623, label %651

623:                                              ; preds = %612
  br label %624

624:                                              ; preds = %623
  %625 = load ptr, ptr %33, align 8, !tbaa !5
  %626 = load i64, ptr %17, align 8, !tbaa !13
  %627 = add nsw i64 %626, -1
  store i64 %627, ptr %17, align 8, !tbaa !13
  %628 = getelementptr inbounds i64, ptr %625, i64 %627
  %629 = load i64, ptr %628, align 8, !tbaa !13
  %630 = load ptr, ptr %33, align 8, !tbaa !5
  %631 = load ptr, ptr %32, align 8, !tbaa !5
  %632 = load i64, ptr %44, align 8, !tbaa !13
  %633 = getelementptr inbounds i64, ptr %631, i64 %632
  %634 = load i64, ptr %633, align 8, !tbaa !13
  %635 = getelementptr inbounds i64, ptr %630, i64 %634
  store i64 %629, ptr %635, align 8, !tbaa !13
  %636 = load ptr, ptr %32, align 8, !tbaa !5
  %637 = load i64, ptr %44, align 8, !tbaa !13
  %638 = getelementptr inbounds i64, ptr %636, i64 %637
  %639 = load i64, ptr %638, align 8, !tbaa !13
  %640 = load ptr, ptr %32, align 8, !tbaa !5
  %641 = load ptr, ptr %33, align 8, !tbaa !5
  %642 = load i64, ptr %17, align 8, !tbaa !13
  %643 = getelementptr inbounds i64, ptr %641, i64 %642
  %644 = load i64, ptr %643, align 8, !tbaa !13
  %645 = getelementptr inbounds i64, ptr %640, i64 %644
  store i64 %639, ptr %645, align 8, !tbaa !13
  %646 = load ptr, ptr %32, align 8, !tbaa !5
  %647 = load i64, ptr %44, align 8, !tbaa !13
  %648 = getelementptr inbounds i64, ptr %646, i64 %647
  store i64 -1, ptr %648, align 8, !tbaa !13
  br label %649

649:                                              ; preds = %624
  br label %650

650:                                              ; preds = %649
  br label %651

651:                                              ; preds = %650, %612, %606, %600
  %652 = load ptr, ptr %31, align 8, !tbaa !5
  %653 = load i64, ptr %44, align 8, !tbaa !13
  %654 = getelementptr inbounds i64, ptr %652, i64 %653
  %655 = load i64, ptr %654, align 8, !tbaa !13
  %656 = icmp sgt i64 %655, 0
  br i1 %656, label %657, label %676

657:                                              ; preds = %651
  %658 = load ptr, ptr %32, align 8, !tbaa !5
  %659 = load i64, ptr %44, align 8, !tbaa !13
  %660 = getelementptr inbounds i64, ptr %658, i64 %659
  %661 = load i64, ptr %660, align 8, !tbaa !13
  %662 = icmp eq i64 %661, -1
  br i1 %662, label %663, label %676

663:                                              ; preds = %657
  br label %664

664:                                              ; preds = %663
  %665 = load i64, ptr %44, align 8, !tbaa !13
  %666 = load ptr, ptr %33, align 8, !tbaa !5
  %667 = load i64, ptr %17, align 8, !tbaa !13
  %668 = getelementptr inbounds i64, ptr %666, i64 %667
  store i64 %665, ptr %668, align 8, !tbaa !13
  %669 = load i64, ptr %17, align 8, !tbaa !13
  %670 = add nsw i64 %669, 1
  store i64 %670, ptr %17, align 8, !tbaa !13
  %671 = load ptr, ptr %32, align 8, !tbaa !5
  %672 = load i64, ptr %44, align 8, !tbaa !13
  %673 = getelementptr inbounds i64, ptr %671, i64 %672
  store i64 %669, ptr %673, align 8, !tbaa !13
  br label %674

674:                                              ; preds = %664
  br label %675

675:                                              ; preds = %674
  br label %676

676:                                              ; preds = %675, %657, %651
  %677 = load ptr, ptr %26, align 8, !tbaa !5
  %678 = load i64, ptr %44, align 8, !tbaa !13
  %679 = getelementptr inbounds i64, ptr %677, i64 %678
  %680 = load i64, ptr %679, align 8, !tbaa !13
  store i64 %680, ptr %11, align 8, !tbaa !13
  br label %681

681:                                              ; preds = %832, %676
  %682 = load i64, ptr %11, align 8, !tbaa !13
  %683 = load ptr, ptr %26, align 8, !tbaa !5
  %684 = load i64, ptr %44, align 8, !tbaa !13
  %685 = add nsw i64 %684, 1
  %686 = getelementptr inbounds i64, ptr %683, i64 %685
  %687 = load i64, ptr %686, align 8, !tbaa !13
  %688 = icmp slt i64 %682, %687
  br i1 %688, label %689, label %835

689:                                              ; preds = %681
  %690 = load ptr, ptr %27, align 8, !tbaa !5
  %691 = load i64, ptr %11, align 8, !tbaa !13
  %692 = getelementptr inbounds i64, ptr %690, i64 %691
  %693 = load i64, ptr %692, align 8, !tbaa !13
  store i64 %693, ptr %12, align 8, !tbaa !13
  %694 = load ptr, ptr %31, align 8, !tbaa !5
  %695 = load i64, ptr %12, align 8, !tbaa !13
  %696 = getelementptr inbounds i64, ptr %694, i64 %695
  %697 = load i64, ptr %696, align 8, !tbaa !13
  %698 = load ptr, ptr %30, align 8, !tbaa !5
  %699 = load i64, ptr %12, align 8, !tbaa !13
  %700 = getelementptr inbounds i64, ptr %698, i64 %699
  %701 = load i64, ptr %700, align 8, !tbaa !13
  %702 = sub nsw i64 %697, %701
  store i64 %702, ptr %45, align 8, !tbaa !13
  %703 = load i64, ptr %20, align 8, !tbaa !13
  %704 = load ptr, ptr %29, align 8, !tbaa !5
  %705 = load i64, ptr %12, align 8, !tbaa !13
  %706 = getelementptr inbounds i64, ptr %704, i64 %705
  %707 = load i64, ptr %706, align 8, !tbaa !13
  %708 = icmp eq i64 %703, %707
  br i1 %708, label %709, label %714

709:                                              ; preds = %689
  %710 = load ptr, ptr %28, align 8, !tbaa !5
  %711 = load i64, ptr %11, align 8, !tbaa !13
  %712 = getelementptr inbounds i64, ptr %710, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !13
  br label %720

714:                                              ; preds = %689
  %715 = load ptr, ptr %28, align 8, !tbaa !5
  %716 = load i64, ptr %11, align 8, !tbaa !13
  %717 = getelementptr inbounds i64, ptr %715, i64 %716
  %718 = load i64, ptr %717, align 8, !tbaa !13
  %719 = sub nsw i64 0, %718
  br label %720

720:                                              ; preds = %714, %709
  %721 = phi i64 [ %713, %709 ], [ %719, %714 ]
  store i64 %721, ptr %14, align 8, !tbaa !13
  br label %722

722:                                              ; preds = %720
  %723 = load i64, ptr %14, align 8, !tbaa !13
  %724 = load ptr, ptr %30, align 8, !tbaa !5
  %725 = load i64, ptr %12, align 8, !tbaa !13
  %726 = getelementptr inbounds i64, ptr %724, i64 %725
  %727 = load i64, ptr %726, align 8, !tbaa !13
  %728 = add nsw i64 %727, %723
  store i64 %728, ptr %726, align 8, !tbaa !13
  %729 = load i64, ptr %14, align 8, !tbaa !13
  %730 = load ptr, ptr %31, align 8, !tbaa !5
  %731 = load i64, ptr %12, align 8, !tbaa !13
  %732 = getelementptr inbounds i64, ptr %730, i64 %731
  %733 = load i64, ptr %732, align 8, !tbaa !13
  %734 = sub nsw i64 %733, %729
  store i64 %734, ptr %732, align 8, !tbaa !13
  br label %735

735:                                              ; preds = %722
  br label %736

736:                                              ; preds = %735
  %737 = load ptr, ptr %34, align 8, !tbaa !5
  %738 = load i64, ptr %12, align 8, !tbaa !13
  %739 = getelementptr inbounds i64, ptr %737, i64 %738
  %740 = load i64, ptr %739, align 8, !tbaa !13
  %741 = icmp eq i64 %740, -1
  br i1 %741, label %742, label %765

742:                                              ; preds = %736
  %743 = load ptr, ptr %37, align 8, !tbaa !5
  %744 = load i64, ptr %12, align 8, !tbaa !13
  %745 = getelementptr inbounds i64, ptr %743, i64 %744
  %746 = load i64, ptr %745, align 8, !tbaa !13
  %747 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %746
  %748 = load ptr, ptr %29, align 8, !tbaa !5
  %749 = load i64, ptr %12, align 8, !tbaa !13
  %750 = getelementptr inbounds i64, ptr %748, i64 %749
  %751 = load i64, ptr %750, align 8, !tbaa !13
  %752 = getelementptr inbounds [2 x %struct.PQueueType], ptr %747, i64 0, i64 %751
  %753 = load i64, ptr %12, align 8, !tbaa !13
  %754 = load i64, ptr %45, align 8, !tbaa !13
  %755 = load ptr, ptr %31, align 8, !tbaa !5
  %756 = load i64, ptr %12, align 8, !tbaa !13
  %757 = getelementptr inbounds i64, ptr %755, i64 %756
  %758 = load i64, ptr %757, align 8, !tbaa !13
  %759 = load ptr, ptr %30, align 8, !tbaa !5
  %760 = load i64, ptr %12, align 8, !tbaa !13
  %761 = getelementptr inbounds i64, ptr %759, i64 %760
  %762 = load i64, ptr %761, align 8, !tbaa !13
  %763 = sub nsw i64 %758, %762
  %764 = call i64 @libmetis__PQueueUpdate(ptr noundef %752, i64 noundef %753, i64 noundef %754, i64 noundef %763)
  br label %765

765:                                              ; preds = %742, %736
  %766 = load ptr, ptr %31, align 8, !tbaa !5
  %767 = load i64, ptr %12, align 8, !tbaa !13
  %768 = getelementptr inbounds i64, ptr %766, i64 %767
  %769 = load i64, ptr %768, align 8, !tbaa !13
  %770 = icmp eq i64 %769, 0
  br i1 %770, label %771, label %805

771:                                              ; preds = %765
  %772 = load ptr, ptr %32, align 8, !tbaa !5
  %773 = load i64, ptr %12, align 8, !tbaa !13
  %774 = getelementptr inbounds i64, ptr %772, i64 %773
  %775 = load i64, ptr %774, align 8, !tbaa !13
  %776 = icmp ne i64 %775, -1
  br i1 %776, label %777, label %805

777:                                              ; preds = %771
  br label %778

778:                                              ; preds = %777
  %779 = load ptr, ptr %33, align 8, !tbaa !5
  %780 = load i64, ptr %17, align 8, !tbaa !13
  %781 = add nsw i64 %780, -1
  store i64 %781, ptr %17, align 8, !tbaa !13
  %782 = getelementptr inbounds i64, ptr %779, i64 %781
  %783 = load i64, ptr %782, align 8, !tbaa !13
  %784 = load ptr, ptr %33, align 8, !tbaa !5
  %785 = load ptr, ptr %32, align 8, !tbaa !5
  %786 = load i64, ptr %12, align 8, !tbaa !13
  %787 = getelementptr inbounds i64, ptr %785, i64 %786
  %788 = load i64, ptr %787, align 8, !tbaa !13
  %789 = getelementptr inbounds i64, ptr %784, i64 %788
  store i64 %783, ptr %789, align 8, !tbaa !13
  %790 = load ptr, ptr %32, align 8, !tbaa !5
  %791 = load i64, ptr %12, align 8, !tbaa !13
  %792 = getelementptr inbounds i64, ptr %790, i64 %791
  %793 = load i64, ptr %792, align 8, !tbaa !13
  %794 = load ptr, ptr %32, align 8, !tbaa !5
  %795 = load ptr, ptr %33, align 8, !tbaa !5
  %796 = load i64, ptr %17, align 8, !tbaa !13
  %797 = getelementptr inbounds i64, ptr %795, i64 %796
  %798 = load i64, ptr %797, align 8, !tbaa !13
  %799 = getelementptr inbounds i64, ptr %794, i64 %798
  store i64 %793, ptr %799, align 8, !tbaa !13
  %800 = load ptr, ptr %32, align 8, !tbaa !5
  %801 = load i64, ptr %12, align 8, !tbaa !13
  %802 = getelementptr inbounds i64, ptr %800, i64 %801
  store i64 -1, ptr %802, align 8, !tbaa !13
  br label %803

803:                                              ; preds = %778
  br label %804

804:                                              ; preds = %803
  br label %831

805:                                              ; preds = %771, %765
  %806 = load ptr, ptr %31, align 8, !tbaa !5
  %807 = load i64, ptr %12, align 8, !tbaa !13
  %808 = getelementptr inbounds i64, ptr %806, i64 %807
  %809 = load i64, ptr %808, align 8, !tbaa !13
  %810 = icmp sgt i64 %809, 0
  br i1 %810, label %811, label %830

811:                                              ; preds = %805
  %812 = load ptr, ptr %32, align 8, !tbaa !5
  %813 = load i64, ptr %12, align 8, !tbaa !13
  %814 = getelementptr inbounds i64, ptr %812, i64 %813
  %815 = load i64, ptr %814, align 8, !tbaa !13
  %816 = icmp eq i64 %815, -1
  br i1 %816, label %817, label %830

817:                                              ; preds = %811
  br label %818

818:                                              ; preds = %817
  %819 = load i64, ptr %12, align 8, !tbaa !13
  %820 = load ptr, ptr %33, align 8, !tbaa !5
  %821 = load i64, ptr %17, align 8, !tbaa !13
  %822 = getelementptr inbounds i64, ptr %820, i64 %821
  store i64 %819, ptr %822, align 8, !tbaa !13
  %823 = load i64, ptr %17, align 8, !tbaa !13
  %824 = add nsw i64 %823, 1
  store i64 %824, ptr %17, align 8, !tbaa !13
  %825 = load ptr, ptr %32, align 8, !tbaa !5
  %826 = load i64, ptr %12, align 8, !tbaa !13
  %827 = getelementptr inbounds i64, ptr %825, i64 %826
  store i64 %823, ptr %827, align 8, !tbaa !13
  br label %828

828:                                              ; preds = %818
  br label %829

829:                                              ; preds = %828
  br label %830

830:                                              ; preds = %829, %811, %805
  br label %831

831:                                              ; preds = %830, %804
  br label %832

832:                                              ; preds = %831
  %833 = load i64, ptr %11, align 8, !tbaa !13
  %834 = add nsw i64 %833, 1
  store i64 %834, ptr %11, align 8, !tbaa !13
  br label %681, !llvm.loop !45

835:                                              ; preds = %681
  br label %836

836:                                              ; preds = %835
  %837 = load i64, ptr %18, align 8, !tbaa !13
  %838 = add nsw i64 %837, 1
  store i64 %838, ptr %18, align 8, !tbaa !13
  br label %353, !llvm.loop !46

839:                                              ; preds = %463, %382, %363, %353
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %840

840:                                              ; preds = %851, %839
  %841 = load i64, ptr %9, align 8, !tbaa !13
  %842 = load i64, ptr %18, align 8, !tbaa !13
  %843 = icmp slt i64 %841, %842
  br i1 %843, label %844, label %854

844:                                              ; preds = %840
  %845 = load ptr, ptr %34, align 8, !tbaa !5
  %846 = load ptr, ptr %35, align 8, !tbaa !5
  %847 = load i64, ptr %9, align 8, !tbaa !13
  %848 = getelementptr inbounds i64, ptr %846, i64 %847
  %849 = load i64, ptr %848, align 8, !tbaa !13
  %850 = getelementptr inbounds i64, ptr %845, i64 %849
  store i64 -1, ptr %850, align 8, !tbaa !13
  br label %851

851:                                              ; preds = %844
  %852 = load i64, ptr %9, align 8, !tbaa !13
  %853 = add nsw i64 %852, 1
  store i64 %853, ptr %9, align 8, !tbaa !13
  br label %840, !llvm.loop !47

854:                                              ; preds = %840
  %855 = load i64, ptr %18, align 8, !tbaa !13
  %856 = add nsw i64 %855, -1
  store i64 %856, ptr %18, align 8, !tbaa !13
  br label %857

857:                                              ; preds = %1116, %854
  %858 = load i64, ptr %18, align 8, !tbaa !13
  %859 = load i64, ptr %48, align 8, !tbaa !13
  %860 = icmp sgt i64 %858, %859
  br i1 %860, label %861, label %1119

861:                                              ; preds = %857
  %862 = load ptr, ptr %35, align 8, !tbaa !5
  %863 = load i64, ptr %18, align 8, !tbaa !13
  %864 = getelementptr inbounds i64, ptr %862, i64 %863
  %865 = load i64, ptr %864, align 8, !tbaa !13
  store i64 %865, ptr %44, align 8, !tbaa !13
  %866 = load ptr, ptr %29, align 8, !tbaa !5
  %867 = load i64, ptr %44, align 8, !tbaa !13
  %868 = getelementptr inbounds i64, ptr %866, i64 %867
  %869 = load i64, ptr %868, align 8, !tbaa !13
  %870 = add nsw i64 %869, 1
  %871 = srem i64 %870, 2
  %872 = load ptr, ptr %29, align 8, !tbaa !5
  %873 = load i64, ptr %44, align 8, !tbaa !13
  %874 = getelementptr inbounds i64, ptr %872, i64 %873
  store i64 %871, ptr %874, align 8, !tbaa !13
  store i64 %871, ptr %20, align 8, !tbaa !13
  br label %875

875:                                              ; preds = %861
  %876 = load ptr, ptr %30, align 8, !tbaa !5
  %877 = load i64, ptr %44, align 8, !tbaa !13
  %878 = getelementptr inbounds i64, ptr %876, i64 %877
  %879 = load i64, ptr %878, align 8, !tbaa !13
  store i64 %879, ptr %24, align 8, !tbaa !13
  %880 = load ptr, ptr %31, align 8, !tbaa !5
  %881 = load i64, ptr %44, align 8, !tbaa !13
  %882 = getelementptr inbounds i64, ptr %880, i64 %881
  %883 = load i64, ptr %882, align 8, !tbaa !13
  %884 = load ptr, ptr %30, align 8, !tbaa !5
  %885 = load i64, ptr %44, align 8, !tbaa !13
  %886 = getelementptr inbounds i64, ptr %884, i64 %885
  store i64 %883, ptr %886, align 8, !tbaa !13
  %887 = load i64, ptr %24, align 8, !tbaa !13
  %888 = load ptr, ptr %31, align 8, !tbaa !5
  %889 = load i64, ptr %44, align 8, !tbaa !13
  %890 = getelementptr inbounds i64, ptr %888, i64 %889
  store i64 %887, ptr %890, align 8, !tbaa !13
  br label %891

891:                                              ; preds = %875
  br label %892

892:                                              ; preds = %891
  %893 = load ptr, ptr %31, align 8, !tbaa !5
  %894 = load i64, ptr %44, align 8, !tbaa !13
  %895 = getelementptr inbounds i64, ptr %893, i64 %894
  %896 = load i64, ptr %895, align 8, !tbaa !13
  %897 = icmp eq i64 %896, 0
  br i1 %897, label %898, label %943

898:                                              ; preds = %892
  %899 = load ptr, ptr %32, align 8, !tbaa !5
  %900 = load i64, ptr %44, align 8, !tbaa !13
  %901 = getelementptr inbounds i64, ptr %899, i64 %900
  %902 = load i64, ptr %901, align 8, !tbaa !13
  %903 = icmp ne i64 %902, -1
  br i1 %903, label %904, label %943

904:                                              ; preds = %898
  %905 = load ptr, ptr %26, align 8, !tbaa !5
  %906 = load i64, ptr %44, align 8, !tbaa !13
  %907 = getelementptr inbounds i64, ptr %905, i64 %906
  %908 = load i64, ptr %907, align 8, !tbaa !13
  %909 = load ptr, ptr %26, align 8, !tbaa !5
  %910 = load i64, ptr %44, align 8, !tbaa !13
  %911 = add nsw i64 %910, 1
  %912 = getelementptr inbounds i64, ptr %909, i64 %911
  %913 = load i64, ptr %912, align 8, !tbaa !13
  %914 = icmp slt i64 %908, %913
  br i1 %914, label %915, label %943

915:                                              ; preds = %904
  br label %916

916:                                              ; preds = %915
  %917 = load ptr, ptr %33, align 8, !tbaa !5
  %918 = load i64, ptr %17, align 8, !tbaa !13
  %919 = add nsw i64 %918, -1
  store i64 %919, ptr %17, align 8, !tbaa !13
  %920 = getelementptr inbounds i64, ptr %917, i64 %919
  %921 = load i64, ptr %920, align 8, !tbaa !13
  %922 = load ptr, ptr %33, align 8, !tbaa !5
  %923 = load ptr, ptr %32, align 8, !tbaa !5
  %924 = load i64, ptr %44, align 8, !tbaa !13
  %925 = getelementptr inbounds i64, ptr %923, i64 %924
  %926 = load i64, ptr %925, align 8, !tbaa !13
  %927 = getelementptr inbounds i64, ptr %922, i64 %926
  store i64 %921, ptr %927, align 8, !tbaa !13
  %928 = load ptr, ptr %32, align 8, !tbaa !5
  %929 = load i64, ptr %44, align 8, !tbaa !13
  %930 = getelementptr inbounds i64, ptr %928, i64 %929
  %931 = load i64, ptr %930, align 8, !tbaa !13
  %932 = load ptr, ptr %32, align 8, !tbaa !5
  %933 = load ptr, ptr %33, align 8, !tbaa !5
  %934 = load i64, ptr %17, align 8, !tbaa !13
  %935 = getelementptr inbounds i64, ptr %933, i64 %934
  %936 = load i64, ptr %935, align 8, !tbaa !13
  %937 = getelementptr inbounds i64, ptr %932, i64 %936
  store i64 %931, ptr %937, align 8, !tbaa !13
  %938 = load ptr, ptr %32, align 8, !tbaa !5
  %939 = load i64, ptr %44, align 8, !tbaa !13
  %940 = getelementptr inbounds i64, ptr %938, i64 %939
  store i64 -1, ptr %940, align 8, !tbaa !13
  br label %941

941:                                              ; preds = %916
  br label %942

942:                                              ; preds = %941
  br label %969

943:                                              ; preds = %904, %898, %892
  %944 = load ptr, ptr %31, align 8, !tbaa !5
  %945 = load i64, ptr %44, align 8, !tbaa !13
  %946 = getelementptr inbounds i64, ptr %944, i64 %945
  %947 = load i64, ptr %946, align 8, !tbaa !13
  %948 = icmp sgt i64 %947, 0
  br i1 %948, label %949, label %968

949:                                              ; preds = %943
  %950 = load ptr, ptr %32, align 8, !tbaa !5
  %951 = load i64, ptr %44, align 8, !tbaa !13
  %952 = getelementptr inbounds i64, ptr %950, i64 %951
  %953 = load i64, ptr %952, align 8, !tbaa !13
  %954 = icmp eq i64 %953, -1
  br i1 %954, label %955, label %968

955:                                              ; preds = %949
  br label %956

956:                                              ; preds = %955
  %957 = load i64, ptr %44, align 8, !tbaa !13
  %958 = load ptr, ptr %33, align 8, !tbaa !5
  %959 = load i64, ptr %17, align 8, !tbaa !13
  %960 = getelementptr inbounds i64, ptr %958, i64 %959
  store i64 %957, ptr %960, align 8, !tbaa !13
  %961 = load i64, ptr %17, align 8, !tbaa !13
  %962 = add nsw i64 %961, 1
  store i64 %962, ptr %17, align 8, !tbaa !13
  %963 = load ptr, ptr %32, align 8, !tbaa !5
  %964 = load i64, ptr %44, align 8, !tbaa !13
  %965 = getelementptr inbounds i64, ptr %963, i64 %964
  store i64 %961, ptr %965, align 8, !tbaa !13
  br label %966

966:                                              ; preds = %956
  br label %967

967:                                              ; preds = %966
  br label %968

968:                                              ; preds = %967, %949, %943
  br label %969

969:                                              ; preds = %968, %942
  %970 = load i64, ptr %16, align 8, !tbaa !13
  %971 = load ptr, ptr %38, align 8, !tbaa !5
  %972 = load i64, ptr %44, align 8, !tbaa !13
  %973 = load i64, ptr %16, align 8, !tbaa !13
  %974 = mul nsw i64 %972, %973
  %975 = getelementptr inbounds float, ptr %971, i64 %974
  %976 = load ptr, ptr %39, align 8, !tbaa !5
  %977 = load i64, ptr %20, align 8, !tbaa !13
  %978 = load i64, ptr %16, align 8, !tbaa !13
  %979 = mul nsw i64 %977, %978
  %980 = getelementptr inbounds float, ptr %976, i64 %979
  %981 = call ptr @gk_faxpy(i64 noundef %970, float noundef 1.000000e+00, ptr noundef %975, i64 noundef 1, ptr noundef %980, i64 noundef 1)
  %982 = load i64, ptr %16, align 8, !tbaa !13
  %983 = load ptr, ptr %38, align 8, !tbaa !5
  %984 = load i64, ptr %44, align 8, !tbaa !13
  %985 = load i64, ptr %16, align 8, !tbaa !13
  %986 = mul nsw i64 %984, %985
  %987 = getelementptr inbounds float, ptr %983, i64 %986
  %988 = load ptr, ptr %39, align 8, !tbaa !5
  %989 = load i64, ptr %20, align 8, !tbaa !13
  %990 = add nsw i64 %989, 1
  %991 = srem i64 %990, 2
  %992 = load i64, ptr %16, align 8, !tbaa !13
  %993 = mul nsw i64 %991, %992
  %994 = getelementptr inbounds float, ptr %988, i64 %993
  %995 = call ptr @gk_faxpy(i64 noundef %982, float noundef -1.000000e+00, ptr noundef %987, i64 noundef 1, ptr noundef %994, i64 noundef 1)
  %996 = load ptr, ptr %26, align 8, !tbaa !5
  %997 = load i64, ptr %44, align 8, !tbaa !13
  %998 = getelementptr inbounds i64, ptr %996, i64 %997
  %999 = load i64, ptr %998, align 8, !tbaa !13
  store i64 %999, ptr %11, align 8, !tbaa !13
  br label %1000

1000:                                             ; preds = %1112, %969
  %1001 = load i64, ptr %11, align 8, !tbaa !13
  %1002 = load ptr, ptr %26, align 8, !tbaa !5
  %1003 = load i64, ptr %44, align 8, !tbaa !13
  %1004 = add nsw i64 %1003, 1
  %1005 = getelementptr inbounds i64, ptr %1002, i64 %1004
  %1006 = load i64, ptr %1005, align 8, !tbaa !13
  %1007 = icmp slt i64 %1001, %1006
  br i1 %1007, label %1008, label %1115

1008:                                             ; preds = %1000
  %1009 = load ptr, ptr %27, align 8, !tbaa !5
  %1010 = load i64, ptr %11, align 8, !tbaa !13
  %1011 = getelementptr inbounds i64, ptr %1009, i64 %1010
  %1012 = load i64, ptr %1011, align 8, !tbaa !13
  store i64 %1012, ptr %12, align 8, !tbaa !13
  %1013 = load i64, ptr %20, align 8, !tbaa !13
  %1014 = load ptr, ptr %29, align 8, !tbaa !5
  %1015 = load i64, ptr %12, align 8, !tbaa !13
  %1016 = getelementptr inbounds i64, ptr %1014, i64 %1015
  %1017 = load i64, ptr %1016, align 8, !tbaa !13
  %1018 = icmp eq i64 %1013, %1017
  br i1 %1018, label %1019, label %1024

1019:                                             ; preds = %1008
  %1020 = load ptr, ptr %28, align 8, !tbaa !5
  %1021 = load i64, ptr %11, align 8, !tbaa !13
  %1022 = getelementptr inbounds i64, ptr %1020, i64 %1021
  %1023 = load i64, ptr %1022, align 8, !tbaa !13
  br label %1030

1024:                                             ; preds = %1008
  %1025 = load ptr, ptr %28, align 8, !tbaa !5
  %1026 = load i64, ptr %11, align 8, !tbaa !13
  %1027 = getelementptr inbounds i64, ptr %1025, i64 %1026
  %1028 = load i64, ptr %1027, align 8, !tbaa !13
  %1029 = sub nsw i64 0, %1028
  br label %1030

1030:                                             ; preds = %1024, %1019
  %1031 = phi i64 [ %1023, %1019 ], [ %1029, %1024 ]
  store i64 %1031, ptr %14, align 8, !tbaa !13
  br label %1032

1032:                                             ; preds = %1030
  %1033 = load i64, ptr %14, align 8, !tbaa !13
  %1034 = load ptr, ptr %30, align 8, !tbaa !5
  %1035 = load i64, ptr %12, align 8, !tbaa !13
  %1036 = getelementptr inbounds i64, ptr %1034, i64 %1035
  %1037 = load i64, ptr %1036, align 8, !tbaa !13
  %1038 = add nsw i64 %1037, %1033
  store i64 %1038, ptr %1036, align 8, !tbaa !13
  %1039 = load i64, ptr %14, align 8, !tbaa !13
  %1040 = load ptr, ptr %31, align 8, !tbaa !5
  %1041 = load i64, ptr %12, align 8, !tbaa !13
  %1042 = getelementptr inbounds i64, ptr %1040, i64 %1041
  %1043 = load i64, ptr %1042, align 8, !tbaa !13
  %1044 = sub nsw i64 %1043, %1039
  store i64 %1044, ptr %1042, align 8, !tbaa !13
  br label %1045

1045:                                             ; preds = %1032
  br label %1046

1046:                                             ; preds = %1045
  %1047 = load ptr, ptr %32, align 8, !tbaa !5
  %1048 = load i64, ptr %12, align 8, !tbaa !13
  %1049 = getelementptr inbounds i64, ptr %1047, i64 %1048
  %1050 = load i64, ptr %1049, align 8, !tbaa !13
  %1051 = icmp ne i64 %1050, -1
  br i1 %1051, label %1052, label %1086

1052:                                             ; preds = %1046
  %1053 = load ptr, ptr %31, align 8, !tbaa !5
  %1054 = load i64, ptr %12, align 8, !tbaa !13
  %1055 = getelementptr inbounds i64, ptr %1053, i64 %1054
  %1056 = load i64, ptr %1055, align 8, !tbaa !13
  %1057 = icmp eq i64 %1056, 0
  br i1 %1057, label %1058, label %1086

1058:                                             ; preds = %1052
  br label %1059

1059:                                             ; preds = %1058
  %1060 = load ptr, ptr %33, align 8, !tbaa !5
  %1061 = load i64, ptr %17, align 8, !tbaa !13
  %1062 = add nsw i64 %1061, -1
  store i64 %1062, ptr %17, align 8, !tbaa !13
  %1063 = getelementptr inbounds i64, ptr %1060, i64 %1062
  %1064 = load i64, ptr %1063, align 8, !tbaa !13
  %1065 = load ptr, ptr %33, align 8, !tbaa !5
  %1066 = load ptr, ptr %32, align 8, !tbaa !5
  %1067 = load i64, ptr %12, align 8, !tbaa !13
  %1068 = getelementptr inbounds i64, ptr %1066, i64 %1067
  %1069 = load i64, ptr %1068, align 8, !tbaa !13
  %1070 = getelementptr inbounds i64, ptr %1065, i64 %1069
  store i64 %1064, ptr %1070, align 8, !tbaa !13
  %1071 = load ptr, ptr %32, align 8, !tbaa !5
  %1072 = load i64, ptr %12, align 8, !tbaa !13
  %1073 = getelementptr inbounds i64, ptr %1071, i64 %1072
  %1074 = load i64, ptr %1073, align 8, !tbaa !13
  %1075 = load ptr, ptr %32, align 8, !tbaa !5
  %1076 = load ptr, ptr %33, align 8, !tbaa !5
  %1077 = load i64, ptr %17, align 8, !tbaa !13
  %1078 = getelementptr inbounds i64, ptr %1076, i64 %1077
  %1079 = load i64, ptr %1078, align 8, !tbaa !13
  %1080 = getelementptr inbounds i64, ptr %1075, i64 %1079
  store i64 %1074, ptr %1080, align 8, !tbaa !13
  %1081 = load ptr, ptr %32, align 8, !tbaa !5
  %1082 = load i64, ptr %12, align 8, !tbaa !13
  %1083 = getelementptr inbounds i64, ptr %1081, i64 %1082
  store i64 -1, ptr %1083, align 8, !tbaa !13
  br label %1084

1084:                                             ; preds = %1059
  br label %1085

1085:                                             ; preds = %1084
  br label %1086

1086:                                             ; preds = %1085, %1052, %1046
  %1087 = load ptr, ptr %32, align 8, !tbaa !5
  %1088 = load i64, ptr %12, align 8, !tbaa !13
  %1089 = getelementptr inbounds i64, ptr %1087, i64 %1088
  %1090 = load i64, ptr %1089, align 8, !tbaa !13
  %1091 = icmp eq i64 %1090, -1
  br i1 %1091, label %1092, label %1111

1092:                                             ; preds = %1086
  %1093 = load ptr, ptr %31, align 8, !tbaa !5
  %1094 = load i64, ptr %12, align 8, !tbaa !13
  %1095 = getelementptr inbounds i64, ptr %1093, i64 %1094
  %1096 = load i64, ptr %1095, align 8, !tbaa !13
  %1097 = icmp sgt i64 %1096, 0
  br i1 %1097, label %1098, label %1111

1098:                                             ; preds = %1092
  br label %1099

1099:                                             ; preds = %1098
  %1100 = load i64, ptr %12, align 8, !tbaa !13
  %1101 = load ptr, ptr %33, align 8, !tbaa !5
  %1102 = load i64, ptr %17, align 8, !tbaa !13
  %1103 = getelementptr inbounds i64, ptr %1101, i64 %1102
  store i64 %1100, ptr %1103, align 8, !tbaa !13
  %1104 = load i64, ptr %17, align 8, !tbaa !13
  %1105 = add nsw i64 %1104, 1
  store i64 %1105, ptr %17, align 8, !tbaa !13
  %1106 = load ptr, ptr %32, align 8, !tbaa !5
  %1107 = load i64, ptr %12, align 8, !tbaa !13
  %1108 = getelementptr inbounds i64, ptr %1106, i64 %1107
  store i64 %1104, ptr %1108, align 8, !tbaa !13
  br label %1109

1109:                                             ; preds = %1099
  br label %1110

1110:                                             ; preds = %1109
  br label %1111

1111:                                             ; preds = %1110, %1092, %1086
  br label %1112

1112:                                             ; preds = %1111
  %1113 = load i64, ptr %11, align 8, !tbaa !13
  %1114 = add nsw i64 %1113, 1
  store i64 %1114, ptr %11, align 8, !tbaa !13
  br label %1000, !llvm.loop !48

1115:                                             ; preds = %1000
  br label %1116

1116:                                             ; preds = %1115
  %1117 = load i64, ptr %18, align 8, !tbaa !13
  %1118 = add nsw i64 %1117, -1
  store i64 %1118, ptr %18, align 8, !tbaa !13
  br label %857, !llvm.loop !49

1119:                                             ; preds = %857
  %1120 = load ptr, ptr %5, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.controldef, ptr %1120, i32 0, i32 1
  %1122 = load i64, ptr %1121, align 8, !tbaa !34
  %1123 = and i64 %1122, 8
  %1124 = icmp ne i64 %1123, 0
  br i1 %1124, label %1125, label %1172

1125:                                             ; preds = %1119
  %1126 = load i64, ptr %46, align 8, !tbaa !13
  %1127 = load i64, ptr %48, align 8, !tbaa !13
  %1128 = load i64, ptr %17, align 8, !tbaa !13
  %1129 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.9, i64 noundef %1126, i64 noundef %1127, i64 noundef %1128)
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %1130

1130:                                             ; preds = %1148, %1125
  %1131 = load i64, ptr %9, align 8, !tbaa !13
  %1132 = load i64, ptr %16, align 8, !tbaa !13
  %1133 = icmp slt i64 %1131, %1132
  br i1 %1133, label %1134, label %1151

1134:                                             ; preds = %1130
  %1135 = load ptr, ptr %39, align 8, !tbaa !5
  %1136 = load i64, ptr %9, align 8, !tbaa !13
  %1137 = getelementptr inbounds float, ptr %1135, i64 %1136
  %1138 = load float, ptr %1137, align 4, !tbaa !25
  %1139 = fpext float %1138 to double
  %1140 = load ptr, ptr %39, align 8, !tbaa !5
  %1141 = load i64, ptr %16, align 8, !tbaa !13
  %1142 = load i64, ptr %9, align 8, !tbaa !13
  %1143 = add nsw i64 %1141, %1142
  %1144 = getelementptr inbounds float, ptr %1140, i64 %1143
  %1145 = load float, ptr %1144, align 4, !tbaa !25
  %1146 = fpext float %1145 to double
  %1147 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %1139, double noundef %1146)
  br label %1148

1148:                                             ; preds = %1134
  %1149 = load i64, ptr %9, align 8, !tbaa !13
  %1150 = add nsw i64 %1149, 1
  store i64 %1150, ptr %9, align 8, !tbaa !13
  br label %1130, !llvm.loop !50

1151:                                             ; preds = %1130
  %1152 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.10)
  %1153 = load i64, ptr %16, align 8, !tbaa !13
  %1154 = load ptr, ptr %39, align 8, !tbaa !5
  %1155 = load ptr, ptr %7, align 8, !tbaa !5
  %1156 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 0
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %1153, ptr noundef %1154, ptr noundef %1155, ptr noundef %1156)
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %1157

1157:                                             ; preds = %1167, %1151
  %1158 = load i64, ptr %9, align 8, !tbaa !13
  %1159 = load i64, ptr %16, align 8, !tbaa !13
  %1160 = icmp slt i64 %1158, %1159
  br i1 %1160, label %1161, label %1170

1161:                                             ; preds = %1157
  %1162 = load i64, ptr %9, align 8, !tbaa !13
  %1163 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 %1162
  %1164 = load float, ptr %1163, align 4, !tbaa !25
  %1165 = fpext float %1164 to double
  %1166 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, double noundef %1165)
  br label %1167

1167:                                             ; preds = %1161
  %1168 = load i64, ptr %9, align 8, !tbaa !13
  %1169 = add nsw i64 %1168, 1
  store i64 %1169, ptr %9, align 8, !tbaa !13
  br label %1157, !llvm.loop !51

1170:                                             ; preds = %1157
  %1171 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.8)
  br label %1172

1172:                                             ; preds = %1170, %1119
  %1173 = load i64, ptr %46, align 8, !tbaa !13
  %1174 = load ptr, ptr %6, align 8, !tbaa !5
  %1175 = getelementptr inbounds %struct.graphdef, ptr %1174, i32 0, i32 16
  store i64 %1173, ptr %1175, align 8, !tbaa !33
  %1176 = load i64, ptr %17, align 8, !tbaa !13
  %1177 = load ptr, ptr %6, align 8, !tbaa !5
  %1178 = getelementptr inbounds %struct.graphdef, ptr %1177, i32 0, i32 20
  store i64 %1176, ptr %1178, align 8, !tbaa !39
  store i64 0, ptr %9, align 8, !tbaa !13
  br label %1179

1179:                                             ; preds = %1192, %1172
  %1180 = load i64, ptr %9, align 8, !tbaa !13
  %1181 = load i64, ptr %16, align 8, !tbaa !13
  %1182 = icmp slt i64 %1180, %1181
  br i1 %1182, label %1183, label %1195

1183:                                             ; preds = %1179
  %1184 = load ptr, ptr %5, align 8, !tbaa !5
  %1185 = load i64, ptr %9, align 8, !tbaa !13
  %1186 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %1185
  %1187 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1186, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1184, ptr noundef %1187)
  %1188 = load ptr, ptr %5, align 8, !tbaa !5
  %1189 = load i64, ptr %9, align 8, !tbaa !13
  %1190 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %1189
  %1191 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1190, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1188, ptr noundef %1191)
  br label %1192

1192:                                             ; preds = %1183
  %1193 = load i64, ptr %9, align 8, !tbaa !13
  %1194 = add nsw i64 %1193, 1
  store i64 %1194, ptr %9, align 8, !tbaa !13
  br label %1179, !llvm.loop !52

1195:                                             ; preds = %1179
  %1196 = load ptr, ptr %5, align 8, !tbaa !5
  %1197 = load i64, ptr %15, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %1196, i64 noundef %1197)
  %1198 = load ptr, ptr %5, align 8, !tbaa !5
  %1199 = load i64, ptr %15, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %1198, i64 noundef %1199)
  %1200 = load ptr, ptr %5, align 8, !tbaa !5
  %1201 = load i64, ptr %15, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %1200, i64 noundef %1201)
  %1202 = load ptr, ptr %5, align 8, !tbaa !5
  %1203 = load i64, ptr %15, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %1202, i64 noundef %1203)
  %1204 = load ptr, ptr %5, align 8, !tbaa !5
  %1205 = load i64, ptr %16, align 8, !tbaa !13
  %1206 = mul nsw i64 2, %1205
  call void @fwspacefree(ptr noundef %1204, i64 noundef %1206)
  %1207 = load ptr, ptr %5, align 8, !tbaa !5
  %1208 = load i64, ptr %16, align 8, !tbaa !13
  %1209 = mul nsw i64 2, %1208
  call void @fwspacefree(ptr noundef %1207, i64 noundef %1209)
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 2816, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  ret void
}

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

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

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

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

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

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

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

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

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #1

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

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

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

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

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

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

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

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

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


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

%struct.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MocGeneral2WayBalance2(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #2 {
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca [16 x float], align 16
  %8 = alloca [16 x float], align 16
  %9 = alloca [16 x float], align 16
  %10 = alloca [16 x [2 x %struct.PQueueType]], align 16
  %11 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 2816, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #4
  %12 = load i64, ptr %1, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %1, i64 208
  %14 = load i64, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %1, i64 16
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %1, i64 216
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %1, i64 40
  %20 = load ptr, ptr %19, align 8, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %1, i64 48
  %22 = load ptr, ptr %21, align 8, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %1, i64 128
  %24 = load ptr, ptr %23, align 8, !tbaa !17
  %25 = getelementptr inbounds i8, ptr %1, i64 168
  %26 = load ptr, ptr %25, align 8, !tbaa !18
  %27 = getelementptr inbounds i8, ptr %1, i64 176
  %28 = load ptr, ptr %27, align 8, !tbaa !19
  %29 = getelementptr inbounds i8, ptr %1, i64 224
  %30 = load ptr, ptr %29, align 8, !tbaa !20
  %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 %12) #4
  %36 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %12) #4
  %37 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %12) #4
  %38 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %12) #4
  %39 = sitofp i64 %12 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 = shl nsw i64 %14, 1
  %46 = tail call ptr @libmetis__fwspacemalloc(ptr noundef %0, i64 noundef %45) #4
  %47 = tail call ptr @libmetis__fwspacemalloc(ptr noundef %0, i64 noundef %45) #4
  %48 = icmp sgt i64 %14, 0
  br i1 %48, label %.preheader521.us.preheader.preheader, label %.preheader519

.preheader521.us.preheader.preheader:             ; preds = %4
  %min.iters.check = icmp ult i64 %14, 4
  br i1 %min.iters.check, label %.preheader521.us.preheader.preheader767, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader521.us.preheader.preheader
  %49 = shl i64 %14, 2
  %scevgep = getelementptr i8, ptr %47, i64 %49
  %scevgep688 = getelementptr i8, ptr %46, i64 %49
  %scevgep689 = getelementptr i8, ptr %2, i64 4
  %scevgep690 = getelementptr i8, ptr %3, i64 %49
  %bound0 = icmp ult ptr %47, %scevgep688
  %bound1 = icmp ult ptr %46, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0691 = icmp ult ptr %47, %scevgep689
  %bound1692 = icmp ugt ptr %scevgep, %2
  %found.conflict693 = and i1 %bound0691, %bound1692
  %conflict.rdx = or i1 %found.conflict, %found.conflict693
  %bound0694 = icmp ult ptr %47, %scevgep690
  %bound1695 = icmp ugt ptr %scevgep, %3
  %found.conflict696 = and i1 %bound0694, %bound1695
  %conflict.rdx697 = or i1 %conflict.rdx, %found.conflict696
  %bound0698 = icmp ult ptr %46, %scevgep689
  %bound1699 = icmp ugt ptr %scevgep688, %2
  %found.conflict700 = and i1 %bound0698, %bound1699
  %conflict.rdx701 = or i1 %conflict.rdx697, %found.conflict700
  %bound0702 = icmp ult ptr %46, %scevgep690
  %bound1703 = icmp ugt ptr %scevgep688, %3
  %found.conflict704 = and i1 %bound0702, %bound1703
  %conflict.rdx705 = or i1 %conflict.rdx701, %found.conflict704
  br i1 %conflict.rdx705, label %.preheader521.us.preheader.preheader767, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %14, 9223372036854775804
  %50 = load float, ptr %2, align 4, !tbaa !23, !alias.scope !25
  %broadcast.splatinsert = insertelement <4 x float> poison, float %50, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %51 = load float, ptr %2, align 4, !tbaa !23, !alias.scope !25
  %broadcast.splatinsert706 = insertelement <4 x float> poison, float %51, i64 0
  %broadcast.splat707 = shufflevector <4 x float> %broadcast.splatinsert706, <4 x float> poison, <4 x i32> zeroinitializer
  %52 = fpext <4 x float> %broadcast.splat707 to <4 x double>
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %53 = getelementptr inbounds float, ptr %3, i64 %index
  %wide.load = load <4 x float>, ptr %53, align 4, !tbaa !23, !alias.scope !28
  %54 = fmul <4 x float> %broadcast.splat, %wide.load
  %55 = getelementptr inbounds float, ptr %47, i64 %index
  store <4 x float> %54, ptr %55, align 4, !tbaa !23, !alias.scope !30, !noalias !32
  %wide.load708 = load <4 x float>, ptr %53, align 4, !tbaa !23, !alias.scope !28
  %56 = fpext <4 x float> %wide.load708 to <4 x double>
  %57 = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %56
  %58 = fmul <4 x double> %57, %52
  %59 = fptrunc <4 x double> %58 to <4 x float>
  %60 = getelementptr inbounds float, ptr %46, i64 %index
  store <4 x float> %59, ptr %60, align 4, !tbaa !23, !alias.scope !34, !noalias !35
  %index.next = add nuw i64 %index, 4
  %61 = icmp eq i64 %index.next, %n.vec
  br i1 %61, label %middle.block, label %vector.body, !llvm.loop !36

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %14, %n.vec
  br i1 %cmp.n, label %._crit_edge.us, label %.preheader521.us.preheader.preheader767

.preheader521.us.preheader.preheader767:          ; preds = %middle.block, %vector.memcheck, %.preheader521.us.preheader.preheader
  %.0475531.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader521.us.preheader.preheader ], [ %n.vec, %middle.block ]
  br label %.preheader521.us.preheader

.preheader521.us.preheader:                       ; preds = %.preheader521.us.preheader.preheader767, %.preheader521.us.preheader
  %.0475531.us = phi i64 [ %75, %.preheader521.us.preheader ], [ %.0475531.us.ph, %.preheader521.us.preheader.preheader767 ]
  %62 = load float, ptr %2, align 4, !tbaa !23
  %63 = getelementptr inbounds float, ptr %3, i64 %.0475531.us
  %64 = load float, ptr %63, align 4, !tbaa !23
  %65 = fmul float %62, %64
  %66 = getelementptr inbounds float, ptr %47, i64 %.0475531.us
  store float %65, ptr %66, align 4, !tbaa !23
  %67 = load float, ptr %2, align 4, !tbaa !23
  %68 = fpext float %67 to double
  %69 = load float, ptr %63, align 4, !tbaa !23
  %70 = fpext float %69 to double
  %71 = fdiv double 1.000000e+00, %70
  %72 = fmul double %71, %68
  %73 = fptrunc double %72 to float
  %74 = getelementptr inbounds float, ptr %46, i64 %.0475531.us
  store float %73, ptr %74, align 4, !tbaa !23
  %75 = add nuw nsw i64 %.0475531.us, 1
  %exitcond.not = icmp eq i64 %75, %14
  br i1 %exitcond.not, label %._crit_edge.us, label %.preheader521.us.preheader, !llvm.loop !40

._crit_edge.us:                                   ; preds = %.preheader521.us.preheader, %middle.block
  %76 = getelementptr inbounds i8, ptr %2, i64 4
  %min.iters.check737 = icmp ult i64 %14, 4
  br i1 %min.iters.check737, label %scalar.ph736.preheader, label %vector.memcheck709

vector.memcheck709:                               ; preds = %._crit_edge.us
  %77 = shl i64 %14, 2
  %scevgep710 = getelementptr i8, ptr %47, i64 %77
  %78 = shl i64 %14, 3
  %scevgep711 = getelementptr i8, ptr %47, i64 %78
  %scevgep712 = getelementptr i8, ptr %46, i64 %77
  %scevgep713 = getelementptr i8, ptr %46, i64 %78
  %scevgep714 = getelementptr i8, ptr %2, i64 8
  %bound0716 = icmp ult ptr %scevgep710, %scevgep713
  %bound1717 = icmp ult ptr %scevgep712, %scevgep711
  %found.conflict718 = and i1 %bound0716, %bound1717
  %bound0719 = icmp ult ptr %scevgep710, %scevgep714
  %bound1720 = icmp ult ptr %76, %scevgep711
  %found.conflict721 = and i1 %bound0719, %bound1720
  %conflict.rdx722 = or i1 %found.conflict718, %found.conflict721
  %bound0723 = icmp ult ptr %47, %3
  %bound1724 = icmp ugt ptr %scevgep711, %3
  %found.conflict725 = and i1 %bound0723, %bound1724
  %conflict.rdx726 = or i1 %conflict.rdx722, %found.conflict725
  %bound0727 = icmp ult ptr %scevgep712, %scevgep714
  %bound1728 = icmp ult ptr %76, %scevgep713
  %found.conflict729 = and i1 %bound0727, %bound1728
  %conflict.rdx730 = or i1 %conflict.rdx726, %found.conflict729
  %bound0731 = icmp ult ptr %46, %3
  %bound1732 = icmp ugt ptr %scevgep713, %3
  %found.conflict733 = and i1 %bound0731, %bound1732
  %conflict.rdx734 = or i1 %conflict.rdx730, %found.conflict733
  br i1 %conflict.rdx734, label %scalar.ph736.preheader, label %vector.ph738

vector.ph738:                                     ; preds = %vector.memcheck709
  %n.vec740 = and i64 %14, 9223372036854775804
  %79 = load float, ptr %76, align 4, !tbaa !23, !alias.scope !41
  %broadcast.splatinsert745 = insertelement <4 x float> poison, float %79, i64 0
  %broadcast.splat746 = shufflevector <4 x float> %broadcast.splatinsert745, <4 x float> poison, <4 x i32> zeroinitializer
  %80 = load float, ptr %76, align 4, !tbaa !23, !alias.scope !41
  %broadcast.splatinsert747 = insertelement <4 x float> poison, float %80, i64 0
  %broadcast.splat748 = shufflevector <4 x float> %broadcast.splatinsert747, <4 x float> poison, <4 x i32> zeroinitializer
  %81 = fpext <4 x float> %broadcast.splat748 to <4 x double>
  br label %vector.body742

vector.body742:                                   ; preds = %vector.body742, %vector.ph738
  %index743 = phi i64 [ 0, %vector.ph738 ], [ %index.next750, %vector.body742 ]
  %82 = getelementptr inbounds float, ptr %3, i64 %index743
  %wide.load744 = load <4 x float>, ptr %82, align 4, !tbaa !23, !alias.scope !44
  %83 = fmul <4 x float> %broadcast.splat746, %wide.load744
  %84 = add nuw nsw i64 %index743, %14
  %85 = getelementptr inbounds float, ptr %47, i64 %84
  store <4 x float> %83, ptr %85, align 4, !tbaa !23, !alias.scope !46, !noalias !48
  %wide.load749 = load <4 x float>, ptr %82, align 4, !tbaa !23, !alias.scope !44
  %86 = fpext <4 x float> %wide.load749 to <4 x double>
  %87 = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %86
  %88 = fmul <4 x double> %87, %81
  %89 = fptrunc <4 x double> %88 to <4 x float>
  %90 = getelementptr inbounds float, ptr %46, i64 %84
  store <4 x float> %89, ptr %90, align 4, !tbaa !23, !alias.scope !50, !noalias !51
  %index.next750 = add nuw i64 %index743, 4
  %91 = icmp eq i64 %index.next750, %n.vec740
  br i1 %91, label %middle.block735, label %vector.body742, !llvm.loop !52

middle.block735:                                  ; preds = %vector.body742
  %cmp.n751 = icmp eq i64 %14, %n.vec740
  br i1 %cmp.n751, label %.preheader520, label %scalar.ph736.preheader

scalar.ph736.preheader:                           ; preds = %middle.block735, %vector.memcheck709, %._crit_edge.us
  %.0475531.us.1.ph = phi i64 [ 0, %vector.memcheck709 ], [ 0, %._crit_edge.us ], [ %n.vec740, %middle.block735 ]
  br label %scalar.ph736

scalar.ph736:                                     ; preds = %scalar.ph736.preheader, %scalar.ph736
  %.0475531.us.1 = phi i64 [ %106, %scalar.ph736 ], [ %.0475531.us.1.ph, %scalar.ph736.preheader ]
  %92 = load float, ptr %76, align 4, !tbaa !23
  %93 = getelementptr inbounds float, ptr %3, i64 %.0475531.us.1
  %94 = load float, ptr %93, align 4, !tbaa !23
  %95 = fmul float %92, %94
  %96 = add nuw nsw i64 %.0475531.us.1, %14
  %97 = getelementptr inbounds float, ptr %47, i64 %96
  store float %95, ptr %97, align 4, !tbaa !23
  %98 = load float, ptr %76, align 4, !tbaa !23
  %99 = fpext float %98 to double
  %100 = load float, ptr %93, align 4, !tbaa !23
  %101 = fpext float %100 to double
  %102 = fdiv double 1.000000e+00, %101
  %103 = fmul double %102, %99
  %104 = fptrunc double %103 to float
  %105 = getelementptr inbounds float, ptr %46, i64 %96
  store float %104, ptr %105, align 4, !tbaa !23
  %106 = add nuw nsw i64 %.0475531.us.1, 1
  %exitcond.1.not = icmp eq i64 %106, %14
  br i1 %exitcond.1.not, label %.preheader520, label %scalar.ph736, !llvm.loop !53

.preheader520:                                    ; preds = %scalar.ph736, %middle.block735
  br i1 %48, label %.lr.ph, label %.preheader519

.preheader519:                                    ; preds = %.lr.ph, %4, %.preheader520
  %107 = icmp sgt i64 %12, 0
  br i1 %107, label %.lr.ph535, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader520, %.lr.ph
  %.1533 = phi i64 [ %110, %.lr.ph ], [ 0, %.preheader520 ]
  %108 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %.1533
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %108, i64 noundef %12, i64 noundef 501) #4
  %109 = getelementptr inbounds i8, ptr %108, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %109, i64 noundef %12, i64 noundef 501) #4
  %110 = add nuw nsw i64 %.1533, 1
  %exitcond625.not = icmp eq i64 %110, %14
  br i1 %exitcond625.not, label %.preheader519, label %.lr.ph, !llvm.loop !54

.lr.ph535:                                        ; preds = %.preheader519, %.lr.ph535
  %.2534 = phi i64 [ %115, %.lr.ph535 ], [ 0, %.preheader519 ]
  %111 = mul nsw i64 %.2534, %14
  %112 = getelementptr inbounds float, ptr %18, i64 %111
  %113 = call i64 @gk_fargmax(i64 noundef %14, ptr noundef %112) #4
  %114 = getelementptr inbounds i64, ptr %38, i64 %.2534
  store i64 %113, ptr %114, align 8, !tbaa !55
  %115 = add nuw nsw i64 %.2534, 1
  %exitcond626.not = icmp eq i64 %115, %12
  br i1 %exitcond626.not, label %._crit_edge, label %.lr.ph535, !llvm.loop !56

._crit_edge:                                      ; preds = %.lr.ph535, %.preheader519
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %7) #4
  br i1 %48, label %.lr.ph538.preheader, label %._crit_edge539

.lr.ph538.preheader:                              ; preds = %._crit_edge
  %116 = shl nuw i64 %14, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %8, ptr nonnull align 16 %7, i64 %116, i1 false), !tbaa !23
  br label %._crit_edge539

._crit_edge539:                                   ; preds = %.lr.ph538.preheader, %._crit_edge
  %117 = getelementptr inbounds i8, ptr %1, i64 112
  %118 = load i64, ptr %117, align 8, !tbaa !57
  %119 = getelementptr inbounds i8, ptr %0, i64 8
  %120 = load i64, ptr %119, align 8, !tbaa !58
  %121 = and i64 %120, 8
  %.not = icmp eq i64 %121, 0
  br i1 %.not, label %160, label %122

122:                                              ; preds = %._crit_edge539
  %123 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str) #4
  br i1 %48, label %.lr.ph542, label %._crit_edge547.critedge

.lr.ph542:                                        ; preds = %122
  %124 = getelementptr float, ptr %30, i64 %14
  br label %125

125:                                              ; preds = %.lr.ph542, %125
  %.0478540 = phi i64 [ 0, %.lr.ph542 ], [ %133, %125 ]
  %126 = getelementptr inbounds float, ptr %30, i64 %.0478540
  %127 = load float, ptr %126, align 4, !tbaa !23
  %128 = fpext float %127 to double
  %129 = getelementptr float, ptr %124, i64 %.0478540
  %130 = load float, ptr %129, align 4, !tbaa !23
  %131 = fpext float %130 to double
  %132 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %128, double noundef %131) #4
  %133 = add nuw nsw i64 %.0478540, 1
  %exitcond627.not = icmp eq i64 %133, %14
  br i1 %exitcond627.not, label %._crit_edge543, label %125, !llvm.loop !62

._crit_edge543:                                   ; preds = %125
  %134 = load float, ptr %2, align 4, !tbaa !23
  %135 = fpext float %134 to double
  %136 = getelementptr inbounds i8, ptr %2, i64 4
  %137 = load float, ptr %136, align 4, !tbaa !23
  %138 = fpext float %137 to double
  %139 = load i64, ptr %1, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %1, i64 144
  %141 = load i64, ptr %140, align 8, !tbaa !63
  %142 = load i64, ptr %117, align 8, !tbaa !57
  %143 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, double noundef %135, double noundef %138, i64 noundef %139, i64 noundef %141, i64 noundef %142) #4
  br i1 %48, label %.lr.ph546, label %._crit_edge547

.lr.ph546:                                        ; preds = %._crit_edge543, %.lr.ph546
  %.4544 = phi i64 [ %148, %.lr.ph546 ], [ 0, %._crit_edge543 ]
  %144 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.4544
  %145 = load float, ptr %144, align 4, !tbaa !23
  %146 = fpext float %145 to double
  %147 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, double noundef %146) #4
  %148 = add nuw nsw i64 %.4544, 1
  %exitcond628.not = icmp eq i64 %148, %14
  br i1 %exitcond628.not, label %._crit_edge547, label %.lr.ph546, !llvm.loop !64

._crit_edge547.critedge:                          ; preds = %122
  %149 = load float, ptr %2, align 4, !tbaa !23
  %150 = fpext float %149 to double
  %151 = getelementptr inbounds i8, ptr %2, i64 4
  %152 = load float, ptr %151, align 4, !tbaa !23
  %153 = fpext float %152 to double
  %154 = load i64, ptr %1, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %1, i64 144
  %156 = load i64, ptr %155, align 8, !tbaa !63
  %157 = load i64, ptr %117, align 8, !tbaa !57
  %158 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, double noundef %150, double noundef %153, i64 noundef %154, i64 noundef %156, i64 noundef %157) #4
  br label %._crit_edge547

._crit_edge547:                                   ; preds = %.lr.ph546, %._crit_edge547.critedge, %._crit_edge543
  %159 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4) #4
  br label %160

160:                                              ; preds = %._crit_edge547, %._crit_edge539
  %161 = call ptr @libmetis__idxset(i64 noundef %12, i64 noundef -1, ptr noundef %35) #4
  %162 = getelementptr inbounds i8, ptr %1, i64 144
  %163 = load i64, ptr %162, align 8, !tbaa !63
  call void @libmetis__RandomPermute(i64 noundef %12, ptr noundef %37, i64 noundef 1) #4
  br i1 %107, label %.lr.ph550, label %.preheader

.preheader517:                                    ; preds = %.lr.ph550
  br i1 %107, label %.lr.ph573, label %.preheader

.lr.ph573:                                        ; preds = %.preheader517
  %164 = getelementptr float, ptr %30, i64 %14
  %165 = shl nuw i64 %14, 2
  br label %180

.lr.ph550:                                        ; preds = %160, %.lr.ph550
  %.0469548 = phi i64 [ %179, %.lr.ph550 ], [ 0, %160 ]
  %166 = getelementptr inbounds i64, ptr %37, i64 %.0469548
  %167 = load i64, ptr %166, align 8, !tbaa !55
  %168 = getelementptr inbounds i64, ptr %38, i64 %167
  %169 = load i64, ptr %168, align 8, !tbaa !55
  %170 = getelementptr inbounds i64, ptr %24, i64 %167
  %171 = load i64, ptr %170, align 8, !tbaa !55
  %172 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %169, i64 %171
  %173 = getelementptr inbounds i64, ptr %28, i64 %167
  %174 = load i64, ptr %173, align 8, !tbaa !55
  %175 = getelementptr inbounds i64, ptr %26, i64 %167
  %176 = load i64, ptr %175, align 8, !tbaa !55
  %177 = sub nsw i64 %174, %176
  %178 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %172, i64 noundef %167, i64 noundef %177) #4
  %179 = add nuw nsw i64 %.0469548, 1
  %exitcond629.not = icmp eq i64 %179, %12
  br i1 %exitcond629.not, label %.preheader517, label %.lr.ph550, !llvm.loop !65

180:                                              ; preds = %.lr.ph573, %._crit_edge566
  %.0470572 = phi i64 [ -1, %.lr.ph573 ], [ %.1471, %._crit_edge566 ]
  %.0472571 = phi i64 [ %118, %.lr.ph573 ], [ %206, %._crit_edge566 ]
  %.0473570 = phi i64 [ %118, %.lr.ph573 ], [ %.1474, %._crit_edge566 ]
  %.0479568 = phi i64 [ %163, %.lr.ph573 ], [ %.3482.lcssa, %._crit_edge566 ]
  %.0489567 = phi i64 [ 0, %.lr.ph573 ], [ %337, %._crit_edge566 ]
  %181 = call i64 @libmetis__AreAllBelow(i64 noundef %14, ptr noundef nonnull %8, ptr noundef %3) #4
  %.not501 = icmp eq i64 %181, 0
  br i1 %.not501, label %182, label %.loopexit518

182:                                              ; preds = %180
  call void @libmetis__SelectQueue3(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %10, ptr noundef %47)
  %183 = load i64, ptr %5, align 8, !tbaa !55
  %184 = add nsw i64 %183, 1
  %185 = srem i64 %184, 2
  %186 = icmp eq i64 %183, -1
  br i1 %186, label %.loopexit518, label %187

187:                                              ; preds = %182
  %188 = load i64, ptr %6, align 8, !tbaa !55
  %189 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %188, i64 %183
  %190 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %189) #4
  %191 = icmp eq i64 %190, -1
  br i1 %191, label %.loopexit518, label %192

192:                                              ; preds = %187
  %193 = mul nsw i64 %190, %14
  %194 = getelementptr inbounds float, ptr %18, i64 %193
  %195 = mul nsw i64 %185, %14
  %196 = getelementptr inbounds float, ptr %30, i64 %195
  %197 = call ptr @gk_faxpy(i64 noundef %14, float noundef 1.000000e+00, ptr noundef %194, i64 noundef 1, ptr noundef %196, i64 noundef 1) #4
  %198 = load i64, ptr %5, align 8, !tbaa !55
  %199 = mul nsw i64 %198, %14
  %200 = getelementptr inbounds float, ptr %30, i64 %199
  %201 = call ptr @gk_faxpy(i64 noundef %14, float noundef -1.000000e+00, ptr noundef %194, i64 noundef 1, ptr noundef %200, i64 noundef 1) #4
  %202 = getelementptr inbounds i64, ptr %28, i64 %190
  %203 = load i64, ptr %202, align 8, !tbaa !55
  %204 = getelementptr inbounds i64, ptr %26, i64 %190
  %205 = load i64, ptr %204, align 8, !tbaa !55
  %.neg = sub i64 %205, %203
  %206 = add i64 %.neg, %.0472571
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %9) #4
  %207 = call i64 @libmetis__IsBetter2wayBalance(i64 noundef %14, ptr noundef nonnull %9, ptr noundef nonnull %8, ptr noundef %3) #4
  %.not502 = icmp eq i64 %207, 0
  br i1 %.not502, label %208, label %211

208:                                              ; preds = %192
  %209 = call i64 @libmetis__IsBetter2wayBalance(i64 noundef %14, ptr noundef nonnull %9, ptr noundef nonnull %7, ptr noundef %3) #4
  %.not503 = icmp ne i64 %209, 0
  %210 = icmp slt i64 %206, %.0473570
  %or.cond = select i1 %.not503, i1 %210, i1 false
  br i1 %or.cond, label %211, label %212

211:                                              ; preds = %208, %192
  br i1 %48, label %.lr.ph553.preheader, label %.loopexit516

.lr.ph553.preheader:                              ; preds = %211
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %8, ptr nonnull align 16 %9, i64 %165, i1 false), !tbaa !23
  br label %.loopexit516

212:                                              ; preds = %208
  %213 = sub nsw i64 %.0489567, %.0470572
  %214 = icmp sgt i64 %213, %44
  br i1 %214, label %215, label %.loopexit516

215:                                              ; preds = %212
  %216 = load i64, ptr %5, align 8, !tbaa !55
  %217 = mul nsw i64 %216, %14
  %218 = getelementptr inbounds float, ptr %30, i64 %217
  %219 = call ptr @gk_faxpy(i64 noundef %14, float noundef 1.000000e+00, ptr noundef %194, i64 noundef 1, ptr noundef %218, i64 noundef 1) #4
  %220 = call ptr @gk_faxpy(i64 noundef %14, float noundef -1.000000e+00, ptr noundef %194, i64 noundef 1, ptr noundef %196, i64 noundef 1) #4
  br label %.loopexit518

.loopexit516:                                     ; preds = %.lr.ph553.preheader, %211, %212
  %.1474 = phi i64 [ %.0473570, %212 ], [ %206, %211 ], [ %206, %.lr.ph553.preheader ]
  %.1471 = phi i64 [ %.0470572, %212 ], [ %.0489567, %211 ], [ %.0489567, %.lr.ph553.preheader ]
  %221 = getelementptr inbounds i64, ptr %24, i64 %190
  store i64 %185, ptr %221, align 8, !tbaa !55
  %222 = getelementptr inbounds i64, ptr %35, i64 %190
  store i64 %.0489567, ptr %222, align 8, !tbaa !55
  %223 = getelementptr inbounds i64, ptr %36, i64 %.0489567
  store i64 %190, ptr %223, align 8, !tbaa !55
  %224 = load i64, ptr %119, align 8, !tbaa !58
  %225 = and i64 %224, 32
  %.not504 = icmp eq i64 %225, 0
  br i1 %.not504, label %250, label %226

226:                                              ; preds = %.loopexit516
  %227 = load i64, ptr %5, align 8, !tbaa !55
  %228 = load i64, ptr %6, align 8, !tbaa !55
  %229 = load i64, ptr %202, align 8, !tbaa !55
  %230 = load i64, ptr %204, align 8, !tbaa !55
  %231 = sub nsw i64 %229, %230
  %232 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %190, i64 noundef %227, i64 noundef %228, i64 noundef %231, i64 noundef %206) #4
  br i1 %48, label %.lr.ph556, label %._crit_edge561.critedge

.lr.ph556:                                        ; preds = %226, %.lr.ph556
  %.6554 = phi i64 [ %240, %.lr.ph556 ], [ 0, %226 ]
  %233 = getelementptr inbounds float, ptr %30, i64 %.6554
  %234 = load float, ptr %233, align 4, !tbaa !23
  %235 = fpext float %234 to double
  %236 = getelementptr float, ptr %164, i64 %.6554
  %237 = load float, ptr %236, align 4, !tbaa !23
  %238 = fpext float %237 to double
  %239 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %235, double noundef %238) #4
  %240 = add nuw nsw i64 %.6554, 1
  %exitcond630.not = icmp eq i64 %240, %14
  br i1 %exitcond630.not, label %._crit_edge557, label %.lr.ph556, !llvm.loop !66

._crit_edge557:                                   ; preds = %.lr.ph556
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %11) #4
  %241 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6) #4
  br i1 %48, label %.lr.ph560, label %._crit_edge561

.lr.ph560:                                        ; preds = %._crit_edge557, %.lr.ph560
  %.7558 = phi i64 [ %246, %.lr.ph560 ], [ 0, %._crit_edge557 ]
  %242 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %.7558
  %243 = load float, ptr %242, align 4, !tbaa !23
  %244 = fpext float %243 to double
  %245 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, double noundef %244) #4
  %246 = add nuw nsw i64 %.7558, 1
  %exitcond631.not = icmp eq i64 %246, %14
  br i1 %exitcond631.not, label %._crit_edge561, label %.lr.ph560, !llvm.loop !67

._crit_edge561.critedge:                          ; preds = %226
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %11) #4
  %247 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6) #4
  br label %._crit_edge561

._crit_edge561:                                   ; preds = %.lr.ph560, %._crit_edge561.critedge, %._crit_edge557
  %248 = icmp eq i64 %.1471, %.0489567
  %.str.7..str.8 = select i1 %248, ptr @.str.7, ptr @.str.8
  %249 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull %.str.7..str.8) #4
  br label %250

250:                                              ; preds = %._crit_edge561, %.loopexit516
  %251 = load i64, ptr %204, align 8, !tbaa !55
  %252 = load i64, ptr %202, align 8, !tbaa !55
  store i64 %252, ptr %204, align 8, !tbaa !55
  store i64 %251, ptr %202, align 8, !tbaa !55
  %253 = icmp eq i64 %251, 0
  br i1 %253, label %254, label %thread-pre-split

254:                                              ; preds = %250
  %255 = getelementptr inbounds i64, ptr %32, i64 %190
  %256 = load i64, ptr %255, align 8, !tbaa !55
  %.not505 = icmp eq i64 %256, -1
  br i1 %.not505, label %thread-pre-split.thread, label %257

257:                                              ; preds = %254
  %258 = getelementptr inbounds i64, ptr %16, i64 %190
  %259 = load i64, ptr %258, align 8, !tbaa !55
  %260 = getelementptr i8, ptr %258, i64 8
  %261 = load i64, ptr %260, align 8, !tbaa !55
  %262 = icmp slt i64 %259, %261
  br i1 %262, label %263, label %thread-pre-split.thread

263:                                              ; preds = %257
  %264 = add nsw i64 %.0479568, -1
  %265 = getelementptr inbounds i64, ptr %34, i64 %264
  %266 = load i64, ptr %265, align 8, !tbaa !55
  %267 = getelementptr inbounds i64, ptr %34, i64 %256
  store i64 %266, ptr %267, align 8, !tbaa !55
  %268 = load i64, ptr %255, align 8, !tbaa !55
  %269 = getelementptr inbounds i64, ptr %32, i64 %266
  store i64 %268, ptr %269, align 8, !tbaa !55
  store i64 -1, ptr %255, align 8, !tbaa !55
  %.pr.pre = load i64, ptr %202, align 8, !tbaa !55
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %263, %250
  %270 = phi i64 [ %251, %250 ], [ %.pr.pre, %263 ]
  %.1480 = phi i64 [ %.0479568, %250 ], [ %264, %263 ]
  %271 = icmp sgt i64 %270, 0
  br i1 %271, label %272, label %thread-pre-split.thread

272:                                              ; preds = %thread-pre-split
  %273 = getelementptr inbounds i64, ptr %32, i64 %190
  %274 = load i64, ptr %273, align 8, !tbaa !55
  %275 = icmp eq i64 %274, -1
  br i1 %275, label %276, label %thread-pre-split.thread

276:                                              ; preds = %272
  %277 = getelementptr inbounds i64, ptr %34, i64 %.1480
  store i64 %190, ptr %277, align 8, !tbaa !55
  %278 = add nsw i64 %.1480, 1
  store i64 %.1480, ptr %273, align 8, !tbaa !55
  br label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %257, %254, %276, %272, %thread-pre-split
  %.2481 = phi i64 [ %278, %276 ], [ %.1480, %272 ], [ %.1480, %thread-pre-split ], [ %.0479568, %254 ], [ %.0479568, %257 ]
  %279 = getelementptr inbounds i64, ptr %16, i64 %190
  %280 = load i64, ptr %279, align 8, !tbaa !55
  %281 = getelementptr i8, ptr %279, i64 8
  %282 = load i64, ptr %281, align 8, !tbaa !55
  %283 = icmp slt i64 %280, %282
  br i1 %283, label %.lr.ph565, label %._crit_edge566

.lr.ph565:                                        ; preds = %thread-pre-split.thread, %.thread
  %.1476563 = phi i64 [ %334, %.thread ], [ %280, %thread-pre-split.thread ]
  %.3482562 = phi i64 [ %.4483, %.thread ], [ %.2481, %thread-pre-split.thread ]
  %284 = getelementptr inbounds i64, ptr %20, i64 %.1476563
  %285 = load i64, ptr %284, align 8, !tbaa !55
  %286 = getelementptr inbounds i64, ptr %28, i64 %285
  %287 = load i64, ptr %286, align 8, !tbaa !55
  %288 = getelementptr inbounds i64, ptr %26, i64 %285
  %289 = load i64, ptr %288, align 8, !tbaa !55
  %290 = getelementptr inbounds i64, ptr %24, i64 %285
  %291 = load i64, ptr %290, align 8, !tbaa !55
  %292 = icmp eq i64 %185, %291
  %293 = getelementptr inbounds i64, ptr %22, i64 %.1476563
  %294 = load i64, ptr %293, align 8, !tbaa !55
  %295 = sub nsw i64 0, %294
  %296 = select i1 %292, i64 %294, i64 %295
  %297 = add nsw i64 %296, %289
  store i64 %297, ptr %288, align 8, !tbaa !55
  %298 = load i64, ptr %286, align 8, !tbaa !55
  %299 = sub nsw i64 %298, %296
  store i64 %299, ptr %286, align 8, !tbaa !55
  %300 = getelementptr inbounds i64, ptr %35, i64 %285
  %301 = load i64, ptr %300, align 8, !tbaa !55
  %302 = icmp eq i64 %301, -1
  br i1 %302, label %303, label %312

303:                                              ; preds = %.lr.ph565
  %304 = sub nsw i64 %287, %289
  %305 = getelementptr inbounds i64, ptr %38, i64 %285
  %306 = load i64, ptr %305, align 8, !tbaa !55
  %307 = load i64, ptr %290, align 8, !tbaa !55
  %308 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %306, i64 %307
  %309 = load i64, ptr %288, align 8, !tbaa !55
  %310 = sub nsw i64 %299, %309
  %311 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %308, i64 noundef %285, i64 noundef %304, i64 noundef %310) #4
  %.pr511 = load i64, ptr %286, align 8, !tbaa !55
  br label %312

312:                                              ; preds = %303, %.lr.ph565
  %313 = phi i64 [ %.pr511, %303 ], [ %299, %.lr.ph565 ]
  %314 = icmp eq i64 %313, 0
  br i1 %314, label %315, label %325

315:                                              ; preds = %312
  %316 = getelementptr inbounds i64, ptr %32, i64 %285
  %317 = load i64, ptr %316, align 8, !tbaa !55
  %.not506 = icmp eq i64 %317, -1
  br i1 %.not506, label %.thread, label %318

318:                                              ; preds = %315
  %319 = add nsw i64 %.3482562, -1
  %320 = getelementptr inbounds i64, ptr %34, i64 %319
  %321 = load i64, ptr %320, align 8, !tbaa !55
  %322 = getelementptr inbounds i64, ptr %34, i64 %317
  store i64 %321, ptr %322, align 8, !tbaa !55
  %323 = load i64, ptr %316, align 8, !tbaa !55
  %324 = getelementptr inbounds i64, ptr %32, i64 %321
  store i64 %323, ptr %324, align 8, !tbaa !55
  store i64 -1, ptr %316, align 8, !tbaa !55
  br label %.thread

325:                                              ; preds = %312
  %326 = icmp sgt i64 %313, 0
  br i1 %326, label %327, label %.thread

327:                                              ; preds = %325
  %328 = getelementptr inbounds i64, ptr %32, i64 %285
  %329 = load i64, ptr %328, align 8, !tbaa !55
  %330 = icmp eq i64 %329, -1
  br i1 %330, label %331, label %.thread

331:                                              ; preds = %327
  %332 = getelementptr inbounds i64, ptr %34, i64 %.3482562
  store i64 %285, ptr %332, align 8, !tbaa !55
  %333 = add nsw i64 %.3482562, 1
  store i64 %.3482562, ptr %328, align 8, !tbaa !55
  br label %.thread

.thread:                                          ; preds = %315, %318, %331, %327, %325
  %.4483 = phi i64 [ %319, %318 ], [ %333, %331 ], [ %.3482562, %327 ], [ %.3482562, %325 ], [ %.3482562, %315 ]
  %334 = add nsw i64 %.1476563, 1
  %335 = load i64, ptr %281, align 8, !tbaa !55
  %336 = icmp slt i64 %334, %335
  br i1 %336, label %.lr.ph565, label %._crit_edge566, !llvm.loop !68

._crit_edge566:                                   ; preds = %.thread, %thread-pre-split.thread
  %.3482.lcssa = phi i64 [ %.2481, %thread-pre-split.thread ], [ %.4483, %.thread ]
  %337 = add nuw nsw i64 %.0489567, 1
  %exitcond632.not = icmp eq i64 %337, %12
  br i1 %exitcond632.not, label %.lr.ph595.preheader, label %180, !llvm.loop !69

.loopexit518:                                     ; preds = %180, %187, %182, %215
  %.not618 = icmp eq i64 %.0489567, 0
  br i1 %.not618, label %.preheader, label %.lr.ph595.preheader

.lr.ph595.preheader:                              ; preds = %._crit_edge566, %.loopexit518
  %.0470523657 = phi i64 [ %.0470572, %.loopexit518 ], [ %.1471, %._crit_edge566 ]
  %.0473525656 = phi i64 [ %.0473570, %.loopexit518 ], [ %.1474, %._crit_edge566 ]
  %.0479527655 = phi i64 [ %.0479568, %.loopexit518 ], [ %.3482.lcssa, %._crit_edge566 ]
  %.0489529654 = phi i64 [ %.0489567, %.loopexit518 ], [ %12, %._crit_edge566 ]
  %xtraiter = and i64 %.0489529654, 3
  %338 = icmp ult i64 %.0489529654, 4
  br i1 %338, label %.preheader.loopexit.unr-lcssa, label %.lr.ph595.preheader.new

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

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

.lr.ph595.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph595.epil
  %.8593.epil = phi i64 [ %342, %.lr.ph595.epil ], [ %.8593.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph595.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %339 = getelementptr inbounds i64, ptr %36, i64 %.8593.epil
  %340 = load i64, ptr %339, align 8, !tbaa !55
  %341 = getelementptr inbounds i64, ptr %35, i64 %340
  store i64 -1, ptr %341, align 8, !tbaa !55
  %342 = add nuw nsw i64 %.8593.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader.loopexit, label %.lr.ph595.epil, !llvm.loop !70

.preheader.loopexit:                              ; preds = %.lr.ph595.epil, %.preheader.loopexit.unr-lcssa
  %343 = add nsw i64 %.0489529654, -1
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %160, %.preheader517, %.loopexit518
  %.0470523647 = phi i64 [ %.0470572, %.loopexit518 ], [ -1, %.preheader517 ], [ -1, %160 ], [ %.0470523657, %.preheader.loopexit ]
  %.0473525646 = phi i64 [ %.0473570, %.loopexit518 ], [ %118, %.preheader517 ], [ %118, %160 ], [ %.0473525656, %.preheader.loopexit ]
  %.0479527645 = phi i64 [ %.0479568, %.loopexit518 ], [ %163, %.preheader517 ], [ %163, %160 ], [ %.0479527655, %.preheader.loopexit ]
  %.0489529644 = phi i64 [ -1, %.loopexit518 ], [ -1, %.preheader517 ], [ -1, %160 ], [ %343, %.preheader.loopexit ]
  %344 = icmp sgt i64 %.0489529644, %.0470523647
  br i1 %344, label %.lr.ph603, label %._crit_edge604

.lr.ph595:                                        ; preds = %.lr.ph595, %.lr.ph595.preheader.new
  %.8593 = phi i64 [ 0, %.lr.ph595.preheader.new ], [ %360, %.lr.ph595 ]
  %niter = phi i64 [ 0, %.lr.ph595.preheader.new ], [ %niter.next.3, %.lr.ph595 ]
  %345 = getelementptr inbounds i64, ptr %36, i64 %.8593
  %346 = load i64, ptr %345, align 8, !tbaa !55
  %347 = getelementptr inbounds i64, ptr %35, i64 %346
  store i64 -1, ptr %347, align 8, !tbaa !55
  %348 = or disjoint i64 %.8593, 1
  %349 = getelementptr inbounds i64, ptr %36, i64 %348
  %350 = load i64, ptr %349, align 8, !tbaa !55
  %351 = getelementptr inbounds i64, ptr %35, i64 %350
  store i64 -1, ptr %351, align 8, !tbaa !55
  %352 = or disjoint i64 %.8593, 2
  %353 = getelementptr inbounds i64, ptr %36, i64 %352
  %354 = load i64, ptr %353, align 8, !tbaa !55
  %355 = getelementptr inbounds i64, ptr %35, i64 %354
  store i64 -1, ptr %355, align 8, !tbaa !55
  %356 = or disjoint i64 %.8593, 3
  %357 = getelementptr inbounds i64, ptr %36, i64 %356
  %358 = load i64, ptr %357, align 8, !tbaa !55
  %359 = getelementptr inbounds i64, ptr %35, i64 %358
  store i64 -1, ptr %359, align 8, !tbaa !55
  %360 = add nuw nsw i64 %.8593, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph595, !llvm.loop !72

.loopexit:                                        ; preds = %445, %.thread512
  %.7486.lcssa = phi i64 [ %.6485, %.thread512 ], [ %.9488, %445 ]
  %.1490 = add nsw i64 %.1490602, -1
  %361 = icmp sgt i64 %.1490, %.0470523647
  br i1 %361, label %.lr.ph603, label %._crit_edge604, !llvm.loop !73

.lr.ph603:                                        ; preds = %.preheader, %.loopexit
  %.1490602 = phi i64 [ %.1490, %.loopexit ], [ %.0489529644, %.preheader ]
  %.5484601 = phi i64 [ %.7486.lcssa, %.loopexit ], [ %.0479527645, %.preheader ]
  %362 = getelementptr inbounds i64, ptr %36, i64 %.1490602
  %363 = load i64, ptr %362, align 8, !tbaa !55
  %364 = getelementptr inbounds i64, ptr %24, i64 %363
  %365 = load i64, ptr %364, align 8, !tbaa !55
  %366 = add nsw i64 %365, 1
  %367 = srem i64 %366, 2
  store i64 %367, ptr %364, align 8, !tbaa !55
  %368 = getelementptr inbounds i64, ptr %26, i64 %363
  %369 = load i64, ptr %368, align 8, !tbaa !55
  %370 = getelementptr inbounds i64, ptr %28, i64 %363
  %371 = load i64, ptr %370, align 8, !tbaa !55
  store i64 %371, ptr %368, align 8, !tbaa !55
  store i64 %369, ptr %370, align 8, !tbaa !55
  %372 = icmp eq i64 %369, 0
  br i1 %372, label %373, label %389

373:                                              ; preds = %.lr.ph603
  %374 = getelementptr inbounds i64, ptr %32, i64 %363
  %375 = load i64, ptr %374, align 8, !tbaa !55
  %.not508 = icmp eq i64 %375, -1
  br i1 %.not508, label %.thread512, label %376

376:                                              ; preds = %373
  %377 = getelementptr inbounds i64, ptr %16, i64 %363
  %378 = load i64, ptr %377, align 8, !tbaa !55
  %379 = getelementptr i8, ptr %377, i64 8
  %380 = load i64, ptr %379, align 8, !tbaa !55
  %381 = icmp slt i64 %378, %380
  br i1 %381, label %382, label %.thread512

382:                                              ; preds = %376
  %383 = add nsw i64 %.5484601, -1
  %384 = getelementptr inbounds i64, ptr %34, i64 %383
  %385 = load i64, ptr %384, align 8, !tbaa !55
  %386 = getelementptr inbounds i64, ptr %34, i64 %375
  store i64 %385, ptr %386, align 8, !tbaa !55
  %387 = load i64, ptr %374, align 8, !tbaa !55
  %388 = getelementptr inbounds i64, ptr %32, i64 %385
  store i64 %387, ptr %388, align 8, !tbaa !55
  store i64 -1, ptr %374, align 8, !tbaa !55
  br label %.thread512

389:                                              ; preds = %.lr.ph603
  %390 = icmp sgt i64 %369, 0
  br i1 %390, label %391, label %.thread512

391:                                              ; preds = %389
  %392 = getelementptr inbounds i64, ptr %32, i64 %363
  %393 = load i64, ptr %392, align 8, !tbaa !55
  %394 = icmp eq i64 %393, -1
  br i1 %394, label %395, label %.thread512

395:                                              ; preds = %391
  %396 = getelementptr inbounds i64, ptr %34, i64 %.5484601
  store i64 %363, ptr %396, align 8, !tbaa !55
  %397 = add nsw i64 %.5484601, 1
  store i64 %.5484601, ptr %392, align 8, !tbaa !55
  br label %.thread512

.thread512:                                       ; preds = %373, %376, %389, %391, %395, %382
  %.6485 = phi i64 [ %383, %382 ], [ %397, %395 ], [ %.5484601, %391 ], [ %.5484601, %389 ], [ %.5484601, %376 ], [ %.5484601, %373 ]
  %398 = mul nsw i64 %363, %14
  %399 = getelementptr inbounds float, ptr %18, i64 %398
  %400 = mul nsw i64 %367, %14
  %401 = getelementptr inbounds float, ptr %30, i64 %400
  %402 = call ptr @gk_faxpy(i64 noundef %14, float noundef 1.000000e+00, ptr noundef %399, i64 noundef 1, ptr noundef %401, i64 noundef 1) #4
  %403 = and i64 %367, 1
  %404 = xor i64 %403, 1
  %405 = mul nuw nsw i64 %404, %14
  %406 = getelementptr inbounds float, ptr %30, i64 %405
  %407 = call ptr @gk_faxpy(i64 noundef %14, float noundef -1.000000e+00, ptr noundef %399, i64 noundef 1, ptr noundef %406, i64 noundef 1) #4
  %408 = getelementptr inbounds i64, ptr %16, i64 %363
  %409 = load i64, ptr %408, align 8, !tbaa !55
  %410 = getelementptr i8, ptr %408, i64 8
  %411 = load i64, ptr %410, align 8, !tbaa !55
  %412 = icmp slt i64 %409, %411
  br i1 %412, label %.lr.ph598, label %.loopexit

.lr.ph598:                                        ; preds = %.thread512, %445
  %.2477597 = phi i64 [ %446, %445 ], [ %409, %.thread512 ]
  %.7486596 = phi i64 [ %.9488, %445 ], [ %.6485, %.thread512 ]
  %413 = getelementptr inbounds i64, ptr %20, i64 %.2477597
  %414 = load i64, ptr %413, align 8, !tbaa !55
  %415 = getelementptr inbounds i64, ptr %24, i64 %414
  %416 = load i64, ptr %415, align 8, !tbaa !55
  %417 = icmp eq i64 %367, %416
  %418 = getelementptr inbounds i64, ptr %22, i64 %.2477597
  %419 = load i64, ptr %418, align 8, !tbaa !55
  %420 = sub nsw i64 0, %419
  %421 = select i1 %417, i64 %419, i64 %420
  %422 = getelementptr inbounds i64, ptr %26, i64 %414
  %423 = load i64, ptr %422, align 8, !tbaa !55
  %424 = add nsw i64 %423, %421
  store i64 %424, ptr %422, align 8, !tbaa !55
  %425 = getelementptr inbounds i64, ptr %28, i64 %414
  %426 = load i64, ptr %425, align 8, !tbaa !55
  %427 = sub nsw i64 %426, %421
  store i64 %427, ptr %425, align 8, !tbaa !55
  %428 = getelementptr inbounds i64, ptr %32, i64 %414
  %429 = load i64, ptr %428, align 8, !tbaa !55
  %.not509 = icmp ne i64 %429, -1
  %430 = icmp eq i64 %426, %421
  %or.cond510 = select i1 %.not509, i1 %430, i1 false
  br i1 %or.cond510, label %.thread513, label %437

.thread513:                                       ; preds = %.lr.ph598
  %431 = add nsw i64 %.7486596, -1
  %432 = getelementptr inbounds i64, ptr %34, i64 %431
  %433 = load i64, ptr %432, align 8, !tbaa !55
  %434 = getelementptr inbounds i64, ptr %34, i64 %429
  store i64 %433, ptr %434, align 8, !tbaa !55
  %435 = load i64, ptr %428, align 8, !tbaa !55
  %436 = getelementptr inbounds i64, ptr %32, i64 %433
  store i64 %435, ptr %436, align 8, !tbaa !55
  store i64 -1, ptr %428, align 8, !tbaa !55
  %.pre = load i64, ptr %425, align 8, !tbaa !55
  br label %439

437:                                              ; preds = %.lr.ph598
  %438 = icmp eq i64 %429, -1
  br i1 %438, label %439, label %445

439:                                              ; preds = %.thread513, %437
  %440 = phi i64 [ %.pre, %.thread513 ], [ %427, %437 ]
  %.8487515 = phi i64 [ %431, %.thread513 ], [ %.7486596, %437 ]
  %441 = icmp sgt i64 %440, 0
  br i1 %441, label %442, label %445

442:                                              ; preds = %439
  %443 = getelementptr inbounds i64, ptr %34, i64 %.8487515
  store i64 %414, ptr %443, align 8, !tbaa !55
  %444 = add nsw i64 %.8487515, 1
  store i64 %.8487515, ptr %428, align 8, !tbaa !55
  br label %445

445:                                              ; preds = %437, %439, %442
  %.9488 = phi i64 [ %444, %442 ], [ %.8487515, %439 ], [ %.7486596, %437 ]
  %446 = add nsw i64 %.2477597, 1
  %447 = load i64, ptr %410, align 8, !tbaa !55
  %448 = icmp slt i64 %446, %447
  br i1 %448, label %.lr.ph598, label %.loopexit, !llvm.loop !74

._crit_edge604:                                   ; preds = %.loopexit, %.preheader
  %.5484.lcssa = phi i64 [ %.0479527645, %.preheader ], [ %.7486.lcssa, %.loopexit ]
  %449 = load i64, ptr %119, align 8, !tbaa !58
  %450 = and i64 %449, 8
  %.not507 = icmp eq i64 %450, 0
  br i1 %.not507, label %471, label %451

451:                                              ; preds = %._crit_edge604
  %452 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.9, i64 noundef %.0473525646, i64 noundef %.0470523647, i64 noundef %.5484.lcssa) #4
  br i1 %48, label %.lr.ph608, label %._crit_edge613.critedge

.lr.ph608:                                        ; preds = %451
  %453 = getelementptr float, ptr %30, i64 %14
  br label %454

454:                                              ; preds = %.lr.ph608, %454
  %.9606 = phi i64 [ 0, %.lr.ph608 ], [ %462, %454 ]
  %455 = getelementptr inbounds float, ptr %30, i64 %.9606
  %456 = load float, ptr %455, align 4, !tbaa !23
  %457 = fpext float %456 to double
  %458 = getelementptr float, ptr %453, i64 %.9606
  %459 = load float, ptr %458, align 4, !tbaa !23
  %460 = fpext float %459 to double
  %461 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %457, double noundef %460) #4
  %462 = add nuw nsw i64 %.9606, 1
  %exitcond634.not = icmp eq i64 %462, %14
  br i1 %exitcond634.not, label %._crit_edge609, label %454, !llvm.loop !75

._crit_edge609:                                   ; preds = %454
  %463 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.10) #4
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %11) #4
  br i1 %48, label %.lr.ph612, label %._crit_edge613

.lr.ph612:                                        ; preds = %._crit_edge609, %.lr.ph612
  %.10610 = phi i64 [ %468, %.lr.ph612 ], [ 0, %._crit_edge609 ]
  %464 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %.10610
  %465 = load float, ptr %464, align 4, !tbaa !23
  %466 = fpext float %465 to double
  %467 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, double noundef %466) #4
  %468 = add nuw nsw i64 %.10610, 1
  %exitcond635.not = icmp eq i64 %468, %14
  br i1 %exitcond635.not, label %._crit_edge613, label %.lr.ph612, !llvm.loop !76

._crit_edge613.critedge:                          ; preds = %451
  %469 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.10) #4
  call void @libmetis__Compute2WayHLoadImbalanceVec(i64 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %11) #4
  br label %._crit_edge613

._crit_edge613:                                   ; preds = %.lr.ph612, %._crit_edge613.critedge, %._crit_edge609
  %470 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.8) #4
  br label %471

471:                                              ; preds = %._crit_edge613, %._crit_edge604
  store i64 %.0473525646, ptr %117, align 8, !tbaa !57
  store i64 %.5484.lcssa, ptr %162, align 8, !tbaa !63
  br i1 %48, label %.lr.ph616, label %._crit_edge617

.lr.ph616:                                        ; preds = %471, %.lr.ph616
  %.11614 = phi i64 [ %474, %.lr.ph616 ], [ 0, %471 ]
  %472 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %.11614
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %472) #4
  %473 = getelementptr inbounds i8, ptr %472, i64 88
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %473) #4
  %474 = add nuw nsw i64 %.11614, 1
  %exitcond636.not = icmp eq i64 %474, %14
  br i1 %exitcond636.not, label %._crit_edge617, label %.lr.ph616, !llvm.loop !77

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

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

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

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

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

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

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

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

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

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

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

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

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


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