; LLVM IR from siconos/siconos :: externals/lbl/metis4/mkwayfmh.ll_ (MCGreedy_KWayEdgeBalanceHorizontal)

; 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 { i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr }
%struct.graphdef = type { ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr }
%struct.controldef = type { i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i32, i32, ptr, ptr, i32, ptr, ptr }
%struct.rinfodef = type { i32, i32, i32, ptr }
%struct.edegreedef = type { i32, i32 }

@.str = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1

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

declare ptr @__fwspacemalloc(ptr noundef, i32 noundef) #1

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

declare ptr @__idxwspacemalloc(ptr noundef, i32 noundef) #1

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

declare i32 @__samin(i32 noundef, ptr noundef) #1

declare i32 @__samax(i32 noundef, ptr noundef) #1

declare void @__RandomPermute(i32 noundef, ptr noundef, i32 noundef) #1

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

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

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

declare void @__saxpy(i32 noundef, float noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #1

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

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

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

83:                                               ; preds = %132, %5
  %84 = load i32, ptr %11, align 4, !tbaa !9
  %85 = load i32, ptr %8, align 4, !tbaa !9
  %86 = icmp slt i32 %84, %85
  br i1 %86, label %87, label %135

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

88:                                               ; preds = %128, %87
  %89 = load i32, ptr %14, align 4, !tbaa !9
  %90 = load i32, ptr %20, align 4, !tbaa !9
  %91 = icmp slt i32 %89, %90
  br i1 %91, label %92, label %131

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

128:                                              ; preds = %92
  %129 = load i32, ptr %14, align 4, !tbaa !9
  %130 = add nsw i32 %129, 1
  store i32 %130, ptr %14, align 4, !tbaa !9
  br label %88, !llvm.loop !23

131:                                              ; preds = %88
  br label %132

132:                                              ; preds = %131
  %133 = load i32, ptr %11, align 4, !tbaa !9
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr %11, align 4, !tbaa !9
  br label %83, !llvm.loop !25

135:                                              ; preds = %83
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = load i32, ptr %19, align 4, !tbaa !9
  %138 = call ptr @__idxwspacemalloc(ptr noundef %136, i32 noundef %137)
  store ptr %138, ptr %34, align 8, !tbaa !5
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = load i32, ptr %19, align 4, !tbaa !9
  %141 = call ptr @__idxwspacemalloc(ptr noundef %139, i32 noundef %140)
  store ptr %141, ptr %37, align 8, !tbaa !5
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = load i32, ptr %19, align 4, !tbaa !9
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.graphdef, ptr %144, i32 0, i32 9
  %146 = load ptr, ptr %145, align 8, !tbaa !26
  %147 = load i32, ptr %19, align 4, !tbaa !9
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.graphdef, ptr %148, i32 0, i32 9
  %150 = load ptr, ptr %149, align 8, !tbaa !26
  %151 = call i32 @__idxamax(i32 noundef %147, ptr noundef %150)
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %146, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !9
  call void @__PQueueInit(ptr noundef %142, ptr noundef %40, i32 noundef %143, i32 noundef %154)
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.controldef, ptr %155, i32 0, i32 1
  %157 = load i32, ptr %156, align 4, !tbaa !27
  %158 = and i32 %157, 8
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %211

160:                                              ; preds = %135
  %161 = load ptr, ptr %41, align 8, !tbaa !5
  %162 = load i32, ptr %20, align 4, !tbaa !9
  %163 = load i32, ptr %8, align 4, !tbaa !9
  %164 = mul nsw i32 %162, %163
  %165 = load ptr, ptr %41, align 8, !tbaa !5
  %166 = call i32 @__samin(i32 noundef %164, ptr noundef %165)
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds float, ptr %161, i64 %167
  %169 = load float, ptr %168, align 4, !tbaa !21
  %170 = fpext float %169 to double
  %171 = load ptr, ptr %41, align 8, !tbaa !5
  %172 = load i32, ptr %20, align 4, !tbaa !9
  %173 = load i32, ptr %8, align 4, !tbaa !9
  %174 = mul nsw i32 %172, %173
  %175 = load ptr, ptr %41, align 8, !tbaa !5
  %176 = call i32 @__samax(i32 noundef %174, ptr noundef %175)
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds float, ptr %171, i64 %177
  %179 = load float, ptr %178, align 4, !tbaa !21
  %180 = fpext float %179 to double
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.graphdef, ptr %181, i32 0, i32 2
  %183 = load i32, ptr %182, align 8, !tbaa !11
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.graphdef, ptr %184, i32 0, i32 16
  %186 = load i32, ptr %185, align 8, !tbaa !31
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.graphdef, ptr %187, i32 0, i32 12
  %189 = load i32, ptr %188, align 8, !tbaa !32
  %190 = call i32 (ptr, ...) @printf(ptr noundef @.str, double noundef %170, double noundef %180, i32 noundef %183, i32 noundef %186, i32 noundef %189)
  %191 = load i32, ptr %20, align 4, !tbaa !9
  %192 = load i32, ptr %8, align 4, !tbaa !9
  %193 = load ptr, ptr %41, align 8, !tbaa !5
  %194 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  call void @__ComputeHKWayLoadImbalance(i32 noundef %191, i32 noundef %192, ptr noundef %193, ptr noundef %194)
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %195

195:                                              ; preds = %206, %160
  %196 = load i32, ptr %11, align 4, !tbaa !9
  %197 = load i32, ptr %20, align 4, !tbaa !9
  %198 = icmp slt i32 %196, %197
  br i1 %198, label %199, label %209

199:                                              ; preds = %195
  %200 = load i32, ptr %11, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %201
  %203 = load float, ptr %202, align 4, !tbaa !21
  %204 = fpext float %203 to double
  %205 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %204)
  br label %206

206:                                              ; preds = %199
  %207 = load i32, ptr %11, align 4, !tbaa !9
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %11, align 4, !tbaa !9
  br label %195, !llvm.loop !33

209:                                              ; preds = %195
  %210 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %211

211:                                              ; preds = %209, %135
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %212

212:                                              ; preds = %1116, %211
  %213 = load i32, ptr %18, align 4, !tbaa !9
  %214 = load i32, ptr %10, align 4, !tbaa !9
  %215 = icmp slt i32 %213, %214
  br i1 %215, label %216, label %1119

216:                                              ; preds = %212
  %217 = load i32, ptr %20, align 4, !tbaa !9
  %218 = load i32, ptr %8, align 4, !tbaa !9
  %219 = load ptr, ptr %41, align 8, !tbaa !5
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = call i32 @__MocIsHBalanced(i32 noundef %217, i32 noundef %218, ptr noundef %219, ptr noundef %220)
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %223, label %224

223:                                              ; preds = %216
  br label %1119

224:                                              ; preds = %216
  call void @__PQueueReset(ptr noundef %40)
  %225 = load i32, ptr %19, align 4, !tbaa !9
  %226 = load ptr, ptr %37, align 8, !tbaa !5
  %227 = call ptr @__idxset(i32 noundef %225, i32 noundef -1, ptr noundef %226)
  %228 = load ptr, ptr %7, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.graphdef, ptr %228, i32 0, i32 12
  %230 = load i32, ptr %229, align 8, !tbaa !32
  store i32 %230, ptr %29, align 4, !tbaa !9
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.graphdef, ptr %231, i32 0, i32 16
  %233 = load i32, ptr %232, align 8, !tbaa !31
  store i32 %233, ptr %21, align 4, !tbaa !9
  %234 = load i32, ptr %21, align 4, !tbaa !9
  %235 = load ptr, ptr %34, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %234, ptr noundef %235, i32 noundef 1)
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %236

236:                                              ; preds = %273, %224
  %237 = load i32, ptr %12, align 4, !tbaa !9
  %238 = load i32, ptr %21, align 4, !tbaa !9
  %239 = icmp slt i32 %237, %238
  br i1 %239, label %240, label %276

240:                                              ; preds = %236
  %241 = load ptr, ptr %36, align 8, !tbaa !5
  %242 = load ptr, ptr %34, align 8, !tbaa !5
  %243 = load i32, ptr %12, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds i32, ptr %242, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %241, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !9
  store i32 %249, ptr %11, align 4, !tbaa !9
  %250 = load i32, ptr %11, align 4, !tbaa !9
  %251 = load ptr, ptr %7, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.graphdef, ptr %251, i32 0, i32 21
  %253 = load ptr, ptr %252, align 8, !tbaa !34
  %254 = load i32, ptr %11, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds %struct.rinfodef, ptr %253, i64 %255
  %257 = getelementptr inbounds %struct.rinfodef, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 4, !tbaa !35
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.graphdef, ptr %259, i32 0, i32 21
  %261 = load ptr, ptr %260, align 8, !tbaa !34
  %262 = load i32, ptr %11, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds %struct.rinfodef, ptr %261, i64 %263
  %265 = getelementptr inbounds %struct.rinfodef, ptr %264, i32 0, i32 0
  %266 = load i32, ptr %265, align 8, !tbaa !37
  %267 = sub nsw i32 %258, %266
  %268 = call i32 @__PQueueInsert(ptr noundef %40, i32 noundef %250, i32 noundef %267)
  %269 = load ptr, ptr %37, align 8, !tbaa !5
  %270 = load i32, ptr %11, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %269, i64 %271
  store i32 2, ptr %272, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %240
  %274 = load i32, ptr %12, align 4, !tbaa !9
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %12, align 4, !tbaa !9
  br label %236, !llvm.loop !38

276:                                              ; preds = %236
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %277

277:                                              ; preds = %1052, %492, %367, %321, %276
  %278 = call i32 @__PQueueGetMax(ptr noundef %40)
  store i32 %278, ptr %11, align 4, !tbaa !9
  %279 = icmp eq i32 %278, -1
  br i1 %279, label %280, label %281

280:                                              ; preds = %277
  br label %1055

281:                                              ; preds = %277
  %282 = load ptr, ptr %37, align 8, !tbaa !5
  %283 = load i32, ptr %11, align 4, !tbaa !9
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds i32, ptr %282, i64 %284
  store i32 1, ptr %285, align 4, !tbaa !9
  %286 = load ptr, ptr %7, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.graphdef, ptr %286, i32 0, i32 21
  %288 = load ptr, ptr %287, align 8, !tbaa !34
  %289 = load i32, ptr %11, align 4, !tbaa !9
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds %struct.rinfodef, ptr %288, i64 %290
  store ptr %291, ptr %39, align 8, !tbaa !5
  %292 = load ptr, ptr %33, align 8, !tbaa !5
  %293 = load i32, ptr %11, align 4, !tbaa !9
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i32, ptr %292, i64 %294
  %296 = load i32, ptr %295, align 4, !tbaa !9
  store i32 %296, ptr %26, align 4, !tbaa !9
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.graphdef, ptr %297, i32 0, i32 25
  %299 = load ptr, ptr %298, align 8, !tbaa !39
  %300 = load i32, ptr %11, align 4, !tbaa !9
  %301 = load i32, ptr %20, align 4, !tbaa !9
  %302 = mul nsw i32 %300, %301
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds float, ptr %299, i64 %303
  store ptr %304, ptr %42, align 8, !tbaa !5
  %305 = load i32, ptr %20, align 4, !tbaa !9
  %306 = load ptr, ptr %41, align 8, !tbaa !5
  %307 = load i32, ptr %26, align 4, !tbaa !9
  %308 = load i32, ptr %20, align 4, !tbaa !9
  %309 = mul nsw i32 %307, %308
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds float, ptr %306, i64 %310
  %312 = load ptr, ptr %42, align 8, !tbaa !5
  %313 = load ptr, ptr %43, align 8, !tbaa !5
  %314 = load i32, ptr %26, align 4, !tbaa !9
  %315 = load i32, ptr %20, align 4, !tbaa !9
  %316 = mul nsw i32 %314, %315
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds float, ptr %313, i64 %317
  %319 = call i32 @__AreAllHVwgtsBelow(i32 noundef %305, float noundef 1.000000e+00, ptr noundef %311, float noundef -1.000000e+00, ptr noundef %312, ptr noundef %318)
  %320 = icmp ne i32 %319, 0
  br i1 %320, label %321, label %322

321:                                              ; preds = %281
  br label %277

322:                                              ; preds = %281
  %323 = load ptr, ptr %39, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.rinfodef, ptr %323, i32 0, i32 3
  %325 = load ptr, ptr %324, align 8, !tbaa !40
  store ptr %325, ptr %38, align 8, !tbaa !5
  %326 = load ptr, ptr %39, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.rinfodef, ptr %326, i32 0, i32 2
  %328 = load i32, ptr %327, align 8, !tbaa !41
  store i32 %328, ptr %22, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %329

329:                                              ; preds = %360, %322
  %330 = load i32, ptr %16, align 4, !tbaa !9
  %331 = load i32, ptr %22, align 4, !tbaa !9
  %332 = icmp slt i32 %330, %331
  br i1 %332, label %333, label %363

