; LLVM IR from siconos/siconos :: externals/lbl/metis4/minitpart2.ll_ (MocInit2WayBalance2)

; 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 }

@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [34 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 i32 @printf(ptr noundef, ...) #1

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

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

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

97:                                               ; preds = %4
  %98 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  store i32 0, ptr %13, align 4, !tbaa !12
  br label %99

99:                                               ; preds = %119, %97
  %100 = load i32, ptr %13, align 4, !tbaa !12
  %101 = load i32, ptr %17, align 4, !tbaa !12
  %102 = icmp slt i32 %100, %101
  br i1 %102, label %103, label %122

103:                                              ; preds = %99
  %104 = load ptr, ptr %38, align 8, !tbaa !5
  %105 = load i32, ptr %13, align 4, !tbaa !12
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds float, ptr %104, i64 %106
  %108 = load float, ptr %107, align 4, !tbaa !29
  %109 = fpext float %108 to double
  %110 = load ptr, ptr %38, align 8, !tbaa !5
  %111 = load i32, ptr %17, align 4, !tbaa !12
  %112 = load i32, ptr %13, align 4, !tbaa !12
  %113 = add nsw i32 %111, %112
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds float, ptr %110, i64 %114
  %116 = load float, ptr %115, align 4, !tbaa !29
  %117 = fpext float %116 to double
  %118 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %109, double noundef %117)
  br label %119

119:                                              ; preds = %103
  %120 = load i32, ptr %13, align 4, !tbaa !12
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %13, align 4, !tbaa !12
  br label %99, !llvm.loop !30

122:                                              ; preds = %99
  %123 = load ptr, ptr %7, align 8, !tbaa !5
  %124 = getelementptr inbounds float, ptr %123, i64 0
  %125 = load float, ptr %124, align 4, !tbaa !29
  %126 = fpext float %125 to double
  %127 = load ptr, ptr %7, align 8, !tbaa !5
  %128 = getelementptr inbounds float, ptr %127, i64 1
  %129 = load float, ptr %128, align 4, !tbaa !29
  %130 = fpext float %129 to double
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.graphdef, ptr %131, i32 0, i32 2
  %133 = load i32, ptr %132, align 8, !tbaa !9
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.graphdef, ptr %134, i32 0, i32 16
  %136 = load i32, ptr %135, align 8, !tbaa !32
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.graphdef, ptr %137, i32 0, i32 12
  %139 = load i32, ptr %138, align 8, !tbaa !33
  %140 = load i32, ptr %17, align 4, !tbaa !12
  %141 = load ptr, ptr %38, align 8, !tbaa !5
  %142 = load ptr, ptr %7, align 8, !tbaa !5
  %143 = call float @__ComputeLoadImbalance(i32 noundef %140, i32 noundef 2, ptr noundef %141, ptr noundef %142)
  %144 = fpext float %143 to double
  %145 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %126, double noundef %130, i32 noundef %133, i32 noundef %136, i32 noundef %139, double noundef %144)
  br label %146

146:                                              ; preds = %122, %4
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %147

147:                                              ; preds = %164, %146
  %148 = load i32, ptr %9, align 4, !tbaa !12
  %149 = load i32, ptr %17, align 4, !tbaa !12
  %150 = icmp slt i32 %148, %149
  br i1 %150, label %151, label %167

151:                                              ; preds = %147
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = load i32, ptr %9, align 4, !tbaa !12
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %154
  %156 = getelementptr inbounds [2 x %struct.PQueueType], ptr %155, i64 0, i64 0
  %157 = load i32, ptr %15, align 4, !tbaa !12
  call void @__PQueueInit(ptr noundef %152, ptr noundef %156, i32 noundef %157, i32 noundef 501)
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = load i32, ptr %9, align 4, !tbaa !12
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %160
  %162 = getelementptr inbounds [2 x %struct.PQueueType], ptr %161, i64 0, i64 1
  %163 = load i32, ptr %15, align 4, !tbaa !12
  call void @__PQueueInit(ptr noundef %158, ptr noundef %162, i32 noundef %163, i32 noundef 501)
  br label %164

164:                                              ; preds = %151
  %165 = load i32, ptr %9, align 4, !tbaa !12
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %9, align 4, !tbaa !12
  br label %147, !llvm.loop !34

167:                                              ; preds = %147
  %168 = load i32, ptr %15, align 4, !tbaa !12
  %169 = load ptr, ptr %34, align 8, !tbaa !5
  %170 = call ptr @__idxset(i32 noundef %168, i32 noundef -1, ptr noundef %169)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %171

171:                                              ; preds = %188, %167
  %172 = load i32, ptr %9, align 4, !tbaa !12
  %173 = load i32, ptr %15, align 4, !tbaa !12
  %174 = icmp slt i32 %172, %173
  br i1 %174, label %175, label %191

175:                                              ; preds = %171
  %176 = load i32, ptr %17, align 4, !tbaa !12
  %177 = load ptr, ptr %37, align 8, !tbaa !5
  %178 = load i32, ptr %9, align 4, !tbaa !12
  %179 = load i32, ptr %17, align 4, !tbaa !12
  %180 = mul nsw i32 %178, %179
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds float, ptr %177, i64 %181
  %183 = call i32 @__samax(i32 noundef %176, ptr noundef %182)
  %184 = load ptr, ptr %36, align 8, !tbaa !5
  %185 = load i32, ptr %9, align 4, !tbaa !12
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i32, ptr %184, i64 %186
  store i32 %183, ptr %187, align 4, !tbaa !12
  br label %188

188:                                              ; preds = %175
  %189 = load i32, ptr %9, align 4, !tbaa !12
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %9, align 4, !tbaa !12
  br label %171, !llvm.loop !35

191:                                              ; preds = %171
  %192 = load i32, ptr %15, align 4, !tbaa !12
  %193 = load ptr, ptr %35, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %192, ptr noundef %193, i32 noundef 1)
  store i32 0, ptr %10, align 4, !tbaa !12
  br label %194

194:                                              ; preds = %264, %191
  %195 = load i32, ptr %10, align 4, !tbaa !12
  %196 = load i32, ptr %15, align 4, !tbaa !12
  %197 = icmp slt i32 %195, %196
  br i1 %197, label %198, label %267

198:                                              ; preds = %194
  %199 = load ptr, ptr %35, align 8, !tbaa !5
  %200 = load i32, ptr %10, align 4, !tbaa !12
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i32, ptr %199, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !12
  store i32 %203, ptr %9, align 4, !tbaa !12
  %204 = load ptr, ptr %29, align 8, !tbaa !5
  %205 = load i32, ptr %9, align 4, !tbaa !12
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds i32, ptr %204, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !12
  %209 = load i32, ptr %19, align 4, !tbaa !12
  %210 = icmp eq i32 %208, %209
  br i1 %210, label %211, label %263

211:                                              ; preds = %198
  %212 = load ptr, ptr %31, align 8, !tbaa !5
  %213 = load i32, ptr %9, align 4, !tbaa !12
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds i32, ptr %212, i64 %214
  %216 = load i32, ptr %215, align 4, !tbaa !12
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %218, label %240

218:                                              ; preds = %211
  %219 = load ptr, ptr %36, align 8, !tbaa !5
  %220 = load i32, ptr %9, align 4, !tbaa !12
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds i32, ptr %219, i64 %221
  %223 = load i32, ptr %222, align 4, !tbaa !12
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %224
  %226 = getelementptr inbounds [2 x %struct.PQueueType], ptr %225, i64 0, i64 0
  %227 = load i32, ptr %9, align 4, !tbaa !12
  %228 = load ptr, ptr %31, align 8, !tbaa !5
  %229 = load i32, ptr %9, align 4, !tbaa !12
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i32, ptr %228, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !12
  %233 = load ptr, ptr %30, align 8, !tbaa !5
  %234 = load i32, ptr %9, align 4, !tbaa !12
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %233, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !12
  %238 = sub nsw i32 %232, %237
  %239 = call i32 @__PQueueInsert(ptr noundef %226, i32 noundef %227, i32 noundef %238)
  br label %262

240:                                              ; preds = %211
  %241 = load ptr, ptr %36, align 8, !tbaa !5
  %242 = load i32, ptr %9, align 4, !tbaa !12
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds i32, ptr %241, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !12
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %246
  %248 = getelementptr inbounds [2 x %struct.PQueueType], ptr %247, i64 0, i64 1
  %249 = load i32, ptr %9, align 4, !tbaa !12
  %250 = load ptr, ptr %31, align 8, !tbaa !5
  %251 = load i32, ptr %9, align 4, !tbaa !12
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %250, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !12
  %255 = load ptr, ptr %30, align 8, !tbaa !5
  %256 = load i32, ptr %9, align 4, !tbaa !12
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %255, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !12
  %260 = sub nsw i32 %254, %259
  %261 = call i32 @__PQueueInsert(ptr noundef %248, i32 noundef %249, i32 noundef %260)
  br label %262

262:                                              ; preds = %240, %218
  br label %263

263:                                              ; preds = %262, %198
  br label %264

264:                                              ; preds = %263
  %265 = load i32, ptr %10, align 4, !tbaa !12
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %10, align 4, !tbaa !12
  br label %194, !llvm.loop !36

267:                                              ; preds = %194
  store i32 0, ptr %25, align 4, !tbaa !12
  store i32 1, ptr %9, align 4, !tbaa !12
  br label %268

268:                                              ; preds = %290, %267
  %269 = load i32, ptr %9, align 4, !tbaa !12
  %270 = load i32, ptr %17, align 4, !tbaa !12
  %271 = icmp slt i32 %269, %270
  br i1 %271, label %272, label %293

272:                                              ; preds = %268
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = load i32, ptr %9, align 4, !tbaa !12
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds float, ptr %273, i64 %275
  %277 = load float, ptr %276, align 4, !tbaa !29
  %278 = load ptr, ptr %8, align 8, !tbaa !5
  %279 = load i32, ptr %25, align 4, !tbaa !12
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds float, ptr %278, i64 %280
  %282 = load float, ptr %281, align 4, !tbaa !29
  %283 = fcmp olt float %277, %282
  br i1 %283, label %284, label %286

