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

; 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 [75 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [47 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__idxwspacemalloc(ptr noundef, i64 noundef) #1

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

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

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

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

declare void @libmetis__RandomPermute(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) #2

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

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

87:                                               ; preds = %83
  %88 = load ptr, ptr %10, align 8, !tbaa !5
  %89 = load i64, ptr %13, align 8, !tbaa !9
  %90 = getelementptr inbounds float, ptr %88, i64 %89
  %91 = load float, ptr %90, align 4, !tbaa !11
  %92 = load i64, ptr %23, align 8, !tbaa !9
  %93 = sitofp i64 %92 to float
  %94 = fmul float %91, %93
  %95 = fptosi float %94 to i64
  %96 = load ptr, ptr %43, align 8, !tbaa !5
  %97 = load i64, ptr %13, align 8, !tbaa !9
  %98 = getelementptr inbounds i64, ptr %96, i64 %97
  store i64 %95, ptr %98, align 8, !tbaa !9
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = load i64, ptr %13, align 8, !tbaa !9
  %101 = getelementptr inbounds float, ptr %99, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !11
  %103 = load i64, ptr %23, align 8, !tbaa !9
  %104 = sitofp i64 %103 to float
  %105 = fmul float %102, %104
  %106 = load float, ptr %11, align 4, !tbaa !11
  %107 = fmul float %105, %106
  %108 = fptosi float %107 to i64
  %109 = load ptr, ptr %41, align 8, !tbaa !5
  %110 = load i64, ptr %13, align 8, !tbaa !9
  %111 = getelementptr inbounds i64, ptr %109, i64 %110
  store i64 %108, ptr %111, align 8, !tbaa !9
  %112 = load ptr, ptr %10, align 8, !tbaa !5
  %113 = load i64, ptr %13, align 8, !tbaa !9
  %114 = getelementptr inbounds float, ptr %112, i64 %113
  %115 = load float, ptr %114, align 4, !tbaa !11
  %116 = load i64, ptr %23, align 8, !tbaa !9
  %117 = sitofp i64 %116 to float
  %118 = fmul float %115, %117
  %119 = fpext float %118 to double
  %120 = load float, ptr %11, align 4, !tbaa !11
  %121 = fpext float %120 to double
  %122 = fdiv double 1.000000e+00, %121
  %123 = fmul double %119, %122
  %124 = fptosi double %123 to i64
  %125 = load ptr, ptr %40, align 8, !tbaa !5
  %126 = load i64, ptr %13, align 8, !tbaa !9
  %127 = getelementptr inbounds i64, ptr %125, i64 %126
  store i64 %124, ptr %127, align 8, !tbaa !9
  br label %128

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

131:                                              ; preds = %83
  %132 = load ptr, ptr %7, align 8, !tbaa !5
  %133 = load i64, ptr %21, align 8, !tbaa !9
  %134 = call ptr @libmetis__idxwspacemalloc(ptr noundef %132, i64 noundef %133)
  store ptr %134, ptr %37, align 8, !tbaa !5
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = load i64, ptr %21, align 8, !tbaa !9
  %137 = call ptr @libmetis__idxwspacemalloc(ptr noundef %135, i64 noundef %136)
  store ptr %137, ptr %42, align 8, !tbaa !5
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = load i64, ptr %21, align 8, !tbaa !9
  %140 = load ptr, ptr %8, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.graphdef, ptr %140, i32 0, i32 13
  %142 = load ptr, ptr %141, align 8, !tbaa !25
  %143 = load i64, ptr %21, align 8, !tbaa !9
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.graphdef, ptr %144, i32 0, i32 13
  %146 = load ptr, ptr %145, align 8, !tbaa !25
  %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 %46, i64 noundef %139, i64 noundef %149)
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.controldef, ptr %150, i32 0, i32 1
  %152 = load i64, ptr %151, align 8, !tbaa !26
  %153 = and i64 %152, 8
  %154 = icmp ne i64 %153, 0
  br i1 %154, label %155, label %198

155:                                              ; preds = %131
  %156 = load ptr, ptr %36, align 8, !tbaa !5
  %157 = load i64, ptr %9, align 8, !tbaa !9
  %158 = load ptr, ptr %36, align 8, !tbaa !5
  %159 = call i64 @libmetis__idxargmin(i64 noundef %157, ptr noundef %158)
  %160 = getelementptr inbounds i64, ptr %156, i64 %159
  %161 = load i64, ptr %160, align 8, !tbaa !9
  %162 = load ptr, ptr %36, align 8, !tbaa !5
  %163 = load i64, ptr %9, align 8, !tbaa !9
  %164 = load ptr, ptr %36, align 8, !tbaa !5
  %165 = call i64 @libmetis__idxargmax(i64 noundef %163, ptr noundef %164)
  %166 = getelementptr inbounds i64, ptr %162, i64 %165
  %167 = load i64, ptr %166, align 8, !tbaa !9
  %168 = load ptr, ptr %40, align 8, !tbaa !5
  %169 = getelementptr inbounds i64, ptr %168, i64 0
  %170 = load i64, ptr %169, align 8, !tbaa !9
  %171 = load ptr, ptr %41, align 8, !tbaa !5
  %172 = getelementptr inbounds i64, ptr %171, i64 0
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = load i64, ptr %9, align 8, !tbaa !9
  %175 = sitofp i64 %174 to double
  %176 = fmul double 1.000000e+00, %175
  %177 = load ptr, ptr %36, align 8, !tbaa !5
  %178 = load i64, ptr %9, align 8, !tbaa !9
  %179 = load ptr, ptr %36, align 8, !tbaa !5
  %180 = call i64 @libmetis__idxargmax(i64 noundef %178, ptr noundef %179)
  %181 = getelementptr inbounds i64, ptr %177, i64 %180
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = sitofp i64 %182 to double
  %184 = fmul double %176, %183
  %185 = load i64, ptr %23, align 8, !tbaa !9
  %186 = sitofp i64 %185 to double
  %187 = fdiv double %184, %186
  %188 = load ptr, ptr %8, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.graphdef, ptr %188, i32 0, i32 0
  %190 = load i64, ptr %189, align 8, !tbaa !13
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.graphdef, ptr %191, i32 0, i32 20
  %193 = load i64, ptr %192, align 8, !tbaa !30
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.graphdef, ptr %194, i32 0, i32 16
  %196 = load i64, ptr %195, align 8, !tbaa !31
  %197 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, i64 noundef %161, i64 noundef %167, i64 noundef %170, i64 noundef %173, double noundef %187, i64 noundef %190, i64 noundef %193, i64 noundef %196)
  br label %198

198:                                              ; preds = %155, %131
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %199

199:                                              ; preds = %1055, %198
  %200 = load i64, ptr %20, align 8, !tbaa !9
  %201 = load i64, ptr %12, align 8, !tbaa !9
  %202 = icmp slt i64 %200, %201
  br i1 %202, label %203, label %1058

203:                                              ; preds = %199
  call void @libmetis__PQueueReset(ptr noundef %46)
  %204 = load i64, ptr %21, align 8, !tbaa !9
  %205 = load ptr, ptr %42, align 8, !tbaa !5
  %206 = call ptr @libmetis__idxset(i64 noundef %204, i64 noundef -1, ptr noundef %205)
  %207 = load ptr, ptr %8, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.graphdef, ptr %207, i32 0, i32 16
  %209 = load i64, ptr %208, align 8, !tbaa !31
  store i64 %209, ptr %30, align 8, !tbaa !9
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.graphdef, ptr %210, i32 0, i32 20
  %212 = load i64, ptr %211, align 8, !tbaa !30
  store i64 %212, ptr %22, align 8, !tbaa !9
  %213 = load i64, ptr %22, align 8, !tbaa !9
  %214 = load ptr, ptr %37, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %213, ptr noundef %214, i64 noundef 1)
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %215

215:                                              ; preds = %247, %203
  %216 = load i64, ptr %14, align 8, !tbaa !9
  %217 = load i64, ptr %22, align 8, !tbaa !9
  %218 = icmp slt i64 %216, %217
  br i1 %218, label %219, label %250

219:                                              ; preds = %215
  %220 = load ptr, ptr %39, align 8, !tbaa !5
  %221 = load ptr, ptr %37, align 8, !tbaa !5
  %222 = load i64, ptr %14, align 8, !tbaa !9
  %223 = getelementptr inbounds i64, ptr %221, i64 %222
  %224 = load i64, ptr %223, align 8, !tbaa !9
  %225 = getelementptr inbounds i64, ptr %220, i64 %224
  %226 = load i64, ptr %225, align 8, !tbaa !9
  store i64 %226, ptr %13, align 8, !tbaa !9
  %227 = load i64, ptr %13, align 8, !tbaa !9
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.graphdef, ptr %228, i32 0, i32 25
  %230 = load ptr, ptr %229, align 8, !tbaa !32
  %231 = load i64, ptr %13, align 8, !tbaa !9
  %232 = getelementptr inbounds %struct.rinfodef, ptr %230, i64 %231
  %233 = getelementptr inbounds %struct.rinfodef, ptr %232, i32 0, i32 1
  %234 = load i64, ptr %233, align 8, !tbaa !33
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.graphdef, ptr %235, i32 0, i32 25
  %237 = load ptr, ptr %236, align 8, !tbaa !32
  %238 = load i64, ptr %13, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.rinfodef, ptr %237, i64 %238
  %240 = getelementptr inbounds %struct.rinfodef, ptr %239, i32 0, i32 0
  %241 = load i64, ptr %240, align 8, !tbaa !35
  %242 = sub nsw i64 %234, %241
  %243 = call i64 @libmetis__PQueueInsert(ptr noundef %46, i64 noundef %227, i64 noundef %242)
  %244 = load ptr, ptr %42, align 8, !tbaa !5
  %245 = load i64, ptr %13, align 8, !tbaa !9
  %246 = getelementptr inbounds i64, ptr %244, i64 %245
  store i64 2, ptr %246, align 8, !tbaa !9
  br label %247

247:                                              ; preds = %219
  %248 = load i64, ptr %14, align 8, !tbaa !9
  %249 = add nsw i64 %248, 1
  store i64 %249, ptr %14, align 8, !tbaa !9
  br label %215, !llvm.loop !36

250:                                              ; preds = %215
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %251

251:                                              ; preds = %1001, %250
  %252 = call i64 @libmetis__PQueueGetMax(ptr noundef %46)
  store i64 %252, ptr %13, align 8, !tbaa !9
  %253 = icmp eq i64 %252, -1
  br i1 %253, label %254, label %255

254:                                              ; preds = %251
  br label %1004

255:                                              ; preds = %251
  %256 = load ptr, ptr %42, align 8, !tbaa !5
  %257 = load i64, ptr %13, align 8, !tbaa !9
  %258 = getelementptr inbounds i64, ptr %256, i64 %257
  store i64 1, ptr %258, align 8, !tbaa !9
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.graphdef, ptr %259, i32 0, i32 25
  %261 = load ptr, ptr %260, align 8, !tbaa !32
  %262 = load i64, ptr %13, align 8, !tbaa !9
  %263 = getelementptr inbounds %struct.rinfodef, ptr %261, i64 %262
  store ptr %263, ptr %45, align 8, !tbaa !5
  %264 = load ptr, ptr %35, align 8, !tbaa !5
  %265 = load i64, ptr %13, align 8, !tbaa !9
  %266 = getelementptr inbounds i64, ptr %264, i64 %265
  %267 = load i64, ptr %266, align 8, !tbaa !9
  store i64 %267, ptr %27, align 8, !tbaa !9
  %268 = load ptr, ptr %8, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.graphdef, ptr %268, i32 0, i32 3
  %270 = load ptr, ptr %269, align 8, !tbaa !37
  %271 = load i64, ptr %13, align 8, !tbaa !9
  %272 = getelementptr inbounds i64, ptr %270, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !9
  store i64 %273, ptr %31, align 8, !tbaa !9
  %274 = load ptr, ptr %36, align 8, !tbaa !5
  %275 = load i64, ptr %27, align 8, !tbaa !9
  %276 = getelementptr inbounds i64, ptr %274, i64 %275
  %277 = load i64, ptr %276, align 8, !tbaa !9
  %278 = load i64, ptr %31, align 8, !tbaa !9
  %279 = sub nsw i64 %277, %278
  %280 = load ptr, ptr %40, align 8, !tbaa !5
  %281 = load i64, ptr %27, align 8, !tbaa !9
  %282 = getelementptr inbounds i64, ptr %280, i64 %281
  %283 = load i64, ptr %282, align 8, !tbaa !9
  %284 = icmp slt i64 %279, %283
  br i1 %284, label %285, label %286