333:                                              ; preds = %329
  %334 = load ptr, ptr %38, align 8, !tbaa !5
  %335 = load i32, ptr %16, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds %struct.edegreedef, ptr %334, i64 %336
  %338 = getelementptr inbounds %struct.edegreedef, ptr %337, i32 0, i32 0
  %339 = load i32, ptr %338, align 4, !tbaa !42
  store i32 %339, ptr %28, align 4, !tbaa !9
  %340 = load i32, ptr %20, align 4, !tbaa !9
  %341 = load i32, ptr %8, align 4, !tbaa !9
  %342 = load ptr, ptr %41, align 8, !tbaa !5
  %343 = load i32, ptr %26, align 4, !tbaa !9
  %344 = load i32, ptr %20, align 4, !tbaa !9
  %345 = mul nsw i32 %343, %344
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds float, ptr %342, i64 %346
  %348 = load ptr, ptr %41, align 8, !tbaa !5
  %349 = load i32, ptr %28, align 4, !tbaa !9
  %350 = load i32, ptr %20, align 4, !tbaa !9
  %351 = mul nsw i32 %349, %350
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds float, ptr %348, i64 %352
  %354 = load ptr, ptr %42, align 8, !tbaa !5
  %355 = load ptr, ptr %9, align 8, !tbaa !5
  %356 = call i32 @__IsHBalanceBetterFT(i32 noundef %340, i32 noundef %341, ptr noundef %347, ptr noundef %353, ptr noundef %354, ptr noundef %355)
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %358, label %359

358:                                              ; preds = %333
  br label %363

359:                                              ; preds = %333
  br label %360

360:                                              ; preds = %359
  %361 = load i32, ptr %16, align 4, !tbaa !9
  %362 = add nsw i32 %361, 1
  store i32 %362, ptr %16, align 4, !tbaa !9
  br label %329, !llvm.loop !44

363:                                              ; preds = %358, %329
  %364 = load i32, ptr %16, align 4, !tbaa !9
  %365 = load i32, ptr %22, align 4, !tbaa !9
  %366 = icmp eq i32 %364, %365
  br i1 %366, label %367, label %368

367:                                              ; preds = %363
  br label %277

368:                                              ; preds = %363
  %369 = load i32, ptr %16, align 4, !tbaa !9
  %370 = add nsw i32 %369, 1
  store i32 %370, ptr %14, align 4, !tbaa !9
  br label %371

371:                                              ; preds = %408, %368
  %372 = load i32, ptr %14, align 4, !tbaa !9
  %373 = load i32, ptr %22, align 4, !tbaa !9
  %374 = icmp slt i32 %372, %373
  br i1 %374, label %375, label %411

375:                                              ; preds = %371
  %376 = load ptr, ptr %38, align 8, !tbaa !5
  %377 = load i32, ptr %14, align 4, !tbaa !9
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %378
  %380 = getelementptr inbounds %struct.edegreedef, ptr %379, i32 0, i32 0
  %381 = load i32, ptr %380, align 4, !tbaa !42
  store i32 %381, ptr %28, align 4, !tbaa !9
  %382 = load i32, ptr %20, align 4, !tbaa !9
  %383 = load i32, ptr %8, align 4, !tbaa !9
  %384 = load ptr, ptr %41, align 8, !tbaa !5
  %385 = load ptr, ptr %38, align 8, !tbaa !5
  %386 = load i32, ptr %16, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds %struct.edegreedef, ptr %385, i64 %387
  %389 = getelementptr inbounds %struct.edegreedef, ptr %388, i32 0, i32 0
  %390 = load i32, ptr %389, align 4, !tbaa !42
  %391 = load i32, ptr %20, align 4, !tbaa !9
  %392 = mul nsw i32 %390, %391
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds float, ptr %384, i64 %393
  %395 = load ptr, ptr %41, align 8, !tbaa !5
  %396 = load i32, ptr %28, align 4, !tbaa !9
  %397 = load i32, ptr %20, align 4, !tbaa !9
  %398 = mul nsw i32 %396, %397
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds float, ptr %395, i64 %399
  %401 = load ptr, ptr %42, align 8, !tbaa !5
  %402 = load ptr, ptr %9, align 8, !tbaa !5
  %403 = call i32 @__IsHBalanceBetterTT(i32 noundef %382, i32 noundef %383, ptr noundef %394, ptr noundef %400, ptr noundef %401, ptr noundef %402)
  %404 = icmp ne i32 %403, 0
  br i1 %404, label %405, label %407

405:                                              ; preds = %375
  %406 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %406, ptr %16, align 4, !tbaa !9
  br label %407

407:                                              ; preds = %405, %375
  br label %408

408:                                              ; preds = %407
  %409 = load i32, ptr %14, align 4, !tbaa !9
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %14, align 4, !tbaa !9
  br label %371, !llvm.loop !45

411:                                              ; preds = %371
  %412 = load ptr, ptr %38, align 8, !tbaa !5
  %413 = load i32, ptr %16, align 4, !tbaa !9
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds %struct.edegreedef, ptr %412, i64 %414
  %416 = getelementptr inbounds %struct.edegreedef, ptr %415, i32 0, i32 0
  %417 = load i32, ptr %416, align 4, !tbaa !42
  store i32 %417, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  %418 = load i32, ptr %20, align 4, !tbaa !9
  %419 = load ptr, ptr %41, align 8, !tbaa !5
  %420 = load i32, ptr %26, align 4, !tbaa !9
  %421 = load i32, ptr %20, align 4, !tbaa !9
  %422 = mul nsw i32 %420, %421
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds float, ptr %419, i64 %423
  %425 = load ptr, ptr %42, align 8, !tbaa !5
  %426 = load ptr, ptr %44, align 8, !tbaa !5
  %427 = load i32, ptr %26, align 4, !tbaa !9
  %428 = load i32, ptr %20, align 4, !tbaa !9
  %429 = mul nsw i32 %427, %428
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds float, ptr %426, i64 %430
  %432 = call i32 @__AreAllHVwgtsBelow(i32 noundef %418, float noundef 1.000000e+00, ptr noundef %424, float noundef 0.000000e+00, ptr noundef %425, ptr noundef %431)
  %433 = icmp ne i32 %432, 0
  br i1 %433, label %437, label %434

434:                                              ; preds = %411
  %435 = load i32, ptr %14, align 4, !tbaa !9
  %436 = add nsw i32 %435, 1
  store i32 %436, ptr %14, align 4, !tbaa !9
  br label %437

437:                                              ; preds = %434, %411
  %438 = load ptr, ptr %38, align 8, !tbaa !5
  %439 = load i32, ptr %16, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds %struct.edegreedef, ptr %438, i64 %440
  %442 = getelementptr inbounds %struct.edegreedef, ptr %441, i32 0, i32 1
  %443 = load i32, ptr %442, align 4, !tbaa !46
  %444 = load ptr, ptr %39, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.rinfodef, ptr %444, i32 0, i32 0
  %446 = load i32, ptr %445, align 8, !tbaa !37
  %447 = sub nsw i32 %443, %446
  %448 = icmp sge i32 %447, 0
  br i1 %448, label %449, label %452

449:                                              ; preds = %437
  %450 = load i32, ptr %14, align 4, !tbaa !9
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %14, align 4, !tbaa !9
  br label %452

452:                                              ; preds = %449, %437
  %453 = load i32, ptr %20, align 4, !tbaa !9
  %454 = load ptr, ptr %41, align 8, !tbaa !5
  %455 = load i32, ptr %28, align 4, !tbaa !9
  %456 = load i32, ptr %20, align 4, !tbaa !9
  %457 = mul nsw i32 %455, %456
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds float, ptr %454, i64 %458
  %460 = load ptr, ptr %42, align 8, !tbaa !5
  %461 = load ptr, ptr %43, align 8, !tbaa !5
  %462 = load i32, ptr %28, align 4, !tbaa !9
  %463 = load i32, ptr %20, align 4, !tbaa !9
  %464 = mul nsw i32 %462, %463
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds float, ptr %461, i64 %465
  %467 = call i32 @__AreAllHVwgtsAbove(i32 noundef %453, float noundef 1.000000e+00, ptr noundef %459, float noundef 0.000000e+00, ptr noundef %460, ptr noundef %466)
  %468 = icmp ne i32 %467, 0
  br i1 %468, label %489, label %469

469:                                              ; preds = %452
  %470 = load i32, ptr %20, align 4, !tbaa !9
  %471 = load ptr, ptr %41, align 8, !tbaa !5
  %472 = load i32, ptr %28, align 4, !tbaa !9
  %473 = load i32, ptr %20, align 4, !tbaa !9
  %474 = mul nsw i32 %472, %473
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds float, ptr %471, i64 %475
  %477 = load ptr, ptr %42, align 8, !tbaa !5
  %478 = load ptr, ptr %44, align 8, !tbaa !5
  %479 = load i32, ptr %28, align 4, !tbaa !9
  %480 = load i32, ptr %20, align 4, !tbaa !9
  %481 = mul nsw i32 %479, %480
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds float, ptr %478, i64 %482
  %484 = call i32 @__AreAllHVwgtsBelow(i32 noundef %470, float noundef 1.000000e+00, ptr noundef %476, float noundef 1.000000e+00, ptr noundef %477, ptr noundef %483)
  %485 = icmp ne i32 %484, 0
  br i1 %485, label %486, label %489

486:                                              ; preds = %469
  %487 = load i32, ptr %14, align 4, !tbaa !9
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %14, align 4, !tbaa !9
  br label %489

489:                                              ; preds = %486, %469, %452
  %490 = load i32, ptr %14, align 4, !tbaa !9
  %491 = icmp eq i32 %490, 0
  br i1 %491, label %492, label %493

492:                                              ; preds = %489
  br label %277

493:                                              ; preds = %489
  %494 = load ptr, ptr %38, align 8, !tbaa !5
  %495 = load i32, ptr %16, align 4, !tbaa !9
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds %struct.edegreedef, ptr %494, i64 %496
  %498 = getelementptr inbounds %struct.edegreedef, ptr %497, i32 0, i32 1
  %499 = load i32, ptr %498, align 4, !tbaa !46
  %500 = load ptr, ptr %39, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.rinfodef, ptr %500, i32 0, i32 0
  %502 = load i32, ptr %501, align 8, !tbaa !37
  %503 = sub nsw i32 %499, %502
  %504 = load ptr, ptr %7, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.graphdef, ptr %504, i32 0, i32 12
  %506 = load i32, ptr %505, align 8, !tbaa !32
  %507 = sub nsw i32 %506, %503
  store i32 %507, ptr %505, align 8, !tbaa !32
  %508 = load ptr, ptr %6, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.controldef, ptr %508, i32 0, i32 1
  %510 = load i32, ptr %509, align 4, !tbaa !27
  %511 = and i32 %510, 32
  %512 = icmp ne i32 %511, 0
  br i1 %512, label %513, label %530

513:                                              ; preds = %493
  %514 = load i32, ptr %11, align 4, !tbaa !9
  %515 = load i32, ptr %28, align 4, !tbaa !9
  %516 = load ptr, ptr %38, align 8, !tbaa !5
  %517 = load i32, ptr %16, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds %struct.edegreedef, ptr %516, i64 %518
  %520 = getelementptr inbounds %struct.edegreedef, ptr %519, i32 0, i32 1
  %521 = load i32, ptr %520, align 4, !tbaa !46
  %522 = load ptr, ptr %39, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.rinfodef, ptr %522, i32 0, i32 0
  %524 = load i32, ptr %523, align 8, !tbaa !37
  %525 = sub nsw i32 %521, %524
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.graphdef, ptr %526, i32 0, i32 12
  %528 = load i32, ptr %527, align 8, !tbaa !32
  %529 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %514, i32 noundef %515, i32 noundef %525, i32 noundef %528)
  br label %530

530:                                              ; preds = %513, %493
  %531 = load i32, ptr %20, align 4, !tbaa !9
  %532 = load ptr, ptr %42, align 8, !tbaa !5
  %533 = load ptr, ptr %41, align 8, !tbaa !5
  %534 = load i32, ptr %28, align 4, !tbaa !9
  %535 = load i32, ptr %20, align 4, !tbaa !9
  %536 = mul nsw i32 %534, %535
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds float, ptr %533, i64 %537
  call void @__saxpy(i32 noundef %531, float noundef 1.000000e+00, ptr noundef %532, i32 noundef 1, ptr noundef %538, i32 noundef 1)
  %539 = load i32, ptr %20, align 4, !tbaa !9
  %540 = load ptr, ptr %42, align 8, !tbaa !5
  %541 = load ptr, ptr %41, align 8, !tbaa !5
  %542 = load i32, ptr %26, align 4, !tbaa !9
  %543 = load i32, ptr %20, align 4, !tbaa !9
  %544 = mul nsw i32 %542, %543
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds float, ptr %541, i64 %545
  call void @__saxpy(i32 noundef %539, float noundef -1.000000e+00, ptr noundef %540, i32 noundef 1, ptr noundef %546, i32 noundef 1)
  %547 = load i32, ptr %28, align 4, !tbaa !9
  %548 = load ptr, ptr %33, align 8, !tbaa !5
  %549 = load i32, ptr %11, align 4, !tbaa !9
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds i32, ptr %548, i64 %550
  store i32 %547, ptr %551, align 4, !tbaa !9
  %552 = load ptr, ptr %39, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.rinfodef, ptr %552, i32 0, i32 0
  %554 = load i32, ptr %553, align 8, !tbaa !37
  %555 = load ptr, ptr %38, align 8, !tbaa !5
  %556 = load i32, ptr %16, align 4, !tbaa !9
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds %struct.edegreedef, ptr %555, i64 %557
  %559 = getelementptr inbounds %struct.edegreedef, ptr %558, i32 0, i32 1
  %560 = load i32, ptr %559, align 4, !tbaa !46
  %561 = sub nsw i32 %554, %560
  %562 = load ptr, ptr %39, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.rinfodef, ptr %562, i32 0, i32 1
  %564 = load i32, ptr %563, align 4, !tbaa !35
  %565 = add nsw i32 %564, %561
  store i32 %565, ptr %563, align 4, !tbaa !35
  br label %566