284:                                              ; preds = %272
  %285 = load i32, ptr %9, align 4, !tbaa !12
  br label %288

286:                                              ; preds = %272
  %287 = load i32, ptr %25, align 4, !tbaa !12
  br label %288

288:                                              ; preds = %286, %284
  %289 = phi i32 [ %285, %284 ], [ %287, %286 ]
  store i32 %289, ptr %25, align 4, !tbaa !12
  br label %290

290:                                              ; preds = %288
  %291 = load i32, ptr %9, align 4, !tbaa !12
  %292 = add nsw i32 %291, 1
  store i32 %292, ptr %9, align 4, !tbaa !12
  br label %268, !llvm.loop !37

293:                                              ; preds = %268
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = load i32, ptr %25, align 4, !tbaa !12
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds float, ptr %294, i64 %296
  %298 = load float, ptr %297, align 4, !tbaa !29
  %299 = fpext float %298 to double
  %300 = fdiv double 5.000000e-01, %299
  %301 = fptrunc double %300 to float
  store float %301, ptr %39, align 4, !tbaa !29
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.graphdef, ptr %302, i32 0, i32 12
  %304 = load i32, ptr %303, align 8, !tbaa !33
  store i32 %304, ptr %43, align 4, !tbaa !12
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.graphdef, ptr %305, i32 0, i32 16
  %307 = load i32, ptr %306, align 8, !tbaa !32
  store i32 %307, ptr %16, align 4, !tbaa !12
  store i32 0, ptr %18, align 4, !tbaa !12
  br label %308

308:                                              ; preds = %831, %293
  %309 = load i32, ptr %18, align 4, !tbaa !12
  %310 = load i32, ptr %15, align 4, !tbaa !12
  %311 = icmp slt i32 %309, %310
  br i1 %311, label %312, label %834

312:                                              ; preds = %308
  %313 = load ptr, ptr %38, align 8, !tbaa !5
  %314 = load i32, ptr %20, align 4, !tbaa !12
  %315 = load i32, ptr %17, align 4, !tbaa !12
  %316 = mul nsw i32 %314, %315
  %317 = load i32, ptr %25, align 4, !tbaa !12
  %318 = add nsw i32 %316, %317
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds float, ptr %313, i64 %319
  %321 = load float, ptr %320, align 4, !tbaa !29
  %322 = load float, ptr %39, align 4, !tbaa !29
  %323 = fcmp ogt float %321, %322
  br i1 %323, label %324, label %325

324:                                              ; preds = %312
  br label %834

325:                                              ; preds = %312
  %326 = load i32, ptr %17, align 4, !tbaa !12
  %327 = load ptr, ptr %38, align 8, !tbaa !5
  %328 = load i32, ptr %20, align 4, !tbaa !12
  %329 = load i32, ptr %17, align 4, !tbaa !12
  %330 = mul nsw i32 %328, %329
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds float, ptr %327, i64 %331
  %333 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 0
  %334 = load ptr, ptr %8, align 8, !tbaa !5
  %335 = call i32 @__SelectQueueOneWay2(i32 noundef %326, ptr noundef %332, ptr noundef %333, ptr noundef %334)
  store i32 %335, ptr %23, align 4, !tbaa !12
  %336 = icmp eq i32 %335, -1
  br i1 %336, label %337, label %338

337:                                              ; preds = %325
  br label %834

338:                                              ; preds = %325
  %339 = load i32, ptr %23, align 4, !tbaa !12
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %340
  %342 = getelementptr inbounds [2 x %struct.PQueueType], ptr %341, i64 0, i64 0
  %343 = call i32 @__PQueueGetMax(ptr noundef %342)
  store i32 %343, ptr %41, align 4, !tbaa !12
  %344 = icmp eq i32 %343, -1
  br i1 %344, label %345, label %351

345:                                              ; preds = %338
  %346 = load i32, ptr %23, align 4, !tbaa !12
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %347
  %349 = getelementptr inbounds [2 x %struct.PQueueType], ptr %348, i64 0, i64 1
  %350 = call i32 @__PQueueGetMax(ptr noundef %349)
  store i32 %350, ptr %41, align 4, !tbaa !12
  br label %351

351:                                              ; preds = %345, %338
  %352 = load ptr, ptr %31, align 8, !tbaa !5
  %353 = load i32, ptr %41, align 4, !tbaa !12
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %352, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !12
  %357 = load ptr, ptr %30, align 8, !tbaa !5
  %358 = load i32, ptr %41, align 4, !tbaa !12
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i32, ptr %357, i64 %359
  %361 = load i32, ptr %360, align 4, !tbaa !12
  %362 = sub nsw i32 %356, %361
  %363 = load i32, ptr %43, align 4, !tbaa !12
  %364 = sub nsw i32 %363, %362
  store i32 %364, ptr %43, align 4, !tbaa !12
  %365 = load i32, ptr %17, align 4, !tbaa !12
  %366 = load ptr, ptr %37, align 8, !tbaa !5
  %367 = load i32, ptr %41, align 4, !tbaa !12
  %368 = load i32, ptr %17, align 4, !tbaa !12
  %369 = mul nsw i32 %367, %368
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds float, ptr %366, i64 %370
  %372 = load ptr, ptr %38, align 8, !tbaa !5
  %373 = load i32, ptr %20, align 4, !tbaa !12
  %374 = load i32, ptr %17, align 4, !tbaa !12
  %375 = mul nsw i32 %373, %374
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds float, ptr %372, i64 %376
  call void @__saxpy(i32 noundef %365, float noundef 1.000000e+00, ptr noundef %371, i32 noundef 1, ptr noundef %377, i32 noundef 1)
  %378 = load i32, ptr %17, align 4, !tbaa !12
  %379 = load ptr, ptr %37, align 8, !tbaa !5
  %380 = load i32, ptr %41, align 4, !tbaa !12
  %381 = load i32, ptr %17, align 4, !tbaa !12
  %382 = mul nsw i32 %380, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds float, ptr %379, i64 %383
  %385 = load ptr, ptr %38, align 8, !tbaa !5
  %386 = load i32, ptr %19, align 4, !tbaa !12
  %387 = load i32, ptr %17, align 4, !tbaa !12
  %388 = mul nsw i32 %386, %387
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds float, ptr %385, i64 %389
  call void @__saxpy(i32 noundef %378, float noundef -1.000000e+00, ptr noundef %384, i32 noundef 1, ptr noundef %390, i32 noundef 1)
  %391 = load i32, ptr %20, align 4, !tbaa !12
  %392 = load ptr, ptr %29, align 8, !tbaa !5
  %393 = load i32, ptr %41, align 4, !tbaa !12
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %392, i64 %394
  store i32 %391, ptr %395, align 4, !tbaa !12
  %396 = load i32, ptr %18, align 4, !tbaa !12
  %397 = load ptr, ptr %34, align 8, !tbaa !5
  %398 = load i32, ptr %41, align 4, !tbaa !12
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  store i32 %396, ptr %400, align 4, !tbaa !12
  %401 = load ptr, ptr %5, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.controldef, ptr %401, i32 0, i32 1
  %403 = load i32, ptr %402, align 4, !tbaa !24
  %404 = and i32 %403, 32
  %405 = icmp ne i32 %404, 0
  br i1 %405, label %406, label %469

406:                                              ; preds = %351
  %407 = load i32, ptr %41, align 4, !tbaa !12
  %408 = load i32, ptr %19, align 4, !tbaa !12
  %409 = load i32, ptr %23, align 4, !tbaa !12
  %410 = load ptr, ptr %31, align 8, !tbaa !5
  %411 = load i32, ptr %41, align 4, !tbaa !12
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds i32, ptr %410, i64 %412
  %414 = load i32, ptr %413, align 4, !tbaa !12
  %415 = load ptr, ptr %30, align 8, !tbaa !5
  %416 = load i32, ptr %41, align 4, !tbaa !12
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i32, ptr %415, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !12
  %420 = sub nsw i32 %414, %419
  %421 = load i32, ptr %43, align 4, !tbaa !12
  %422 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef %407, i32 noundef %408, i32 noundef %409, i32 noundef %420, i32 noundef %421)
  store i32 0, ptr %13, align 4, !tbaa !12
  br label %423

423:                                              ; preds = %443, %406
  %424 = load i32, ptr %13, align 4, !tbaa !12
  %425 = load i32, ptr %17, align 4, !tbaa !12
  %426 = icmp slt i32 %424, %425
  br i1 %426, label %427, label %446

427:                                              ; preds = %423
  %428 = load ptr, ptr %38, align 8, !tbaa !5
  %429 = load i32, ptr %13, align 4, !tbaa !12
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds float, ptr %428, i64 %430
  %432 = load float, ptr %431, align 4, !tbaa !29
  %433 = fpext float %432 to double
  %434 = load ptr, ptr %38, align 8, !tbaa !5
  %435 = load i32, ptr %17, align 4, !tbaa !12
  %436 = load i32, ptr %13, align 4, !tbaa !12
  %437 = add nsw i32 %435, %436
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds float, ptr %434, i64 %438
  %440 = load float, ptr %439, align 4, !tbaa !29
  %441 = fpext float %440 to double
  %442 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %433, double noundef %441)
  br label %443

443:                                              ; preds = %427
  %444 = load i32, ptr %13, align 4, !tbaa !12
  %445 = add nsw i32 %444, 1
  store i32 %445, ptr %13, align 4, !tbaa !12
  br label %423, !llvm.loop !38

446:                                              ; preds = %423
  %447 = load i32, ptr %17, align 4, !tbaa !12
  %448 = load ptr, ptr %38, align 8, !tbaa !5
  %449 = load ptr, ptr %7, align 8, !tbaa !5
  %450 = call float @__ComputeLoadImbalance(i32 noundef %447, i32 noundef 2, ptr noundef %448, ptr noundef %449)
  %451 = fpext float %450 to double
  %452 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %451)
  %453 = load ptr, ptr %31, align 8, !tbaa !5
  %454 = load i32, ptr %41, align 4, !tbaa !12
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i32, ptr %453, i64 %455
  %457 = load i32, ptr %456, align 4, !tbaa !12
  %458 = icmp eq i32 %457, 0
  br i1 %458, label %459, label %468