285:                                              ; preds = %255
  br label %1001

286:                                              ; preds = %255
  %287 = load ptr, ptr %45, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.rinfodef, ptr %287, i32 0, i32 3
  %289 = load ptr, ptr %288, align 8, !tbaa !38
  store ptr %289, ptr %44, align 8, !tbaa !5
  %290 = load ptr, ptr %45, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.rinfodef, ptr %290, i32 0, i32 2
  %292 = load i64, ptr %291, align 8, !tbaa !39
  store i64 %292, ptr %24, align 8, !tbaa !9
  %293 = load ptr, ptr %45, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.rinfodef, ptr %293, i32 0, i32 0
  %295 = load i64, ptr %294, align 8, !tbaa !35
  store i64 %295, ptr %16, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %296

296:                                              ; preds = %331, %286
  %297 = load i64, ptr %18, align 8, !tbaa !9
  %298 = load i64, ptr %24, align 8, !tbaa !9
  %299 = icmp slt i64 %297, %298
  br i1 %299, label %300, label %334

300:                                              ; preds = %296
  %301 = load ptr, ptr %44, align 8, !tbaa !5
  %302 = load i64, ptr %18, align 8, !tbaa !9
  %303 = getelementptr inbounds %struct.edegreedef, ptr %301, i64 %302
  %304 = getelementptr inbounds %struct.edegreedef, ptr %303, i32 0, i32 0
  %305 = load i64, ptr %304, align 8, !tbaa !40
  store i64 %305, ptr %29, align 8, !tbaa !9
  %306 = load ptr, ptr %44, align 8, !tbaa !5
  %307 = load i64, ptr %18, align 8, !tbaa !9
  %308 = getelementptr inbounds %struct.edegreedef, ptr %306, i64 %307
  %309 = getelementptr inbounds %struct.edegreedef, ptr %308, i32 0, i32 1
  %310 = load i64, ptr %309, align 8, !tbaa !42
  %311 = load i64, ptr %16, align 8, !tbaa !9
  %312 = sub nsw i64 %310, %311
  store i64 %312, ptr %26, align 8, !tbaa !9
  %313 = load ptr, ptr %36, align 8, !tbaa !5
  %314 = load i64, ptr %29, align 8, !tbaa !9
  %315 = getelementptr inbounds i64, ptr %313, i64 %314
  %316 = load i64, ptr %315, align 8, !tbaa !9
  %317 = load i64, ptr %31, align 8, !tbaa !9
  %318 = add nsw i64 %316, %317
  %319 = load ptr, ptr %41, align 8, !tbaa !5
  %320 = load i64, ptr %29, align 8, !tbaa !9
  %321 = getelementptr inbounds i64, ptr %319, i64 %320
  %322 = load i64, ptr %321, align 8, !tbaa !9
  %323 = load i64, ptr %26, align 8, !tbaa !9
  %324 = add nsw i64 %322, %323
  %325 = icmp sle i64 %318, %324
  br i1 %325, label %326, label %330

326:                                              ; preds = %300
  %327 = load i64, ptr %26, align 8, !tbaa !9
  %328 = icmp sge i64 %327, 0
  br i1 %328, label %329, label %330

329:                                              ; preds = %326
  br label %334

330:                                              ; preds = %326, %300
  br label %331

331:                                              ; preds = %330
  %332 = load i64, ptr %18, align 8, !tbaa !9
  %333 = add nsw i64 %332, 1
  store i64 %333, ptr %18, align 8, !tbaa !9
  br label %296, !llvm.loop !43

334:                                              ; preds = %329, %296
  %335 = load i64, ptr %18, align 8, !tbaa !9
  %336 = load i64, ptr %24, align 8, !tbaa !9
  %337 = icmp eq i64 %335, %336
  br i1 %337, label %338, label %339

338:                                              ; preds = %334
  br label %1001

339:                                              ; preds = %334
  %340 = load i64, ptr %18, align 8, !tbaa !9
  %341 = add nsw i64 %340, 1
  store i64 %341, ptr %16, align 8, !tbaa !9
  br label %342

342:                                              ; preds = %418, %339
  %343 = load i64, ptr %16, align 8, !tbaa !9
  %344 = load i64, ptr %24, align 8, !tbaa !9
  %345 = icmp slt i64 %343, %344
  br i1 %345, label %346, label %421

346:                                              ; preds = %342
  %347 = load ptr, ptr %44, align 8, !tbaa !5
  %348 = load i64, ptr %16, align 8, !tbaa !9
  %349 = getelementptr inbounds %struct.edegreedef, ptr %347, i64 %348
  %350 = getelementptr inbounds %struct.edegreedef, ptr %349, i32 0, i32 0
  %351 = load i64, ptr %350, align 8, !tbaa !40
  store i64 %351, ptr %29, align 8, !tbaa !9
  %352 = load ptr, ptr %44, align 8, !tbaa !5
  %353 = load i64, ptr %16, align 8, !tbaa !9
  %354 = getelementptr inbounds %struct.edegreedef, ptr %352, i64 %353
  %355 = getelementptr inbounds %struct.edegreedef, ptr %354, i32 0, i32 1
  %356 = load i64, ptr %355, align 8, !tbaa !42
  %357 = load ptr, ptr %44, align 8, !tbaa !5
  %358 = load i64, ptr %18, align 8, !tbaa !9
  %359 = getelementptr inbounds %struct.edegreedef, ptr %357, i64 %358
  %360 = getelementptr inbounds %struct.edegreedef, ptr %359, i32 0, i32 1
  %361 = load i64, ptr %360, align 8, !tbaa !42
  %362 = icmp sgt i64 %356, %361
  br i1 %362, label %363, label %375

363:                                              ; preds = %346
  %364 = load ptr, ptr %36, align 8, !tbaa !5
  %365 = load i64, ptr %29, align 8, !tbaa !9
  %366 = getelementptr inbounds i64, ptr %364, i64 %365
  %367 = load i64, ptr %366, align 8, !tbaa !9
  %368 = load i64, ptr %31, align 8, !tbaa !9
  %369 = add nsw i64 %367, %368
  %370 = load ptr, ptr %41, align 8, !tbaa !5
  %371 = load i64, ptr %29, align 8, !tbaa !9
  %372 = getelementptr inbounds i64, ptr %370, i64 %371
  %373 = load i64, ptr %372, align 8, !tbaa !9
  %374 = icmp sle i64 %369, %373
  br i1 %374, label %415, label %375

375:                                              ; preds = %363, %346
  %376 = load ptr, ptr %44, align 8, !tbaa !5
  %377 = load i64, ptr %16, align 8, !tbaa !9
  %378 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %377
  %379 = getelementptr inbounds %struct.edegreedef, ptr %378, i32 0, i32 1
  %380 = load i64, ptr %379, align 8, !tbaa !42
  %381 = load ptr, ptr %44, align 8, !tbaa !5
  %382 = load i64, ptr %18, align 8, !tbaa !9
  %383 = getelementptr inbounds %struct.edegreedef, ptr %381, i64 %382
  %384 = getelementptr inbounds %struct.edegreedef, ptr %383, i32 0, i32 1
  %385 = load i64, ptr %384, align 8, !tbaa !42
  %386 = icmp eq i64 %380, %385
  br i1 %386, label %387, label %417

387:                                              ; preds = %375
  %388 = load ptr, ptr %43, align 8, !tbaa !5
  %389 = load ptr, ptr %44, align 8, !tbaa !5
  %390 = load i64, ptr %18, align 8, !tbaa !9
  %391 = getelementptr inbounds %struct.edegreedef, ptr %389, i64 %390
  %392 = getelementptr inbounds %struct.edegreedef, ptr %391, i32 0, i32 0
  %393 = load i64, ptr %392, align 8, !tbaa !40
  %394 = getelementptr inbounds i64, ptr %388, i64 %393
  %395 = load i64, ptr %394, align 8, !tbaa !9
  %396 = load ptr, ptr %36, align 8, !tbaa !5
  %397 = load i64, ptr %29, align 8, !tbaa !9
  %398 = getelementptr inbounds i64, ptr %396, i64 %397
  %399 = load i64, ptr %398, align 8, !tbaa !9
  %400 = mul nsw i64 %395, %399
  %401 = load ptr, ptr %43, align 8, !tbaa !5
  %402 = load i64, ptr %29, align 8, !tbaa !9
  %403 = getelementptr inbounds i64, ptr %401, i64 %402
  %404 = load i64, ptr %403, align 8, !tbaa !9
  %405 = load ptr, ptr %36, align 8, !tbaa !5
  %406 = load ptr, ptr %44, align 8, !tbaa !5
  %407 = load i64, ptr %18, align 8, !tbaa !9
  %408 = getelementptr inbounds %struct.edegreedef, ptr %406, i64 %407
  %409 = getelementptr inbounds %struct.edegreedef, ptr %408, i32 0, i32 0
  %410 = load i64, ptr %409, align 8, !tbaa !40
  %411 = getelementptr inbounds i64, ptr %405, i64 %410
  %412 = load i64, ptr %411, align 8, !tbaa !9
  %413 = mul nsw i64 %404, %412
  %414 = icmp slt i64 %400, %413
  br i1 %414, label %415, label %417

415:                                              ; preds = %387, %363
  %416 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %416, ptr %18, align 8, !tbaa !9
  br label %417

417:                                              ; preds = %415, %387, %375
  br label %418

418:                                              ; preds = %417
  %419 = load i64, ptr %16, align 8, !tbaa !9
  %420 = add nsw i64 %419, 1
  store i64 %420, ptr %16, align 8, !tbaa !9
  br label %342, !llvm.loop !44

421:                                              ; preds = %342
  %422 = load ptr, ptr %44, align 8, !tbaa !5
  %423 = load i64, ptr %18, align 8, !tbaa !9
  %424 = getelementptr inbounds %struct.edegreedef, ptr %422, i64 %423
  %425 = getelementptr inbounds %struct.edegreedef, ptr %424, i32 0, i32 0
  %426 = load i64, ptr %425, align 8, !tbaa !40
  store i64 %426, ptr %29, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  %427 = load ptr, ptr %44, align 8, !tbaa !5
  %428 = load i64, ptr %18, align 8, !tbaa !9
  %429 = getelementptr inbounds %struct.edegreedef, ptr %427, i64 %428
  %430 = getelementptr inbounds %struct.edegreedef, ptr %429, i32 0, i32 1
  %431 = load i64, ptr %430, align 8, !tbaa !42
  %432 = load ptr, ptr %45, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.rinfodef, ptr %432, i32 0, i32 0
  %434 = load i64, ptr %433, align 8, !tbaa !35
  %435 = sub nsw i64 %431, %434
  %436 = icmp sgt i64 %435, 0
  br i1 %436, label %437, label %438

437:                                              ; preds = %421
  store i64 1, ptr %16, align 8, !tbaa !9
  br label %488

438:                                              ; preds = %421
  %439 = load ptr, ptr %44, align 8, !tbaa !5
  %440 = load i64, ptr %18, align 8, !tbaa !9
  %441 = getelementptr inbounds %struct.edegreedef, ptr %439, i64 %440
  %442 = getelementptr inbounds %struct.edegreedef, ptr %441, i32 0, i32 1
  %443 = load i64, ptr %442, align 8, !tbaa !42
  %444 = load ptr, ptr %45, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.rinfodef, ptr %444, i32 0, i32 0
  %446 = load i64, ptr %445, align 8, !tbaa !35
  %447 = sub nsw i64 %443, %446
  %448 = icmp eq i64 %447, 0
  br i1 %448, label %449, label %487

449:                                              ; preds = %438
  %450 = load i64, ptr %15, align 8, !tbaa !9
  %451 = and i64 %450, 7
  %452 = icmp eq i64 %451, 0
  br i1 %452, label %485, label %453

453:                                              ; preds = %449
  %454 = load ptr, ptr %36, align 8, !tbaa !5
  %455 = load i64, ptr %27, align 8, !tbaa !9
  %456 = getelementptr inbounds i64, ptr %454, i64 %455
  %457 = load i64, ptr %456, align 8, !tbaa !9
  %458 = load ptr, ptr %41, align 8, !tbaa !5
  %459 = load i64, ptr %27, align 8, !tbaa !9
  %460 = getelementptr inbounds i64, ptr %458, i64 %459
  %461 = load i64, ptr %460, align 8, !tbaa !9
  %462 = icmp sge i64 %457, %461
  br i1 %462, label %485, label %463