566:                                              ; preds = %530
  %567 = load ptr, ptr %39, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.rinfodef, ptr %567, i32 0, i32 0
  %569 = load i32, ptr %568, align 8, !tbaa !37
  store i32 %569, ptr %14, align 4, !tbaa !9
  %570 = load ptr, ptr %38, align 8, !tbaa !5
  %571 = load i32, ptr %16, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds %struct.edegreedef, ptr %570, i64 %572
  %574 = getelementptr inbounds %struct.edegreedef, ptr %573, i32 0, i32 1
  %575 = load i32, ptr %574, align 4, !tbaa !46
  %576 = load ptr, ptr %39, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.rinfodef, ptr %576, i32 0, i32 0
  store i32 %575, ptr %577, align 8, !tbaa !37
  %578 = load i32, ptr %14, align 4, !tbaa !9
  %579 = load ptr, ptr %38, align 8, !tbaa !5
  %580 = load i32, ptr %16, align 4, !tbaa !9
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds %struct.edegreedef, ptr %579, i64 %581
  %583 = getelementptr inbounds %struct.edegreedef, ptr %582, i32 0, i32 1
  store i32 %578, ptr %583, align 4, !tbaa !46
  br label %584

584:                                              ; preds = %566
  br label %585

585:                                              ; preds = %584
  %586 = load ptr, ptr %38, align 8, !tbaa !5
  %587 = load i32, ptr %16, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct.edegreedef, ptr %586, i64 %588
  %590 = getelementptr inbounds %struct.edegreedef, ptr %589, i32 0, i32 1
  %591 = load i32, ptr %590, align 4, !tbaa !46
  %592 = icmp eq i32 %591, 0
  br i1 %592, label %593, label %605

593:                                              ; preds = %585
  %594 = load ptr, ptr %38, align 8, !tbaa !5
  %595 = load i32, ptr %16, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.edegreedef, ptr %594, i64 %596
  %598 = load ptr, ptr %38, align 8, !tbaa !5
  %599 = load ptr, ptr %39, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.rinfodef, ptr %599, i32 0, i32 2
  %601 = load i32, ptr %600, align 8, !tbaa !41
  %602 = add nsw i32 %601, -1
  store i32 %602, ptr %600, align 8, !tbaa !41
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds %struct.edegreedef, ptr %598, i64 %603
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %597, ptr align 4 %604, i64 8, i1 false), !tbaa.struct !47
  br label %612

605:                                              ; preds = %585
  %606 = load i32, ptr %26, align 4, !tbaa !9
  %607 = load ptr, ptr %38, align 8, !tbaa !5
  %608 = load i32, ptr %16, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds %struct.edegreedef, ptr %607, i64 %609
  %611 = getelementptr inbounds %struct.edegreedef, ptr %610, i32 0, i32 0
  store i32 %606, ptr %611, align 4, !tbaa !42
  br label %612

612:                                              ; preds = %605, %593
  %613 = load ptr, ptr %39, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.rinfodef, ptr %613, i32 0, i32 1
  %615 = load i32, ptr %614, align 4, !tbaa !35
  %616 = icmp eq i32 %615, 0
  br i1 %616, label %617, label %652

617:                                              ; preds = %612
  br label %618

618:                                              ; preds = %617
  %619 = load ptr, ptr %36, align 8, !tbaa !5
  %620 = load i32, ptr %21, align 4, !tbaa !9
  %621 = add nsw i32 %620, -1
  store i32 %621, ptr %21, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %619, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !9
  %625 = load ptr, ptr %36, align 8, !tbaa !5
  %626 = load ptr, ptr %35, align 8, !tbaa !5
  %627 = load i32, ptr %11, align 4, !tbaa !9
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i32, ptr %626, i64 %628
  %630 = load i32, ptr %629, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds i32, ptr %625, i64 %631
  store i32 %624, ptr %632, align 4, !tbaa !9
  %633 = load ptr, ptr %35, align 8, !tbaa !5
  %634 = load i32, ptr %11, align 4, !tbaa !9
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds i32, ptr %633, i64 %635
  %637 = load i32, ptr %636, align 4, !tbaa !9
  %638 = load ptr, ptr %35, align 8, !tbaa !5
  %639 = load ptr, ptr %36, align 8, !tbaa !5
  %640 = load i32, ptr %21, align 4, !tbaa !9
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds i32, ptr %639, i64 %641
  %643 = load i32, ptr %642, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds i32, ptr %638, i64 %644
  store i32 %637, ptr %645, align 4, !tbaa !9
  %646 = load ptr, ptr %35, align 8, !tbaa !5
  %647 = load i32, ptr %11, align 4, !tbaa !9
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds i32, ptr %646, i64 %648
  store i32 -1, ptr %649, align 4, !tbaa !9
  br label %650

650:                                              ; preds = %618
  br label %651

651:                                              ; preds = %650
  br label %652

652:                                              ; preds = %651, %612
  %653 = load ptr, ptr %30, align 8, !tbaa !5
  %654 = load i32, ptr %11, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !9
  store i32 %657, ptr %14, align 4, !tbaa !9
  br label %658

658:                                              ; preds = %1049, %652
  %659 = load i32, ptr %14, align 4, !tbaa !9
  %660 = load ptr, ptr %30, align 8, !tbaa !5
  %661 = load i32, ptr %11, align 4, !tbaa !9
  %662 = add nsw i32 %661, 1
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds i32, ptr %660, i64 %663
  %665 = load i32, ptr %664, align 4, !tbaa !9
  %666 = icmp slt i32 %659, %665
  br i1 %666, label %667, label %1052

667:                                              ; preds = %658
  %668 = load ptr, ptr %31, align 8, !tbaa !5
  %669 = load i32, ptr %14, align 4, !tbaa !9
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds i32, ptr %668, i64 %670
  %672 = load i32, ptr %671, align 4, !tbaa !9
  store i32 %672, ptr %12, align 4, !tbaa !9
  %673 = load ptr, ptr %33, align 8, !tbaa !5
  %674 = load i32, ptr %12, align 4, !tbaa !9
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i32, ptr %673, i64 %675
  %677 = load i32, ptr %676, align 4, !tbaa !9
  store i32 %677, ptr %27, align 4, !tbaa !9
  %678 = load ptr, ptr %7, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.graphdef, ptr %678, i32 0, i32 21
  %680 = load ptr, ptr %679, align 8, !tbaa !34
  %681 = load i32, ptr %12, align 4, !tbaa !9
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds %struct.rinfodef, ptr %680, i64 %682
  store ptr %683, ptr %39, align 8, !tbaa !5
  %684 = load ptr, ptr %39, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.rinfodef, ptr %684, i32 0, i32 3
  %686 = load ptr, ptr %685, align 8, !tbaa !40
  %687 = icmp eq ptr %686, null
  br i1 %687, label %688, label %718

688:                                              ; preds = %667
  %689 = load ptr, ptr %6, 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 3
  %692 = load ptr, ptr %691, align 8, !tbaa !48
  %693 = load ptr, ptr %6, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.controldef, ptr %693, i32 0, i32 11
  %695 = getelementptr inbounds %struct.workspacedef, ptr %694, i32 0, i32 5
  %696 = load i32, ptr %695, align 8, !tbaa !49
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds %struct.edegreedef, ptr %692, i64 %697
  %699 = load ptr, ptr %39, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.rinfodef, ptr %699, i32 0, i32 3
  store ptr %698, ptr %700, align 8, !tbaa !40
  %701 = load ptr, ptr %30, align 8, !tbaa !5
  %702 = load i32, ptr %12, align 4, !tbaa !9
  %703 = add nsw i32 %702, 1
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i32, ptr %701, i64 %704
  %706 = load i32, ptr %705, align 4, !tbaa !9
  %707 = load ptr, ptr %30, align 8, !tbaa !5
  %708 = load i32, ptr %12, align 4, !tbaa !9
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %707, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !9
  %712 = sub nsw i32 %706, %711
  %713 = load ptr, ptr %6, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.controldef, ptr %713, i32 0, i32 11
  %715 = getelementptr inbounds %struct.workspacedef, ptr %714, i32 0, i32 5
  %716 = load i32, ptr %715, align 8, !tbaa !49
  %717 = add nsw i32 %716, %712
  store i32 %717, ptr %715, align 8, !tbaa !49
  br label %718

718:                                              ; preds = %688, %667
  %719 = load ptr, ptr %39, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.rinfodef, ptr %719, i32 0, i32 3
  %721 = load ptr, ptr %720, align 8, !tbaa !40
  store ptr %721, ptr %38, align 8, !tbaa !5
  %722 = load ptr, ptr %39, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.rinfodef, ptr %722, i32 0, i32 1
  %724 = load i32, ptr %723, align 4, !tbaa !35
  %725 = load ptr, ptr %39, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.rinfodef, ptr %725, i32 0, i32 0
  %727 = load i32, ptr %726, align 8, !tbaa !37
  %728 = sub nsw i32 %724, %727
  store i32 %728, ptr %23, align 4, !tbaa !9
  %729 = load i32, ptr %27, align 4, !tbaa !9
  %730 = load i32, ptr %26, align 4, !tbaa !9
  %731 = icmp eq i32 %729, %730
  br i1 %731, label %732, label %781

732:                                              ; preds = %718
  br label %733

733:                                              ; preds = %732
  %734 = load ptr, ptr %32, align 8, !tbaa !5
  %735 = load i32, ptr %14, align 4, !tbaa !9
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds i32, ptr %734, i64 %736
  %738 = load i32, ptr %737, align 4, !tbaa !9
  %739 = load ptr, ptr %39, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.rinfodef, ptr %739, i32 0, i32 1
  %741 = load i32, ptr %740, align 4, !tbaa !35
  %742 = add nsw i32 %741, %738
  store i32 %742, ptr %740, align 4, !tbaa !35
  %743 = load ptr, ptr %32, align 8, !tbaa !5
  %744 = load i32, ptr %14, align 4, !tbaa !9
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds i32, ptr %743, i64 %745
  %747 = load i32, ptr %746, align 4, !tbaa !9
  %748 = load ptr, ptr %39, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.rinfodef, ptr %748, i32 0, i32 0
  %750 = load i32, ptr %749, align 8, !tbaa !37
  %751 = sub nsw i32 %750, %747
  store i32 %751, ptr %749, align 8, !tbaa !37
  br label %752

752:                                              ; preds = %733
  br label %753

753:                                              ; preds = %752
  %754 = load ptr, ptr %39, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.rinfodef, ptr %754, i32 0, i32 1
  %756 = load i32, ptr %755, align 4, !tbaa !35
  %757 = icmp sgt i32 %756, 0
  br i1 %757, label %758, label %780

758:                                              ; preds = %753
  %759 = load ptr, ptr %35, align 8, !tbaa !5
  %760 = load i32, ptr %12, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds i32, ptr %759, i64 %761
  %763 = load i32, ptr %762, align 4, !tbaa !9
  %764 = icmp eq i32 %763, -1
  br i1 %764, label %765, label %780

765:                                              ; preds = %758
  br label %766

766:                                              ; preds = %765
  %767 = load i32, ptr %12, align 4, !tbaa !9
  %768 = load ptr, ptr %36, align 8, !tbaa !5
  %769 = load i32, ptr %21, align 4, !tbaa !9
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds i32, ptr %768, i64 %770
  store i32 %767, ptr %771, align 4, !tbaa !9
  %772 = load i32, ptr %21, align 4, !tbaa !9
  %773 = add nsw i32 %772, 1
  store i32 %773, ptr %21, align 4, !tbaa !9
  %774 = load ptr, ptr %35, align 8, !tbaa !5
  %775 = load i32, ptr %12, align 4, !tbaa !9
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %774, i64 %776
  store i32 %772, ptr %777, align 4, !tbaa !9
  br label %778

778:                                              ; preds = %766
  br label %779

779:                                              ; preds = %778
  br label %780

780:                                              ; preds = %779, %758, %753
  br label %855

781:                                              ; preds = %718
  %782 = load i32, ptr %27, align 4, !tbaa !9
  %783 = load i32, ptr %28, align 4, !tbaa !9
  %784 = icmp eq i32 %782, %783
  br i1 %784, label %785, label %854

