; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis (mkwayfmh)

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

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

@.str = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 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 ptr @libmetis__fwspacemalloc(ptr noundef, i64 noundef) #1

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

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

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

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

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

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

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

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

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

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MCGreedy_KWayEdgeBalanceHorizontal(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, i64 noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, 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 %struct.PQueueType, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca [16 x float], align 16
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i64 %2, ptr %8, align 8, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  store i64 %4, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 88, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #4
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.graphdef, ptr %46, i32 0, i32 0
  %48 = load i64, ptr %47, align 8, !tbaa !11
  store i64 %48, ptr %19, align 8, !tbaa !9
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.graphdef, ptr %49, i32 0, i32 28
  %51 = load i64, ptr %50, align 8, !tbaa !14
  store i64 %51, ptr %20, align 8, !tbaa !9
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.graphdef, ptr %52, i32 0, i32 2
  %54 = load ptr, ptr %53, align 8, !tbaa !15
  store ptr %54, ptr %30, align 8, !tbaa !5
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.graphdef, ptr %55, i32 0, i32 5
  %57 = load ptr, ptr %56, align 8, !tbaa !16
  store ptr %57, ptr %31, align 8, !tbaa !5
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.graphdef, ptr %58, i32 0, i32 6
  %60 = load ptr, ptr %59, align 8, !tbaa !17
  store ptr %60, ptr %32, align 8, !tbaa !5
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.graphdef, ptr %61, i32 0, i32 22
  %63 = load ptr, ptr %62, align 8, !tbaa !18
  store ptr %63, ptr %36, align 8, !tbaa !5
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.graphdef, ptr %64, i32 0, i32 21
  %66 = load ptr, ptr %65, align 8, !tbaa !19
  store ptr %66, ptr %35, align 8, !tbaa !5
  %67 = load ptr, ptr %7, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.graphdef, ptr %67, i32 0, i32 18
  %69 = load ptr, ptr %68, align 8, !tbaa !20
  store ptr %69, ptr %33, align 8, !tbaa !5
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.graphdef, ptr %70, i32 0, i32 30
  %72 = load ptr, ptr %71, align 8, !tbaa !21
  store ptr %72, ptr %41, align 8, !tbaa !5
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = load i64, ptr %20, align 8, !tbaa !9
  %75 = load i64, ptr %8, align 8, !tbaa !9
  %76 = mul nsw i64 %74, %75
  %77 = call ptr @libmetis__fwspacemalloc(ptr noundef %73, i64 noundef %76)
  store ptr %77, ptr %43, align 8, !tbaa !5
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = load i64, ptr %20, align 8, !tbaa !9
  %80 = load i64, ptr %8, align 8, !tbaa !9
  %81 = mul nsw i64 %79, %80
  %82 = call ptr @libmetis__fwspacemalloc(ptr noundef %78, i64 noundef %81)
  store ptr %82, ptr %44, align 8, !tbaa !5
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %83

83:                                               ; preds = %128, %5
  %84 = load i64, ptr %11, align 8, !tbaa !9
  %85 = load i64, ptr %8, align 8, !tbaa !9
  %86 = icmp slt i64 %84, %85
  br i1 %86, label %87, label %131

87:                                               ; preds = %83
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %88

88:                                               ; preds = %124, %87
  %89 = load i64, ptr %14, align 8, !tbaa !9
  %90 = load i64, ptr %20, align 8, !tbaa !9
  %91 = icmp slt i64 %89, %90
  br i1 %91, label %92, label %127

92:                                               ; preds = %88
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = load i64, ptr %14, align 8, !tbaa !9
  %95 = getelementptr inbounds float, ptr %93, i64 %94
  %96 = load float, ptr %95, align 4, !tbaa !22
  %97 = load i64, ptr %8, align 8, !tbaa !9
  %98 = sitofp i64 %97 to float
  %99 = fdiv float %96, %98
  %100 = load ptr, ptr %44, align 8, !tbaa !5
  %101 = load i64, ptr %11, align 8, !tbaa !9
  %102 = load i64, ptr %20, align 8, !tbaa !9
  %103 = mul nsw i64 %101, %102
  %104 = load i64, ptr %14, align 8, !tbaa !9
  %105 = add nsw i64 %103, %104
  %106 = getelementptr inbounds float, ptr %100, i64 %105
  store float %99, ptr %106, align 4, !tbaa !22
  %107 = load ptr, ptr %9, align 8, !tbaa !5
  %108 = load i64, ptr %14, align 8, !tbaa !9
  %109 = getelementptr inbounds float, ptr %107, i64 %108
  %110 = load float, ptr %109, align 4, !tbaa !22
  %111 = load i64, ptr %8, align 8, !tbaa !9
  %112 = sitofp i64 %111 to float
  %113 = fmul float %110, %112
  %114 = fpext float %113 to double
  %115 = fdiv double 1.000000e+00, %114
  %116 = fptrunc double %115 to float
  %117 = load ptr, ptr %43, align 8, !tbaa !5
  %118 = load i64, ptr %11, align 8, !tbaa !9
  %119 = load i64, ptr %20, align 8, !tbaa !9
  %120 = mul nsw i64 %118, %119
  %121 = load i64, ptr %14, align 8, !tbaa !9
  %122 = add nsw i64 %120, %121
  %123 = getelementptr inbounds float, ptr %117, i64 %122
  store float %116, ptr %123, align 4, !tbaa !22
  br label %124

124:                                              ; preds = %92
  %125 = load i64, ptr %14, align 8, !tbaa !9
  %126 = add nsw i64 %125, 1
  store i64 %126, ptr %14, align 8, !tbaa !9
  br label %88, !llvm.loop !24

127:                                              ; preds = %88
  br label %128

128:                                              ; preds = %127
  %129 = load i64, ptr %11, align 8, !tbaa !9
  %130 = add nsw i64 %129, 1
  store i64 %130, ptr %11, align 8, !tbaa !9
  br label %83, !llvm.loop !26

131:                                              ; preds = %83
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = load i64, ptr %19, align 8, !tbaa !9
  %134 = call ptr @libmetis__idxwspacemalloc(ptr noundef %132, i64 noundef %133)
  store ptr %134, ptr %34, align 8, !tbaa !5
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = load i64, ptr %19, align 8, !tbaa !9
  %137 = call ptr @libmetis__idxwspacemalloc(ptr noundef %135, i64 noundef %136)
  store ptr %137, ptr %37, align 8, !tbaa !5
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = load i64, ptr %19, align 8, !tbaa !9
  %140 = load ptr, ptr %7, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.graphdef, ptr %140, i32 0, i32 13
  %142 = load ptr, ptr %141, align 8, !tbaa !27
  %143 = load i64, ptr %19, align 8, !tbaa !9
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.graphdef, ptr %144, i32 0, i32 13
  %146 = load ptr, ptr %145, align 8, !tbaa !27
  %147 = call i64 @libmetis__idxargmax(i64 noundef %143, ptr noundef %146)
  %148 = getelementptr inbounds i64, ptr %142, i64 %147
  %149 = load i64, ptr %148, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %138, ptr noundef %40, i64 noundef %139, i64 noundef %149)
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.controldef, ptr %150, i32 0, i32 1
  %152 = load i64, ptr %151, align 8, !tbaa !28
  %153 = and i64 %152, 8
  %154 = icmp ne i64 %153, 0
  br i1 %154, label %155, label %203

155:                                              ; preds = %131
  %156 = load ptr, ptr %41, align 8, !tbaa !5
  %157 = load i64, ptr %20, align 8, !tbaa !9
  %158 = load i64, ptr %8, align 8, !tbaa !9
  %159 = mul nsw i64 %157, %158
  %160 = load ptr, ptr %41, align 8, !tbaa !5
  %161 = call i64 @gk_fargmin(i64 noundef %159, ptr noundef %160)
  %162 = getelementptr inbounds float, ptr %156, i64 %161
  %163 = load float, ptr %162, align 4, !tbaa !22
  %164 = fpext float %163 to double
  %165 = load ptr, ptr %41, align 8, !tbaa !5
  %166 = load i64, ptr %20, align 8, !tbaa !9
  %167 = load i64, ptr %8, align 8, !tbaa !9
  %168 = mul nsw i64 %166, %167
  %169 = load ptr, ptr %41, align 8, !tbaa !5
  %170 = call i64 @gk_fargmax(i64 noundef %168, ptr noundef %169)
  %171 = getelementptr inbounds float, ptr %165, i64 %170
  %172 = load float, ptr %171, align 4, !tbaa !22
  %173 = fpext float %172 to double
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.graphdef, ptr %174, i32 0, i32 0
  %176 = load i64, ptr %175, align 8, !tbaa !11
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.graphdef, ptr %177, i32 0, i32 20
  %179 = load i64, ptr %178, align 8, !tbaa !32
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.graphdef, ptr %180, i32 0, i32 16
  %182 = load i64, ptr %181, align 8, !tbaa !33
  %183 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, double noundef %164, double noundef %173, i64 noundef %176, i64 noundef %179, i64 noundef %182)
  %184 = load i64, ptr %20, align 8, !tbaa !9
  %185 = load i64, ptr %8, align 8, !tbaa !9
  %186 = load ptr, ptr %41, align 8, !tbaa !5
  %187 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %184, i64 noundef %185, ptr noundef %186, ptr noundef %187)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %188

188:                                              ; preds = %198, %155
  %189 = load i64, ptr %11, align 8, !tbaa !9
  %190 = load i64, ptr %20, align 8, !tbaa !9
  %191 = icmp slt i64 %189, %190
  br i1 %191, label %192, label %201

192:                                              ; preds = %188
  %193 = load i64, ptr %11, align 8, !tbaa !9
  %194 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %193
  %195 = load float, ptr %194, align 4, !tbaa !22
  %196 = fpext float %195 to double
  %197 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %196)
  br label %198

198:                                              ; preds = %192
  %199 = load i64, ptr %11, align 8, !tbaa !9
  %200 = add nsw i64 %199, 1
  store i64 %200, ptr %11, align 8, !tbaa !9
  br label %188, !llvm.loop !34

201:                                              ; preds = %188
  %202 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5)
  br label %203

203:                                              ; preds = %201, %131
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %204

204:                                              ; preds = %1022, %203
  %205 = load i64, ptr %18, align 8, !tbaa !9
  %206 = load i64, ptr %10, align 8, !tbaa !9
  %207 = icmp slt i64 %205, %206
  br i1 %207, label %208, label %1025

208:                                              ; preds = %204
  %209 = load i64, ptr %20, align 8, !tbaa !9
  %210 = load i64, ptr %8, align 8, !tbaa !9
  %211 = load ptr, ptr %41, align 8, !tbaa !5
  %212 = load ptr, ptr %9, align 8, !tbaa !5
  %213 = call i64 @libmetis__MocIsHBalanced(i64 noundef %209, i64 noundef %210, ptr noundef %211, ptr noundef %212)
  %214 = icmp ne i64 %213, 0
  br i1 %214, label %215, label %216

215:                                              ; preds = %208
  br label %1025

216:                                              ; preds = %208
  call void @libmetis__PQueueReset(ptr noundef %40)
  %217 = load i64, ptr %19, align 8, !tbaa !9
  %218 = load ptr, ptr %37, align 8, !tbaa !5
  %219 = call ptr @libmetis__idxset(i64 noundef %217, i64 noundef -1, ptr noundef %218)
  %220 = load ptr, ptr %7, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.graphdef, ptr %220, i32 0, i32 16
  %222 = load i64, ptr %221, align 8, !tbaa !33
  store i64 %222, ptr %29, align 8, !tbaa !9
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.graphdef, ptr %223, i32 0, i32 20
  %225 = load i64, ptr %224, align 8, !tbaa !32
  store i64 %225, ptr %21, align 8, !tbaa !9
  %226 = load i64, ptr %21, align 8, !tbaa !9
  %227 = load ptr, ptr %34, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %226, ptr noundef %227, i64 noundef 1)
  store i64 0, ptr %12, align 8, !tbaa !9
  br label %228

228:                                              ; preds = %260, %216
  %229 = load i64, ptr %12, align 8, !tbaa !9
  %230 = load i64, ptr %21, align 8, !tbaa !9
  %231 = icmp slt i64 %229, %230
  br i1 %231, label %232, label %263

232:                                              ; preds = %228
  %233 = load ptr, ptr %36, align 8, !tbaa !5
  %234 = load ptr, ptr %34, align 8, !tbaa !5
  %235 = load i64, ptr %12, align 8, !tbaa !9
  %236 = getelementptr inbounds i64, ptr %234, i64 %235
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = getelementptr inbounds i64, ptr %233, i64 %237
  %239 = load i64, ptr %238, align 8, !tbaa !9
  store i64 %239, ptr %11, align 8, !tbaa !9
  %240 = load i64, ptr %11, align 8, !tbaa !9
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.graphdef, ptr %241, i32 0, i32 25
  %243 = load ptr, ptr %242, align 8, !tbaa !35
  %244 = load i64, ptr %11, align 8, !tbaa !9
  %245 = getelementptr inbounds %struct.rinfodef, ptr %243, i64 %244
  %246 = getelementptr inbounds %struct.rinfodef, ptr %245, i32 0, i32 1
  %247 = load i64, ptr %246, align 8, !tbaa !36
  %248 = load ptr, ptr %7, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.graphdef, ptr %248, i32 0, i32 25
  %250 = load ptr, ptr %249, align 8, !tbaa !35
  %251 = load i64, ptr %11, align 8, !tbaa !9
  %252 = getelementptr inbounds %struct.rinfodef, ptr %250, i64 %251
  %253 = getelementptr inbounds %struct.rinfodef, ptr %252, i32 0, i32 0
  %254 = load i64, ptr %253, align 8, !tbaa !38
  %255 = sub nsw i64 %247, %254
  %256 = call i64 @libmetis__PQueueInsert(ptr noundef %40, i64 noundef %240, i64 noundef %255)
  %257 = load ptr, ptr %37, align 8, !tbaa !5
  %258 = load i64, ptr %11, align 8, !tbaa !9
  %259 = getelementptr inbounds i64, ptr %257, i64 %258
  store i64 2, ptr %259, align 8, !tbaa !9
  br label %260