463:                                              ; preds = %453
  %464 = load ptr, ptr %43, align 8, !tbaa !5
  %465 = load i64, ptr %27, align 8, !tbaa !9
  %466 = getelementptr inbounds i64, ptr %464, i64 %465
  %467 = load i64, ptr %466, align 8, !tbaa !9
  %468 = load ptr, ptr %36, align 8, !tbaa !5
  %469 = load i64, ptr %29, align 8, !tbaa !9
  %470 = getelementptr inbounds i64, ptr %468, i64 %469
  %471 = load i64, ptr %470, align 8, !tbaa !9
  %472 = load i64, ptr %31, align 8, !tbaa !9
  %473 = add nsw i64 %471, %472
  %474 = mul nsw i64 %467, %473
  %475 = load ptr, ptr %43, align 8, !tbaa !5
  %476 = load i64, ptr %29, align 8, !tbaa !9
  %477 = getelementptr inbounds i64, ptr %475, i64 %476
  %478 = load i64, ptr %477, align 8, !tbaa !9
  %479 = load ptr, ptr %36, align 8, !tbaa !5
  %480 = load i64, ptr %27, align 8, !tbaa !9
  %481 = getelementptr inbounds i64, ptr %479, i64 %480
  %482 = load i64, ptr %481, align 8, !tbaa !9
  %483 = mul nsw i64 %478, %482
  %484 = icmp slt i64 %474, %483
  br i1 %484, label %485, label %486

485:                                              ; preds = %463, %453, %449
  store i64 1, ptr %16, align 8, !tbaa !9
  br label %486

486:                                              ; preds = %485, %463
  br label %487

487:                                              ; preds = %486, %438
  br label %488

488:                                              ; preds = %487, %437
  %489 = load i64, ptr %16, align 8, !tbaa !9
  %490 = icmp eq i64 %489, 0
  br i1 %490, label %491, label %492

491:                                              ; preds = %488
  br label %1001

492:                                              ; preds = %488
  %493 = load ptr, ptr %44, align 8, !tbaa !5
  %494 = load i64, ptr %18, align 8, !tbaa !9
  %495 = getelementptr inbounds %struct.edegreedef, ptr %493, i64 %494
  %496 = getelementptr inbounds %struct.edegreedef, ptr %495, i32 0, i32 1
  %497 = load i64, ptr %496, align 8, !tbaa !42
  %498 = load ptr, ptr %45, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.rinfodef, ptr %498, i32 0, i32 0
  %500 = load i64, ptr %499, align 8, !tbaa !35
  %501 = sub nsw i64 %497, %500
  %502 = load ptr, ptr %8, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.graphdef, ptr %502, i32 0, i32 16
  %504 = load i64, ptr %503, align 8, !tbaa !31
  %505 = sub nsw i64 %504, %501
  store i64 %505, ptr %503, align 8, !tbaa !31
  %506 = load ptr, ptr %7, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.controldef, ptr %506, i32 0, i32 1
  %508 = load i64, ptr %507, align 8, !tbaa !26
  %509 = and i64 %508, 32
  %510 = icmp ne i64 %509, 0
  br i1 %510, label %511, label %527

511:                                              ; preds = %492
  %512 = load i64, ptr %13, align 8, !tbaa !9
  %513 = load i64, ptr %29, align 8, !tbaa !9
  %514 = load ptr, ptr %44, align 8, !tbaa !5
  %515 = load i64, ptr %18, align 8, !tbaa !9
  %516 = getelementptr inbounds %struct.edegreedef, ptr %514, i64 %515
  %517 = getelementptr inbounds %struct.edegreedef, ptr %516, i32 0, i32 1
  %518 = load i64, ptr %517, align 8, !tbaa !42
  %519 = load ptr, ptr %45, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.rinfodef, ptr %519, i32 0, i32 0
  %521 = load i64, ptr %520, align 8, !tbaa !35
  %522 = sub nsw i64 %518, %521
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.graphdef, ptr %523, i32 0, i32 16
  %525 = load i64, ptr %524, align 8, !tbaa !31
  %526 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %512, i64 noundef %513, i64 noundef %522, i64 noundef %525)
  br label %527

527:                                              ; preds = %511, %492
  %528 = load i64, ptr %29, align 8, !tbaa !9
  %529 = load ptr, ptr %35, align 8, !tbaa !5
  %530 = load i64, ptr %13, align 8, !tbaa !9
  %531 = getelementptr inbounds i64, ptr %529, i64 %530
  store i64 %528, ptr %531, align 8, !tbaa !9
  br label %532

532:                                              ; preds = %527
  %533 = load i64, ptr %31, align 8, !tbaa !9
  %534 = load ptr, ptr %36, align 8, !tbaa !5
  %535 = load i64, ptr %29, align 8, !tbaa !9
  %536 = getelementptr inbounds i64, ptr %534, i64 %535
  %537 = load i64, ptr %536, align 8, !tbaa !9
  %538 = add nsw i64 %537, %533
  store i64 %538, ptr %536, align 8, !tbaa !9
  %539 = load i64, ptr %31, align 8, !tbaa !9
  %540 = load ptr, ptr %36, align 8, !tbaa !5
  %541 = load i64, ptr %27, align 8, !tbaa !9
  %542 = getelementptr inbounds i64, ptr %540, i64 %541
  %543 = load i64, ptr %542, align 8, !tbaa !9
  %544 = sub nsw i64 %543, %539
  store i64 %544, ptr %542, align 8, !tbaa !9
  br label %545

545:                                              ; preds = %532
  br label %546

546:                                              ; preds = %545
  %547 = load ptr, ptr %45, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.rinfodef, ptr %547, i32 0, i32 0
  %549 = load i64, ptr %548, align 8, !tbaa !35
  %550 = load ptr, ptr %44, align 8, !tbaa !5
  %551 = load i64, ptr %18, align 8, !tbaa !9
  %552 = getelementptr inbounds %struct.edegreedef, ptr %550, i64 %551
  %553 = getelementptr inbounds %struct.edegreedef, ptr %552, i32 0, i32 1
  %554 = load i64, ptr %553, align 8, !tbaa !42
  %555 = sub nsw i64 %549, %554
  %556 = load ptr, ptr %45, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.rinfodef, ptr %556, i32 0, i32 1
  %558 = load i64, ptr %557, align 8, !tbaa !33
  %559 = add nsw i64 %558, %555
  store i64 %559, ptr %557, align 8, !tbaa !33
  br label %560

560:                                              ; preds = %546
  %561 = load ptr, ptr %45, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.rinfodef, ptr %561, i32 0, i32 0
  %563 = load i64, ptr %562, align 8, !tbaa !35
  store i64 %563, ptr %16, align 8, !tbaa !9
  %564 = load ptr, ptr %44, align 8, !tbaa !5
  %565 = load i64, ptr %18, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.edegreedef, ptr %564, i64 %565
  %567 = getelementptr inbounds %struct.edegreedef, ptr %566, i32 0, i32 1
  %568 = load i64, ptr %567, align 8, !tbaa !42
  %569 = load ptr, ptr %45, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.rinfodef, ptr %569, i32 0, i32 0
  store i64 %568, ptr %570, align 8, !tbaa !35
  %571 = load i64, ptr %16, align 8, !tbaa !9
  %572 = load ptr, ptr %44, align 8, !tbaa !5
  %573 = load i64, ptr %18, align 8, !tbaa !9
  %574 = getelementptr inbounds %struct.edegreedef, ptr %572, i64 %573
  %575 = getelementptr inbounds %struct.edegreedef, ptr %574, i32 0, i32 1
  store i64 %571, ptr %575, align 8, !tbaa !42
  br label %576

576:                                              ; preds = %560
  br label %577

577:                                              ; preds = %576
  %578 = load ptr, ptr %44, align 8, !tbaa !5
  %579 = load i64, ptr %18, align 8, !tbaa !9
  %580 = getelementptr inbounds %struct.edegreedef, ptr %578, i64 %579
  %581 = getelementptr inbounds %struct.edegreedef, ptr %580, i32 0, i32 1
  %582 = load i64, ptr %581, align 8, !tbaa !42
  %583 = icmp eq i64 %582, 0
  br i1 %583, label %584, label %594

584:                                              ; preds = %577
  %585 = load ptr, ptr %44, align 8, !tbaa !5
  %586 = load i64, ptr %18, align 8, !tbaa !9
  %587 = getelementptr inbounds %struct.edegreedef, ptr %585, i64 %586
  %588 = load ptr, ptr %44, align 8, !tbaa !5
  %589 = load ptr, ptr %45, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.rinfodef, ptr %589, i32 0, i32 2
  %591 = load i64, ptr %590, align 8, !tbaa !39
  %592 = add nsw i64 %591, -1
  store i64 %592, ptr %590, align 8, !tbaa !39
  %593 = getelementptr inbounds %struct.edegreedef, ptr %588, i64 %592
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %587, ptr align 8 %593, i64 16, i1 false), !tbaa.struct !45
  br label %600

594:                                              ; preds = %577
  %595 = load i64, ptr %27, align 8, !tbaa !9
  %596 = load ptr, ptr %44, align 8, !tbaa !5
  %597 = load i64, ptr %18, align 8, !tbaa !9
  %598 = getelementptr inbounds %struct.edegreedef, ptr %596, i64 %597
  %599 = getelementptr inbounds %struct.edegreedef, ptr %598, i32 0, i32 0
  store i64 %595, ptr %599, align 8, !tbaa !40
  br label %600

600:                                              ; preds = %594, %584
  %601 = load ptr, ptr %45, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.rinfodef, ptr %601, i32 0, i32 1
  %603 = load i64, ptr %602, align 8, !tbaa !33
  %604 = load ptr, ptr %45, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.rinfodef, ptr %604, i32 0, i32 0
  %606 = load i64, ptr %605, align 8, !tbaa !35
  %607 = icmp slt i64 %603, %606
  br i1 %607, label %608, label %636

608:                                              ; preds = %600
  br label %609

609:                                              ; preds = %608
  %610 = load ptr, ptr %39, align 8, !tbaa !5
  %611 = load i64, ptr %22, align 8, !tbaa !9
  %612 = add nsw i64 %611, -1
  store i64 %612, ptr %22, align 8, !tbaa !9
  %613 = getelementptr inbounds i64, ptr %610, i64 %612
  %614 = load i64, ptr %613, align 8, !tbaa !9
  %615 = load ptr, ptr %39, align 8, !tbaa !5
  %616 = load ptr, ptr %38, align 8, !tbaa !5
  %617 = load i64, ptr %13, align 8, !tbaa !9
  %618 = getelementptr inbounds i64, ptr %616, i64 %617
  %619 = load i64, ptr %618, align 8, !tbaa !9
  %620 = getelementptr inbounds i64, ptr %615, i64 %619
  store i64 %614, ptr %620, align 8, !tbaa !9
  %621 = load ptr, ptr %38, align 8, !tbaa !5
  %622 = load i64, ptr %13, align 8, !tbaa !9
  %623 = getelementptr inbounds i64, ptr %621, i64 %622
  %624 = load i64, ptr %623, align 8, !tbaa !9
  %625 = load ptr, ptr %38, align 8, !tbaa !5
  %626 = load ptr, ptr %39, align 8, !tbaa !5
  %627 = load i64, ptr %22, align 8, !tbaa !9
  %628 = getelementptr inbounds i64, ptr %626, i64 %627
  %629 = load i64, ptr %628, align 8, !tbaa !9
  %630 = getelementptr inbounds i64, ptr %625, i64 %629
  store i64 %624, ptr %630, align 8, !tbaa !9
  %631 = load ptr, ptr %38, align 8, !tbaa !5
  %632 = load i64, ptr %13, align 8, !tbaa !9
  %633 = getelementptr inbounds i64, ptr %631, i64 %632
  store i64 -1, ptr %633, align 8, !tbaa !9
  br label %634

634:                                              ; preds = %609
  br label %635

635:                                              ; preds = %634
  br label %636

636:                                              ; preds = %635, %600
  %637 = load ptr, ptr %32, align 8, !tbaa !5
  %638 = load i64, ptr %13, align 8, !tbaa !9
  %639 = getelementptr inbounds i64, ptr %637, i64 %638
  %640 = load i64, ptr %639, align 8, !tbaa !9
  store i64 %640, ptr %16, align 8, !tbaa !9
  br label %641

641:                                              ; preds = %997, %636
  %642 = load i64, ptr %16, align 8, !tbaa !9
  %643 = load ptr, ptr %32, align 8, !tbaa !5
  %644 = load i64, ptr %13, align 8, !tbaa !9
  %645 = add nsw i64 %644, 1
  %646 = getelementptr inbounds i64, ptr %643, i64 %645
  %647 = load i64, ptr %646, align 8, !tbaa !9
  %648 = icmp slt i64 %642, %647
  br i1 %648, label %649, label %1000

