; LLVM IR from siconos/siconos :: externals/lbl/metis4/mbalance2.ll_ (MocGeneral2WayBalance2)

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

%struct.PQueueType = type { 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 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1

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

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

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

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

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

108:                                              ; preds = %4
  br label %109

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

112:                                              ; preds = %109
  br label %125

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

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

122:                                              ; preds = %113
  br label %123

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

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

136:                                              ; preds = %191, %125
  %137 = load i32, ptr %9, align 4, !tbaa !12
  %138 = icmp slt i32 %137, 2
  br i1 %138, label %139, label %194

139:                                              ; preds = %136
  store i32 0, ptr %11, align 4, !tbaa !12
  br label %140

140:                                              ; preds = %187, %139
  %141 = load i32, ptr %11, align 4, !tbaa !12
  %142 = load i32, ptr %16, align 4, !tbaa !12
  %143 = icmp slt i32 %141, %142
  br i1 %143, label %144, label %190

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

187:                                              ; preds = %144
  %188 = load i32, ptr %11, align 4, !tbaa !12
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %11, align 4, !tbaa !12
  br label %140, !llvm.loop !26

190:                                              ; preds = %140
  br label %191

191:                                              ; preds = %190
  %192 = load i32, ptr %9, align 4, !tbaa !12
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %9, align 4, !tbaa !12
  br label %136, !llvm.loop !28

194:                                              ; preds = %136
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %195

195:                                              ; preds = %212, %194
  %196 = load i32, ptr %9, align 4, !tbaa !12
  %197 = load i32, ptr %16, align 4, !tbaa !12
  %198 = icmp slt i32 %196, %197
  br i1 %198, label %199, label %215

199:                                              ; preds = %195
  %200 = load ptr, ptr %5, align 8, !tbaa !5
  %201 = load i32, ptr %9, align 4, !tbaa !12
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %202
  %204 = getelementptr inbounds [2 x %struct.PQueueType], ptr %203, i64 0, i64 0
  %205 = load i32, ptr %15, align 4, !tbaa !12
  call void @__PQueueInit(ptr noundef %200, ptr noundef %204, i32 noundef %205, i32 noundef 501)
  %206 = load ptr, ptr %5, align 8, !tbaa !5
  %207 = load i32, ptr %9, align 4, !tbaa !12
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %208
  %210 = getelementptr inbounds [2 x %struct.PQueueType], ptr %209, i64 0, i64 1
  %211 = load i32, ptr %15, align 4, !tbaa !12
  call void @__PQueueInit(ptr noundef %206, ptr noundef %210, i32 noundef %211, i32 noundef 501)
  br label %212

212:                                              ; preds = %199
  %213 = load i32, ptr %9, align 4, !tbaa !12
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %9, align 4, !tbaa !12
  br label %195, !llvm.loop !29

215:                                              ; preds = %195
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %216

216:                                              ; preds = %233, %215
  %217 = load i32, ptr %9, align 4, !tbaa !12
  %218 = load i32, ptr %15, align 4, !tbaa !12
  %219 = icmp slt i32 %217, %218
  br i1 %219, label %220, label %236

220:                                              ; preds = %216
  %221 = load i32, ptr %16, align 4, !tbaa !12
  %222 = load ptr, ptr %38, align 8, !tbaa !5
  %223 = load i32, ptr %9, align 4, !tbaa !12
  %224 = load i32, ptr %16, align 4, !tbaa !12
  %225 = mul nsw i32 %223, %224
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds float, ptr %222, i64 %226
  %228 = call i32 @__samax(i32 noundef %221, ptr noundef %227)
  %229 = load ptr, ptr %37, align 8, !tbaa !5
  %230 = load i32, ptr %9, align 4, !tbaa !12
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i32, ptr %229, i64 %231
  store i32 %228, ptr %232, align 4, !tbaa !12
  br label %233

233:                                              ; preds = %220
  %234 = load i32, ptr %9, align 4, !tbaa !12
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %9, align 4, !tbaa !12
  br label %216, !llvm.loop !30

236:                                              ; preds = %216
  %237 = load i32, ptr %16, align 4, !tbaa !12
  %238 = load ptr, ptr %39, align 8, !tbaa !5
  %239 = load ptr, ptr %7, align 8, !tbaa !5
  %240 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %237, ptr noundef %238, ptr noundef %239, ptr noundef %240)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %241

241:                                              ; preds = %253, %236
  %242 = load i32, ptr %9, align 4, !tbaa !12
  %243 = load i32, ptr %16, align 4, !tbaa !12
  %244 = icmp slt i32 %242, %243
  br i1 %244, label %245, label %256

245:                                              ; preds = %241
  %246 = load i32, ptr %9, align 4, !tbaa !12
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %247
  %249 = load float, ptr %248, align 4, !tbaa !24
  %250 = load i32, ptr %9, align 4, !tbaa !12
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 %251
  store float %249, ptr %252, align 4, !tbaa !24
  br label %253

253:                                              ; preds = %245
  %254 = load i32, ptr %9, align 4, !tbaa !12
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %9, align 4, !tbaa !12
  br label %241, !llvm.loop !31

256:                                              ; preds = %241
  %257 = load ptr, ptr %6, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.graphdef, ptr %257, i32 0, i32 12
  %259 = load i32, ptr %258, align 8, !tbaa !32
  store i32 %259, ptr %46, align 4, !tbaa !12
  store i32 %259, ptr %47, align 4, !tbaa !12
  store i32 -1, ptr %48, align 4, !tbaa !12
  %260 = load ptr, ptr %5, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.controldef, ptr %260, i32 0, i32 1
  %262 = load i32, ptr %261, align 4, !tbaa !33
  %263 = and i32 %262, 8
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %325

265:                                              ; preds = %256
  %266 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  store i32 0, ptr %13, align 4, !tbaa !12
  br label %267

267:                                              ; preds = %287, %265
  %268 = load i32, ptr %13, align 4, !tbaa !12
  %269 = load i32, ptr %16, align 4, !tbaa !12
  %270 = icmp slt i32 %268, %269
  br i1 %270, label %271, label %290

271:                                              ; preds = %267
  %272 = load ptr, ptr %39, align 8, !tbaa !5
  %273 = load i32, ptr %13, align 4, !tbaa !12
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds float, ptr %272, i64 %274
  %276 = load float, ptr %275, align 4, !tbaa !24
  %277 = fpext float %276 to double
  %278 = load ptr, ptr %39, align 8, !tbaa !5
  %279 = load i32, ptr %16, align 4, !tbaa !12
  %280 = load i32, ptr %13, align 4, !tbaa !12
  %281 = add nsw i32 %279, %280
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds float, ptr %278, i64 %282
  %284 = load float, ptr %283, align 4, !tbaa !24
  %285 = fpext float %284 to double
  %286 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %277, double noundef %285)
  br label %287

287:                                              ; preds = %271
  %288 = load i32, ptr %13, align 4, !tbaa !12
  %289 = add nsw i32 %288, 1
  store i32 %289, ptr %13, align 4, !tbaa !12
  br label %267, !llvm.loop !37

290:                                              ; preds = %267
  %291 = load ptr, ptr %7, align 8, !tbaa !5
  %292 = getelementptr inbounds float, ptr %291, i64 0
  %293 = load float, ptr %292, align 4, !tbaa !24
  %294 = fpext float %293 to double
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = getelementptr inbounds float, ptr %295, i64 1
  %297 = load float, ptr %296, align 4, !tbaa !24
  %298 = fpext float %297 to double
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.graphdef, ptr %299, i32 0, i32 2
  %301 = load i32, ptr %300, align 8, !tbaa !9
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.graphdef, ptr %302, i32 0, i32 16
  %304 = load i32, ptr %303, align 8, !tbaa !38
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.graphdef, ptr %305, i32 0, i32 12
  %307 = load i32, ptr %306, align 8, !tbaa !32
  %308 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, double noundef %294, double noundef %298, i32 noundef %301, i32 noundef %304, i32 noundef %307)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %309

309:                                              ; preds = %320, %290
  %310 = load i32, ptr %9, align 4, !tbaa !12
  %311 = load i32, ptr %16, align 4, !tbaa !12
  %312 = icmp slt i32 %310, %311
  br i1 %312, label %313, label %323

313:                                              ; preds = %309
  %314 = load i32, ptr %9, align 4, !tbaa !12
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %315
  %317 = load float, ptr %316, align 4, !tbaa !24
  %318 = fpext float %317 to double
  %319 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %318)
  br label %320

320:                                              ; preds = %313
  %321 = load i32, ptr %9, align 4, !tbaa !12
  %322 = add nsw i32 %321, 1
  store i32 %322, ptr %9, align 4, !tbaa !12
  br label %309, !llvm.loop !39

323:                                              ; preds = %309
  %324 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %325

325:                                              ; preds = %323, %256
  %326 = load i32, ptr %15, align 4, !tbaa !12
  %327 = load ptr, ptr %34, align 8, !tbaa !5
  %328 = call ptr @__idxset(i32 noundef %326, i32 noundef -1, ptr noundef %327)
  %329 = load ptr, ptr %6, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.graphdef, ptr %329, i32 0, i32 16
  %331 = load i32, ptr %330, align 8, !tbaa !38
  store i32 %331, ptr %17, align 4, !tbaa !12
  %332 = load i32, ptr %15, align 4, !tbaa !12
  %333 = load ptr, ptr %36, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %332, ptr noundef %333, i32 noundef 1)
  store i32 0, ptr %10, align 4, !tbaa !12
  br label %334

334:                                              ; preds = %371, %325
  %335 = load i32, ptr %10, align 4, !tbaa !12
  %336 = load i32, ptr %15, align 4, !tbaa !12
  %337 = icmp slt i32 %335, %336
  br i1 %337, label %338, label %374

338:                                              ; preds = %334
  %339 = load ptr, ptr %36, align 8, !tbaa !5
  %340 = load i32, ptr %10, align 4, !tbaa !12
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds i32, ptr %339, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !12
  store i32 %343, ptr %9, align 4, !tbaa !12
  %344 = load ptr, ptr %37, align 8, !tbaa !5
  %345 = load i32, ptr %9, align 4, !tbaa !12
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %344, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !12
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %349
  %351 = load ptr, ptr %29, align 8, !tbaa !5
  %352 = load i32, ptr %9, align 4, !tbaa !12
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds i32, ptr %351, i64 %353
  %355 = load i32, ptr %354, align 4, !tbaa !12
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds [2 x %struct.PQueueType], ptr %350, i64 0, i64 %356
  %358 = load i32, ptr %9, align 4, !tbaa !12
  %359 = load ptr, ptr %31, align 8, !tbaa !5
  %360 = load i32, ptr %9, align 4, !tbaa !12
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %359, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !12
  %364 = load ptr, ptr %30, align 8, !tbaa !5
  %365 = load i32, ptr %9, align 4, !tbaa !12
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds i32, ptr %364, i64 %366
  %368 = load i32, ptr %367, align 4, !tbaa !12
  %369 = sub nsw i32 %363, %368
  %370 = call i32 @__PQueueInsert(ptr noundef %357, i32 noundef %358, i32 noundef %369)
  br label %371

371:                                              ; preds = %338
  %372 = load i32, ptr %10, align 4, !tbaa !12
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %10, align 4, !tbaa !12
  br label %334, !llvm.loop !40

374:                                              ; preds = %334
  store i32 0, ptr %18, align 4, !tbaa !12
  br label %375

375:                                              ; preds = %927, %374
  %376 = load i32, ptr %18, align 4, !tbaa !12
  %377 = load i32, ptr %15, align 4, !tbaa !12
  %378 = icmp slt i32 %376, %377
  br i1 %378, label %379, label %930

379:                                              ; preds = %375
  %380 = load i32, ptr %16, align 4, !tbaa !12
  %381 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 0
  %382 = load ptr, ptr %8, align 8, !tbaa !5
  %383 = call i32 @__AreAllBelow(i32 noundef %380, ptr noundef %381, ptr noundef %382)
  %384 = icmp ne i32 %383, 0
  br i1 %384, label %385, label %386

385:                                              ; preds = %379
  br label %930

386:                                              ; preds = %379
  %387 = load i32, ptr %16, align 4, !tbaa !12
  %388 = load ptr, ptr %39, align 8, !tbaa !5
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 0
  %391 = load ptr, ptr %49, align 8, !tbaa !5
  call void @__SelectQueue3(i32 noundef %387, ptr noundef %388, ptr noundef %389, ptr noundef %19, ptr noundef %25, ptr noundef %390, ptr noundef %391)
  %392 = load i32, ptr %19, align 4, !tbaa !12
  %393 = add nsw i32 %392, 1
  %394 = srem i32 %393, 2
  store i32 %394, ptr %20, align 4, !tbaa !12
  %395 = load i32, ptr %19, align 4, !tbaa !12
  %396 = icmp eq i32 %395, -1
  br i1 %396, label %406, label %397

397:                                              ; preds = %386
  %398 = load i32, ptr %25, align 4, !tbaa !12
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %399
  %401 = load i32, ptr %19, align 4, !tbaa !12
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds [2 x %struct.PQueueType], ptr %400, i64 0, i64 %402
  %404 = call i32 @__PQueueGetMax(ptr noundef %403)
  store i32 %404, ptr %44, align 4, !tbaa !12
  %405 = icmp eq i32 %404, -1
  br i1 %405, label %406, label %407

406:                                              ; preds = %397, %386
  br label %930

407:                                              ; preds = %397
  %408 = load i32, ptr %16, align 4, !tbaa !12
  %409 = load ptr, ptr %38, align 8, !tbaa !5
  %410 = load i32, ptr %44, align 4, !tbaa !12
  %411 = load i32, ptr %16, align 4, !tbaa !12
  %412 = mul nsw i32 %410, %411
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds float, ptr %409, i64 %413
  %415 = load ptr, ptr %39, align 8, !tbaa !5
  %416 = load i32, ptr %20, align 4, !tbaa !12
  %417 = load i32, ptr %16, align 4, !tbaa !12
  %418 = mul nsw i32 %416, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds float, ptr %415, i64 %419
  call void @__saxpy(i32 noundef %408, float noundef 1.000000e+00, ptr noundef %414, i32 noundef 1, ptr noundef %420, i32 noundef 1)
  %421 = load i32, ptr %16, align 4, !tbaa !12
  %422 = load ptr, ptr %38, align 8, !tbaa !5
  %423 = load i32, ptr %44, align 4, !tbaa !12
  %424 = load i32, ptr %16, align 4, !tbaa !12
  %425 = mul nsw i32 %423, %424
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds float, ptr %422, i64 %426
  %428 = load ptr, ptr %39, align 8, !tbaa !5
  %429 = load i32, ptr %19, align 4, !tbaa !12
  %430 = load i32, ptr %16, align 4, !tbaa !12
  %431 = mul nsw i32 %429, %430
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds float, ptr %428, i64 %432
  call void @__saxpy(i32 noundef %421, float noundef -1.000000e+00, ptr noundef %427, i32 noundef 1, ptr noundef %433, i32 noundef 1)
  %434 = load ptr, ptr %31, align 8, !tbaa !5
  %435 = load i32, ptr %44, align 4, !tbaa !12
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds i32, ptr %434, i64 %436
  %438 = load i32, ptr %437, align 4, !tbaa !12
  %439 = load ptr, ptr %30, align 8, !tbaa !5
  %440 = load i32, ptr %44, align 4, !tbaa !12
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds i32, ptr %439, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !12
  %444 = sub nsw i32 %438, %443
  %445 = load i32, ptr %47, align 4, !tbaa !12
  %446 = sub nsw i32 %445, %444
  store i32 %446, ptr %47, align 4, !tbaa !12
  %447 = load i32, ptr %16, align 4, !tbaa !12
  %448 = load ptr, ptr %39, align 8, !tbaa !5
  %449 = load ptr, ptr %7, align 8, !tbaa !5
  %450 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 0
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %447, ptr noundef %448, ptr noundef %449, ptr noundef %450)
  %451 = load i32, ptr %16, align 4, !tbaa !12
  %452 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 0
  %453 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 0
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  %455 = call i32 @__IsBetter2wayBalance(i32 noundef %451, ptr noundef %452, ptr noundef %453, ptr noundef %454)
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %468, label %457