785:                                              ; preds = %781
  br label %786

786:                                              ; preds = %785
  %787 = load ptr, ptr %32, align 8, !tbaa !5
  %788 = load i32, ptr %14, align 4, !tbaa !9
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds i32, ptr %787, i64 %789
  %791 = load i32, ptr %790, align 4, !tbaa !9
  %792 = load ptr, ptr %39, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.rinfodef, ptr %792, i32 0, i32 0
  %794 = load i32, ptr %793, align 8, !tbaa !37
  %795 = add nsw i32 %794, %791
  store i32 %795, ptr %793, align 8, !tbaa !37
  %796 = load ptr, ptr %32, align 8, !tbaa !5
  %797 = load i32, ptr %14, align 4, !tbaa !9
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds i32, ptr %796, i64 %798
  %800 = load i32, ptr %799, align 4, !tbaa !9
  %801 = load ptr, ptr %39, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.rinfodef, ptr %801, i32 0, i32 1
  %803 = load i32, ptr %802, align 4, !tbaa !35
  %804 = sub nsw i32 %803, %800
  store i32 %804, ptr %802, align 4, !tbaa !35
  br label %805

805:                                              ; preds = %786
  br label %806

806:                                              ; preds = %805
  %807 = load ptr, ptr %39, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.rinfodef, ptr %807, i32 0, i32 1
  %809 = load i32, ptr %808, align 4, !tbaa !35
  %810 = icmp eq i32 %809, 0
  br i1 %810, label %811, label %853

811:                                              ; preds = %806
  %812 = load ptr, ptr %35, align 8, !tbaa !5
  %813 = load i32, ptr %12, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %812, i64 %814
  %816 = load i32, ptr %815, align 4, !tbaa !9
  %817 = icmp ne i32 %816, -1
  br i1 %817, label %818, label %853

818:                                              ; preds = %811
  br label %819

819:                                              ; preds = %818
  %820 = load ptr, ptr %36, align 8, !tbaa !5
  %821 = load i32, ptr %21, align 4, !tbaa !9
  %822 = add nsw i32 %821, -1
  store i32 %822, ptr %21, align 4, !tbaa !9
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %820, i64 %823
  %825 = load i32, ptr %824, align 4, !tbaa !9
  %826 = load ptr, ptr %36, align 8, !tbaa !5
  %827 = load ptr, ptr %35, align 8, !tbaa !5
  %828 = load i32, ptr %12, align 4, !tbaa !9
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds i32, ptr %827, i64 %829
  %831 = load i32, ptr %830, align 4, !tbaa !9
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds i32, ptr %826, i64 %832
  store i32 %825, ptr %833, align 4, !tbaa !9
  %834 = load ptr, ptr %35, align 8, !tbaa !5
  %835 = load i32, ptr %12, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds i32, ptr %834, i64 %836
  %838 = load i32, ptr %837, align 4, !tbaa !9
  %839 = load ptr, ptr %35, align 8, !tbaa !5
  %840 = load ptr, ptr %36, align 8, !tbaa !5
  %841 = load i32, ptr %21, align 4, !tbaa !9
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds i32, ptr %840, i64 %842
  %844 = load i32, ptr %843, align 4, !tbaa !9
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds i32, ptr %839, i64 %845
  store i32 %838, ptr %846, align 4, !tbaa !9
  %847 = load ptr, ptr %35, align 8, !tbaa !5
  %848 = load i32, ptr %12, align 4, !tbaa !9
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds i32, ptr %847, i64 %849
  store i32 -1, ptr %850, align 4, !tbaa !9
  br label %851

851:                                              ; preds = %819
  br label %852

852:                                              ; preds = %851
  br label %853

853:                                              ; preds = %852, %811, %806
  br label %854

854:                                              ; preds = %853, %781
  br label %855

855:                                              ; preds = %854, %780
  %856 = load i32, ptr %27, align 4, !tbaa !9
  %857 = load i32, ptr %26, align 4, !tbaa !9
  %858 = icmp ne i32 %856, %857
  br i1 %858, label %859, label %919

859:                                              ; preds = %855
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %860

860:                                              ; preds = %915, %859
  %861 = load i32, ptr %16, align 4, !tbaa !9
  %862 = load ptr, ptr %39, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.rinfodef, ptr %862, i32 0, i32 2
  %864 = load i32, ptr %863, align 8, !tbaa !41
  %865 = icmp slt i32 %861, %864
  br i1 %865, label %866, label %918

866:                                              ; preds = %860
  %867 = load ptr, ptr %38, align 8, !tbaa !5
  %868 = load i32, ptr %16, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds %struct.edegreedef, ptr %867, i64 %869
  %871 = getelementptr inbounds %struct.edegreedef, ptr %870, i32 0, i32 0
  %872 = load i32, ptr %871, align 4, !tbaa !42
  %873 = load i32, ptr %26, align 4, !tbaa !9
  %874 = icmp eq i32 %872, %873
  br i1 %874, label %875, label %914

875:                                              ; preds = %866
  %876 = load ptr, ptr %38, align 8, !tbaa !5
  %877 = load i32, ptr %16, align 4, !tbaa !9
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds %struct.edegreedef, ptr %876, i64 %878
  %880 = getelementptr inbounds %struct.edegreedef, ptr %879, i32 0, i32 1
  %881 = load i32, ptr %880, align 4, !tbaa !46
  %882 = load ptr, ptr %32, align 8, !tbaa !5
  %883 = load i32, ptr %14, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds i32, ptr %882, i64 %884
  %886 = load i32, ptr %885, align 4, !tbaa !9
  %887 = icmp eq i32 %881, %886
  br i1 %887, label %888, label %900

888:                                              ; preds = %875
  %889 = load ptr, ptr %38, align 8, !tbaa !5
  %890 = load i32, ptr %16, align 4, !tbaa !9
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds %struct.edegreedef, ptr %889, i64 %891
  %893 = load ptr, ptr %38, align 8, !tbaa !5
  %894 = load ptr, ptr %39, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.rinfodef, ptr %894, i32 0, i32 2
  %896 = load i32, ptr %895, align 8, !tbaa !41
  %897 = add nsw i32 %896, -1
  store i32 %897, ptr %895, align 8, !tbaa !41
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %struct.edegreedef, ptr %893, i64 %898
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %892, ptr align 4 %899, i64 8, i1 false), !tbaa.struct !47
  br label %913

900:                                              ; preds = %875
  %901 = load ptr, ptr %32, align 8, !tbaa !5
  %902 = load i32, ptr %14, align 4, !tbaa !9
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds i32, ptr %901, i64 %903
  %905 = load i32, ptr %904, align 4, !tbaa !9
  %906 = load ptr, ptr %38, align 8, !tbaa !5
  %907 = load i32, ptr %16, align 4, !tbaa !9
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds %struct.edegreedef, ptr %906, i64 %908
  %910 = getelementptr inbounds %struct.edegreedef, ptr %909, i32 0, i32 1
  %911 = load i32, ptr %910, align 4, !tbaa !46
  %912 = sub nsw i32 %911, %905
  store i32 %912, ptr %910, align 4, !tbaa !46
  br label %913

913:                                              ; preds = %900, %888
  br label %918

914:                                              ; preds = %866
  br label %915

915:                                              ; preds = %914
  %916 = load i32, ptr %16, align 4, !tbaa !9
  %917 = add nsw i32 %916, 1
  store i32 %917, ptr %16, align 4, !tbaa !9
  br label %860, !llvm.loop !50

918:                                              ; preds = %913, %860
  br label %919

919:                                              ; preds = %918, %855
  %920 = load i32, ptr %27, align 4, !tbaa !9
  %921 = load i32, ptr %28, align 4, !tbaa !9
  %922 = icmp ne i32 %920, %921
  br i1 %922, label %923, label %985

923:                                              ; preds = %919
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %924

924:                                              ; preds = %953, %923
  %925 = load i32, ptr %16, align 4, !tbaa !9
  %926 = load ptr, ptr %39, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.rinfodef, ptr %926, i32 0, i32 2
  %928 = load i32, ptr %927, align 8, !tbaa !41
  %929 = icmp slt i32 %925, %928
  br i1 %929, label %930, label %956

930:                                              ; preds = %924
  %931 = load ptr, ptr %38, align 8, !tbaa !5
  %932 = load i32, ptr %16, align 4, !tbaa !9
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds %struct.edegreedef, ptr %931, i64 %933
  %935 = getelementptr inbounds %struct.edegreedef, ptr %934, i32 0, i32 0
  %936 = load i32, ptr %935, align 4, !tbaa !42
  %937 = load i32, ptr %28, align 4, !tbaa !9
  %938 = icmp eq i32 %936, %937
  br i1 %938, label %939, label %952

939:                                              ; preds = %930
  %940 = load ptr, ptr %32, align 8, !tbaa !5
  %941 = load i32, ptr %14, align 4, !tbaa !9
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds i32, ptr %940, i64 %942
  %944 = load i32, ptr %943, align 4, !tbaa !9
  %945 = load ptr, ptr %38, align 8, !tbaa !5
  %946 = load i32, ptr %16, align 4, !tbaa !9
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds %struct.edegreedef, ptr %945, i64 %947
  %949 = getelementptr inbounds %struct.edegreedef, ptr %948, i32 0, i32 1
  %950 = load i32, ptr %949, align 4, !tbaa !46
  %951 = add nsw i32 %950, %944
  store i32 %951, ptr %949, align 4, !tbaa !46
  br label %956

952:                                              ; preds = %930
  br label %953

953:                                              ; preds = %952
  %954 = load i32, ptr %16, align 4, !tbaa !9
  %955 = add nsw i32 %954, 1
  store i32 %955, ptr %16, align 4, !tbaa !9
  br label %924, !llvm.loop !51

956:                                              ; preds = %939, %924
  %957 = load i32, ptr %16, align 4, !tbaa !9
  %958 = load ptr, ptr %39, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.rinfodef, ptr %958, i32 0, i32 2
  %960 = load i32, ptr %959, align 8, !tbaa !41
  %961 = icmp eq i32 %957, %960
  br i1 %961, label %962, label %984

962:                                              ; preds = %956
  %963 = load i32, ptr %28, align 4, !tbaa !9
  %964 = load ptr, ptr %38, align 8, !tbaa !5
  %965 = load ptr, ptr %39, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.rinfodef, ptr %965, i32 0, i32 2
  %967 = load i32, ptr %966, align 8, !tbaa !41
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds %struct.edegreedef, ptr %964, i64 %968
  %970 = getelementptr inbounds %struct.edegreedef, ptr %969, i32 0, i32 0
  store i32 %963, ptr %970, align 4, !tbaa !42
  %971 = load ptr, ptr %32, align 8, !tbaa !5
  %972 = load i32, ptr %14, align 4, !tbaa !9
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds i32, ptr %971, i64 %973
  %975 = load i32, ptr %974, align 4, !tbaa !9
  %976 = load ptr, ptr %38, align 8, !tbaa !5
  %977 = load ptr, ptr %39, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.rinfodef, ptr %977, i32 0, i32 2
  %979 = load i32, ptr %978, align 8, !tbaa !41
  %980 = add nsw i32 %979, 1
  store i32 %980, ptr %978, align 8, !tbaa !41
  %981 = sext i32 %979 to i64
  %982 = getelementptr inbounds %struct.edegreedef, ptr %976, i64 %981
  %983 = getelementptr inbounds %struct.edegreedef, ptr %982, i32 0, i32 1
  store i32 %975, ptr %983, align 4, !tbaa !46
  br label %984

984:                                              ; preds = %962, %956
  br label %985

985:                                              ; preds = %984, %919
  %986 = load i32, ptr %27, align 4, !tbaa !9
  %987 = load i32, ptr %28, align 4, !tbaa !9
  %988 = icmp eq i32 %986, %987
  br i1 %988, label %993, label %989

989:                                              ; preds = %985
  %990 = load i32, ptr %27, align 4, !tbaa !9
  %991 = load i32, ptr %26, align 4, !tbaa !9
  %992 = icmp eq i32 %990, %991
  br i1 %992, label %993, label %1048

993:                                              ; preds = %989, %985
  %994 = load ptr, ptr %39, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.rinfodef, ptr %994, i32 0, i32 1
  %996 = load i32, ptr %995, align 4, !tbaa !35
  %997 = load ptr, ptr %39, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.rinfodef, ptr %997, i32 0, i32 0
  %999 = load i32, ptr %998, align 8, !tbaa !37
  %1000 = sub nsw i32 %996, %999
  store i32 %1000, ptr %24, align 4, !tbaa !9
  %1001 = load ptr, ptr %37, align 8, !tbaa !5
  %1002 = load i32, ptr %12, align 4, !tbaa !9
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds i32, ptr %1001, i64 %1003
  %1005 = load i32, ptr %1004, align 4, !tbaa !9
  %1006 = icmp eq i32 %1005, 2
  br i1 %1006, label %1007, label %1026