649:                                              ; preds = %641
  %650 = load ptr, ptr %33, align 8, !tbaa !5
  %651 = load i64, ptr %16, align 8, !tbaa !9
  %652 = getelementptr inbounds i64, ptr %650, i64 %651
  %653 = load i64, ptr %652, align 8, !tbaa !9
  store i64 %653, ptr %14, align 8, !tbaa !9
  %654 = load ptr, ptr %35, align 8, !tbaa !5
  %655 = load i64, ptr %14, align 8, !tbaa !9
  %656 = getelementptr inbounds i64, ptr %654, i64 %655
  %657 = load i64, ptr %656, align 8, !tbaa !9
  store i64 %657, ptr %28, align 8, !tbaa !9
  %658 = load ptr, ptr %8, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.graphdef, ptr %658, i32 0, i32 25
  %660 = load ptr, ptr %659, align 8, !tbaa !32
  %661 = load i64, ptr %14, align 8, !tbaa !9
  %662 = getelementptr inbounds %struct.rinfodef, ptr %660, i64 %661
  store ptr %662, ptr %45, align 8, !tbaa !5
  %663 = load ptr, ptr %45, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.rinfodef, ptr %663, i32 0, i32 3
  %665 = load ptr, ptr %664, align 8, !tbaa !38
  %666 = icmp eq ptr %665, null
  br i1 %666, label %667, label %694

667:                                              ; preds = %649
  %668 = load ptr, ptr %7, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.controldef, ptr %668, i32 0, i32 11
  %670 = getelementptr inbounds %struct.workspacedef, ptr %669, i32 0, i32 3
  %671 = load ptr, ptr %670, align 8, !tbaa !46
  %672 = load ptr, ptr %7, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.controldef, ptr %672, i32 0, i32 11
  %674 = getelementptr inbounds %struct.workspacedef, ptr %673, i32 0, i32 5
  %675 = load i64, ptr %674, align 8, !tbaa !47
  %676 = getelementptr inbounds %struct.edegreedef, ptr %671, i64 %675
  %677 = load ptr, ptr %45, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.rinfodef, ptr %677, i32 0, i32 3
  store ptr %676, ptr %678, align 8, !tbaa !38
  %679 = load ptr, ptr %32, align 8, !tbaa !5
  %680 = load i64, ptr %14, align 8, !tbaa !9
  %681 = add nsw i64 %680, 1
  %682 = getelementptr inbounds i64, ptr %679, i64 %681
  %683 = load i64, ptr %682, align 8, !tbaa !9
  %684 = load ptr, ptr %32, align 8, !tbaa !5
  %685 = load i64, ptr %14, align 8, !tbaa !9
  %686 = getelementptr inbounds i64, ptr %684, i64 %685
  %687 = load i64, ptr %686, align 8, !tbaa !9
  %688 = sub nsw i64 %683, %687
  %689 = load ptr, ptr %7, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.controldef, ptr %689, i32 0, i32 11
  %691 = getelementptr inbounds %struct.workspacedef, ptr %690, i32 0, i32 5
  %692 = load i64, ptr %691, align 8, !tbaa !47
  %693 = add nsw i64 %692, %688
  store i64 %693, ptr %691, align 8, !tbaa !47
  br label %694

694:                                              ; preds = %667, %649
  %695 = load ptr, ptr %45, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.rinfodef, ptr %695, i32 0, i32 3
  %697 = load ptr, ptr %696, align 8, !tbaa !38
  store ptr %697, ptr %44, align 8, !tbaa !5
  %698 = load ptr, ptr %45, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.rinfodef, ptr %698, i32 0, i32 1
  %700 = load i64, ptr %699, align 8, !tbaa !33
  %701 = load ptr, ptr %45, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.rinfodef, ptr %701, i32 0, i32 0
  %703 = load i64, ptr %702, align 8, !tbaa !35
  %704 = sub nsw i64 %700, %703
  store i64 %704, ptr %25, align 8, !tbaa !9
  %705 = load i64, ptr %28, align 8, !tbaa !9
  %706 = load i64, ptr %27, align 8, !tbaa !9
  %707 = icmp eq i64 %705, %706
  br i1 %707, label %708, label %756

708:                                              ; preds = %694
  br label %709

709:                                              ; preds = %708
  %710 = load ptr, ptr %34, align 8, !tbaa !5
  %711 = load i64, ptr %16, align 8, !tbaa !9
  %712 = getelementptr inbounds i64, ptr %710, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !9
  %714 = load ptr, ptr %45, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.rinfodef, ptr %714, i32 0, i32 1
  %716 = load i64, ptr %715, align 8, !tbaa !33
  %717 = add nsw i64 %716, %713
  store i64 %717, ptr %715, align 8, !tbaa !33
  %718 = load ptr, ptr %34, align 8, !tbaa !5
  %719 = load i64, ptr %16, align 8, !tbaa !9
  %720 = getelementptr inbounds i64, ptr %718, i64 %719
  %721 = load i64, ptr %720, align 8, !tbaa !9
  %722 = load ptr, ptr %45, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.rinfodef, ptr %722, i32 0, i32 0
  %724 = load i64, ptr %723, align 8, !tbaa !35
  %725 = sub nsw i64 %724, %721
  store i64 %725, ptr %723, align 8, !tbaa !35
  br label %726

726:                                              ; preds = %709
  br label %727

727:                                              ; preds = %726
  %728 = load ptr, ptr %45, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.rinfodef, ptr %728, i32 0, i32 1
  %730 = load i64, ptr %729, align 8, !tbaa !33
  %731 = load ptr, ptr %45, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.rinfodef, ptr %731, i32 0, i32 0
  %733 = load i64, ptr %732, align 8, !tbaa !35
  %734 = sub nsw i64 %730, %733
  %735 = icmp sge i64 %734, 0
  br i1 %735, label %736, label %755

736:                                              ; preds = %727
  %737 = load ptr, ptr %38, align 8, !tbaa !5
  %738 = load i64, ptr %14, align 8, !tbaa !9
  %739 = getelementptr inbounds i64, ptr %737, i64 %738
  %740 = load i64, ptr %739, align 8, !tbaa !9
  %741 = icmp eq i64 %740, -1
  br i1 %741, label %742, label %755

742:                                              ; preds = %736
  br label %743

743:                                              ; preds = %742
  %744 = load i64, ptr %14, align 8, !tbaa !9
  %745 = load ptr, ptr %39, align 8, !tbaa !5
  %746 = load i64, ptr %22, align 8, !tbaa !9
  %747 = getelementptr inbounds i64, ptr %745, i64 %746
  store i64 %744, ptr %747, align 8, !tbaa !9
  %748 = load i64, ptr %22, align 8, !tbaa !9
  %749 = add nsw i64 %748, 1
  store i64 %749, ptr %22, align 8, !tbaa !9
  %750 = load ptr, ptr %38, align 8, !tbaa !5
  %751 = load i64, ptr %14, align 8, !tbaa !9
  %752 = getelementptr inbounds i64, ptr %750, i64 %751
  store i64 %748, ptr %752, align 8, !tbaa !9
  br label %753

753:                                              ; preds = %743
  br label %754

754:                                              ; preds = %753
  br label %755

755:                                              ; preds = %754, %736, %727
  br label %824

756:                                              ; preds = %694
  %757 = load i64, ptr %28, align 8, !tbaa !9
  %758 = load i64, ptr %29, align 8, !tbaa !9
  %759 = icmp eq i64 %757, %758
  br i1 %759, label %760, label %823

760:                                              ; preds = %756
  br label %761

761:                                              ; preds = %760
  %762 = load ptr, ptr %34, align 8, !tbaa !5
  %763 = load i64, ptr %16, align 8, !tbaa !9
  %764 = getelementptr inbounds i64, ptr %762, i64 %763
  %765 = load i64, ptr %764, align 8, !tbaa !9
  %766 = load ptr, ptr %45, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.rinfodef, ptr %766, i32 0, i32 0
  %768 = load i64, ptr %767, align 8, !tbaa !35
  %769 = add nsw i64 %768, %765
  store i64 %769, ptr %767, align 8, !tbaa !35
  %770 = load ptr, ptr %34, align 8, !tbaa !5
  %771 = load i64, ptr %16, align 8, !tbaa !9
  %772 = getelementptr inbounds i64, ptr %770, i64 %771
  %773 = load i64, ptr %772, align 8, !tbaa !9
  %774 = load ptr, ptr %45, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.rinfodef, ptr %774, i32 0, i32 1
  %776 = load i64, ptr %775, align 8, !tbaa !33
  %777 = sub nsw i64 %776, %773
  store i64 %777, ptr %775, align 8, !tbaa !33
  br label %778

778:                                              ; preds = %761
  br label %779

779:                                              ; preds = %778
  %780 = load ptr, ptr %45, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.rinfodef, ptr %780, i32 0, i32 1
  %782 = load i64, ptr %781, align 8, !tbaa !33
  %783 = load ptr, ptr %45, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.rinfodef, ptr %783, i32 0, i32 0
  %785 = load i64, ptr %784, align 8, !tbaa !35
  %786 = sub nsw i64 %782, %785
  %787 = icmp slt i64 %786, 0
  br i1 %787, label %788, label %822

788:                                              ; preds = %779
  %789 = load ptr, ptr %38, align 8, !tbaa !5
  %790 = load i64, ptr %14, align 8, !tbaa !9
  %791 = getelementptr inbounds i64, ptr %789, i64 %790
  %792 = load i64, ptr %791, align 8, !tbaa !9
  %793 = icmp ne i64 %792, -1
  br i1 %793, label %794, label %822

794:                                              ; preds = %788
  br label %795

795:                                              ; preds = %794
  %796 = load ptr, ptr %39, align 8, !tbaa !5
  %797 = load i64, ptr %22, align 8, !tbaa !9
  %798 = add nsw i64 %797, -1
  store i64 %798, ptr %22, align 8, !tbaa !9
  %799 = getelementptr inbounds i64, ptr %796, i64 %798
  %800 = load i64, ptr %799, align 8, !tbaa !9
  %801 = load ptr, ptr %39, align 8, !tbaa !5
  %802 = load ptr, ptr %38, align 8, !tbaa !5
  %803 = load i64, ptr %14, align 8, !tbaa !9
  %804 = getelementptr inbounds i64, ptr %802, i64 %803
  %805 = load i64, ptr %804, align 8, !tbaa !9
  %806 = getelementptr inbounds i64, ptr %801, i64 %805
  store i64 %800, ptr %806, align 8, !tbaa !9
  %807 = load ptr, ptr %38, align 8, !tbaa !5
  %808 = load i64, ptr %14, align 8, !tbaa !9
  %809 = getelementptr inbounds i64, ptr %807, i64 %808
  %810 = load i64, ptr %809, align 8, !tbaa !9
  %811 = load ptr, ptr %38, align 8, !tbaa !5
  %812 = load ptr, ptr %39, align 8, !tbaa !5
  %813 = load i64, ptr %22, align 8, !tbaa !9
  %814 = getelementptr inbounds i64, ptr %812, i64 %813
  %815 = load i64, ptr %814, align 8, !tbaa !9
  %816 = getelementptr inbounds i64, ptr %811, i64 %815
  store i64 %810, ptr %816, align 8, !tbaa !9
  %817 = load ptr, ptr %38, align 8, !tbaa !5
  %818 = load i64, ptr %14, align 8, !tbaa !9
  %819 = getelementptr inbounds i64, ptr %817, i64 %818
  store i64 -1, ptr %819, align 8, !tbaa !9
  br label %820

820:                                              ; preds = %795
  br label %821

821:                                              ; preds = %820
  br label %822

822:                                              ; preds = %821, %788, %779
  br label %823

823:                                              ; preds = %822, %756
  br label %824

824:                                              ; preds = %823, %755
  %825 = load i64, ptr %28, align 8, !tbaa !9
  %826 = load i64, ptr %27, align 8, !tbaa !9
  %827 = icmp ne i64 %825, %826
  br i1 %827, label %828, label %881

828:                                              ; preds = %824
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %829

829:                                              ; preds = %877, %828
  %830 = load i64, ptr %18, align 8, !tbaa !9
  %831 = load ptr, ptr %45, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.rinfodef, ptr %831, i32 0, i32 2
  %833 = load i64, ptr %832, align 8, !tbaa !39
  %834 = icmp slt i64 %830, %833
  br i1 %834, label %835, label %880