260:                                              ; preds = %232
  %261 = load i64, ptr %12, align 8, !tbaa !9
  %262 = add nsw i64 %261, 1
  store i64 %262, ptr %12, align 8, !tbaa !9
  br label %228, !llvm.loop !39

263:                                              ; preds = %228
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %961, %458, %345, %302, %263
  %265 = call i64 @libmetis__PQueueGetMax(ptr noundef %40)
  store i64 %265, ptr %11, align 8, !tbaa !9
  %266 = icmp eq i64 %265, -1
  br i1 %266, label %267, label %268

267:                                              ; preds = %264
  br label %964

268:                                              ; preds = %264
  %269 = load ptr, ptr %37, align 8, !tbaa !5
  %270 = load i64, ptr %11, align 8, !tbaa !9
  %271 = getelementptr inbounds i64, ptr %269, i64 %270
  store i64 1, ptr %271, align 8, !tbaa !9
  %272 = load ptr, ptr %7, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.graphdef, ptr %272, i32 0, i32 25
  %274 = load ptr, ptr %273, align 8, !tbaa !35
  %275 = load i64, ptr %11, align 8, !tbaa !9
  %276 = getelementptr inbounds %struct.rinfodef, ptr %274, i64 %275
  store ptr %276, ptr %39, align 8, !tbaa !5
  %277 = load ptr, ptr %33, align 8, !tbaa !5
  %278 = load i64, ptr %11, align 8, !tbaa !9
  %279 = getelementptr inbounds i64, ptr %277, i64 %278
  %280 = load i64, ptr %279, align 8, !tbaa !9
  store i64 %280, ptr %26, align 8, !tbaa !9
  %281 = load ptr, ptr %7, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.graphdef, ptr %281, i32 0, i32 29
  %283 = load ptr, ptr %282, align 8, !tbaa !40
  %284 = load i64, ptr %11, align 8, !tbaa !9
  %285 = load i64, ptr %20, align 8, !tbaa !9
  %286 = mul nsw i64 %284, %285
  %287 = getelementptr inbounds float, ptr %283, i64 %286
  store ptr %287, ptr %42, align 8, !tbaa !5
  %288 = load i64, ptr %20, align 8, !tbaa !9
  %289 = load ptr, ptr %41, align 8, !tbaa !5
  %290 = load i64, ptr %26, align 8, !tbaa !9
  %291 = load i64, ptr %20, align 8, !tbaa !9
  %292 = mul nsw i64 %290, %291
  %293 = getelementptr inbounds float, ptr %289, i64 %292
  %294 = load ptr, ptr %42, align 8, !tbaa !5
  %295 = load ptr, ptr %43, align 8, !tbaa !5
  %296 = load i64, ptr %26, align 8, !tbaa !9
  %297 = load i64, ptr %20, align 8, !tbaa !9
  %298 = mul nsw i64 %296, %297
  %299 = getelementptr inbounds float, ptr %295, i64 %298
  %300 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %288, float noundef 1.000000e+00, ptr noundef %293, float noundef -1.000000e+00, ptr noundef %294, ptr noundef %299)
  %301 = icmp ne i64 %300, 0
  br i1 %301, label %302, label %303

302:                                              ; preds = %268
  br label %264

303:                                              ; preds = %268
  %304 = load ptr, ptr %39, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.rinfodef, ptr %304, i32 0, i32 3
  %306 = load ptr, ptr %305, align 8, !tbaa !41
  store ptr %306, ptr %38, align 8, !tbaa !5
  %307 = load ptr, ptr %39, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.rinfodef, ptr %307, i32 0, i32 2
  %309 = load i64, ptr %308, align 8, !tbaa !42
  store i64 %309, ptr %22, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %310

310:                                              ; preds = %338, %303
  %311 = load i64, ptr %16, align 8, !tbaa !9
  %312 = load i64, ptr %22, align 8, !tbaa !9
  %313 = icmp slt i64 %311, %312
  br i1 %313, label %314, label %341

314:                                              ; preds = %310
  %315 = load ptr, ptr %38, align 8, !tbaa !5
  %316 = load i64, ptr %16, align 8, !tbaa !9
  %317 = getelementptr inbounds %struct.edegreedef, ptr %315, i64 %316
  %318 = getelementptr inbounds %struct.edegreedef, ptr %317, i32 0, i32 0
  %319 = load i64, ptr %318, align 8, !tbaa !43
  store i64 %319, ptr %28, align 8, !tbaa !9
  %320 = load i64, ptr %20, align 8, !tbaa !9
  %321 = load i64, ptr %8, align 8, !tbaa !9
  %322 = load ptr, ptr %41, align 8, !tbaa !5
  %323 = load i64, ptr %26, align 8, !tbaa !9
  %324 = load i64, ptr %20, align 8, !tbaa !9
  %325 = mul nsw i64 %323, %324
  %326 = getelementptr inbounds float, ptr %322, i64 %325
  %327 = load ptr, ptr %41, align 8, !tbaa !5
  %328 = load i64, ptr %28, align 8, !tbaa !9
  %329 = load i64, ptr %20, align 8, !tbaa !9
  %330 = mul nsw i64 %328, %329
  %331 = getelementptr inbounds float, ptr %327, i64 %330
  %332 = load ptr, ptr %42, align 8, !tbaa !5
  %333 = load ptr, ptr %9, align 8, !tbaa !5
  %334 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %320, i64 noundef %321, ptr noundef %326, ptr noundef %331, ptr noundef %332, ptr noundef %333)
  %335 = icmp ne i64 %334, 0
  br i1 %335, label %336, label %337

336:                                              ; preds = %314
  br label %341

337:                                              ; preds = %314
  br label %338

338:                                              ; preds = %337
  %339 = load i64, ptr %16, align 8, !tbaa !9
  %340 = add nsw i64 %339, 1
  store i64 %340, ptr %16, align 8, !tbaa !9
  br label %310, !llvm.loop !45

341:                                              ; preds = %336, %310
  %342 = load i64, ptr %16, align 8, !tbaa !9
  %343 = load i64, ptr %22, align 8, !tbaa !9
  %344 = icmp eq i64 %342, %343
  br i1 %344, label %345, label %346

345:                                              ; preds = %341
  br label %264

346:                                              ; preds = %341
  %347 = load i64, ptr %16, align 8, !tbaa !9
  %348 = add nsw i64 %347, 1
  store i64 %348, ptr %14, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %382, %346
  %350 = load i64, ptr %14, align 8, !tbaa !9
  %351 = load i64, ptr %22, align 8, !tbaa !9
  %352 = icmp slt i64 %350, %351
  br i1 %352, label %353, label %385

353:                                              ; preds = %349
  %354 = load ptr, ptr %38, align 8, !tbaa !5
  %355 = load i64, ptr %14, align 8, !tbaa !9
  %356 = getelementptr inbounds %struct.edegreedef, ptr %354, i64 %355
  %357 = getelementptr inbounds %struct.edegreedef, ptr %356, i32 0, i32 0
  %358 = load i64, ptr %357, align 8, !tbaa !43
  store i64 %358, ptr %28, align 8, !tbaa !9
  %359 = load i64, ptr %20, align 8, !tbaa !9
  %360 = load i64, ptr %8, align 8, !tbaa !9
  %361 = load ptr, ptr %41, align 8, !tbaa !5
  %362 = load ptr, ptr %38, align 8, !tbaa !5
  %363 = load i64, ptr %16, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.edegreedef, ptr %362, i64 %363
  %365 = getelementptr inbounds %struct.edegreedef, ptr %364, i32 0, i32 0
  %366 = load i64, ptr %365, align 8, !tbaa !43
  %367 = load i64, ptr %20, align 8, !tbaa !9
  %368 = mul nsw i64 %366, %367
  %369 = getelementptr inbounds float, ptr %361, i64 %368
  %370 = load ptr, ptr %41, align 8, !tbaa !5
  %371 = load i64, ptr %28, align 8, !tbaa !9
  %372 = load i64, ptr %20, align 8, !tbaa !9
  %373 = mul nsw i64 %371, %372
  %374 = getelementptr inbounds float, ptr %370, i64 %373
  %375 = load ptr, ptr %42, align 8, !tbaa !5
  %376 = load ptr, ptr %9, align 8, !tbaa !5
  %377 = call i64 @libmetis__IsHBalanceBetterTT(i64 noundef %359, i64 noundef %360, ptr noundef %369, ptr noundef %374, ptr noundef %375, ptr noundef %376)
  %378 = icmp ne i64 %377, 0
  br i1 %378, label %379, label %381

379:                                              ; preds = %353
  %380 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %380, ptr %16, align 8, !tbaa !9
  br label %381

381:                                              ; preds = %379, %353
  br label %382

382:                                              ; preds = %381
  %383 = load i64, ptr %14, align 8, !tbaa !9
  %384 = add nsw i64 %383, 1
  store i64 %384, ptr %14, align 8, !tbaa !9
  br label %349, !llvm.loop !46

385:                                              ; preds = %349
  %386 = load ptr, ptr %38, align 8, !tbaa !5
  %387 = load i64, ptr %16, align 8, !tbaa !9
  %388 = getelementptr inbounds %struct.edegreedef, ptr %386, i64 %387
  %389 = getelementptr inbounds %struct.edegreedef, ptr %388, i32 0, i32 0
  %390 = load i64, ptr %389, align 8, !tbaa !43
  store i64 %390, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %14, align 8, !tbaa !9
  %391 = load i64, ptr %20, align 8, !tbaa !9
  %392 = load ptr, ptr %41, align 8, !tbaa !5
  %393 = load i64, ptr %26, align 8, !tbaa !9
  %394 = load i64, ptr %20, align 8, !tbaa !9
  %395 = mul nsw i64 %393, %394
  %396 = getelementptr inbounds float, ptr %392, i64 %395
  %397 = load ptr, ptr %42, align 8, !tbaa !5
  %398 = load ptr, ptr %44, align 8, !tbaa !5
  %399 = load i64, ptr %26, align 8, !tbaa !9
  %400 = load i64, ptr %20, align 8, !tbaa !9
  %401 = mul nsw i64 %399, %400
  %402 = getelementptr inbounds float, ptr %398, i64 %401
  %403 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %391, float noundef 1.000000e+00, ptr noundef %396, float noundef 0.000000e+00, ptr noundef %397, ptr noundef %402)
  %404 = icmp ne i64 %403, 0
  br i1 %404, label %408, label %405

405:                                              ; preds = %385
  %406 = load i64, ptr %14, align 8, !tbaa !9
  %407 = add nsw i64 %406, 1
  store i64 %407, ptr %14, align 8, !tbaa !9
  br label %408

408:                                              ; preds = %405, %385
  %409 = load ptr, ptr %38, align 8, !tbaa !5
  %410 = load i64, ptr %16, align 8, !tbaa !9
  %411 = getelementptr inbounds %struct.edegreedef, ptr %409, i64 %410
  %412 = getelementptr inbounds %struct.edegreedef, ptr %411, i32 0, i32 1
  %413 = load i64, ptr %412, align 8, !tbaa !47
  %414 = load ptr, ptr %39, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.rinfodef, ptr %414, i32 0, i32 0
  %416 = load i64, ptr %415, align 8, !tbaa !38
  %417 = sub nsw i64 %413, %416
  %418 = icmp sge i64 %417, 0
  br i1 %418, label %419, label %422

419:                                              ; preds = %408
  %420 = load i64, ptr %14, align 8, !tbaa !9
  %421 = add nsw i64 %420, 1
  store i64 %421, ptr %14, align 8, !tbaa !9
  br label %422

422:                                              ; preds = %419, %408
  %423 = load i64, ptr %20, align 8, !tbaa !9
  %424 = load ptr, ptr %41, align 8, !tbaa !5
  %425 = load i64, ptr %28, align 8, !tbaa !9
  %426 = load i64, ptr %20, align 8, !tbaa !9
  %427 = mul nsw i64 %425, %426
  %428 = getelementptr inbounds float, ptr %424, i64 %427
  %429 = load ptr, ptr %42, align 8, !tbaa !5
  %430 = load ptr, ptr %43, align 8, !tbaa !5
  %431 = load i64, ptr %28, align 8, !tbaa !9
  %432 = load i64, ptr %20, align 8, !tbaa !9
  %433 = mul nsw i64 %431, %432
  %434 = getelementptr inbounds float, ptr %430, i64 %433
  %435 = call i64 @libmetis__AreAllHVwgtsAbove(i64 noundef %423, float noundef 1.000000e+00, ptr noundef %428, float noundef 0.000000e+00, ptr noundef %429, ptr noundef %434)
  %436 = icmp ne i64 %435, 0
  br i1 %436, label %455, label %437

437:                                              ; preds = %422
  %438 = load i64, ptr %20, align 8, !tbaa !9
  %439 = load ptr, ptr %41, align 8, !tbaa !5
  %440 = load i64, ptr %28, align 8, !tbaa !9
  %441 = load i64, ptr %20, align 8, !tbaa !9
  %442 = mul nsw i64 %440, %441
  %443 = getelementptr inbounds float, ptr %439, i64 %442
  %444 = load ptr, ptr %42, align 8, !tbaa !5
  %445 = load ptr, ptr %44, align 8, !tbaa !5
  %446 = load i64, ptr %28, align 8, !tbaa !9
  %447 = load i64, ptr %20, align 8, !tbaa !9
  %448 = mul nsw i64 %446, %447
  %449 = getelementptr inbounds float, ptr %445, i64 %448
  %450 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %438, float noundef 1.000000e+00, ptr noundef %443, float noundef 1.000000e+00, ptr noundef %444, ptr noundef %449)
  %451 = icmp ne i64 %450, 0
  br i1 %451, label %452, label %455

452:                                              ; preds = %437
  %453 = load i64, ptr %14, align 8, !tbaa !9
  %454 = add nsw i64 %453, 1
  store i64 %454, ptr %14, align 8, !tbaa !9
  br label %455