1007:                                             ; preds = %993
  %1008 = load ptr, ptr %39, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.rinfodef, ptr %1008, i32 0, i32 1
  %1010 = load i32, ptr %1009, align 4, !tbaa !35
  %1011 = icmp sgt i32 %1010, 0
  br i1 %1011, label %1012, label %1017

1012:                                             ; preds = %1007
  %1013 = load i32, ptr %12, align 4, !tbaa !9
  %1014 = load i32, ptr %23, align 4, !tbaa !9
  %1015 = load i32, ptr %24, align 4, !tbaa !9
  %1016 = call i32 @__PQueueUpdate(ptr noundef %40, i32 noundef %1013, i32 noundef %1014, i32 noundef %1015)
  br label %1025

1017:                                             ; preds = %1007
  %1018 = load i32, ptr %12, align 4, !tbaa !9
  %1019 = load i32, ptr %23, align 4, !tbaa !9
  %1020 = call i32 @__PQueueDelete(ptr noundef %40, i32 noundef %1018, i32 noundef %1019)
  %1021 = load ptr, ptr %37, align 8, !tbaa !5
  %1022 = load i32, ptr %12, align 4, !tbaa !9
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds i32, ptr %1021, i64 %1023
  store i32 -1, ptr %1024, align 4, !tbaa !9
  br label %1025

1025:                                             ; preds = %1017, %1012
  br label %1047

1026:                                             ; preds = %993
  %1027 = load ptr, ptr %37, align 8, !tbaa !5
  %1028 = load i32, ptr %12, align 4, !tbaa !9
  %1029 = sext i32 %1028 to i64
  %1030 = getelementptr inbounds i32, ptr %1027, i64 %1029
  %1031 = load i32, ptr %1030, align 4, !tbaa !9
  %1032 = icmp eq i32 %1031, -1
  br i1 %1032, label %1033, label %1046

1033:                                             ; preds = %1026
  %1034 = load ptr, ptr %39, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.rinfodef, ptr %1034, i32 0, i32 1
  %1036 = load i32, ptr %1035, align 4, !tbaa !35
  %1037 = icmp sgt i32 %1036, 0
  br i1 %1037, label %1038, label %1046

1038:                                             ; preds = %1033
  %1039 = load i32, ptr %12, align 4, !tbaa !9
  %1040 = load i32, ptr %24, align 4, !tbaa !9
  %1041 = call i32 @__PQueueInsert(ptr noundef %40, i32 noundef %1039, i32 noundef %1040)
  %1042 = load ptr, ptr %37, align 8, !tbaa !5
  %1043 = load i32, ptr %12, align 4, !tbaa !9
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds i32, ptr %1042, i64 %1044
  store i32 2, ptr %1045, align 4, !tbaa !9
  br label %1046

1046:                                             ; preds = %1038, %1033, %1026
  br label %1047

1047:                                             ; preds = %1046, %1025
  br label %1048

1048:                                             ; preds = %1047, %989
  br label %1049

1049:                                             ; preds = %1048
  %1050 = load i32, ptr %14, align 4, !tbaa !9
  %1051 = add nsw i32 %1050, 1
  store i32 %1051, ptr %14, align 4, !tbaa !9
  br label %658, !llvm.loop !52

1052:                                             ; preds = %658
  %1053 = load i32, ptr %25, align 4, !tbaa !9
  %1054 = add nsw i32 %1053, 1
  store i32 %1054, ptr %25, align 4, !tbaa !9
  br label %277

1055:                                             ; preds = %280
  %1056 = load i32, ptr %21, align 4, !tbaa !9
  %1057 = load ptr, ptr %7, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.graphdef, ptr %1057, i32 0, i32 16
  store i32 %1056, ptr %1058, align 8, !tbaa !31
  %1059 = load ptr, ptr %6, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.controldef, ptr %1059, i32 0, i32 1
  %1061 = load i32, ptr %1060, align 4, !tbaa !27
  %1062 = and i32 %1061, 8
  %1063 = icmp ne i32 %1062, 0
  br i1 %1063, label %1064, label %1111

1064:                                             ; preds = %1055
  %1065 = load ptr, ptr %41, align 8, !tbaa !5
  %1066 = load i32, ptr %20, align 4, !tbaa !9
  %1067 = load i32, ptr %8, align 4, !tbaa !9
  %1068 = mul nsw i32 %1066, %1067
  %1069 = load ptr, ptr %41, align 8, !tbaa !5
  %1070 = call i32 @__samin(i32 noundef %1068, ptr noundef %1069)
  %1071 = sext i32 %1070 to i64
  %1072 = getelementptr inbounds float, ptr %1065, i64 %1071
  %1073 = load float, ptr %1072, align 4, !tbaa !21
  %1074 = fpext float %1073 to double
  %1075 = load ptr, ptr %41, align 8, !tbaa !5
  %1076 = load i32, ptr %20, align 4, !tbaa !9
  %1077 = load i32, ptr %8, align 4, !tbaa !9
  %1078 = mul nsw i32 %1076, %1077
  %1079 = load ptr, ptr %41, align 8, !tbaa !5
  %1080 = call i32 @__samax(i32 noundef %1078, ptr noundef %1079)
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds float, ptr %1075, i64 %1081
  %1083 = load float, ptr %1082, align 4, !tbaa !21
  %1084 = fpext float %1083 to double
  %1085 = load i32, ptr %21, align 4, !tbaa !9
  %1086 = load i32, ptr %25, align 4, !tbaa !9
  %1087 = load ptr, ptr %7, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct.graphdef, ptr %1087, i32 0, i32 12
  %1089 = load i32, ptr %1088, align 8, !tbaa !32
  %1090 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %1074, double noundef %1084, i32 noundef %1085, i32 noundef %1086, i32 noundef %1089)
  %1091 = load i32, ptr %20, align 4, !tbaa !9
  %1092 = load i32, ptr %8, align 4, !tbaa !9
  %1093 = load ptr, ptr %41, align 8, !tbaa !5
  %1094 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  call void @__ComputeHKWayLoadImbalance(i32 noundef %1091, i32 noundef %1092, ptr noundef %1093, ptr noundef %1094)
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %1095

1095:                                             ; preds = %1106, %1064
  %1096 = load i32, ptr %11, align 4, !tbaa !9
  %1097 = load i32, ptr %20, align 4, !tbaa !9
  %1098 = icmp slt i32 %1096, %1097
  br i1 %1098, label %1099, label %1109

1099:                                             ; preds = %1095
  %1100 = load i32, ptr %11, align 4, !tbaa !9
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %1101
  %1103 = load float, ptr %1102, align 4, !tbaa !21
  %1104 = fpext float %1103 to double
  %1105 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %1104)
  br label %1106

1106:                                             ; preds = %1099
  %1107 = load i32, ptr %11, align 4, !tbaa !9
  %1108 = add nsw i32 %1107, 1
  store i32 %1108, ptr %11, align 4, !tbaa !9
  br label %1095, !llvm.loop !53

1109:                                             ; preds = %1095
  %1110 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  br label %1111

1111:                                             ; preds = %1109, %1055
  %1112 = load i32, ptr %25, align 4, !tbaa !9
  %1113 = icmp eq i32 %1112, 0
  br i1 %1113, label %1114, label %1115

1114:                                             ; preds = %1111
  br label %1119

1115:                                             ; preds = %1111
  br label %1116

1116:                                             ; preds = %1115
  %1117 = load i32, ptr %18, align 4, !tbaa !9
  %1118 = add nsw i32 %1117, 1
  store i32 %1118, ptr %18, align 4, !tbaa !9
  br label %212, !llvm.loop !54

1119:                                             ; preds = %1114, %223, %212
  %1120 = load ptr, ptr %6, align 8, !tbaa !5
  call void @__PQueueFree(ptr noundef %1120, ptr noundef %40)
  %1121 = load ptr, ptr %6, align 8, !tbaa !5
  %1122 = load i32, ptr %20, align 4, !tbaa !9
  %1123 = load i32, ptr %8, align 4, !tbaa !9
  %1124 = mul nsw i32 %1122, %1123
  call void @fwspacefree(ptr noundef %1121, i32 noundef %1124)
  %1125 = load ptr, ptr %6, align 8, !tbaa !5
  %1126 = load i32, ptr %20, align 4, !tbaa !9
  %1127 = load i32, ptr %8, align 4, !tbaa !9
  %1128 = mul nsw i32 %1126, %1127
  call void @fwspacefree(ptr noundef %1125, i32 noundef %1128)
  %1129 = load ptr, ptr %6, align 8, !tbaa !5
  %1130 = load i32, ptr %19, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1129, i32 noundef %1130)
  %1131 = load ptr, ptr %6, align 8, !tbaa !5
  %1132 = load i32, ptr %19, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1131, i32 noundef %1132)
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  ret void
}