835:                                              ; preds = %829
  %836 = load ptr, ptr %44, align 8, !tbaa !5
  %837 = load i64, ptr %18, align 8, !tbaa !9
  %838 = getelementptr inbounds %struct.edegreedef, ptr %836, i64 %837
  %839 = getelementptr inbounds %struct.edegreedef, ptr %838, i32 0, i32 0
  %840 = load i64, ptr %839, align 8, !tbaa !40
  %841 = load i64, ptr %27, align 8, !tbaa !9
  %842 = icmp eq i64 %840, %841
  br i1 %842, label %843, label %876

843:                                              ; preds = %835
  %844 = load ptr, ptr %44, align 8, !tbaa !5
  %845 = load i64, ptr %18, align 8, !tbaa !9
  %846 = getelementptr inbounds %struct.edegreedef, ptr %844, i64 %845
  %847 = getelementptr inbounds %struct.edegreedef, ptr %846, i32 0, i32 1
  %848 = load i64, ptr %847, align 8, !tbaa !42
  %849 = load ptr, ptr %34, align 8, !tbaa !5
  %850 = load i64, ptr %16, align 8, !tbaa !9
  %851 = getelementptr inbounds i64, ptr %849, i64 %850
  %852 = load i64, ptr %851, align 8, !tbaa !9
  %853 = icmp eq i64 %848, %852
  br i1 %853, label %854, label %864

854:                                              ; preds = %843
  %855 = load ptr, ptr %44, align 8, !tbaa !5
  %856 = load i64, ptr %18, align 8, !tbaa !9
  %857 = getelementptr inbounds %struct.edegreedef, ptr %855, i64 %856
  %858 = load ptr, ptr %44, align 8, !tbaa !5
  %859 = load ptr, ptr %45, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.rinfodef, ptr %859, i32 0, i32 2
  %861 = load i64, ptr %860, align 8, !tbaa !39
  %862 = add nsw i64 %861, -1
  store i64 %862, ptr %860, align 8, !tbaa !39
  %863 = getelementptr inbounds %struct.edegreedef, ptr %858, i64 %862
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %857, ptr align 8 %863, i64 16, i1 false), !tbaa.struct !45
  br label %875

864:                                              ; preds = %843
  %865 = load ptr, ptr %34, align 8, !tbaa !5
  %866 = load i64, ptr %16, align 8, !tbaa !9
  %867 = getelementptr inbounds i64, ptr %865, i64 %866
  %868 = load i64, ptr %867, align 8, !tbaa !9
  %869 = load ptr, ptr %44, align 8, !tbaa !5
  %870 = load i64, ptr %18, align 8, !tbaa !9
  %871 = getelementptr inbounds %struct.edegreedef, ptr %869, i64 %870
  %872 = getelementptr inbounds %struct.edegreedef, ptr %871, i32 0, i32 1
  %873 = load i64, ptr %872, align 8, !tbaa !42
  %874 = sub nsw i64 %873, %868
  store i64 %874, ptr %872, align 8, !tbaa !42
  br label %875

875:                                              ; preds = %864, %854
  br label %880

876:                                              ; preds = %835
  br label %877

877:                                              ; preds = %876
  %878 = load i64, ptr %18, align 8, !tbaa !9
  %879 = add nsw i64 %878, 1
  store i64 %879, ptr %18, align 8, !tbaa !9
  br label %829, !llvm.loop !48

880:                                              ; preds = %875, %829
  br label %881

881:                                              ; preds = %880, %824
  %882 = load i64, ptr %28, align 8, !tbaa !9
  %883 = load i64, ptr %29, align 8, !tbaa !9
  %884 = icmp ne i64 %882, %883
  br i1 %884, label %885, label %941

885:                                              ; preds = %881
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %886

886:                                              ; preds = %912, %885
  %887 = load i64, ptr %18, align 8, !tbaa !9
  %888 = load ptr, ptr %45, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.rinfodef, ptr %888, i32 0, i32 2
  %890 = load i64, ptr %889, align 8, !tbaa !39
  %891 = icmp slt i64 %887, %890
  br i1 %891, label %892, label %915

892:                                              ; preds = %886
  %893 = load ptr, ptr %44, align 8, !tbaa !5
  %894 = load i64, ptr %18, align 8, !tbaa !9
  %895 = getelementptr inbounds %struct.edegreedef, ptr %893, i64 %894
  %896 = getelementptr inbounds %struct.edegreedef, ptr %895, i32 0, i32 0
  %897 = load i64, ptr %896, align 8, !tbaa !40
  %898 = load i64, ptr %29, align 8, !tbaa !9
  %899 = icmp eq i64 %897, %898
  br i1 %899, label %900, label %911

900:                                              ; preds = %892
  %901 = load ptr, ptr %34, align 8, !tbaa !5
  %902 = load i64, ptr %16, align 8, !tbaa !9
  %903 = getelementptr inbounds i64, ptr %901, i64 %902
  %904 = load i64, ptr %903, align 8, !tbaa !9
  %905 = load ptr, ptr %44, align 8, !tbaa !5
  %906 = load i64, ptr %18, align 8, !tbaa !9
  %907 = getelementptr inbounds %struct.edegreedef, ptr %905, i64 %906
  %908 = getelementptr inbounds %struct.edegreedef, ptr %907, i32 0, i32 1
  %909 = load i64, ptr %908, align 8, !tbaa !42
  %910 = add nsw i64 %909, %904
  store i64 %910, ptr %908, align 8, !tbaa !42
  br label %915

911:                                              ; preds = %892
  br label %912

912:                                              ; preds = %911
  %913 = load i64, ptr %18, align 8, !tbaa !9
  %914 = add nsw i64 %913, 1
  store i64 %914, ptr %18, align 8, !tbaa !9
  br label %886, !llvm.loop !49

915:                                              ; preds = %900, %886
  %916 = load i64, ptr %18, align 8, !tbaa !9
  %917 = load ptr, ptr %45, align 8, !tbaa !5
  %918 = getelementptr inbounds %struct.rinfodef, ptr %917, i32 0, i32 2
  %919 = load i64, ptr %918, align 8, !tbaa !39
  %920 = icmp eq i64 %916, %919
  br i1 %920, label %921, label %940

921:                                              ; preds = %915
  %922 = load i64, ptr %29, align 8, !tbaa !9
  %923 = load ptr, ptr %44, align 8, !tbaa !5
  %924 = load ptr, ptr %45, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.rinfodef, ptr %924, i32 0, i32 2
  %926 = load i64, ptr %925, align 8, !tbaa !39
  %927 = getelementptr inbounds %struct.edegreedef, ptr %923, i64 %926
  %928 = getelementptr inbounds %struct.edegreedef, ptr %927, i32 0, i32 0
  store i64 %922, ptr %928, align 8, !tbaa !40
  %929 = load ptr, ptr %34, align 8, !tbaa !5
  %930 = load i64, ptr %16, align 8, !tbaa !9
  %931 = getelementptr inbounds i64, ptr %929, i64 %930
  %932 = load i64, ptr %931, align 8, !tbaa !9
  %933 = load ptr, ptr %44, align 8, !tbaa !5
  %934 = load ptr, ptr %45, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.rinfodef, ptr %934, i32 0, i32 2
  %936 = load i64, ptr %935, align 8, !tbaa !39
  %937 = add nsw i64 %936, 1
  store i64 %937, ptr %935, align 8, !tbaa !39
  %938 = getelementptr inbounds %struct.edegreedef, ptr %933, i64 %936
  %939 = getelementptr inbounds %struct.edegreedef, ptr %938, i32 0, i32 1
  store i64 %932, ptr %939, align 8, !tbaa !42
  br label %940

940:                                              ; preds = %921, %915
  br label %941

941:                                              ; preds = %940, %881
  %942 = load i64, ptr %28, align 8, !tbaa !9
  %943 = load i64, ptr %29, align 8, !tbaa !9
  %944 = icmp eq i64 %942, %943
  br i1 %944, label %949, label %945

945:                                              ; preds = %941
  %946 = load i64, ptr %28, align 8, !tbaa !9
  %947 = load i64, ptr %27, align 8, !tbaa !9
  %948 = icmp eq i64 %946, %947
  br i1 %948, label %949, label %996

949:                                              ; preds = %945, %941
  %950 = load ptr, ptr %45, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.rinfodef, ptr %950, i32 0, i32 1
  %952 = load i64, ptr %951, align 8, !tbaa !33
  %953 = load ptr, ptr %45, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.rinfodef, ptr %953, i32 0, i32 0
  %955 = load i64, ptr %954, align 8, !tbaa !35
  %956 = sub nsw i64 %952, %955
  store i64 %956, ptr %26, align 8, !tbaa !9
  %957 = load ptr, ptr %42, align 8, !tbaa !5
  %958 = load i64, ptr %14, align 8, !tbaa !9
  %959 = getelementptr inbounds i64, ptr %957, i64 %958
  %960 = load i64, ptr %959, align 8, !tbaa !9
  %961 = icmp eq i64 %960, 2
  br i1 %961, label %962, label %978

962:                                              ; preds = %949
  %963 = load i64, ptr %26, align 8, !tbaa !9
  %964 = icmp sge i64 %963, 0
  br i1 %964, label %965, label %970

965:                                              ; preds = %962
  %966 = load i64, ptr %14, align 8, !tbaa !9
  %967 = load i64, ptr %25, align 8, !tbaa !9
  %968 = load i64, ptr %26, align 8, !tbaa !9
  %969 = call i64 @libmetis__PQueueUpdate(ptr noundef %46, i64 noundef %966, i64 noundef %967, i64 noundef %968)
  br label %977

970:                                              ; preds = %962
  %971 = load i64, ptr %14, align 8, !tbaa !9
  %972 = load i64, ptr %25, align 8, !tbaa !9
  %973 = call i64 @libmetis__PQueueDelete(ptr noundef %46, i64 noundef %971, i64 noundef %972)
  %974 = load ptr, ptr %42, align 8, !tbaa !5
  %975 = load i64, ptr %14, align 8, !tbaa !9
  %976 = getelementptr inbounds i64, ptr %974, i64 %975
  store i64 -1, ptr %976, align 8, !tbaa !9
  br label %977

977:                                              ; preds = %970, %965
  br label %995

978:                                              ; preds = %949
  %979 = load ptr, ptr %42, align 8, !tbaa !5
  %980 = load i64, ptr %14, align 8, !tbaa !9
  %981 = getelementptr inbounds i64, ptr %979, i64 %980
  %982 = load i64, ptr %981, align 8, !tbaa !9
  %983 = icmp eq i64 %982, -1
  br i1 %983, label %984, label %994

984:                                              ; preds = %978
  %985 = load i64, ptr %26, align 8, !tbaa !9
  %986 = icmp sge i64 %985, 0
  br i1 %986, label %987, label %994

987:                                              ; preds = %984
  %988 = load i64, ptr %14, align 8, !tbaa !9
  %989 = load i64, ptr %26, align 8, !tbaa !9
  %990 = call i64 @libmetis__PQueueInsert(ptr noundef %46, i64 noundef %988, i64 noundef %989)
  %991 = load ptr, ptr %42, align 8, !tbaa !5
  %992 = load i64, ptr %14, align 8, !tbaa !9
  %993 = getelementptr inbounds i64, ptr %991, i64 %992
  store i64 2, ptr %993, align 8, !tbaa !9
  br label %994

994:                                              ; preds = %987, %984, %978
  br label %995

995:                                              ; preds = %994, %977
  br label %996

996:                                              ; preds = %995, %945
  br label %997

997:                                              ; preds = %996
  %998 = load i64, ptr %16, align 8, !tbaa !9
  %999 = add nsw i64 %998, 1
  store i64 %999, ptr %16, align 8, !tbaa !9
  br label %641, !llvm.loop !50

1000:                                             ; preds = %641
  br label %1001

1001:                                             ; preds = %1000, %491, %338, %285
  %1002 = load i64, ptr %15, align 8, !tbaa !9
  %1003 = add nsw i64 %1002, 1
  store i64 %1003, ptr %15, align 8, !tbaa !9
  br label %251

1004:                                             ; preds = %254
  %1005 = load i64, ptr %22, align 8, !tbaa !9
  %1006 = load ptr, ptr %8, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.graphdef, ptr %1006, i32 0, i32 20
  store i64 %1005, ptr %1007, align 8, !tbaa !30
  %1008 = load ptr, ptr %7, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.controldef, ptr %1008, i32 0, i32 1
  %1010 = load i64, ptr %1009, align 8, !tbaa !26
  %1011 = and i64 %1010, 8
  %1012 = icmp ne i64 %1011, 0
  br i1 %1012, label %1013, label %1047