457:                                              ; preds = %407
  %458 = load i32, ptr %16, align 4, !tbaa !12
  %459 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 0
  %460 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = call i32 @__IsBetter2wayBalance(i32 noundef %458, ptr noundef %459, ptr noundef %460, ptr noundef %461)
  %463 = icmp ne i32 %462, 0
  br i1 %463, label %464, label %487

464:                                              ; preds = %457
  %465 = load i32, ptr %47, align 4, !tbaa !12
  %466 = load i32, ptr %46, align 4, !tbaa !12
  %467 = icmp slt i32 %465, %466
  br i1 %467, label %468, label %487

468:                                              ; preds = %464, %407
  %469 = load i32, ptr %47, align 4, !tbaa !12
  store i32 %469, ptr %46, align 4, !tbaa !12
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %470

470:                                              ; preds = %482, %468
  %471 = load i32, ptr %9, align 4, !tbaa !12
  %472 = load i32, ptr %16, align 4, !tbaa !12
  %473 = icmp slt i32 %471, %472
  br i1 %473, label %474, label %485

474:                                              ; preds = %470
  %475 = load i32, ptr %9, align 4, !tbaa !12
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [16 x float], ptr %42, i64 0, i64 %476
  %478 = load float, ptr %477, align 4, !tbaa !24
  %479 = load i32, ptr %9, align 4, !tbaa !12
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds [16 x float], ptr %41, i64 0, i64 %480
  store float %478, ptr %481, align 4, !tbaa !24
  br label %482

482:                                              ; preds = %474
  %483 = load i32, ptr %9, align 4, !tbaa !12
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %9, align 4, !tbaa !12
  br label %470, !llvm.loop !41

485:                                              ; preds = %470
  %486 = load i32, ptr %18, align 4, !tbaa !12
  store i32 %486, ptr %48, align 4, !tbaa !12
  br label %534

487:                                              ; preds = %464, %457
  %488 = load i32, ptr %18, align 4, !tbaa !12
  %489 = load i32, ptr %48, align 4, !tbaa !12
  %490 = sub nsw i32 %488, %489
  %491 = load i32, ptr %23, align 4, !tbaa !12
  %492 = icmp sgt i32 %490, %491
  br i1 %492, label %493, label %533

493:                                              ; preds = %487
  %494 = load ptr, ptr %31, align 8, !tbaa !5
  %495 = load i32, ptr %44, align 4, !tbaa !12
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i32, ptr %494, i64 %496
  %498 = load i32, ptr %497, align 4, !tbaa !12
  %499 = load ptr, ptr %30, align 8, !tbaa !5
  %500 = load i32, ptr %44, 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 = sub nsw i32 %498, %503
  %505 = load i32, ptr %47, align 4, !tbaa !12
  %506 = add nsw i32 %505, %504
  store i32 %506, ptr %47, align 4, !tbaa !12
  %507 = load i32, ptr %16, align 4, !tbaa !12
  %508 = load ptr, ptr %38, align 8, !tbaa !5
  %509 = load i32, ptr %44, align 4, !tbaa !12
  %510 = load i32, ptr %16, align 4, !tbaa !12
  %511 = mul nsw i32 %509, %510
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds float, ptr %508, i64 %512
  %514 = load ptr, ptr %39, align 8, !tbaa !5
  %515 = load i32, ptr %19, align 4, !tbaa !12
  %516 = load i32, ptr %16, align 4, !tbaa !12
  %517 = mul nsw i32 %515, %516
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds float, ptr %514, i64 %518
  call void @__saxpy(i32 noundef %507, float noundef 1.000000e+00, ptr noundef %513, i32 noundef 1, ptr noundef %519, i32 noundef 1)
  %520 = load i32, ptr %16, align 4, !tbaa !12
  %521 = load ptr, ptr %38, align 8, !tbaa !5
  %522 = load i32, ptr %44, align 4, !tbaa !12
  %523 = load i32, ptr %16, align 4, !tbaa !12
  %524 = mul nsw i32 %522, %523
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds float, ptr %521, i64 %525
  %527 = load ptr, ptr %39, align 8, !tbaa !5
  %528 = load i32, ptr %20, align 4, !tbaa !12
  %529 = load i32, ptr %16, align 4, !tbaa !12
  %530 = mul nsw i32 %528, %529
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds float, ptr %527, i64 %531
  call void @__saxpy(i32 noundef %520, float noundef -1.000000e+00, ptr noundef %526, i32 noundef 1, ptr noundef %532, i32 noundef 1)
  br label %930

533:                                              ; preds = %487
  br label %534

534:                                              ; preds = %533, %485
  %535 = load i32, ptr %20, align 4, !tbaa !12
  %536 = load ptr, ptr %29, align 8, !tbaa !5
  %537 = load i32, ptr %44, align 4, !tbaa !12
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds i32, ptr %536, i64 %538
  store i32 %535, ptr %539, align 4, !tbaa !12
  %540 = load i32, ptr %18, align 4, !tbaa !12
  %541 = load ptr, ptr %34, align 8, !tbaa !5
  %542 = load i32, ptr %44, align 4, !tbaa !12
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds i32, ptr %541, i64 %543
  store i32 %540, ptr %544, align 4, !tbaa !12
  %545 = load i32, ptr %44, align 4, !tbaa !12
  %546 = load ptr, ptr %35, align 8, !tbaa !5
  %547 = load i32, ptr %18, align 4, !tbaa !12
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds i32, ptr %546, i64 %548
  store i32 %545, ptr %549, align 4, !tbaa !12
  %550 = load ptr, ptr %5, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.controldef, ptr %550, i32 0, i32 1
  %552 = load i32, ptr %551, align 4, !tbaa !33
  %553 = and i32 %552, 32
  %554 = icmp ne i32 %553, 0
  br i1 %554, label %555, label %624

555:                                              ; preds = %534
  %556 = load i32, ptr %44, align 4, !tbaa !12
  %557 = load i32, ptr %19, align 4, !tbaa !12
  %558 = load i32, ptr %25, align 4, !tbaa !12
  %559 = load ptr, ptr %31, align 8, !tbaa !5
  %560 = load i32, ptr %44, align 4, !tbaa !12
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i32, ptr %559, i64 %561
  %563 = load i32, ptr %562, align 4, !tbaa !12
  %564 = load ptr, ptr %30, align 8, !tbaa !5
  %565 = load i32, ptr %44, align 4, !tbaa !12
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i32, ptr %564, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !12
  %569 = sub nsw i32 %563, %568
  %570 = load i32, ptr %47, align 4, !tbaa !12
  %571 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %556, i32 noundef %557, i32 noundef %558, i32 noundef %569, i32 noundef %570)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %572

572:                                              ; preds = %592, %555
  %573 = load i32, ptr %9, align 4, !tbaa !12
  %574 = load i32, ptr %16, align 4, !tbaa !12
  %575 = icmp slt i32 %573, %574
  br i1 %575, label %576, label %595

576:                                              ; preds = %572
  %577 = load ptr, ptr %39, align 8, !tbaa !5
  %578 = load i32, ptr %9, align 4, !tbaa !12
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds float, ptr %577, i64 %579
  %581 = load float, ptr %580, align 4, !tbaa !24
  %582 = fpext float %581 to double
  %583 = load ptr, ptr %39, align 8, !tbaa !5
  %584 = load i32, ptr %16, align 4, !tbaa !12
  %585 = load i32, ptr %9, align 4, !tbaa !12
  %586 = add nsw i32 %584, %585
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds float, ptr %583, i64 %587
  %589 = load float, ptr %588, align 4, !tbaa !24
  %590 = fpext float %589 to double
  %591 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %582, double noundef %590)
  br label %592

592:                                              ; preds = %576
  %593 = load i32, ptr %9, align 4, !tbaa !12
  %594 = add nsw i32 %593, 1
  store i32 %594, ptr %9, align 4, !tbaa !12
  br label %572, !llvm.loop !42

595:                                              ; preds = %572
  %596 = load i32, ptr %16, align 4, !tbaa !12
  %597 = load ptr, ptr %39, align 8, !tbaa !5
  %598 = load ptr, ptr %7, align 8, !tbaa !5
  %599 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 0
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %596, ptr noundef %597, ptr noundef %598, ptr noundef %599)
  %600 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %601

601:                                              ; preds = %612, %595
  %602 = load i32, ptr %9, align 4, !tbaa !12
  %603 = load i32, ptr %16, align 4, !tbaa !12
  %604 = icmp slt i32 %602, %603
  br i1 %604, label %605, label %615

605:                                              ; preds = %601
  %606 = load i32, ptr %9, align 4, !tbaa !12
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 %607
  %609 = load float, ptr %608, align 4, !tbaa !24
  %610 = fpext float %609 to double
  %611 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %610)
  br label %612

612:                                              ; preds = %605
  %613 = load i32, ptr %9, align 4, !tbaa !12
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %9, align 4, !tbaa !12
  br label %601, !llvm.loop !43

615:                                              ; preds = %601
  %616 = load i32, ptr %48, align 4, !tbaa !12
  %617 = load i32, ptr %18, align 4, !tbaa !12
  %618 = icmp eq i32 %616, %617
  br i1 %618, label %619, label %621

619:                                              ; preds = %615
  %620 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  br label %623

621:                                              ; preds = %615
  %622 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  br label %623

623:                                              ; preds = %621, %619
  br label %624

624:                                              ; preds = %623, %534
  br label %625

625:                                              ; preds = %624
  %626 = load ptr, ptr %30, align 8, !tbaa !5
  %627 = load i32, ptr %44, align 4, !tbaa !12
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i32, ptr %626, i64 %628
  %630 = load i32, ptr %629, align 4, !tbaa !12
  store i32 %630, ptr %24, align 4, !tbaa !12
  %631 = load ptr, ptr %31, align 8, !tbaa !5
  %632 = load i32, ptr %44, align 4, !tbaa !12
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds i32, ptr %631, i64 %633
  %635 = load i32, ptr %634, align 4, !tbaa !12
  %636 = load ptr, ptr %30, align 8, !tbaa !5
  %637 = load i32, ptr %44, align 4, !tbaa !12
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %636, i64 %638
  store i32 %635, ptr %639, align 4, !tbaa !12
  %640 = load i32, ptr %24, align 4, !tbaa !12
  %641 = load ptr, ptr %31, align 8, !tbaa !5
  %642 = load i32, ptr %44, align 4, !tbaa !12
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds i32, ptr %641, i64 %643
  store i32 %640, ptr %644, align 4, !tbaa !12
  br label %645

645:                                              ; preds = %625
  br label %646

646:                                              ; preds = %645
  %647 = load ptr, ptr %31, align 8, !tbaa !5
  %648 = load i32, ptr %44, align 4, !tbaa !12
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds i32, ptr %647, i64 %649
  %651 = load i32, ptr %650, align 4, !tbaa !12
  %652 = icmp eq i32 %651, 0
  br i1 %652, label %653, label %708

653:                                              ; preds = %646
  %654 = load ptr, ptr %32, align 8, !tbaa !5
  %655 = load i32, ptr %44, align 4, !tbaa !12
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds i32, ptr %654, i64 %656
  %658 = load i32, ptr %657, align 4, !tbaa !12
  %659 = icmp ne i32 %658, -1
  br i1 %659, label %660, label %708

660:                                              ; preds = %653
  %661 = load ptr, ptr %26, align 8, !tbaa !5
  %662 = load i32, ptr %44, align 4, !tbaa !12
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds i32, ptr %661, i64 %663
  %665 = load i32, ptr %664, align 4, !tbaa !12
  %666 = load ptr, ptr %26, align 8, !tbaa !5
  %667 = load i32, ptr %44, align 4, !tbaa !12
  %668 = add nsw i32 %667, 1
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i32, ptr %666, i64 %669
  %671 = load i32, ptr %670, align 4, !tbaa !12
  %672 = icmp slt i32 %665, %671
  br i1 %672, label %673, label %708

673:                                              ; preds = %660
  br label %674

674:                                              ; preds = %673
  %675 = load ptr, ptr %33, align 8, !tbaa !5
  %676 = load i32, ptr %17, align 4, !tbaa !12
  %677 = add nsw i32 %676, -1
  store i32 %677, ptr %17, align 4, !tbaa !12
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds i32, ptr %675, i64 %678
  %680 = load i32, ptr %679, align 4, !tbaa !12
  %681 = load ptr, ptr %33, align 8, !tbaa !5
  %682 = load ptr, ptr %32, align 8, !tbaa !5
  %683 = load i32, ptr %44, 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 i32, ptr %681, i64 %687
  store i32 %680, ptr %688, align 4, !tbaa !12
  %689 = load ptr, ptr %32, align 8, !tbaa !5
  %690 = load i32, ptr %44, align 4, !tbaa !12
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds i32, ptr %689, i64 %691
  %693 = load i32, ptr %692, align 4, !tbaa !12
  %694 = load ptr, ptr %32, align 8, !tbaa !5
  %695 = load ptr, ptr %33, align 8, !tbaa !5
  %696 = load i32, ptr %17, align 4, !tbaa !12
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds i32, ptr %695, i64 %697
  %699 = load i32, ptr %698, align 4, !tbaa !12
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds i32, ptr %694, i64 %700
  store i32 %693, ptr %701, align 4, !tbaa !12
  %702 = load ptr, ptr %32, align 8, !tbaa !5
  %703 = load i32, ptr %44, align 4, !tbaa !12
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i32, ptr %702, i64 %704
  store i32 -1, ptr %705, align 4, !tbaa !12
  br label %706

706:                                              ; preds = %674
  br label %707

707:                                              ; preds = %706
  br label %708

708:                                              ; preds = %707, %660, %653, %646
  %709 = load ptr, ptr %31, align 8, !tbaa !5
  %710 = load i32, ptr %44, align 4, !tbaa !12
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i32, ptr %709, i64 %711
  %713 = load i32, ptr %712, align 4, !tbaa !12
  %714 = icmp sgt i32 %713, 0
  br i1 %714, label %715, label %737

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

722:                                              ; preds = %715
  br label %723

723:                                              ; preds = %722
  %724 = load i32, ptr %44, align 4, !tbaa !12
  %725 = load ptr, ptr %33, align 8, !tbaa !5
  %726 = load i32, ptr %17, align 4, !tbaa !12
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds i32, ptr %725, i64 %727
  store i32 %724, ptr %728, align 4, !tbaa !12
  %729 = load i32, ptr %17, align 4, !tbaa !12
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %17, align 4, !tbaa !12
  %731 = load ptr, ptr %32, align 8, !tbaa !5
  %732 = load i32, ptr %44, align 4, !tbaa !12
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %731, i64 %733
  store i32 %729, ptr %734, align 4, !tbaa !12
  br label %735

735:                                              ; preds = %723
  br label %736

736:                                              ; preds = %735
  br label %737

737:                                              ; preds = %736, %715, %708
  %738 = load ptr, ptr %26, align 8, !tbaa !5
  %739 = load i32, ptr %44, align 4, !tbaa !12
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds i32, ptr %738, i64 %740
  %742 = load i32, ptr %741, align 4, !tbaa !12
  store i32 %742, ptr %11, align 4, !tbaa !12
  br label %743

743:                                              ; preds = %923, %737
  %744 = load i32, ptr %11, align 4, !tbaa !12
  %745 = load ptr, ptr %26, align 8, !tbaa !5
  %746 = load i32, ptr %44, align 4, !tbaa !12
  %747 = add nsw i32 %746, 1
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds i32, ptr %745, i64 %748
  %750 = load i32, ptr %749, align 4, !tbaa !12
  %751 = icmp slt i32 %744, %750
  br i1 %751, label %752, label %926