459:                                              ; preds = %446
  %460 = load ptr, ptr %30, align 8, !tbaa !5
  %461 = load i32, ptr %41, align 4, !tbaa !12
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %460, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !12
  %465 = icmp sgt i32 %464, 0
  br i1 %465, label %466, label %468

466:                                              ; preds = %459
  %467 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  br label %468

468:                                              ; preds = %466, %459, %446
  br label %469

469:                                              ; preds = %468, %351
  br label %470

470:                                              ; preds = %469
  %471 = load ptr, ptr %30, align 8, !tbaa !5
  %472 = load i32, ptr %41, align 4, !tbaa !12
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds i32, ptr %471, i64 %473
  %475 = load i32, ptr %474, align 4, !tbaa !12
  store i32 %475, ptr %24, align 4, !tbaa !12
  %476 = load ptr, ptr %31, align 8, !tbaa !5
  %477 = load i32, ptr %41, align 4, !tbaa !12
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %476, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !12
  %481 = load ptr, ptr %30, align 8, !tbaa !5
  %482 = load i32, ptr %41, align 4, !tbaa !12
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %481, i64 %483
  store i32 %480, ptr %484, align 4, !tbaa !12
  %485 = load i32, ptr %24, align 4, !tbaa !12
  %486 = load ptr, ptr %31, align 8, !tbaa !5
  %487 = load i32, ptr %41, align 4, !tbaa !12
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i32, ptr %486, i64 %488
  store i32 %485, ptr %489, align 4, !tbaa !12
  br label %490

490:                                              ; preds = %470
  br label %491

491:                                              ; preds = %490
  %492 = load ptr, ptr %31, align 8, !tbaa !5
  %493 = load i32, ptr %41, align 4, !tbaa !12
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds i32, ptr %492, i64 %494
  %496 = load i32, ptr %495, align 4, !tbaa !12
  %497 = icmp eq i32 %496, 0
  br i1 %497, label %498, label %553

498:                                              ; preds = %491
  %499 = load ptr, ptr %32, align 8, !tbaa !5
  %500 = load i32, ptr %41, align 4, !tbaa !12
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i32, ptr %499, i64 %501
  %503 = load i32, ptr %502, align 4, !tbaa !12
  %504 = icmp ne i32 %503, -1
  br i1 %504, label %505, label %553

505:                                              ; preds = %498
  %506 = load ptr, ptr %26, align 8, !tbaa !5
  %507 = load i32, ptr %41, align 4, !tbaa !12
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds i32, ptr %506, i64 %508
  %510 = load i32, ptr %509, align 4, !tbaa !12
  %511 = load ptr, ptr %26, align 8, !tbaa !5
  %512 = load i32, ptr %41, align 4, !tbaa !12
  %513 = add nsw i32 %512, 1
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds i32, ptr %511, i64 %514
  %516 = load i32, ptr %515, align 4, !tbaa !12
  %517 = icmp slt i32 %510, %516
  br i1 %517, label %518, label %553

518:                                              ; preds = %505
  br label %519

519:                                              ; preds = %518
  %520 = load ptr, ptr %33, align 8, !tbaa !5
  %521 = load i32, ptr %16, align 4, !tbaa !12
  %522 = add nsw i32 %521, -1
  store i32 %522, ptr %16, align 4, !tbaa !12
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds i32, ptr %520, i64 %523
  %525 = load i32, ptr %524, align 4, !tbaa !12
  %526 = load ptr, ptr %33, align 8, !tbaa !5
  %527 = load ptr, ptr %32, align 8, !tbaa !5
  %528 = load i32, ptr %41, align 4, !tbaa !12
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %527, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !12
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i32, ptr %526, i64 %532
  store i32 %525, ptr %533, align 4, !tbaa !12
  %534 = load ptr, ptr %32, align 8, !tbaa !5
  %535 = load i32, ptr %41, align 4, !tbaa !12
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds i32, ptr %534, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !12
  %539 = load ptr, ptr %32, align 8, !tbaa !5
  %540 = load ptr, ptr %33, align 8, !tbaa !5
  %541 = load i32, ptr %16, align 4, !tbaa !12
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds i32, ptr %540, i64 %542
  %544 = load i32, ptr %543, align 4, !tbaa !12
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %539, i64 %545
  store i32 %538, ptr %546, align 4, !tbaa !12
  %547 = load ptr, ptr %32, align 8, !tbaa !5
  %548 = load i32, ptr %41, align 4, !tbaa !12
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  store i32 -1, ptr %550, align 4, !tbaa !12
  br label %551

551:                                              ; preds = %519
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552, %505, %498, %491
  %554 = load ptr, ptr %31, align 8, !tbaa !5
  %555 = load i32, ptr %41, align 4, !tbaa !12
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i32, ptr %554, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !12
  %559 = icmp sgt i32 %558, 0
  br i1 %559, label %560, label %582

560:                                              ; preds = %553
  %561 = load ptr, ptr %32, align 8, !tbaa !5
  %562 = load i32, ptr %41, align 4, !tbaa !12
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds i32, ptr %561, i64 %563
  %565 = load i32, ptr %564, align 4, !tbaa !12
  %566 = icmp eq i32 %565, -1
  br i1 %566, label %567, label %582

567:                                              ; preds = %560
  br label %568

568:                                              ; preds = %567
  %569 = load i32, ptr %41, align 4, !tbaa !12
  %570 = load ptr, ptr %33, align 8, !tbaa !5
  %571 = load i32, ptr %16, align 4, !tbaa !12
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  store i32 %569, ptr %573, align 4, !tbaa !12
  %574 = load i32, ptr %16, align 4, !tbaa !12
  %575 = add nsw i32 %574, 1
  store i32 %575, ptr %16, align 4, !tbaa !12
  %576 = load ptr, ptr %32, align 8, !tbaa !5
  %577 = load i32, ptr %41, align 4, !tbaa !12
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds i32, ptr %576, i64 %578
  store i32 %574, ptr %579, align 4, !tbaa !12
  br label %580

580:                                              ; preds = %568
  br label %581

581:                                              ; preds = %580
  br label %582

582:                                              ; preds = %581, %560, %553
  %583 = load ptr, ptr %26, align 8, !tbaa !5
  %584 = load i32, ptr %41, align 4, !tbaa !12
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds i32, ptr %583, i64 %585
  %587 = load i32, ptr %586, align 4, !tbaa !12
  store i32 %587, ptr %11, align 4, !tbaa !12
  br label %588

588:                                              ; preds = %827, %582
  %589 = load i32, ptr %11, align 4, !tbaa !12
  %590 = load ptr, ptr %26, align 8, !tbaa !5
  %591 = load i32, ptr %41, align 4, !tbaa !12
  %592 = add nsw i32 %591, 1
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds i32, ptr %590, i64 %593
  %595 = load i32, ptr %594, align 4, !tbaa !12
  %596 = icmp slt i32 %589, %595
  br i1 %596, label %597, label %830

597:                                              ; preds = %588
  %598 = load ptr, ptr %27, align 8, !tbaa !5
  %599 = load i32, ptr %11, align 4, !tbaa !12
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds i32, ptr %598, i64 %600
  %602 = load i32, ptr %601, align 4, !tbaa !12
  store i32 %602, ptr %12, align 4, !tbaa !12
  %603 = load ptr, ptr %31, align 8, !tbaa !5
  %604 = load i32, ptr %12, align 4, !tbaa !12
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds i32, ptr %603, i64 %605
  %607 = load i32, ptr %606, align 4, !tbaa !12
  %608 = load ptr, ptr %30, align 8, !tbaa !5
  %609 = load i32, ptr %12, align 4, !tbaa !12
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i32, ptr %608, i64 %610
  %612 = load i32, ptr %611, align 4, !tbaa !12
  %613 = sub nsw i32 %607, %612
  store i32 %613, ptr %42, align 4, !tbaa !12
  %614 = load i32, ptr %20, align 4, !tbaa !12
  %615 = load ptr, ptr %29, align 8, !tbaa !5
  %616 = load i32, ptr %12, align 4, !tbaa !12
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds i32, ptr %615, i64 %617
  %619 = load i32, ptr %618, align 4, !tbaa !12
  %620 = icmp eq i32 %614, %619
  br i1 %620, label %621, label %627

621:                                              ; preds = %597
  %622 = load ptr, ptr %28, align 8, !tbaa !5
  %623 = load i32, ptr %11, align 4, !tbaa !12
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds i32, ptr %622, i64 %624
  %626 = load i32, ptr %625, align 4, !tbaa !12
  br label %634

627:                                              ; preds = %597
  %628 = load ptr, ptr %28, align 8, !tbaa !5
  %629 = load i32, ptr %11, align 4, !tbaa !12
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds i32, ptr %628, i64 %630
  %632 = load i32, ptr %631, align 4, !tbaa !12
  %633 = sub nsw i32 0, %632
  br label %634

634:                                              ; preds = %627, %621
  %635 = phi i32 [ %626, %621 ], [ %633, %627 ]
  store i32 %635, ptr %14, align 4, !tbaa !12
  br label %636

636:                                              ; preds = %634
  %637 = load i32, ptr %14, align 4, !tbaa !12
  %638 = load ptr, ptr %30, align 8, !tbaa !5
  %639 = load i32, ptr %12, align 4, !tbaa !12
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds i32, ptr %638, i64 %640
  %642 = load i32, ptr %641, align 4, !tbaa !12
  %643 = add nsw i32 %642, %637
  store i32 %643, ptr %641, align 4, !tbaa !12
  %644 = load i32, ptr %14, align 4, !tbaa !12
  %645 = load ptr, ptr %31, align 8, !tbaa !5
  %646 = load i32, ptr %12, align 4, !tbaa !12
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds i32, ptr %645, i64 %647
  %649 = load i32, ptr %648, align 4, !tbaa !12
  %650 = sub nsw i32 %649, %644
  store i32 %650, ptr %648, align 4, !tbaa !12
  br label %651

651:                                              ; preds = %636
  br label %652