1013:                                             ; preds = %1004
  %1014 = load ptr, ptr %36, align 8, !tbaa !5
  %1015 = load i64, ptr %9, align 8, !tbaa !9
  %1016 = load ptr, ptr %36, align 8, !tbaa !5
  %1017 = call i64 @libmetis__idxargmin(i64 noundef %1015, ptr noundef %1016)
  %1018 = getelementptr inbounds i64, ptr %1014, i64 %1017
  %1019 = load i64, ptr %1018, align 8, !tbaa !9
  %1020 = load ptr, ptr %36, align 8, !tbaa !5
  %1021 = load i64, ptr %9, align 8, !tbaa !9
  %1022 = load ptr, ptr %36, align 8, !tbaa !5
  %1023 = call i64 @libmetis__idxargmax(i64 noundef %1021, ptr noundef %1022)
  %1024 = getelementptr inbounds i64, ptr %1020, i64 %1023
  %1025 = load i64, ptr %1024, align 8, !tbaa !9
  %1026 = load i64, ptr %9, align 8, !tbaa !9
  %1027 = sitofp i64 %1026 to double
  %1028 = fmul double 1.000000e+00, %1027
  %1029 = load ptr, ptr %36, align 8, !tbaa !5
  %1030 = load i64, ptr %9, align 8, !tbaa !9
  %1031 = load ptr, ptr %36, align 8, !tbaa !5
  %1032 = call i64 @libmetis__idxargmax(i64 noundef %1030, ptr noundef %1031)
  %1033 = getelementptr inbounds i64, ptr %1029, i64 %1032
  %1034 = load i64, ptr %1033, align 8, !tbaa !9
  %1035 = sitofp i64 %1034 to double
  %1036 = fmul double %1028, %1035
  %1037 = load i64, ptr %23, align 8, !tbaa !9
  %1038 = sitofp i64 %1037 to double
  %1039 = fdiv double %1036, %1038
  %1040 = load ptr, ptr %8, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.graphdef, ptr %1040, i32 0, i32 20
  %1042 = load i64, ptr %1041, align 8, !tbaa !30
  %1043 = load ptr, ptr %8, align 8, !tbaa !5
  %1044 = getelementptr inbounds %struct.graphdef, ptr %1043, i32 0, i32 16
  %1045 = load i64, ptr %1044, align 8, !tbaa !31
  %1046 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %1019, i64 noundef %1025, double noundef %1039, i64 noundef %1042, i64 noundef %1045)
  br label %1047

1047:                                             ; preds = %1013, %1004
  %1048 = load ptr, ptr %8, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.graphdef, ptr %1048, i32 0, i32 16
  %1050 = load i64, ptr %1049, align 8, !tbaa !31
  %1051 = load i64, ptr %30, align 8, !tbaa !9
  %1052 = icmp eq i64 %1050, %1051
  br i1 %1052, label %1053, label %1054

1053:                                             ; preds = %1047
  br label %1058

1054:                                             ; preds = %1047
  br label %1055

1055:                                             ; preds = %1054
  %1056 = load i64, ptr %20, align 8, !tbaa !9
  %1057 = add nsw i64 %1056, 1
  store i64 %1057, ptr %20, align 8, !tbaa !9
  br label %199, !llvm.loop !51

1058:                                             ; preds = %1053, %199
  %1059 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libmetis__PQueueFree(ptr noundef %1059, ptr noundef %46)
  %1060 = load ptr, ptr %7, align 8, !tbaa !5
  %1061 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1060, i64 noundef %1061)
  %1062 = load ptr, ptr %7, align 8, !tbaa !5
  %1063 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1062, i64 noundef %1063)
  %1064 = load ptr, ptr %7, align 8, !tbaa !5
  %1065 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1064, i64 noundef %1065)
  %1066 = load ptr, ptr %7, align 8, !tbaa !5
  %1067 = load i64, ptr %21, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1066, i64 noundef %1067)
  %1068 = load ptr, ptr %7, align 8, !tbaa !5
  %1069 = load i64, ptr %21, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1068, i64 noundef %1069)
  call void @llvm.lifetime.end.p0(i64 88, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  ret void
}

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

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

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


; 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 [75 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [47 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__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #1

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

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

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

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

declare void @libmetis__RandomPermute(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) #2

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__Greedy_KWayEdgeRefine(ptr noundef %0, ptr nocapture noundef %1, i64 noundef %2, ptr nocapture noundef readonly %3, float noundef %4, i64 noundef %5) local_unnamed_addr #3 {
  %7 = alloca %struct.PQueueType, align 8
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %7) #4
  %8 = load i64, ptr %1, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %1, i64 40
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 48
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %1, i64 160
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %1, i64 152
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 128
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %1, i64 136
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %24 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %25 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %26 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %22, i64 noundef 1) #4
  %27 = icmp sgt i64 %2, 0
  br i1 %27, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %6
  %28 = sitofp i64 %26 to float
  %29 = fpext float %4 to double
  %30 = fdiv double 1.000000e+00, %29
  br label %31

31:                                               ; preds = %.lr.ph, %31
  %.0442 = phi i64 [ 0, %.lr.ph ], [ %44, %31 ]
  %32 = getelementptr inbounds float, ptr %3, i64 %.0442
  %33 = load float, ptr %32, align 4, !tbaa !19
  %34 = fmul float %33, %28
  %35 = fptosi float %34 to i64
  %36 = getelementptr inbounds i64, ptr %25, i64 %.0442
  store i64 %35, ptr %36, align 8, !tbaa !21
  %37 = fmul float %34, %4
  %38 = fptosi float %37 to i64
  %39 = getelementptr inbounds i64, ptr %24, i64 %.0442
  store i64 %38, ptr %39, align 8, !tbaa !21
  %40 = fpext float %34 to double
  %41 = fmul double %30, %40
  %42 = fptosi double %41 to i64
  %43 = getelementptr inbounds i64, ptr %23, i64 %.0442
  store i64 %42, ptr %43, align 8, !tbaa !21
  %44 = add nuw nsw i64 %.0442, 1
  %exitcond.not = icmp eq i64 %44, %2
  br i1 %exitcond.not, label %._crit_edge, label %31, !llvm.loop !22

._crit_edge:                                      ; preds = %31, %6
  %45 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %46 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %47 = getelementptr inbounds i8, ptr %1, i64 88
  %48 = load ptr, ptr %47, align 8, !tbaa !24
  %49 = tail call i64 @libmetis__idxargmax(i64 noundef %8, ptr noundef %48) #4
  %50 = getelementptr inbounds i64, ptr %48, i64 %49
  %51 = load i64, ptr %50, align 8, !tbaa !21
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %7, i64 noundef %8, i64 noundef %51) #4
  %52 = getelementptr inbounds i8, ptr %0, i64 8
  %53 = load i64, ptr %52, align 8, !tbaa !25
  %54 = and i64 %53, 8
  %.not = icmp eq i64 %54, 0
  br i1 %.not, label %78, label %55

55:                                               ; preds = %._crit_edge
  %56 = call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %22) #4
  %57 = getelementptr inbounds i64, ptr %22, i64 %56
  %58 = load i64, ptr %57, align 8, !tbaa !21
  %59 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %60 = getelementptr inbounds i64, ptr %22, i64 %59
  %61 = load i64, ptr %60, align 8, !tbaa !21
  %62 = load i64, ptr %23, align 8, !tbaa !21
  %63 = load i64, ptr %24, align 8, !tbaa !21
  %64 = sitofp i64 %2 to double
  %65 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %66 = getelementptr inbounds i64, ptr %22, i64 %65
  %67 = load i64, ptr %66, align 8, !tbaa !21
  %68 = sitofp i64 %67 to double
  %69 = fmul double %64, %68
  %70 = sitofp i64 %26 to double
  %71 = fdiv double %69, %70
  %72 = load i64, ptr %1, align 8, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %1, i64 144
  %74 = load i64, ptr %73, align 8, !tbaa !29
  %75 = getelementptr inbounds i8, ptr %1, i64 112
  %76 = load i64, ptr %75, align 8, !tbaa !30
  %77 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, i64 noundef %58, i64 noundef %61, i64 noundef %62, i64 noundef %63, double noundef %71, i64 noundef %72, i64 noundef %74, i64 noundef %76) #4
  br label %78

78:                                               ; preds = %55, %._crit_edge
  %79 = icmp sgt i64 %5, 0
  br i1 %79, label %.lr.ph482, label %._crit_edge483

.lr.ph482:                                        ; preds = %78
  %80 = getelementptr inbounds i8, ptr %1, i64 112
  %81 = getelementptr inbounds i8, ptr %1, i64 144
  %82 = getelementptr inbounds i8, ptr %1, i64 184
  %83 = getelementptr inbounds i8, ptr %1, i64 24
  %84 = getelementptr inbounds i8, ptr %0, i64 112
  %85 = getelementptr inbounds i8, ptr %0, i64 128
  %86 = sitofp i64 %2 to double
  %87 = sitofp i64 %26 to double
  br label %88

88:                                               ; preds = %387, %.lr.ph482
  %.0392480 = phi i64 [ 0, %.lr.ph482 ], [ %390, %387 ]
  call void @libmetis__PQueueReset(ptr noundef nonnull %7) #4
  %89 = call ptr @libmetis__idxset(i64 noundef %8, i64 noundef -1, ptr noundef %46) #4
  %90 = load i64, ptr %80, align 8, !tbaa !30
  %91 = load i64, ptr %81, align 8, !tbaa !29
  call void @libmetis__RandomPermute(i64 noundef %91, ptr noundef %45, i64 noundef 1) #4
  %92 = icmp sgt i64 %91, 0
  br i1 %92, label %.lr.ph445, label %.preheader431

.preheader431:                                    ; preds = %.lr.ph445, %88
  %93 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %94 = icmp eq i64 %93, -1
  br i1 %94, label %._crit_edge478, label %.lr.ph477

.lr.ph445:                                        ; preds = %88, %.lr.ph445
  %.0386443 = phi i64 [ %107, %.lr.ph445 ], [ 0, %88 ]
  %95 = getelementptr inbounds i64, ptr %45, i64 %.0386443
  %96 = load i64, ptr %95, align 8, !tbaa !21
  %97 = getelementptr inbounds i64, ptr %16, i64 %96
  %98 = load i64, ptr %97, align 8, !tbaa !21
  %99 = load ptr, ptr %82, align 8, !tbaa !31
  %100 = getelementptr inbounds %struct.rinfodef, ptr %99, i64 %98
  %101 = getelementptr inbounds i8, ptr %100, i64 8
  %102 = load i64, ptr %101, align 8, !tbaa !32
  %103 = load i64, ptr %100, align 8, !tbaa !34
  %104 = sub nsw i64 %102, %103
  %105 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %7, i64 noundef %98, i64 noundef %104) #4
  %106 = getelementptr inbounds i64, ptr %46, i64 %98
  store i64 2, ptr %106, align 8, !tbaa !21
  %107 = add nuw nsw i64 %.0386443, 1
  %exitcond490.not = icmp eq i64 %107, %91
  br i1 %exitcond490.not, label %.preheader431, label %.lr.ph445, !llvm.loop !35

.lr.ph477:                                        ; preds = %.preheader431, %.loopexit429
  %108 = phi i64 [ %367, %.loopexit429 ], [ %93, %.preheader431 ]
  %.0387475 = phi i64 [ %366, %.loopexit429 ], [ 0, %.preheader431 ]
  %.0393474 = phi i64 [ %.4397, %.loopexit429 ], [ %91, %.preheader431 ]
  %109 = getelementptr inbounds i64, ptr %46, i64 %108
  store i64 1, ptr %109, align 8, !tbaa !21
  %110 = load ptr, ptr %82, align 8, !tbaa !31
  %111 = getelementptr inbounds %struct.rinfodef, ptr %110, i64 %108
  %112 = getelementptr inbounds i64, ptr %20, i64 %108
  %113 = load i64, ptr %112, align 8, !tbaa !21
  %114 = load ptr, ptr %83, align 8, !tbaa !36
  %115 = getelementptr inbounds i64, ptr %114, i64 %108
  %116 = load i64, ptr %115, align 8, !tbaa !21
  %117 = getelementptr inbounds i64, ptr %22, i64 %113
  %118 = load i64, ptr %117, align 8, !tbaa !21
  %119 = sub nsw i64 %118, %116
  %120 = getelementptr inbounds i64, ptr %23, i64 %113
  %121 = load i64, ptr %120, align 8, !tbaa !21
  %122 = icmp slt i64 %119, %121
  br i1 %122, label %.loopexit429, label %123