752:                                              ; preds = %743
  %753 = load ptr, ptr %27, align 8, !tbaa !5
  %754 = load i32, ptr %11, align 4, !tbaa !12
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds i32, ptr %753, i64 %755
  %757 = load i32, ptr %756, align 4, !tbaa !12
  store i32 %757, ptr %12, align 4, !tbaa !12
  %758 = load ptr, ptr %31, align 8, !tbaa !5
  %759 = load i32, ptr %12, align 4, !tbaa !12
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds i32, ptr %758, i64 %760
  %762 = load i32, ptr %761, align 4, !tbaa !12
  %763 = load ptr, ptr %30, align 8, !tbaa !5
  %764 = load i32, ptr %12, align 4, !tbaa !12
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds i32, ptr %763, i64 %765
  %767 = load i32, ptr %766, align 4, !tbaa !12
  %768 = sub nsw i32 %762, %767
  store i32 %768, ptr %45, align 4, !tbaa !12
  %769 = load i32, ptr %20, align 4, !tbaa !12
  %770 = load ptr, ptr %29, 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 = icmp eq i32 %769, %774
  br i1 %775, label %776, label %782

776:                                              ; preds = %752
  %777 = load ptr, ptr %28, align 8, !tbaa !5
  %778 = load i32, ptr %11, 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
  br label %789

782:                                              ; preds = %752
  %783 = load ptr, ptr %28, align 8, !tbaa !5
  %784 = load i32, ptr %11, 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 = sub nsw i32 0, %787
  br label %789

789:                                              ; preds = %782, %776
  %790 = phi i32 [ %781, %776 ], [ %788, %782 ]
  store i32 %790, ptr %14, align 4, !tbaa !12
  br label %791

791:                                              ; preds = %789
  %792 = load i32, ptr %14, align 4, !tbaa !12
  %793 = load ptr, ptr %30, align 8, !tbaa !5
  %794 = load i32, ptr %12, align 4, !tbaa !12
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds i32, ptr %793, i64 %795
  %797 = load i32, ptr %796, align 4, !tbaa !12
  %798 = add nsw i32 %797, %792
  store i32 %798, ptr %796, align 4, !tbaa !12
  %799 = load i32, ptr %14, align 4, !tbaa !12
  %800 = load ptr, ptr %31, align 8, !tbaa !5
  %801 = load i32, ptr %12, align 4, !tbaa !12
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds i32, ptr %800, i64 %802
  %804 = load i32, ptr %803, align 4, !tbaa !12
  %805 = sub nsw i32 %804, %799
  store i32 %805, ptr %803, align 4, !tbaa !12
  br label %806

806:                                              ; preds = %791
  br label %807

807:                                              ; preds = %806
  %808 = load ptr, ptr %34, align 8, !tbaa !5
  %809 = load i32, ptr %12, align 4, !tbaa !12
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds i32, ptr %808, i64 %810
  %812 = load i32, ptr %811, align 4, !tbaa !12
  %813 = icmp eq i32 %812, -1
  br i1 %813, label %814, label %843

814:                                              ; preds = %807
  %815 = load ptr, ptr %37, align 8, !tbaa !5
  %816 = load i32, ptr %12, align 4, !tbaa !12
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds i32, ptr %815, i64 %817
  %819 = load i32, ptr %818, align 4, !tbaa !12
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %820
  %822 = load ptr, ptr %29, align 8, !tbaa !5
  %823 = load i32, ptr %12, align 4, !tbaa !12
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %822, i64 %824
  %826 = load i32, ptr %825, align 4, !tbaa !12
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds [2 x %struct.PQueueType], ptr %821, i64 0, i64 %827
  %829 = load i32, ptr %12, align 4, !tbaa !12
  %830 = load i32, ptr %45, align 4, !tbaa !12
  %831 = load ptr, ptr %31, align 8, !tbaa !5
  %832 = load i32, ptr %12, align 4, !tbaa !12
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds i32, ptr %831, i64 %833
  %835 = load i32, ptr %834, align 4, !tbaa !12
  %836 = load ptr, ptr %30, align 8, !tbaa !5
  %837 = load i32, ptr %12, align 4, !tbaa !12
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds i32, ptr %836, i64 %838
  %840 = load i32, ptr %839, align 4, !tbaa !12
  %841 = sub nsw i32 %835, %840
  %842 = call i32 @__PQueueUpdate(ptr noundef %828, i32 noundef %829, i32 noundef %830, i32 noundef %841)
  br label %843

843:                                              ; preds = %814, %807
  %844 = load ptr, ptr %31, align 8, !tbaa !5
  %845 = load i32, ptr %12, align 4, !tbaa !12
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds i32, ptr %844, i64 %846
  %848 = load i32, ptr %847, align 4, !tbaa !12
  %849 = icmp eq i32 %848, 0
  br i1 %849, label %850, label %892

850:                                              ; preds = %843
  %851 = load ptr, ptr %32, align 8, !tbaa !5
  %852 = load i32, ptr %12, align 4, !tbaa !12
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !12
  %856 = icmp ne i32 %855, -1
  br i1 %856, label %857, label %892

857:                                              ; preds = %850
  br label %858

858:                                              ; preds = %857
  %859 = load ptr, ptr %33, align 8, !tbaa !5
  %860 = load i32, ptr %17, align 4, !tbaa !12
  %861 = add nsw i32 %860, -1
  store i32 %861, ptr %17, align 4, !tbaa !12
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds i32, ptr %859, i64 %862
  %864 = load i32, ptr %863, align 4, !tbaa !12
  %865 = load ptr, ptr %33, align 8, !tbaa !5
  %866 = load ptr, ptr %32, align 8, !tbaa !5
  %867 = load i32, ptr %12, align 4, !tbaa !12
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds i32, ptr %866, i64 %868
  %870 = load i32, ptr %869, align 4, !tbaa !12
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds i32, ptr %865, i64 %871
  store i32 %864, ptr %872, align 4, !tbaa !12
  %873 = load ptr, ptr %32, align 8, !tbaa !5
  %874 = load i32, ptr %12, align 4, !tbaa !12
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds i32, ptr %873, i64 %875
  %877 = load i32, ptr %876, align 4, !tbaa !12
  %878 = load ptr, ptr %32, align 8, !tbaa !5
  %879 = load ptr, ptr %33, align 8, !tbaa !5
  %880 = load i32, ptr %17, align 4, !tbaa !12
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds i32, ptr %879, i64 %881
  %883 = load i32, ptr %882, align 4, !tbaa !12
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds i32, ptr %878, i64 %884
  store i32 %877, ptr %885, align 4, !tbaa !12
  %886 = load ptr, ptr %32, align 8, !tbaa !5
  %887 = load i32, ptr %12, align 4, !tbaa !12
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds i32, ptr %886, i64 %888
  store i32 -1, ptr %889, align 4, !tbaa !12
  br label %890

890:                                              ; preds = %858
  br label %891

891:                                              ; preds = %890
  br label %922

892:                                              ; preds = %850, %843
  %893 = load ptr, ptr %31, align 8, !tbaa !5
  %894 = load i32, ptr %12, align 4, !tbaa !12
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds i32, ptr %893, i64 %895
  %897 = load i32, ptr %896, align 4, !tbaa !12
  %898 = icmp sgt i32 %897, 0
  br i1 %898, label %899, label %921

899:                                              ; preds = %892
  %900 = load ptr, ptr %32, align 8, !tbaa !5
  %901 = load i32, ptr %12, align 4, !tbaa !12
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds i32, ptr %900, i64 %902
  %904 = load i32, ptr %903, align 4, !tbaa !12
  %905 = icmp eq i32 %904, -1
  br i1 %905, label %906, label %921

906:                                              ; preds = %899
  br label %907

907:                                              ; preds = %906
  %908 = load i32, ptr %12, align 4, !tbaa !12
  %909 = load ptr, ptr %33, align 8, !tbaa !5
  %910 = load i32, ptr %17, align 4, !tbaa !12
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds i32, ptr %909, i64 %911
  store i32 %908, ptr %912, align 4, !tbaa !12
  %913 = load i32, ptr %17, align 4, !tbaa !12
  %914 = add nsw i32 %913, 1
  store i32 %914, ptr %17, align 4, !tbaa !12
  %915 = load ptr, ptr %32, align 8, !tbaa !5
  %916 = load i32, ptr %12, align 4, !tbaa !12
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds i32, ptr %915, i64 %917
  store i32 %913, ptr %918, align 4, !tbaa !12
  br label %919

919:                                              ; preds = %907
  br label %920

920:                                              ; preds = %919
  br label %921

921:                                              ; preds = %920, %899, %892
  br label %922

922:                                              ; preds = %921, %891
  br label %923

923:                                              ; preds = %922
  %924 = load i32, ptr %11, align 4, !tbaa !12
  %925 = add nsw i32 %924, 1
  store i32 %925, ptr %11, align 4, !tbaa !12
  br label %743, !llvm.loop !44

926:                                              ; preds = %743
  br label %927

927:                                              ; preds = %926
  %928 = load i32, ptr %18, align 4, !tbaa !12
  %929 = add nsw i32 %928, 1
  store i32 %929, ptr %18, align 4, !tbaa !12
  br label %375, !llvm.loop !45

930:                                              ; preds = %493, %406, %385, %375
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %931

931:                                              ; preds = %944, %930
  %932 = load i32, ptr %9, align 4, !tbaa !12
  %933 = load i32, ptr %18, align 4, !tbaa !12
  %934 = icmp slt i32 %932, %933
  br i1 %934, label %935, label %947

935:                                              ; preds = %931
  %936 = load ptr, ptr %34, align 8, !tbaa !5
  %937 = load ptr, ptr %35, align 8, !tbaa !5
  %938 = load i32, ptr %9, align 4, !tbaa !12
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i32, ptr %937, i64 %939
  %941 = load i32, ptr %940, align 4, !tbaa !12
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds i32, ptr %936, i64 %942
  store i32 -1, ptr %943, align 4, !tbaa !12
  br label %944

944:                                              ; preds = %935
  %945 = load i32, ptr %9, align 4, !tbaa !12
  %946 = add nsw i32 %945, 1
  store i32 %946, ptr %9, align 4, !tbaa !12
  br label %931, !llvm.loop !46

947:                                              ; preds = %931
  %948 = load i32, ptr %18, align 4, !tbaa !12
  %949 = add nsw i32 %948, -1
  store i32 %949, ptr %18, align 4, !tbaa !12
  br label %950

950:                                              ; preds = %1254, %947
  %951 = load i32, ptr %18, align 4, !tbaa !12
  %952 = load i32, ptr %48, align 4, !tbaa !12
  %953 = icmp sgt i32 %951, %952
  br i1 %953, label %954, label %1257

954:                                              ; preds = %950
  %955 = load ptr, ptr %35, align 8, !tbaa !5
  %956 = load i32, ptr %18, align 4, !tbaa !12
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds i32, ptr %955, i64 %957
  %959 = load i32, ptr %958, align 4, !tbaa !12
  store i32 %959, ptr %44, align 4, !tbaa !12
  %960 = load ptr, ptr %29, align 8, !tbaa !5
  %961 = load i32, ptr %44, align 4, !tbaa !12
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds i32, ptr %960, i64 %962
  %964 = load i32, ptr %963, align 4, !tbaa !12
  %965 = add nsw i32 %964, 1
  %966 = srem i32 %965, 2
  %967 = load ptr, ptr %29, align 8, !tbaa !5
  %968 = load i32, ptr %44, align 4, !tbaa !12
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds i32, ptr %967, i64 %969
  store i32 %966, ptr %970, align 4, !tbaa !12
  store i32 %966, ptr %20, align 4, !tbaa !12
  br label %971

971:                                              ; preds = %954
  %972 = load ptr, ptr %30, align 8, !tbaa !5
  %973 = load i32, ptr %44, align 4, !tbaa !12
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds i32, ptr %972, i64 %974
  %976 = load i32, ptr %975, align 4, !tbaa !12
  store i32 %976, ptr %24, align 4, !tbaa !12
  %977 = load ptr, ptr %31, align 8, !tbaa !5
  %978 = load i32, ptr %44, align 4, !tbaa !12
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds i32, ptr %977, i64 %979
  %981 = load i32, ptr %980, align 4, !tbaa !12
  %982 = load ptr, ptr %30, align 8, !tbaa !5
  %983 = load i32, ptr %44, align 4, !tbaa !12
  %984 = sext i32 %983 to i64
  %985 = getelementptr inbounds i32, ptr %982, i64 %984
  store i32 %981, ptr %985, align 4, !tbaa !12
  %986 = load i32, ptr %24, align 4, !tbaa !12
  %987 = load ptr, ptr %31, align 8, !tbaa !5
  %988 = load i32, ptr %44, align 4, !tbaa !12
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds i32, ptr %987, i64 %989
  store i32 %986, ptr %990, align 4, !tbaa !12
  br label %991

991:                                              ; preds = %971
  br label %992

992:                                              ; preds = %991
  %993 = load ptr, ptr %31, align 8, !tbaa !5
  %994 = load i32, ptr %44, align 4, !tbaa !12
  %995 = sext i32 %994 to i64
  %996 = getelementptr inbounds i32, ptr %993, i64 %995
  %997 = load i32, ptr %996, align 4, !tbaa !12
  %998 = icmp eq i32 %997, 0
  br i1 %998, label %999, label %1054

999:                                              ; preds = %992
  %1000 = load ptr, ptr %32, align 8, !tbaa !5
  %1001 = load i32, ptr %44, align 4, !tbaa !12
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds i32, ptr %1000, i64 %1002
  %1004 = load i32, ptr %1003, align 4, !tbaa !12
  %1005 = icmp ne i32 %1004, -1
  br i1 %1005, label %1006, label %1054

1006:                                             ; preds = %999
  %1007 = load ptr, ptr %26, align 8, !tbaa !5
  %1008 = load i32, ptr %44, align 4, !tbaa !12
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds i32, ptr %1007, i64 %1009
  %1011 = load i32, ptr %1010, align 4, !tbaa !12
  %1012 = load ptr, ptr %26, align 8, !tbaa !5
  %1013 = load i32, ptr %44, align 4, !tbaa !12
  %1014 = add nsw i32 %1013, 1
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds i32, ptr %1012, i64 %1015
  %1017 = load i32, ptr %1016, align 4, !tbaa !12
  %1018 = icmp slt i32 %1011, %1017
  br i1 %1018, label %1019, label %1054

1019:                                             ; preds = %1006
  br label %1020

1020:                                             ; preds = %1019
  %1021 = load ptr, ptr %33, align 8, !tbaa !5
  %1022 = load i32, ptr %17, align 4, !tbaa !12
  %1023 = add nsw i32 %1022, -1
  store i32 %1023, ptr %17, align 4, !tbaa !12
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds i32, ptr %1021, i64 %1024
  %1026 = load i32, ptr %1025, align 4, !tbaa !12
  %1027 = load ptr, ptr %33, align 8, !tbaa !5
  %1028 = load ptr, ptr %32, align 8, !tbaa !5
  %1029 = load i32, ptr %44, align 4, !tbaa !12
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds i32, ptr %1028, i64 %1030
  %1032 = load i32, ptr %1031, align 4, !tbaa !12
  %1033 = sext i32 %1032 to i64
  %1034 = getelementptr inbounds i32, ptr %1027, i64 %1033
  store i32 %1026, ptr %1034, align 4, !tbaa !12
  %1035 = load ptr, ptr %32, align 8, !tbaa !5
  %1036 = load i32, ptr %44, align 4, !tbaa !12
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds i32, ptr %1035, i64 %1037
  %1039 = load i32, ptr %1038, align 4, !tbaa !12
  %1040 = load ptr, ptr %32, align 8, !tbaa !5
  %1041 = load ptr, ptr %33, align 8, !tbaa !5
  %1042 = load i32, ptr %17, align 4, !tbaa !12
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds i32, ptr %1041, i64 %1043
  %1045 = load i32, ptr %1044, align 4, !tbaa !12
  %1046 = sext i32 %1045 to i64
  %1047 = getelementptr inbounds i32, ptr %1040, i64 %1046
  store i32 %1039, ptr %1047, align 4, !tbaa !12
  %1048 = load ptr, ptr %32, align 8, !tbaa !5
  %1049 = load i32, ptr %44, align 4, !tbaa !12
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds i32, ptr %1048, i64 %1050
  store i32 -1, ptr %1051, align 4, !tbaa !12
  br label %1052