652:                                              ; preds = %651
  %653 = load ptr, ptr %34, align 8, !tbaa !5
  %654 = load i32, ptr %12, align 4, !tbaa !12
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !12
  %658 = icmp eq i32 %657, -1
  br i1 %658, label %659, label %747

659:                                              ; preds = %652
  %660 = load ptr, ptr %29, align 8, !tbaa !5
  %661 = load i32, ptr %12, align 4, !tbaa !12
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds i32, ptr %660, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !12
  %665 = load i32, ptr %19, align 4, !tbaa !12
  %666 = icmp eq i32 %664, %665
  br i1 %666, label %667, label %747

667:                                              ; preds = %659
  %668 = load ptr, ptr %31, align 8, !tbaa !5
  %669 = load i32, ptr %12, align 4, !tbaa !12
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds i32, ptr %668, i64 %670
  %672 = load i32, ptr %671, align 4, !tbaa !12
  %673 = icmp sgt i32 %672, 0
  br i1 %673, label %674, label %714

674:                                              ; preds = %667
  %675 = load ptr, ptr %32, align 8, !tbaa !5
  %676 = load i32, ptr %12, align 4, !tbaa !12
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %675, i64 %677
  %679 = load i32, ptr %678, align 4, !tbaa !12
  %680 = icmp eq i32 %679, -1
  br i1 %680, label %681, label %714

681:                                              ; preds = %674
  %682 = load ptr, ptr %36, align 8, !tbaa !5
  %683 = load i32, ptr %12, align 4, !tbaa !12
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds i32, ptr %682, i64 %684
  %686 = load i32, ptr %685, align 4, !tbaa !12
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %687
  %689 = getelementptr inbounds [2 x %struct.PQueueType], ptr %688, i64 0, i64 1
  %690 = load i32, ptr %12, align 4, !tbaa !12
  %691 = load i32, ptr %42, align 4, !tbaa !12
  %692 = call i32 @__PQueueDelete(ptr noundef %689, i32 noundef %690, i32 noundef %691)
  %693 = load ptr, ptr %36, align 8, !tbaa !5
  %694 = load i32, ptr %12, align 4, !tbaa !12
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds i32, ptr %693, i64 %695
  %697 = load i32, ptr %696, align 4, !tbaa !12
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %698
  %700 = getelementptr inbounds [2 x %struct.PQueueType], ptr %699, i64 0, i64 0
  %701 = load i32, ptr %12, align 4, !tbaa !12
  %702 = load ptr, ptr %31, align 8, !tbaa !5
  %703 = load i32, ptr %12, align 4, !tbaa !12
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i32, ptr %702, i64 %704
  %706 = load i32, ptr %705, align 4, !tbaa !12
  %707 = load ptr, ptr %30, align 8, !tbaa !5
  %708 = load i32, ptr %12, align 4, !tbaa !12
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %707, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !12
  %712 = sub nsw i32 %706, %711
  %713 = call i32 @__PQueueInsert(ptr noundef %700, i32 noundef %701, i32 noundef %712)
  br label %746

714:                                              ; preds = %674, %667
  %715 = load ptr, ptr %32, align 8, !tbaa !5
  %716 = load i32, ptr %12, align 4, !tbaa !12
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds i32, ptr %715, i64 %717
  %719 = load i32, ptr %718, align 4, !tbaa !12
  %720 = icmp eq i32 %719, -1
  br i1 %720, label %721, label %723

721:                                              ; preds = %714
  %722 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %723

723:                                              ; preds = %721, %714
  %724 = load ptr, ptr %36, align 8, !tbaa !5
  %725 = load i32, ptr %12, align 4, !tbaa !12
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds i32, ptr %724, i64 %726
  %728 = load i32, ptr %727, align 4, !tbaa !12
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %729
  %731 = getelementptr inbounds [2 x %struct.PQueueType], ptr %730, i64 0, i64 0
  %732 = load i32, ptr %12, align 4, !tbaa !12
  %733 = load i32, ptr %42, align 4, !tbaa !12
  %734 = load ptr, ptr %31, align 8, !tbaa !5
  %735 = load i32, ptr %12, align 4, !tbaa !12
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds i32, ptr %734, i64 %736
  %738 = load i32, ptr %737, align 4, !tbaa !12
  %739 = load ptr, ptr %30, align 8, !tbaa !5
  %740 = load i32, ptr %12, align 4, !tbaa !12
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds i32, ptr %739, i64 %741
  %743 = load i32, ptr %742, align 4, !tbaa !12
  %744 = sub nsw i32 %738, %743
  %745 = call i32 @__PQueueUpdate(ptr noundef %731, i32 noundef %732, i32 noundef %733, i32 noundef %744)
  br label %746

746:                                              ; preds = %723, %681
  br label %747

747:                                              ; preds = %746, %659, %652
  %748 = load ptr, ptr %31, align 8, !tbaa !5
  %749 = load i32, ptr %12, align 4, !tbaa !12
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds i32, ptr %748, i64 %750
  %752 = load i32, ptr %751, align 4, !tbaa !12
  %753 = icmp eq i32 %752, 0
  br i1 %753, label %754, label %796

754:                                              ; preds = %747
  %755 = load ptr, ptr %32, align 8, !tbaa !5
  %756 = load i32, ptr %12, align 4, !tbaa !12
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds i32, ptr %755, i64 %757
  %759 = load i32, ptr %758, align 4, !tbaa !12
  %760 = icmp ne i32 %759, -1
  br i1 %760, label %761, label %796

761:                                              ; preds = %754
  br label %762

762:                                              ; preds = %761
  %763 = load ptr, ptr %33, align 8, !tbaa !5
  %764 = load i32, ptr %16, align 4, !tbaa !12
  %765 = add nsw i32 %764, -1
  store i32 %765, ptr %16, align 4, !tbaa !12
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds i32, ptr %763, i64 %766
  %768 = load i32, ptr %767, align 4, !tbaa !12
  %769 = load ptr, ptr %33, align 8, !tbaa !5
  %770 = load ptr, ptr %32, align 8, !tbaa !5
  %771 = load i32, ptr %12, align 4, !tbaa !12
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds i32, ptr %770, i64 %772
  %774 = load i32, ptr %773, align 4, !tbaa !12
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds i32, ptr %769, i64 %775
  store i32 %768, ptr %776, align 4, !tbaa !12
  %777 = load ptr, ptr %32, align 8, !tbaa !5
  %778 = load i32, ptr %12, align 4, !tbaa !12
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %777, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !12
  %782 = load ptr, ptr %32, align 8, !tbaa !5
  %783 = load ptr, ptr %33, align 8, !tbaa !5
  %784 = load i32, ptr %16, align 4, !tbaa !12
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds i32, ptr %783, i64 %785
  %787 = load i32, ptr %786, align 4, !tbaa !12
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i32, ptr %782, i64 %788
  store i32 %781, ptr %789, align 4, !tbaa !12
  %790 = load ptr, ptr %32, align 8, !tbaa !5
  %791 = load i32, ptr %12, align 4, !tbaa !12
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds i32, ptr %790, i64 %792
  store i32 -1, ptr %793, align 4, !tbaa !12
  br label %794

794:                                              ; preds = %762
  br label %795

795:                                              ; preds = %794
  br label %826

796:                                              ; preds = %754, %747
  %797 = load ptr, ptr %31, align 8, !tbaa !5
  %798 = load i32, ptr %12, align 4, !tbaa !12
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds i32, ptr %797, i64 %799
  %801 = load i32, ptr %800, align 4, !tbaa !12
  %802 = icmp sgt i32 %801, 0
  br i1 %802, label %803, label %825

803:                                              ; preds = %796
  %804 = load ptr, ptr %32, align 8, !tbaa !5
  %805 = load i32, ptr %12, align 4, !tbaa !12
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds i32, ptr %804, i64 %806
  %808 = load i32, ptr %807, align 4, !tbaa !12
  %809 = icmp eq i32 %808, -1
  br i1 %809, label %810, label %825

810:                                              ; preds = %803
  br label %811

811:                                              ; preds = %810
  %812 = load i32, ptr %12, align 4, !tbaa !12
  %813 = load ptr, ptr %33, align 8, !tbaa !5
  %814 = load i32, ptr %16, align 4, !tbaa !12
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds i32, ptr %813, i64 %815
  store i32 %812, ptr %816, align 4, !tbaa !12
  %817 = load i32, ptr %16, align 4, !tbaa !12
  %818 = add nsw i32 %817, 1
  store i32 %818, ptr %16, align 4, !tbaa !12
  %819 = load ptr, ptr %32, align 8, !tbaa !5
  %820 = load i32, ptr %12, align 4, !tbaa !12
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds i32, ptr %819, i64 %821
  store i32 %817, ptr %822, align 4, !tbaa !12
  br label %823

823:                                              ; preds = %811
  br label %824

824:                                              ; preds = %823
  br label %825

825:                                              ; preds = %824, %803, %796
  br label %826

826:                                              ; preds = %825, %795
  br label %827

827:                                              ; preds = %826
  %828 = load i32, ptr %11, align 4, !tbaa !12
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %11, align 4, !tbaa !12
  br label %588, !llvm.loop !39

830:                                              ; preds = %588
  br label %831

831:                                              ; preds = %830
  %832 = load i32, ptr %18, align 4, !tbaa !12
  %833 = add nsw i32 %832, 1
  store i32 %833, ptr %18, align 4, !tbaa !12
  br label %308, !llvm.loop !40

834:                                              ; preds = %337, %324, %308
  %835 = load ptr, ptr %5, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.controldef, ptr %835, i32 0, i32 1
  %837 = load i32, ptr %836, align 4, !tbaa !24
  %838 = and i32 %837, 8
  %839 = icmp ne i32 %838, 0
  br i1 %839, label %840, label %874

840:                                              ; preds = %834
  %841 = load i32, ptr %43, align 4, !tbaa !12
  %842 = load i32, ptr %16, align 4, !tbaa !12
  %843 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef %841, i32 noundef %842)
  store i32 0, ptr %13, align 4, !tbaa !12
  br label %844