123:                                              ; preds = %.lr.ph477
  %124 = getelementptr inbounds i8, ptr %111, i64 24
  %125 = load ptr, ptr %124, align 8, !tbaa !37
  %126 = getelementptr inbounds i8, ptr %111, i64 16
  %127 = load i64, ptr %126, align 8, !tbaa !38
  %128 = load i64, ptr %111, align 8, !tbaa !34
  %129 = icmp sgt i64 %127, 0
  br i1 %129, label %.lr.ph448, label %._crit_edge449

.lr.ph448:                                        ; preds = %123, %143
  %.0389446 = phi i64 [ %144, %143 ], [ 0, %123 ]
  %130 = getelementptr inbounds %struct.edegreedef, ptr %125, i64 %.0389446
  %131 = load i64, ptr %130, align 8, !tbaa !39
  %132 = getelementptr inbounds i8, ptr %130, i64 8
  %133 = load i64, ptr %132, align 8, !tbaa !41
  %134 = sub nsw i64 %133, %128
  %135 = getelementptr inbounds i64, ptr %22, i64 %131
  %136 = load i64, ptr %135, align 8, !tbaa !21
  %137 = add nsw i64 %136, %116
  %138 = getelementptr inbounds i64, ptr %24, i64 %131
  %139 = load i64, ptr %138, align 8, !tbaa !21
  %140 = add nsw i64 %139, %134
  %141 = icmp sle i64 %137, %140
  %142 = icmp sgt i64 %134, -1
  %or.cond = and i1 %142, %141
  br i1 %or.cond, label %._crit_edge449, label %143

143:                                              ; preds = %.lr.ph448
  %144 = add nuw nsw i64 %.0389446, 1
  %exitcond491.not = icmp eq i64 %144, %127
  br i1 %exitcond491.not, label %.loopexit429, label %.lr.ph448, !llvm.loop !42

._crit_edge449:                                   ; preds = %.lr.ph448, %123
  %.0389.lcssa = phi i64 [ 0, %123 ], [ %.0389446, %.lr.ph448 ]
  %145 = icmp eq i64 %.0389.lcssa, %127
  br i1 %145, label %.loopexit429, label %.preheader430

.preheader430:                                    ; preds = %._crit_edge449
  %.0388452 = add nuw nsw i64 %.0389.lcssa, 1
  %146 = icmp slt i64 %.0388452, %127
  br i1 %146, label %.lr.ph455, label %._crit_edge456

.lr.ph455:                                        ; preds = %.preheader430, %177
  %.0388454 = phi i64 [ %.0388, %177 ], [ %.0388452, %.preheader430 ]
  %.1390453 = phi i64 [ %.2391, %177 ], [ %.0389.lcssa, %.preheader430 ]
  %147 = getelementptr inbounds %struct.edegreedef, ptr %125, i64 %.0388454
  %148 = load i64, ptr %147, align 8, !tbaa !39
  %149 = getelementptr inbounds i8, ptr %147, i64 8
  %150 = load i64, ptr %149, align 8, !tbaa !41
  %151 = getelementptr inbounds %struct.edegreedef, ptr %125, i64 %.1390453
  %152 = getelementptr inbounds i8, ptr %151, i64 8
  %153 = load i64, ptr %152, align 8, !tbaa !41
  %154 = icmp sgt i64 %150, %153
  br i1 %154, label %155, label %161

155:                                              ; preds = %.lr.ph455
  %156 = getelementptr inbounds i64, ptr %22, i64 %148
  %157 = load i64, ptr %156, align 8, !tbaa !21
  %158 = add nsw i64 %157, %116
  %159 = getelementptr inbounds i64, ptr %24, i64 %148
  %160 = load i64, ptr %159, align 8, !tbaa !21
  %.not421 = icmp sgt i64 %158, %160
  br i1 %.not421, label %161, label %176

161:                                              ; preds = %155, %.lr.ph455
  %162 = icmp eq i64 %150, %153
  br i1 %162, label %163, label %177

163:                                              ; preds = %161
  %164 = load i64, ptr %151, align 8, !tbaa !39
  %165 = getelementptr inbounds i64, ptr %25, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !21
  %167 = getelementptr inbounds i64, ptr %22, i64 %148
  %168 = load i64, ptr %167, align 8, !tbaa !21
  %169 = mul nsw i64 %168, %166
  %170 = getelementptr inbounds i64, ptr %25, i64 %148
  %171 = load i64, ptr %170, align 8, !tbaa !21
  %172 = getelementptr inbounds i64, ptr %22, i64 %164
  %173 = load i64, ptr %172, align 8, !tbaa !21
  %174 = mul nsw i64 %173, %171
  %175 = icmp slt i64 %169, %174
  br i1 %175, label %176, label %177

176:                                              ; preds = %163, %155
  br label %177

177:                                              ; preds = %161, %163, %176
  %.2391 = phi i64 [ %.0388454, %176 ], [ %.1390453, %163 ], [ %.1390453, %161 ]
  %.0388 = add nuw nsw i64 %.0388454, 1
  %exitcond492.not = icmp eq i64 %.0388, %127
  br i1 %exitcond492.not, label %._crit_edge456, label %.lr.ph455, !llvm.loop !43

._crit_edge456:                                   ; preds = %177, %.preheader430
  %.1390.lcssa = phi i64 [ %.0389.lcssa, %.preheader430 ], [ %.2391, %177 ]
  %178 = getelementptr inbounds %struct.edegreedef, ptr %125, i64 %.1390.lcssa
  %179 = load i64, ptr %178, align 8, !tbaa !39
  %180 = getelementptr inbounds i8, ptr %178, i64 8
  %181 = load i64, ptr %180, align 8, !tbaa !41
  %182 = icmp sgt i64 %181, %128
  br i1 %182, label %.critedge, label %183

183:                                              ; preds = %._crit_edge456
  %184 = icmp eq i64 %181, %128
  br i1 %184, label %185, label %.loopexit429

185:                                              ; preds = %183
  %186 = and i64 %.0387475, 7
  %187 = icmp eq i64 %186, 0
  br i1 %187, label %.critedge, label %188

188:                                              ; preds = %185
  %189 = getelementptr inbounds i64, ptr %24, i64 %113
  %190 = load i64, ptr %189, align 8, !tbaa !21
  %.not415 = icmp slt i64 %118, %190
  br i1 %.not415, label %191, label %.critedge

191:                                              ; preds = %188
  %192 = getelementptr inbounds i64, ptr %25, i64 %113
  %193 = load i64, ptr %192, align 8, !tbaa !21
  %194 = getelementptr inbounds i64, ptr %22, i64 %179
  %195 = load i64, ptr %194, align 8, !tbaa !21
  %196 = add nsw i64 %195, %116
  %197 = mul nsw i64 %196, %193
  %198 = getelementptr inbounds i64, ptr %25, i64 %179
  %199 = load i64, ptr %198, align 8, !tbaa !21
  %200 = mul nsw i64 %199, %118
  %201 = icmp slt i64 %197, %200
  br i1 %201, label %.critedge, label %.loopexit429

.critedge:                                        ; preds = %185, %188, %191, %._crit_edge456
  %.neg = sub i64 %128, %181
  %202 = load i64, ptr %80, align 8, !tbaa !30
  %203 = add i64 %202, %.neg
  store i64 %203, ptr %80, align 8, !tbaa !30
  %204 = load i64, ptr %52, align 8, !tbaa !25
  %205 = and i64 %204, 32
  %.not416 = icmp eq i64 %205, 0
  br i1 %.not416, label %209, label %206

206:                                              ; preds = %.critedge
  %207 = sub nsw i64 %181, %128
  %208 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %108, i64 noundef %179, i64 noundef %207, i64 noundef %203) #4
  br label %209

209:                                              ; preds = %206, %.critedge
  store i64 %179, ptr %112, align 8, !tbaa !21
  %210 = getelementptr inbounds i64, ptr %22, i64 %179
  %211 = load i64, ptr %210, align 8, !tbaa !21
  %212 = add nsw i64 %211, %116
  store i64 %212, ptr %210, align 8, !tbaa !21
  %213 = load i64, ptr %117, align 8, !tbaa !21
  %214 = sub nsw i64 %213, %116
  store i64 %214, ptr %117, align 8, !tbaa !21
  %215 = load i64, ptr %111, align 8, !tbaa !34
  %216 = load i64, ptr %180, align 8, !tbaa !41
  %217 = sub i64 %215, %216
  %218 = getelementptr inbounds i8, ptr %111, i64 8
  %219 = load i64, ptr %218, align 8, !tbaa !32
  %220 = add nsw i64 %217, %219
  store i64 %220, ptr %218, align 8, !tbaa !32
  store i64 %216, ptr %111, align 8, !tbaa !34
  store i64 %215, ptr %180, align 8, !tbaa !41
  %221 = icmp eq i64 %215, 0
  br i1 %221, label %222, label %226

222:                                              ; preds = %209
  %223 = load i64, ptr %126, align 8, !tbaa !38
  %224 = add nsw i64 %223, -1
  store i64 %224, ptr %126, align 8, !tbaa !38
  %225 = getelementptr inbounds %struct.edegreedef, ptr %125, i64 %224
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %178, ptr noundef nonnull align 8 dereferenceable(16) %225, i64 16, i1 false), !tbaa.struct !44
  %.pre = load i64, ptr %218, align 8, !tbaa !32
  %.pre496 = load i64, ptr %111, align 8, !tbaa !34
  br label %227

226:                                              ; preds = %209
  store i64 %113, ptr %178, align 8, !tbaa !39
  br label %227

227:                                              ; preds = %226, %222
  %228 = phi i64 [ %216, %226 ], [ %.pre496, %222 ]
  %229 = phi i64 [ %220, %226 ], [ %.pre, %222 ]
  %230 = icmp slt i64 %229, %228
  br i1 %230, label %231, label %240

231:                                              ; preds = %227
  %232 = add nsw i64 %.0393474, -1
  %233 = getelementptr inbounds i64, ptr %16, i64 %232
  %234 = load i64, ptr %233, align 8, !tbaa !21
  %235 = getelementptr inbounds i64, ptr %18, i64 %108
  %236 = load i64, ptr %235, align 8, !tbaa !21
  %237 = getelementptr inbounds i64, ptr %16, i64 %236
  store i64 %234, ptr %237, align 8, !tbaa !21
  %238 = load i64, ptr %235, align 8, !tbaa !21
  %239 = getelementptr inbounds i64, ptr %18, i64 %234
  store i64 %238, ptr %239, align 8, !tbaa !21
  store i64 -1, ptr %235, align 8, !tbaa !21
  br label %240

240:                                              ; preds = %231, %227
  %.1394 = phi i64 [ %232, %231 ], [ %.0393474, %227 ]
  %241 = getelementptr inbounds i64, ptr %10, i64 %108
  %242 = load i64, ptr %241, align 8, !tbaa !21
  %243 = getelementptr i8, ptr %241, i64 8
  %244 = load i64, ptr %243, align 8, !tbaa !21
  %245 = icmp slt i64 %242, %244
  br i1 %245, label %.lr.ph472, label %.loopexit429

.lr.ph472:                                        ; preds = %240, %362
  %.2466 = phi i64 [ %363, %362 ], [ %242, %240 ]
  %.2395465 = phi i64 [ %.3396424, %362 ], [ %.1394, %240 ]
  %246 = getelementptr inbounds i64, ptr %12, i64 %.2466
  %247 = load i64, ptr %246, align 8, !tbaa !21
  %248 = getelementptr inbounds i64, ptr %20, i64 %247
  %249 = load i64, ptr %248, align 8, !tbaa !21
  %250 = load ptr, ptr %82, align 8, !tbaa !31
  %251 = getelementptr inbounds %struct.rinfodef, ptr %250, i64 %247
  %252 = getelementptr inbounds i8, ptr %251, i64 24
  %253 = load ptr, ptr %252, align 8, !tbaa !37
  %254 = icmp eq ptr %253, null
  br i1 %254, label %255, label %265

255:                                              ; preds = %.lr.ph472
  %256 = load ptr, ptr %84, align 8, !tbaa !45
  %257 = load i64, ptr %85, align 8, !tbaa !46
  %258 = getelementptr inbounds %struct.edegreedef, ptr %256, i64 %257
  store ptr %258, ptr %252, align 8, !tbaa !37
  %259 = getelementptr i64, ptr %10, i64 %247
  %260 = getelementptr i8, ptr %259, i64 8
  %261 = load i64, ptr %260, align 8, !tbaa !21
  %262 = load i64, ptr %259, align 8, !tbaa !21
  %263 = add i64 %261, %257
  %264 = sub i64 %263, %262
  store i64 %264, ptr %85, align 8, !tbaa !46
  br label %265