declare void @__PQueueInit(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

declare i32 @__idxamax(i32 noundef, ptr noundef) #1

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

declare void @__PQueueReset(ptr noundef) #1

declare ptr @__idxset(i32 noundef, i32 noundef, ptr noundef) #1

declare i32 @__PQueueInsert(ptr noundef, i32 noundef, i32 noundef) #1

declare i32 @__PQueueGetMax(ptr noundef) #1

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

declare i32 @__PQueueUpdate(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare i32 @__PQueueDelete(ptr noundef, i32 noundef, i32 noundef) #1

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

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

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

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

@.str = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1

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

declare ptr @__fwspacemalloc(ptr noundef, i32 noundef) local_unnamed_addr #1

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

declare ptr @__idxwspacemalloc(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

declare i32 @__samin(i32 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @__samax(i32 noundef, ptr noundef) local_unnamed_addr #1

declare void @__RandomPermute(i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

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

declare void @__saxpy(i32 noundef, float noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

declare void @__idxwspacefree(ptr noundef, i32 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 @__MCGreedy_KWayEdgeBalanceHorizontal(ptr noundef %0, ptr nocapture noundef %1, i32 noundef %2, ptr noundef %3, i32 noundef %4) local_unnamed_addr #2 {
  %6 = alloca %struct.PQueueType, align 8
  %7 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #4
  %8 = getelementptr inbounds i8, ptr %1, i64 16
  %9 = load i32, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 176
  %11 = load i32, ptr %10, align 8, !tbaa !11
  %12 = getelementptr inbounds i8, ptr %1, i64 24
  %13 = load ptr, ptr %12, align 8, !tbaa !12
  %14 = getelementptr inbounds i8, ptr %1, i64 48
  %15 = load ptr, ptr %14, align 8, !tbaa !13
  %16 = getelementptr inbounds i8, ptr %1, i64 56
  %17 = load ptr, ptr %16, align 8, !tbaa !14
  %18 = getelementptr inbounds i8, ptr %1, i64 128
  %19 = load ptr, ptr %18, align 8, !tbaa !15
  %20 = getelementptr inbounds i8, ptr %1, i64 120
  %21 = load ptr, ptr %20, align 8, !tbaa !16
  %22 = getelementptr inbounds i8, ptr %1, i64 96
  %23 = load ptr, ptr %22, align 8, !tbaa !17
  %24 = getelementptr inbounds i8, ptr %1, i64 192
  %25 = load ptr, ptr %24, align 8, !tbaa !18
  %26 = mul nsw i32 %11, %2
  %27 = tail call ptr @__fwspacemalloc(ptr noundef %0, i32 noundef %26) #4
  %28 = tail call ptr @__fwspacemalloc(ptr noundef %0, i32 noundef %26) #4
  %29 = icmp sgt i32 %2, 0
  br i1 %29, label %.preheader449.lr.ph, label %._crit_edge476

.preheader449.lr.ph:                              ; preds = %5
  %30 = icmp sgt i32 %11, 0
  %31 = uitofp nneg i32 %2 to float
  br i1 %30, label %.preheader449.us.preheader, label %._crit_edge476

.preheader449.us.preheader:                       ; preds = %.preheader449.lr.ph
  %32 = zext nneg i32 %11 to i64
  %wide.trip.count561 = zext nneg i32 %2 to i64
  %33 = mul nuw nsw i64 %32, %wide.trip.count561
  %34 = shl nuw i64 %33, 2
  %scevgep = getelementptr i8, ptr %28, i64 %34
  %scevgep656 = getelementptr i8, ptr %27, i64 %34
  %35 = shl nuw nsw i64 %32, 2
  %scevgep657 = getelementptr i8, ptr %3, i64 %35
  %min.iters.check = icmp ult i32 %11, 4
  %bound0 = icmp ult ptr %28, %scevgep656
  %bound1 = icmp ult ptr %27, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0658 = icmp ult ptr %28, %scevgep657
  %bound1659 = icmp ugt ptr %scevgep, %3
  %found.conflict660 = and i1 %bound0658, %bound1659
  %conflict.rdx = or i1 %found.conflict, %found.conflict660
  %bound0661 = icmp ult ptr %27, %scevgep657
  %bound1662 = icmp ugt ptr %scevgep656, %3
  %found.conflict663 = and i1 %bound0661, %bound1662
  %conflict.rdx664 = or i1 %conflict.rdx, %found.conflict663
  %n.vec = and i64 %32, 2147483644
  %broadcast.splatinsert = insertelement <4 x float> poison, float %31, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %n.vec, %32
  %xtraiter = and i64 %32, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %36 = add nsw i64 %32, -1
  br label %.preheader449.us

.preheader449.us:                                 ; preds = %.preheader449.us.preheader, %._crit_edge.us
  %indvars.iv558 = phi i64 [ 0, %.preheader449.us.preheader ], [ %indvars.iv.next559, %._crit_edge.us ]
  %37 = mul nuw nsw i64 %indvars.iv558, %32
  %brmerge = select i1 %min.iters.check, i1 true, i1 %conflict.rdx664
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

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

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

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

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %46 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.ph
  %47 = load float, ptr %46, align 4, !tbaa !19
  %48 = fdiv float %47, %31
  %49 = add nuw nsw i64 %indvars.iv.ph, %37
  %50 = getelementptr inbounds float, ptr %28, i64 %49
  store float %48, ptr %50, align 4, !tbaa !19
  %51 = load float, ptr %46, align 4, !tbaa !19
  %52 = fmul float %51, %31
  %53 = fdiv float 1.000000e+00, %52
  %54 = getelementptr inbounds float, ptr %27, i64 %49
  store float %53, ptr %54, align 4, !tbaa !19
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %55 = icmp eq i64 %indvars.iv.ph, %36
  br i1 %55, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %56 = getelementptr inbounds float, ptr %3, i64 %indvars.iv
  %57 = load float, ptr %56, align 4, !tbaa !19
  %58 = fdiv float %57, %31
  %59 = add nuw nsw i64 %indvars.iv, %37
  %60 = getelementptr inbounds float, ptr %28, i64 %59
  store float %58, ptr %60, align 4, !tbaa !19
  %61 = load float, ptr %56, align 4, !tbaa !19
  %62 = fmul float %61, %31
  %63 = fdiv float 1.000000e+00, %62
  %64 = getelementptr inbounds float, ptr %27, i64 %59
  store float %63, ptr %64, align 4, !tbaa !19
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %65 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.next
  %66 = load float, ptr %65, align 4, !tbaa !19
  %67 = fdiv float %66, %31
  %68 = add nuw nsw i64 %indvars.iv.next, %37
  %69 = getelementptr inbounds float, ptr %28, i64 %68
  store float %67, ptr %69, align 4, !tbaa !19
  %70 = load float, ptr %65, align 4, !tbaa !19
  %71 = fmul float %70, %31
  %72 = fdiv float 1.000000e+00, %71
  %73 = getelementptr inbounds float, ptr %27, i64 %68
  store float %72, ptr %73, align 4, !tbaa !19
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %32
  br i1 %exitcond.not.1, label %._crit_edge.us, label %scalar.ph, !llvm.loop !33

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next559 = add nuw nsw i64 %indvars.iv558, 1
  %exitcond562.not = icmp eq i64 %indvars.iv.next559, %wide.trip.count561
  br i1 %exitcond562.not, label %._crit_edge476, label %.preheader449.us, !llvm.loop !34

._crit_edge476:                                   ; preds = %._crit_edge.us, %.preheader449.lr.ph, %5
  %74 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %9) #4
  %75 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %9) #4
  %76 = getelementptr inbounds i8, ptr %1, i64 64
  %77 = load ptr, ptr %76, align 8, !tbaa !35
  %78 = tail call i32 @__idxamax(i32 noundef %9, ptr noundef %77) #4
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %77, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !36
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %6, i32 noundef %9, i32 noundef %81) #4
  %82 = getelementptr inbounds i8, ptr %0, i64 4
  %83 = load i32, ptr %82, align 4, !tbaa !37
  %84 = and i32 %83, 8
  %.not = icmp eq i32 %84, 0
  br i1 %.not, label %108, label %85

85:                                               ; preds = %._crit_edge476
  %86 = call i32 @__samin(i32 noundef %26, ptr noundef %25) #4
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds float, ptr %25, i64 %87
  %89 = load float, ptr %88, align 4, !tbaa !19
  %90 = fpext float %89 to double
  %91 = call i32 @__samax(i32 noundef %26, ptr noundef %25) #4
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds float, ptr %25, i64 %92
  %94 = load float, ptr %93, align 4, !tbaa !19
  %95 = fpext float %94 to double
  %96 = load i32, ptr %8, align 8, !tbaa !5
  %97 = getelementptr inbounds i8, ptr %1, i64 112
  %98 = load i32, ptr %97, align 8, !tbaa !41
  %99 = getelementptr inbounds i8, ptr %1, i64 88
  %100 = load i32, ptr %99, align 8, !tbaa !42
  %101 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, double noundef %90, double noundef %95, i32 noundef %96, i32 noundef %98, i32 noundef %100)
  call void @__ComputeHKWayLoadImbalance(i32 noundef %11, i32 noundef %2, ptr noundef %25, ptr noundef nonnull %7)
  %102 = icmp sgt i32 %11, 0
  br i1 %102, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %85
  %wide.trip.count566 = zext nneg i32 %11 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv563 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next564, %.lr.ph ]
  %103 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv563
  %104 = load float, ptr %103, align 4, !tbaa !19
  %105 = fpext float %104 to double
  %106 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %105)
  %indvars.iv.next564 = add nuw nsw i64 %indvars.iv563, 1
  %exitcond567.not = icmp eq i64 %indvars.iv.next564, %wide.trip.count566
  br i1 %exitcond567.not, label %._crit_edge, label %.lr.ph, !llvm.loop !43

._crit_edge:                                      ; preds = %.lr.ph, %85
  %107 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %108

108:                                              ; preds = %._crit_edge, %._crit_edge476
  %109 = icmp sgt i32 %4, 0
  br i1 %109, label %.lr.ph527, label %._crit_edge528

.lr.ph527:                                        ; preds = %108
  %110 = getelementptr inbounds i8, ptr %1, i64 88
  %111 = getelementptr inbounds i8, ptr %1, i64 112
  %112 = getelementptr inbounds i8, ptr %1, i64 152
  %113 = getelementptr inbounds i8, ptr %1, i64 184
  %114 = getelementptr inbounds i8, ptr %0, i64 64
  %115 = getelementptr inbounds i8, ptr %0, i64 80
  %116 = icmp sgt i32 %11, 0
  %wide.trip.count597 = zext nneg i32 %11 to i64
  br label %117

117:                                              ; preds = %409, %.lr.ph527
  %.0403525 = phi i32 [ 0, %.lr.ph527 ], [ %411, %409 ]
  %118 = call i32 @__MocIsHBalanced(i32 noundef %11, i32 noundef %2, ptr noundef %25, ptr noundef %3)
  %.not424 = icmp eq i32 %118, 0
  br i1 %.not424, label %119, label %._crit_edge528

119:                                              ; preds = %117
  call void @__PQueueReset(ptr noundef nonnull %6) #4
  %120 = call ptr @__idxset(i32 noundef %9, i32 noundef -1, ptr noundef %75) #4
  %121 = load i32, ptr %111, align 8, !tbaa !41
  call void @__RandomPermute(i32 noundef %121, ptr noundef %74, i32 noundef 1) #4
  %122 = icmp sgt i32 %121, 0
  br i1 %122, label %.lr.ph480.preheader, label %.preheader448

.lr.ph480.preheader:                              ; preds = %119
  %wide.trip.count571 = zext nneg i32 %121 to i64
  br label %.lr.ph480

.preheader448:                                    ; preds = %.lr.ph480, %119
  %123 = call i32 @__PQueueGetMax(ptr noundef nonnull %6) #4
  %124 = icmp eq i32 %123, -1
  br i1 %124, label %.outer._crit_edge, label %.lr.ph496

.lr.ph480:                                        ; preds = %.lr.ph480.preheader, %.lr.ph480
  %indvars.iv568 = phi i64 [ 0, %.lr.ph480.preheader ], [ %indvars.iv.next569, %.lr.ph480 ]
  %125 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv568
  %126 = load i32, ptr %125, align 4, !tbaa !36
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i32, ptr %19, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !36
  %130 = load ptr, ptr %112, align 8, !tbaa !44
  %131 = sext i32 %129 to i64
  %132 = getelementptr inbounds %struct.rinfodef, ptr %130, i64 %131
  %133 = getelementptr inbounds i8, ptr %132, i64 4
  %134 = load i32, ptr %133, align 4, !tbaa !45
  %135 = load i32, ptr %132, align 8, !tbaa !47
  %136 = sub nsw i32 %134, %135
  %137 = call i32 @__PQueueInsert(ptr noundef nonnull %6, i32 noundef %129, i32 noundef %136) #4
  %138 = getelementptr inbounds i32, ptr %75, i64 %131
  store i32 2, ptr %138, align 4, !tbaa !36
  %indvars.iv.next569 = add nuw nsw i64 %indvars.iv568, 1
  %exitcond572.not = icmp eq i64 %indvars.iv.next569, %wide.trip.count571
  br i1 %exitcond572.not, label %.preheader448, label %.lr.ph480, !llvm.loop !48

139:                                              ; preds = %.lr.ph496, %.backedge
  %140 = phi i32 [ %388, %.lr.ph496 ], [ %156, %.backedge ]
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds i32, ptr %75, i64 %141
  store i32 1, ptr %142, align 4, !tbaa !36
  %143 = load ptr, ptr %112, align 8, !tbaa !44
  %144 = getelementptr inbounds %struct.rinfodef, ptr %143, i64 %141
  %145 = getelementptr inbounds i32, ptr %23, i64 %141
  %146 = load i32, ptr %145, align 4, !tbaa !36
  %147 = load ptr, ptr %113, align 8, !tbaa !49
  %148 = mul nsw i32 %140, %11
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds float, ptr %147, i64 %149
  %151 = mul nsw i32 %146, %11
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds float, ptr %25, i64 %152
  %154 = getelementptr inbounds float, ptr %27, i64 %152
  %155 = call i32 @__AreAllHVwgtsBelow(i32 noundef %11, float noundef 1.000000e+00, ptr noundef %153, float noundef -1.000000e+00, ptr noundef %150, ptr noundef %154)
  %.not425 = icmp eq i32 %155, 0
  br i1 %.not425, label %158, label %.backedge

.backedge:                                        ; preds = %170, %139, %._crit_edge484, %select.unfold, %204
  %156 = call i32 @__PQueueGetMax(ptr noundef nonnull %6) #4
  %157 = icmp eq i32 %156, -1
  br i1 %157, label %.outer._crit_edge, label %139

158:                                              ; preds = %139
  %159 = getelementptr inbounds i8, ptr %144, i64 16
  %160 = load ptr, ptr %159, align 8, !tbaa !50
  %161 = getelementptr inbounds i8, ptr %144, i64 8
  %162 = load i32, ptr %161, align 8, !tbaa !51
  %163 = icmp sgt i32 %162, 0
  br i1 %163, label %.lr.ph483.preheader, label %._crit_edge484

.lr.ph483.preheader:                              ; preds = %158
  %wide.trip.count576 = zext nneg i32 %162 to i64
  br label %.lr.ph483

.lr.ph483:                                        ; preds = %.lr.ph483.preheader, %170
  %indvars.iv573 = phi i64 [ 0, %.lr.ph483.preheader ], [ %indvars.iv.next574, %170 ]
  %164 = getelementptr inbounds %struct.edegreedef, ptr %160, i64 %indvars.iv573
  %165 = load i32, ptr %164, align 4, !tbaa !52
  %166 = mul nsw i32 %165, %11
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds float, ptr %25, i64 %167
  %169 = call i32 @__IsHBalanceBetterFT(i32 noundef %11, i32 noundef %2, ptr noundef %153, ptr noundef %168, ptr noundef %150, ptr noundef %3)
  %.not426 = icmp eq i32 %169, 0
  br i1 %.not426, label %170, label %._crit_edge484.loopexit

170:                                              ; preds = %.lr.ph483
  %indvars.iv.next574 = add nuw nsw i64 %indvars.iv573, 1
  %exitcond577.not = icmp eq i64 %indvars.iv.next574, %wide.trip.count576
  br i1 %exitcond577.not, label %.backedge, label %.lr.ph483, !llvm.loop !54

._crit_edge484.loopexit:                          ; preds = %.lr.ph483
  %171 = trunc nuw nsw i64 %indvars.iv573 to i32
  br label %._crit_edge484

._crit_edge484:                                   ; preds = %._crit_edge484.loopexit, %158
  %.0398.lcssa = phi i32 [ 0, %158 ], [ %171, %._crit_edge484.loopexit ]
  %172 = icmp eq i32 %.0398.lcssa, %162
  br i1 %172, label %.backedge, label %.preheader447

.preheader447:                                    ; preds = %._crit_edge484
  %.1396487 = add nuw nsw i32 %.0398.lcssa, 1
  %173 = icmp slt i32 %.1396487, %162
  br i1 %173, label %.lr.ph490.preheader, label %._crit_edge491

.lr.ph490.preheader:                              ; preds = %.preheader447
  %174 = zext i32 %.1396487 to i64
  br label %.lr.ph490

.lr.ph490:                                        ; preds = %.lr.ph490.preheader, %.lr.ph490
  %indvars.iv578 = phi i64 [ %174, %.lr.ph490.preheader ], [ %indvars.iv.next579, %.lr.ph490 ]
  %.1399488 = phi i32 [ %.0398.lcssa, %.lr.ph490.preheader ], [ %spec.select, %.lr.ph490 ]
  %175 = getelementptr inbounds %struct.edegreedef, ptr %160, i64 %indvars.iv578
  %176 = load i32, ptr %175, align 4, !tbaa !52
  %177 = sext i32 %.1399488 to i64
  %178 = getelementptr inbounds %struct.edegreedef, ptr %160, i64 %177
  %179 = load i32, ptr %178, align 4, !tbaa !52
  %180 = mul nsw i32 %179, %11
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds float, ptr %25, i64 %181
  %183 = mul nsw i32 %176, %11
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds float, ptr %25, i64 %184
  %186 = call i32 @__IsHBalanceBetterTT(i32 noundef %11, i32 noundef %2, ptr noundef %182, ptr noundef %185, ptr noundef %150, ptr noundef %3)
  %.not435 = icmp eq i32 %186, 0
  %187 = trunc nuw i64 %indvars.iv578 to i32
  %spec.select = select i1 %.not435, i32 %.1399488, i32 %187
  %indvars.iv.next579 = add nuw nsw i64 %indvars.iv578, 1
  %188 = trunc nuw i64 %indvars.iv.next579 to i32
  %189 = icmp sgt i32 %162, %188
  br i1 %189, label %.lr.ph490, label %._crit_edge491, !llvm.loop !55

._crit_edge491:                                   ; preds = %.lr.ph490, %.preheader447
  %.1399.lcssa = phi i32 [ %.0398.lcssa, %.preheader447 ], [ %spec.select, %.lr.ph490 ]
  %190 = sext i32 %.1399.lcssa to i64
  %191 = getelementptr inbounds %struct.edegreedef, ptr %160, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !52
  %193 = getelementptr inbounds float, ptr %28, i64 %152
  %194 = call i32 @__AreAllHVwgtsBelow(i32 noundef %11, float noundef 1.000000e+00, ptr noundef %153, float noundef 0.000000e+00, ptr noundef %150, ptr noundef %193)
  %.not427 = icmp eq i32 %194, 0
  %spec.select437 = zext i1 %.not427 to i32
  %195 = getelementptr inbounds i8, ptr %191, i64 4
  %196 = load i32, ptr %195, align 4, !tbaa !56
  %197 = load i32, ptr %144, align 8, !tbaa !47
  %.not428 = icmp slt i32 %196, %197
  %198 = select i1 %.not427, i32 2, i32 1
  %.3 = select i1 %.not428, i32 %spec.select437, i32 %198
  %199 = mul nsw i32 %192, %11
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds float, ptr %25, i64 %200
  %202 = getelementptr inbounds float, ptr %27, i64 %200
  %203 = call i32 @__AreAllHVwgtsAbove(i32 noundef %11, float noundef 1.000000e+00, ptr noundef %201, float noundef 0.000000e+00, ptr noundef %150, ptr noundef %202)
  %.not429 = icmp eq i32 %203, 0
  br i1 %.not429, label %204, label %select.unfold

204:                                              ; preds = %._crit_edge491
  %205 = getelementptr inbounds float, ptr %28, i64 %200
  %206 = call i32 @__AreAllHVwgtsBelow(i32 noundef %11, float noundef 1.000000e+00, ptr noundef %201, float noundef 1.000000e+00, ptr noundef %150, ptr noundef %205)
  %.not430 = icmp eq i32 %206, 0
  %207 = icmp eq i32 %.3, 0
  %or.cond = select i1 %.not430, i1 %207, i1 false
  br i1 %or.cond, label %.backedge, label %.thread

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

.thread:                                          ; preds = %204, %select.unfold
  %208 = getelementptr inbounds i32, ptr %23, i64 %141
  %209 = getelementptr inbounds i8, ptr %144, i64 8
  %210 = getelementptr inbounds i8, ptr %191, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !56
  %212 = load i32, ptr %144, align 8, !tbaa !47
  %.neg = sub i32 %212, %211
  %213 = load i32, ptr %110, align 8, !tbaa !42
  %214 = add i32 %.neg, %213
  store i32 %214, ptr %110, align 8, !tbaa !42
  %215 = load i32, ptr %82, align 4, !tbaa !37
  %216 = and i32 %215, 32
  %.not431 = icmp eq i32 %216, 0
  br i1 %.not431, label %220, label %217

217:                                              ; preds = %.thread
  %218 = sub nsw i32 %211, %212
  %219 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %140, i32 noundef %192, i32 noundef %218, i32 noundef %214)
  br label %220