1052:                                             ; preds = %1020
  br label %1053

1053:                                             ; preds = %1052
  br label %1084

1054:                                             ; preds = %1006, %999, %992
  %1055 = load ptr, ptr %31, align 8, !tbaa !5
  %1056 = load i32, ptr %44, align 4, !tbaa !12
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds i32, ptr %1055, i64 %1057
  %1059 = load i32, ptr %1058, align 4, !tbaa !12
  %1060 = icmp sgt i32 %1059, 0
  br i1 %1060, label %1061, label %1083

1061:                                             ; preds = %1054
  %1062 = load ptr, ptr %32, align 8, !tbaa !5
  %1063 = load i32, ptr %44, align 4, !tbaa !12
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds i32, ptr %1062, i64 %1064
  %1066 = load i32, ptr %1065, align 4, !tbaa !12
  %1067 = icmp eq i32 %1066, -1
  br i1 %1067, label %1068, label %1083

1068:                                             ; preds = %1061
  br label %1069

1069:                                             ; preds = %1068
  %1070 = load i32, ptr %44, align 4, !tbaa !12
  %1071 = load ptr, ptr %33, align 8, !tbaa !5
  %1072 = load i32, ptr %17, align 4, !tbaa !12
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds i32, ptr %1071, i64 %1073
  store i32 %1070, ptr %1074, align 4, !tbaa !12
  %1075 = load i32, ptr %17, align 4, !tbaa !12
  %1076 = add nsw i32 %1075, 1
  store i32 %1076, ptr %17, align 4, !tbaa !12
  %1077 = load ptr, ptr %32, align 8, !tbaa !5
  %1078 = load i32, ptr %44, align 4, !tbaa !12
  %1079 = sext i32 %1078 to i64
  %1080 = getelementptr inbounds i32, ptr %1077, i64 %1079
  store i32 %1075, ptr %1080, align 4, !tbaa !12
  br label %1081

1081:                                             ; preds = %1069
  br label %1082

1082:                                             ; preds = %1081
  br label %1083

1083:                                             ; preds = %1082, %1061, %1054
  br label %1084

1084:                                             ; preds = %1083, %1053
  %1085 = load i32, ptr %16, align 4, !tbaa !12
  %1086 = load ptr, ptr %38, align 8, !tbaa !5
  %1087 = load i32, ptr %44, align 4, !tbaa !12
  %1088 = load i32, ptr %16, align 4, !tbaa !12
  %1089 = mul nsw i32 %1087, %1088
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds float, ptr %1086, i64 %1090
  %1092 = load ptr, ptr %39, align 8, !tbaa !5
  %1093 = load i32, ptr %20, align 4, !tbaa !12
  %1094 = load i32, ptr %16, align 4, !tbaa !12
  %1095 = mul nsw i32 %1093, %1094
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds float, ptr %1092, i64 %1096
  call void @__saxpy(i32 noundef %1085, float noundef 1.000000e+00, ptr noundef %1091, i32 noundef 1, ptr noundef %1097, i32 noundef 1)
  %1098 = load i32, ptr %16, align 4, !tbaa !12
  %1099 = load ptr, ptr %38, align 8, !tbaa !5
  %1100 = load i32, ptr %44, align 4, !tbaa !12
  %1101 = load i32, ptr %16, align 4, !tbaa !12
  %1102 = mul nsw i32 %1100, %1101
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds float, ptr %1099, i64 %1103
  %1105 = load ptr, ptr %39, align 8, !tbaa !5
  %1106 = load i32, ptr %20, align 4, !tbaa !12
  %1107 = add nsw i32 %1106, 1
  %1108 = srem i32 %1107, 2
  %1109 = load i32, ptr %16, align 4, !tbaa !12
  %1110 = mul nsw i32 %1108, %1109
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds float, ptr %1105, i64 %1111
  call void @__saxpy(i32 noundef %1098, float noundef -1.000000e+00, ptr noundef %1104, i32 noundef 1, ptr noundef %1112, i32 noundef 1)
  %1113 = load ptr, ptr %26, align 8, !tbaa !5
  %1114 = load i32, ptr %44, align 4, !tbaa !12
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds i32, ptr %1113, i64 %1115
  %1117 = load i32, ptr %1116, align 4, !tbaa !12
  store i32 %1117, ptr %11, align 4, !tbaa !12
  br label %1118

1118:                                             ; preds = %1250, %1084
  %1119 = load i32, ptr %11, align 4, !tbaa !12
  %1120 = load ptr, ptr %26, align 8, !tbaa !5
  %1121 = load i32, ptr %44, align 4, !tbaa !12
  %1122 = add nsw i32 %1121, 1
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds i32, ptr %1120, i64 %1123
  %1125 = load i32, ptr %1124, align 4, !tbaa !12
  %1126 = icmp slt i32 %1119, %1125
  br i1 %1126, label %1127, label %1253

1127:                                             ; preds = %1118
  %1128 = load ptr, ptr %27, align 8, !tbaa !5
  %1129 = load i32, ptr %11, align 4, !tbaa !12
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds i32, ptr %1128, i64 %1130
  %1132 = load i32, ptr %1131, align 4, !tbaa !12
  store i32 %1132, ptr %12, align 4, !tbaa !12
  %1133 = load i32, ptr %20, align 4, !tbaa !12
  %1134 = load ptr, ptr %29, align 8, !tbaa !5
  %1135 = load i32, ptr %12, align 4, !tbaa !12
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds i32, ptr %1134, i64 %1136
  %1138 = load i32, ptr %1137, align 4, !tbaa !12
  %1139 = icmp eq i32 %1133, %1138
  br i1 %1139, label %1140, label %1146

1140:                                             ; preds = %1127
  %1141 = load ptr, ptr %28, align 8, !tbaa !5
  %1142 = load i32, ptr %11, align 4, !tbaa !12
  %1143 = sext i32 %1142 to i64
  %1144 = getelementptr inbounds i32, ptr %1141, i64 %1143
  %1145 = load i32, ptr %1144, align 4, !tbaa !12
  br label %1153

1146:                                             ; preds = %1127
  %1147 = load ptr, ptr %28, align 8, !tbaa !5
  %1148 = load i32, ptr %11, align 4, !tbaa !12
  %1149 = sext i32 %1148 to i64
  %1150 = getelementptr inbounds i32, ptr %1147, i64 %1149
  %1151 = load i32, ptr %1150, align 4, !tbaa !12
  %1152 = sub nsw i32 0, %1151
  br label %1153

1153:                                             ; preds = %1146, %1140
  %1154 = phi i32 [ %1145, %1140 ], [ %1152, %1146 ]
  store i32 %1154, ptr %14, align 4, !tbaa !12
  br label %1155

1155:                                             ; preds = %1153
  %1156 = load i32, ptr %14, align 4, !tbaa !12
  %1157 = load ptr, ptr %30, align 8, !tbaa !5
  %1158 = load i32, ptr %12, align 4, !tbaa !12
  %1159 = sext i32 %1158 to i64
  %1160 = getelementptr inbounds i32, ptr %1157, i64 %1159
  %1161 = load i32, ptr %1160, align 4, !tbaa !12
  %1162 = add nsw i32 %1161, %1156
  store i32 %1162, ptr %1160, align 4, !tbaa !12
  %1163 = load i32, ptr %14, align 4, !tbaa !12
  %1164 = load ptr, ptr %31, align 8, !tbaa !5
  %1165 = load i32, ptr %12, align 4, !tbaa !12
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds i32, ptr %1164, i64 %1166
  %1168 = load i32, ptr %1167, align 4, !tbaa !12
  %1169 = sub nsw i32 %1168, %1163
  store i32 %1169, ptr %1167, align 4, !tbaa !12
  br label %1170

1170:                                             ; preds = %1155
  br label %1171

1171:                                             ; preds = %1170
  %1172 = load ptr, ptr %32, align 8, !tbaa !5
  %1173 = load i32, ptr %12, align 4, !tbaa !12
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds i32, ptr %1172, i64 %1174
  %1176 = load i32, ptr %1175, align 4, !tbaa !12
  %1177 = icmp ne i32 %1176, -1
  br i1 %1177, label %1178, label %1220

1178:                                             ; preds = %1171
  %1179 = load ptr, ptr %31, align 8, !tbaa !5
  %1180 = load i32, ptr %12, align 4, !tbaa !12
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds i32, ptr %1179, i64 %1181
  %1183 = load i32, ptr %1182, align 4, !tbaa !12
  %1184 = icmp eq i32 %1183, 0
  br i1 %1184, label %1185, label %1220

1185:                                             ; preds = %1178
  br label %1186

1186:                                             ; preds = %1185
  %1187 = load ptr, ptr %33, align 8, !tbaa !5
  %1188 = load i32, ptr %17, align 4, !tbaa !12
  %1189 = add nsw i32 %1188, -1
  store i32 %1189, ptr %17, align 4, !tbaa !12
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds i32, ptr %1187, i64 %1190
  %1192 = load i32, ptr %1191, align 4, !tbaa !12
  %1193 = load ptr, ptr %33, align 8, !tbaa !5
  %1194 = load ptr, ptr %32, align 8, !tbaa !5
  %1195 = load i32, ptr %12, align 4, !tbaa !12
  %1196 = sext i32 %1195 to i64
  %1197 = getelementptr inbounds i32, ptr %1194, i64 %1196
  %1198 = load i32, ptr %1197, align 4, !tbaa !12
  %1199 = sext i32 %1198 to i64
  %1200 = getelementptr inbounds i32, ptr %1193, i64 %1199
  store i32 %1192, ptr %1200, align 4, !tbaa !12
  %1201 = load ptr, ptr %32, align 8, !tbaa !5
  %1202 = load i32, ptr %12, align 4, !tbaa !12
  %1203 = sext i32 %1202 to i64
  %1204 = getelementptr inbounds i32, ptr %1201, i64 %1203
  %1205 = load i32, ptr %1204, align 4, !tbaa !12
  %1206 = load ptr, ptr %32, align 8, !tbaa !5
  %1207 = load ptr, ptr %33, align 8, !tbaa !5
  %1208 = load i32, ptr %17, align 4, !tbaa !12
  %1209 = sext i32 %1208 to i64
  %1210 = getelementptr inbounds i32, ptr %1207, i64 %1209
  %1211 = load i32, ptr %1210, align 4, !tbaa !12
  %1212 = sext i32 %1211 to i64
  %1213 = getelementptr inbounds i32, ptr %1206, i64 %1212
  store i32 %1205, ptr %1213, align 4, !tbaa !12
  %1214 = load ptr, ptr %32, align 8, !tbaa !5
  %1215 = load i32, ptr %12, align 4, !tbaa !12
  %1216 = sext i32 %1215 to i64
  %1217 = getelementptr inbounds i32, ptr %1214, i64 %1216
  store i32 -1, ptr %1217, align 4, !tbaa !12
  br label %1218

1218:                                             ; preds = %1186
  br label %1219

1219:                                             ; preds = %1218
  br label %1220

1220:                                             ; preds = %1219, %1178, %1171
  %1221 = load ptr, ptr %32, align 8, !tbaa !5
  %1222 = load i32, ptr %12, align 4, !tbaa !12
  %1223 = sext i32 %1222 to i64
  %1224 = getelementptr inbounds i32, ptr %1221, i64 %1223
  %1225 = load i32, ptr %1224, align 4, !tbaa !12
  %1226 = icmp eq i32 %1225, -1
  br i1 %1226, label %1227, label %1249

1227:                                             ; preds = %1220
  %1228 = load ptr, ptr %31, align 8, !tbaa !5
  %1229 = load i32, ptr %12, align 4, !tbaa !12
  %1230 = sext i32 %1229 to i64
  %1231 = getelementptr inbounds i32, ptr %1228, i64 %1230
  %1232 = load i32, ptr %1231, align 4, !tbaa !12
  %1233 = icmp sgt i32 %1232, 0
  br i1 %1233, label %1234, label %1249

1234:                                             ; preds = %1227
  br label %1235

1235:                                             ; preds = %1234
  %1236 = load i32, ptr %12, align 4, !tbaa !12
  %1237 = load ptr, ptr %33, align 8, !tbaa !5
  %1238 = load i32, ptr %17, align 4, !tbaa !12
  %1239 = sext i32 %1238 to i64
  %1240 = getelementptr inbounds i32, ptr %1237, i64 %1239
  store i32 %1236, ptr %1240, align 4, !tbaa !12
  %1241 = load i32, ptr %17, align 4, !tbaa !12
  %1242 = add nsw i32 %1241, 1
  store i32 %1242, ptr %17, align 4, !tbaa !12
  %1243 = load ptr, ptr %32, align 8, !tbaa !5
  %1244 = load i32, ptr %12, align 4, !tbaa !12
  %1245 = sext i32 %1244 to i64
  %1246 = getelementptr inbounds i32, ptr %1243, i64 %1245
  store i32 %1241, ptr %1246, align 4, !tbaa !12
  br label %1247

1247:                                             ; preds = %1235
  br label %1248

1248:                                             ; preds = %1247
  br label %1249

1249:                                             ; preds = %1248, %1227, %1220
  br label %1250

1250:                                             ; preds = %1249
  %1251 = load i32, ptr %11, align 4, !tbaa !12
  %1252 = add nsw i32 %1251, 1
  store i32 %1252, ptr %11, align 4, !tbaa !12
  br label %1118, !llvm.loop !47

1253:                                             ; preds = %1118
  br label %1254

1254:                                             ; preds = %1253
  %1255 = load i32, ptr %18, align 4, !tbaa !12
  %1256 = add nsw i32 %1255, -1
  store i32 %1256, ptr %18, align 4, !tbaa !12
  br label %950, !llvm.loop !48

1257:                                             ; preds = %950
  %1258 = load ptr, ptr %5, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.controldef, ptr %1258, i32 0, i32 1
  %1260 = load i32, ptr %1259, align 4, !tbaa !33
  %1261 = and i32 %1260, 8
  %1262 = icmp ne i32 %1261, 0
  br i1 %1262, label %1263, label %1313

1263:                                             ; preds = %1257
  %1264 = load i32, ptr %46, align 4, !tbaa !12
  %1265 = load i32, ptr %48, align 4, !tbaa !12
  %1266 = load i32, ptr %17, align 4, !tbaa !12
  %1267 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef %1264, i32 noundef %1265, i32 noundef %1266)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %1268

1268:                                             ; preds = %1288, %1263
  %1269 = load i32, ptr %9, align 4, !tbaa !12
  %1270 = load i32, ptr %16, align 4, !tbaa !12
  %1271 = icmp slt i32 %1269, %1270
  br i1 %1271, label %1272, label %1291

1272:                                             ; preds = %1268
  %1273 = load ptr, ptr %39, align 8, !tbaa !5
  %1274 = load i32, ptr %9, align 4, !tbaa !12
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds float, ptr %1273, i64 %1275
  %1277 = load float, ptr %1276, align 4, !tbaa !24
  %1278 = fpext float %1277 to double
  %1279 = load ptr, ptr %39, align 8, !tbaa !5
  %1280 = load i32, ptr %16, align 4, !tbaa !12
  %1281 = load i32, ptr %9, align 4, !tbaa !12
  %1282 = add nsw i32 %1280, %1281
  %1283 = sext i32 %1282 to i64
  %1284 = getelementptr inbounds float, ptr %1279, i64 %1283
  %1285 = load float, ptr %1284, align 4, !tbaa !24
  %1286 = fpext float %1285 to double
  %1287 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %1278, double noundef %1286)
  br label %1288

1288:                                             ; preds = %1272
  %1289 = load i32, ptr %9, align 4, !tbaa !12
  %1290 = add nsw i32 %1289, 1
  store i32 %1290, ptr %9, align 4, !tbaa !12
  br label %1268, !llvm.loop !49

1291:                                             ; preds = %1268
  %1292 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %1293 = load i32, ptr %16, align 4, !tbaa !12
  %1294 = load ptr, ptr %39, align 8, !tbaa !5
  %1295 = load ptr, ptr %7, align 8, !tbaa !5
  %1296 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 0
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %1293, ptr noundef %1294, ptr noundef %1295, ptr noundef %1296)
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %1297