844:                                              ; preds = %864, %840
  %845 = load i32, ptr %13, align 4, !tbaa !12
  %846 = load i32, ptr %17, align 4, !tbaa !12
  %847 = icmp slt i32 %845, %846
  br i1 %847, label %848, label %867

848:                                              ; preds = %844
  %849 = load ptr, ptr %38, align 8, !tbaa !5
  %850 = load i32, ptr %13, align 4, !tbaa !12
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds float, ptr %849, i64 %851
  %853 = load float, ptr %852, align 4, !tbaa !29
  %854 = fpext float %853 to double
  %855 = load ptr, ptr %38, align 8, !tbaa !5
  %856 = load i32, ptr %17, align 4, !tbaa !12
  %857 = load i32, ptr %13, align 4, !tbaa !12
  %858 = add nsw i32 %856, %857
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds float, ptr %855, i64 %859
  %861 = load float, ptr %860, align 4, !tbaa !29
  %862 = fpext float %861 to double
  %863 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %854, double noundef %862)
  br label %864

864:                                              ; preds = %848
  %865 = load i32, ptr %13, align 4, !tbaa !12
  %866 = add nsw i32 %865, 1
  store i32 %866, ptr %13, align 4, !tbaa !12
  br label %844, !llvm.loop !41

867:                                              ; preds = %844
  %868 = load i32, ptr %17, align 4, !tbaa !12
  %869 = load ptr, ptr %38, align 8, !tbaa !5
  %870 = load ptr, ptr %7, align 8, !tbaa !5
  %871 = call float @__ComputeLoadImbalance(i32 noundef %868, i32 noundef 2, ptr noundef %869, ptr noundef %870)
  %872 = fpext float %871 to double
  %873 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %872)
  br label %874

874:                                              ; preds = %867, %834
  %875 = load i32, ptr %43, align 4, !tbaa !12
  %876 = load ptr, ptr %6, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.graphdef, ptr %876, i32 0, i32 12
  store i32 %875, ptr %877, align 8, !tbaa !33
  %878 = load i32, ptr %16, align 4, !tbaa !12
  %879 = load ptr, ptr %6, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.graphdef, ptr %879, i32 0, i32 16
  store i32 %878, ptr %880, align 8, !tbaa !32
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %881

881:                                              ; preds = %896, %874
  %882 = load i32, ptr %9, align 4, !tbaa !12
  %883 = load i32, ptr %17, align 4, !tbaa !12
  %884 = icmp slt i32 %882, %883
  br i1 %884, label %885, label %899

885:                                              ; preds = %881
  %886 = load ptr, ptr %5, align 8, !tbaa !5
  %887 = load i32, ptr %9, align 4, !tbaa !12
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %888
  %890 = getelementptr inbounds [2 x %struct.PQueueType], ptr %889, i64 0, i64 0
  call void @__PQueueFree(ptr noundef %886, ptr noundef %890)
  %891 = load ptr, ptr %5, align 8, !tbaa !5
  %892 = load i32, ptr %9, align 4, !tbaa !12
  %893 = sext i32 %892 to i64
  %894 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %40, i64 0, i64 %893
  %895 = getelementptr inbounds [2 x %struct.PQueueType], ptr %894, i64 0, i64 1
  call void @__PQueueFree(ptr noundef %891, ptr noundef %895)
  br label %896

896:                                              ; preds = %885
  %897 = load i32, ptr %9, align 4, !tbaa !12
  %898 = add nsw i32 %897, 1
  store i32 %898, ptr %9, align 4, !tbaa !12
  br label %881, !llvm.loop !42

899:                                              ; preds = %881
  %900 = load ptr, ptr %5, align 8, !tbaa !5
  %901 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %900, i32 noundef %901)
  %902 = load ptr, ptr %5, align 8, !tbaa !5
  %903 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %902, i32 noundef %903)
  %904 = load ptr, ptr %5, align 8, !tbaa !5
  %905 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %904, i32 noundef %905)
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 2048, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  ret void
}

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

declare float @__ComputeLoadImbalance(i32 noundef, i32 noundef, ptr noundef, ptr noundef) #1

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

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

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

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

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

declare i32 @__PQueueGetMax(ptr noundef) #1

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

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

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

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

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

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

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

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


; 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 }

@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [34 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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) 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

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

; Function Attrs: nounwind uwtable
define dso_local void @__MocInit2WayBalance2(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #3 {
  %5 = alloca [16 x [2 x %struct.PQueueType]], align 16
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %5) #4
  %6 = getelementptr inbounds i8, ptr %1, i64 16
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 176
  %9 = load i32, ptr %8, align 8, !tbaa !11
  %10 = getelementptr inbounds i8, ptr %1, i64 24
  %11 = load ptr, ptr %10, align 8, !tbaa !12
  %12 = getelementptr inbounds i8, ptr %1, i64 48
  %13 = load ptr, ptr %12, align 8, !tbaa !13
  %14 = getelementptr inbounds i8, ptr %1, i64 184
  %15 = load ptr, ptr %14, align 8, !tbaa !14
  %16 = getelementptr inbounds i8, ptr %1, i64 56
  %17 = load ptr, ptr %16, align 8, !tbaa !15
  %18 = getelementptr inbounds i8, ptr %1, i64 96
  %19 = load ptr, ptr %18, align 8, !tbaa !16
  %20 = getelementptr inbounds i8, ptr %1, i64 136
  %21 = load ptr, ptr %20, align 8, !tbaa !17
  %22 = getelementptr inbounds i8, ptr %1, i64 144
  %23 = load ptr, ptr %22, align 8, !tbaa !18
  %24 = getelementptr inbounds i8, ptr %1, i64 192
  %25 = load ptr, ptr %24, align 8, !tbaa !19
  %26 = getelementptr inbounds i8, ptr %1, i64 120
  %27 = load ptr, ptr %26, align 8, !tbaa !20
  %28 = getelementptr inbounds i8, ptr %1, i64 128
  %29 = load ptr, ptr %28, align 8, !tbaa !21
  %30 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %7) #4
  %31 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %7) #4
  %32 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %7) #4
  %33 = getelementptr inbounds i8, ptr %0, i64 4
  %34 = load i32, ptr %33, align 4, !tbaa !22
  %35 = and i32 %34, 8
  %.not = icmp eq i32 %35, 0
  br i1 %.not, label %59, label %36

36:                                               ; preds = %4
  %37 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %38 = icmp sgt i32 %9, 0
  br i1 %38, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %36
  %39 = zext nneg i32 %9 to i64
  %invariant.gep = getelementptr inbounds float, ptr %25, i64 %39
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %40 = getelementptr inbounds float, ptr %25, i64 %indvars.iv
  %41 = load float, ptr %40, align 4, !tbaa !27
  %42 = fpext float %41 to double
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv
  %43 = load float, ptr %gep, align 4, !tbaa !27
  %44 = fpext float %43 to double
  %45 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %42, double noundef %44)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %39
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

._crit_edge:                                      ; preds = %.lr.ph, %36
  %46 = load float, ptr %2, align 4, !tbaa !27
  %47 = fpext float %46 to double
  %48 = getelementptr inbounds i8, ptr %2, i64 4
  %49 = load float, ptr %48, align 4, !tbaa !27
  %50 = fpext float %49 to double
  %51 = load i32, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %1, i64 112
  %53 = load i32, ptr %52, align 8, !tbaa !30
  %54 = getelementptr inbounds i8, ptr %1, i64 88
  %55 = load i32, ptr %54, align 8, !tbaa !31
  %56 = tail call float @__ComputeLoadImbalance(i32 noundef %9, i32 noundef 2, ptr noundef %25, ptr noundef nonnull %2) #4
  %57 = fpext float %56 to double
  %58 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %47, double noundef %50, i32 noundef %51, i32 noundef %53, i32 noundef %55, double noundef %57)
  br label %59

59:                                               ; preds = %._crit_edge, %4
  %60 = icmp sgt i32 %9, 0
  br i1 %60, label %.lr.ph343.preheader, label %._crit_edge344

.lr.ph343.preheader:                              ; preds = %59
  %wide.trip.count392 = zext nneg i32 %9 to i64
  br label %.lr.ph343

.lr.ph343:                                        ; preds = %.lr.ph343.preheader, %.lr.ph343
  %indvars.iv389 = phi i64 [ 0, %.lr.ph343.preheader ], [ %indvars.iv.next390, %.lr.ph343 ]
  %61 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %indvars.iv389
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %61, i32 noundef %7, i32 noundef 501) #4
  %62 = getelementptr inbounds i8, ptr %61, i64 64
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %62, i32 noundef %7, i32 noundef 501) #4
  %indvars.iv.next390 = add nuw nsw i64 %indvars.iv389, 1
  %exitcond393.not = icmp eq i64 %indvars.iv.next390, %wide.trip.count392
  br i1 %exitcond393.not, label %._crit_edge344, label %.lr.ph343, !llvm.loop !32

._crit_edge344:                                   ; preds = %.lr.ph343, %59
  %63 = call ptr @__idxset(i32 noundef %7, i32 noundef -1, ptr noundef %30) #4
  %64 = icmp sgt i32 %7, 0
  br i1 %64, label %.lr.ph347.preheader, label %._crit_edge348.thread

._crit_edge348.thread:                            ; preds = %._crit_edge344
  call void @__RandomPermute(i32 noundef %7, ptr noundef %31, i32 noundef 1) #4
  br label %.preheader

.lr.ph347.preheader:                              ; preds = %._crit_edge344
  %65 = sext i32 %9 to i64
  %wide.trip.count397 = zext nneg i32 %7 to i64
  br label %.lr.ph347

.lr.ph347:                                        ; preds = %.lr.ph347.preheader, %.lr.ph347
  %indvars.iv394 = phi i64 [ 0, %.lr.ph347.preheader ], [ %indvars.iv.next395, %.lr.ph347 ]
  %66 = mul nsw i64 %indvars.iv394, %65
  %67 = getelementptr inbounds float, ptr %15, i64 %66
  %68 = call i32 @__samax(i32 noundef %9, ptr noundef %67) #4
  %69 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv394
  store i32 %68, ptr %69, align 4, !tbaa !33
  %indvars.iv.next395 = add nuw nsw i64 %indvars.iv394, 1
  %exitcond398.not = icmp eq i64 %indvars.iv.next395, %wide.trip.count397
  br i1 %exitcond398.not, label %._crit_edge348, label %.lr.ph347, !llvm.loop !34