220:                                              ; preds = %217, %.thread
  call void @__saxpy(i32 noundef %11, float noundef 1.000000e+00, ptr noundef %150, i32 noundef 1, ptr noundef %201, i32 noundef 1) #4
  call void @__saxpy(i32 noundef %11, float noundef -1.000000e+00, ptr noundef %150, i32 noundef 1, ptr noundef %153, i32 noundef 1) #4
  store i32 %192, ptr %208, align 4, !tbaa !36
  %221 = load i32, ptr %144, align 8, !tbaa !47
  %222 = load i32, ptr %210, align 4, !tbaa !56
  %223 = sub i32 %221, %222
  %224 = getelementptr inbounds i8, ptr %144, i64 4
  %225 = load i32, ptr %224, align 4, !tbaa !45
  %226 = add nsw i32 %223, %225
  store i32 %226, ptr %224, align 4, !tbaa !45
  store i32 %222, ptr %144, align 8, !tbaa !47
  store i32 %221, ptr %210, align 4, !tbaa !56
  %227 = icmp eq i32 %221, 0
  br i1 %227, label %228, label %234

228:                                              ; preds = %220
  %229 = load i32, ptr %209, align 8, !tbaa !51
  %230 = add nsw i32 %229, -1
  store i32 %230, ptr %209, align 8, !tbaa !51
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.edegreedef, ptr %160, i64 %231
  %233 = load i64, ptr %232, align 4
  store i64 %233, ptr %191, align 4
  %.pre = load i32, ptr %224, align 4, !tbaa !45
  br label %235

234:                                              ; preds = %220
  store i32 %146, ptr %191, align 4, !tbaa !52
  br label %235

235:                                              ; preds = %234, %228
  %236 = phi i32 [ %226, %234 ], [ %.pre, %228 ]
  %237 = icmp eq i32 %236, 0
  br i1 %237, label %238, label %250

238:                                              ; preds = %235
  %239 = add nsw i32 %.0404.ph518, -1
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %19, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !36
  %243 = getelementptr inbounds i32, ptr %21, i64 %141
  %244 = load i32, ptr %243, align 4, !tbaa !36
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %19, i64 %245
  store i32 %242, ptr %246, align 4, !tbaa !36
  %247 = load i32, ptr %243, align 4, !tbaa !36
  %248 = sext i32 %242 to i64
  %249 = getelementptr inbounds i32, ptr %21, i64 %248
  store i32 %247, ptr %249, align 4, !tbaa !36
  store i32 -1, ptr %243, align 4, !tbaa !36
  br label %250

250:                                              ; preds = %238, %235
  %.1405 = phi i32 [ %239, %238 ], [ %.0404.ph518, %235 ]
  %251 = getelementptr inbounds i32, ptr %13, i64 %141
  %252 = load i32, ptr %251, align 4, !tbaa !36
  %253 = getelementptr i8, ptr %251, i64 4
  %254 = load i32, ptr %253, align 4, !tbaa !36
  %255 = icmp slt i32 %252, %254
  br i1 %255, label %.lr.ph514.preheader, label %.outer

.lr.ph514.preheader:                              ; preds = %250
  %256 = sext i32 %252 to i64
  br label %.lr.ph514

.lr.ph514:                                        ; preds = %.lr.ph514.preheader, %381
  %indvars.iv591 = phi i64 [ %256, %.lr.ph514.preheader ], [ %indvars.iv.next592, %381 ]
  %.2406511 = phi i32 [ %.1405, %.lr.ph514.preheader ], [ %.3407442, %381 ]
  %257 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv591
  %258 = load i32, ptr %257, align 4, !tbaa !36
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds i32, ptr %23, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !36
  %262 = load ptr, ptr %112, align 8, !tbaa !44
  %263 = getelementptr inbounds %struct.rinfodef, ptr %262, i64 %259
  %264 = getelementptr inbounds i8, ptr %263, i64 16
  %265 = load ptr, ptr %264, align 8, !tbaa !50
  %266 = icmp eq ptr %265, null
  br i1 %266, label %267, label %278

267:                                              ; preds = %.lr.ph514
  %268 = load ptr, ptr %114, align 8, !tbaa !57
  %269 = load i32, ptr %115, align 8, !tbaa !58
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds %struct.edegreedef, ptr %268, i64 %270
  store ptr %271, ptr %264, align 8, !tbaa !50
  %272 = getelementptr i32, ptr %13, i64 %259
  %273 = getelementptr i8, ptr %272, i64 4
  %274 = load i32, ptr %273, align 4, !tbaa !36
  %275 = load i32, ptr %272, align 4, !tbaa !36
  %276 = add i32 %274, %269
  %277 = sub i32 %276, %275
  store i32 %277, ptr %115, align 8, !tbaa !58
  br label %278

278:                                              ; preds = %267, %.lr.ph514
  %279 = phi ptr [ %271, %267 ], [ %265, %.lr.ph514 ]
  %280 = getelementptr inbounds i8, ptr %263, i64 4
  %281 = load i32, ptr %280, align 4, !tbaa !45
  %282 = load i32, ptr %263, align 8, !tbaa !47
  %283 = sub nsw i32 %281, %282
  %284 = icmp eq i32 %261, %146
  br i1 %284, label %285, label %300

285:                                              ; preds = %278
  %286 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv591
  %287 = load i32, ptr %286, align 4, !tbaa !36
  %288 = add nsw i32 %287, %281
  store i32 %288, ptr %280, align 4, !tbaa !45
  %289 = load i32, ptr %286, align 4, !tbaa !36
  %290 = sub nsw i32 %282, %289
  store i32 %290, ptr %263, align 8, !tbaa !47
  %291 = icmp sgt i32 %288, 0
  br i1 %291, label %292, label %.thread440

292:                                              ; preds = %285
  %293 = getelementptr inbounds i32, ptr %21, i64 %259
  %294 = load i32, ptr %293, align 4, !tbaa !36
  %295 = icmp eq i32 %294, -1
  br i1 %295, label %296, label %.thread440

296:                                              ; preds = %292
  %297 = sext i32 %.2406511 to i64
  %298 = getelementptr inbounds i32, ptr %19, i64 %297
  store i32 %258, ptr %298, align 4, !tbaa !36
  %299 = add nsw i32 %.2406511, 1
  store i32 %.2406511, ptr %293, align 4, !tbaa !36
  br label %.thread440

300:                                              ; preds = %278
  %301 = icmp eq i32 %261, %192
  br i1 %301, label %302, label %322

302:                                              ; preds = %300
  %303 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv591
  %304 = load i32, ptr %303, align 4, !tbaa !36
  %305 = add nsw i32 %304, %282
  store i32 %305, ptr %263, align 8, !tbaa !47
  %306 = load i32, ptr %303, align 4, !tbaa !36
  %307 = sub nsw i32 %281, %306
  store i32 %307, ptr %280, align 4, !tbaa !45
  %308 = icmp eq i32 %281, %306
  br i1 %308, label %309, label %322

309:                                              ; preds = %302
  %310 = getelementptr inbounds i32, ptr %21, i64 %259
  %311 = load i32, ptr %310, align 4, !tbaa !36
  %.not432 = icmp eq i32 %311, -1
  br i1 %.not432, label %322, label %312

312:                                              ; preds = %309
  %313 = add nsw i32 %.2406511, -1
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds i32, ptr %19, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !36
  %317 = sext i32 %311 to i64
  %318 = getelementptr inbounds i32, ptr %19, i64 %317
  store i32 %316, ptr %318, align 4, !tbaa !36
  %319 = load i32, ptr %310, align 4, !tbaa !36
  %320 = sext i32 %316 to i64
  %321 = getelementptr inbounds i32, ptr %21, i64 %320
  store i32 %319, ptr %321, align 4, !tbaa !36
  store i32 -1, ptr %310, align 4, !tbaa !36
  br label %322

322:                                              ; preds = %300, %312, %309, %302
  %.3407 = phi i32 [ %313, %312 ], [ %.2406511, %309 ], [ %.2406511, %302 ], [ %.2406511, %300 ]
  %323 = getelementptr inbounds i8, ptr %263, i64 8
  %324 = load i32, ptr %323, align 8, !tbaa !51
  %325 = icmp sgt i32 %324, 0
  br i1 %325, label %.lr.ph505.preheader, label %.thread440

.lr.ph505.preheader:                              ; preds = %322
  %wide.trip.count584 = zext nneg i32 %324 to i64
  br label %.lr.ph505