1297:                                             ; preds = %1308, %1291
  %1298 = load i32, ptr %9, align 4, !tbaa !12
  %1299 = load i32, ptr %16, align 4, !tbaa !12
  %1300 = icmp slt i32 %1298, %1299
  br i1 %1300, label %1301, label %1311

1301:                                             ; preds = %1297
  %1302 = load i32, ptr %9, align 4, !tbaa !12
  %1303 = sext i32 %1302 to i64
  %1304 = getelementptr inbounds [16 x float], ptr %51, i64 0, i64 %1303
  %1305 = load float, ptr %1304, align 4, !tbaa !24
  %1306 = fpext float %1305 to double
  %1307 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %1306)
  br label %1308

1308:                                             ; preds = %1301
  %1309 = load i32, ptr %9, align 4, !tbaa !12
  %1310 = add nsw i32 %1309, 1
  store i32 %1310, ptr %9, align 4, !tbaa !12
  br label %1297, !llvm.loop !50

1311:                                             ; preds = %1297
  %1312 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  br label %1313

1313:                                             ; preds = %1311, %1257
  %1314 = load i32, ptr %46, align 4, !tbaa !12
  %1315 = load ptr, ptr %6, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.graphdef, ptr %1315, i32 0, i32 12
  store i32 %1314, ptr %1316, align 8, !tbaa !32
  %1317 = load i32, ptr %17, align 4, !tbaa !12
  %1318 = load ptr, ptr %6, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.graphdef, ptr %1318, i32 0, i32 16
  store i32 %1317, ptr %1319, align 8, !tbaa !38
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %1320

1320:                                             ; preds = %1335, %1313
  %1321 = load i32, ptr %9, align 4, !tbaa !12
  %1322 = load i32, ptr %16, align 4, !tbaa !12
  %1323 = icmp slt i32 %1321, %1322
  br i1 %1323, label %1324, label %1338

1324:                                             ; preds = %1320
  %1325 = load ptr, ptr %5, align 8, !tbaa !5
  %1326 = load i32, ptr %9, align 4, !tbaa !12
  %1327 = sext i32 %1326 to i64
  %1328 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %1327
  %1329 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1328, i64 0, i64 0
  call void @__PQueueFree(ptr noundef %1325, ptr noundef %1329)
  %1330 = load ptr, ptr %5, align 8, !tbaa !5
  %1331 = load i32, ptr %9, align 4, !tbaa !12
  %1332 = sext i32 %1331 to i64
  %1333 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %43, i64 0, i64 %1332
  %1334 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1333, i64 0, i64 1
  call void @__PQueueFree(ptr noundef %1330, ptr noundef %1334)
  br label %1335

1335:                                             ; preds = %1324
  %1336 = load i32, ptr %9, align 4, !tbaa !12
  %1337 = add nsw i32 %1336, 1
  store i32 %1337, ptr %9, align 4, !tbaa !12
  br label %1320, !llvm.loop !51

1338:                                             ; preds = %1320
  %1339 = load ptr, ptr %5, align 8, !tbaa !5
  %1340 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %1339, i32 noundef %1340)
  %1341 = load ptr, ptr %5, align 8, !tbaa !5
  %1342 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %1341, i32 noundef %1342)
  %1343 = load ptr, ptr %5, align 8, !tbaa !5
  %1344 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %1343, i32 noundef %1344)
  %1345 = load ptr, ptr %5, align 8, !tbaa !5
  %1346 = load i32, ptr %15, align 4, !tbaa !12
  call void @__idxwspacefree(ptr noundef %1345, i32 noundef %1346)
  %1347 = load ptr, ptr %5, align 8, !tbaa !5
  %1348 = load i32, ptr %16, align 4, !tbaa !12
  %1349 = mul nsw i32 2, %1348
  call void @fwspacefree(ptr noundef %1347, i32 noundef %1349)
  %1350 = load ptr, ptr %5, align 8, !tbaa !5
  %1351 = load i32, ptr %16, align 4, !tbaa !12
  %1352 = mul nsw i32 2, %1351
  call void @fwspacefree(ptr noundef %1350, i32 noundef %1352)
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 2048, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 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
}

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

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

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

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

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

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

declare ptr @__idxset(i32 noundef, 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 void @__SelectQueue3(i32 noundef, ptr noundef, ptr noundef, ptr 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 @__IsBetter2wayBalance(i32 noundef, ptr noundef, ptr noundef, ptr 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

declare void @fwspacefree(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 184}
!16 = !{!10, !6, i64 48}
!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, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27}
!30 = distinct !{!30, !27}
!31 = distinct !{!31, !27}
!32 = !{!10, !11, i64 88}
!33 = !{!34, !11, i64 4}
!34 = !{!"controldef", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !25, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !35, i64 48, !36, i64 104, !36, i64 112, !36, i64 120, !36, i64 128, !36, i64 136, !36, i64 144, !36, i64 152, !36, i64 160, !36, i64 168, !36, i64 176, !36, i64 184, !36, i64 192, !36, i64 200, !36, i64 208, !36, i64 216, !36, i64 224}
!35 = !{!"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}
!36 = !{!"double", !7, i64 0}
!37 = distinct !{!37, !27}
!38 = !{!10, !11, i64 112}
!39 = distinct !{!39, !27}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = distinct !{!42, !27}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}
!45 = distinct !{!45, !27}
!46 = distinct !{!46, !27}
!47 = distinct !{!47, !27}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}
!50 = distinct !{!50, !27}
!51 = distinct !{!51, !27}


; 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 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @__MocGeneral2WayBalance2(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #2 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca [16 x float], align 16
  %8 = alloca [16 x float], align 16
  %9 = alloca [16 x float], align 16
  %10 = alloca [16 x [2 x %struct.PQueueType]], align 16
  %11 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #5
  %12 = getelementptr inbounds i8, ptr %1, i64 16
  %13 = load i32, ptr %12, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %1, i64 176
  %15 = load i32, ptr %14, align 8, !tbaa !11
  %16 = getelementptr inbounds i8, ptr %1, i64 24
  %17 = load ptr, ptr %16, align 8, !tbaa !12
  %18 = getelementptr inbounds i8, ptr %1, i64 184
  %19 = load ptr, ptr %18, align 8, !tbaa !13
  %20 = getelementptr inbounds i8, ptr %1, i64 48
  %21 = load ptr, ptr %20, align 8, !tbaa !14
  %22 = getelementptr inbounds i8, ptr %1, i64 56
  %23 = load ptr, ptr %22, align 8, !tbaa !15
  %24 = getelementptr inbounds i8, ptr %1, i64 96
  %25 = load ptr, ptr %24, align 8, !tbaa !16
  %26 = getelementptr inbounds i8, ptr %1, i64 136
  %27 = load ptr, ptr %26, align 8, !tbaa !17
  %28 = getelementptr inbounds i8, ptr %1, i64 144
  %29 = load ptr, ptr %28, align 8, !tbaa !18
  %30 = getelementptr inbounds i8, ptr %1, i64 192
  %31 = load ptr, ptr %30, align 8, !tbaa !19
  %32 = getelementptr inbounds i8, ptr %1, i64 120
  %33 = load ptr, ptr %32, align 8, !tbaa !20
  %34 = getelementptr inbounds i8, ptr %1, i64 128
  %35 = load ptr, ptr %34, align 8, !tbaa !21
  %36 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %13) #5
  %37 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %13) #5
  %38 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %13) #5
  %39 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %13) #5
  %40 = sitofp i32 %13 to double
  %41 = fmul double %40, 1.000000e-02
  %42 = fcmp oge double %41, 1.500000e+01
  %43 = select i1 %42, double %41, double 1.500000e+01
  %.inv = fcmp oge double %43, 1.000000e+02
  %44 = select i1 %.inv, double 1.000000e+02, double %43
  %45 = fptosi double %44 to i32
  %46 = shl nsw i32 %15, 1
  %47 = tail call ptr @__fwspacemalloc(ptr noundef %0, i32 noundef %46) #5
  %48 = tail call ptr @__fwspacemalloc(ptr noundef %0, i32 noundef %46) #5
  %49 = icmp sgt i32 %15, 0
  br i1 %49, label %.preheader521.us.preheader, label %.preheader519

.preheader521.us.preheader:                       ; preds = %4
  %50 = zext nneg i32 %15 to i64
  %min.iters.check = icmp ult i32 %15, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader521.us.preheader
  %51 = shl nuw nsw i64 %50, 2
  %scevgep = getelementptr i8, ptr %48, i64 %51
  %scevgep731 = getelementptr i8, ptr %47, i64 %51
  %scevgep732 = getelementptr i8, ptr %2, i64 4
  %scevgep733 = getelementptr i8, ptr %3, i64 %51
  %bound0 = icmp ult ptr %48, %scevgep731
  %bound1 = icmp ult ptr %47, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0734 = icmp ult ptr %48, %scevgep732
  %bound1735 = icmp ugt ptr %scevgep, %2
  %found.conflict736 = and i1 %bound0734, %bound1735
  %conflict.rdx = or i1 %found.conflict, %found.conflict736
  %bound0737 = icmp ult ptr %48, %scevgep733
  %bound1738 = icmp ugt ptr %scevgep, %3
  %found.conflict739 = and i1 %bound0737, %bound1738
  %conflict.rdx740 = or i1 %conflict.rdx, %found.conflict739
  %bound0741 = icmp ult ptr %47, %scevgep732
  %bound1742 = icmp ugt ptr %scevgep731, %2
  %found.conflict743 = and i1 %bound0741, %bound1742
  %conflict.rdx744 = or i1 %conflict.rdx740, %found.conflict743
  %bound0745 = icmp ult ptr %47, %scevgep733
  %bound1746 = icmp ugt ptr %scevgep731, %3
  %found.conflict747 = and i1 %bound0745, %bound1746
  %conflict.rdx748 = or i1 %conflict.rdx744, %found.conflict747
  br i1 %conflict.rdx748, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %50, 2147483644
  %52 = load float, ptr %2, align 4, !tbaa !22, !alias.scope !24
  %broadcast.splatinsert = insertelement <4 x float> poison, float %52, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %53 = load float, ptr %2, align 4, !tbaa !22, !alias.scope !24
  %broadcast.splatinsert749 = insertelement <4 x float> poison, float %53, i64 0
  %broadcast.splat750 = shufflevector <4 x float> %broadcast.splatinsert749, <4 x float> poison, <4 x i32> zeroinitializer
  %54 = fpext <4 x float> %broadcast.splat750 to <4 x double>
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %55 = getelementptr inbounds float, ptr %3, i64 %index
  %wide.load = load <4 x float>, ptr %55, align 4, !tbaa !22, !alias.scope !27
  %56 = fmul <4 x float> %broadcast.splat, %wide.load
  %57 = getelementptr inbounds float, ptr %48, i64 %index
  store <4 x float> %56, ptr %57, align 4, !tbaa !22, !alias.scope !29, !noalias !31
  %wide.load751 = load <4 x float>, ptr %55, align 4, !tbaa !22, !alias.scope !27
  %58 = fpext <4 x float> %wide.load751 to <4 x double>
  %59 = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %58
  %60 = fmul <4 x double> %59, %54
  %61 = fptrunc <4 x double> %60 to <4 x float>
  %62 = getelementptr inbounds float, ptr %47, i64 %index
  store <4 x float> %61, ptr %62, align 4, !tbaa !22, !alias.scope !33, !noalias !34
  %index.next = add nuw i64 %index, 4
  %63 = icmp eq i64 %index.next, %n.vec
  br i1 %63, label %middle.block, label %vector.body, !llvm.loop !35

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

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %64 = load float, ptr %2, align 4, !tbaa !22
  %65 = getelementptr inbounds float, ptr %3, i64 %indvars.iv
  %66 = load float, ptr %65, align 4, !tbaa !22
  %67 = fmul float %64, %66
  %68 = getelementptr inbounds float, ptr %48, i64 %indvars.iv
  store float %67, ptr %68, align 4, !tbaa !22
  %69 = load float, ptr %2, align 4, !tbaa !22
  %70 = fpext float %69 to double
  %71 = load float, ptr %65, align 4, !tbaa !22
  %72 = fpext float %71 to double
  %73 = fdiv double 1.000000e+00, %72
  %74 = fmul double %73, %70
  %75 = fptrunc double %74 to float
  %76 = getelementptr inbounds float, ptr %47, i64 %indvars.iv
  store float %75, ptr %76, align 4, !tbaa !22
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %50
  br i1 %exitcond.not, label %._crit_edge.us, label %scalar.ph, !llvm.loop !39

._crit_edge.us:                                   ; preds = %scalar.ph, %middle.block
  %77 = getelementptr inbounds i8, ptr %2, i64 4
  %min.iters.check780 = icmp ult i32 %15, 4
  br i1 %min.iters.check780, label %scalar.ph779.preheader, label %vector.memcheck752

vector.memcheck752:                               ; preds = %._crit_edge.us
  %78 = shl nuw nsw i64 %50, 2
  %scevgep753 = getelementptr i8, ptr %48, i64 %78
  %79 = shl nuw nsw i64 %50, 3
  %scevgep754 = getelementptr i8, ptr %48, i64 %79
  %scevgep755 = getelementptr i8, ptr %47, i64 %78
  %scevgep756 = getelementptr i8, ptr %47, i64 %79
  %scevgep757 = getelementptr i8, ptr %2, i64 8
  %bound0759 = icmp ult ptr %scevgep753, %scevgep756
  %bound1760 = icmp ult ptr %scevgep755, %scevgep754
  %found.conflict761 = and i1 %bound0759, %bound1760
  %bound0762 = icmp ult ptr %scevgep753, %scevgep757
  %bound1763 = icmp ult ptr %77, %scevgep754
  %found.conflict764 = and i1 %bound0762, %bound1763
  %conflict.rdx765 = or i1 %found.conflict761, %found.conflict764
  %bound0766 = icmp ult ptr %48, %3
  %bound1767 = icmp ugt ptr %scevgep754, %3
  %found.conflict768 = and i1 %bound0766, %bound1767
  %conflict.rdx769 = or i1 %conflict.rdx765, %found.conflict768
  %bound0770 = icmp ult ptr %scevgep755, %scevgep757
  %bound1771 = icmp ult ptr %77, %scevgep756
  %found.conflict772 = and i1 %bound0770, %bound1771
  %conflict.rdx773 = or i1 %conflict.rdx769, %found.conflict772
  %bound0774 = icmp ult ptr %47, %3
  %bound1775 = icmp ugt ptr %scevgep756, %3
  %found.conflict776 = and i1 %bound0774, %bound1775
  %conflict.rdx777 = or i1 %conflict.rdx773, %found.conflict776
  br i1 %conflict.rdx777, label %scalar.ph779.preheader, label %vector.ph781

vector.ph781:                                     ; preds = %vector.memcheck752
  %n.vec783 = and i64 %50, 2147483644
  %80 = load float, ptr %77, align 4, !tbaa !22, !alias.scope !40
  %broadcast.splatinsert788 = insertelement <4 x float> poison, float %80, i64 0
  %broadcast.splat789 = shufflevector <4 x float> %broadcast.splatinsert788, <4 x float> poison, <4 x i32> zeroinitializer
  %81 = load float, ptr %77, align 4, !tbaa !22, !alias.scope !40
  %broadcast.splatinsert790 = insertelement <4 x float> poison, float %81, i64 0
  %broadcast.splat791 = shufflevector <4 x float> %broadcast.splatinsert790, <4 x float> poison, <4 x i32> zeroinitializer
  %82 = fpext <4 x float> %broadcast.splat791 to <4 x double>
  br label %vector.body785