455:                                              ; preds = %452, %437, %422
  %456 = load i64, ptr %14, align 8, !tbaa !9
  %457 = icmp eq i64 %456, 0
  br i1 %457, label %458, label %459

458:                                              ; preds = %455
  br label %264

459:                                              ; preds = %455
  %460 = load ptr, ptr %38, align 8, !tbaa !5
  %461 = load i64, ptr %16, align 8, !tbaa !9
  %462 = getelementptr inbounds %struct.edegreedef, ptr %460, i64 %461
  %463 = getelementptr inbounds %struct.edegreedef, ptr %462, i32 0, i32 1
  %464 = load i64, ptr %463, align 8, !tbaa !47
  %465 = load ptr, ptr %39, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.rinfodef, ptr %465, i32 0, i32 0
  %467 = load i64, ptr %466, align 8, !tbaa !38
  %468 = sub nsw i64 %464, %467
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.graphdef, ptr %469, i32 0, i32 16
  %471 = load i64, ptr %470, align 8, !tbaa !33
  %472 = sub nsw i64 %471, %468
  store i64 %472, ptr %470, align 8, !tbaa !33
  %473 = load ptr, ptr %6, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.controldef, ptr %473, i32 0, i32 1
  %475 = load i64, ptr %474, align 8, !tbaa !28
  %476 = and i64 %475, 32
  %477 = icmp ne i64 %476, 0
  br i1 %477, label %478, label %494

478:                                              ; preds = %459
  %479 = load i64, ptr %11, align 8, !tbaa !9
  %480 = load i64, ptr %28, align 8, !tbaa !9
  %481 = load ptr, ptr %38, align 8, !tbaa !5
  %482 = load i64, ptr %16, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct.edegreedef, ptr %481, i64 %482
  %484 = getelementptr inbounds %struct.edegreedef, ptr %483, i32 0, i32 1
  %485 = load i64, ptr %484, align 8, !tbaa !47
  %486 = load ptr, ptr %39, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.rinfodef, ptr %486, i32 0, i32 0
  %488 = load i64, ptr %487, align 8, !tbaa !38
  %489 = sub nsw i64 %485, %488
  %490 = load ptr, ptr %7, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.graphdef, ptr %490, i32 0, i32 16
  %492 = load i64, ptr %491, align 8, !tbaa !33
  %493 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %479, i64 noundef %480, i64 noundef %489, i64 noundef %492)
  br label %494

494:                                              ; preds = %478, %459
  %495 = load i64, ptr %20, align 8, !tbaa !9
  %496 = load ptr, ptr %42, align 8, !tbaa !5
  %497 = load ptr, ptr %41, align 8, !tbaa !5
  %498 = load i64, ptr %28, align 8, !tbaa !9
  %499 = load i64, ptr %20, align 8, !tbaa !9
  %500 = mul nsw i64 %498, %499
  %501 = getelementptr inbounds float, ptr %497, i64 %500
  %502 = call ptr @gk_faxpy(i64 noundef %495, float noundef 1.000000e+00, ptr noundef %496, i64 noundef 1, ptr noundef %501, i64 noundef 1)
  %503 = load i64, ptr %20, align 8, !tbaa !9
  %504 = load ptr, ptr %42, align 8, !tbaa !5
  %505 = load ptr, ptr %41, align 8, !tbaa !5
  %506 = load i64, ptr %26, align 8, !tbaa !9
  %507 = load i64, ptr %20, align 8, !tbaa !9
  %508 = mul nsw i64 %506, %507
  %509 = getelementptr inbounds float, ptr %505, i64 %508
  %510 = call ptr @gk_faxpy(i64 noundef %503, float noundef -1.000000e+00, ptr noundef %504, i64 noundef 1, ptr noundef %509, i64 noundef 1)
  %511 = load i64, ptr %28, align 8, !tbaa !9
  %512 = load ptr, ptr %33, align 8, !tbaa !5
  %513 = load i64, ptr %11, align 8, !tbaa !9
  %514 = getelementptr inbounds i64, ptr %512, i64 %513
  store i64 %511, ptr %514, align 8, !tbaa !9
  %515 = load ptr, ptr %39, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.rinfodef, ptr %515, i32 0, i32 0
  %517 = load i64, ptr %516, align 8, !tbaa !38
  %518 = load ptr, ptr %38, align 8, !tbaa !5
  %519 = load i64, ptr %16, align 8, !tbaa !9
  %520 = getelementptr inbounds %struct.edegreedef, ptr %518, i64 %519
  %521 = getelementptr inbounds %struct.edegreedef, ptr %520, i32 0, i32 1
  %522 = load i64, ptr %521, align 8, !tbaa !47
  %523 = sub nsw i64 %517, %522
  %524 = load ptr, ptr %39, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.rinfodef, ptr %524, i32 0, i32 1
  %526 = load i64, ptr %525, align 8, !tbaa !36
  %527 = add nsw i64 %526, %523
  store i64 %527, ptr %525, align 8, !tbaa !36
  br label %528

528:                                              ; preds = %494
  %529 = load ptr, ptr %39, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.rinfodef, ptr %529, i32 0, i32 0
  %531 = load i64, ptr %530, align 8, !tbaa !38
  store i64 %531, ptr %14, align 8, !tbaa !9
  %532 = load ptr, ptr %38, align 8, !tbaa !5
  %533 = load i64, ptr %16, align 8, !tbaa !9
  %534 = getelementptr inbounds %struct.edegreedef, ptr %532, i64 %533
  %535 = getelementptr inbounds %struct.edegreedef, ptr %534, i32 0, i32 1
  %536 = load i64, ptr %535, align 8, !tbaa !47
  %537 = load ptr, ptr %39, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.rinfodef, ptr %537, i32 0, i32 0
  store i64 %536, ptr %538, align 8, !tbaa !38
  %539 = load i64, ptr %14, align 8, !tbaa !9
  %540 = load ptr, ptr %38, align 8, !tbaa !5
  %541 = load i64, ptr %16, align 8, !tbaa !9
  %542 = getelementptr inbounds %struct.edegreedef, ptr %540, i64 %541
  %543 = getelementptr inbounds %struct.edegreedef, ptr %542, i32 0, i32 1
  store i64 %539, ptr %543, align 8, !tbaa !47
  br label %544

544:                                              ; preds = %528
  br label %545

545:                                              ; preds = %544
  %546 = load ptr, ptr %38, align 8, !tbaa !5
  %547 = load i64, ptr %16, align 8, !tbaa !9
  %548 = getelementptr inbounds %struct.edegreedef, ptr %546, i64 %547
  %549 = getelementptr inbounds %struct.edegreedef, ptr %548, i32 0, i32 1
  %550 = load i64, ptr %549, align 8, !tbaa !47
  %551 = icmp eq i64 %550, 0
  br i1 %551, label %552, label %562

552:                                              ; preds = %545
  %553 = load ptr, ptr %38, align 8, !tbaa !5
  %554 = load i64, ptr %16, align 8, !tbaa !9
  %555 = getelementptr inbounds %struct.edegreedef, ptr %553, i64 %554
  %556 = load ptr, ptr %38, align 8, !tbaa !5
  %557 = load ptr, ptr %39, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.rinfodef, ptr %557, i32 0, i32 2
  %559 = load i64, ptr %558, align 8, !tbaa !42
  %560 = add nsw i64 %559, -1
  store i64 %560, ptr %558, align 8, !tbaa !42
  %561 = getelementptr inbounds %struct.edegreedef, ptr %556, i64 %560
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %555, ptr align 8 %561, i64 16, i1 false), !tbaa.struct !48
  br label %568

562:                                              ; preds = %545
  %563 = load i64, ptr %26, align 8, !tbaa !9
  %564 = load ptr, ptr %38, align 8, !tbaa !5
  %565 = load i64, ptr %16, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.edegreedef, ptr %564, i64 %565
  %567 = getelementptr inbounds %struct.edegreedef, ptr %566, i32 0, i32 0
  store i64 %563, ptr %567, align 8, !tbaa !43
  br label %568

568:                                              ; preds = %562, %552
  %569 = load ptr, ptr %39, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.rinfodef, ptr %569, i32 0, i32 1
  %571 = load i64, ptr %570, align 8, !tbaa !36
  %572 = icmp eq i64 %571, 0
  br i1 %572, label %573, label %601

573:                                              ; preds = %568
  br label %574

574:                                              ; preds = %573
  %575 = load ptr, ptr %36, align 8, !tbaa !5
  %576 = load i64, ptr %21, align 8, !tbaa !9
  %577 = add nsw i64 %576, -1
  store i64 %577, ptr %21, align 8, !tbaa !9
  %578 = getelementptr inbounds i64, ptr %575, i64 %577
  %579 = load i64, ptr %578, align 8, !tbaa !9
  %580 = load ptr, ptr %36, align 8, !tbaa !5
  %581 = load ptr, ptr %35, align 8, !tbaa !5
  %582 = load i64, ptr %11, align 8, !tbaa !9
  %583 = getelementptr inbounds i64, ptr %581, i64 %582
  %584 = load i64, ptr %583, align 8, !tbaa !9
  %585 = getelementptr inbounds i64, ptr %580, i64 %584
  store i64 %579, ptr %585, align 8, !tbaa !9
  %586 = load ptr, ptr %35, align 8, !tbaa !5
  %587 = load i64, ptr %11, align 8, !tbaa !9
  %588 = getelementptr inbounds i64, ptr %586, i64 %587
  %589 = load i64, ptr %588, align 8, !tbaa !9
  %590 = load ptr, ptr %35, align 8, !tbaa !5
  %591 = load ptr, ptr %36, align 8, !tbaa !5
  %592 = load i64, ptr %21, align 8, !tbaa !9
  %593 = getelementptr inbounds i64, ptr %591, i64 %592
  %594 = load i64, ptr %593, align 8, !tbaa !9
  %595 = getelementptr inbounds i64, ptr %590, i64 %594
  store i64 %589, ptr %595, align 8, !tbaa !9
  %596 = load ptr, ptr %35, align 8, !tbaa !5
  %597 = load i64, ptr %11, align 8, !tbaa !9
  %598 = getelementptr inbounds i64, ptr %596, i64 %597
  store i64 -1, ptr %598, align 8, !tbaa !9
  br label %599

599:                                              ; preds = %574
  br label %600

600:                                              ; preds = %599
  br label %601

601:                                              ; preds = %600, %568
  %602 = load ptr, ptr %30, align 8, !tbaa !5
  %603 = load i64, ptr %11, align 8, !tbaa !9
  %604 = getelementptr inbounds i64, ptr %602, i64 %603
  %605 = load i64, ptr %604, align 8, !tbaa !9
  store i64 %605, ptr %14, align 8, !tbaa !9
  br label %606

606:                                              ; preds = %958, %601
  %607 = load i64, ptr %14, align 8, !tbaa !9
  %608 = load ptr, ptr %30, align 8, !tbaa !5
  %609 = load i64, ptr %11, align 8, !tbaa !9
  %610 = add nsw i64 %609, 1
  %611 = getelementptr inbounds i64, ptr %608, i64 %610
  %612 = load i64, ptr %611, align 8, !tbaa !9
  %613 = icmp slt i64 %607, %612
  br i1 %613, label %614, label %961

614:                                              ; preds = %606
  %615 = load ptr, ptr %31, align 8, !tbaa !5
  %616 = load i64, ptr %14, align 8, !tbaa !9
  %617 = getelementptr inbounds i64, ptr %615, i64 %616
  %618 = load i64, ptr %617, align 8, !tbaa !9
  store i64 %618, ptr %12, align 8, !tbaa !9
  %619 = load ptr, ptr %33, align 8, !tbaa !5
  %620 = load i64, ptr %12, align 8, !tbaa !9
  %621 = getelementptr inbounds i64, ptr %619, i64 %620
  %622 = load i64, ptr %621, align 8, !tbaa !9
  store i64 %622, ptr %27, align 8, !tbaa !9
  %623 = load ptr, ptr %7, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.graphdef, ptr %623, i32 0, i32 25
  %625 = load ptr, ptr %624, align 8, !tbaa !35
  %626 = load i64, ptr %12, align 8, !tbaa !9
  %627 = getelementptr inbounds %struct.rinfodef, ptr %625, i64 %626
  store ptr %627, ptr %39, align 8, !tbaa !5
  %628 = load ptr, ptr %39, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.rinfodef, ptr %628, i32 0, i32 3
  %630 = load ptr, ptr %629, align 8, !tbaa !41
  %631 = icmp eq ptr %630, null
  br i1 %631, label %632, label %659

632:                                              ; preds = %614
  %633 = load ptr, ptr %6, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.controldef, ptr %633, i32 0, i32 11
  %635 = getelementptr inbounds %struct.workspacedef, ptr %634, i32 0, i32 3
  %636 = load ptr, ptr %635, align 8, !tbaa !49
  %637 = load ptr, ptr %6, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.controldef, ptr %637, i32 0, i32 11
  %639 = getelementptr inbounds %struct.workspacedef, ptr %638, i32 0, i32 5
  %640 = load i64, ptr %639, align 8, !tbaa !50
  %641 = getelementptr inbounds %struct.edegreedef, ptr %636, i64 %640
  %642 = load ptr, ptr %39, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.rinfodef, ptr %642, i32 0, i32 3
  store ptr %641, ptr %643, align 8, !tbaa !41
  %644 = load ptr, ptr %30, align 8, !tbaa !5
  %645 = load i64, ptr %12, align 8, !tbaa !9
  %646 = add nsw i64 %645, 1
  %647 = getelementptr inbounds i64, ptr %644, i64 %646
  %648 = load i64, ptr %647, align 8, !tbaa !9
  %649 = load ptr, ptr %30, align 8, !tbaa !5
  %650 = load i64, ptr %12, align 8, !tbaa !9
  %651 = getelementptr inbounds i64, ptr %649, i64 %650
  %652 = load i64, ptr %651, align 8, !tbaa !9
  %653 = sub nsw i64 %648, %652
  %654 = load ptr, ptr %6, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.controldef, ptr %654, i32 0, i32 11
  %656 = getelementptr inbounds %struct.workspacedef, ptr %655, i32 0, i32 5
  %657 = load i64, ptr %656, align 8, !tbaa !50
  %658 = add nsw i64 %657, %653
  store i64 %658, ptr %656, align 8, !tbaa !50
  br label %659