265:                                              ; preds = %255, %.lr.ph472
  %266 = phi ptr [ %258, %255 ], [ %253, %.lr.ph472 ]
  %267 = getelementptr inbounds i8, ptr %251, i64 8
  %268 = load i64, ptr %267, align 8, !tbaa !32
  %269 = load i64, ptr %251, align 8, !tbaa !34
  %270 = sub nsw i64 %268, %269
  %271 = icmp eq i64 %249, %113
  br i1 %271, label %272, label %285

272:                                              ; preds = %265
  %273 = getelementptr inbounds i64, ptr %14, i64 %.2466
  %274 = load i64, ptr %273, align 8, !tbaa !21
  %275 = add nsw i64 %274, %268
  store i64 %275, ptr %267, align 8, !tbaa !32
  %276 = load i64, ptr %273, align 8, !tbaa !21
  %277 = sub nsw i64 %269, %276
  store i64 %277, ptr %251, align 8, !tbaa !34
  %.not418 = icmp slt i64 %275, %277
  br i1 %.not418, label %.thread, label %278

278:                                              ; preds = %272
  %279 = getelementptr inbounds i64, ptr %18, i64 %247
  %280 = load i64, ptr %279, align 8, !tbaa !21
  %281 = icmp eq i64 %280, -1
  br i1 %281, label %282, label %.thread

282:                                              ; preds = %278
  %283 = getelementptr inbounds i64, ptr %16, i64 %.2395465
  store i64 %247, ptr %283, align 8, !tbaa !21
  %284 = add nsw i64 %.2395465, 1
  store i64 %.2395465, ptr %279, align 8, !tbaa !21
  br label %.thread

285:                                              ; preds = %265
  %286 = icmp eq i64 %249, %179
  br i1 %286, label %287, label %304

287:                                              ; preds = %285
  %288 = getelementptr inbounds i64, ptr %14, i64 %.2466
  %289 = load i64, ptr %288, align 8, !tbaa !21
  %290 = add nsw i64 %289, %269
  store i64 %290, ptr %251, align 8, !tbaa !34
  %291 = load i64, ptr %288, align 8, !tbaa !21
  %292 = sub nsw i64 %268, %291
  store i64 %292, ptr %267, align 8, !tbaa !32
  %293 = icmp slt i64 %292, %290
  br i1 %293, label %294, label %304

294:                                              ; preds = %287
  %295 = getelementptr inbounds i64, ptr %18, i64 %247
  %296 = load i64, ptr %295, align 8, !tbaa !21
  %.not417 = icmp eq i64 %296, -1
  br i1 %.not417, label %304, label %297

297:                                              ; preds = %294
  %298 = add nsw i64 %.2395465, -1
  %299 = getelementptr inbounds i64, ptr %16, i64 %298
  %300 = load i64, ptr %299, align 8, !tbaa !21
  %301 = getelementptr inbounds i64, ptr %16, i64 %296
  store i64 %300, ptr %301, align 8, !tbaa !21
  %302 = load i64, ptr %295, align 8, !tbaa !21
  %303 = getelementptr inbounds i64, ptr %18, i64 %300
  store i64 %302, ptr %303, align 8, !tbaa !21
  store i64 -1, ptr %295, align 8, !tbaa !21
  br label %304

304:                                              ; preds = %285, %297, %294, %287
  %.3396 = phi i64 [ %298, %297 ], [ %.2395465, %294 ], [ %.2395465, %287 ], [ %.2395465, %285 ]
  %305 = getelementptr inbounds i8, ptr %251, i64 16
  %306 = load i64, ptr %305, align 8, !tbaa !38
  %307 = icmp sgt i64 %306, 0
  br i1 %307, label %.lr.ph460, label %.thread

308:                                              ; preds = %.lr.ph460
  %309 = add nuw nsw i64 %.3458, 1
  %exitcond493.not = icmp eq i64 %309, %306
  br i1 %exitcond493.not, label %.thread, label %.lr.ph460, !llvm.loop !47

.lr.ph460:                                        ; preds = %304, %308
  %.3458 = phi i64 [ %309, %308 ], [ 0, %304 ]
  %310 = getelementptr inbounds %struct.edegreedef, ptr %266, i64 %.3458
  %311 = load i64, ptr %310, align 8, !tbaa !39
  %312 = icmp eq i64 %311, %113
  br i1 %312, label %313, label %308

313:                                              ; preds = %.lr.ph460
  %314 = getelementptr inbounds i8, ptr %310, i64 8
  %315 = load i64, ptr %314, align 8, !tbaa !41
  %316 = getelementptr inbounds i64, ptr %14, i64 %.2466
  %317 = load i64, ptr %316, align 8, !tbaa !21
  %318 = icmp eq i64 %315, %317
  br i1 %318, label %319, label %322

319:                                              ; preds = %313
  %320 = add nsw i64 %306, -1
  store i64 %320, ptr %305, align 8, !tbaa !38
  %321 = getelementptr inbounds %struct.edegreedef, ptr %266, i64 %320
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %310, ptr noundef nonnull align 8 dereferenceable(16) %321, i64 16, i1 false), !tbaa.struct !44
  br label %.thread

322:                                              ; preds = %313
  %323 = sub nsw i64 %315, %317
  store i64 %323, ptr %314, align 8, !tbaa !41
  br label %.thread

.thread:                                          ; preds = %308, %304, %282, %278, %272, %322, %319
  %.3396424 = phi i64 [ %.3396, %322 ], [ %.3396, %319 ], [ %.2395465, %272 ], [ %.2395465, %278 ], [ %284, %282 ], [ %.3396, %304 ], [ %.3396, %308 ]
  %.not420 = icmp eq i64 %249, %179
  br i1 %.not420, label %.thread425, label %.preheader

.preheader:                                       ; preds = %.thread
  %324 = getelementptr inbounds i8, ptr %251, i64 16
  %325 = load i64, ptr %324, align 8, !tbaa !38
  %326 = icmp sgt i64 %325, 0
  br i1 %326, label %.lr.ph462, label %.loopexit

.lr.ph462:                                        ; preds = %.preheader, %336
  %.4461 = phi i64 [ %337, %336 ], [ 0, %.preheader ]
  %327 = getelementptr inbounds %struct.edegreedef, ptr %266, i64 %.4461
  %328 = load i64, ptr %327, align 8, !tbaa !39
  %329 = icmp eq i64 %328, %179
  br i1 %329, label %330, label %336

330:                                              ; preds = %.lr.ph462
  %331 = getelementptr inbounds i64, ptr %14, i64 %.2466
  %332 = load i64, ptr %331, align 8, !tbaa !21
  %333 = getelementptr inbounds i8, ptr %327, i64 8
  %334 = load i64, ptr %333, align 8, !tbaa !41
  %335 = add nsw i64 %334, %332
  store i64 %335, ptr %333, align 8, !tbaa !41
  br label %.loopexit

336:                                              ; preds = %.lr.ph462
  %337 = add nuw nsw i64 %.4461, 1
  %exitcond494.not = icmp eq i64 %337, %325
  br i1 %exitcond494.not, label %.loopexit.thread, label %.lr.ph462, !llvm.loop !48

.loopexit:                                        ; preds = %.preheader, %330
  %.4440 = phi i64 [ %.4461, %330 ], [ 0, %.preheader ]
  %338 = icmp eq i64 %.4440, %325
  br i1 %338, label %.loopexit.thread, label %344

.loopexit.thread:                                 ; preds = %336, %.loopexit
  %339 = getelementptr inbounds %struct.edegreedef, ptr %266, i64 %325
  store i64 %179, ptr %339, align 8, !tbaa !39
  %340 = getelementptr inbounds i64, ptr %14, i64 %.2466
  %341 = load i64, ptr %340, align 8, !tbaa !21
  %342 = add nsw i64 %325, 1
  store i64 %342, ptr %324, align 8, !tbaa !38
  %343 = getelementptr inbounds %struct.edegreedef, ptr %266, i64 %325, i32 1
  store i64 %341, ptr %343, align 8, !tbaa !41
  br label %344

344:                                              ; preds = %.loopexit, %.loopexit.thread
  br i1 %271, label %.thread425, label %362

.thread425:                                       ; preds = %.thread, %344
  %345 = load i64, ptr %267, align 8, !tbaa !32
  %346 = load i64, ptr %251, align 8, !tbaa !34
  %347 = sub nsw i64 %345, %346
  %348 = getelementptr inbounds i64, ptr %46, i64 %247
  %349 = load i64, ptr %348, align 8, !tbaa !21
  %350 = icmp eq i64 %349, 2
  br i1 %350, label %351, label %357

351:                                              ; preds = %.thread425
  %352 = icmp sgt i64 %347, -1
  br i1 %352, label %353, label %355

353:                                              ; preds = %351
  %354 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %7, i64 noundef %247, i64 noundef %270, i64 noundef %347) #4
  br label %362

355:                                              ; preds = %351
  %356 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %7, i64 noundef %247, i64 noundef %270) #4
  store i64 -1, ptr %348, align 8, !tbaa !21
  br label %362

357:                                              ; preds = %.thread425
  %358 = icmp eq i64 %349, -1
  %359 = icmp sgt i64 %347, -1
  %or.cond3 = select i1 %358, i1 %359, i1 false
  br i1 %or.cond3, label %360, label %362

360:                                              ; preds = %357
  %361 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %7, i64 noundef %247, i64 noundef %347) #4
  store i64 2, ptr %348, align 8, !tbaa !21
  br label %362

362:                                              ; preds = %344, %357, %360, %353, %355
  %363 = add nsw i64 %.2466, 1
  %364 = load i64, ptr %243, align 8, !tbaa !21
  %365 = icmp slt i64 %363, %364
  br i1 %365, label %.lr.ph472, label %.loopexit429, !llvm.loop !49

.loopexit429:                                     ; preds = %143, %362, %240, %191, %183, %._crit_edge449, %.lr.ph477
  %.4397 = phi i64 [ %.0393474, %.lr.ph477 ], [ %.0393474, %._crit_edge449 ], [ %.0393474, %183 ], [ %.0393474, %191 ], [ %.1394, %240 ], [ %.3396424, %362 ], [ %.0393474, %143 ]
  %366 = add nuw nsw i64 %.0387475, 1
  %367 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %368 = icmp eq i64 %367, -1
  br i1 %368, label %._crit_edge478, label %.lr.ph477

._crit_edge478:                                   ; preds = %.loopexit429, %.preheader431
  %.0393.lcssa = phi i64 [ %91, %.preheader431 ], [ %.4397, %.loopexit429 ]
  store i64 %.0393.lcssa, ptr %81, align 8, !tbaa !29
  %369 = load i64, ptr %52, align 8, !tbaa !25
  %370 = and i64 %369, 8
  %.not422 = icmp eq i64 %370, 0
  br i1 %.not422, label %387, label %371

371:                                              ; preds = %._crit_edge478
  %372 = call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %22) #4
  %373 = getelementptr inbounds i64, ptr %22, i64 %372
  %374 = load i64, ptr %373, align 8, !tbaa !21
  %375 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %376 = getelementptr inbounds i64, ptr %22, i64 %375
  %377 = load i64, ptr %376, align 8, !tbaa !21
  %378 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %379 = getelementptr inbounds i64, ptr %22, i64 %378
  %380 = load i64, ptr %379, align 8, !tbaa !21
  %381 = sitofp i64 %380 to double
  %382 = fmul double %86, %381
  %383 = fdiv double %382, %87
  %384 = load i64, ptr %81, align 8, !tbaa !29
  %385 = load i64, ptr %80, align 8, !tbaa !30
  %386 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %374, i64 noundef %377, double noundef %383, i64 noundef %384, i64 noundef %385) #4
  br label %387

387:                                              ; preds = %371, %._crit_edge478
  %388 = load i64, ptr %80, align 8, !tbaa !30
  %389 = icmp eq i64 %388, %90
  %390 = add nuw nsw i64 %.0392480, 1
  %exitcond495.not = icmp eq i64 %390, %5
  %or.cond505 = select i1 %389, i1 true, i1 %exitcond495.not
  br i1 %or.cond505, label %._crit_edge483, label %88, !llvm.loop !50

._crit_edge483:                                   ; preds = %387, %78
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %7) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %8) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %8) #4
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #4
  ret void
}

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

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

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


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