vector.body785:                                   ; preds = %vector.body785, %vector.ph781
  %index786 = phi i64 [ 0, %vector.ph781 ], [ %index.next793, %vector.body785 ]
  %83 = getelementptr inbounds float, ptr %3, i64 %index786
  %wide.load787 = load <4 x float>, ptr %83, align 4, !tbaa !22, !alias.scope !43
  %84 = fmul <4 x float> %broadcast.splat789, %wide.load787
  %85 = add nuw nsw i64 %index786, %50
  %86 = getelementptr inbounds float, ptr %48, i64 %85
  store <4 x float> %84, ptr %86, align 4, !tbaa !22, !alias.scope !45, !noalias !47
  %wide.load792 = load <4 x float>, ptr %83, align 4, !tbaa !22, !alias.scope !43
  %87 = fpext <4 x float> %wide.load792 to <4 x double>
  %88 = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %87
  %89 = fmul <4 x double> %88, %82
  %90 = fptrunc <4 x double> %89 to <4 x float>
  %91 = getelementptr inbounds float, ptr %47, i64 %85
  store <4 x float> %90, ptr %91, align 4, !tbaa !22, !alias.scope !49, !noalias !50
  %index.next793 = add nuw i64 %index786, 4
  %92 = icmp eq i64 %index.next793, %n.vec783
  br i1 %92, label %middle.block778, label %vector.body785, !llvm.loop !51

middle.block778:                                  ; preds = %vector.body785
  %cmp.n794 = icmp eq i64 %n.vec783, %50
  br i1 %cmp.n794, label %.preheader520, label %scalar.ph779.preheader

scalar.ph779.preheader:                           ; preds = %middle.block778, %vector.memcheck752, %._crit_edge.us
  %indvars.iv.1.ph = phi i64 [ 0, %vector.memcheck752 ], [ 0, %._crit_edge.us ], [ %n.vec783, %middle.block778 ]
  br label %scalar.ph779

scalar.ph779:                                     ; preds = %scalar.ph779.preheader, %scalar.ph779
  %indvars.iv.1 = phi i64 [ %indvars.iv.next.1, %scalar.ph779 ], [ %indvars.iv.1.ph, %scalar.ph779.preheader ]
  %93 = load float, ptr %77, align 4, !tbaa !22
  %94 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.1
  %95 = load float, ptr %94, align 4, !tbaa !22
  %96 = fmul float %93, %95
  %97 = add nuw nsw i64 %indvars.iv.1, %50
  %98 = getelementptr inbounds float, ptr %48, i64 %97
  store float %96, ptr %98, align 4, !tbaa !22
  %99 = load float, ptr %77, align 4, !tbaa !22
  %100 = fpext float %99 to double
  %101 = load float, ptr %94, align 4, !tbaa !22
  %102 = fpext float %101 to double
  %103 = fdiv double 1.000000e+00, %102
  %104 = fmul double %103, %100
  %105 = fptrunc double %104 to float
  %106 = getelementptr inbounds float, ptr %47, i64 %97
  store float %105, ptr %106, align 4, !tbaa !22
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.1, 1
  %exitcond.1.not = icmp eq i64 %indvars.iv.next.1, %50
  br i1 %exitcond.1.not, label %.preheader520, label %scalar.ph779, !llvm.loop !52

.preheader520:                                    ; preds = %scalar.ph779, %middle.block778
  br i1 %49, label %.lr.ph.preheader, label %.preheader519

.lr.ph.preheader:                                 ; preds = %.preheader520
  %wide.trip.count632 = zext nneg i32 %15 to i64
  br label %.lr.ph

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

.lr.ph535.preheader:                              ; preds = %.preheader519
  %108 = sext i32 %15 to i64
  %wide.trip.count637 = zext nneg i32 %13 to i64
  br label %.lr.ph535

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv629 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next630, %.lr.ph ]
  %109 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %indvars.iv629
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %109, i32 noundef %13, i32 noundef 501) #5
  %110 = getelementptr inbounds i8, ptr %109, i64 64
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %110, i32 noundef %13, i32 noundef 501) #5
  %indvars.iv.next630 = add nuw nsw i64 %indvars.iv629, 1
  %exitcond633.not = icmp eq i64 %indvars.iv.next630, %wide.trip.count632
  br i1 %exitcond633.not, label %.preheader519, label %.lr.ph, !llvm.loop !53

.lr.ph535:                                        ; preds = %.lr.ph535.preheader, %.lr.ph535
  %indvars.iv634 = phi i64 [ 0, %.lr.ph535.preheader ], [ %indvars.iv.next635, %.lr.ph535 ]
  %111 = mul nsw i64 %indvars.iv634, %108
  %112 = getelementptr inbounds float, ptr %19, i64 %111
  %113 = call i32 @__samax(i32 noundef %15, ptr noundef %112) #5
  %114 = getelementptr inbounds i32, ptr %39, i64 %indvars.iv634
  store i32 %113, ptr %114, align 4, !tbaa !54
  %indvars.iv.next635 = add nuw nsw i64 %indvars.iv634, 1
  %exitcond638.not = icmp eq i64 %indvars.iv.next635, %wide.trip.count637
  br i1 %exitcond638.not, label %._crit_edge, label %.lr.ph535, !llvm.loop !55

._crit_edge:                                      ; preds = %.lr.ph535, %.preheader519
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %7) #5
  br i1 %49, label %.lr.ph538.preheader, label %._crit_edge539

.lr.ph538.preheader:                              ; preds = %._crit_edge
  %115 = zext nneg i32 %15 to i64
  %116 = shl nuw nsw i64 %115, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %8, ptr nonnull align 16 %7, i64 %116, i1 false), !tbaa !22
  br label %._crit_edge539

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

122:                                              ; preds = %._crit_edge539
  %123 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  br i1 %49, label %.lr.ph542.preheader, label %._crit_edge547.critedge

.lr.ph542.preheader:                              ; preds = %122
  %124 = zext nneg i32 %15 to i64
  %invariant.gep = getelementptr inbounds float, ptr %31, i64 %124
  br label %.lr.ph542

.lr.ph542:                                        ; preds = %.lr.ph542.preheader, %.lr.ph542
  %indvars.iv642 = phi i64 [ 0, %.lr.ph542.preheader ], [ %indvars.iv.next643, %.lr.ph542 ]
  %125 = getelementptr inbounds float, ptr %31, i64 %indvars.iv642
  %126 = load float, ptr %125, align 4, !tbaa !22
  %127 = fpext float %126 to double
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv642
  %128 = load float, ptr %gep, align 4, !tbaa !22
  %129 = fpext float %128 to double
  %130 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %127, double noundef %129)
  %indvars.iv.next643 = add nuw nsw i64 %indvars.iv642, 1
  %exitcond646.not = icmp eq i64 %indvars.iv.next643, %124
  br i1 %exitcond646.not, label %._crit_edge543, label %.lr.ph542, !llvm.loop !61

._crit_edge543:                                   ; preds = %.lr.ph542
  %131 = load float, ptr %2, align 4, !tbaa !22
  %132 = fpext float %131 to double
  %133 = getelementptr inbounds i8, ptr %2, i64 4
  %134 = load float, ptr %133, align 4, !tbaa !22
  %135 = fpext float %134 to double
  %136 = load i32, ptr %12, align 8, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %1, i64 112
  %138 = load i32, ptr %137, align 8, !tbaa !62
  %139 = load i32, ptr %117, align 8, !tbaa !56
  %140 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, double noundef %132, double noundef %135, i32 noundef %136, i32 noundef %138, i32 noundef %139)
  br i1 %49, label %.lr.ph546.preheader, label %._crit_edge547

.lr.ph546.preheader:                              ; preds = %._crit_edge543
  %wide.trip.count650 = zext nneg i32 %15 to i64
  br label %.lr.ph546

.lr.ph546:                                        ; preds = %.lr.ph546.preheader, %.lr.ph546
  %indvars.iv647 = phi i64 [ 0, %.lr.ph546.preheader ], [ %indvars.iv.next648, %.lr.ph546 ]
  %141 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv647
  %142 = load float, ptr %141, align 4, !tbaa !22
  %143 = fpext float %142 to double
  %144 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %143)
  %indvars.iv.next648 = add nuw nsw i64 %indvars.iv647, 1
  %exitcond651.not = icmp eq i64 %indvars.iv.next648, %wide.trip.count650
  br i1 %exitcond651.not, label %._crit_edge547, label %.lr.ph546, !llvm.loop !63

._crit_edge547.critedge:                          ; preds = %122
  %145 = load float, ptr %2, align 4, !tbaa !22
  %146 = fpext float %145 to double
  %147 = getelementptr inbounds i8, ptr %2, i64 4
  %148 = load float, ptr %147, align 4, !tbaa !22
  %149 = fpext float %148 to double
  %150 = load i32, ptr %12, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %1, i64 112
  %152 = load i32, ptr %151, align 8, !tbaa !62
  %153 = load i32, ptr %117, align 8, !tbaa !56
  %154 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, double noundef %146, double noundef %149, i32 noundef %150, i32 noundef %152, i32 noundef %153)
  br label %._crit_edge547

._crit_edge547:                                   ; preds = %.lr.ph546, %._crit_edge547.critedge, %._crit_edge543
  %155 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %156

156:                                              ; preds = %._crit_edge547, %._crit_edge539
  %157 = call ptr @__idxset(i32 noundef %13, i32 noundef -1, ptr noundef %36) #5
  %158 = getelementptr inbounds i8, ptr %1, i64 112
  %159 = load i32, ptr %158, align 8, !tbaa !62
  call void @__RandomPermute(i32 noundef %13, ptr noundef %38, i32 noundef 1) #5
  br i1 %107, label %.lr.ph550.preheader, label %.preheader

.lr.ph550.preheader:                              ; preds = %156
  %wide.trip.count655 = zext nneg i32 %13 to i64
  br label %.lr.ph550

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

.lr.ph573:                                        ; preds = %.preheader517
  %160 = zext i32 %15 to i64
  %161 = shl nuw nsw i64 %160, 2
  %wide.trip.count676 = zext nneg i32 %13 to i64
  %invariant.gep721 = getelementptr inbounds float, ptr %31, i64 %160
  br label %178

.lr.ph550:                                        ; preds = %.lr.ph550.preheader, %.lr.ph550
  %indvars.iv652 = phi i64 [ 0, %.lr.ph550.preheader ], [ %indvars.iv.next653, %.lr.ph550 ]
  %162 = getelementptr inbounds i32, ptr %38, i64 %indvars.iv652
  %163 = load i32, ptr %162, align 4, !tbaa !54
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i32, ptr %39, i64 %164
  %166 = load i32, ptr %165, align 4, !tbaa !54
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds i32, ptr %25, i64 %164
  %169 = load i32, ptr %168, align 4, !tbaa !54
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %167, i64 %170
  %172 = getelementptr inbounds i32, ptr %29, i64 %164
  %173 = load i32, ptr %172, align 4, !tbaa !54
  %174 = getelementptr inbounds i32, ptr %27, i64 %164
  %175 = load i32, ptr %174, align 4, !tbaa !54
  %176 = sub nsw i32 %173, %175
  %177 = call i32 @__PQueueInsert(ptr noundef nonnull %171, i32 noundef %163, i32 noundef %176) #5
  %indvars.iv.next653 = add nuw nsw i64 %indvars.iv652, 1
  %exitcond656.not = icmp eq i64 %indvars.iv.next653, %wide.trip.count655
  br i1 %exitcond656.not, label %.preheader517, label %.lr.ph550, !llvm.loop !64

178:                                              ; preds = %.lr.ph573, %._crit_edge566
  %indvars.iv673 = phi i64 [ 0, %.lr.ph573 ], [ %indvars.iv.next674, %._crit_edge566 ]
  %.0470572 = phi i32 [ -1, %.lr.ph573 ], [ %.1471, %._crit_edge566 ]
  %.0472571 = phi i32 [ %118, %.lr.ph573 ], [ %209, %._crit_edge566 ]
  %.0473570 = phi i32 [ %118, %.lr.ph573 ], [ %.1474, %._crit_edge566 ]
  %.0479568 = phi i32 [ %159, %.lr.ph573 ], [ %.3482.lcssa, %._crit_edge566 ]
  %179 = call i32 @__AreAllBelow(i32 noundef %15, ptr noundef nonnull %8, ptr noundef %3) #5
  %.not501 = icmp eq i32 %179, 0
  %180 = trunc nuw nsw i64 %indvars.iv673 to i32
  br i1 %.not501, label %181, label %.loopexit518

181:                                              ; preds = %178
  call void @__SelectQueue3(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %10, ptr noundef %48)
  %182 = load i32, ptr %5, align 4, !tbaa !54
  %183 = add nsw i32 %182, 1
  %184 = srem i32 %183, 2
  %185 = icmp eq i32 %182, -1
  br i1 %185, label %.loopexit518, label %186

186:                                              ; preds = %181
  %187 = load i32, ptr %6, align 4, !tbaa !54
  %188 = sext i32 %187 to i64
  %189 = sext i32 %182 to i64
  %190 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %188, i64 %189
  %191 = call i32 @__PQueueGetMax(ptr noundef nonnull %190) #5
  %192 = icmp eq i32 %191, -1
  br i1 %192, label %.loopexit518, label %193

193:                                              ; preds = %186
  %194 = mul nsw i32 %191, %15
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds float, ptr %19, i64 %195
  %197 = mul nsw i32 %184, %15
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds float, ptr %31, i64 %198
  call void @__saxpy(i32 noundef %15, float noundef 1.000000e+00, ptr noundef %196, i32 noundef 1, ptr noundef %199, i32 noundef 1) #5
  %200 = load i32, ptr %5, align 4, !tbaa !54
  %201 = mul nsw i32 %200, %15
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds float, ptr %31, i64 %202
  call void @__saxpy(i32 noundef %15, float noundef -1.000000e+00, ptr noundef %196, i32 noundef 1, ptr noundef %203, i32 noundef 1) #5
  %204 = sext i32 %191 to i64
  %205 = getelementptr inbounds i32, ptr %29, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !54
  %207 = getelementptr inbounds i32, ptr %27, i64 %204
  %208 = load i32, ptr %207, align 4, !tbaa !54
  %.neg = sub i32 %208, %206
  %209 = add i32 %.neg, %.0472571
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %9) #5
  %210 = call i32 @__IsBetter2wayBalance(i32 noundef %15, ptr noundef nonnull %9, ptr noundef nonnull %8, ptr noundef %3) #5
  %.not502 = icmp eq i32 %210, 0
  br i1 %.not502, label %211, label %214

211:                                              ; preds = %193
  %212 = call i32 @__IsBetter2wayBalance(i32 noundef %15, ptr noundef nonnull %9, ptr noundef nonnull %7, ptr noundef %3) #5
  %.not503 = icmp ne i32 %212, 0
  %213 = icmp slt i32 %209, %.0473570
  %or.cond = select i1 %.not503, i1 %213, i1 false
  br i1 %or.cond, label %214, label %215

214:                                              ; preds = %211, %193
  br i1 %49, label %.lr.ph553.preheader, label %.loopexit516

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

215:                                              ; preds = %211
  %216 = sub nsw i32 %180, %.0470572
  %217 = icmp sgt i32 %216, %45
  br i1 %217, label %218, label %.loopexit516

218:                                              ; preds = %215
  %219 = load i32, ptr %5, align 4, !tbaa !54
  %220 = mul nsw i32 %219, %15
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds float, ptr %31, i64 %221
  call void @__saxpy(i32 noundef %15, float noundef 1.000000e+00, ptr noundef %196, i32 noundef 1, ptr noundef %222, i32 noundef 1) #5
  call void @__saxpy(i32 noundef %15, float noundef -1.000000e+00, ptr noundef %196, i32 noundef 1, ptr noundef %199, i32 noundef 1) #5
  br label %.loopexit518

.loopexit516:                                     ; preds = %.lr.ph553.preheader, %214, %215
  %.1474 = phi i32 [ %.0473570, %215 ], [ %209, %214 ], [ %209, %.lr.ph553.preheader ]
  %.1471 = phi i32 [ %.0470572, %215 ], [ %180, %214 ], [ %180, %.lr.ph553.preheader ]
  %223 = getelementptr inbounds i32, ptr %25, i64 %204
  store i32 %184, ptr %223, align 4, !tbaa !54
  %224 = getelementptr inbounds i32, ptr %36, i64 %204
  store i32 %180, ptr %224, align 4, !tbaa !54
  %225 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv673
  store i32 %191, ptr %225, align 4, !tbaa !54
  %226 = load i32, ptr %119, align 4, !tbaa !57
  %227 = and i32 %226, 32
  %.not504 = icmp eq i32 %227, 0
  br i1 %.not504, label %250, label %228