659:                                              ; preds = %632, %614
  %660 = load ptr, ptr %39, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.rinfodef, ptr %660, i32 0, i32 3
  %662 = load ptr, ptr %661, align 8, !tbaa !41
  store ptr %662, ptr %38, align 8, !tbaa !5
  %663 = load ptr, ptr %39, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.rinfodef, ptr %663, i32 0, i32 1
  %665 = load i64, ptr %664, align 8, !tbaa !36
  %666 = load ptr, ptr %39, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.rinfodef, ptr %666, i32 0, i32 0
  %668 = load i64, ptr %667, align 8, !tbaa !38
  %669 = sub nsw i64 %665, %668
  store i64 %669, ptr %23, align 8, !tbaa !9
  %670 = load i64, ptr %27, align 8, !tbaa !9
  %671 = load i64, ptr %26, align 8, !tbaa !9
  %672 = icmp eq i64 %670, %671
  br i1 %672, label %673, label %717

673:                                              ; preds = %659
  br label %674

674:                                              ; preds = %673
  %675 = load ptr, ptr %32, align 8, !tbaa !5
  %676 = load i64, ptr %14, align 8, !tbaa !9
  %677 = getelementptr inbounds i64, ptr %675, i64 %676
  %678 = load i64, ptr %677, align 8, !tbaa !9
  %679 = load ptr, ptr %39, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.rinfodef, ptr %679, i32 0, i32 1
  %681 = load i64, ptr %680, align 8, !tbaa !36
  %682 = add nsw i64 %681, %678
  store i64 %682, ptr %680, align 8, !tbaa !36
  %683 = load ptr, ptr %32, align 8, !tbaa !5
  %684 = load i64, ptr %14, align 8, !tbaa !9
  %685 = getelementptr inbounds i64, ptr %683, i64 %684
  %686 = load i64, ptr %685, align 8, !tbaa !9
  %687 = load ptr, ptr %39, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.rinfodef, ptr %687, i32 0, i32 0
  %689 = load i64, ptr %688, align 8, !tbaa !38
  %690 = sub nsw i64 %689, %686
  store i64 %690, ptr %688, align 8, !tbaa !38
  br label %691

691:                                              ; preds = %674
  br label %692

692:                                              ; preds = %691
  %693 = load ptr, ptr %39, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.rinfodef, ptr %693, i32 0, i32 1
  %695 = load i64, ptr %694, align 8, !tbaa !36
  %696 = icmp sgt i64 %695, 0
  br i1 %696, label %697, label %716

697:                                              ; preds = %692
  %698 = load ptr, ptr %35, align 8, !tbaa !5
  %699 = load i64, ptr %12, align 8, !tbaa !9
  %700 = getelementptr inbounds i64, ptr %698, i64 %699
  %701 = load i64, ptr %700, align 8, !tbaa !9
  %702 = icmp eq i64 %701, -1
  br i1 %702, label %703, label %716

703:                                              ; preds = %697
  br label %704

704:                                              ; preds = %703
  %705 = load i64, ptr %12, align 8, !tbaa !9
  %706 = load ptr, ptr %36, align 8, !tbaa !5
  %707 = load i64, ptr %21, align 8, !tbaa !9
  %708 = getelementptr inbounds i64, ptr %706, i64 %707
  store i64 %705, ptr %708, align 8, !tbaa !9
  %709 = load i64, ptr %21, align 8, !tbaa !9
  %710 = add nsw i64 %709, 1
  store i64 %710, ptr %21, align 8, !tbaa !9
  %711 = load ptr, ptr %35, align 8, !tbaa !5
  %712 = load i64, ptr %12, align 8, !tbaa !9
  %713 = getelementptr inbounds i64, ptr %711, i64 %712
  store i64 %709, ptr %713, align 8, !tbaa !9
  br label %714

714:                                              ; preds = %704
  br label %715

715:                                              ; preds = %714
  br label %716

716:                                              ; preds = %715, %697, %692
  br label %781

717:                                              ; preds = %659
  %718 = load i64, ptr %27, align 8, !tbaa !9
  %719 = load i64, ptr %28, align 8, !tbaa !9
  %720 = icmp eq i64 %718, %719
  br i1 %720, label %721, label %780

721:                                              ; preds = %717
  br label %722

722:                                              ; preds = %721
  %723 = load ptr, ptr %32, align 8, !tbaa !5
  %724 = load i64, ptr %14, align 8, !tbaa !9
  %725 = getelementptr inbounds i64, ptr %723, i64 %724
  %726 = load i64, ptr %725, align 8, !tbaa !9
  %727 = load ptr, ptr %39, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.rinfodef, ptr %727, i32 0, i32 0
  %729 = load i64, ptr %728, align 8, !tbaa !38
  %730 = add nsw i64 %729, %726
  store i64 %730, ptr %728, align 8, !tbaa !38
  %731 = load ptr, ptr %32, align 8, !tbaa !5
  %732 = load i64, ptr %14, align 8, !tbaa !9
  %733 = getelementptr inbounds i64, ptr %731, i64 %732
  %734 = load i64, ptr %733, align 8, !tbaa !9
  %735 = load ptr, ptr %39, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.rinfodef, ptr %735, i32 0, i32 1
  %737 = load i64, ptr %736, align 8, !tbaa !36
  %738 = sub nsw i64 %737, %734
  store i64 %738, ptr %736, align 8, !tbaa !36
  br label %739

739:                                              ; preds = %722
  br label %740

740:                                              ; preds = %739
  %741 = load ptr, ptr %39, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.rinfodef, ptr %741, i32 0, i32 1
  %743 = load i64, ptr %742, align 8, !tbaa !36
  %744 = icmp eq i64 %743, 0
  br i1 %744, label %745, label %779

745:                                              ; preds = %740
  %746 = load ptr, ptr %35, align 8, !tbaa !5
  %747 = load i64, ptr %12, align 8, !tbaa !9
  %748 = getelementptr inbounds i64, ptr %746, i64 %747
  %749 = load i64, ptr %748, align 8, !tbaa !9
  %750 = icmp ne i64 %749, -1
  br i1 %750, label %751, label %779

751:                                              ; preds = %745
  br label %752

752:                                              ; preds = %751
  %753 = load ptr, ptr %36, align 8, !tbaa !5
  %754 = load i64, ptr %21, align 8, !tbaa !9
  %755 = add nsw i64 %754, -1
  store i64 %755, ptr %21, align 8, !tbaa !9
  %756 = getelementptr inbounds i64, ptr %753, i64 %755
  %757 = load i64, ptr %756, align 8, !tbaa !9
  %758 = load ptr, ptr %36, align 8, !tbaa !5
  %759 = load ptr, ptr %35, align 8, !tbaa !5
  %760 = load i64, ptr %12, align 8, !tbaa !9
  %761 = getelementptr inbounds i64, ptr %759, i64 %760
  %762 = load i64, ptr %761, align 8, !tbaa !9
  %763 = getelementptr inbounds i64, ptr %758, i64 %762
  store i64 %757, ptr %763, align 8, !tbaa !9
  %764 = load ptr, ptr %35, align 8, !tbaa !5
  %765 = load i64, ptr %12, align 8, !tbaa !9
  %766 = getelementptr inbounds i64, ptr %764, i64 %765
  %767 = load i64, ptr %766, align 8, !tbaa !9
  %768 = load ptr, ptr %35, align 8, !tbaa !5
  %769 = load ptr, ptr %36, align 8, !tbaa !5
  %770 = load i64, ptr %21, align 8, !tbaa !9
  %771 = getelementptr inbounds i64, ptr %769, i64 %770
  %772 = load i64, ptr %771, align 8, !tbaa !9
  %773 = getelementptr inbounds i64, ptr %768, i64 %772
  store i64 %767, ptr %773, align 8, !tbaa !9
  %774 = load ptr, ptr %35, align 8, !tbaa !5
  %775 = load i64, ptr %12, align 8, !tbaa !9
  %776 = getelementptr inbounds i64, ptr %774, i64 %775
  store i64 -1, ptr %776, align 8, !tbaa !9
  br label %777

777:                                              ; preds = %752
  br label %778

778:                                              ; preds = %777
  br label %779

779:                                              ; preds = %778, %745, %740
  br label %780

780:                                              ; preds = %779, %717
  br label %781

781:                                              ; preds = %780, %716
  %782 = load i64, ptr %27, align 8, !tbaa !9
  %783 = load i64, ptr %26, align 8, !tbaa !9
  %784 = icmp ne i64 %782, %783
  br i1 %784, label %785, label %838

785:                                              ; preds = %781
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %786

786:                                              ; preds = %834, %785
  %787 = load i64, ptr %16, align 8, !tbaa !9
  %788 = load ptr, ptr %39, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.rinfodef, ptr %788, i32 0, i32 2
  %790 = load i64, ptr %789, align 8, !tbaa !42
  %791 = icmp slt i64 %787, %790
  br i1 %791, label %792, label %837

792:                                              ; preds = %786
  %793 = load ptr, ptr %38, align 8, !tbaa !5
  %794 = load i64, ptr %16, align 8, !tbaa !9
  %795 = getelementptr inbounds %struct.edegreedef, ptr %793, i64 %794
  %796 = getelementptr inbounds %struct.edegreedef, ptr %795, i32 0, i32 0
  %797 = load i64, ptr %796, align 8, !tbaa !43
  %798 = load i64, ptr %26, align 8, !tbaa !9
  %799 = icmp eq i64 %797, %798
  br i1 %799, label %800, label %833

800:                                              ; preds = %792
  %801 = load ptr, ptr %38, align 8, !tbaa !5
  %802 = load i64, ptr %16, align 8, !tbaa !9
  %803 = getelementptr inbounds %struct.edegreedef, ptr %801, i64 %802
  %804 = getelementptr inbounds %struct.edegreedef, ptr %803, i32 0, i32 1
  %805 = load i64, ptr %804, align 8, !tbaa !47
  %806 = load ptr, ptr %32, align 8, !tbaa !5
  %807 = load i64, ptr %14, align 8, !tbaa !9
  %808 = getelementptr inbounds i64, ptr %806, i64 %807
  %809 = load i64, ptr %808, align 8, !tbaa !9
  %810 = icmp eq i64 %805, %809
  br i1 %810, label %811, label %821

811:                                              ; preds = %800
  %812 = load ptr, ptr %38, align 8, !tbaa !5
  %813 = load i64, ptr %16, align 8, !tbaa !9
  %814 = getelementptr inbounds %struct.edegreedef, ptr %812, i64 %813
  %815 = load ptr, ptr %38, align 8, !tbaa !5
  %816 = load ptr, ptr %39, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.rinfodef, ptr %816, i32 0, i32 2
  %818 = load i64, ptr %817, align 8, !tbaa !42
  %819 = add nsw i64 %818, -1
  store i64 %819, ptr %817, align 8, !tbaa !42
  %820 = getelementptr inbounds %struct.edegreedef, ptr %815, i64 %819
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %814, ptr align 8 %820, i64 16, i1 false), !tbaa.struct !48
  br label %832

821:                                              ; preds = %800
  %822 = load ptr, ptr %32, align 8, !tbaa !5
  %823 = load i64, ptr %14, align 8, !tbaa !9
  %824 = getelementptr inbounds i64, ptr %822, i64 %823
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = load ptr, ptr %38, align 8, !tbaa !5
  %827 = load i64, ptr %16, align 8, !tbaa !9
  %828 = getelementptr inbounds %struct.edegreedef, ptr %826, i64 %827
  %829 = getelementptr inbounds %struct.edegreedef, ptr %828, i32 0, i32 1
  %830 = load i64, ptr %829, align 8, !tbaa !47
  %831 = sub nsw i64 %830, %825
  store i64 %831, ptr %829, align 8, !tbaa !47
  br label %832

832:                                              ; preds = %821, %811
  br label %837

833:                                              ; preds = %792
  br label %834

834:                                              ; preds = %833
  %835 = load i64, ptr %16, align 8, !tbaa !9
  %836 = add nsw i64 %835, 1
  store i64 %836, ptr %16, align 8, !tbaa !9
  br label %786, !llvm.loop !51

837:                                              ; preds = %832, %786
  br label %838

838:                                              ; preds = %837, %781
  %839 = load i64, ptr %27, align 8, !tbaa !9
  %840 = load i64, ptr %28, align 8, !tbaa !9
  %841 = icmp ne i64 %839, %840
  br i1 %841, label %842, label %898

842:                                              ; preds = %838
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %843

843:                                              ; preds = %869, %842
  %844 = load i64, ptr %16, align 8, !tbaa !9
  %845 = load ptr, ptr %39, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.rinfodef, ptr %845, i32 0, i32 2
  %847 = load i64, ptr %846, align 8, !tbaa !42
  %848 = icmp slt i64 %844, %847
  br i1 %848, label %849, label %872

849:                                              ; preds = %843
  %850 = load ptr, ptr %38, align 8, !tbaa !5
  %851 = load i64, ptr %16, align 8, !tbaa !9
  %852 = getelementptr inbounds %struct.edegreedef, ptr %850, i64 %851
  %853 = getelementptr inbounds %struct.edegreedef, ptr %852, i32 0, i32 0
  %854 = load i64, ptr %853, align 8, !tbaa !43
  %855 = load i64, ptr %28, align 8, !tbaa !9
  %856 = icmp eq i64 %854, %855
  br i1 %856, label %857, label %868

857:                                              ; preds = %849
  %858 = load ptr, ptr %32, align 8, !tbaa !5
  %859 = load i64, ptr %14, align 8, !tbaa !9
  %860 = getelementptr inbounds i64, ptr %858, i64 %859
  %861 = load i64, ptr %860, align 8, !tbaa !9
  %862 = load ptr, ptr %38, align 8, !tbaa !5
  %863 = load i64, ptr %16, align 8, !tbaa !9
  %864 = getelementptr inbounds %struct.edegreedef, ptr %862, i64 %863
  %865 = getelementptr inbounds %struct.edegreedef, ptr %864, i32 0, i32 1
  %866 = load i64, ptr %865, align 8, !tbaa !47
  %867 = add nsw i64 %866, %861
  store i64 %867, ptr %865, align 8, !tbaa !47
  br label %872