._crit_edge348:                                   ; preds = %.lr.ph347
  call void @__RandomPermute(i32 noundef %7, ptr noundef %31, i32 noundef 1) #4
  br i1 %64, label %.lr.ph351.preheader, label %.preheader

.lr.ph351.preheader:                              ; preds = %._crit_edge348
  %wide.trip.count402 = zext nneg i32 %7 to i64
  br label %.lr.ph351

.preheader:                                       ; preds = %92, %._crit_edge348.thread, %._crit_edge348
  %70 = icmp sgt i32 %9, 1
  br i1 %70, label %.lr.ph354.preheader, label %._crit_edge355

.lr.ph354.preheader:                              ; preds = %.preheader
  %wide.trip.count407 = zext nneg i32 %9 to i64
  %71 = add nsw i64 %wide.trip.count407, -1
  %72 = add nsw i64 %wide.trip.count407, -2
  %xtraiter = and i64 %71, 3
  %73 = icmp ult i64 %72, 3
  br i1 %73, label %._crit_edge355.loopexit.unr-lcssa, label %.lr.ph354.preheader.new

.lr.ph354.preheader.new:                          ; preds = %.lr.ph354.preheader
  %unroll_iter = and i64 %71, -4
  br label %.lr.ph354

.lr.ph351:                                        ; preds = %.lr.ph351.preheader, %92
  %indvars.iv399 = phi i64 [ 0, %.lr.ph351.preheader ], [ %indvars.iv.next400, %92 ]
  %74 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv399
  %75 = load i32, ptr %74, align 4, !tbaa !33
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds i32, ptr %19, i64 %76
  %78 = load i32, ptr %77, align 4, !tbaa !33
  %79 = icmp eq i32 %78, 1
  br i1 %79, label %.sink.split, label %92

.sink.split:                                      ; preds = %.lr.ph351
  %80 = getelementptr inbounds i32, ptr %23, i64 %76
  %81 = load i32, ptr %80, align 4, !tbaa !33
  %82 = icmp sgt i32 %81, 0
  %83 = getelementptr inbounds i32, ptr %32, i64 %76
  %84 = load i32, ptr %83, align 4, !tbaa !33
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds i32, ptr %21, i64 %76
  %87 = load i32, ptr %86, align 4, !tbaa !33
  %88 = sub nsw i32 %81, %87
  %89 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %85, i64 1
  %90 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %85
  %.sink = select i1 %82, ptr %90, ptr %89
  %91 = call i32 @__PQueueInsert(ptr noundef nonnull %.sink, i32 noundef %75, i32 noundef %88) #4
  br label %92

92:                                               ; preds = %.sink.split, %.lr.ph351
  %indvars.iv.next400 = add nuw nsw i64 %indvars.iv399, 1
  %exitcond403.not = icmp eq i64 %indvars.iv.next400, %wide.trip.count402
  br i1 %exitcond403.not, label %.preheader, label %.lr.ph351, !llvm.loop !35

.lr.ph354:                                        ; preds = %.lr.ph354, %.lr.ph354.preheader.new
  %indvars.iv404 = phi i64 [ 1, %.lr.ph354.preheader.new ], [ %indvars.iv.next405.3, %.lr.ph354 ]
  %.0321352 = phi i32 [ 0, %.lr.ph354.preheader.new ], [ %124, %.lr.ph354 ]
  %niter = phi i64 [ 0, %.lr.ph354.preheader.new ], [ %niter.next.3, %.lr.ph354 ]
  %93 = getelementptr inbounds float, ptr %3, i64 %indvars.iv404
  %94 = load float, ptr %93, align 4, !tbaa !27
  %95 = sext i32 %.0321352 to i64
  %96 = getelementptr inbounds float, ptr %3, i64 %95
  %97 = load float, ptr %96, align 4, !tbaa !27
  %98 = fcmp olt float %94, %97
  %99 = trunc nuw nsw i64 %indvars.iv404 to i32
  %100 = select i1 %98, i32 %99, i32 %.0321352
  %indvars.iv.next405 = add nuw nsw i64 %indvars.iv404, 1
  %101 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.next405
  %102 = load float, ptr %101, align 4, !tbaa !27
  %103 = sext i32 %100 to i64
  %104 = getelementptr inbounds float, ptr %3, i64 %103
  %105 = load float, ptr %104, align 4, !tbaa !27
  %106 = fcmp olt float %102, %105
  %107 = trunc nuw nsw i64 %indvars.iv.next405 to i32
  %108 = select i1 %106, i32 %107, i32 %100
  %indvars.iv.next405.1 = add nuw nsw i64 %indvars.iv404, 2
  %109 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.next405.1
  %110 = load float, ptr %109, align 4, !tbaa !27
  %111 = sext i32 %108 to i64
  %112 = getelementptr inbounds float, ptr %3, i64 %111
  %113 = load float, ptr %112, align 4, !tbaa !27
  %114 = fcmp olt float %110, %113
  %115 = trunc nuw nsw i64 %indvars.iv.next405.1 to i32
  %116 = select i1 %114, i32 %115, i32 %108
  %indvars.iv.next405.2 = add nuw nsw i64 %indvars.iv404, 3
  %117 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.next405.2
  %118 = load float, ptr %117, align 4, !tbaa !27
  %119 = sext i32 %116 to i64
  %120 = getelementptr inbounds float, ptr %3, i64 %119
  %121 = load float, ptr %120, align 4, !tbaa !27
  %122 = fcmp olt float %118, %121
  %123 = trunc nuw nsw i64 %indvars.iv.next405.2 to i32
  %124 = select i1 %122, i32 %123, i32 %116
  %indvars.iv.next405.3 = add nuw nsw i64 %indvars.iv404, 4
  %niter.next.3 = add nuw i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge355.loopexit.unr-lcssa, label %.lr.ph354, !llvm.loop !36

._crit_edge355.loopexit.unr-lcssa:                ; preds = %.lr.ph354, %.lr.ph354.preheader
  %.lcssa.ph = phi i32 [ poison, %.lr.ph354.preheader ], [ %124, %.lr.ph354 ]
  %indvars.iv404.unr = phi i64 [ 1, %.lr.ph354.preheader ], [ %indvars.iv.next405.3, %.lr.ph354 ]
  %.0321352.unr = phi i32 [ 0, %.lr.ph354.preheader ], [ %124, %.lr.ph354 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge355.loopexit, label %.lr.ph354.epil

.lr.ph354.epil:                                   ; preds = %._crit_edge355.loopexit.unr-lcssa, %.lr.ph354.epil
  %indvars.iv404.epil = phi i64 [ %indvars.iv.next405.epil, %.lr.ph354.epil ], [ %indvars.iv404.unr, %._crit_edge355.loopexit.unr-lcssa ]
  %.0321352.epil = phi i32 [ %132, %.lr.ph354.epil ], [ %.0321352.unr, %._crit_edge355.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph354.epil ], [ 0, %._crit_edge355.loopexit.unr-lcssa ]
  %125 = getelementptr inbounds float, ptr %3, i64 %indvars.iv404.epil
  %126 = load float, ptr %125, align 4, !tbaa !27
  %127 = sext i32 %.0321352.epil to i64
  %128 = getelementptr inbounds float, ptr %3, i64 %127
  %129 = load float, ptr %128, align 4, !tbaa !27
  %130 = fcmp olt float %126, %129
  %131 = trunc nuw nsw i64 %indvars.iv404.epil to i32
  %132 = select i1 %130, i32 %131, i32 %.0321352.epil
  %indvars.iv.next405.epil = add nuw nsw i64 %indvars.iv404.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge355.loopexit, label %.lr.ph354.epil, !llvm.loop !37

._crit_edge355.loopexit:                          ; preds = %.lr.ph354.epil, %._crit_edge355.loopexit.unr-lcssa
  %.lcssa = phi i32 [ %.lcssa.ph, %._crit_edge355.loopexit.unr-lcssa ], [ %132, %.lr.ph354.epil ]
  %133 = sext i32 %.lcssa to i64
  br label %._crit_edge355

._crit_edge355:                                   ; preds = %._crit_edge355.loopexit, %.preheader
  %.0321.lcssa = phi i64 [ 0, %.preheader ], [ %133, %._crit_edge355.loopexit ]
  %134 = getelementptr inbounds float, ptr %3, i64 %.0321.lcssa
  %135 = load float, ptr %134, align 4, !tbaa !27
  %136 = fdiv float 5.000000e-01, %135
  %137 = getelementptr inbounds i8, ptr %1, i64 88
  %138 = load i32, ptr %137, align 8, !tbaa !31
  %139 = getelementptr inbounds i8, ptr %1, i64 112
  %140 = load i32, ptr %139, align 8, !tbaa !30
  %141 = getelementptr inbounds float, ptr %25, i64 %.0321.lcssa
  br i1 %64, label %.lr.ph370, label %._crit_edge371

.lr.ph370:                                        ; preds = %._crit_edge355
  %142 = sext i32 %9 to i64
  %143 = getelementptr inbounds float, ptr %25, i64 %142
  %144 = zext i32 %9 to i64
  %invariant.gep436 = getelementptr inbounds float, ptr %25, i64 %144
  br label %145

145:                                              ; preds = %.lr.ph370, %._crit_edge364
  %.0368 = phi i32 [ %138, %.lr.ph370 ], [ %165, %._crit_edge364 ]
  %.0316367 = phi i32 [ %140, %.lr.ph370 ], [ %.3319.lcssa, %._crit_edge364 ]
  %.0320366 = phi i32 [ 0, %.lr.ph370 ], [ %315, %._crit_edge364 ]
  %146 = load float, ptr %141, align 4, !tbaa !27
  %147 = fcmp ogt float %146, %136
  br i1 %147, label %._crit_edge371, label %148

148:                                              ; preds = %145
  %149 = call i32 @__SelectQueueOneWay2(i32 noundef %9, ptr noundef nonnull %25, ptr noundef nonnull %5, ptr noundef %3)
  %150 = icmp eq i32 %149, -1
  br i1 %150, label %._crit_edge371, label %151

151:                                              ; preds = %148
  %152 = sext i32 %149 to i64
  %153 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %152
  %154 = call i32 @__PQueueGetMax(ptr noundef nonnull %153) #4
  %155 = icmp eq i32 %154, -1
  br i1 %155, label %156, label %159

156:                                              ; preds = %151
  %157 = getelementptr inbounds i8, ptr %153, i64 64
  %158 = call i32 @__PQueueGetMax(ptr noundef nonnull %157) #4
  br label %159

159:                                              ; preds = %156, %151
  %.0310 = phi i32 [ %158, %156 ], [ %154, %151 ]
  %160 = sext i32 %.0310 to i64
  %161 = getelementptr inbounds i32, ptr %23, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !33
  %163 = getelementptr inbounds i32, ptr %21, i64 %160
  %164 = load i32, ptr %163, align 4, !tbaa !33
  %.neg = sub i32 %164, %162
  %165 = add i32 %.neg, %.0368
  %166 = mul nsw i32 %.0310, %9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds float, ptr %15, i64 %167
  call void @__saxpy(i32 noundef %9, float noundef 1.000000e+00, ptr noundef %168, i32 noundef 1, ptr noundef nonnull %25, i32 noundef 1) #4
  call void @__saxpy(i32 noundef %9, float noundef -1.000000e+00, ptr noundef %168, i32 noundef 1, ptr noundef nonnull %143, i32 noundef 1) #4
  %169 = getelementptr inbounds i32, ptr %19, i64 %160
  store i32 0, ptr %169, align 4, !tbaa !33
  %170 = getelementptr inbounds i32, ptr %30, i64 %160
  store i32 %.0320366, ptr %170, align 4, !tbaa !33
  %171 = load i32, ptr %33, align 4, !tbaa !22
  %172 = and i32 %171, 32
  %.not332 = icmp eq i32 %172, 0
  %.pre.pre432 = load i32, ptr %161, align 4, !tbaa !33
  br i1 %.not332, label %thread-pre-split, label %173

173:                                              ; preds = %159
  %174 = load i32, ptr %163, align 4, !tbaa !33
  %175 = sub nsw i32 %.pre.pre432, %174
  %176 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef %.0310, i32 noundef 1, i32 noundef %149, i32 noundef %175, i32 noundef %165)
  br i1 %60, label %.lr.ph358, label %._crit_edge359