228:                                              ; preds = %.loopexit516
  %229 = load i32, ptr %5, align 4, !tbaa !54
  %230 = load i32, ptr %6, align 4, !tbaa !54
  %231 = load i32, ptr %205, align 4, !tbaa !54
  %232 = load i32, ptr %207, align 4, !tbaa !54
  %233 = sub nsw i32 %231, %232
  %234 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %191, i32 noundef %229, i32 noundef %230, i32 noundef %233, i32 noundef %209)
  br i1 %49, label %.lr.ph556, label %._crit_edge561.critedge

.lr.ph556:                                        ; preds = %228, %.lr.ph556
  %indvars.iv660 = phi i64 [ %indvars.iv.next661, %.lr.ph556 ], [ 0, %228 ]
  %235 = getelementptr inbounds float, ptr %31, i64 %indvars.iv660
  %236 = load float, ptr %235, align 4, !tbaa !22
  %237 = fpext float %236 to double
  %gep722 = getelementptr inbounds float, ptr %invariant.gep721, i64 %indvars.iv660
  %238 = load float, ptr %gep722, align 4, !tbaa !22
  %239 = fpext float %238 to double
  %240 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %237, double noundef %239)
  %indvars.iv.next661 = add nuw nsw i64 %indvars.iv660, 1
  %exitcond664.not = icmp eq i64 %indvars.iv.next661, %160
  br i1 %exitcond664.not, label %._crit_edge557, label %.lr.ph556, !llvm.loop !65

._crit_edge557:                                   ; preds = %.lr.ph556
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %11) #5
  %241 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  br i1 %49, label %.lr.ph560, label %._crit_edge561

.lr.ph560:                                        ; preds = %._crit_edge557, %.lr.ph560
  %indvars.iv665 = phi i64 [ %indvars.iv.next666, %.lr.ph560 ], [ 0, %._crit_edge557 ]
  %242 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %indvars.iv665
  %243 = load float, ptr %242, align 4, !tbaa !22
  %244 = fpext float %243 to double
  %245 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %244)
  %indvars.iv.next666 = add nuw nsw i64 %indvars.iv665, 1
  %exitcond669.not = icmp eq i64 %indvars.iv.next666, %160
  br i1 %exitcond669.not, label %._crit_edge561, label %.lr.ph560, !llvm.loop !66

._crit_edge561.critedge:                          ; preds = %228
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %11) #5
  %246 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  br label %._crit_edge561

._crit_edge561:                                   ; preds = %.lr.ph560, %._crit_edge561.critedge, %._crit_edge557
  %247 = zext i32 %.1471 to i64
  %248 = icmp eq i64 %indvars.iv673, %247
  %.str.7..str.8 = select i1 %248, ptr @.str.7, ptr @.str.8
  %249 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.7..str.8)
  br label %250

250:                                              ; preds = %._crit_edge561, %.loopexit516
  %251 = load i32, ptr %207, align 4, !tbaa !54
  %252 = load i32, ptr %205, align 4, !tbaa !54
  store i32 %252, ptr %207, align 4, !tbaa !54
  store i32 %251, ptr %205, align 4, !tbaa !54
  %253 = icmp eq i32 %251, 0
  br i1 %253, label %254, label %thread-pre-split

254:                                              ; preds = %250
  %255 = getelementptr inbounds i32, ptr %33, i64 %204
  %256 = load i32, ptr %255, align 4, !tbaa !54
  %.not505 = icmp eq i32 %256, -1
  br i1 %.not505, label %thread-pre-split.thread, label %257

257:                                              ; preds = %254
  %258 = getelementptr inbounds i32, ptr %17, i64 %204
  %259 = load i32, ptr %258, align 4, !tbaa !54
  %260 = getelementptr i8, ptr %258, i64 4
  %261 = load i32, ptr %260, align 4, !tbaa !54
  %262 = icmp slt i32 %259, %261
  br i1 %262, label %263, label %thread-pre-split.thread

263:                                              ; preds = %257
  %264 = add nsw i32 %.0479568, -1
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds i32, ptr %35, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !54
  %268 = sext i32 %256 to i64
  %269 = getelementptr inbounds i32, ptr %35, i64 %268
  store i32 %267, ptr %269, align 4, !tbaa !54
  %270 = load i32, ptr %255, align 4, !tbaa !54
  %271 = sext i32 %267 to i64
  %272 = getelementptr inbounds i32, ptr %33, i64 %271
  store i32 %270, ptr %272, align 4, !tbaa !54
  store i32 -1, ptr %255, align 4, !tbaa !54
  %.pr.pre = load i32, ptr %205, align 4, !tbaa !54
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %263, %250
  %273 = phi i32 [ %251, %250 ], [ %.pr.pre, %263 ]
  %.1480 = phi i32 [ %.0479568, %250 ], [ %264, %263 ]
  %274 = icmp sgt i32 %273, 0
  br i1 %274, label %275, label %thread-pre-split.thread

275:                                              ; preds = %thread-pre-split
  %276 = getelementptr inbounds i32, ptr %33, i64 %204
  %277 = load i32, ptr %276, align 4, !tbaa !54
  %278 = icmp eq i32 %277, -1
  br i1 %278, label %279, label %thread-pre-split.thread

279:                                              ; preds = %275
  %280 = sext i32 %.1480 to i64
  %281 = getelementptr inbounds i32, ptr %35, i64 %280
  store i32 %191, ptr %281, align 4, !tbaa !54
  %282 = add nsw i32 %.1480, 1
  store i32 %.1480, ptr %276, align 4, !tbaa !54
  br label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %257, %254, %279, %275, %thread-pre-split
  %.2481 = phi i32 [ %282, %279 ], [ %.1480, %275 ], [ %.1480, %thread-pre-split ], [ %.0479568, %254 ], [ %.0479568, %257 ]
  %283 = getelementptr inbounds i32, ptr %17, i64 %204
  %284 = load i32, ptr %283, align 4, !tbaa !54
  %285 = getelementptr i8, ptr %283, i64 4
  %286 = load i32, ptr %285, align 4, !tbaa !54
  %287 = icmp slt i32 %284, %286
  br i1 %287, label %.lr.ph565.preheader, label %._crit_edge566

.lr.ph565.preheader:                              ; preds = %thread-pre-split.thread
  %288 = sext i32 %284 to i64
  br label %.lr.ph565

.lr.ph565:                                        ; preds = %.lr.ph565.preheader, %.thread
  %indvars.iv670 = phi i64 [ %288, %.lr.ph565.preheader ], [ %indvars.iv.next671, %.thread ]
  %.3482562 = phi i32 [ %.2481, %.lr.ph565.preheader ], [ %.4483, %.thread ]
  %289 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv670
  %290 = load i32, ptr %289, align 4, !tbaa !54
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %29, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !54
  %294 = getelementptr inbounds i32, ptr %27, i64 %291
  %295 = load i32, ptr %294, align 4, !tbaa !54
  %296 = getelementptr inbounds i32, ptr %25, i64 %291
  %297 = load i32, ptr %296, align 4, !tbaa !54
  %298 = icmp eq i32 %184, %297
  %299 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv670
  %300 = load i32, ptr %299, align 4, !tbaa !54
  %301 = sub nsw i32 0, %300
  %302 = select i1 %298, i32 %300, i32 %301
  %303 = add nsw i32 %302, %295
  store i32 %303, ptr %294, align 4, !tbaa !54
  %304 = load i32, ptr %292, align 4, !tbaa !54
  %305 = sub nsw i32 %304, %302
  store i32 %305, ptr %292, align 4, !tbaa !54
  %306 = getelementptr inbounds i32, ptr %36, i64 %291
  %307 = load i32, ptr %306, align 4, !tbaa !54
  %308 = icmp eq i32 %307, -1
  br i1 %308, label %309, label %320

309:                                              ; preds = %.lr.ph565
  %310 = sub nsw i32 %293, %295
  %311 = getelementptr inbounds i32, ptr %39, i64 %291
  %312 = load i32, ptr %311, align 4, !tbaa !54
  %313 = sext i32 %312 to i64
  %314 = load i32, ptr %296, align 4, !tbaa !54
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %313, i64 %315
  %317 = load i32, ptr %294, align 4, !tbaa !54
  %318 = sub nsw i32 %305, %317
  %319 = call i32 @__PQueueUpdate(ptr noundef nonnull %316, i32 noundef %290, i32 noundef %310, i32 noundef %318) #5
  %.pr511 = load i32, ptr %292, align 4, !tbaa !54
  br label %320

320:                                              ; preds = %309, %.lr.ph565
  %321 = phi i32 [ %.pr511, %309 ], [ %305, %.lr.ph565 ]
  %322 = icmp eq i32 %321, 0
  br i1 %322, label %323, label %336

323:                                              ; preds = %320
  %324 = getelementptr inbounds i32, ptr %33, i64 %291
  %325 = load i32, ptr %324, align 4, !tbaa !54
  %.not506 = icmp eq i32 %325, -1
  br i1 %.not506, label %.thread, label %326

326:                                              ; preds = %323
  %327 = add nsw i32 %.3482562, -1
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i32, ptr %35, i64 %328
  %330 = load i32, ptr %329, align 4, !tbaa !54
  %331 = sext i32 %325 to i64
  %332 = getelementptr inbounds i32, ptr %35, i64 %331
  store i32 %330, ptr %332, align 4, !tbaa !54
  %333 = load i32, ptr %324, align 4, !tbaa !54
  %334 = sext i32 %330 to i64
  %335 = getelementptr inbounds i32, ptr %33, i64 %334
  store i32 %333, ptr %335, align 4, !tbaa !54
  store i32 -1, ptr %324, align 4, !tbaa !54
  br label %.thread

336:                                              ; preds = %320
  %337 = icmp sgt i32 %321, 0
  br i1 %337, label %338, label %.thread

338:                                              ; preds = %336
  %339 = getelementptr inbounds i32, ptr %33, i64 %291
  %340 = load i32, ptr %339, align 4, !tbaa !54
  %341 = icmp eq i32 %340, -1
  br i1 %341, label %342, label %.thread

342:                                              ; preds = %338
  %343 = sext i32 %.3482562 to i64
  %344 = getelementptr inbounds i32, ptr %35, i64 %343
  store i32 %290, ptr %344, align 4, !tbaa !54
  %345 = add nsw i32 %.3482562, 1
  store i32 %.3482562, ptr %339, align 4, !tbaa !54
  br label %.thread

.thread:                                          ; preds = %323, %326, %342, %338, %336
  %.4483 = phi i32 [ %327, %326 ], [ %345, %342 ], [ %.3482562, %338 ], [ %.3482562, %336 ], [ %.3482562, %323 ]
  %indvars.iv.next671 = add nsw i64 %indvars.iv670, 1
  %346 = load i32, ptr %285, align 4, !tbaa !54
  %347 = sext i32 %346 to i64
  %348 = icmp slt i64 %indvars.iv.next671, %347
  br i1 %348, label %.lr.ph565, label %._crit_edge566, !llvm.loop !67

._crit_edge566:                                   ; preds = %.thread, %thread-pre-split.thread
  %.3482.lcssa = phi i32 [ %.2481, %thread-pre-split.thread ], [ %.4483, %.thread ]
  %indvars.iv.next674 = add nuw nsw i64 %indvars.iv673, 1
  %exitcond677.not = icmp eq i64 %indvars.iv.next674, %wide.trip.count676
  br i1 %exitcond677.not, label %.loopexit518, label %178, !llvm.loop !68

.loopexit518:                                     ; preds = %._crit_edge566, %178, %186, %181, %218
  %.0489529 = phi i32 [ %180, %218 ], [ %13, %._crit_edge566 ], [ %180, %178 ], [ %180, %186 ], [ %180, %181 ]
  %.0479527 = phi i32 [ %.0479568, %218 ], [ %.3482.lcssa, %._crit_edge566 ], [ %.0479568, %178 ], [ %.0479568, %186 ], [ %.0479568, %181 ]
  %.0473525 = phi i32 [ %.0473570, %218 ], [ %.1474, %._crit_edge566 ], [ %.0473570, %178 ], [ %.0473570, %186 ], [ %.0473570, %181 ]
  %.0470523 = phi i32 [ %.0470572, %218 ], [ %.1471, %._crit_edge566 ], [ %.0470572, %178 ], [ %.0470572, %186 ], [ %.0470572, %181 ]
  %.not618 = icmp eq i32 %.0489529, 0
  br i1 %.not618, label %.preheader, label %.lr.ph595.preheader

.lr.ph595.preheader:                              ; preds = %.loopexit518
  %wide.trip.count681 = zext i32 %.0489529 to i64
  %xtraiter = and i64 %wide.trip.count681, 3
  %349 = icmp ult i32 %.0489529, 4
  br i1 %349, label %.preheader.loopexit.unr-lcssa, label %.lr.ph595.preheader.new

.lr.ph595.preheader.new:                          ; preds = %.lr.ph595.preheader
  %unroll_iter = and i64 %wide.trip.count681, 4294967292
  br label %.lr.ph595

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