868:                                              ; preds = %849
  br label %869

869:                                              ; preds = %868
  %870 = load i64, ptr %16, align 8, !tbaa !9
  %871 = add nsw i64 %870, 1
  store i64 %871, ptr %16, align 8, !tbaa !9
  br label %843, !llvm.loop !52

872:                                              ; preds = %857, %843
  %873 = load i64, ptr %16, align 8, !tbaa !9
  %874 = load ptr, ptr %39, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.rinfodef, ptr %874, i32 0, i32 2
  %876 = load i64, ptr %875, align 8, !tbaa !42
  %877 = icmp eq i64 %873, %876
  br i1 %877, label %878, label %897

878:                                              ; preds = %872
  %879 = load i64, ptr %28, align 8, !tbaa !9
  %880 = load ptr, ptr %38, align 8, !tbaa !5
  %881 = load ptr, ptr %39, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.rinfodef, ptr %881, i32 0, i32 2
  %883 = load i64, ptr %882, align 8, !tbaa !42
  %884 = getelementptr inbounds %struct.edegreedef, ptr %880, i64 %883
  %885 = getelementptr inbounds %struct.edegreedef, ptr %884, i32 0, i32 0
  store i64 %879, ptr %885, align 8, !tbaa !43
  %886 = load ptr, ptr %32, align 8, !tbaa !5
  %887 = load i64, ptr %14, align 8, !tbaa !9
  %888 = getelementptr inbounds i64, ptr %886, i64 %887
  %889 = load i64, ptr %888, align 8, !tbaa !9
  %890 = load ptr, ptr %38, align 8, !tbaa !5
  %891 = load ptr, ptr %39, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.rinfodef, ptr %891, i32 0, i32 2
  %893 = load i64, ptr %892, align 8, !tbaa !42
  %894 = add nsw i64 %893, 1
  store i64 %894, ptr %892, align 8, !tbaa !42
  %895 = getelementptr inbounds %struct.edegreedef, ptr %890, i64 %893
  %896 = getelementptr inbounds %struct.edegreedef, ptr %895, i32 0, i32 1
  store i64 %889, ptr %896, align 8, !tbaa !47
  br label %897

897:                                              ; preds = %878, %872
  br label %898

898:                                              ; preds = %897, %838
  %899 = load i64, ptr %27, align 8, !tbaa !9
  %900 = load i64, ptr %28, align 8, !tbaa !9
  %901 = icmp eq i64 %899, %900
  br i1 %901, label %906, label %902

902:                                              ; preds = %898
  %903 = load i64, ptr %27, align 8, !tbaa !9
  %904 = load i64, ptr %26, align 8, !tbaa !9
  %905 = icmp eq i64 %903, %904
  br i1 %905, label %906, label %957

906:                                              ; preds = %902, %898
  %907 = load ptr, ptr %39, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.rinfodef, ptr %907, i32 0, i32 1
  %909 = load i64, ptr %908, align 8, !tbaa !36
  %910 = load ptr, ptr %39, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.rinfodef, ptr %910, i32 0, i32 0
  %912 = load i64, ptr %911, align 8, !tbaa !38
  %913 = sub nsw i64 %909, %912
  store i64 %913, ptr %24, align 8, !tbaa !9
  %914 = load ptr, ptr %37, align 8, !tbaa !5
  %915 = load i64, ptr %12, align 8, !tbaa !9
  %916 = getelementptr inbounds i64, ptr %914, i64 %915
  %917 = load i64, ptr %916, align 8, !tbaa !9
  %918 = icmp eq i64 %917, 2
  br i1 %918, label %919, label %937

919:                                              ; preds = %906
  %920 = load ptr, ptr %39, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.rinfodef, ptr %920, i32 0, i32 1
  %922 = load i64, ptr %921, align 8, !tbaa !36
  %923 = icmp sgt i64 %922, 0
  br i1 %923, label %924, label %929

924:                                              ; preds = %919
  %925 = load i64, ptr %12, align 8, !tbaa !9
  %926 = load i64, ptr %23, align 8, !tbaa !9
  %927 = load i64, ptr %24, align 8, !tbaa !9
  %928 = call i64 @libmetis__PQueueUpdate(ptr noundef %40, i64 noundef %925, i64 noundef %926, i64 noundef %927)
  br label %936

929:                                              ; preds = %919
  %930 = load i64, ptr %12, align 8, !tbaa !9
  %931 = load i64, ptr %23, align 8, !tbaa !9
  %932 = call i64 @libmetis__PQueueDelete(ptr noundef %40, i64 noundef %930, i64 noundef %931)
  %933 = load ptr, ptr %37, align 8, !tbaa !5
  %934 = load i64, ptr %12, align 8, !tbaa !9
  %935 = getelementptr inbounds i64, ptr %933, i64 %934
  store i64 -1, ptr %935, align 8, !tbaa !9
  br label %936

936:                                              ; preds = %929, %924
  br label %956

937:                                              ; preds = %906
  %938 = load ptr, ptr %37, align 8, !tbaa !5
  %939 = load i64, ptr %12, align 8, !tbaa !9
  %940 = getelementptr inbounds i64, ptr %938, i64 %939
  %941 = load i64, ptr %940, align 8, !tbaa !9
  %942 = icmp eq i64 %941, -1
  br i1 %942, label %943, label %955

943:                                              ; preds = %937
  %944 = load ptr, ptr %39, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.rinfodef, ptr %944, i32 0, i32 1
  %946 = load i64, ptr %945, align 8, !tbaa !36
  %947 = icmp sgt i64 %946, 0
  br i1 %947, label %948, label %955

948:                                              ; preds = %943
  %949 = load i64, ptr %12, align 8, !tbaa !9
  %950 = load i64, ptr %24, align 8, !tbaa !9
  %951 = call i64 @libmetis__PQueueInsert(ptr noundef %40, i64 noundef %949, i64 noundef %950)
  %952 = load ptr, ptr %37, align 8, !tbaa !5
  %953 = load i64, ptr %12, align 8, !tbaa !9
  %954 = getelementptr inbounds i64, ptr %952, i64 %953
  store i64 2, ptr %954, align 8, !tbaa !9
  br label %955

955:                                              ; preds = %948, %943, %937
  br label %956

956:                                              ; preds = %955, %936
  br label %957

957:                                              ; preds = %956, %902
  br label %958

958:                                              ; preds = %957
  %959 = load i64, ptr %14, align 8, !tbaa !9
  %960 = add nsw i64 %959, 1
  store i64 %960, ptr %14, align 8, !tbaa !9
  br label %606, !llvm.loop !53

961:                                              ; preds = %606
  %962 = load i64, ptr %25, align 8, !tbaa !9
  %963 = add nsw i64 %962, 1
  store i64 %963, ptr %25, align 8, !tbaa !9
  br label %264

964:                                              ; preds = %267
  %965 = load i64, ptr %21, align 8, !tbaa !9
  %966 = load ptr, ptr %7, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.graphdef, ptr %966, i32 0, i32 20
  store i64 %965, ptr %967, align 8, !tbaa !32
  %968 = load ptr, ptr %6, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.controldef, ptr %968, i32 0, i32 1
  %970 = load i64, ptr %969, align 8, !tbaa !28
  %971 = and i64 %970, 8
  %972 = icmp ne i64 %971, 0
  br i1 %972, label %973, label %1017

973:                                              ; preds = %964
  %974 = load ptr, ptr %41, align 8, !tbaa !5
  %975 = load i64, ptr %20, align 8, !tbaa !9
  %976 = load i64, ptr %8, align 8, !tbaa !9
  %977 = mul nsw i64 %975, %976
  %978 = load ptr, ptr %41, align 8, !tbaa !5
  %979 = call i64 @gk_fargmin(i64 noundef %977, ptr noundef %978)
  %980 = getelementptr inbounds float, ptr %974, i64 %979
  %981 = load float, ptr %980, align 4, !tbaa !22
  %982 = fpext float %981 to double
  %983 = load ptr, ptr %41, align 8, !tbaa !5
  %984 = load i64, ptr %20, align 8, !tbaa !9
  %985 = load i64, ptr %8, align 8, !tbaa !9
  %986 = mul nsw i64 %984, %985
  %987 = load ptr, ptr %41, align 8, !tbaa !5
  %988 = call i64 @gk_fargmax(i64 noundef %986, ptr noundef %987)
  %989 = getelementptr inbounds float, ptr %983, i64 %988
  %990 = load float, ptr %989, align 4, !tbaa !22
  %991 = fpext float %990 to double
  %992 = load i64, ptr %21, align 8, !tbaa !9
  %993 = load i64, ptr %25, align 8, !tbaa !9
  %994 = load ptr, ptr %7, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.graphdef, ptr %994, i32 0, i32 16
  %996 = load i64, ptr %995, align 8, !tbaa !33
  %997 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, double noundef %982, double noundef %991, i64 noundef %992, i64 noundef %993, i64 noundef %996)
  %998 = load i64, ptr %20, align 8, !tbaa !9
  %999 = load i64, ptr %8, align 8, !tbaa !9
  %1000 = load ptr, ptr %41, align 8, !tbaa !5
  %1001 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %998, i64 noundef %999, ptr noundef %1000, ptr noundef %1001)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %1002

1002:                                             ; preds = %1012, %973
  %1003 = load i64, ptr %11, align 8, !tbaa !9
  %1004 = load i64, ptr %20, align 8, !tbaa !9
  %1005 = icmp slt i64 %1003, %1004
  br i1 %1005, label %1006, label %1015

1006:                                             ; preds = %1002
  %1007 = load i64, ptr %11, align 8, !tbaa !9
  %1008 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %1007
  %1009 = load float, ptr %1008, align 4, !tbaa !22
  %1010 = fpext float %1009 to double
  %1011 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %1010)
  br label %1012

1012:                                             ; preds = %1006
  %1013 = load i64, ptr %11, align 8, !tbaa !9
  %1014 = add nsw i64 %1013, 1
  store i64 %1014, ptr %11, align 8, !tbaa !9
  br label %1002, !llvm.loop !54

1015:                                             ; preds = %1002
  %1016 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2)
  br label %1017

1017:                                             ; preds = %1015, %964
  %1018 = load i64, ptr %25, align 8, !tbaa !9
  %1019 = icmp eq i64 %1018, 0
  br i1 %1019, label %1020, label %1021

1020:                                             ; preds = %1017
  br label %1025

1021:                                             ; preds = %1017
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load i64, ptr %18, align 8, !tbaa !9
  %1024 = add nsw i64 %1023, 1
  store i64 %1024, ptr %18, align 8, !tbaa !9
  br label %204, !llvm.loop !55

1025:                                             ; preds = %1020, %215, %204
  %1026 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libmetis__PQueueFree(ptr noundef %1026, ptr noundef %40)
  %1027 = load ptr, ptr %6, align 8, !tbaa !5
  %1028 = load i64, ptr %20, align 8, !tbaa !9
  %1029 = load i64, ptr %8, align 8, !tbaa !9
  %1030 = mul nsw i64 %1028, %1029
  call void @fwspacefree(ptr noundef %1027, i64 noundef %1030)
  %1031 = load ptr, ptr %6, align 8, !tbaa !5
  %1032 = load i64, ptr %20, align 8, !tbaa !9
  %1033 = load i64, ptr %8, align 8, !tbaa !9
  %1034 = mul nsw i64 %1032, %1033
  call void @fwspacefree(ptr noundef %1031, i64 noundef %1034)
  %1035 = load ptr, ptr %6, align 8, !tbaa !5
  %1036 = load i64, ptr %19, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1035, i64 noundef %1036)
  %1037 = load ptr, ptr %6, align 8, !tbaa !5
  %1038 = load i64, ptr %19, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1037, i64 noundef %1038)
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 88, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  ret void
}

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

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

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

declare void @libmetis__PQueueReset(ptr noundef) #1

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #1

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

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

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

declare void @libmetis__PQueueFree(ptr noundef, ptr 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 = { 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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !10, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !10, i64 208}
!15 = !{!12, !6, i64 16}
!16 = !{!12, !6, i64 40}
!17 = !{!12, !6, i64 48}
!18 = !{!12, !6, i64 160}
!19 = !{!12, !6, i64 152}
!20 = !{!12, !6, i64 128}
!21 = !{!12, !6, i64 224}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!12, !6, i64 88}
!28 = !{!29, !10, i64 8}
!29 = !{!"controldef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !23, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !30, i64 88, !31, i64 152, !31, i64 160, !31, i64 168, !31, i64 176, !31, i64 184, !31, i64 192, !31, i64 200, !31, i64 208, !31, i64 216, !31, i64 224, !31, i64 232, !31, i64 240, !31, i64 248, !31, i64 256, !31, i64 264, !31, i64 272}
!30 = !{!"workspacedef", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56}
!31 = !{!"double", !7, i64 0}
!32 = !{!12, !10, i64 144}
!33 = !{!12, !10, i64 112}
!34 = distinct !{!34, !25}
!35 = !{!12, !6, i64 184}
!36 = !{!37, !10, i64 8}
!37 = !{!"rinfodef", !10, i64 0, !10, i64 8, !10, i64 16, !6, i64 24}
!38 = !{!37, !10, i64 0}
!39 = distinct !{!39, !25}
!40 = !{!12, !6, i64 216}
!41 = !{!37, !6, i64 24}
!42 = !{!37, !10, i64 16}
!43 = !{!44, !10, i64 0}
!44 = !{!"edegreedef", !10, i64 0, !10, i64 8}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}
!47 = !{!44, !10, i64 8}
!48 = !{i64 0, i64 8, !9, i64 8, i64 8, !9}
!49 = !{!29, !6, i64 112}
!50 = !{!29, !10, i64 128}
!51 = distinct !{!51, !25}
!52 = distinct !{!52, !25}
!53 = distinct !{!53, !25}
!54 = distinct !{!54, !25}
!55 = distinct !{!55, !25}


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

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