326:                                              ; preds = %.lr.ph505
  %indvars.iv.next582 = add nuw nsw i64 %indvars.iv581, 1
  %exitcond585.not = icmp eq i64 %indvars.iv.next582, %wide.trip.count584
  br i1 %exitcond585.not, label %.thread440, label %.lr.ph505, !llvm.loop !59

.lr.ph505:                                        ; preds = %.lr.ph505.preheader, %326
  %indvars.iv581 = phi i64 [ 0, %.lr.ph505.preheader ], [ %indvars.iv.next582, %326 ]
  %327 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %indvars.iv581
  %328 = load i32, ptr %327, align 4, !tbaa !52
  %329 = icmp eq i32 %328, %146
  br i1 %329, label %330, label %326

330:                                              ; preds = %.lr.ph505
  %331 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %indvars.iv581
  %332 = getelementptr inbounds i8, ptr %331, i64 4
  %333 = load i32, ptr %332, align 4, !tbaa !56
  %334 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv591
  %335 = load i32, ptr %334, align 4, !tbaa !36
  %336 = icmp eq i32 %333, %335
  br i1 %336, label %337, label %342

337:                                              ; preds = %330
  %338 = add nsw i32 %324, -1
  store i32 %338, ptr %323, align 8, !tbaa !51
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %339
  %341 = load i64, ptr %340, align 4
  store i64 %341, ptr %331, align 4
  br label %.thread440

342:                                              ; preds = %330
  %343 = sub nsw i32 %333, %335
  store i32 %343, ptr %332, align 4, !tbaa !56
  br label %.thread440

.thread440:                                       ; preds = %326, %322, %296, %292, %285, %342, %337
  %.3407442 = phi i32 [ %.3407, %342 ], [ %.3407, %337 ], [ %.2406511, %285 ], [ %.2406511, %292 ], [ %299, %296 ], [ %.3407, %322 ], [ %.3407, %326 ]
  %.not434 = icmp eq i32 %261, %192
  br i1 %.not434, label %.thread443, label %.preheader

.preheader:                                       ; preds = %.thread440
  %344 = getelementptr inbounds i8, ptr %263, i64 8
  %345 = load i32, ptr %344, align 8, !tbaa !51
  %346 = icmp sgt i32 %345, 0
  br i1 %346, label %.lr.ph508.preheader, label %.loopexit

.lr.ph508.preheader:                              ; preds = %.preheader
  %wide.trip.count589 = zext nneg i32 %345 to i64
  br label %.lr.ph508

.lr.ph508:                                        ; preds = %.lr.ph508.preheader, %357
  %indvars.iv586 = phi i64 [ 0, %.lr.ph508.preheader ], [ %indvars.iv.next587, %357 ]
  %347 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %indvars.iv586
  %348 = load i32, ptr %347, align 4, !tbaa !52
  %349 = icmp eq i32 %348, %192
  br i1 %349, label %350, label %357

350:                                              ; preds = %.lr.ph508
  %351 = trunc nuw nsw i64 %indvars.iv586 to i32
  %352 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv591
  %353 = load i32, ptr %352, align 4, !tbaa !36
  %354 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %indvars.iv586, i32 1
  %355 = load i32, ptr %354, align 4, !tbaa !56
  %356 = add nsw i32 %355, %353
  store i32 %356, ptr %354, align 4, !tbaa !56
  br label %.loopexit

357:                                              ; preds = %.lr.ph508
  %indvars.iv.next587 = add nuw nsw i64 %indvars.iv586, 1
  %exitcond590.not = icmp eq i64 %indvars.iv.next587, %wide.trip.count589
  br i1 %exitcond590.not, label %.loopexit.thread, label %.lr.ph508, !llvm.loop !60

.loopexit:                                        ; preds = %.preheader, %350
  %.4402472 = phi i32 [ %351, %350 ], [ 0, %.preheader ]
  %358 = icmp eq i32 %.4402472, %345
  br i1 %358, label %.loopexit.thread, label %365

.loopexit.thread:                                 ; preds = %357, %.loopexit
  %359 = sext i32 %345 to i64
  %360 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %359
  store i32 %192, ptr %360, align 4, !tbaa !52
  %361 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv591
  %362 = load i32, ptr %361, align 4, !tbaa !36
  %363 = add nsw i32 %345, 1
  store i32 %363, ptr %344, align 8, !tbaa !51
  %364 = getelementptr inbounds %struct.edegreedef, ptr %279, i64 %359, i32 1
  store i32 %362, ptr %364, align 4, !tbaa !56
  br label %365

365:                                              ; preds = %.loopexit, %.loopexit.thread
  br i1 %284, label %.thread443, label %381

.thread443:                                       ; preds = %.thread440, %365
  %366 = load i32, ptr %280, align 4, !tbaa !45
  %367 = load i32, ptr %263, align 8, !tbaa !47
  %368 = sub nsw i32 %366, %367
  %369 = getelementptr inbounds i32, ptr %75, i64 %259
  %370 = load i32, ptr %369, align 4, !tbaa !36
  switch i32 %370, label %381 [
    i32 2, label %371
    i32 -1, label %377
  ]

371:                                              ; preds = %.thread443
  %372 = icmp sgt i32 %366, 0
  br i1 %372, label %373, label %375

373:                                              ; preds = %371
  %374 = call i32 @__PQueueUpdate(ptr noundef nonnull %6, i32 noundef %258, i32 noundef %283, i32 noundef %368) #4
  br label %381

375:                                              ; preds = %371
  %376 = call i32 @__PQueueDelete(ptr noundef nonnull %6, i32 noundef %258, i32 noundef %283) #4
  store i32 -1, ptr %369, align 4, !tbaa !36
  br label %381

377:                                              ; preds = %.thread443
  %378 = icmp sgt i32 %366, 0
  br i1 %378, label %379, label %381

379:                                              ; preds = %377
  %380 = call i32 @__PQueueInsert(ptr noundef nonnull %6, i32 noundef %258, i32 noundef %368) #4
  store i32 2, ptr %369, align 4, !tbaa !36
  br label %381

381:                                              ; preds = %.thread443, %365, %377, %379, %373, %375
  %indvars.iv.next592 = add nsw i64 %indvars.iv591, 1
  %382 = load i32, ptr %253, align 4, !tbaa !36
  %383 = sext i32 %382 to i64
  %384 = icmp slt i64 %indvars.iv.next592, %383
  br i1 %384, label %.lr.ph514, label %.outer, !llvm.loop !61

.outer:                                           ; preds = %381, %250
  %.2406.lcssa = phi i32 [ %.1405, %250 ], [ %.3407442, %381 ]
  %385 = add nuw nsw i32 %.0408.ph517, 1
  %386 = call i32 @__PQueueGetMax(ptr noundef nonnull %6) #4
  %387 = icmp eq i32 %386, -1
  br i1 %387, label %.outer._crit_edge, label %.lr.ph496

.lr.ph496:                                        ; preds = %.preheader448, %.outer
  %388 = phi i32 [ %386, %.outer ], [ %123, %.preheader448 ]
  %.0404.ph518 = phi i32 [ %.2406.lcssa, %.outer ], [ %121, %.preheader448 ]
  %.0408.ph517 = phi i32 [ %385, %.outer ], [ 0, %.preheader448 ]
  br label %139

.outer._crit_edge:                                ; preds = %.outer, %.backedge, %.preheader448
  %.0408.ph.lcssa = phi i32 [ 0, %.preheader448 ], [ %.0408.ph517, %.backedge ], [ %385, %.outer ]
  %.0404.ph.lcssa = phi i32 [ %121, %.preheader448 ], [ %.0404.ph518, %.backedge ], [ %.2406.lcssa, %.outer ]
  store i32 %.0404.ph.lcssa, ptr %111, align 8, !tbaa !41
  %389 = load i32, ptr %82, align 4, !tbaa !37
  %390 = and i32 %389, 8
  %.not436 = icmp eq i32 %390, 0
  br i1 %.not436, label %409, label %391

391:                                              ; preds = %.outer._crit_edge
  %392 = call i32 @__samin(i32 noundef %26, ptr noundef %25) #4
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds float, ptr %25, i64 %393
  %395 = load float, ptr %394, align 4, !tbaa !19
  %396 = fpext float %395 to double
  %397 = call i32 @__samax(i32 noundef %26, ptr noundef %25) #4
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds float, ptr %25, i64 %398
  %400 = load float, ptr %399, align 4, !tbaa !19
  %401 = fpext float %400 to double
  %402 = load i32, ptr %110, align 8, !tbaa !42
  %403 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %396, double noundef %401, i32 noundef %.0404.ph.lcssa, i32 noundef %.0408.ph.lcssa, i32 noundef %402)
  call void @__ComputeHKWayLoadImbalance(i32 noundef %11, i32 noundef %2, ptr noundef %25, ptr noundef nonnull %7)
  br i1 %116, label %.lr.ph523, label %._crit_edge524

.lr.ph523:                                        ; preds = %391, %.lr.ph523
  %indvars.iv594 = phi i64 [ %indvars.iv.next595, %.lr.ph523 ], [ 0, %391 ]
  %404 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv594
  %405 = load float, ptr %404, align 4, !tbaa !19
  %406 = fpext float %405 to double
  %407 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %406)
  %indvars.iv.next595 = add nuw nsw i64 %indvars.iv594, 1
  %exitcond598.not = icmp eq i64 %indvars.iv.next595, %wide.trip.count597
  br i1 %exitcond598.not, label %._crit_edge524, label %.lr.ph523, !llvm.loop !62

._crit_edge524:                                   ; preds = %.lr.ph523, %391
  %408 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %409

409:                                              ; preds = %._crit_edge524, %.outer._crit_edge
  %410 = icmp eq i32 %.0408.ph.lcssa, 0
  %411 = add nuw nsw i32 %.0403525, 1
  %exitcond599.not = icmp eq i32 %411, %4
  %or.cond633 = select i1 %410, i1 true, i1 %exitcond599.not
  br i1 %or.cond633, label %._crit_edge528, label %117, !llvm.loop !63

._crit_edge528:                                   ; preds = %117, %409, %108
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %6) #4
  call void @fwspacefree(ptr noundef %0, i32 noundef %26) #4
  call void @fwspacefree(ptr noundef %0, i32 noundef %26) #4
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %9) #4
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %9) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #4
  ret void
}

declare void @__PQueueInit(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @__idxamax(i32 noundef, ptr noundef) local_unnamed_addr #1

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

declare void @__PQueueReset(ptr noundef) local_unnamed_addr #1

declare ptr @__idxset(i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @__PQueueInsert(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @__PQueueGetMax(ptr noundef) local_unnamed_addr #1

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

declare i32 @__PQueueUpdate(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @__PQueueDelete(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree nounwind "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, !10, i64 16}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 104, !10, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !10, i64 176, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !10, i64 176}
!12 = !{!6, !7, i64 24}
!13 = !{!6, !7, i64 48}
!14 = !{!6, !7, i64 56}
!15 = !{!6, !7, i64 128}
!16 = !{!6, !7, i64 120}
!17 = !{!6, !7, i64 96}
!18 = !{!6, !7, i64 192}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !8, i64 0}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = !{!25}
!25 = distinct !{!25, !23}
!26 = !{!27, !22}
!27 = distinct !{!27, !23}
!28 = !{!27}
!29 = distinct !{!29, !30, !31, !32}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.isvectorized", i32 1}
!32 = !{!"llvm.loop.unroll.runtime.disable"}
!33 = distinct !{!33, !30, !31}
!34 = distinct !{!34, !30}
!35 = !{!6, !7, i64 64}
!36 = !{!10, !10, i64 0}
!37 = !{!38, !10, i64 4}
!38 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !20, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !39, i64 48, !40, i64 104, !40, i64 112, !40, i64 120, !40, i64 128, !40, i64 136, !40, i64 144, !40, i64 152, !40, i64 160, !40, i64 168, !40, i64 176, !40, i64 184, !40, i64 192, !40, i64 200, !40, i64 208, !40, i64 216, !40, i64 224}
!39 = !{!"workspacedef", !7, i64 0, !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 24, !10, i64 32, !7, i64 40, !7, i64 48}
!40 = !{!"double", !8, i64 0}
!41 = !{!6, !10, i64 112}
!42 = !{!6, !10, i64 88}
!43 = distinct !{!43, !30}
!44 = !{!6, !7, i64 152}
!45 = !{!46, !10, i64 4}
!46 = !{!"rinfodef", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16}
!47 = !{!46, !10, i64 0}
!48 = distinct !{!48, !30}
!49 = !{!6, !7, i64 184}
!50 = !{!46, !7, i64 16}
!51 = !{!46, !10, i64 8}
!52 = !{!53, !10, i64 0}
!53 = !{!"edegreedef", !10, i64 0, !10, i64 4}
!54 = distinct !{!54, !30}
!55 = distinct !{!55, !30}
!56 = !{!53, !10, i64 4}
!57 = !{!38, !7, i64 64}
!58 = !{!38, !10, i64 80}
!59 = distinct !{!59, !30}
!60 = distinct !{!60, !30}
!61 = distinct !{!61, !30}
!62 = distinct !{!62, !30}
!63 = distinct !{!63, !30}


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