.lr.ph358:                                        ; preds = %173, %.lr.ph358
  %indvars.iv409 = phi i64 [ %indvars.iv.next410, %.lr.ph358 ], [ 0, %173 ]
  %177 = getelementptr inbounds float, ptr %25, i64 %indvars.iv409
  %178 = load float, ptr %177, align 4, !tbaa !27
  %179 = fpext float %178 to double
  %gep437 = getelementptr inbounds float, ptr %invariant.gep436, i64 %indvars.iv409
  %180 = load float, ptr %gep437, align 4, !tbaa !27
  %181 = fpext float %180 to double
  %182 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %179, double noundef %181)
  %indvars.iv.next410 = add nuw nsw i64 %indvars.iv409, 1
  %exitcond413.not = icmp eq i64 %indvars.iv.next410, %144
  br i1 %exitcond413.not, label %._crit_edge359, label %.lr.ph358, !llvm.loop !39

._crit_edge359:                                   ; preds = %.lr.ph358, %173
  %183 = call float @__ComputeLoadImbalance(i32 noundef %9, i32 noundef 2, ptr noundef nonnull %25, ptr noundef %2) #4
  %184 = fpext float %183 to double
  %185 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %184)
  %186 = load i32, ptr %161, align 4, !tbaa !33
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %188, label %thread-pre-split

188:                                              ; preds = %._crit_edge359
  %189 = load i32, ptr %163, align 4, !tbaa !33
  %190 = icmp sgt i32 %189, 0
  br i1 %190, label %191, label %193

191:                                              ; preds = %188
  %192 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %.pre.pre = load i32, ptr %161, align 4, !tbaa !33
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %._crit_edge359, %191, %159
  %.pre = phi i32 [ %186, %._crit_edge359 ], [ %.pre.pre, %191 ], [ %.pre.pre432, %159 ]
  %.pr = load i32, ptr %163, align 4, !tbaa !33
  br label %193

193:                                              ; preds = %thread-pre-split, %188
  %194 = phi i32 [ %.pre, %thread-pre-split ], [ 0, %188 ]
  %195 = phi i32 [ %.pr, %thread-pre-split ], [ %189, %188 ]
  store i32 %194, ptr %163, align 4, !tbaa !33
  store i32 %195, ptr %161, align 4, !tbaa !33
  %196 = icmp eq i32 %195, 0
  br i1 %196, label %197, label %thread-pre-split336

197:                                              ; preds = %193
  %198 = getelementptr inbounds i32, ptr %27, i64 %160
  %199 = load i32, ptr %198, align 4, !tbaa !33
  %.not333 = icmp eq i32 %199, -1
  br i1 %.not333, label %thread-pre-split336.thread, label %200

200:                                              ; preds = %197
  %201 = getelementptr inbounds i32, ptr %11, i64 %160
  %202 = load i32, ptr %201, align 4, !tbaa !33
  %203 = getelementptr i8, ptr %201, i64 4
  %204 = load i32, ptr %203, align 4, !tbaa !33
  %205 = icmp slt i32 %202, %204
  br i1 %205, label %206, label %thread-pre-split336.thread

206:                                              ; preds = %200
  %207 = add nsw i32 %.0316367, -1
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i32, ptr %29, i64 %208
  %210 = load i32, ptr %209, align 4, !tbaa !33
  %211 = sext i32 %199 to i64
  %212 = getelementptr inbounds i32, ptr %29, i64 %211
  store i32 %210, ptr %212, align 4, !tbaa !33
  %213 = load i32, ptr %198, align 4, !tbaa !33
  %214 = sext i32 %210 to i64
  %215 = getelementptr inbounds i32, ptr %27, i64 %214
  store i32 %213, ptr %215, align 4, !tbaa !33
  store i32 -1, ptr %198, align 4, !tbaa !33
  %.pr337.pre = load i32, ptr %161, align 4, !tbaa !33
  br label %thread-pre-split336

thread-pre-split336:                              ; preds = %206, %193
  %216 = phi i32 [ %195, %193 ], [ %.pr337.pre, %206 ]
  %.1317 = phi i32 [ %.0316367, %193 ], [ %207, %206 ]
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %218, label %thread-pre-split336.thread

218:                                              ; preds = %thread-pre-split336
  %219 = getelementptr inbounds i32, ptr %27, i64 %160
  %220 = load i32, ptr %219, align 4, !tbaa !33
  %221 = icmp eq i32 %220, -1
  br i1 %221, label %222, label %thread-pre-split336.thread

222:                                              ; preds = %218
  %223 = sext i32 %.1317 to i64
  %224 = getelementptr inbounds i32, ptr %29, i64 %223
  store i32 %.0310, ptr %224, align 4, !tbaa !33
  %225 = add nsw i32 %.1317, 1
  store i32 %.1317, ptr %219, align 4, !tbaa !33
  br label %thread-pre-split336.thread

thread-pre-split336.thread:                       ; preds = %200, %197, %222, %218, %thread-pre-split336
  %.2318 = phi i32 [ %225, %222 ], [ %.1317, %218 ], [ %.1317, %thread-pre-split336 ], [ %.0316367, %197 ], [ %.0316367, %200 ]
  %226 = getelementptr inbounds i32, ptr %11, i64 %160
  %227 = load i32, ptr %226, align 4, !tbaa !33
  %228 = getelementptr i8, ptr %226, i64 4
  %229 = load i32, ptr %228, align 4, !tbaa !33
  %230 = icmp slt i32 %227, %229
  br i1 %230, label %.lr.ph363.preheader, label %._crit_edge364

.lr.ph363.preheader:                              ; preds = %thread-pre-split336.thread
  %231 = sext i32 %227 to i64
  br label %.lr.ph363

.lr.ph363:                                        ; preds = %.lr.ph363.preheader, %.thread
  %indvars.iv414 = phi i64 [ %231, %.lr.ph363.preheader ], [ %indvars.iv.next415, %.thread ]
  %.3319360 = phi i32 [ %.2318, %.lr.ph363.preheader ], [ %.4, %.thread ]
  %232 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv414
  %233 = load i32, ptr %232, align 4, !tbaa !33
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds i32, ptr %23, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !33
  %237 = getelementptr inbounds i32, ptr %21, i64 %234
  %238 = load i32, ptr %237, align 4, !tbaa !33
  %239 = sub nsw i32 %236, %238
  %240 = getelementptr inbounds i32, ptr %19, i64 %234
  %241 = load i32, ptr %240, align 4, !tbaa !33
  %242 = icmp eq i32 %241, 0
  %243 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv414
  %244 = load i32, ptr %243, align 4, !tbaa !33
  %245 = sub nsw i32 0, %244
  %246 = select i1 %242, i32 %244, i32 %245
  %247 = add nsw i32 %246, %238
  store i32 %247, ptr %237, align 4, !tbaa !33
  %248 = load i32, ptr %235, align 4, !tbaa !33
  %249 = sub nsw i32 %248, %246
  store i32 %249, ptr %235, align 4, !tbaa !33
  %250 = getelementptr inbounds i32, ptr %30, i64 %234
  %251 = load i32, ptr %250, align 4, !tbaa !33
  %252 = icmp eq i32 %251, -1
  br i1 %252, label %253, label %286

253:                                              ; preds = %.lr.ph363
  %254 = load i32, ptr %240, align 4, !tbaa !33
  %255 = icmp eq i32 %254, 1
  br i1 %255, label %256, label %thread-pre-split338

256:                                              ; preds = %253
  %257 = icmp sgt i32 %249, 0
  %258 = getelementptr inbounds i32, ptr %27, i64 %234
  %259 = load i32, ptr %258, align 4, !tbaa !33
  %260 = icmp eq i32 %259, -1
  br i1 %257, label %261, label %275