@.str = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 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 ptr @libmetis__fwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress 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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MCGreedy_KWayEdgeBalanceHorizontal(ptr noundef %0, ptr nocapture noundef %1, i64 noundef %2, ptr noundef %3, i64 noundef %4) local_unnamed_addr #2 {
  %6 = alloca %struct.PQueueType, align 8
  %7 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #4
  %8 = load i64, ptr %1, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 208
  %10 = load i64, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %1, i64 16
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 40
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %1, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %1, i64 160
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 152
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %1, i64 128
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = getelementptr inbounds i8, ptr %1, i64 224
  %24 = load ptr, ptr %23, align 8, !tbaa !19
  %25 = mul nsw i64 %10, %2
  %26 = tail call ptr @libmetis__fwspacemalloc(ptr noundef %0, i64 noundef %25) #4
  %27 = tail call ptr @libmetis__fwspacemalloc(ptr noundef %0, i64 noundef %25) #4
  %28 = icmp sgt i64 %2, 0
  br i1 %28, label %.preheader449.lr.ph, label %._crit_edge475

.preheader449.lr.ph:                              ; preds = %5
  %29 = icmp sgt i64 %10, 0
  %30 = uitofp nneg i64 %2 to float
  br i1 %29, label %.preheader449.us.preheader, label %._crit_edge475

.preheader449.us.preheader:                       ; preds = %.preheader449.lr.ph
  %31 = mul i64 %10, %2
  %32 = shl i64 %31, 2
  %scevgep = getelementptr i8, ptr %27, i64 %32
  %33 = shl i64 %10, 2
  %scevgep621 = getelementptr i8, ptr %26, i64 %32
  %scevgep622 = getelementptr i8, ptr %3, i64 %33
  %min.iters.check = icmp ult i64 %10, 4
  %bound0 = icmp ult ptr %27, %scevgep621
  %bound1 = icmp ult ptr %26, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0624 = icmp ult ptr %27, %scevgep622
  %bound1625 = icmp ugt ptr %scevgep, %3
  %found.conflict626 = and i1 %bound0624, %bound1625
  %stride.check627 = icmp slt i64 %33, 0
  %34 = or i1 %found.conflict626, %stride.check627
  %conflict.rdx = or i1 %found.conflict, %34
  %bound0628 = icmp ult ptr %26, %scevgep622
  %bound1629 = icmp ugt ptr %scevgep621, %3
  %found.conflict630 = and i1 %bound0628, %bound1629
  %conflict.rdx632 = or i1 %found.conflict630, %conflict.rdx
  %n.vec = and i64 %10, 9223372036854775804
  %broadcast.splatinsert = insertelement <4 x float> poison, float %30, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %10, %n.vec
  %xtraiter = and i64 %10, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader449.us

.preheader449.us:                                 ; preds = %.preheader449.us.preheader, %._crit_edge.us
  %.0474.us = phi i64 [ %75, %._crit_edge.us ], [ 0, %.preheader449.us.preheader ]
  %35 = mul nuw nsw i64 %.0474.us, %10
  %brmerge = select i1 %min.iters.check, i1 true, i1 %conflict.rdx632
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader449.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader449.us ]
  %36 = getelementptr inbounds float, ptr %3, i64 %index
  %wide.load = load <4 x float>, ptr %36, align 4, !tbaa !20, !alias.scope !22
  %37 = fdiv <4 x float> %wide.load, %broadcast.splat
  %38 = add nuw nsw i64 %index, %35
  %39 = getelementptr inbounds float, ptr %27, i64 %38
  store <4 x float> %37, ptr %39, align 4, !tbaa !20, !alias.scope !25, !noalias !27
  %40 = fmul <4 x float> %wide.load, %broadcast.splat
  %41 = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %40
  %42 = getelementptr inbounds float, ptr %26, i64 %38
  store <4 x float> %41, ptr %42, align 4, !tbaa !20, !alias.scope !29, !noalias !22
  %index.next = add nuw i64 %index, 4
  %43 = icmp eq i64 %index.next, %n.vec
  br i1 %43, label %middle.block, label %vector.body, !llvm.loop !30

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

scalar.ph.preheader:                              ; preds = %.preheader449.us, %middle.block
  %.0395473.us.ph = phi i64 [ 0, %.preheader449.us ], [ %n.vec, %middle.block ]
  %.neg657 = or disjoint i64 %.0395473.us.ph, 1
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %44 = getelementptr inbounds float, ptr %3, i64 %.0395473.us.ph
  %45 = load float, ptr %44, align 4, !tbaa !20
  %46 = fdiv float %45, %30
  %47 = add nuw nsw i64 %.0395473.us.ph, %35
  %48 = getelementptr inbounds float, ptr %27, i64 %47
  store float %46, ptr %48, align 4, !tbaa !20
  %49 = load float, ptr %44, align 4, !tbaa !20
  %50 = fmul float %49, %30
  %51 = fdiv float 1.000000e+00, %50
  %52 = getelementptr inbounds float, ptr %26, i64 %47
  store float %51, ptr %52, align 4, !tbaa !20
  %53 = or disjoint i64 %.0395473.us.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.0395473.us.unr = phi i64 [ %.0395473.us.ph, %scalar.ph.preheader ], [ %53, %scalar.ph.prol ]
  %54 = icmp eq i64 %10, %.neg657
  br i1 %54, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.0395473.us = phi i64 [ %74, %scalar.ph ], [ %.0395473.us.unr, %scalar.ph.prol.loopexit ]
  %55 = getelementptr inbounds float, ptr %3, i64 %.0395473.us
  %56 = load float, ptr %55, align 4, !tbaa !20
  %57 = fdiv float %56, %30
  %58 = add nuw nsw i64 %.0395473.us, %35
  %59 = getelementptr inbounds float, ptr %27, i64 %58
  store float %57, ptr %59, align 4, !tbaa !20
  %60 = load float, ptr %55, align 4, !tbaa !20
  %61 = fmul float %60, %30
  %62 = fdiv float 1.000000e+00, %61
  %63 = getelementptr inbounds float, ptr %26, i64 %58
  store float %62, ptr %63, align 4, !tbaa !20
  %64 = add nuw nsw i64 %.0395473.us, 1
  %65 = getelementptr inbounds float, ptr %3, i64 %64
  %66 = load float, ptr %65, align 4, !tbaa !20
  %67 = fdiv float %66, %30
  %68 = add nuw nsw i64 %64, %35
  %69 = getelementptr inbounds float, ptr %27, i64 %68
  store float %67, ptr %69, align 4, !tbaa !20
  %70 = load float, ptr %65, align 4, !tbaa !20
  %71 = fmul float %70, %30
  %72 = fdiv float 1.000000e+00, %71
  %73 = getelementptr inbounds float, ptr %26, i64 %68
  store float %72, ptr %73, align 4, !tbaa !20
  %74 = add nuw nsw i64 %.0395473.us, 2
  %exitcond.not.1 = icmp eq i64 %74, %10
  br i1 %exitcond.not.1, label %._crit_edge.us, label %scalar.ph, !llvm.loop !34

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %75 = add nuw nsw i64 %.0474.us, 1
  %exitcond556.not = icmp eq i64 %75, %2
  br i1 %exitcond556.not, label %._crit_edge475, label %.preheader449.us, !llvm.loop !35

._crit_edge475:                                   ; preds = %._crit_edge.us, %.preheader449.lr.ph, %5
  %76 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %77 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %78 = getelementptr inbounds i8, ptr %1, i64 88
  %79 = load ptr, ptr %78, align 8, !tbaa !36
  %80 = tail call i64 @libmetis__idxargmax(i64 noundef %8, ptr noundef %79) #4
  %81 = getelementptr inbounds i64, ptr %79, i64 %80
  %82 = load i64, ptr %81, align 8, !tbaa !37
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %6, i64 noundef %8, i64 noundef %82) #4
  %83 = getelementptr inbounds i8, ptr %0, i64 8
  %84 = load i64, ptr %83, align 8, !tbaa !38
  %85 = and i64 %84, 8
  %.not = icmp eq i64 %85, 0
  br i1 %.not, label %108, label %86

86:                                               ; preds = %._crit_edge475
  %87 = call i64 @gk_fargmin(i64 noundef %25, ptr noundef %24) #4
  %88 = getelementptr inbounds float, ptr %24, i64 %87
  %89 = load float, ptr %88, align 4, !tbaa !20
  %90 = fpext float %89 to double
  %91 = call i64 @gk_fargmax(i64 noundef %25, ptr noundef %24) #4
  %92 = getelementptr inbounds float, ptr %24, i64 %91
  %93 = load float, ptr %92, align 4, !tbaa !20
  %94 = fpext float %93 to double
  %95 = load i64, ptr %1, align 8, !tbaa !5
  %96 = getelementptr inbounds i8, ptr %1, i64 144
  %97 = load i64, ptr %96, align 8, !tbaa !42
  %98 = getelementptr inbounds i8, ptr %1, i64 112
  %99 = load i64, ptr %98, align 8, !tbaa !43
  %100 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, double noundef %90, double noundef %94, i64 noundef %95, i64 noundef %97, i64 noundef %99) #4
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %10, i64 noundef %2, ptr noundef %24, ptr noundef nonnull %7)
  %101 = icmp sgt i64 %10, 0
  br i1 %101, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %86, %.lr.ph
  %.1476 = phi i64 [ %106, %.lr.ph ], [ 0, %86 ]
  %102 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.1476
  %103 = load float, ptr %102, align 4, !tbaa !20
  %104 = fpext float %103 to double
  %105 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %104) #4
  %106 = add nuw nsw i64 %.1476, 1
  %exitcond557.not = icmp eq i64 %106, %10
  br i1 %exitcond557.not, label %._crit_edge, label %.lr.ph, !llvm.loop !44

._crit_edge:                                      ; preds = %.lr.ph, %86
  %107 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5) #4
  br label %108

108:                                              ; preds = %._crit_edge, %._crit_edge475
  %109 = icmp sgt i64 %4, 0
  br i1 %109, label %.lr.ph528, label %._crit_edge529

.lr.ph528:                                        ; preds = %108
  %110 = getelementptr inbounds i8, ptr %1, i64 112
  %111 = getelementptr inbounds i8, ptr %1, i64 144
  %112 = getelementptr inbounds i8, ptr %1, i64 184
  %113 = getelementptr inbounds i8, ptr %1, i64 216
  %114 = getelementptr inbounds i8, ptr %0, i64 112
  %115 = getelementptr inbounds i8, ptr %0, i64 128
  %116 = icmp sgt i64 %10, 0
  br label %117

117:                                              ; preds = %381, %.lr.ph528
  %.0403526 = phi i64 [ 0, %.lr.ph528 ], [ %383, %381 ]
  %118 = call i64 @libmetis__MocIsHBalanced(i64 noundef %10, i64 noundef %2, ptr noundef %24, ptr noundef %3)
  %.not424 = icmp eq i64 %118, 0
  br i1 %.not424, label %119, label %._crit_edge529

119:                                              ; preds = %117
  call void @libmetis__PQueueReset(ptr noundef nonnull %6) #4
  %120 = call ptr @libmetis__idxset(i64 noundef %8, i64 noundef -1, ptr noundef %77) #4
  %121 = load i64, ptr %111, align 8, !tbaa !42
  call void @libmetis__RandomPermute(i64 noundef %121, ptr noundef %76, i64 noundef 1) #4
  %122 = icmp sgt i64 %121, 0
  br i1 %122, label %.lr.ph479, label %.preheader448

.preheader448:                                    ; preds = %.lr.ph479, %119
  %123 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %6) #4
  %124 = icmp eq i64 %123, -1
  br i1 %124, label %.outer._crit_edge, label %.lr.ph495

.lr.ph479:                                        ; preds = %119, %.lr.ph479
  %.0394477 = phi i64 [ %137, %.lr.ph479 ], [ 0, %119 ]
  %125 = getelementptr inbounds i64, ptr %76, i64 %.0394477
  %126 = load i64, ptr %125, align 8, !tbaa !37
  %127 = getelementptr inbounds i64, ptr %18, i64 %126
  %128 = load i64, ptr %127, align 8, !tbaa !37
  %129 = load ptr, ptr %112, align 8, !tbaa !45
  %130 = getelementptr inbounds %struct.rinfodef, ptr %129, i64 %128
  %131 = getelementptr inbounds i8, ptr %130, i64 8
  %132 = load i64, ptr %131, align 8, !tbaa !46
  %133 = load i64, ptr %130, align 8, !tbaa !48
  %134 = sub nsw i64 %132, %133
  %135 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %6, i64 noundef %128, i64 noundef %134) #4
  %136 = getelementptr inbounds i64, ptr %77, i64 %128
  store i64 2, ptr %136, align 8, !tbaa !37
  %137 = add nuw nsw i64 %.0394477, 1
  %exitcond558.not = icmp eq i64 %137, %121
  br i1 %exitcond558.not, label %.preheader448, label %.lr.ph479, !llvm.loop !49

138:                                              ; preds = %.lr.ph495, %.backedge
  %139 = phi i64 [ %361, %.lr.ph495 ], [ %152, %.backedge ]
  %140 = getelementptr inbounds i64, ptr %77, i64 %139
  store i64 1, ptr %140, align 8, !tbaa !37
  %141 = load ptr, ptr %112, align 8, !tbaa !45
  %142 = getelementptr inbounds %struct.rinfodef, ptr %141, i64 %139
  %143 = getelementptr inbounds i64, ptr %22, i64 %139
  %144 = load i64, ptr %143, align 8, !tbaa !37
  %145 = load ptr, ptr %113, align 8, !tbaa !50
  %146 = mul nsw i64 %139, %10
  %147 = getelementptr inbounds float, ptr %145, i64 %146
  %148 = mul nsw i64 %144, %10
  %149 = getelementptr inbounds float, ptr %24, i64 %148
  %150 = getelementptr inbounds float, ptr %26, i64 %148
  %151 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %10, float noundef 1.000000e+00, ptr noundef %149, float noundef -1.000000e+00, ptr noundef %147, ptr noundef %150)
  %.not425 = icmp eq i64 %151, 0
  br i1 %.not425, label %154, label %.backedge