.lr.ph595.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph595.epil
  %indvars.iv678.epil = phi i64 [ %indvars.iv.next679.epil, %.lr.ph595.epil ], [ %indvars.iv678.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph595.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %350 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv678.epil
  %351 = load i32, ptr %350, align 4, !tbaa !54
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i32, ptr %36, i64 %352
  store i32 -1, ptr %353, align 4, !tbaa !54
  %indvars.iv.next679.epil = add nuw nsw i64 %indvars.iv678.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader.loopexit, label %.lr.ph595.epil, !llvm.loop !69

.preheader.loopexit:                              ; preds = %.lr.ph595.epil, %.preheader.loopexit.unr-lcssa
  %354 = add nsw i32 %.0489529, -1
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %156, %.preheader517, %.loopexit518
  %.0470523714 = phi i32 [ %.0470523, %.loopexit518 ], [ -1, %.preheader517 ], [ -1, %156 ], [ %.0470523, %.preheader.loopexit ]
  %.0473525713 = phi i32 [ %.0473525, %.loopexit518 ], [ %118, %.preheader517 ], [ %118, %156 ], [ %.0473525, %.preheader.loopexit ]
  %.0479527712 = phi i32 [ %.0479527, %.loopexit518 ], [ %159, %.preheader517 ], [ %159, %156 ], [ %.0479527, %.preheader.loopexit ]
  %.0489529711 = phi i32 [ -1, %.loopexit518 ], [ -1, %.preheader517 ], [ -1, %156 ], [ %354, %.preheader.loopexit ]
  %355 = icmp sgt i32 %.0489529711, %.0470523714
  br i1 %355, label %.lr.ph603.preheader, label %._crit_edge604

.lr.ph603.preheader:                              ; preds = %.preheader
  %356 = sext i32 %.0489529711 to i64
  %357 = sext i32 %.0470523714 to i64
  br label %.lr.ph603

.lr.ph595:                                        ; preds = %.lr.ph595, %.lr.ph595.preheader.new
  %indvars.iv678 = phi i64 [ 0, %.lr.ph595.preheader.new ], [ %indvars.iv.next679.3, %.lr.ph595 ]
  %niter = phi i64 [ 0, %.lr.ph595.preheader.new ], [ %niter.next.3, %.lr.ph595 ]
  %358 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv678
  %359 = load i32, ptr %358, align 4, !tbaa !54
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i32, ptr %36, i64 %360
  store i32 -1, ptr %361, align 4, !tbaa !54
  %indvars.iv.next679 = or disjoint i64 %indvars.iv678, 1
  %362 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next679
  %363 = load i32, ptr %362, align 4, !tbaa !54
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds i32, ptr %36, i64 %364
  store i32 -1, ptr %365, align 4, !tbaa !54
  %indvars.iv.next679.1 = or disjoint i64 %indvars.iv678, 2
  %366 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next679.1
  %367 = load i32, ptr %366, align 4, !tbaa !54
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %36, i64 %368
  store i32 -1, ptr %369, align 4, !tbaa !54
  %indvars.iv.next679.2 = or disjoint i64 %indvars.iv678, 3
  %370 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next679.2
  %371 = load i32, ptr %370, align 4, !tbaa !54
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds i32, ptr %36, i64 %372
  store i32 -1, ptr %373, align 4, !tbaa !54
  %indvars.iv.next679.3 = add nuw nsw i64 %indvars.iv678, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph595, !llvm.loop !71

.loopexit:                                        ; preds = %470, %.thread512
  %.7486.lcssa = phi i32 [ %.6485, %.thread512 ], [ %.9488, %470 ]
  %indvars.iv.next687 = add nsw i64 %indvars.iv686, -1
  %374 = icmp sgt i64 %indvars.iv.next687, %357
  br i1 %374, label %.lr.ph603, label %._crit_edge604, !llvm.loop !72

.lr.ph603:                                        ; preds = %.lr.ph603.preheader, %.loopexit
  %indvars.iv686 = phi i64 [ %356, %.lr.ph603.preheader ], [ %indvars.iv.next687, %.loopexit ]
  %.5484601 = phi i32 [ %.0479527712, %.lr.ph603.preheader ], [ %.7486.lcssa, %.loopexit ]
  %375 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv686
  %376 = load i32, ptr %375, align 4, !tbaa !54
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds i32, ptr %25, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !54
  %380 = add nsw i32 %379, 1
  %381 = srem i32 %380, 2
  store i32 %381, ptr %378, align 4, !tbaa !54
  %382 = getelementptr inbounds i32, ptr %27, i64 %377
  %383 = load i32, ptr %382, align 4, !tbaa !54
  %384 = getelementptr inbounds i32, ptr %29, i64 %377
  %385 = load i32, ptr %384, align 4, !tbaa !54
  store i32 %385, ptr %382, align 4, !tbaa !54
  store i32 %383, ptr %384, align 4, !tbaa !54
  %386 = icmp eq i32 %383, 0
  br i1 %386, label %387, label %406

387:                                              ; preds = %.lr.ph603
  %388 = getelementptr inbounds i32, ptr %33, i64 %377
  %389 = load i32, ptr %388, align 4, !tbaa !54
  %.not508 = icmp eq i32 %389, -1
  br i1 %.not508, label %.thread512, label %390

390:                                              ; preds = %387
  %391 = getelementptr inbounds i32, ptr %17, i64 %377
  %392 = load i32, ptr %391, align 4, !tbaa !54
  %393 = getelementptr i8, ptr %391, i64 4
  %394 = load i32, ptr %393, align 4, !tbaa !54
  %395 = icmp slt i32 %392, %394
  br i1 %395, label %396, label %.thread512

396:                                              ; preds = %390
  %397 = add nsw i32 %.5484601, -1
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %35, i64 %398
  %400 = load i32, ptr %399, align 4, !tbaa !54
  %401 = sext i32 %389 to i64
  %402 = getelementptr inbounds i32, ptr %35, i64 %401
  store i32 %400, ptr %402, align 4, !tbaa !54
  %403 = load i32, ptr %388, align 4, !tbaa !54
  %404 = sext i32 %400 to i64
  %405 = getelementptr inbounds i32, ptr %33, i64 %404
  store i32 %403, ptr %405, align 4, !tbaa !54
  store i32 -1, ptr %388, align 4, !tbaa !54
  br label %.thread512

406:                                              ; preds = %.lr.ph603
  %407 = icmp sgt i32 %383, 0
  br i1 %407, label %408, label %.thread512

408:                                              ; preds = %406
  %409 = getelementptr inbounds i32, ptr %33, i64 %377
  %410 = load i32, ptr %409, align 4, !tbaa !54
  %411 = icmp eq i32 %410, -1
  br i1 %411, label %412, label %.thread512

412:                                              ; preds = %408
  %413 = sext i32 %.5484601 to i64
  %414 = getelementptr inbounds i32, ptr %35, i64 %413
  store i32 %376, ptr %414, align 4, !tbaa !54
  %415 = add nsw i32 %.5484601, 1
  store i32 %.5484601, ptr %409, align 4, !tbaa !54
  br label %.thread512

.thread512:                                       ; preds = %387, %390, %406, %408, %412, %396
  %.6485 = phi i32 [ %397, %396 ], [ %415, %412 ], [ %.5484601, %408 ], [ %.5484601, %406 ], [ %.5484601, %390 ], [ %.5484601, %387 ]
  %416 = mul nsw i32 %376, %15
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds float, ptr %19, i64 %417
  %419 = mul nsw i32 %381, %15
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds float, ptr %31, i64 %420
  call void @__saxpy(i32 noundef %15, float noundef 1.000000e+00, ptr noundef %418, i32 noundef 1, ptr noundef %421, i32 noundef 1) #5
  %422 = and i32 %381, 1
  %423 = xor i32 %422, 1
  %424 = mul nuw nsw i32 %423, %15
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds float, ptr %31, i64 %425
  call void @__saxpy(i32 noundef %15, float noundef -1.000000e+00, ptr noundef %418, i32 noundef 1, ptr noundef %426, i32 noundef 1) #5
  %427 = getelementptr inbounds i32, ptr %17, i64 %377
  %428 = load i32, ptr %427, align 4, !tbaa !54
  %429 = getelementptr i8, ptr %427, i64 4
  %430 = load i32, ptr %429, align 4, !tbaa !54
  %431 = icmp slt i32 %428, %430
  br i1 %431, label %.lr.ph598.preheader, label %.loopexit

.lr.ph598.preheader:                              ; preds = %.thread512
  %432 = sext i32 %428 to i64
  br label %.lr.ph598

.lr.ph598:                                        ; preds = %.lr.ph598.preheader, %470
  %indvars.iv683 = phi i64 [ %432, %.lr.ph598.preheader ], [ %indvars.iv.next684, %470 ]
  %.7486596 = phi i32 [ %.6485, %.lr.ph598.preheader ], [ %.9488, %470 ]
  %433 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv683
  %434 = load i32, ptr %433, align 4, !tbaa !54
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i32, ptr %25, i64 %435
  %437 = load i32, ptr %436, align 4, !tbaa !54
  %438 = icmp eq i32 %381, %437
  %439 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv683
  %440 = load i32, ptr %439, align 4, !tbaa !54
  %441 = sub nsw i32 0, %440
  %442 = select i1 %438, i32 %440, i32 %441
  %443 = getelementptr inbounds i32, ptr %27, i64 %435
  %444 = load i32, ptr %443, align 4, !tbaa !54
  %445 = add nsw i32 %444, %442
  store i32 %445, ptr %443, align 4, !tbaa !54
  %446 = getelementptr inbounds i32, ptr %29, i64 %435
  %447 = load i32, ptr %446, align 4, !tbaa !54
  %448 = sub nsw i32 %447, %442
  store i32 %448, ptr %446, align 4, !tbaa !54
  %449 = getelementptr inbounds i32, ptr %33, i64 %435
  %450 = load i32, ptr %449, align 4, !tbaa !54
  %.not509 = icmp ne i32 %450, -1
  %451 = icmp eq i32 %447, %442
  %or.cond510 = select i1 %.not509, i1 %451, i1 false
  br i1 %or.cond510, label %.thread513, label %461

.thread513:                                       ; preds = %.lr.ph598
  %452 = add nsw i32 %.7486596, -1
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds i32, ptr %35, i64 %453
  %455 = load i32, ptr %454, align 4, !tbaa !54
  %456 = sext i32 %450 to i64
  %457 = getelementptr inbounds i32, ptr %35, i64 %456
  store i32 %455, ptr %457, align 4, !tbaa !54
  %458 = load i32, ptr %449, align 4, !tbaa !54
  %459 = sext i32 %455 to i64
  %460 = getelementptr inbounds i32, ptr %33, i64 %459
  store i32 %458, ptr %460, align 4, !tbaa !54
  store i32 -1, ptr %449, align 4, !tbaa !54
  %.pre = load i32, ptr %446, align 4, !tbaa !54
  br label %463

461:                                              ; preds = %.lr.ph598
  %462 = icmp eq i32 %450, -1
  br i1 %462, label %463, label %470

463:                                              ; preds = %.thread513, %461
  %464 = phi i32 [ %.pre, %.thread513 ], [ %448, %461 ]
  %.8487515 = phi i32 [ %452, %.thread513 ], [ %.7486596, %461 ]
  %465 = icmp sgt i32 %464, 0
  br i1 %465, label %466, label %470

466:                                              ; preds = %463
  %467 = sext i32 %.8487515 to i64
  %468 = getelementptr inbounds i32, ptr %35, i64 %467
  store i32 %434, ptr %468, align 4, !tbaa !54
  %469 = add nsw i32 %.8487515, 1
  store i32 %.8487515, ptr %449, align 4, !tbaa !54
  br label %470

470:                                              ; preds = %461, %463, %466
  %.9488 = phi i32 [ %469, %466 ], [ %.8487515, %463 ], [ %.7486596, %461 ]
  %indvars.iv.next684 = add nsw i64 %indvars.iv683, 1
  %471 = load i32, ptr %429, align 4, !tbaa !54
  %472 = sext i32 %471 to i64
  %473 = icmp slt i64 %indvars.iv.next684, %472
  br i1 %473, label %.lr.ph598, label %.loopexit, !llvm.loop !73

._crit_edge604:                                   ; preds = %.loopexit, %.preheader
  %.5484.lcssa = phi i32 [ %.0479527712, %.preheader ], [ %.7486.lcssa, %.loopexit ]
  %474 = load i32, ptr %119, align 4, !tbaa !57
  %475 = and i32 %474, 8
  %.not507 = icmp eq i32 %475, 0
  br i1 %.not507, label %492, label %476

476:                                              ; preds = %._crit_edge604
  %477 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %.0473525713, i32 noundef %.0470523714, i32 noundef %.5484.lcssa)
  br i1 %49, label %.lr.ph608.preheader, label %._crit_edge613.critedge

.lr.ph608.preheader:                              ; preds = %476
  %478 = zext nneg i32 %15 to i64
  %invariant.gep723 = getelementptr inbounds float, ptr %31, i64 %478
  br label %.lr.ph608

.lr.ph608:                                        ; preds = %.lr.ph608.preheader, %.lr.ph608
  %indvars.iv689 = phi i64 [ 0, %.lr.ph608.preheader ], [ %indvars.iv.next690, %.lr.ph608 ]
  %479 = getelementptr inbounds float, ptr %31, i64 %indvars.iv689
  %480 = load float, ptr %479, align 4, !tbaa !22
  %481 = fpext float %480 to double
  %gep724 = getelementptr inbounds float, ptr %invariant.gep723, i64 %indvars.iv689
  %482 = load float, ptr %gep724, align 4, !tbaa !22
  %483 = fpext float %482 to double
  %484 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %481, double noundef %483)
  %indvars.iv.next690 = add nuw nsw i64 %indvars.iv689, 1
  %exitcond693.not = icmp eq i64 %indvars.iv.next690, %478
  br i1 %exitcond693.not, label %._crit_edge609, label %.lr.ph608, !llvm.loop !74

._crit_edge609:                                   ; preds = %.lr.ph608
  %485 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %11) #5
  br i1 %49, label %.lr.ph612.preheader, label %._crit_edge613

.lr.ph612.preheader:                              ; preds = %._crit_edge609
  %wide.trip.count697 = zext nneg i32 %15 to i64
  br label %.lr.ph612

.lr.ph612:                                        ; preds = %.lr.ph612.preheader, %.lr.ph612
  %indvars.iv694 = phi i64 [ 0, %.lr.ph612.preheader ], [ %indvars.iv.next695, %.lr.ph612 ]
  %486 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %indvars.iv694
  %487 = load float, ptr %486, align 4, !tbaa !22
  %488 = fpext float %487 to double
  %489 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %488)
  %indvars.iv.next695 = add nuw nsw i64 %indvars.iv694, 1
  %exitcond698.not = icmp eq i64 %indvars.iv.next695, %wide.trip.count697
  br i1 %exitcond698.not, label %._crit_edge613, label %.lr.ph612, !llvm.loop !75

._crit_edge613.critedge:                          ; preds = %476
  %490 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  call void @__Compute2WayHLoadImbalanceVec(i32 noundef %15, ptr noundef %31, ptr noundef %2, ptr noundef nonnull %11) #5
  br label %._crit_edge613

._crit_edge613:                                   ; preds = %.lr.ph612, %._crit_edge613.critedge, %._crit_edge609
  %491 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  br label %492

492:                                              ; preds = %._crit_edge613, %._crit_edge604
  store i32 %.0473525713, ptr %117, align 8, !tbaa !56
  store i32 %.5484.lcssa, ptr %158, align 8, !tbaa !62
  br i1 %49, label %.lr.ph616.preheader, label %._crit_edge617

.lr.ph616.preheader:                              ; preds = %492
  %wide.trip.count702 = zext nneg i32 %15 to i64
  br label %.lr.ph616

.lr.ph616:                                        ; preds = %.lr.ph616.preheader, %.lr.ph616
  %indvars.iv699 = phi i64 [ 0, %.lr.ph616.preheader ], [ %indvars.iv.next700, %.lr.ph616 ]
  %493 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %10, i64 0, i64 %indvars.iv699
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %493) #5
  %494 = getelementptr inbounds i8, ptr %493, i64 64
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %494) #5
  %indvars.iv.next700 = add nuw nsw i64 %indvars.iv699, 1
  %exitcond703.not = icmp eq i64 %indvars.iv.next700, %wide.trip.count702
  br i1 %exitcond703.not, label %._crit_edge617, label %.lr.ph616, !llvm.loop !76

._crit_edge617:                                   ; preds = %.lr.ph616, %492
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %13) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %13) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %13) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %13) #5
  call void @fwspacefree(ptr noundef %0, i32 noundef %46) #5
  call void @fwspacefree(ptr noundef %0, i32 noundef %46) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  ret void
}

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

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

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

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

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

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

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

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

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

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

declare i32 @__PQueueGetMax(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 184}
!14 = !{!6, !7, i64 48}
!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, !23, i64 0}
!23 = !{!"float", !8, i64 0}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = !{!28}
!28 = distinct !{!28, !26}
!29 = !{!30}
!30 = distinct !{!30, !26}
!31 = !{!32, !25, !28}
!32 = distinct !{!32, !26}
!33 = !{!32}
!34 = !{!25, !28}
!35 = distinct !{!35, !36, !37, !38}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!"llvm.loop.isvectorized", i32 1}
!38 = !{!"llvm.loop.unroll.runtime.disable"}
!39 = distinct !{!39, !36, !37}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = !{!44}
!44 = distinct !{!44, !42}
!45 = !{!46}
!46 = distinct !{!46, !42}
!47 = !{!48, !41, !44}
!48 = distinct !{!48, !42}
!49 = !{!48}
!50 = !{!41, !44}
!51 = distinct !{!51, !36, !37, !38}
!52 = distinct !{!52, !36, !37}
!53 = distinct !{!53, !36}
!54 = !{!10, !10, i64 0}
!55 = distinct !{!55, !36}
!56 = !{!6, !10, i64 88}
!57 = !{!58, !10, i64 4}
!58 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !23, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !59, i64 48, !60, i64 104, !60, i64 112, !60, i64 120, !60, i64 128, !60, i64 136, !60, i64 144, !60, i64 152, !60, i64 160, !60, i64 168, !60, i64 176, !60, i64 184, !60, i64 192, !60, i64 200, !60, i64 208, !60, i64 216, !60, i64 224}
!59 = !{!"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}
!60 = !{!"double", !8, i64 0}
!61 = distinct !{!61, !36}
!62 = !{!6, !10, i64 112}
!63 = distinct !{!63, !36}
!64 = distinct !{!64, !36}
!65 = distinct !{!65, !36}
!66 = distinct !{!66, !36}
!67 = distinct !{!67, !36}
!68 = distinct !{!68, !36}
!69 = distinct !{!69, !70}
!70 = !{!"llvm.loop.unroll.disable"}
!71 = distinct !{!71, !36}
!72 = distinct !{!72, !36}
!73 = distinct !{!73, !36}
!74 = distinct !{!74, !36}
!75 = distinct !{!75, !36}
!76 = distinct !{!76, !36}


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