261:                                              ; preds = %256
  br i1 %260, label %262, label %.thread435

262:                                              ; preds = %261
  %263 = getelementptr inbounds i32, ptr %32, i64 %234
  %264 = load i32, ptr %263, align 4, !tbaa !33
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %265, i64 1
  %267 = call i32 @__PQueueDelete(ptr noundef nonnull %266, i32 noundef %233, i32 noundef %239) #4
  %268 = load i32, ptr %263, align 4, !tbaa !33
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %269
  %271 = load i32, ptr %235, align 4, !tbaa !33
  %272 = load i32, ptr %237, align 4, !tbaa !33
  %273 = sub nsw i32 %271, %272
  %274 = call i32 @__PQueueInsert(ptr noundef nonnull %270, i32 noundef %233, i32 noundef %273) #4
  br label %thread-pre-split338

275:                                              ; preds = %256
  br i1 %260, label %276, label %.thread435

276:                                              ; preds = %275
  %277 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  %.pre431 = load i32, ptr %235, align 4, !tbaa !33
  br label %.thread435

.thread435:                                       ; preds = %261, %276, %275
  %278 = phi i32 [ %.pre431, %276 ], [ %249, %275 ], [ %249, %261 ]
  %279 = getelementptr inbounds i32, ptr %32, i64 %234
  %280 = load i32, ptr %279, align 4, !tbaa !33
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %281
  %283 = load i32, ptr %237, align 4, !tbaa !33
  %284 = sub nsw i32 %278, %283
  %285 = call i32 @__PQueueUpdate(ptr noundef nonnull %282, i32 noundef %233, i32 noundef %239, i32 noundef %284) #4
  br label %thread-pre-split338

thread-pre-split338:                              ; preds = %253, %.thread435, %262
  %.pr339 = load i32, ptr %235, align 4, !tbaa !33
  br label %286

286:                                              ; preds = %thread-pre-split338, %.lr.ph363
  %287 = phi i32 [ %.pr339, %thread-pre-split338 ], [ %249, %.lr.ph363 ]
  %288 = icmp eq i32 %287, 0
  br i1 %288, label %289, label %302

289:                                              ; preds = %286
  %290 = getelementptr inbounds i32, ptr %27, i64 %234
  %291 = load i32, ptr %290, align 4, !tbaa !33
  %.not334 = icmp eq i32 %291, -1
  br i1 %.not334, label %.thread, label %292

292:                                              ; preds = %289
  %293 = add nsw i32 %.3319360, -1
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i32, ptr %29, i64 %294
  %296 = load i32, ptr %295, align 4, !tbaa !33
  %297 = sext i32 %291 to i64
  %298 = getelementptr inbounds i32, ptr %29, i64 %297
  store i32 %296, ptr %298, align 4, !tbaa !33
  %299 = load i32, ptr %290, align 4, !tbaa !33
  %300 = sext i32 %296 to i64
  %301 = getelementptr inbounds i32, ptr %27, i64 %300
  store i32 %299, ptr %301, align 4, !tbaa !33
  store i32 -1, ptr %290, align 4, !tbaa !33
  br label %.thread

302:                                              ; preds = %286
  %303 = icmp sgt i32 %287, 0
  br i1 %303, label %304, label %.thread

304:                                              ; preds = %302
  %305 = getelementptr inbounds i32, ptr %27, i64 %234
  %306 = load i32, ptr %305, align 4, !tbaa !33
  %307 = icmp eq i32 %306, -1
  br i1 %307, label %308, label %.thread

308:                                              ; preds = %304
  %309 = sext i32 %.3319360 to i64
  %310 = getelementptr inbounds i32, ptr %29, i64 %309
  store i32 %233, ptr %310, align 4, !tbaa !33
  %311 = add nsw i32 %.3319360, 1
  store i32 %.3319360, ptr %305, align 4, !tbaa !33
  br label %.thread

.thread:                                          ; preds = %289, %292, %308, %304, %302
  %.4 = phi i32 [ %293, %292 ], [ %311, %308 ], [ %.3319360, %304 ], [ %.3319360, %302 ], [ %.3319360, %289 ]
  %indvars.iv.next415 = add nsw i64 %indvars.iv414, 1
  %312 = load i32, ptr %228, align 4, !tbaa !33
  %313 = sext i32 %312 to i64
  %314 = icmp slt i64 %indvars.iv.next415, %313
  br i1 %314, label %.lr.ph363, label %._crit_edge364, !llvm.loop !40

._crit_edge364:                                   ; preds = %.thread, %thread-pre-split336.thread
  %.3319.lcssa = phi i32 [ %.2318, %thread-pre-split336.thread ], [ %.4, %.thread ]
  %315 = add nuw nsw i32 %.0320366, 1
  %exitcond417.not = icmp eq i32 %315, %7
  br i1 %exitcond417.not, label %._crit_edge371, label %145, !llvm.loop !41

._crit_edge371:                                   ; preds = %._crit_edge364, %145, %148, %._crit_edge355
  %.0316.lcssa = phi i32 [ %140, %._crit_edge355 ], [ %.0316367, %148 ], [ %.0316367, %145 ], [ %.3319.lcssa, %._crit_edge364 ]
  %.0.lcssa = phi i32 [ %138, %._crit_edge355 ], [ %.0368, %148 ], [ %.0368, %145 ], [ %165, %._crit_edge364 ]
  %316 = load i32, ptr %33, align 4, !tbaa !22
  %317 = and i32 %316, 8
  %.not335 = icmp eq i32 %317, 0
  br i1 %.not335, label %330, label %318

318:                                              ; preds = %._crit_edge371
  %319 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %.0.lcssa, i32 noundef %.0316.lcssa)
  br i1 %60, label %.lr.ph382.preheader, label %._crit_edge383

.lr.ph382.preheader:                              ; preds = %318
  %320 = zext nneg i32 %9 to i64
  %invariant.gep438 = getelementptr inbounds float, ptr %25, i64 %320
  br label %.lr.ph382

.lr.ph382:                                        ; preds = %.lr.ph382.preheader, %.lr.ph382
  %indvars.iv418 = phi i64 [ 0, %.lr.ph382.preheader ], [ %indvars.iv.next419, %.lr.ph382 ]
  %321 = getelementptr inbounds float, ptr %25, i64 %indvars.iv418
  %322 = load float, ptr %321, align 4, !tbaa !27
  %323 = fpext float %322 to double
  %gep439 = getelementptr inbounds float, ptr %invariant.gep438, i64 %indvars.iv418
  %324 = load float, ptr %gep439, align 4, !tbaa !27
  %325 = fpext float %324 to double
  %326 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %323, double noundef %325)
  %indvars.iv.next419 = add nuw nsw i64 %indvars.iv418, 1
  %exitcond422.not = icmp eq i64 %indvars.iv.next419, %320
  br i1 %exitcond422.not, label %._crit_edge383, label %.lr.ph382, !llvm.loop !42

._crit_edge383:                                   ; preds = %.lr.ph382, %318
  %327 = call float @__ComputeLoadImbalance(i32 noundef %9, i32 noundef 2, ptr noundef %25, ptr noundef %2) #4
  %328 = fpext float %327 to double
  %329 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %328)
  br label %330

330:                                              ; preds = %._crit_edge383, %._crit_edge371
  store i32 %.0.lcssa, ptr %137, align 8, !tbaa !31
  store i32 %.0316.lcssa, ptr %139, align 8, !tbaa !30
  br i1 %60, label %.lr.ph386.preheader, label %._crit_edge387

.lr.ph386.preheader:                              ; preds = %330
  %wide.trip.count426 = zext nneg i32 %9 to i64
  br label %.lr.ph386

.lr.ph386:                                        ; preds = %.lr.ph386.preheader, %.lr.ph386
  %indvars.iv423 = phi i64 [ 0, %.lr.ph386.preheader ], [ %indvars.iv.next424, %.lr.ph386 ]
  %331 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %5, i64 0, i64 %indvars.iv423
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %331) #4
  %332 = getelementptr inbounds i8, ptr %331, i64 64
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %332) #4
  %indvars.iv.next424 = add nuw nsw i64 %indvars.iv423, 1
  %exitcond427.not = icmp eq i64 %indvars.iv.next424, %wide.trip.count426
  br i1 %exitcond427.not, label %._crit_edge387, label %.lr.ph386, !llvm.loop !43

._crit_edge387:                                   ; preds = %.lr.ph386, %330
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %7) #4
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %7) #4
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %7) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %5) #4
  ret void
}

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

declare float @__ComputeLoadImbalance(i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

declare i32 @__PQueueGetMax(ptr noundef) local_unnamed_addr #2

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

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

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

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

declare void @__idxwspacefree(ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 184}
!15 = !{!6, !7, i64 56}
!16 = !{!6, !7, i64 96}
!17 = !{!6, !7, i64 136}
!18 = !{!6, !7, i64 144}
!19 = !{!6, !7, i64 192}
!20 = !{!6, !7, i64 120}
!21 = !{!6, !7, i64 128}
!22 = !{!23, !10, i64 4}
!23 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !24, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !25, i64 48, !26, i64 104, !26, i64 112, !26, i64 120, !26, i64 128, !26, i64 136, !26, i64 144, !26, i64 152, !26, i64 160, !26, i64 168, !26, i64 176, !26, i64 184, !26, i64 192, !26, i64 200, !26, i64 208, !26, i64 216, !26, i64 224}
!24 = !{!"float", !8, i64 0}
!25 = !{!"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}
!26 = !{!"double", !8, i64 0}
!27 = !{!24, !24, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!6, !10, i64 112}
!31 = !{!6, !10, i64 88}
!32 = distinct !{!32, !29}
!33 = !{!10, !10, i64 0}
!34 = distinct !{!34, !29}
!35 = distinct !{!35, !29}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.unroll.disable"}
!39 = distinct !{!39, !29}
!40 = distinct !{!40, !29}
!41 = distinct !{!41, !29}
!42 = distinct !{!42, !29}
!43 = distinct !{!43, !29}


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