.backedge:                                        ; preds = %165, %138, %._crit_edge483, %select.unfold, %190
  %152 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %6) #4
  %153 = icmp eq i64 %152, -1
  br i1 %153, label %.outer._crit_edge, label %138

154:                                              ; preds = %138
  %155 = getelementptr inbounds i8, ptr %142, i64 24
  %156 = load ptr, ptr %155, align 8, !tbaa !51
  %157 = getelementptr inbounds i8, ptr %142, i64 16
  %158 = load i64, ptr %157, align 8, !tbaa !52
  %159 = icmp sgt i64 %158, 0
  br i1 %159, label %.lr.ph482, label %._crit_edge483

.lr.ph482:                                        ; preds = %154, %165
  %.0398480 = phi i64 [ %166, %165 ], [ 0, %154 ]
  %160 = getelementptr inbounds %struct.edegreedef, ptr %156, i64 %.0398480
  %161 = load i64, ptr %160, align 8, !tbaa !53
  %162 = mul nsw i64 %161, %10
  %163 = getelementptr inbounds float, ptr %24, i64 %162
  %164 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %10, i64 noundef %2, ptr noundef %149, ptr noundef %163, ptr noundef %147, ptr noundef %3)
  %.not426 = icmp eq i64 %164, 0
  br i1 %.not426, label %165, label %._crit_edge483

165:                                              ; preds = %.lr.ph482
  %166 = add nuw nsw i64 %.0398480, 1
  %exitcond559.not = icmp eq i64 %166, %158
  br i1 %exitcond559.not, label %.backedge, label %.lr.ph482, !llvm.loop !55

._crit_edge483:                                   ; preds = %.lr.ph482, %154
  %.0398.lcssa = phi i64 [ 0, %154 ], [ %.0398480, %.lr.ph482 ]
  %167 = icmp eq i64 %.0398.lcssa, %158
  br i1 %167, label %.backedge, label %.preheader447

.preheader447:                                    ; preds = %._crit_edge483
  %.1396486 = add nuw nsw i64 %.0398.lcssa, 1
  %168 = icmp slt i64 %.1396486, %158
  br i1 %168, label %.lr.ph489, label %._crit_edge490

.lr.ph489:                                        ; preds = %.preheader447, %.lr.ph489
  %.1396488 = phi i64 [ %.1396, %.lr.ph489 ], [ %.1396486, %.preheader447 ]
  %.1399487 = phi i64 [ %spec.select, %.lr.ph489 ], [ %.0398.lcssa, %.preheader447 ]
  %169 = getelementptr inbounds %struct.edegreedef, ptr %156, i64 %.1396488
  %170 = load i64, ptr %169, align 8, !tbaa !53
  %171 = getelementptr inbounds %struct.edegreedef, ptr %156, i64 %.1399487
  %172 = load i64, ptr %171, align 8, !tbaa !53
  %173 = mul nsw i64 %172, %10
  %174 = getelementptr inbounds float, ptr %24, i64 %173
  %175 = mul nsw i64 %170, %10
  %176 = getelementptr inbounds float, ptr %24, i64 %175
  %177 = call i64 @libmetis__IsHBalanceBetterTT(i64 noundef %10, i64 noundef %2, ptr noundef %174, ptr noundef %176, ptr noundef %147, ptr noundef %3)
  %.not435 = icmp eq i64 %177, 0
  %spec.select = select i1 %.not435, i64 %.1399487, i64 %.1396488
  %.1396 = add i64 %.1396488, 1
  %exitcond560.not = icmp eq i64 %.1396, %158
  br i1 %exitcond560.not, label %._crit_edge490, label %.lr.ph489, !llvm.loop !56

._crit_edge490:                                   ; preds = %.lr.ph489, %.preheader447
  %.1399.lcssa = phi i64 [ %.0398.lcssa, %.preheader447 ], [ %spec.select, %.lr.ph489 ]
  %178 = getelementptr inbounds %struct.edegreedef, ptr %156, i64 %.1399.lcssa
  %179 = load i64, ptr %178, align 8, !tbaa !53
  %180 = getelementptr inbounds float, ptr %27, i64 %148
  %181 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %10, float noundef 1.000000e+00, ptr noundef %149, float noundef 0.000000e+00, ptr noundef %147, ptr noundef %180)
  %.not427 = icmp eq i64 %181, 0
  %spec.select437 = zext i1 %.not427 to i64
  %182 = getelementptr inbounds i8, ptr %178, i64 8
  %183 = load i64, ptr %182, align 8, !tbaa !57
  %184 = load i64, ptr %142, align 8, !tbaa !48
  %.not428 = icmp slt i64 %183, %184
  %185 = select i1 %.not427, i64 2, i64 1
  %.3 = select i1 %.not428, i64 %spec.select437, i64 %185
  %186 = mul nsw i64 %179, %10
  %187 = getelementptr inbounds float, ptr %24, i64 %186
  %188 = getelementptr inbounds float, ptr %26, i64 %186
  %189 = call i64 @libmetis__AreAllHVwgtsAbove(i64 noundef %10, float noundef 1.000000e+00, ptr noundef %187, float noundef 0.000000e+00, ptr noundef %147, ptr noundef %188)
  %.not429 = icmp eq i64 %189, 0
  br i1 %.not429, label %190, label %select.unfold

190:                                              ; preds = %._crit_edge490
  %191 = getelementptr inbounds float, ptr %27, i64 %186
  %192 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %10, float noundef 1.000000e+00, ptr noundef %187, float noundef 1.000000e+00, ptr noundef %147, ptr noundef %191)
  %.not430 = icmp eq i64 %192, 0
  %193 = icmp eq i64 %.3, 0
  %or.cond = select i1 %.not430, i1 %193, i1 false
  br i1 %or.cond, label %.backedge, label %.thread

select.unfold:                                    ; preds = %._crit_edge490
  %.old = icmp eq i64 %.3, 0
  br i1 %.old, label %.backedge, label %.thread

.thread:                                          ; preds = %190, %select.unfold
  %194 = getelementptr inbounds i64, ptr %22, i64 %139
  %195 = getelementptr inbounds i8, ptr %142, i64 16
  %196 = getelementptr inbounds i8, ptr %178, i64 8
  %197 = load i64, ptr %196, align 8, !tbaa !57
  %198 = load i64, ptr %142, align 8, !tbaa !48
  %.neg = sub i64 %198, %197
  %199 = load i64, ptr %110, align 8, !tbaa !43
  %200 = add i64 %.neg, %199
  store i64 %200, ptr %110, align 8, !tbaa !43
  %201 = load i64, ptr %83, align 8, !tbaa !38
  %202 = and i64 %201, 32
  %.not431 = icmp eq i64 %202, 0
  br i1 %.not431, label %206, label %203

203:                                              ; preds = %.thread
  %204 = sub nsw i64 %197, %198
  %205 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %139, i64 noundef %179, i64 noundef %204, i64 noundef %200) #4
  br label %206

206:                                              ; preds = %203, %.thread
  %207 = call ptr @gk_faxpy(i64 noundef %10, float noundef 1.000000e+00, ptr noundef %147, i64 noundef 1, ptr noundef %187, i64 noundef 1) #4
  %208 = call ptr @gk_faxpy(i64 noundef %10, float noundef -1.000000e+00, ptr noundef %147, i64 noundef 1, ptr noundef %149, i64 noundef 1) #4
  store i64 %179, ptr %194, align 8, !tbaa !37
  %209 = load i64, ptr %142, align 8, !tbaa !48
  %210 = load i64, ptr %196, align 8, !tbaa !57
  %211 = sub i64 %209, %210
  %212 = getelementptr inbounds i8, ptr %142, i64 8
  %213 = load i64, ptr %212, align 8, !tbaa !46
  %214 = add nsw i64 %211, %213
  store i64 %214, ptr %212, align 8, !tbaa !46
  store i64 %210, ptr %142, align 8, !tbaa !48
  store i64 %209, ptr %196, align 8, !tbaa !57
  %215 = icmp eq i64 %209, 0
  br i1 %215, label %216, label %220

216:                                              ; preds = %206
  %217 = load i64, ptr %195, align 8, !tbaa !52
  %218 = add nsw i64 %217, -1
  store i64 %218, ptr %195, align 8, !tbaa !52
  %219 = getelementptr inbounds %struct.edegreedef, ptr %156, i64 %218
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %178, ptr noundef nonnull align 8 dereferenceable(16) %219, i64 16, i1 false), !tbaa.struct !58
  %.pre = load i64, ptr %212, align 8, !tbaa !46
  br label %221

220:                                              ; preds = %206
  store i64 %144, ptr %178, align 8, !tbaa !53
  br label %221

221:                                              ; preds = %220, %216
  %222 = phi i64 [ %214, %220 ], [ %.pre, %216 ]
  %223 = icmp eq i64 %222, 0
  br i1 %223, label %224, label %233

224:                                              ; preds = %221
  %225 = add nsw i64 %.0404.ph519, -1
  %226 = getelementptr inbounds i64, ptr %18, i64 %225
  %227 = load i64, ptr %226, align 8, !tbaa !37
  %228 = getelementptr inbounds i64, ptr %20, i64 %139
  %229 = load i64, ptr %228, align 8, !tbaa !37
  %230 = getelementptr inbounds i64, ptr %18, i64 %229
  store i64 %227, ptr %230, align 8, !tbaa !37
  %231 = load i64, ptr %228, align 8, !tbaa !37
  %232 = getelementptr inbounds i64, ptr %20, i64 %227
  store i64 %231, ptr %232, align 8, !tbaa !37
  store i64 -1, ptr %228, align 8, !tbaa !37
  br label %233

233:                                              ; preds = %224, %221
  %.1405 = phi i64 [ %225, %224 ], [ %.0404.ph519, %221 ]
  %234 = getelementptr inbounds i64, ptr %12, i64 %139
  %235 = load i64, ptr %234, align 8, !tbaa !37
  %236 = getelementptr i8, ptr %234, i64 8
  %237 = load i64, ptr %236, align 8, !tbaa !37
  %238 = icmp slt i64 %235, %237
  br i1 %238, label %.lr.ph515, label %.outer

.lr.ph515:                                        ; preds = %233, %354
  %.5509 = phi i64 [ %355, %354 ], [ %235, %233 ]
  %.2406508 = phi i64 [ %.3407442, %354 ], [ %.1405, %233 ]
  %239 = getelementptr inbounds i64, ptr %14, i64 %.5509
  %240 = load i64, ptr %239, align 8, !tbaa !37
  %241 = getelementptr inbounds i64, ptr %22, i64 %240
  %242 = load i64, ptr %241, align 8, !tbaa !37
  %243 = load ptr, ptr %112, align 8, !tbaa !45
  %244 = getelementptr inbounds %struct.rinfodef, ptr %243, i64 %240
  %245 = getelementptr inbounds i8, ptr %244, i64 24
  %246 = load ptr, ptr %245, align 8, !tbaa !51
  %247 = icmp eq ptr %246, null
  br i1 %247, label %248, label %258

248:                                              ; preds = %.lr.ph515
  %249 = load ptr, ptr %114, align 8, !tbaa !59
  %250 = load i64, ptr %115, align 8, !tbaa !60
  %251 = getelementptr inbounds %struct.edegreedef, ptr %249, i64 %250
  store ptr %251, ptr %245, align 8, !tbaa !51
  %252 = getelementptr i64, ptr %12, i64 %240
  %253 = getelementptr i8, ptr %252, i64 8
  %254 = load i64, ptr %253, align 8, !tbaa !37
  %255 = load i64, ptr %252, align 8, !tbaa !37
  %256 = add i64 %254, %250
  %257 = sub i64 %256, %255
  store i64 %257, ptr %115, align 8, !tbaa !60
  br label %258

258:                                              ; preds = %248, %.lr.ph515
  %259 = phi ptr [ %251, %248 ], [ %246, %.lr.ph515 ]
  %260 = getelementptr inbounds i8, ptr %244, i64 8
  %261 = load i64, ptr %260, align 8, !tbaa !46
  %262 = load i64, ptr %244, align 8, !tbaa !48
  %263 = sub nsw i64 %261, %262
  %264 = icmp eq i64 %242, %144
  br i1 %264, label %265, label %279

265:                                              ; preds = %258
  %266 = getelementptr inbounds i64, ptr %16, i64 %.5509
  %267 = load i64, ptr %266, align 8, !tbaa !37
  %268 = add nsw i64 %267, %261
  store i64 %268, ptr %260, align 8, !tbaa !46
  %269 = load i64, ptr %266, align 8, !tbaa !37
  %270 = sub nsw i64 %262, %269
  store i64 %270, ptr %244, align 8, !tbaa !48
  %271 = icmp sgt i64 %268, 0
  br i1 %271, label %272, label %.thread440

272:                                              ; preds = %265
  %273 = getelementptr inbounds i64, ptr %20, i64 %240
  %274 = load i64, ptr %273, align 8, !tbaa !37
  %275 = icmp eq i64 %274, -1
  br i1 %275, label %276, label %.thread440

276:                                              ; preds = %272
  %277 = getelementptr inbounds i64, ptr %18, i64 %.2406508
  store i64 %240, ptr %277, align 8, !tbaa !37
  %278 = add nsw i64 %.2406508, 1
  store i64 %.2406508, ptr %273, align 8, !tbaa !37
  br label %.thread440

279:                                              ; preds = %258
  %280 = icmp eq i64 %242, %179
  br i1 %280, label %281, label %298

281:                                              ; preds = %279
  %282 = getelementptr inbounds i64, ptr %16, i64 %.5509
  %283 = load i64, ptr %282, align 8, !tbaa !37
  %284 = add nsw i64 %283, %262
  store i64 %284, ptr %244, align 8, !tbaa !48
  %285 = load i64, ptr %282, align 8, !tbaa !37
  %286 = sub nsw i64 %261, %285
  store i64 %286, ptr %260, align 8, !tbaa !46
  %287 = icmp eq i64 %261, %285
  br i1 %287, label %288, label %298

288:                                              ; preds = %281
  %289 = getelementptr inbounds i64, ptr %20, i64 %240
  %290 = load i64, ptr %289, align 8, !tbaa !37
  %.not432 = icmp eq i64 %290, -1
  br i1 %.not432, label %298, label %291

291:                                              ; preds = %288
  %292 = add nsw i64 %.2406508, -1
  %293 = getelementptr inbounds i64, ptr %18, i64 %292
  %294 = load i64, ptr %293, align 8, !tbaa !37
  %295 = getelementptr inbounds i64, ptr %18, i64 %290
  store i64 %294, ptr %295, align 8, !tbaa !37
  %296 = load i64, ptr %289, align 8, !tbaa !37
  %297 = getelementptr inbounds i64, ptr %20, i64 %294
  store i64 %296, ptr %297, align 8, !tbaa !37
  store i64 -1, ptr %289, align 8, !tbaa !37
  br label %298

298:                                              ; preds = %279, %291, %288, %281
  %.3407 = phi i64 [ %292, %291 ], [ %.2406508, %288 ], [ %.2406508, %281 ], [ %.2406508, %279 ]
  %299 = getelementptr inbounds i8, ptr %244, i64 16
  %300 = load i64, ptr %299, align 8, !tbaa !52
  %301 = icmp sgt i64 %300, 0
  br i1 %301, label %.lr.ph503, label %.thread440

302:                                              ; preds = %.lr.ph503
  %303 = add nuw nsw i64 %.3401501, 1
  %exitcond561.not = icmp eq i64 %303, %300
  br i1 %exitcond561.not, label %.thread440, label %.lr.ph503, !llvm.loop !61

.lr.ph503:                                        ; preds = %298, %302
  %.3401501 = phi i64 [ %303, %302 ], [ 0, %298 ]
  %304 = getelementptr inbounds %struct.edegreedef, ptr %259, i64 %.3401501
  %305 = load i64, ptr %304, align 8, !tbaa !53
  %306 = icmp eq i64 %305, %144
  br i1 %306, label %307, label %302

307:                                              ; preds = %.lr.ph503
  %308 = getelementptr inbounds i8, ptr %304, i64 8
  %309 = load i64, ptr %308, align 8, !tbaa !57
  %310 = getelementptr inbounds i64, ptr %16, i64 %.5509
  %311 = load i64, ptr %310, align 8, !tbaa !37
  %312 = icmp eq i64 %309, %311
  br i1 %312, label %313, label %316

313:                                              ; preds = %307
  %314 = add nsw i64 %300, -1
  store i64 %314, ptr %299, align 8, !tbaa !52
  %315 = getelementptr inbounds %struct.edegreedef, ptr %259, i64 %314
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %304, ptr noundef nonnull align 8 dereferenceable(16) %315, i64 16, i1 false), !tbaa.struct !58
  br label %.thread440

316:                                              ; preds = %307
  %317 = sub nsw i64 %309, %311
  store i64 %317, ptr %308, align 8, !tbaa !57
  br label %.thread440

.thread440:                                       ; preds = %302, %298, %276, %272, %265, %316, %313
  %.3407442 = phi i64 [ %.3407, %316 ], [ %.3407, %313 ], [ %.2406508, %265 ], [ %.2406508, %272 ], [ %278, %276 ], [ %.3407, %298 ], [ %.3407, %302 ]
  %.not434 = icmp eq i64 %242, %179
  br i1 %.not434, label %.thread443, label %.preheader

.preheader:                                       ; preds = %.thread440
  %318 = getelementptr inbounds i8, ptr %244, i64 16
  %319 = load i64, ptr %318, align 8, !tbaa !52
  %320 = icmp sgt i64 %319, 0
  br i1 %320, label %.lr.ph505, label %.loopexit

.lr.ph505:                                        ; preds = %.preheader, %330
  %.4402504 = phi i64 [ %331, %330 ], [ 0, %.preheader ]
  %321 = getelementptr inbounds %struct.edegreedef, ptr %259, i64 %.4402504
  %322 = load i64, ptr %321, align 8, !tbaa !53
  %323 = icmp eq i64 %322, %179
  br i1 %323, label %324, label %330

324:                                              ; preds = %.lr.ph505
  %325 = getelementptr inbounds i64, ptr %16, i64 %.5509
  %326 = load i64, ptr %325, align 8, !tbaa !37
  %327 = getelementptr inbounds i8, ptr %321, i64 8
  %328 = load i64, ptr %327, align 8, !tbaa !57
  %329 = add nsw i64 %328, %326
  store i64 %329, ptr %327, align 8, !tbaa !57
  br label %.loopexit

330:                                              ; preds = %.lr.ph505
  %331 = add nuw nsw i64 %.4402504, 1
  %exitcond562.not = icmp eq i64 %331, %319
  br i1 %exitcond562.not, label %.loopexit.thread, label %.lr.ph505, !llvm.loop !62

.loopexit:                                        ; preds = %.preheader, %324
  %.4402471 = phi i64 [ %.4402504, %324 ], [ 0, %.preheader ]
  %332 = icmp eq i64 %.4402471, %319
  br i1 %332, label %.loopexit.thread, label %338

.loopexit.thread:                                 ; preds = %330, %.loopexit
  %333 = getelementptr inbounds %struct.edegreedef, ptr %259, i64 %319
  store i64 %179, ptr %333, align 8, !tbaa !53
  %334 = getelementptr inbounds i64, ptr %16, i64 %.5509
  %335 = load i64, ptr %334, align 8, !tbaa !37
  %336 = add nsw i64 %319, 1
  store i64 %336, ptr %318, align 8, !tbaa !52
  %337 = getelementptr inbounds %struct.edegreedef, ptr %259, i64 %319, i32 1
  store i64 %335, ptr %337, align 8, !tbaa !57
  br label %338

338:                                              ; preds = %.loopexit, %.loopexit.thread
  br i1 %264, label %.thread443, label %354

.thread443:                                       ; preds = %.thread440, %338
  %339 = load i64, ptr %260, align 8, !tbaa !46
  %340 = load i64, ptr %244, align 8, !tbaa !48
  %341 = sub nsw i64 %339, %340
  %342 = getelementptr inbounds i64, ptr %77, i64 %240
  %343 = load i64, ptr %342, align 8, !tbaa !37
  switch i64 %343, label %354 [
    i64 2, label %344
    i64 -1, label %350
  ]

344:                                              ; preds = %.thread443
  %345 = icmp sgt i64 %339, 0
  br i1 %345, label %346, label %348

346:                                              ; preds = %344
  %347 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %6, i64 noundef %240, i64 noundef %263, i64 noundef %341) #4
  br label %354

348:                                              ; preds = %344
  %349 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %6, i64 noundef %240, i64 noundef %263) #4
  store i64 -1, ptr %342, align 8, !tbaa !37
  br label %354

350:                                              ; preds = %.thread443
  %351 = icmp sgt i64 %339, 0
  br i1 %351, label %352, label %354

352:                                              ; preds = %350
  %353 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %6, i64 noundef %240, i64 noundef %341) #4
  store i64 2, ptr %342, align 8, !tbaa !37
  br label %354

354:                                              ; preds = %.thread443, %338, %350, %352, %346, %348
  %355 = add nsw i64 %.5509, 1
  %356 = load i64, ptr %236, align 8, !tbaa !37
  %357 = icmp slt i64 %355, %356
  br i1 %357, label %.lr.ph515, label %.outer, !llvm.loop !63

.outer:                                           ; preds = %354, %233
  %.2406.lcssa = phi i64 [ %.1405, %233 ], [ %.3407442, %354 ]
  %358 = add nuw nsw i64 %.0408.ph518, 1
  %359 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %6) #4
  %360 = icmp eq i64 %359, -1
  br i1 %360, label %.outer._crit_edge, label %.lr.ph495

.lr.ph495:                                        ; preds = %.preheader448, %.outer
  %361 = phi i64 [ %359, %.outer ], [ %123, %.preheader448 ]
  %.0404.ph519 = phi i64 [ %.2406.lcssa, %.outer ], [ %121, %.preheader448 ]
  %.0408.ph518 = phi i64 [ %358, %.outer ], [ 0, %.preheader448 ]
  br label %138

.outer._crit_edge:                                ; preds = %.outer, %.backedge, %.preheader448
  %.0408.ph.lcssa = phi i64 [ 0, %.preheader448 ], [ %.0408.ph518, %.backedge ], [ %358, %.outer ]
  %.0404.ph.lcssa = phi i64 [ %121, %.preheader448 ], [ %.0404.ph519, %.backedge ], [ %.2406.lcssa, %.outer ]
  store i64 %.0404.ph.lcssa, ptr %111, align 8, !tbaa !42
  %362 = load i64, ptr %83, align 8, !tbaa !38
  %363 = and i64 %362, 8
  %.not436 = icmp eq i64 %363, 0
  br i1 %.not436, label %381, label %364

364:                                              ; preds = %.outer._crit_edge
  %365 = call i64 @gk_fargmin(i64 noundef %25, ptr noundef %24) #4
  %366 = getelementptr inbounds float, ptr %24, i64 %365
  %367 = load float, ptr %366, align 4, !tbaa !20
  %368 = fpext float %367 to double
  %369 = call i64 @gk_fargmax(i64 noundef %25, ptr noundef %24) #4
  %370 = getelementptr inbounds float, ptr %24, i64 %369
  %371 = load float, ptr %370, align 4, !tbaa !20
  %372 = fpext float %371 to double
  %373 = load i64, ptr %110, align 8, !tbaa !43
  %374 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, double noundef %368, double noundef %372, i64 noundef %.0404.ph.lcssa, i64 noundef %.0408.ph.lcssa, i64 noundef %373) #4
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %10, i64 noundef %2, ptr noundef %24, ptr noundef nonnull %7)
  br i1 %116, label %.lr.ph524, label %._crit_edge525

.lr.ph524:                                        ; preds = %364, %.lr.ph524
  %.2522 = phi i64 [ %379, %.lr.ph524 ], [ 0, %364 ]
  %375 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %.2522
  %376 = load float, ptr %375, align 4, !tbaa !20
  %377 = fpext float %376 to double
  %378 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %377) #4
  %379 = add nuw nsw i64 %.2522, 1
  %exitcond563.not = icmp eq i64 %379, %10
  br i1 %exitcond563.not, label %._crit_edge525, label %.lr.ph524, !llvm.loop !64

._crit_edge525:                                   ; preds = %.lr.ph524, %364
  %380 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2) #4
  br label %381

381:                                              ; preds = %._crit_edge525, %.outer._crit_edge
  %382 = icmp eq i64 %.0408.ph.lcssa, 0
  %383 = add nuw nsw i64 %.0403526, 1
  %exitcond564.not = icmp eq i64 %383, %4
  %or.cond597 = select i1 %382, i1 true, i1 %exitcond564.not
  br i1 %or.cond597, label %._crit_edge529, label %117, !llvm.loop !65

._crit_edge529:                                   ; preds = %117, %381, %108
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %6) #4
  call void @fwspacefree(ptr noundef %0, i64 noundef %25) #4
  call void @fwspacefree(ptr noundef %0, i64 noundef %25) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %8) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %8) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #4
  ret void
}

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

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

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

declare void @libmetis__PQueueReset(ptr noundef) local_unnamed_addr #1

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #1

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

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

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

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

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 = { mustprogress 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 40}
!15 = !{!6, !10, i64 48}
!16 = !{!6, !10, i64 160}
!17 = !{!6, !10, i64 152}
!18 = !{!6, !10, i64 128}
!19 = !{!6, !10, i64 224}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !8, i64 0}
!22 = !{!23}
!23 = distinct !{!23, !24}
!24 = distinct !{!24, !"LVerDomain"}
!25 = !{!26}
!26 = distinct !{!26, !24}
!27 = !{!28, !23}
!28 = distinct !{!28, !24}
!29 = !{!28}
!30 = distinct !{!30, !31, !32, !33}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!"llvm.loop.isvectorized", i32 1}
!33 = !{!"llvm.loop.unroll.runtime.disable"}
!34 = distinct !{!34, !31, !32}
!35 = distinct !{!35, !31}
!36 = !{!6, !10, i64 88}
!37 = !{!7, !7, i64 0}
!38 = !{!39, !7, i64 8}
!39 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !21, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !40, i64 88, !41, i64 152, !41, i64 160, !41, i64 168, !41, i64 176, !41, i64 184, !41, i64 192, !41, i64 200, !41, i64 208, !41, i64 216, !41, i64 224, !41, i64 232, !41, i64 240, !41, i64 248, !41, i64 256, !41, i64 264, !41, i64 272}
!40 = !{!"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}
!41 = !{!"double", !8, i64 0}
!42 = !{!6, !7, i64 144}
!43 = !{!6, !7, i64 112}
!44 = distinct !{!44, !31}
!45 = !{!6, !10, i64 184}
!46 = !{!47, !7, i64 8}
!47 = !{!"rinfodef", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24}
!48 = !{!47, !7, i64 0}
!49 = distinct !{!49, !31}
!50 = !{!6, !10, i64 216}
!51 = !{!47, !10, i64 24}
!52 = !{!47, !7, i64 16}
!53 = !{!54, !7, i64 0}
!54 = !{!"edegreedef", !7, i64 0, !7, i64 8}
!55 = distinct !{!55, !31}
!56 = distinct !{!56, !31}
!57 = !{!54, !7, i64 8}
!58 = !{i64 0, i64 8, !37, i64 8, i64 8, !37}
!59 = !{!39, !10, i64 112}
!60 = !{!39, !7, i64 128}
!61 = distinct !{!61, !31}
!62 = distinct !{!62, !31}
!63 = distinct !{!63, !31}
!64 = distinct !{!64, !31}
!65 = distinct !{!65, !31}


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