; LLVM IR from siconos/siconos :: externals/lbl/metis4/mbalance.ll_ (MocGeneral2WayBalance)

; 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 [58 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1

declare float @__Compute2WayHLoadImbalance(i32 noundef, ptr noundef, ptr noundef) #0

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

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

107:                                              ; preds = %4
  br label %108

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

111:                                              ; preds = %108
  br label %124

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

117:                                              ; preds = %112
  %118 = load i32, ptr %15, align 4, !tbaa !14
  %119 = sitofp i32 %118 to double
  %120 = fmul double 1.000000e-02, %119
  br label %122

121:                                              ; preds = %112
  br label %122

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

124:                                              ; preds = %122, %111
  %125 = phi double [ 1.000000e+02, %111 ], [ %123, %122 ]
  %126 = fptosi double %125 to i32
  store i32 %126, ptr %23, align 4, !tbaa !14
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %127

127:                                              ; preds = %152, %124
  %128 = load i32, ptr %9, align 4, !tbaa !14
  %129 = load i32, ptr %16, align 4, !tbaa !14
  %130 = icmp slt i32 %128, %129
  br i1 %130, label %131, label %155

131:                                              ; preds = %127
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = load i32, ptr %9, align 4, !tbaa !14
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %134
  %136 = getelementptr inbounds [2 x %struct.PQueueType], ptr %135, i64 0, i64 0
  %137 = load i32, ptr %15, align 4, !tbaa !14
  call void @__PQueueInit(ptr noundef %132, ptr noundef %136, i32 noundef %137, i32 noundef 501)
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = load i32, ptr %9, align 4, !tbaa !14
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %140
  %142 = getelementptr inbounds [2 x %struct.PQueueType], ptr %141, i64 0, i64 1
  %143 = load i32, ptr %15, align 4, !tbaa !14
  call void @__PQueueInit(ptr noundef %138, ptr noundef %142, i32 noundef %143, i32 noundef 501)
  %144 = load i32, ptr %9, align 4, !tbaa !14
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %145
  %147 = getelementptr inbounds [2 x i32], ptr %146, i64 0, i64 1
  store i32 0, ptr %147, align 4, !tbaa !14
  %148 = load i32, ptr %9, align 4, !tbaa !14
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %149
  %151 = getelementptr inbounds [2 x i32], ptr %150, i64 0, i64 0
  store i32 0, ptr %151, align 8, !tbaa !14
  br label %152

152:                                              ; preds = %131
  %153 = load i32, ptr %9, align 4, !tbaa !14
  %154 = add nsw i32 %153, 1
  store i32 %154, ptr %9, align 4, !tbaa !14
  br label %127, !llvm.loop !26

155:                                              ; preds = %127
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %156

156:                                              ; preds = %189, %155
  %157 = load i32, ptr %9, align 4, !tbaa !14
  %158 = load i32, ptr %15, align 4, !tbaa !14
  %159 = icmp slt i32 %157, %158
  br i1 %159, label %160, label %192

160:                                              ; preds = %156
  %161 = load i32, ptr %16, align 4, !tbaa !14
  %162 = load ptr, ptr %38, align 8, !tbaa !5
  %163 = load i32, ptr %9, align 4, !tbaa !14
  %164 = load i32, ptr %16, align 4, !tbaa !14
  %165 = mul nsw i32 %163, %164
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds float, ptr %162, i64 %166
  %168 = call i32 @__samax(i32 noundef %161, ptr noundef %167)
  %169 = load ptr, ptr %37, align 8, !tbaa !5
  %170 = load i32, ptr %9, align 4, !tbaa !14
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds i32, ptr %169, i64 %171
  store i32 %168, ptr %172, align 4, !tbaa !14
  %173 = load ptr, ptr %37, align 8, !tbaa !5
  %174 = load i32, ptr %9, align 4, !tbaa !14
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i32, ptr %173, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !14
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %178
  %180 = load ptr, ptr %29, align 8, !tbaa !5
  %181 = load i32, ptr %9, align 4, !tbaa !14
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds i32, ptr %180, i64 %182
  %184 = load i32, ptr %183, align 4, !tbaa !14
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [2 x i32], ptr %179, i64 0, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !14
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %186, align 4, !tbaa !14
  br label %189

189:                                              ; preds = %160
  %190 = load i32, ptr %9, align 4, !tbaa !14
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr %9, align 4, !tbaa !14
  br label %156, !llvm.loop !28

192:                                              ; preds = %156
  store i32 0, ptr %19, align 4, !tbaa !14
  br label %193

193:                                              ; preds = %319, %192
  %194 = load i32, ptr %19, align 4, !tbaa !14
  %195 = icmp slt i32 %194, 2
  br i1 %195, label %196, label %322

196:                                              ; preds = %193
  store i32 0, ptr %11, align 4, !tbaa !14
  br label %197

197:                                              ; preds = %315, %196
  %198 = load i32, ptr %11, align 4, !tbaa !14
  %199 = load i32, ptr %16, align 4, !tbaa !14
  %200 = icmp slt i32 %198, %199
  br i1 %200, label %201, label %318

201:                                              ; preds = %197
  %202 = load i32, ptr %11, align 4, !tbaa !14
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %203
  %205 = load i32, ptr %19, align 4, !tbaa !14
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds [2 x i32], ptr %204, i64 0, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !14
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %314

210:                                              ; preds = %201
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %211

211:                                              ; preds = %310, %210
  %212 = load i32, ptr %9, align 4, !tbaa !14
  %213 = load i32, ptr %15, align 4, !tbaa !14
  %214 = icmp slt i32 %212, %213
  br i1 %214, label %215, label %313

215:                                              ; preds = %211
  %216 = load ptr, ptr %29, align 8, !tbaa !5
  %217 = load i32, ptr %9, align 4, !tbaa !14
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds i32, ptr %216, i64 %218
  %220 = load i32, ptr %219, align 4, !tbaa !14
  %221 = load i32, ptr %19, align 4, !tbaa !14
  %222 = icmp ne i32 %220, %221
  br i1 %222, label %223, label %224

223:                                              ; preds = %215
  br label %310

224:                                              ; preds = %215
  %225 = load i32, ptr %16, align 4, !tbaa !14
  %226 = load ptr, ptr %38, align 8, !tbaa !5
  %227 = load i32, ptr %9, align 4, !tbaa !14
  %228 = load i32, ptr %16, align 4, !tbaa !14
  %229 = mul nsw i32 %227, %228
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds float, ptr %226, i64 %230
  %232 = call i32 @__samax2(i32 noundef %225, ptr noundef %231)
  store i32 %232, ptr %12, align 4, !tbaa !14
  %233 = load i32, ptr %12, align 4, !tbaa !14
  %234 = load i32, ptr %11, align 4, !tbaa !14
  %235 = icmp eq i32 %233, %234
  br i1 %235, label %236, label %309

236:                                              ; preds = %224
  %237 = load ptr, ptr %37, align 8, !tbaa !5
  %238 = load i32, ptr %9, align 4, !tbaa !14
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds i32, ptr %237, i64 %239
  %241 = load i32, ptr %240, align 4, !tbaa !14
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %242
  %244 = load i32, ptr %19, align 4, !tbaa !14
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds [2 x i32], ptr %243, i64 0, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !14
  %248 = load i32, ptr %11, align 4, !tbaa !14
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %249
  %251 = load i32, ptr %19, align 4, !tbaa !14
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds [2 x i32], ptr %250, i64 0, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !14
  %255 = icmp sgt i32 %247, %254
  br i1 %255, label %256, label %309

256:                                              ; preds = %236
  %257 = load ptr, ptr %38, align 8, !tbaa !5
  %258 = load i32, ptr %9, align 4, !tbaa !14
  %259 = load i32, ptr %16, align 4, !tbaa !14
  %260 = mul nsw i32 %258, %259
  %261 = load ptr, ptr %37, align 8, !tbaa !5
  %262 = load i32, ptr %9, align 4, !tbaa !14
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %261, i64 %263
  %265 = load i32, ptr %264, align 4, !tbaa !14
  %266 = add nsw i32 %260, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds float, ptr %257, i64 %267
  %269 = load float, ptr %268, align 4, !tbaa !9
  %270 = fpext float %269 to double
  %271 = load ptr, ptr %38, align 8, !tbaa !5
  %272 = load i32, ptr %9, align 4, !tbaa !14
  %273 = load i32, ptr %16, align 4, !tbaa !14
  %274 = mul nsw i32 %272, %273
  %275 = load i32, ptr %11, align 4, !tbaa !14
  %276 = add nsw i32 %274, %275
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds float, ptr %271, i64 %277
  %279 = load float, ptr %278, align 4, !tbaa !9
  %280 = fpext float %279 to double
  %281 = fmul double 1.300000e+00, %280
  %282 = fcmp olt double %270, %281
  br i1 %282, label %283, label %309

283:                                              ; preds = %256
  %284 = load ptr, ptr %37, align 8, !tbaa !5
  %285 = load i32, ptr %9, align 4, !tbaa !14
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i32, ptr %284, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !14
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %289
  %291 = load i32, ptr %19, align 4, !tbaa !14
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [2 x i32], ptr %290, i64 0, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !14
  %295 = add nsw i32 %294, -1
  store i32 %295, ptr %293, align 4, !tbaa !14
  %296 = load i32, ptr %11, align 4, !tbaa !14
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds [16 x [2 x i32]], ptr %50, i64 0, i64 %297
  %299 = load i32, ptr %19, align 4, !tbaa !14
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds [2 x i32], ptr %298, i64 0, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !14
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %301, align 4, !tbaa !14
  %304 = load i32, ptr %11, align 4, !tbaa !14
  %305 = load ptr, ptr %37, align 8, !tbaa !5
  %306 = load i32, ptr %9, align 4, !tbaa !14
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %305, i64 %307
  store i32 %304, ptr %308, align 4, !tbaa !14
  br label %309

309:                                              ; preds = %283, %256, %236, %224
  br label %310

310:                                              ; preds = %309, %223
  %311 = load i32, ptr %9, align 4, !tbaa !14
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %9, align 4, !tbaa !14
  br label %211, !llvm.loop !29

313:                                              ; preds = %211
  br label %314

314:                                              ; preds = %313, %201
  br label %315

315:                                              ; preds = %314
  %316 = load i32, ptr %11, align 4, !tbaa !14
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %11, align 4, !tbaa !14
  br label %197, !llvm.loop !30

318:                                              ; preds = %197
  br label %319

319:                                              ; preds = %318
  %320 = load i32, ptr %19, align 4, !tbaa !14
  %321 = add nsw i32 %320, 1
  store i32 %321, ptr %19, align 4, !tbaa !14
  br label %193, !llvm.loop !31

322:                                              ; preds = %193
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %323

323:                                              ; preds = %343, %322
  %324 = load i32, ptr %9, align 4, !tbaa !14
  %325 = load i32, ptr %16, align 4, !tbaa !14
  %326 = icmp slt i32 %324, %325
  br i1 %326, label %327, label %346

327:                                              ; preds = %323
  %328 = load ptr, ptr %7, align 8, !tbaa !5
  %329 = getelementptr inbounds float, ptr %328, i64 0
  %330 = load float, ptr %329, align 4, !tbaa !9
  %331 = load ptr, ptr %39, align 8, !tbaa !5
  %332 = load i32, ptr %9, align 4, !tbaa !14
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds float, ptr %331, i64 %333
  %335 = load float, ptr %334, align 4, !tbaa !9
  %336 = fsub float %330, %335
  %337 = fpext float %336 to double
  %338 = call double @llvm.fabs.f64(double %337)
  %339 = fptrunc double %338 to float
  %340 = load i32, ptr %9, align 4, !tbaa !14
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %341
  store float %339, ptr %342, align 4, !tbaa !9
  br label %343

343:                                              ; preds = %327
  %344 = load i32, ptr %9, align 4, !tbaa !14
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %9, align 4, !tbaa !14
  br label %323, !llvm.loop !32

346:                                              ; preds = %323
  %347 = load i32, ptr %16, align 4, !tbaa !14
  %348 = load ptr, ptr %39, align 8, !tbaa !5
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = call float @__Compute2WayHLoadImbalance(i32 noundef %347, ptr noundef %348, ptr noundef %349)
  store float %350, ptr %41, align 4, !tbaa !9
  store float %350, ptr %42, align 4, !tbaa !9
  %351 = load ptr, ptr %6, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.graphdef, ptr %351, i32 0, i32 12
  %353 = load i32, ptr %352, align 8, !tbaa !33
  store i32 %353, ptr %47, align 4, !tbaa !14
  store i32 %353, ptr %48, align 4, !tbaa !14
  store i32 -1, ptr %49, align 4, !tbaa !14
  %354 = load ptr, ptr %5, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.controldef, ptr %354, i32 0, i32 1
  %356 = load i32, ptr %355, align 4, !tbaa !34
  %357 = and i32 %356, 8
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %405

359:                                              ; preds = %346
  %360 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  store i32 0, ptr %13, align 4, !tbaa !14
  br label %361

361:                                              ; preds = %381, %359
  %362 = load i32, ptr %13, align 4, !tbaa !14
  %363 = load i32, ptr %16, align 4, !tbaa !14
  %364 = icmp slt i32 %362, %363
  br i1 %364, label %365, label %384

365:                                              ; preds = %361
  %366 = load ptr, ptr %39, align 8, !tbaa !5
  %367 = load i32, ptr %13, align 4, !tbaa !14
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds float, ptr %366, i64 %368
  %370 = load float, ptr %369, align 4, !tbaa !9
  %371 = fpext float %370 to double
  %372 = load ptr, ptr %39, align 8, !tbaa !5
  %373 = load i32, ptr %16, align 4, !tbaa !14
  %374 = load i32, ptr %13, align 4, !tbaa !14
  %375 = add nsw i32 %373, %374
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds float, ptr %372, i64 %376
  %378 = load float, ptr %377, align 4, !tbaa !9
  %379 = fpext float %378 to double
  %380 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %371, double noundef %379)
  br label %381

381:                                              ; preds = %365
  %382 = load i32, ptr %13, align 4, !tbaa !14
  %383 = add nsw i32 %382, 1
  store i32 %383, ptr %13, align 4, !tbaa !14
  br label %361, !llvm.loop !38

384:                                              ; preds = %361
  %385 = load ptr, ptr %7, align 8, !tbaa !5
  %386 = getelementptr inbounds float, ptr %385, i64 0
  %387 = load float, ptr %386, align 4, !tbaa !9
  %388 = fpext float %387 to double
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = getelementptr inbounds float, ptr %389, i64 1
  %391 = load float, ptr %390, align 4, !tbaa !9
  %392 = fpext float %391 to double
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.graphdef, ptr %393, i32 0, i32 2
  %395 = load i32, ptr %394, align 8, !tbaa !11
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.graphdef, ptr %396, i32 0, i32 16
  %398 = load i32, ptr %397, align 8, !tbaa !39
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.graphdef, ptr %399, i32 0, i32 12
  %401 = load i32, ptr %400, align 8, !tbaa !33
  %402 = load float, ptr %41, align 4, !tbaa !9
  %403 = fpext float %402 to double
  %404 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, double noundef %388, double noundef %392, i32 noundef %395, i32 noundef %398, i32 noundef %401, double noundef %403)
  br label %405

405:                                              ; preds = %384, %346
  %406 = load i32, ptr %15, align 4, !tbaa !14
  %407 = load ptr, ptr %34, align 8, !tbaa !5
  %408 = call ptr @__idxset(i32 noundef %406, i32 noundef -1, ptr noundef %407)
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.graphdef, ptr %409, i32 0, i32 16
  %411 = load i32, ptr %410, align 8, !tbaa !39
  store i32 %411, ptr %17, align 4, !tbaa !14
  %412 = load i32, ptr %15, align 4, !tbaa !14
  %413 = load ptr, ptr %36, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %412, ptr noundef %413, i32 noundef 1)
  store i32 0, ptr %10, align 4, !tbaa !14
  br label %414

414:                                              ; preds = %451, %405
  %415 = load i32, ptr %10, align 4, !tbaa !14
  %416 = load i32, ptr %15, align 4, !tbaa !14
  %417 = icmp slt i32 %415, %416
  br i1 %417, label %418, label %454

418:                                              ; preds = %414
  %419 = load ptr, ptr %36, align 8, !tbaa !5
  %420 = load i32, ptr %10, align 4, !tbaa !14
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !14
  store i32 %423, ptr %9, align 4, !tbaa !14
  %424 = load ptr, ptr %37, align 8, !tbaa !5
  %425 = load i32, ptr %9, align 4, !tbaa !14
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds i32, ptr %424, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !14
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %429
  %431 = load ptr, ptr %29, align 8, !tbaa !5
  %432 = load i32, ptr %9, align 4, !tbaa !14
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i32, ptr %431, i64 %433
  %435 = load i32, ptr %434, align 4, !tbaa !14
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds [2 x %struct.PQueueType], ptr %430, i64 0, i64 %436
  %438 = load i32, ptr %9, align 4, !tbaa !14
  %439 = load ptr, ptr %31, align 8, !tbaa !5
  %440 = load i32, ptr %9, align 4, !tbaa !14
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds i32, ptr %439, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !14
  %444 = load ptr, ptr %30, align 8, !tbaa !5
  %445 = load i32, ptr %9, align 4, !tbaa !14
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !14
  %449 = sub nsw i32 %443, %448
  %450 = call i32 @__PQueueInsert(ptr noundef %437, i32 noundef %438, i32 noundef %449)
  br label %451

451:                                              ; preds = %418
  %452 = load i32, ptr %10, align 4, !tbaa !14
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %10, align 4, !tbaa !14
  br label %414, !llvm.loop !40

454:                                              ; preds = %414
  store i32 0, ptr %18, align 4, !tbaa !14
  br label %455

455:                                              ; preds = %995, %454
  %456 = load i32, ptr %18, align 4, !tbaa !14
  %457 = load i32, ptr %15, align 4, !tbaa !14
  %458 = icmp slt i32 %456, %457
  br i1 %458, label %459, label %998

459:                                              ; preds = %455
  %460 = load float, ptr %42, align 4, !tbaa !9
  %461 = load float, ptr %8, align 4, !tbaa !9
  %462 = fcmp olt float %460, %461
  br i1 %462, label %463, label %464

463:                                              ; preds = %459
  br label %998

464:                                              ; preds = %459
  %465 = load i32, ptr %16, align 4, !tbaa !14
  %466 = load ptr, ptr %39, align 8, !tbaa !5
  %467 = load ptr, ptr %7, align 8, !tbaa !5
  %468 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 0
  call void @__SelectQueue(i32 noundef %465, ptr noundef %466, ptr noundef %467, ptr noundef %19, ptr noundef %25, ptr noundef %468)
  %469 = load i32, ptr %19, align 4, !tbaa !14
  %470 = add nsw i32 %469, 1
  %471 = srem i32 %470, 2
  store i32 %471, ptr %20, align 4, !tbaa !14
  %472 = load i32, ptr %19, align 4, !tbaa !14
  %473 = icmp eq i32 %472, -1
  br i1 %473, label %483, label %474

474:                                              ; preds = %464
  %475 = load i32, ptr %25, align 4, !tbaa !14
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %476
  %478 = load i32, ptr %19, align 4, !tbaa !14
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds [2 x %struct.PQueueType], ptr %477, i64 0, i64 %479
  %481 = call i32 @__PQueueGetMax(ptr noundef %480)
  store i32 %481, ptr %45, align 4, !tbaa !14
  %482 = icmp eq i32 %481, -1
  br i1 %482, label %483, label %484

483:                                              ; preds = %474, %464
  br label %998

484:                                              ; preds = %474
  %485 = load i32, ptr %16, align 4, !tbaa !14
  %486 = load ptr, ptr %38, align 8, !tbaa !5
  %487 = load i32, ptr %45, align 4, !tbaa !14
  %488 = load i32, ptr %16, align 4, !tbaa !14
  %489 = mul nsw i32 %487, %488
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds float, ptr %486, i64 %490
  %492 = load ptr, ptr %39, align 8, !tbaa !5
  %493 = load i32, ptr %20, align 4, !tbaa !14
  %494 = load i32, ptr %16, align 4, !tbaa !14
  %495 = mul nsw i32 %493, %494
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds float, ptr %492, i64 %496
  call void @__saxpy(i32 noundef %485, float noundef 1.000000e+00, ptr noundef %491, i32 noundef 1, ptr noundef %497, i32 noundef 1)
  %498 = load i32, ptr %16, align 4, !tbaa !14
  %499 = load ptr, ptr %38, align 8, !tbaa !5
  %500 = load i32, ptr %45, align 4, !tbaa !14
  %501 = load i32, ptr %16, align 4, !tbaa !14
  %502 = mul nsw i32 %500, %501
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds float, ptr %499, i64 %503
  %505 = load ptr, ptr %39, align 8, !tbaa !5
  %506 = load i32, ptr %19, align 4, !tbaa !14
  %507 = load i32, ptr %16, align 4, !tbaa !14
  %508 = mul nsw i32 %506, %507
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds float, ptr %505, i64 %509
  call void @__saxpy(i32 noundef %498, float noundef -1.000000e+00, ptr noundef %504, i32 noundef 1, ptr noundef %510, i32 noundef 1)
  %511 = load ptr, ptr %31, align 8, !tbaa !5
  %512 = load i32, ptr %45, align 4, !tbaa !14
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !14
  %516 = load ptr, ptr %30, align 8, !tbaa !5
  %517 = load i32, ptr %45, align 4, !tbaa !14
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !14
  %521 = sub nsw i32 %515, %520
  %522 = load i32, ptr %48, align 4, !tbaa !14
  %523 = sub nsw i32 %522, %521
  store i32 %523, ptr %48, align 4, !tbaa !14
  %524 = load i32, ptr %16, align 4, !tbaa !14
  %525 = load ptr, ptr %39, align 8, !tbaa !5
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = call float @__Compute2WayHLoadImbalance(i32 noundef %524, ptr noundef %525, ptr noundef %526)
  store float %527, ptr %43, align 4, !tbaa !9
  %528 = load float, ptr %43, align 4, !tbaa !9
  %529 = load float, ptr %42, align 4, !tbaa !9
  %530 = fcmp olt float %528, %529
  br i1 %530, label %550, label %531

531:                                              ; preds = %484
  %532 = load float, ptr %43, align 4, !tbaa !9
  %533 = load float, ptr %42, align 4, !tbaa !9
  %534 = fcmp oeq float %532, %533
  br i1 %534, label %535, label %578

535:                                              ; preds = %531
  %536 = load i32, ptr %48, align 4, !tbaa !14
  %537 = load i32, ptr %47, align 4, !tbaa !14
  %538 = icmp slt i32 %536, %537
  br i1 %538, label %550, label %539

539:                                              ; preds = %535
  %540 = load i32, ptr %48, align 4, !tbaa !14
  %541 = load i32, ptr %47, align 4, !tbaa !14
  %542 = icmp eq i32 %540, %541
  br i1 %542, label %543, label %578

543:                                              ; preds = %539
  %544 = load i32, ptr %16, align 4, !tbaa !14
  %545 = load ptr, ptr %39, align 8, !tbaa !5
  %546 = load ptr, ptr %7, align 8, !tbaa !5
  %547 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  %548 = call i32 @__BetterBalance(i32 noundef %544, ptr noundef %545, ptr noundef %546, ptr noundef %547)
  %549 = icmp ne i32 %548, 0
  br i1 %549, label %550, label %578

550:                                              ; preds = %543, %535, %484
  %551 = load i32, ptr %48, align 4, !tbaa !14
  store i32 %551, ptr %47, align 4, !tbaa !14
  %552 = load float, ptr %43, align 4, !tbaa !9
  store float %552, ptr %42, align 4, !tbaa !9
  %553 = load i32, ptr %18, align 4, !tbaa !14
  store i32 %553, ptr %49, align 4, !tbaa !14
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %554

554:                                              ; preds = %574, %550
  %555 = load i32, ptr %9, align 4, !tbaa !14
  %556 = load i32, ptr %16, align 4, !tbaa !14
  %557 = icmp slt i32 %555, %556
  br i1 %557, label %558, label %577

558:                                              ; preds = %554
  %559 = load ptr, ptr %7, align 8, !tbaa !5
  %560 = getelementptr inbounds float, ptr %559, i64 0
  %561 = load float, ptr %560, align 4, !tbaa !9
  %562 = load ptr, ptr %39, align 8, !tbaa !5
  %563 = load i32, ptr %9, align 4, !tbaa !14
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds float, ptr %562, i64 %564
  %566 = load float, ptr %565, align 4, !tbaa !9
  %567 = fsub float %561, %566
  %568 = fpext float %567 to double
  %569 = call double @llvm.fabs.f64(double %568)
  %570 = fptrunc double %569 to float
  %571 = load i32, ptr %9, align 4, !tbaa !14
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %572
  store float %570, ptr %573, align 4, !tbaa !9
  br label %574

574:                                              ; preds = %558
  %575 = load i32, ptr %9, align 4, !tbaa !14
  %576 = add nsw i32 %575, 1
  store i32 %576, ptr %9, align 4, !tbaa !14
  br label %554, !llvm.loop !41

577:                                              ; preds = %554
  br label %625

578:                                              ; preds = %543, %539, %531
  %579 = load i32, ptr %18, align 4, !tbaa !14
  %580 = load i32, ptr %49, align 4, !tbaa !14
  %581 = sub nsw i32 %579, %580
  %582 = load i32, ptr %23, align 4, !tbaa !14
  %583 = icmp sgt i32 %581, %582
  br i1 %583, label %584, label %624

584:                                              ; preds = %578
  %585 = load ptr, ptr %31, align 8, !tbaa !5
  %586 = load i32, ptr %45, align 4, !tbaa !14
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds i32, ptr %585, i64 %587
  %589 = load i32, ptr %588, align 4, !tbaa !14
  %590 = load ptr, ptr %30, align 8, !tbaa !5
  %591 = load i32, ptr %45, align 4, !tbaa !14
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds i32, ptr %590, i64 %592
  %594 = load i32, ptr %593, align 4, !tbaa !14
  %595 = sub nsw i32 %589, %594
  %596 = load i32, ptr %48, align 4, !tbaa !14
  %597 = add nsw i32 %596, %595
  store i32 %597, ptr %48, align 4, !tbaa !14
  %598 = load i32, ptr %16, align 4, !tbaa !14
  %599 = load ptr, ptr %38, align 8, !tbaa !5
  %600 = load i32, ptr %45, align 4, !tbaa !14
  %601 = load i32, ptr %16, align 4, !tbaa !14
  %602 = mul nsw i32 %600, %601
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds float, ptr %599, i64 %603
  %605 = load ptr, ptr %39, align 8, !tbaa !5
  %606 = load i32, ptr %19, align 4, !tbaa !14
  %607 = load i32, ptr %16, align 4, !tbaa !14
  %608 = mul nsw i32 %606, %607
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds float, ptr %605, i64 %609
  call void @__saxpy(i32 noundef %598, float noundef 1.000000e+00, ptr noundef %604, i32 noundef 1, ptr noundef %610, i32 noundef 1)
  %611 = load i32, ptr %16, align 4, !tbaa !14
  %612 = load ptr, ptr %38, align 8, !tbaa !5
  %613 = load i32, ptr %45, align 4, !tbaa !14
  %614 = load i32, ptr %16, align 4, !tbaa !14
  %615 = mul nsw i32 %613, %614
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds float, ptr %612, i64 %616
  %618 = load ptr, ptr %39, align 8, !tbaa !5
  %619 = load i32, ptr %20, align 4, !tbaa !14
  %620 = load i32, ptr %16, align 4, !tbaa !14
  %621 = mul nsw i32 %619, %620
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds float, ptr %618, i64 %622
  call void @__saxpy(i32 noundef %611, float noundef -1.000000e+00, ptr noundef %617, i32 noundef 1, ptr noundef %623, i32 noundef 1)
  br label %998

624:                                              ; preds = %578
  br label %625

625:                                              ; preds = %624, %577
  %626 = load i32, ptr %20, align 4, !tbaa !14
  %627 = load ptr, ptr %29, align 8, !tbaa !5
  %628 = load i32, ptr %45, align 4, !tbaa !14
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  store i32 %626, ptr %630, align 4, !tbaa !14
  %631 = load i32, ptr %18, align 4, !tbaa !14
  %632 = load ptr, ptr %34, align 8, !tbaa !5
  %633 = load i32, ptr %45, align 4, !tbaa !14
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds i32, ptr %632, i64 %634
  store i32 %631, ptr %635, align 4, !tbaa !14
  %636 = load i32, ptr %45, align 4, !tbaa !14
  %637 = load ptr, ptr %35, align 8, !tbaa !5
  %638 = load i32, ptr %18, align 4, !tbaa !14
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds i32, ptr %637, i64 %639
  store i32 %636, ptr %640, align 4, !tbaa !14
  %641 = load ptr, ptr %5, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.controldef, ptr %641, i32 0, i32 1
  %643 = load i32, ptr %642, align 4, !tbaa !34
  %644 = and i32 %643, 32
  %645 = icmp ne i32 %644, 0
  br i1 %645, label %646, label %692

646:                                              ; preds = %625
  %647 = load i32, ptr %45, align 4, !tbaa !14
  %648 = load i32, ptr %19, align 4, !tbaa !14
  %649 = load i32, ptr %25, align 4, !tbaa !14
  %650 = load ptr, ptr %31, align 8, !tbaa !5
  %651 = load i32, ptr %45, align 4, !tbaa !14
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds i32, ptr %650, i64 %652
  %654 = load i32, ptr %653, align 4, !tbaa !14
  %655 = load ptr, ptr %30, align 8, !tbaa !5
  %656 = load i32, ptr %45, align 4, !tbaa !14
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds i32, ptr %655, i64 %657
  %659 = load i32, ptr %658, align 4, !tbaa !14
  %660 = sub nsw i32 %654, %659
  %661 = load i32, ptr %48, align 4, !tbaa !14
  %662 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %647, i32 noundef %648, i32 noundef %649, i32 noundef %660, i32 noundef %661)
  store i32 0, ptr %13, align 4, !tbaa !14
  br label %663

663:                                              ; preds = %683, %646
  %664 = load i32, ptr %13, align 4, !tbaa !14
  %665 = load i32, ptr %16, align 4, !tbaa !14
  %666 = icmp slt i32 %664, %665
  br i1 %666, label %667, label %686

667:                                              ; preds = %663
  %668 = load ptr, ptr %39, align 8, !tbaa !5
  %669 = load i32, ptr %13, align 4, !tbaa !14
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds float, ptr %668, i64 %670
  %672 = load float, ptr %671, align 4, !tbaa !9
  %673 = fpext float %672 to double
  %674 = load ptr, ptr %39, align 8, !tbaa !5
  %675 = load i32, ptr %16, align 4, !tbaa !14
  %676 = load i32, ptr %13, align 4, !tbaa !14
  %677 = add nsw i32 %675, %676
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds float, ptr %674, i64 %678
  %680 = load float, ptr %679, align 4, !tbaa !9
  %681 = fpext float %680 to double
  %682 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %673, double noundef %681)
  br label %683

683:                                              ; preds = %667
  %684 = load i32, ptr %13, align 4, !tbaa !14
  %685 = add nsw i32 %684, 1
  store i32 %685, ptr %13, align 4, !tbaa !14
  br label %663, !llvm.loop !42

686:                                              ; preds = %663
  %687 = load float, ptr %42, align 4, !tbaa !9
  %688 = fpext float %687 to double
  %689 = load float, ptr %43, align 4, !tbaa !9
  %690 = fpext float %689 to double
  %691 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %688, double noundef %690)
  br label %692

692:                                              ; preds = %686, %625
  br label %693

693:                                              ; preds = %692
  %694 = load ptr, ptr %30, align 8, !tbaa !5
  %695 = load i32, ptr %45, align 4, !tbaa !14
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds i32, ptr %694, i64 %696
  %698 = load i32, ptr %697, align 4, !tbaa !14
  store i32 %698, ptr %24, align 4, !tbaa !14
  %699 = load ptr, ptr %31, align 8, !tbaa !5
  %700 = load i32, ptr %45, align 4, !tbaa !14
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i32, ptr %699, i64 %701
  %703 = load i32, ptr %702, align 4, !tbaa !14
  %704 = load ptr, ptr %30, align 8, !tbaa !5
  %705 = load i32, ptr %45, align 4, !tbaa !14
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i32, ptr %704, i64 %706
  store i32 %703, ptr %707, align 4, !tbaa !14
  %708 = load i32, ptr %24, align 4, !tbaa !14
  %709 = load ptr, ptr %31, align 8, !tbaa !5
  %710 = load i32, ptr %45, align 4, !tbaa !14
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i32, ptr %709, i64 %711
  store i32 %708, ptr %712, align 4, !tbaa !14
  br label %713

713:                                              ; preds = %693
  br label %714

714:                                              ; preds = %713
  %715 = load ptr, ptr %31, align 8, !tbaa !5
  %716 = load i32, ptr %45, align 4, !tbaa !14
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds i32, ptr %715, i64 %717
  %719 = load i32, ptr %718, align 4, !tbaa !14
  %720 = icmp eq i32 %719, 0
  br i1 %720, label %721, label %776

721:                                              ; preds = %714
  %722 = load ptr, ptr %32, align 8, !tbaa !5
  %723 = load i32, ptr %45, align 4, !tbaa !14
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %722, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !14
  %727 = icmp ne i32 %726, -1
  br i1 %727, label %728, label %776

728:                                              ; preds = %721
  %729 = load ptr, ptr %26, align 8, !tbaa !5
  %730 = load i32, ptr %45, align 4, !tbaa !14
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds i32, ptr %729, i64 %731
  %733 = load i32, ptr %732, align 4, !tbaa !14
  %734 = load ptr, ptr %26, align 8, !tbaa !5
  %735 = load i32, ptr %45, align 4, !tbaa !14
  %736 = add nsw i32 %735, 1
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds i32, ptr %734, i64 %737
  %739 = load i32, ptr %738, align 4, !tbaa !14
  %740 = icmp slt i32 %733, %739
  br i1 %740, label %741, label %776

741:                                              ; preds = %728
  br label %742

742:                                              ; preds = %741
  %743 = load ptr, ptr %33, align 8, !tbaa !5
  %744 = load i32, ptr %17, align 4, !tbaa !14
  %745 = add nsw i32 %744, -1
  store i32 %745, ptr %17, align 4, !tbaa !14
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i32, ptr %743, i64 %746
  %748 = load i32, ptr %747, align 4, !tbaa !14
  %749 = load ptr, ptr %33, align 8, !tbaa !5
  %750 = load ptr, ptr %32, align 8, !tbaa !5
  %751 = load i32, ptr %45, align 4, !tbaa !14
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds i32, ptr %750, i64 %752
  %754 = load i32, ptr %753, align 4, !tbaa !14
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds i32, ptr %749, i64 %755
  store i32 %748, ptr %756, align 4, !tbaa !14
  %757 = load ptr, ptr %32, align 8, !tbaa !5
  %758 = load i32, ptr %45, align 4, !tbaa !14
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds i32, ptr %757, i64 %759
  %761 = load i32, ptr %760, align 4, !tbaa !14
  %762 = load ptr, ptr %32, align 8, !tbaa !5
  %763 = load ptr, ptr %33, align 8, !tbaa !5
  %764 = load i32, ptr %17, align 4, !tbaa !14
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds i32, ptr %763, i64 %765
  %767 = load i32, ptr %766, align 4, !tbaa !14
  %768 = sext i32 %767 to i64
  %769 = getelementptr inbounds i32, ptr %762, i64 %768
  store i32 %761, ptr %769, align 4, !tbaa !14
  %770 = load ptr, ptr %32, align 8, !tbaa !5
  %771 = load i32, ptr %45, align 4, !tbaa !14
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds i32, ptr %770, i64 %772
  store i32 -1, ptr %773, align 4, !tbaa !14
  br label %774

774:                                              ; preds = %742
  br label %775

775:                                              ; preds = %774
  br label %776

776:                                              ; preds = %775, %728, %721, %714
  %777 = load ptr, ptr %31, align 8, !tbaa !5
  %778 = load i32, ptr %45, align 4, !tbaa !14
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %777, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !14
  %782 = icmp sgt i32 %781, 0
  br i1 %782, label %783, label %805

783:                                              ; preds = %776
  %784 = load ptr, ptr %32, align 8, !tbaa !5
  %785 = load i32, ptr %45, align 4, !tbaa !14
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds i32, ptr %784, i64 %786
  %788 = load i32, ptr %787, align 4, !tbaa !14
  %789 = icmp eq i32 %788, -1
  br i1 %789, label %790, label %805

790:                                              ; preds = %783
  br label %791

791:                                              ; preds = %790
  %792 = load i32, ptr %45, align 4, !tbaa !14
  %793 = load ptr, ptr %33, align 8, !tbaa !5
  %794 = load i32, ptr %17, align 4, !tbaa !14
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds i32, ptr %793, i64 %795
  store i32 %792, ptr %796, align 4, !tbaa !14
  %797 = load i32, ptr %17, align 4, !tbaa !14
  %798 = add nsw i32 %797, 1
  store i32 %798, ptr %17, align 4, !tbaa !14
  %799 = load ptr, ptr %32, align 8, !tbaa !5
  %800 = load i32, ptr %45, align 4, !tbaa !14
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds i32, ptr %799, i64 %801
  store i32 %797, ptr %802, align 4, !tbaa !14
  br label %803

803:                                              ; preds = %791
  br label %804

804:                                              ; preds = %803
  br label %805

805:                                              ; preds = %804, %783, %776
  %806 = load ptr, ptr %26, align 8, !tbaa !5
  %807 = load i32, ptr %45, align 4, !tbaa !14
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds i32, ptr %806, i64 %808
  %810 = load i32, ptr %809, align 4, !tbaa !14
  store i32 %810, ptr %11, align 4, !tbaa !14
  br label %811

811:                                              ; preds = %991, %805
  %812 = load i32, ptr %11, align 4, !tbaa !14
  %813 = load ptr, ptr %26, align 8, !tbaa !5
  %814 = load i32, ptr %45, align 4, !tbaa !14
  %815 = add nsw i32 %814, 1
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds i32, ptr %813, i64 %816
  %818 = load i32, ptr %817, align 4, !tbaa !14
  %819 = icmp slt i32 %812, %818
  br i1 %819, label %820, label %994

820:                                              ; preds = %811
  %821 = load ptr, ptr %27, align 8, !tbaa !5
  %822 = load i32, ptr %11, align 4, !tbaa !14
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %821, i64 %823
  %825 = load i32, ptr %824, align 4, !tbaa !14
  store i32 %825, ptr %12, align 4, !tbaa !14
  %826 = load ptr, ptr %31, align 8, !tbaa !5
  %827 = load i32, ptr %12, align 4, !tbaa !14
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i32, ptr %826, i64 %828
  %830 = load i32, ptr %829, align 4, !tbaa !14
  %831 = load ptr, ptr %30, align 8, !tbaa !5
  %832 = load i32, ptr %12, align 4, !tbaa !14
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds i32, ptr %831, i64 %833
  %835 = load i32, ptr %834, align 4, !tbaa !14
  %836 = sub nsw i32 %830, %835
  store i32 %836, ptr %46, align 4, !tbaa !14
  %837 = load i32, ptr %20, align 4, !tbaa !14
  %838 = load ptr, ptr %29, align 8, !tbaa !5
  %839 = load i32, ptr %12, align 4, !tbaa !14
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds i32, ptr %838, i64 %840
  %842 = load i32, ptr %841, align 4, !tbaa !14
  %843 = icmp eq i32 %837, %842
  br i1 %843, label %844, label %850

844:                                              ; preds = %820
  %845 = load ptr, ptr %28, align 8, !tbaa !5
  %846 = load i32, ptr %11, align 4, !tbaa !14
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds i32, ptr %845, i64 %847
  %849 = load i32, ptr %848, align 4, !tbaa !14
  br label %857

850:                                              ; preds = %820
  %851 = load ptr, ptr %28, align 8, !tbaa !5
  %852 = load i32, ptr %11, align 4, !tbaa !14
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !14
  %856 = sub nsw i32 0, %855
  br label %857

857:                                              ; preds = %850, %844
  %858 = phi i32 [ %849, %844 ], [ %856, %850 ]
  store i32 %858, ptr %14, align 4, !tbaa !14
  br label %859

859:                                              ; preds = %857
  %860 = load i32, ptr %14, align 4, !tbaa !14
  %861 = load ptr, ptr %30, align 8, !tbaa !5
  %862 = load i32, ptr %12, align 4, !tbaa !14
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds i32, ptr %861, i64 %863
  %865 = load i32, ptr %864, align 4, !tbaa !14
  %866 = add nsw i32 %865, %860
  store i32 %866, ptr %864, align 4, !tbaa !14
  %867 = load i32, ptr %14, align 4, !tbaa !14
  %868 = load ptr, ptr %31, align 8, !tbaa !5
  %869 = load i32, ptr %12, align 4, !tbaa !14
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds i32, ptr %868, i64 %870
  %872 = load i32, ptr %871, align 4, !tbaa !14
  %873 = sub nsw i32 %872, %867
  store i32 %873, ptr %871, align 4, !tbaa !14
  br label %874

874:                                              ; preds = %859
  br label %875

875:                                              ; preds = %874
  %876 = load ptr, ptr %34, align 8, !tbaa !5
  %877 = load i32, ptr %12, align 4, !tbaa !14
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds i32, ptr %876, i64 %878
  %880 = load i32, ptr %879, align 4, !tbaa !14
  %881 = icmp eq i32 %880, -1
  br i1 %881, label %882, label %911

882:                                              ; preds = %875
  %883 = load ptr, ptr %37, align 8, !tbaa !5
  %884 = load i32, ptr %12, align 4, !tbaa !14
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds i32, ptr %883, i64 %885
  %887 = load i32, ptr %886, align 4, !tbaa !14
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %888
  %890 = load ptr, ptr %29, align 8, !tbaa !5
  %891 = load i32, ptr %12, align 4, !tbaa !14
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds i32, ptr %890, i64 %892
  %894 = load i32, ptr %893, align 4, !tbaa !14
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds [2 x %struct.PQueueType], ptr %889, i64 0, i64 %895
  %897 = load i32, ptr %12, align 4, !tbaa !14
  %898 = load i32, ptr %46, align 4, !tbaa !14
  %899 = load ptr, ptr %31, align 8, !tbaa !5
  %900 = load i32, ptr %12, align 4, !tbaa !14
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds i32, ptr %899, i64 %901
  %903 = load i32, ptr %902, align 4, !tbaa !14
  %904 = load ptr, ptr %30, align 8, !tbaa !5
  %905 = load i32, ptr %12, align 4, !tbaa !14
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds i32, ptr %904, i64 %906
  %908 = load i32, ptr %907, align 4, !tbaa !14
  %909 = sub nsw i32 %903, %908
  %910 = call i32 @__PQueueUpdate(ptr noundef %896, i32 noundef %897, i32 noundef %898, i32 noundef %909)
  br label %911

911:                                              ; preds = %882, %875
  %912 = load ptr, ptr %31, align 8, !tbaa !5
  %913 = load i32, ptr %12, align 4, !tbaa !14
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds i32, ptr %912, i64 %914
  %916 = load i32, ptr %915, align 4, !tbaa !14
  %917 = icmp eq i32 %916, 0
  br i1 %917, label %918, label %960

918:                                              ; preds = %911
  %919 = load ptr, ptr %32, align 8, !tbaa !5
  %920 = load i32, ptr %12, align 4, !tbaa !14
  %921 = sext i32 %920 to i64
  %922 = getelementptr inbounds i32, ptr %919, i64 %921
  %923 = load i32, ptr %922, align 4, !tbaa !14
  %924 = icmp ne i32 %923, -1
  br i1 %924, label %925, label %960

925:                                              ; preds = %918
  br label %926

926:                                              ; preds = %925
  %927 = load ptr, ptr %33, align 8, !tbaa !5
  %928 = load i32, ptr %17, align 4, !tbaa !14
  %929 = add nsw i32 %928, -1
  store i32 %929, ptr %17, align 4, !tbaa !14
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds i32, ptr %927, i64 %930
  %932 = load i32, ptr %931, align 4, !tbaa !14
  %933 = load ptr, ptr %33, align 8, !tbaa !5
  %934 = load ptr, ptr %32, align 8, !tbaa !5
  %935 = load i32, ptr %12, align 4, !tbaa !14
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds i32, ptr %934, i64 %936
  %938 = load i32, ptr %937, align 4, !tbaa !14
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i32, ptr %933, i64 %939
  store i32 %932, ptr %940, align 4, !tbaa !14
  %941 = load ptr, ptr %32, align 8, !tbaa !5
  %942 = load i32, ptr %12, align 4, !tbaa !14
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds i32, ptr %941, i64 %943
  %945 = load i32, ptr %944, align 4, !tbaa !14
  %946 = load ptr, ptr %32, align 8, !tbaa !5
  %947 = load ptr, ptr %33, align 8, !tbaa !5
  %948 = load i32, ptr %17, align 4, !tbaa !14
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds i32, ptr %947, i64 %949
  %951 = load i32, ptr %950, align 4, !tbaa !14
  %952 = sext i32 %951 to i64
  %953 = getelementptr inbounds i32, ptr %946, i64 %952
  store i32 %945, ptr %953, align 4, !tbaa !14
  %954 = load ptr, ptr %32, align 8, !tbaa !5
  %955 = load i32, ptr %12, align 4, !tbaa !14
  %956 = sext i32 %955 to i64
  %957 = getelementptr inbounds i32, ptr %954, i64 %956
  store i32 -1, ptr %957, align 4, !tbaa !14
  br label %958

958:                                              ; preds = %926
  br label %959

959:                                              ; preds = %958
  br label %990

960:                                              ; preds = %918, %911
  %961 = load ptr, ptr %31, align 8, !tbaa !5
  %962 = load i32, ptr %12, align 4, !tbaa !14
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds i32, ptr %961, i64 %963
  %965 = load i32, ptr %964, align 4, !tbaa !14
  %966 = icmp sgt i32 %965, 0
  br i1 %966, label %967, label %989

967:                                              ; preds = %960
  %968 = load ptr, ptr %32, align 8, !tbaa !5
  %969 = load i32, ptr %12, align 4, !tbaa !14
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds i32, ptr %968, i64 %970
  %972 = load i32, ptr %971, align 4, !tbaa !14
  %973 = icmp eq i32 %972, -1
  br i1 %973, label %974, label %989

974:                                              ; preds = %967
  br label %975

975:                                              ; preds = %974
  %976 = load i32, ptr %12, align 4, !tbaa !14
  %977 = load ptr, ptr %33, align 8, !tbaa !5
  %978 = load i32, ptr %17, align 4, !tbaa !14
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds i32, ptr %977, i64 %979
  store i32 %976, ptr %980, align 4, !tbaa !14
  %981 = load i32, ptr %17, align 4, !tbaa !14
  %982 = add nsw i32 %981, 1
  store i32 %982, ptr %17, align 4, !tbaa !14
  %983 = load ptr, ptr %32, align 8, !tbaa !5
  %984 = load i32, ptr %12, align 4, !tbaa !14
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds i32, ptr %983, i64 %985
  store i32 %981, ptr %986, align 4, !tbaa !14
  br label %987

987:                                              ; preds = %975
  br label %988

988:                                              ; preds = %987
  br label %989

989:                                              ; preds = %988, %967, %960
  br label %990

990:                                              ; preds = %989, %959
  br label %991

991:                                              ; preds = %990
  %992 = load i32, ptr %11, align 4, !tbaa !14
  %993 = add nsw i32 %992, 1
  store i32 %993, ptr %11, align 4, !tbaa !14
  br label %811, !llvm.loop !43

994:                                              ; preds = %811
  br label %995

995:                                              ; preds = %994
  %996 = load i32, ptr %18, align 4, !tbaa !14
  %997 = add nsw i32 %996, 1
  store i32 %997, ptr %18, align 4, !tbaa !14
  br label %455, !llvm.loop !44

998:                                              ; preds = %584, %483, %463, %455
  %999 = load i32, ptr %18, align 4, !tbaa !14
  %1000 = add nsw i32 %999, -1
  store i32 %1000, ptr %18, align 4, !tbaa !14
  br label %1001

1001:                                             ; preds = %1305, %998
  %1002 = load i32, ptr %18, align 4, !tbaa !14
  %1003 = load i32, ptr %49, align 4, !tbaa !14
  %1004 = icmp sgt i32 %1002, %1003
  br i1 %1004, label %1005, label %1308

1005:                                             ; preds = %1001
  %1006 = load ptr, ptr %35, align 8, !tbaa !5
  %1007 = load i32, ptr %18, align 4, !tbaa !14
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds i32, ptr %1006, i64 %1008
  %1010 = load i32, ptr %1009, align 4, !tbaa !14
  store i32 %1010, ptr %45, align 4, !tbaa !14
  %1011 = load ptr, ptr %29, align 8, !tbaa !5
  %1012 = load i32, ptr %45, align 4, !tbaa !14
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds i32, ptr %1011, i64 %1013
  %1015 = load i32, ptr %1014, align 4, !tbaa !14
  %1016 = add nsw i32 %1015, 1
  %1017 = srem i32 %1016, 2
  %1018 = load ptr, ptr %29, align 8, !tbaa !5
  %1019 = load i32, ptr %45, align 4, !tbaa !14
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds i32, ptr %1018, i64 %1020
  store i32 %1017, ptr %1021, align 4, !tbaa !14
  store i32 %1017, ptr %20, align 4, !tbaa !14
  br label %1022

1022:                                             ; preds = %1005
  %1023 = load ptr, ptr %30, align 8, !tbaa !5
  %1024 = load i32, ptr %45, align 4, !tbaa !14
  %1025 = sext i32 %1024 to i64
  %1026 = getelementptr inbounds i32, ptr %1023, i64 %1025
  %1027 = load i32, ptr %1026, align 4, !tbaa !14
  store i32 %1027, ptr %24, align 4, !tbaa !14
  %1028 = load ptr, ptr %31, align 8, !tbaa !5
  %1029 = load i32, ptr %45, align 4, !tbaa !14
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds i32, ptr %1028, i64 %1030
  %1032 = load i32, ptr %1031, align 4, !tbaa !14
  %1033 = load ptr, ptr %30, align 8, !tbaa !5
  %1034 = load i32, ptr %45, align 4, !tbaa !14
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds i32, ptr %1033, i64 %1035
  store i32 %1032, ptr %1036, align 4, !tbaa !14
  %1037 = load i32, ptr %24, align 4, !tbaa !14
  %1038 = load ptr, ptr %31, align 8, !tbaa !5
  %1039 = load i32, ptr %45, align 4, !tbaa !14
  %1040 = sext i32 %1039 to i64
  %1041 = getelementptr inbounds i32, ptr %1038, i64 %1040
  store i32 %1037, ptr %1041, align 4, !tbaa !14
  br label %1042

1042:                                             ; preds = %1022
  br label %1043

1043:                                             ; preds = %1042
  %1044 = load ptr, ptr %31, align 8, !tbaa !5
  %1045 = load i32, ptr %45, align 4, !tbaa !14
  %1046 = sext i32 %1045 to i64
  %1047 = getelementptr inbounds i32, ptr %1044, i64 %1046
  %1048 = load i32, ptr %1047, align 4, !tbaa !14
  %1049 = icmp eq i32 %1048, 0
  br i1 %1049, label %1050, label %1105

1050:                                             ; preds = %1043
  %1051 = load ptr, ptr %32, align 8, !tbaa !5
  %1052 = load i32, ptr %45, align 4, !tbaa !14
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds i32, ptr %1051, i64 %1053
  %1055 = load i32, ptr %1054, align 4, !tbaa !14
  %1056 = icmp ne i32 %1055, -1
  br i1 %1056, label %1057, label %1105

1057:                                             ; preds = %1050
  %1058 = load ptr, ptr %26, align 8, !tbaa !5
  %1059 = load i32, ptr %45, align 4, !tbaa !14
  %1060 = sext i32 %1059 to i64
  %1061 = getelementptr inbounds i32, ptr %1058, i64 %1060
  %1062 = load i32, ptr %1061, align 4, !tbaa !14
  %1063 = load ptr, ptr %26, align 8, !tbaa !5
  %1064 = load i32, ptr %45, align 4, !tbaa !14
  %1065 = add nsw i32 %1064, 1
  %1066 = sext i32 %1065 to i64
  %1067 = getelementptr inbounds i32, ptr %1063, i64 %1066
  %1068 = load i32, ptr %1067, align 4, !tbaa !14
  %1069 = icmp slt i32 %1062, %1068
  br i1 %1069, label %1070, label %1105

1070:                                             ; preds = %1057
  br label %1071

1071:                                             ; preds = %1070
  %1072 = load ptr, ptr %33, align 8, !tbaa !5
  %1073 = load i32, ptr %17, align 4, !tbaa !14
  %1074 = add nsw i32 %1073, -1
  store i32 %1074, ptr %17, align 4, !tbaa !14
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds i32, ptr %1072, i64 %1075
  %1077 = load i32, ptr %1076, align 4, !tbaa !14
  %1078 = load ptr, ptr %33, align 8, !tbaa !5
  %1079 = load ptr, ptr %32, align 8, !tbaa !5
  %1080 = load i32, ptr %45, align 4, !tbaa !14
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds i32, ptr %1079, i64 %1081
  %1083 = load i32, ptr %1082, align 4, !tbaa !14
  %1084 = sext i32 %1083 to i64
  %1085 = getelementptr inbounds i32, ptr %1078, i64 %1084
  store i32 %1077, ptr %1085, align 4, !tbaa !14
  %1086 = load ptr, ptr %32, align 8, !tbaa !5
  %1087 = load i32, ptr %45, align 4, !tbaa !14
  %1088 = sext i32 %1087 to i64
  %1089 = getelementptr inbounds i32, ptr %1086, i64 %1088
  %1090 = load i32, ptr %1089, align 4, !tbaa !14
  %1091 = load ptr, ptr %32, align 8, !tbaa !5
  %1092 = load ptr, ptr %33, align 8, !tbaa !5
  %1093 = load i32, ptr %17, align 4, !tbaa !14
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds i32, ptr %1092, i64 %1094
  %1096 = load i32, ptr %1095, align 4, !tbaa !14
  %1097 = sext i32 %1096 to i64
  %1098 = getelementptr inbounds i32, ptr %1091, i64 %1097
  store i32 %1090, ptr %1098, align 4, !tbaa !14
  %1099 = load ptr, ptr %32, align 8, !tbaa !5
  %1100 = load i32, ptr %45, align 4, !tbaa !14
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds i32, ptr %1099, i64 %1101
  store i32 -1, ptr %1102, align 4, !tbaa !14
  br label %1103

1103:                                             ; preds = %1071
  br label %1104

1104:                                             ; preds = %1103
  br label %1135

1105:                                             ; preds = %1057, %1050, %1043
  %1106 = load ptr, ptr %31, align 8, !tbaa !5
  %1107 = load i32, ptr %45, align 4, !tbaa !14
  %1108 = sext i32 %1107 to i64
  %1109 = getelementptr inbounds i32, ptr %1106, i64 %1108
  %1110 = load i32, ptr %1109, align 4, !tbaa !14
  %1111 = icmp sgt i32 %1110, 0
  br i1 %1111, label %1112, label %1134

1112:                                             ; preds = %1105
  %1113 = load ptr, ptr %32, align 8, !tbaa !5
  %1114 = load i32, ptr %45, align 4, !tbaa !14
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds i32, ptr %1113, i64 %1115
  %1117 = load i32, ptr %1116, align 4, !tbaa !14
  %1118 = icmp eq i32 %1117, -1
  br i1 %1118, label %1119, label %1134

1119:                                             ; preds = %1112
  br label %1120

1120:                                             ; preds = %1119
  %1121 = load i32, ptr %45, align 4, !tbaa !14
  %1122 = load ptr, ptr %33, align 8, !tbaa !5
  %1123 = load i32, ptr %17, align 4, !tbaa !14
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds i32, ptr %1122, i64 %1124
  store i32 %1121, ptr %1125, align 4, !tbaa !14
  %1126 = load i32, ptr %17, align 4, !tbaa !14
  %1127 = add nsw i32 %1126, 1
  store i32 %1127, ptr %17, align 4, !tbaa !14
  %1128 = load ptr, ptr %32, align 8, !tbaa !5
  %1129 = load i32, ptr %45, align 4, !tbaa !14
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds i32, ptr %1128, i64 %1130
  store i32 %1126, ptr %1131, align 4, !tbaa !14
  br label %1132

1132:                                             ; preds = %1120
  br label %1133

1133:                                             ; preds = %1132
  br label %1134

1134:                                             ; preds = %1133, %1112, %1105
  br label %1135

1135:                                             ; preds = %1134, %1104
  %1136 = load i32, ptr %16, align 4, !tbaa !14
  %1137 = load ptr, ptr %38, align 8, !tbaa !5
  %1138 = load i32, ptr %45, align 4, !tbaa !14
  %1139 = load i32, ptr %16, align 4, !tbaa !14
  %1140 = mul nsw i32 %1138, %1139
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds float, ptr %1137, i64 %1141
  %1143 = load ptr, ptr %39, align 8, !tbaa !5
  %1144 = load i32, ptr %20, align 4, !tbaa !14
  %1145 = load i32, ptr %16, align 4, !tbaa !14
  %1146 = mul nsw i32 %1144, %1145
  %1147 = sext i32 %1146 to i64
  %1148 = getelementptr inbounds float, ptr %1143, i64 %1147
  call void @__saxpy(i32 noundef %1136, float noundef 1.000000e+00, ptr noundef %1142, i32 noundef 1, ptr noundef %1148, i32 noundef 1)
  %1149 = load i32, ptr %16, align 4, !tbaa !14
  %1150 = load ptr, ptr %38, align 8, !tbaa !5
  %1151 = load i32, ptr %45, align 4, !tbaa !14
  %1152 = load i32, ptr %16, align 4, !tbaa !14
  %1153 = mul nsw i32 %1151, %1152
  %1154 = sext i32 %1153 to i64
  %1155 = getelementptr inbounds float, ptr %1150, i64 %1154
  %1156 = load ptr, ptr %39, align 8, !tbaa !5
  %1157 = load i32, ptr %20, align 4, !tbaa !14
  %1158 = add nsw i32 %1157, 1
  %1159 = srem i32 %1158, 2
  %1160 = load i32, ptr %16, align 4, !tbaa !14
  %1161 = mul nsw i32 %1159, %1160
  %1162 = sext i32 %1161 to i64
  %1163 = getelementptr inbounds float, ptr %1156, i64 %1162
  call void @__saxpy(i32 noundef %1149, float noundef -1.000000e+00, ptr noundef %1155, i32 noundef 1, ptr noundef %1163, i32 noundef 1)
  %1164 = load ptr, ptr %26, align 8, !tbaa !5
  %1165 = load i32, ptr %45, align 4, !tbaa !14
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds i32, ptr %1164, i64 %1166
  %1168 = load i32, ptr %1167, align 4, !tbaa !14
  store i32 %1168, ptr %11, align 4, !tbaa !14
  br label %1169

1169:                                             ; preds = %1301, %1135
  %1170 = load i32, ptr %11, align 4, !tbaa !14
  %1171 = load ptr, ptr %26, align 8, !tbaa !5
  %1172 = load i32, ptr %45, align 4, !tbaa !14
  %1173 = add nsw i32 %1172, 1
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds i32, ptr %1171, i64 %1174
  %1176 = load i32, ptr %1175, align 4, !tbaa !14
  %1177 = icmp slt i32 %1170, %1176
  br i1 %1177, label %1178, label %1304

1178:                                             ; preds = %1169
  %1179 = load ptr, ptr %27, align 8, !tbaa !5
  %1180 = load i32, ptr %11, align 4, !tbaa !14
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds i32, ptr %1179, i64 %1181
  %1183 = load i32, ptr %1182, align 4, !tbaa !14
  store i32 %1183, ptr %12, align 4, !tbaa !14
  %1184 = load i32, ptr %20, align 4, !tbaa !14
  %1185 = load ptr, ptr %29, align 8, !tbaa !5
  %1186 = load i32, ptr %12, align 4, !tbaa !14
  %1187 = sext i32 %1186 to i64
  %1188 = getelementptr inbounds i32, ptr %1185, i64 %1187
  %1189 = load i32, ptr %1188, align 4, !tbaa !14
  %1190 = icmp eq i32 %1184, %1189
  br i1 %1190, label %1191, label %1197

1191:                                             ; preds = %1178
  %1192 = load ptr, ptr %28, align 8, !tbaa !5
  %1193 = load i32, ptr %11, align 4, !tbaa !14
  %1194 = sext i32 %1193 to i64
  %1195 = getelementptr inbounds i32, ptr %1192, i64 %1194
  %1196 = load i32, ptr %1195, align 4, !tbaa !14
  br label %1204

1197:                                             ; preds = %1178
  %1198 = load ptr, ptr %28, align 8, !tbaa !5
  %1199 = load i32, ptr %11, align 4, !tbaa !14
  %1200 = sext i32 %1199 to i64
  %1201 = getelementptr inbounds i32, ptr %1198, i64 %1200
  %1202 = load i32, ptr %1201, align 4, !tbaa !14
  %1203 = sub nsw i32 0, %1202
  br label %1204

1204:                                             ; preds = %1197, %1191
  %1205 = phi i32 [ %1196, %1191 ], [ %1203, %1197 ]
  store i32 %1205, ptr %14, align 4, !tbaa !14
  br label %1206

1206:                                             ; preds = %1204
  %1207 = load i32, ptr %14, align 4, !tbaa !14
  %1208 = load ptr, ptr %30, align 8, !tbaa !5
  %1209 = load i32, ptr %12, align 4, !tbaa !14
  %1210 = sext i32 %1209 to i64
  %1211 = getelementptr inbounds i32, ptr %1208, i64 %1210
  %1212 = load i32, ptr %1211, align 4, !tbaa !14
  %1213 = add nsw i32 %1212, %1207
  store i32 %1213, ptr %1211, align 4, !tbaa !14
  %1214 = load i32, ptr %14, align 4, !tbaa !14
  %1215 = load ptr, ptr %31, align 8, !tbaa !5
  %1216 = load i32, ptr %12, align 4, !tbaa !14
  %1217 = sext i32 %1216 to i64
  %1218 = getelementptr inbounds i32, ptr %1215, i64 %1217
  %1219 = load i32, ptr %1218, align 4, !tbaa !14
  %1220 = sub nsw i32 %1219, %1214
  store i32 %1220, ptr %1218, align 4, !tbaa !14
  br label %1221

1221:                                             ; preds = %1206
  br label %1222

1222:                                             ; preds = %1221
  %1223 = load ptr, ptr %32, align 8, !tbaa !5
  %1224 = load i32, ptr %12, align 4, !tbaa !14
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds i32, ptr %1223, i64 %1225
  %1227 = load i32, ptr %1226, align 4, !tbaa !14
  %1228 = icmp ne i32 %1227, -1
  br i1 %1228, label %1229, label %1271

1229:                                             ; preds = %1222
  %1230 = load ptr, ptr %31, align 8, !tbaa !5
  %1231 = load i32, ptr %12, align 4, !tbaa !14
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds i32, ptr %1230, i64 %1232
  %1234 = load i32, ptr %1233, align 4, !tbaa !14
  %1235 = icmp eq i32 %1234, 0
  br i1 %1235, label %1236, label %1271

1236:                                             ; preds = %1229
  br label %1237

1237:                                             ; preds = %1236
  %1238 = load ptr, ptr %33, align 8, !tbaa !5
  %1239 = load i32, ptr %17, align 4, !tbaa !14
  %1240 = add nsw i32 %1239, -1
  store i32 %1240, ptr %17, align 4, !tbaa !14
  %1241 = sext i32 %1240 to i64
  %1242 = getelementptr inbounds i32, ptr %1238, i64 %1241
  %1243 = load i32, ptr %1242, align 4, !tbaa !14
  %1244 = load ptr, ptr %33, align 8, !tbaa !5
  %1245 = load ptr, ptr %32, align 8, !tbaa !5
  %1246 = load i32, ptr %12, align 4, !tbaa !14
  %1247 = sext i32 %1246 to i64
  %1248 = getelementptr inbounds i32, ptr %1245, i64 %1247
  %1249 = load i32, ptr %1248, align 4, !tbaa !14
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds i32, ptr %1244, i64 %1250
  store i32 %1243, ptr %1251, align 4, !tbaa !14
  %1252 = load ptr, ptr %32, align 8, !tbaa !5
  %1253 = load i32, ptr %12, align 4, !tbaa !14
  %1254 = sext i32 %1253 to i64
  %1255 = getelementptr inbounds i32, ptr %1252, i64 %1254
  %1256 = load i32, ptr %1255, align 4, !tbaa !14
  %1257 = load ptr, ptr %32, align 8, !tbaa !5
  %1258 = load ptr, ptr %33, align 8, !tbaa !5
  %1259 = load i32, ptr %17, align 4, !tbaa !14
  %1260 = sext i32 %1259 to i64
  %1261 = getelementptr inbounds i32, ptr %1258, i64 %1260
  %1262 = load i32, ptr %1261, align 4, !tbaa !14
  %1263 = sext i32 %1262 to i64
  %1264 = getelementptr inbounds i32, ptr %1257, i64 %1263
  store i32 %1256, ptr %1264, align 4, !tbaa !14
  %1265 = load ptr, ptr %32, align 8, !tbaa !5
  %1266 = load i32, ptr %12, align 4, !tbaa !14
  %1267 = sext i32 %1266 to i64
  %1268 = getelementptr inbounds i32, ptr %1265, i64 %1267
  store i32 -1, ptr %1268, align 4, !tbaa !14
  br label %1269

1269:                                             ; preds = %1237
  br label %1270

1270:                                             ; preds = %1269
  br label %1271

1271:                                             ; preds = %1270, %1229, %1222
  %1272 = load ptr, ptr %32, align 8, !tbaa !5
  %1273 = load i32, ptr %12, align 4, !tbaa !14
  %1274 = sext i32 %1273 to i64
  %1275 = getelementptr inbounds i32, ptr %1272, i64 %1274
  %1276 = load i32, ptr %1275, align 4, !tbaa !14
  %1277 = icmp eq i32 %1276, -1
  br i1 %1277, label %1278, label %1300

1278:                                             ; preds = %1271
  %1279 = load ptr, ptr %31, align 8, !tbaa !5
  %1280 = load i32, ptr %12, align 4, !tbaa !14
  %1281 = sext i32 %1280 to i64
  %1282 = getelementptr inbounds i32, ptr %1279, i64 %1281
  %1283 = load i32, ptr %1282, align 4, !tbaa !14
  %1284 = icmp sgt i32 %1283, 0
  br i1 %1284, label %1285, label %1300

1285:                                             ; preds = %1278
  br label %1286

1286:                                             ; preds = %1285
  %1287 = load i32, ptr %12, align 4, !tbaa !14
  %1288 = load ptr, ptr %33, align 8, !tbaa !5
  %1289 = load i32, ptr %17, align 4, !tbaa !14
  %1290 = sext i32 %1289 to i64
  %1291 = getelementptr inbounds i32, ptr %1288, i64 %1290
  store i32 %1287, ptr %1291, align 4, !tbaa !14
  %1292 = load i32, ptr %17, align 4, !tbaa !14
  %1293 = add nsw i32 %1292, 1
  store i32 %1293, ptr %17, align 4, !tbaa !14
  %1294 = load ptr, ptr %32, align 8, !tbaa !5
  %1295 = load i32, ptr %12, align 4, !tbaa !14
  %1296 = sext i32 %1295 to i64
  %1297 = getelementptr inbounds i32, ptr %1294, i64 %1296
  store i32 %1292, ptr %1297, align 4, !tbaa !14
  br label %1298

1298:                                             ; preds = %1286
  br label %1299

1299:                                             ; preds = %1298
  br label %1300

1300:                                             ; preds = %1299, %1278, %1271
  br label %1301

1301:                                             ; preds = %1300
  %1302 = load i32, ptr %11, align 4, !tbaa !14
  %1303 = add nsw i32 %1302, 1
  store i32 %1303, ptr %11, align 4, !tbaa !14
  br label %1169, !llvm.loop !45

1304:                                             ; preds = %1169
  br label %1305

1305:                                             ; preds = %1304
  %1306 = load i32, ptr %18, align 4, !tbaa !14
  %1307 = add nsw i32 %1306, -1
  store i32 %1307, ptr %18, align 4, !tbaa !14
  br label %1001, !llvm.loop !46

1308:                                             ; preds = %1001
  %1309 = load ptr, ptr %5, align 8, !tbaa !5
  %1310 = getelementptr inbounds %struct.controldef, ptr %1309, i32 0, i32 1
  %1311 = load i32, ptr %1310, align 4, !tbaa !34
  %1312 = and i32 %1311, 8
  %1313 = icmp ne i32 %1312, 0
  br i1 %1313, label %1314, label %1349

1314:                                             ; preds = %1308
  %1315 = load i32, ptr %47, align 4, !tbaa !14
  %1316 = load i32, ptr %49, align 4, !tbaa !14
  %1317 = load i32, ptr %17, align 4, !tbaa !14
  %1318 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %1315, i32 noundef %1316, i32 noundef %1317)
  store i32 0, ptr %13, align 4, !tbaa !14
  br label %1319

1319:                                             ; preds = %1339, %1314
  %1320 = load i32, ptr %13, align 4, !tbaa !14
  %1321 = load i32, ptr %16, align 4, !tbaa !14
  %1322 = icmp slt i32 %1320, %1321
  br i1 %1322, label %1323, label %1342

1323:                                             ; preds = %1319
  %1324 = load ptr, ptr %39, align 8, !tbaa !5
  %1325 = load i32, ptr %13, align 4, !tbaa !14
  %1326 = sext i32 %1325 to i64
  %1327 = getelementptr inbounds float, ptr %1324, i64 %1326
  %1328 = load float, ptr %1327, align 4, !tbaa !9
  %1329 = fpext float %1328 to double
  %1330 = load ptr, ptr %39, align 8, !tbaa !5
  %1331 = load i32, ptr %16, align 4, !tbaa !14
  %1332 = load i32, ptr %13, align 4, !tbaa !14
  %1333 = add nsw i32 %1331, %1332
  %1334 = sext i32 %1333 to i64
  %1335 = getelementptr inbounds float, ptr %1330, i64 %1334
  %1336 = load float, ptr %1335, align 4, !tbaa !9
  %1337 = fpext float %1336 to double
  %1338 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %1329, double noundef %1337)
  br label %1339

1339:                                             ; preds = %1323
  %1340 = load i32, ptr %13, align 4, !tbaa !14
  %1341 = add nsw i32 %1340, 1
  store i32 %1341, ptr %13, align 4, !tbaa !14
  br label %1319, !llvm.loop !47

1342:                                             ; preds = %1319
  %1343 = load i32, ptr %16, align 4, !tbaa !14
  %1344 = load ptr, ptr %39, align 8, !tbaa !5
  %1345 = load ptr, ptr %7, align 8, !tbaa !5
  %1346 = call float @__Compute2WayHLoadImbalance(i32 noundef %1343, ptr noundef %1344, ptr noundef %1345)
  %1347 = fpext float %1346 to double
  %1348 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %1347)
  br label %1349

1349:                                             ; preds = %1342, %1308
  %1350 = load i32, ptr %47, align 4, !tbaa !14
  %1351 = load ptr, ptr %6, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.graphdef, ptr %1351, i32 0, i32 12
  store i32 %1350, ptr %1352, align 8, !tbaa !33
  %1353 = load i32, ptr %17, align 4, !tbaa !14
  %1354 = load ptr, ptr %6, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.graphdef, ptr %1354, i32 0, i32 16
  store i32 %1353, ptr %1355, align 8, !tbaa !39
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %1356

1356:                                             ; preds = %1371, %1349
  %1357 = load i32, ptr %9, align 4, !tbaa !14
  %1358 = load i32, ptr %16, align 4, !tbaa !14
  %1359 = icmp slt i32 %1357, %1358
  br i1 %1359, label %1360, label %1374

1360:                                             ; preds = %1356
  %1361 = load ptr, ptr %5, align 8, !tbaa !5
  %1362 = load i32, ptr %9, align 4, !tbaa !14
  %1363 = sext i32 %1362 to i64
  %1364 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1363
  %1365 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1364, i64 0, i64 0
  call void @__PQueueFree(ptr noundef %1361, ptr noundef %1365)
  %1366 = load ptr, ptr %5, align 8, !tbaa !5
  %1367 = load i32, ptr %9, align 4, !tbaa !14
  %1368 = sext i32 %1367 to i64
  %1369 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1368
  %1370 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1369, i64 0, i64 1
  call void @__PQueueFree(ptr noundef %1366, ptr noundef %1370)
  br label %1371

1371:                                             ; preds = %1360
  %1372 = load i32, ptr %9, align 4, !tbaa !14
  %1373 = add nsw i32 %1372, 1
  store i32 %1373, ptr %9, align 4, !tbaa !14
  br label %1356, !llvm.loop !48

1374:                                             ; preds = %1356
  %1375 = load ptr, ptr %5, align 8, !tbaa !5
  %1376 = load i32, ptr %15, align 4, !tbaa !14
  call void @__idxwspacefree(ptr noundef %1375, i32 noundef %1376)
  %1377 = load ptr, ptr %5, align 8, !tbaa !5
  %1378 = load i32, ptr %15, align 4, !tbaa !14
  call void @__idxwspacefree(ptr noundef %1377, i32 noundef %1378)
  %1379 = load ptr, ptr %5, align 8, !tbaa !5
  %1380 = load i32, ptr %15, align 4, !tbaa !14
  call void @__idxwspacefree(ptr noundef %1379, i32 noundef %1380)
  %1381 = load ptr, ptr %5, align 8, !tbaa !5
  %1382 = load i32, ptr %15, align 4, !tbaa !14
  call void @__idxwspacefree(ptr noundef %1381, i32 noundef %1382)
  call void @llvm.lifetime.end.p0(i64 128, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  ret void
}

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

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

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

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

declare i32 @__samax2(i32 noundef, ptr noundef) #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #3

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

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

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

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

declare void @__SelectQueue(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @__PQueueGetMax(ptr noundef) #0

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

declare i32 @__BetterBalance(i32 noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

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

attributes #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 #1 = { 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

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


; 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 [58 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1

declare float @__Compute2WayHLoadImbalance(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @__MocGeneral2WayBalance(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, float noundef %3) local_unnamed_addr #1 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca [16 x float], align 16
  %8 = ptrtoint ptr %7 to i64
  %9 = alloca [16 x [2 x %struct.PQueueType]], align 16
  %10 = alloca [16 x [2 x i32]], 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 2048, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %10) #5
  %11 = getelementptr inbounds i8, ptr %1, i64 16
  %12 = load i32, ptr %11, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %1, i64 176
  %14 = load i32, ptr %13, align 8, !tbaa !11
  %15 = getelementptr inbounds i8, ptr %1, i64 24
  %16 = load ptr, ptr %15, align 8, !tbaa !12
  %17 = getelementptr inbounds i8, ptr %1, i64 184
  %18 = load ptr, ptr %17, align 8, !tbaa !13
  %19 = getelementptr inbounds i8, ptr %1, i64 48
  %20 = load ptr, ptr %19, align 8, !tbaa !14
  %21 = getelementptr inbounds i8, ptr %1, i64 56
  %22 = load ptr, ptr %21, align 8, !tbaa !15
  %23 = getelementptr inbounds i8, ptr %1, i64 96
  %24 = load ptr, ptr %23, align 8, !tbaa !16
  %25 = getelementptr inbounds i8, ptr %1, i64 136
  %26 = load ptr, ptr %25, align 8, !tbaa !17
  %27 = getelementptr inbounds i8, ptr %1, i64 144
  %28 = load ptr, ptr %27, align 8, !tbaa !18
  %29 = getelementptr inbounds i8, ptr %1, i64 192
  %30 = load ptr, ptr %29, align 8, !tbaa !19
  %31 = ptrtoint ptr %30 to i64
  %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 %12) #5
  %37 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %12) #5
  %38 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %12) #5
  %39 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %12) #5
  %40 = sitofp i32 %12 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 = icmp sgt i32 %14, 0
  br i1 %46, label %.lr.ph.preheader, label %.preheader523.thread

.lr.ph.preheader:                                 ; preds = %4
  %wide.trip.count = zext nneg i32 %14 to i64
  br label %.lr.ph

.preheader523:                                    ; preds = %.lr.ph
  %47 = icmp sgt i32 %12, 0
  br i1 %47, label %.lr.ph535.preheader, label %.preheader522.thread

.preheader523.thread:                             ; preds = %4
  %48 = icmp sgt i32 %12, 0
  br i1 %48, label %.lr.ph535.preheader, label %.preheader518.thread687

.lr.ph535.preheader:                              ; preds = %.preheader523.thread, %.preheader523
  %49 = sext i32 %14 to i64
  %wide.trip.count622 = zext nneg i32 %12 to i64
  br label %.lr.ph535

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %50 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %indvars.iv
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %50, i32 noundef %12, i32 noundef 501) #5
  %51 = getelementptr inbounds i8, ptr %50, i64 64
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %51, i32 noundef %12, i32 noundef 501) #5
  %52 = getelementptr inbounds [16 x [2 x i32]], ptr %10, i64 0, i64 %indvars.iv
  %53 = getelementptr inbounds i8, ptr %52, i64 4
  store i32 0, ptr %53, align 4, !tbaa !22
  store i32 0, ptr %52, align 8, !tbaa !22
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader523, label %.lr.ph, !llvm.loop !23

.preheader522:                                    ; preds = %.lr.ph535
  store i32 0, ptr %5, align 4, !tbaa !22
  br i1 %46, label %.preheader521.us.us.preheader, label %.preheader518.thread687

.preheader522.thread:                             ; preds = %.preheader523
  br i1 %46, label %.preheader518.thread, label %.preheader518.thread687

.preheader521.us.us.preheader:                    ; preds = %.preheader522
  %54 = zext nneg i32 %14 to i64
  %wide.trip.count628 = zext nneg i32 %12 to i64
  br label %.preheader521.us.us

.preheader521.us.us:                              ; preds = %.preheader521.us.us.backedge, %.preheader521.us.us.preheader
  %indvars.iv630 = phi i64 [ 0, %.preheader521.us.us.preheader ], [ %indvars.iv630.be, %.preheader521.us.us.backedge ]
  %55 = load i32, ptr %5, align 4, !tbaa !22
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds [16 x [2 x i32]], ptr %10, i64 0, i64 %indvars.iv630, i64 %56
  %58 = load i32, ptr %57, align 4, !tbaa !22
  %59 = icmp eq i32 %58, 0
  br i1 %59, label %.preheader519.us.us.us.preheader, label %..loopexit520_crit_edge.us.us.us

.preheader519.us.us.us.preheader:                 ; preds = %.preheader521.us.us
  %invariant.gep = getelementptr inbounds float, ptr %18, i64 %indvars.iv630
  %60 = trunc nuw nsw i64 %indvars.iv630 to i32
  br label %.preheader519.us.us.us

..loopexit520_crit_edge.us.us.us:                 ; preds = %96, %.preheader521.us.us
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %exitcond634.not = icmp eq i64 %indvars.iv.next631, %54
  br i1 %exitcond634.not, label %._crit_edge.split.us.us.us, label %.preheader521.us.us.backedge

.preheader521.us.us.backedge:                     ; preds = %..loopexit520_crit_edge.us.us.us, %._crit_edge.split.us.us.us
  %indvars.iv630.be = phi i64 [ %indvars.iv.next631, %..loopexit520_crit_edge.us.us.us ], [ 0, %._crit_edge.split.us.us.us ]
  br label %.preheader521.us.us, !llvm.loop !25

.preheader519.us.us.us:                           ; preds = %.preheader519.us.us.us.preheader, %96
  %indvars.iv625 = phi i64 [ 0, %.preheader519.us.us.us.preheader ], [ %indvars.iv.next626, %96 ]
  %61 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv625
  %62 = load i32, ptr %61, align 4, !tbaa !22
  %63 = load i32, ptr %5, align 4, !tbaa !22
  %.not509.us.us.us = icmp eq i32 %62, %63
  br i1 %.not509.us.us.us, label %64, label %96

64:                                               ; preds = %.preheader519.us.us.us
  %65 = mul nuw nsw i64 %indvars.iv625, %54
  %66 = getelementptr inbounds float, ptr %18, i64 %65
  %67 = call i32 @__samax2(i32 noundef %14, ptr noundef %66) #5
  %68 = zext i32 %67 to i64
  %69 = icmp eq i64 %indvars.iv630, %68
  br i1 %69, label %70, label %96

70:                                               ; preds = %64
  %71 = getelementptr inbounds i32, ptr %39, i64 %indvars.iv625
  %72 = load i32, ptr %71, align 4, !tbaa !22
  %73 = sext i32 %72 to i64
  %74 = load i32, ptr %5, align 4, !tbaa !22
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [16 x [2 x i32]], ptr %10, i64 0, i64 %73, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !22
  %78 = getelementptr inbounds [16 x [2 x i32]], ptr %10, i64 0, i64 %indvars.iv630, i64 %75
  %79 = load i32, ptr %78, align 4, !tbaa !22
  %80 = icmp sgt i32 %77, %79
  br i1 %80, label %81, label %96

81:                                               ; preds = %70
  %82 = trunc nuw i64 %65 to i32
  %83 = add nsw i32 %72, %82
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds float, ptr %18, i64 %84
  %86 = load float, ptr %85, align 4, !tbaa !26
  %87 = fpext float %86 to double
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %65
  %88 = load float, ptr %gep, align 4, !tbaa !26
  %89 = fpext float %88 to double
  %90 = fmul double %89, 1.300000e+00
  %91 = fcmp ogt double %90, %87
  br i1 %91, label %92, label %96

92:                                               ; preds = %81
  %93 = add nsw i32 %77, -1
  store i32 %93, ptr %76, align 4, !tbaa !22
  %94 = load i32, ptr %78, align 4, !tbaa !22
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %78, align 4, !tbaa !22
  store i32 %60, ptr %71, align 4, !tbaa !22
  br label %96

96:                                               ; preds = %92, %81, %70, %64, %.preheader519.us.us.us
  %indvars.iv.next626 = add nuw nsw i64 %indvars.iv625, 1
  %exitcond629.not = icmp eq i64 %indvars.iv.next626, %wide.trip.count628
  br i1 %exitcond629.not, label %..loopexit520_crit_edge.us.us.us, label %.preheader519.us.us.us, !llvm.loop !28

._crit_edge.split.us.us.us:                       ; preds = %..loopexit520_crit_edge.us.us.us
  %97 = load i32, ptr %5, align 4, !tbaa !22
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %5, align 4, !tbaa !22
  %99 = icmp slt i32 %97, 1
  br i1 %99, label %.preheader521.us.us.backedge, label %.preheader518

.preheader518.thread:                             ; preds = %.preheader522.thread
  store i32 2, ptr %5, align 4, !tbaa !22
  br label %.lr.ph549

.preheader518.thread687:                          ; preds = %.preheader523.thread, %.preheader522, %.preheader522.thread
  %100 = phi i1 [ false, %.preheader522.thread ], [ true, %.preheader522 ], [ false, %.preheader523.thread ]
  store i32 2, ptr %5, align 4, !tbaa !22
  br label %._crit_edge

.lr.ph535:                                        ; preds = %.lr.ph535.preheader, %.lr.ph535
  %indvars.iv619 = phi i64 [ 0, %.lr.ph535.preheader ], [ %indvars.iv.next620, %.lr.ph535 ]
  %101 = mul nsw i64 %indvars.iv619, %49
  %102 = getelementptr inbounds float, ptr %18, i64 %101
  %103 = call i32 @__samax(i32 noundef %14, ptr noundef %102) #5
  %104 = getelementptr inbounds i32, ptr %39, i64 %indvars.iv619
  store i32 %103, ptr %104, align 4, !tbaa !22
  %105 = sext i32 %103 to i64
  %106 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv619
  %107 = load i32, ptr %106, align 4, !tbaa !22
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [16 x [2 x i32]], ptr %10, i64 0, i64 %105, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !22
  %111 = add nsw i32 %110, 1
  store i32 %111, ptr %109, align 4, !tbaa !22
  %indvars.iv.next620 = add nuw nsw i64 %indvars.iv619, 1
  %exitcond623.not = icmp eq i64 %indvars.iv.next620, %wide.trip.count622
  br i1 %exitcond623.not, label %.preheader522, label %.lr.ph535, !llvm.loop !29

.preheader518:                                    ; preds = %._crit_edge.split.us.us.us
  br i1 %46, label %.lr.ph549, label %._crit_edge

.lr.ph549:                                        ; preds = %.preheader518.thread, %.preheader518
  %112 = phi i1 [ false, %.preheader518.thread ], [ true, %.preheader518 ]
  %113 = load float, ptr %2, align 4, !tbaa !26
  %wide.trip.count638 = zext i32 %14 to i64
  %min.iters.check = icmp ult i32 %14, 8
  %114 = sub i64 %8, %31
  %diff.check = icmp ult i64 %114, 32
  %or.cond742 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond742, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph549
  %n.vec = and i64 %wide.trip.count638, 2147483640
  %broadcast.splatinsert = insertelement <4 x float> poison, float %113, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %115 = getelementptr inbounds float, ptr %30, i64 %index
  %116 = getelementptr inbounds i8, ptr %115, i64 16
  %wide.load = load <4 x float>, ptr %115, align 4, !tbaa !26
  %wide.load724 = load <4 x float>, ptr %116, align 4, !tbaa !26
  %117 = fsub <4 x float> %broadcast.splat, %wide.load
  %118 = fsub <4 x float> %broadcast.splat, %wide.load724
  %119 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %117)
  %120 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %118)
  %121 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index
  %122 = getelementptr inbounds i8, ptr %121, i64 16
  store <4 x float> %119, ptr %121, align 16, !tbaa !26
  store <4 x float> %120, ptr %122, align 16, !tbaa !26
  %index.next = add nuw i64 %index, 8
  %123 = icmp eq i64 %index.next, %n.vec
  br i1 %123, label %middle.block, label %vector.body, !llvm.loop !30

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph549
  %indvars.iv635.ph = phi i64 [ 0, %.lr.ph549 ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count638, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %124 = getelementptr inbounds float, ptr %30, i64 %indvars.iv635.ph
  %125 = load float, ptr %124, align 4, !tbaa !26
  %126 = fsub float %113, %125
  %127 = call float @llvm.fabs.f32(float %126)
  %128 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv635.ph
  store float %127, ptr %128, align 16, !tbaa !26
  %indvars.iv.next636.prol = or disjoint i64 %indvars.iv635.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv635.unr = phi i64 [ %indvars.iv635.ph, %scalar.ph.preheader ], [ %indvars.iv.next636.prol, %scalar.ph.prol ]
  %129 = add nsw i64 %wide.trip.count638, -1
  %130 = icmp eq i64 %indvars.iv635.ph, %129
  br i1 %130, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv635 = phi i64 [ %indvars.iv.next636.1, %scalar.ph ], [ %indvars.iv635.unr, %scalar.ph.prol.loopexit ]
  %131 = getelementptr inbounds float, ptr %30, i64 %indvars.iv635
  %132 = load float, ptr %131, align 4, !tbaa !26
  %133 = fsub float %113, %132
  %134 = call float @llvm.fabs.f32(float %133)
  %135 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv635
  store float %134, ptr %135, align 4, !tbaa !26
  %indvars.iv.next636 = add nuw nsw i64 %indvars.iv635, 1
  %136 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next636
  %137 = load float, ptr %136, align 4, !tbaa !26
  %138 = fsub float %113, %137
  %139 = call float @llvm.fabs.f32(float %138)
  %140 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv.next636
  store float %139, ptr %140, align 4, !tbaa !26
  %indvars.iv.next636.1 = add nuw nsw i64 %indvars.iv635, 2
  %exitcond639.not.1 = icmp eq i64 %indvars.iv.next636.1, %wide.trip.count638
  br i1 %exitcond639.not.1, label %._crit_edge, label %scalar.ph, !llvm.loop !33

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader518.thread687, %.preheader518
  %141 = phi i1 [ %100, %.preheader518.thread687 ], [ true, %.preheader518 ], [ %112, %middle.block ], [ %112, %scalar.ph ], [ %112, %scalar.ph.prol.loopexit ]
  %142 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef %2) #5
  %143 = getelementptr inbounds i8, ptr %1, i64 88
  %144 = load i32, ptr %143, align 8, !tbaa !34
  %145 = getelementptr inbounds i8, ptr %0, i64 4
  %146 = load i32, ptr %145, align 4, !tbaa !35
  %147 = and i32 %146, 8
  %.not = icmp eq i32 %147, 0
  br i1 %.not, label %168, label %148

148:                                              ; preds = %._crit_edge
  %149 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  br i1 %46, label %.lr.ph552.preheader, label %._crit_edge553

.lr.ph552.preheader:                              ; preds = %148
  %150 = zext nneg i32 %14 to i64
  %invariant.gep696 = getelementptr inbounds float, ptr %30, i64 %150
  br label %.lr.ph552

.lr.ph552:                                        ; preds = %.lr.ph552.preheader, %.lr.ph552
  %indvars.iv640 = phi i64 [ 0, %.lr.ph552.preheader ], [ %indvars.iv.next641, %.lr.ph552 ]
  %151 = getelementptr inbounds float, ptr %30, i64 %indvars.iv640
  %152 = load float, ptr %151, align 4, !tbaa !26
  %153 = fpext float %152 to double
  %gep697 = getelementptr inbounds float, ptr %invariant.gep696, i64 %indvars.iv640
  %154 = load float, ptr %gep697, align 4, !tbaa !26
  %155 = fpext float %154 to double
  %156 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %153, double noundef %155)
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %exitcond644.not = icmp eq i64 %indvars.iv.next641, %150
  br i1 %exitcond644.not, label %._crit_edge553, label %.lr.ph552, !llvm.loop !39

._crit_edge553:                                   ; preds = %.lr.ph552, %148
  %157 = load float, ptr %2, align 4, !tbaa !26
  %158 = fpext float %157 to double
  %159 = getelementptr inbounds i8, ptr %2, i64 4
  %160 = load float, ptr %159, align 4, !tbaa !26
  %161 = fpext float %160 to double
  %162 = load i32, ptr %11, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %1, i64 112
  %164 = load i32, ptr %163, align 8, !tbaa !40
  %165 = load i32, ptr %143, align 8, !tbaa !34
  %166 = fpext float %142 to double
  %167 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, double noundef %158, double noundef %161, i32 noundef %162, i32 noundef %164, i32 noundef %165, double noundef %166)
  br label %168

168:                                              ; preds = %._crit_edge553, %._crit_edge
  %169 = call ptr @__idxset(i32 noundef %12, i32 noundef -1, ptr noundef %36) #5
  %170 = getelementptr inbounds i8, ptr %1, i64 112
  %171 = load i32, ptr %170, align 8, !tbaa !40
  call void @__RandomPermute(i32 noundef %12, ptr noundef %38, i32 noundef 1) #5
  br i1 %141, label %.lr.ph556.preheader, label %.loopexit517

.lr.ph556.preheader:                              ; preds = %168
  %wide.trip.count648 = zext nneg i32 %12 to i64
  br label %.lr.ph556

.preheader:                                       ; preds = %.lr.ph556
  %172 = icmp slt i32 %12, 1
  %173 = fcmp olt float %142, %3
  %or.cond569 = select i1 %172, i1 true, i1 %173
  br i1 %or.cond569, label %.loopexit517, label %.lr.ph577

.lr.ph577:                                        ; preds = %.preheader
  %174 = zext i32 %14 to i64
  %175 = zext nneg i32 %12 to i64
  %invariant.gep698 = getelementptr inbounds float, ptr %30, i64 %174
  %176 = sub i64 %8, %31
  %min.iters.check729 = icmp ult i32 %14, 8
  %diff.check726 = icmp ult i64 %176, 32
  %or.cond743 = select i1 %min.iters.check729, i1 true, i1 %diff.check726
  %n.vec732 = and i64 %174, 2147483640
  %cmp.n741 = icmp eq i64 %n.vec732, %174
  %xtraiter756 = and i64 %174, 1
  %lcmp.mod757.not = icmp eq i64 %xtraiter756, 0
  %177 = add nsw i64 %174, -1
  br label %194

.lr.ph556:                                        ; preds = %.lr.ph556.preheader, %.lr.ph556
  %indvars.iv645 = phi i64 [ 0, %.lr.ph556.preheader ], [ %indvars.iv.next646, %.lr.ph556 ]
  %178 = getelementptr inbounds i32, ptr %38, i64 %indvars.iv645
  %179 = load i32, ptr %178, align 4, !tbaa !22
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %39, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !22
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %24, i64 %180
  %185 = load i32, ptr %184, align 4, !tbaa !22
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %183, i64 %186
  %188 = getelementptr inbounds i32, ptr %28, i64 %180
  %189 = load i32, ptr %188, align 4, !tbaa !22
  %190 = getelementptr inbounds i32, ptr %26, i64 %180
  %191 = load i32, ptr %190, align 4, !tbaa !22
  %192 = sub nsw i32 %189, %191
  %193 = call i32 @__PQueueInsert(ptr noundef nonnull %187, i32 noundef %179, i32 noundef %192) #5
  %indvars.iv.next646 = add nuw nsw i64 %indvars.iv645, 1
  %exitcond649.not = icmp eq i64 %indvars.iv.next646, %wide.trip.count648
  br i1 %exitcond649.not, label %.preheader, label %.lr.ph556, !llvm.loop !41

194:                                              ; preds = %.lr.ph577, %._crit_edge568
  %indvars.iv663 = phi i64 [ 0, %.lr.ph577 ], [ %indvars.iv.next664, %._crit_edge568 ]
  %.0576 = phi i32 [ -1, %.lr.ph577 ], [ %.1, %._crit_edge568 ]
  %.0468575 = phi i32 [ %144, %.lr.ph577 ], [ %223, %._crit_edge568 ]
  %.0469574 = phi i32 [ %144, %.lr.ph577 ], [ %.1470, %._crit_edge568 ]
  %.0474573 = phi float [ %142, %.lr.ph577 ], [ %.1475, %._crit_edge568 ]
  %.0482571 = phi i32 [ %171, %.lr.ph577 ], [ %.3485.lcssa, %._crit_edge568 ]
  call void @__SelectQueue(i32 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %9) #5
  %195 = load i32, ptr %5, align 4, !tbaa !22
  %196 = add nsw i32 %195, 1
  %197 = srem i32 %196, 2
  %198 = icmp eq i32 %195, -1
  %199 = trunc nuw nsw i64 %indvars.iv663 to i32
  br i1 %198, label %.loopexit517, label %200

200:                                              ; preds = %194
  %201 = load i32, ptr %6, align 4, !tbaa !22
  %202 = sext i32 %201 to i64
  %203 = sext i32 %195 to i64
  %204 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %202, i64 %203
  %205 = call i32 @__PQueueGetMax(ptr noundef nonnull %204) #5
  %206 = icmp eq i32 %205, -1
  br i1 %206, label %.loopexit517, label %207

207:                                              ; preds = %200
  %208 = mul nsw i32 %205, %14
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds float, ptr %18, i64 %209
  %211 = mul nsw i32 %197, %14
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds float, ptr %30, i64 %212
  call void @__saxpy(i32 noundef %14, float noundef 1.000000e+00, ptr noundef %210, i32 noundef 1, ptr noundef %213, i32 noundef 1) #5
  %214 = load i32, ptr %5, align 4, !tbaa !22
  %215 = mul nsw i32 %214, %14
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds float, ptr %30, i64 %216
  call void @__saxpy(i32 noundef %14, float noundef -1.000000e+00, ptr noundef %210, i32 noundef 1, ptr noundef %217, i32 noundef 1) #5
  %218 = sext i32 %205 to i64
  %219 = getelementptr inbounds i32, ptr %28, i64 %218
  %220 = load i32, ptr %219, align 4, !tbaa !22
  %221 = getelementptr inbounds i32, ptr %26, i64 %218
  %222 = load i32, ptr %221, align 4, !tbaa !22
  %.neg = sub i32 %222, %220
  %223 = add i32 %.neg, %.0468575
  %224 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef %2) #5
  %225 = fcmp olt float %224, %.0474573
  br i1 %225, label %234, label %226

226:                                              ; preds = %207
  %227 = fcmp oeq float %224, %.0474573
  br i1 %227, label %228, label %261

228:                                              ; preds = %226
  %229 = icmp slt i32 %223, %.0469574
  br i1 %229, label %234, label %230

230:                                              ; preds = %228
  %231 = icmp eq i32 %223, %.0469574
  br i1 %231, label %232, label %261

232:                                              ; preds = %230
  %233 = call i32 @__BetterBalance(i32 noundef %14, ptr noundef %30, ptr noundef %2, ptr noundef nonnull %7) #5
  %.not502 = icmp eq i32 %233, 0
  br i1 %.not502, label %261, label %234

234:                                              ; preds = %232, %228, %207
  br i1 %46, label %.lr.ph559, label %.loopexit516

.lr.ph559:                                        ; preds = %234
  %235 = load float, ptr %2, align 4, !tbaa !26
  br i1 %or.cond743, label %scalar.ph728.preheader, label %vector.ph730

vector.ph730:                                     ; preds = %.lr.ph559
  %broadcast.splatinsert738 = insertelement <4 x float> poison, float %235, i64 0
  %broadcast.splat739 = shufflevector <4 x float> %broadcast.splatinsert738, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body734

vector.body734:                                   ; preds = %vector.body734, %vector.ph730
  %index735 = phi i64 [ 0, %vector.ph730 ], [ %index.next740, %vector.body734 ]
  %236 = getelementptr inbounds float, ptr %30, i64 %index735
  %237 = getelementptr inbounds i8, ptr %236, i64 16
  %wide.load736 = load <4 x float>, ptr %236, align 4, !tbaa !26
  %wide.load737 = load <4 x float>, ptr %237, align 4, !tbaa !26
  %238 = fsub <4 x float> %broadcast.splat739, %wide.load736
  %239 = fsub <4 x float> %broadcast.splat739, %wide.load737
  %240 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %238)
  %241 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %239)
  %242 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index735
  %243 = getelementptr inbounds i8, ptr %242, i64 16
  store <4 x float> %240, ptr %242, align 16, !tbaa !26
  store <4 x float> %241, ptr %243, align 16, !tbaa !26
  %index.next740 = add nuw i64 %index735, 8
  %244 = icmp eq i64 %index.next740, %n.vec732
  br i1 %244, label %middle.block727, label %vector.body734, !llvm.loop !42

middle.block727:                                  ; preds = %vector.body734
  br i1 %cmp.n741, label %.loopexit516, label %scalar.ph728.preheader

scalar.ph728.preheader:                           ; preds = %middle.block727, %.lr.ph559
  %indvars.iv650.ph = phi i64 [ 0, %.lr.ph559 ], [ %n.vec732, %middle.block727 ]
  br i1 %lcmp.mod757.not, label %scalar.ph728.prol.loopexit, label %scalar.ph728.prol

scalar.ph728.prol:                                ; preds = %scalar.ph728.preheader
  %245 = getelementptr inbounds float, ptr %30, i64 %indvars.iv650.ph
  %246 = load float, ptr %245, align 4, !tbaa !26
  %247 = fsub float %235, %246
  %248 = call float @llvm.fabs.f32(float %247)
  %249 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv650.ph
  store float %248, ptr %249, align 16, !tbaa !26
  %indvars.iv.next651.prol = or disjoint i64 %indvars.iv650.ph, 1
  br label %scalar.ph728.prol.loopexit

scalar.ph728.prol.loopexit:                       ; preds = %scalar.ph728.prol, %scalar.ph728.preheader
  %indvars.iv650.unr = phi i64 [ %indvars.iv650.ph, %scalar.ph728.preheader ], [ %indvars.iv.next651.prol, %scalar.ph728.prol ]
  %250 = icmp eq i64 %indvars.iv650.ph, %177
  br i1 %250, label %.loopexit516, label %scalar.ph728

scalar.ph728:                                     ; preds = %scalar.ph728.prol.loopexit, %scalar.ph728
  %indvars.iv650 = phi i64 [ %indvars.iv.next651.1, %scalar.ph728 ], [ %indvars.iv650.unr, %scalar.ph728.prol.loopexit ]
  %251 = getelementptr inbounds float, ptr %30, i64 %indvars.iv650
  %252 = load float, ptr %251, align 4, !tbaa !26
  %253 = fsub float %235, %252
  %254 = call float @llvm.fabs.f32(float %253)
  %255 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv650
  store float %254, ptr %255, align 4, !tbaa !26
  %indvars.iv.next651 = add nuw nsw i64 %indvars.iv650, 1
  %256 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next651
  %257 = load float, ptr %256, align 4, !tbaa !26
  %258 = fsub float %235, %257
  %259 = call float @llvm.fabs.f32(float %258)
  %260 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv.next651
  store float %259, ptr %260, align 4, !tbaa !26
  %indvars.iv.next651.1 = add nuw nsw i64 %indvars.iv650, 2
  %exitcond654.not.1 = icmp eq i64 %indvars.iv.next651.1, %174
  br i1 %exitcond654.not.1, label %.loopexit516, label %scalar.ph728, !llvm.loop !43

261:                                              ; preds = %232, %230, %226
  %262 = sub nsw i32 %199, %.0576
  %263 = icmp sgt i32 %262, %45
  br i1 %263, label %264, label %.loopexit516

264:                                              ; preds = %261
  %265 = load i32, ptr %5, align 4, !tbaa !22
  %266 = mul nsw i32 %265, %14
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds float, ptr %30, i64 %267
  call void @__saxpy(i32 noundef %14, float noundef 1.000000e+00, ptr noundef %210, i32 noundef 1, ptr noundef %268, i32 noundef 1) #5
  call void @__saxpy(i32 noundef %14, float noundef -1.000000e+00, ptr noundef %210, i32 noundef 1, ptr noundef %213, i32 noundef 1) #5
  br label %.loopexit517

.loopexit516:                                     ; preds = %scalar.ph728.prol.loopexit, %scalar.ph728, %middle.block727, %234, %261
  %.1475 = phi float [ %.0474573, %261 ], [ %224, %234 ], [ %224, %middle.block727 ], [ %224, %scalar.ph728 ], [ %224, %scalar.ph728.prol.loopexit ]
  %.1470 = phi i32 [ %.0469574, %261 ], [ %223, %234 ], [ %223, %middle.block727 ], [ %223, %scalar.ph728 ], [ %223, %scalar.ph728.prol.loopexit ]
  %.1 = phi i32 [ %.0576, %261 ], [ %199, %234 ], [ %199, %middle.block727 ], [ %199, %scalar.ph728 ], [ %199, %scalar.ph728.prol.loopexit ]
  %269 = getelementptr inbounds i32, ptr %24, i64 %218
  store i32 %197, ptr %269, align 4, !tbaa !22
  %270 = getelementptr inbounds i32, ptr %36, i64 %218
  store i32 %199, ptr %270, align 4, !tbaa !22
  %271 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv663
  store i32 %205, ptr %271, align 4, !tbaa !22
  %272 = load i32, ptr %145, align 4, !tbaa !35
  %273 = and i32 %272, 32
  %.not503 = icmp eq i32 %273, 0
  br i1 %.not503, label %290, label %274

274:                                              ; preds = %.loopexit516
  %275 = load i32, ptr %5, align 4, !tbaa !22
  %276 = load i32, ptr %6, align 4, !tbaa !22
  %277 = load i32, ptr %219, align 4, !tbaa !22
  %278 = load i32, ptr %221, align 4, !tbaa !22
  %279 = sub nsw i32 %277, %278
  %280 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %205, i32 noundef %275, i32 noundef %276, i32 noundef %279, i32 noundef %223)
  br i1 %46, label %.lr.ph562, label %._crit_edge563

.lr.ph562:                                        ; preds = %274, %.lr.ph562
  %indvars.iv655 = phi i64 [ %indvars.iv.next656, %.lr.ph562 ], [ 0, %274 ]
  %281 = getelementptr inbounds float, ptr %30, i64 %indvars.iv655
  %282 = load float, ptr %281, align 4, !tbaa !26
  %283 = fpext float %282 to double
  %gep699 = getelementptr inbounds float, ptr %invariant.gep698, i64 %indvars.iv655
  %284 = load float, ptr %gep699, align 4, !tbaa !26
  %285 = fpext float %284 to double
  %286 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %283, double noundef %285)
  %indvars.iv.next656 = add nuw nsw i64 %indvars.iv655, 1
  %exitcond659.not = icmp eq i64 %indvars.iv.next656, %174
  br i1 %exitcond659.not, label %._crit_edge563, label %.lr.ph562, !llvm.loop !44

._crit_edge563:                                   ; preds = %.lr.ph562, %274
  %287 = fpext float %.1475 to double
  %288 = fpext float %224 to double
  %289 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %287, double noundef %288)
  br label %290

290:                                              ; preds = %.loopexit516, %._crit_edge563
  %291 = load i32, ptr %221, align 4, !tbaa !22
  %292 = load i32, ptr %219, align 4, !tbaa !22
  store i32 %292, ptr %221, align 4, !tbaa !22
  store i32 %291, ptr %219, align 4, !tbaa !22
  %293 = icmp eq i32 %291, 0
  br i1 %293, label %294, label %thread-pre-split

294:                                              ; preds = %290
  %295 = getelementptr inbounds i32, ptr %33, i64 %218
  %296 = load i32, ptr %295, align 4, !tbaa !22
  %.not504 = icmp eq i32 %296, -1
  br i1 %.not504, label %thread-pre-split.thread, label %297

297:                                              ; preds = %294
  %298 = getelementptr inbounds i32, ptr %16, i64 %218
  %299 = load i32, ptr %298, align 4, !tbaa !22
  %300 = getelementptr i8, ptr %298, i64 4
  %301 = load i32, ptr %300, align 4, !tbaa !22
  %302 = icmp slt i32 %299, %301
  br i1 %302, label %303, label %thread-pre-split.thread

303:                                              ; preds = %297
  %304 = add nsw i32 %.0482571, -1
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds i32, ptr %35, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !22
  %308 = sext i32 %296 to i64
  %309 = getelementptr inbounds i32, ptr %35, i64 %308
  store i32 %307, ptr %309, align 4, !tbaa !22
  %310 = load i32, ptr %295, align 4, !tbaa !22
  %311 = sext i32 %307 to i64
  %312 = getelementptr inbounds i32, ptr %33, i64 %311
  store i32 %310, ptr %312, align 4, !tbaa !22
  store i32 -1, ptr %295, align 4, !tbaa !22
  %.pr.pre = load i32, ptr %219, align 4, !tbaa !22
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %303, %290
  %313 = phi i32 [ %291, %290 ], [ %.pr.pre, %303 ]
  %.1483 = phi i32 [ %.0482571, %290 ], [ %304, %303 ]
  %314 = icmp sgt i32 %313, 0
  br i1 %314, label %315, label %thread-pre-split.thread

315:                                              ; preds = %thread-pre-split
  %316 = getelementptr inbounds i32, ptr %33, i64 %218
  %317 = load i32, ptr %316, align 4, !tbaa !22
  %318 = icmp eq i32 %317, -1
  br i1 %318, label %319, label %thread-pre-split.thread

319:                                              ; preds = %315
  %320 = sext i32 %.1483 to i64
  %321 = getelementptr inbounds i32, ptr %35, i64 %320
  store i32 %205, ptr %321, align 4, !tbaa !22
  %322 = add nsw i32 %.1483, 1
  store i32 %.1483, ptr %316, align 4, !tbaa !22
  br label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %297, %294, %319, %315, %thread-pre-split
  %.2484 = phi i32 [ %322, %319 ], [ %.1483, %315 ], [ %.1483, %thread-pre-split ], [ %.0482571, %294 ], [ %.0482571, %297 ]
  %323 = getelementptr inbounds i32, ptr %16, i64 %218
  %324 = load i32, ptr %323, align 4, !tbaa !22
  %325 = getelementptr i8, ptr %323, i64 4
  %326 = load i32, ptr %325, align 4, !tbaa !22
  %327 = icmp slt i32 %324, %326
  br i1 %327, label %.lr.ph567.preheader, label %._crit_edge568

.lr.ph567.preheader:                              ; preds = %thread-pre-split.thread
  %328 = sext i32 %324 to i64
  br label %.lr.ph567

.lr.ph567:                                        ; preds = %.lr.ph567.preheader, %.thread
  %indvars.iv660 = phi i64 [ %328, %.lr.ph567.preheader ], [ %indvars.iv.next661, %.thread ]
  %.3485564 = phi i32 [ %.2484, %.lr.ph567.preheader ], [ %.4486, %.thread ]
  %329 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv660
  %330 = load i32, ptr %329, align 4, !tbaa !22
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds i32, ptr %28, i64 %331
  %333 = load i32, ptr %332, align 4, !tbaa !22
  %334 = getelementptr inbounds i32, ptr %26, i64 %331
  %335 = load i32, ptr %334, align 4, !tbaa !22
  %336 = getelementptr inbounds i32, ptr %24, i64 %331
  %337 = load i32, ptr %336, align 4, !tbaa !22
  %338 = icmp eq i32 %197, %337
  %339 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv660
  %340 = load i32, ptr %339, align 4, !tbaa !22
  %341 = sub nsw i32 0, %340
  %342 = select i1 %338, i32 %340, i32 %341
  %343 = add nsw i32 %342, %335
  store i32 %343, ptr %334, align 4, !tbaa !22
  %344 = load i32, ptr %332, align 4, !tbaa !22
  %345 = sub nsw i32 %344, %342
  store i32 %345, ptr %332, align 4, !tbaa !22
  %346 = getelementptr inbounds i32, ptr %36, i64 %331
  %347 = load i32, ptr %346, align 4, !tbaa !22
  %348 = icmp eq i32 %347, -1
  br i1 %348, label %349, label %360

349:                                              ; preds = %.lr.ph567
  %350 = sub nsw i32 %333, %335
  %351 = getelementptr inbounds i32, ptr %39, i64 %331
  %352 = load i32, ptr %351, align 4, !tbaa !22
  %353 = sext i32 %352 to i64
  %354 = load i32, ptr %336, align 4, !tbaa !22
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %353, i64 %355
  %357 = load i32, ptr %334, align 4, !tbaa !22
  %358 = sub nsw i32 %345, %357
  %359 = call i32 @__PQueueUpdate(ptr noundef nonnull %356, i32 noundef %330, i32 noundef %350, i32 noundef %358) #5
  %.pr511 = load i32, ptr %332, align 4, !tbaa !22
  br label %360

360:                                              ; preds = %349, %.lr.ph567
  %361 = phi i32 [ %.pr511, %349 ], [ %345, %.lr.ph567 ]
  %362 = icmp eq i32 %361, 0
  br i1 %362, label %363, label %376

363:                                              ; preds = %360
  %364 = getelementptr inbounds i32, ptr %33, i64 %331
  %365 = load i32, ptr %364, align 4, !tbaa !22
  %.not505 = icmp eq i32 %365, -1
  br i1 %.not505, label %.thread, label %366

366:                                              ; preds = %363
  %367 = add nsw i32 %.3485564, -1
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %35, i64 %368
  %370 = load i32, ptr %369, align 4, !tbaa !22
  %371 = sext i32 %365 to i64
  %372 = getelementptr inbounds i32, ptr %35, i64 %371
  store i32 %370, ptr %372, align 4, !tbaa !22
  %373 = load i32, ptr %364, align 4, !tbaa !22
  %374 = sext i32 %370 to i64
  %375 = getelementptr inbounds i32, ptr %33, i64 %374
  store i32 %373, ptr %375, align 4, !tbaa !22
  store i32 -1, ptr %364, align 4, !tbaa !22
  br label %.thread

376:                                              ; preds = %360
  %377 = icmp sgt i32 %361, 0
  br i1 %377, label %378, label %.thread

378:                                              ; preds = %376
  %379 = getelementptr inbounds i32, ptr %33, i64 %331
  %380 = load i32, ptr %379, align 4, !tbaa !22
  %381 = icmp eq i32 %380, -1
  br i1 %381, label %382, label %.thread

382:                                              ; preds = %378
  %383 = sext i32 %.3485564 to i64
  %384 = getelementptr inbounds i32, ptr %35, i64 %383
  store i32 %330, ptr %384, align 4, !tbaa !22
  %385 = add nsw i32 %.3485564, 1
  store i32 %.3485564, ptr %379, align 4, !tbaa !22
  br label %.thread

.thread:                                          ; preds = %363, %366, %382, %378, %376
  %.4486 = phi i32 [ %367, %366 ], [ %385, %382 ], [ %.3485564, %378 ], [ %.3485564, %376 ], [ %.3485564, %363 ]
  %indvars.iv.next661 = add nsw i64 %indvars.iv660, 1
  %386 = load i32, ptr %325, align 4, !tbaa !22
  %387 = sext i32 %386 to i64
  %388 = icmp slt i64 %indvars.iv.next661, %387
  br i1 %388, label %.lr.ph567, label %._crit_edge568, !llvm.loop !45

._crit_edge568:                                   ; preds = %.thread, %thread-pre-split.thread
  %.3485.lcssa = phi i32 [ %.2484, %thread-pre-split.thread ], [ %.4486, %.thread ]
  %indvars.iv.next664 = add nuw nsw i64 %indvars.iv663, 1
  %389 = icmp uge i64 %indvars.iv.next664, %175
  %390 = fcmp olt float %.1475, %3
  %or.cond = select i1 %389, i1 true, i1 %390
  br i1 %or.cond, label %.loopexit517.loopexit.split.loop.exit705, label %194, !llvm.loop !46

.loopexit517.loopexit.split.loop.exit705:         ; preds = %._crit_edge568
  %indvars.le = trunc i64 %indvars.iv.next664 to i32
  br label %.loopexit517

.loopexit517:                                     ; preds = %194, %200, %.loopexit517.loopexit.split.loop.exit705, %168, %.preheader, %264
  %.0488531 = phi i32 [ %199, %264 ], [ 0, %.preheader ], [ 0, %168 ], [ %indvars.le, %.loopexit517.loopexit.split.loop.exit705 ], [ %199, %200 ], [ %199, %194 ]
  %.0482529 = phi i32 [ %.0482571, %264 ], [ %171, %.preheader ], [ %171, %168 ], [ %.3485.lcssa, %.loopexit517.loopexit.split.loop.exit705 ], [ %.0482571, %200 ], [ %.0482571, %194 ]
  %.0469527 = phi i32 [ %.0469574, %264 ], [ %144, %.preheader ], [ %144, %168 ], [ %.1470, %.loopexit517.loopexit.split.loop.exit705 ], [ %.0469574, %200 ], [ %.0469574, %194 ]
  %.0525 = phi i32 [ %.0576, %264 ], [ -1, %.preheader ], [ -1, %168 ], [ %.1, %.loopexit517.loopexit.split.loop.exit705 ], [ %.0576, %200 ], [ %.0576, %194 ]
  %.1489596 = add nsw i32 %.0488531, -1
  %391 = icmp sgt i32 %.1489596, %.0525
  br i1 %391, label %.lr.ph600.preheader, label %._crit_edge601

.lr.ph600.preheader:                              ; preds = %.loopexit517
  %392 = zext nneg i32 %.0488531 to i64
  %393 = add nsw i64 %392, -1
  %394 = sext i32 %.0525 to i64
  br label %.lr.ph600

.loopexit:                                        ; preds = %491, %.thread512
  %.7.lcssa = phi i32 [ %.6, %.thread512 ], [ %.9, %491 ]
  %indvars.iv.next671 = add nsw i64 %indvars.iv670, -1
  %395 = icmp sgt i64 %indvars.iv.next671, %394
  br i1 %395, label %.lr.ph600, label %._crit_edge601, !llvm.loop !47

.lr.ph600:                                        ; preds = %.lr.ph600.preheader, %.loopexit
  %indvars.iv670 = phi i64 [ %393, %.lr.ph600.preheader ], [ %indvars.iv.next671, %.loopexit ]
  %.5487597 = phi i32 [ %.0482529, %.lr.ph600.preheader ], [ %.7.lcssa, %.loopexit ]
  %396 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv670
  %397 = load i32, ptr %396, align 4, !tbaa !22
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %24, i64 %398
  %400 = load i32, ptr %399, align 4, !tbaa !22
  %401 = add nsw i32 %400, 1
  %402 = srem i32 %401, 2
  store i32 %402, ptr %399, align 4, !tbaa !22
  %403 = getelementptr inbounds i32, ptr %26, i64 %398
  %404 = load i32, ptr %403, align 4, !tbaa !22
  %405 = getelementptr inbounds i32, ptr %28, i64 %398
  %406 = load i32, ptr %405, align 4, !tbaa !22
  store i32 %406, ptr %403, align 4, !tbaa !22
  store i32 %404, ptr %405, align 4, !tbaa !22
  %407 = icmp eq i32 %404, 0
  br i1 %407, label %408, label %427

408:                                              ; preds = %.lr.ph600
  %409 = getelementptr inbounds i32, ptr %33, i64 %398
  %410 = load i32, ptr %409, align 4, !tbaa !22
  %.not507 = icmp eq i32 %410, -1
  br i1 %.not507, label %.thread512, label %411

411:                                              ; preds = %408
  %412 = getelementptr inbounds i32, ptr %16, i64 %398
  %413 = load i32, ptr %412, align 4, !tbaa !22
  %414 = getelementptr i8, ptr %412, i64 4
  %415 = load i32, ptr %414, align 4, !tbaa !22
  %416 = icmp slt i32 %413, %415
  br i1 %416, label %417, label %.thread512

417:                                              ; preds = %411
  %418 = add nsw i32 %.5487597, -1
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %35, i64 %419
  %421 = load i32, ptr %420, align 4, !tbaa !22
  %422 = sext i32 %410 to i64
  %423 = getelementptr inbounds i32, ptr %35, i64 %422
  store i32 %421, ptr %423, align 4, !tbaa !22
  %424 = load i32, ptr %409, align 4, !tbaa !22
  %425 = sext i32 %421 to i64
  %426 = getelementptr inbounds i32, ptr %33, i64 %425
  store i32 %424, ptr %426, align 4, !tbaa !22
  store i32 -1, ptr %409, align 4, !tbaa !22
  br label %.thread512

427:                                              ; preds = %.lr.ph600
  %428 = icmp sgt i32 %404, 0
  br i1 %428, label %429, label %.thread512

429:                                              ; preds = %427
  %430 = getelementptr inbounds i32, ptr %33, i64 %398
  %431 = load i32, ptr %430, align 4, !tbaa !22
  %432 = icmp eq i32 %431, -1
  br i1 %432, label %433, label %.thread512

433:                                              ; preds = %429
  %434 = sext i32 %.5487597 to i64
  %435 = getelementptr inbounds i32, ptr %35, i64 %434
  store i32 %397, ptr %435, align 4, !tbaa !22
  %436 = add nsw i32 %.5487597, 1
  store i32 %.5487597, ptr %430, align 4, !tbaa !22
  br label %.thread512

.thread512:                                       ; preds = %408, %411, %427, %429, %433, %417
  %.6 = phi i32 [ %418, %417 ], [ %436, %433 ], [ %.5487597, %429 ], [ %.5487597, %427 ], [ %.5487597, %411 ], [ %.5487597, %408 ]
  %437 = mul nsw i32 %397, %14
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds float, ptr %18, i64 %438
  %440 = mul nsw i32 %402, %14
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds float, ptr %30, i64 %441
  call void @__saxpy(i32 noundef %14, float noundef 1.000000e+00, ptr noundef %439, i32 noundef 1, ptr noundef %442, i32 noundef 1) #5
  %443 = and i32 %402, 1
  %444 = xor i32 %443, 1
  %445 = mul nuw nsw i32 %444, %14
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds float, ptr %30, i64 %446
  call void @__saxpy(i32 noundef %14, float noundef -1.000000e+00, ptr noundef %439, i32 noundef 1, ptr noundef %447, i32 noundef 1) #5
  %448 = getelementptr inbounds i32, ptr %16, i64 %398
  %449 = load i32, ptr %448, align 4, !tbaa !22
  %450 = getelementptr i8, ptr %448, i64 4
  %451 = load i32, ptr %450, align 4, !tbaa !22
  %452 = icmp slt i32 %449, %451
  br i1 %452, label %.lr.ph594.preheader, label %.loopexit

.lr.ph594.preheader:                              ; preds = %.thread512
  %453 = sext i32 %449 to i64
  br label %.lr.ph594

.lr.ph594:                                        ; preds = %.lr.ph594.preheader, %491
  %indvars.iv666 = phi i64 [ %453, %.lr.ph594.preheader ], [ %indvars.iv.next667, %491 ]
  %.7592 = phi i32 [ %.6, %.lr.ph594.preheader ], [ %.9, %491 ]
  %454 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv666
  %455 = load i32, ptr %454, align 4, !tbaa !22
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds i32, ptr %24, i64 %456
  %458 = load i32, ptr %457, align 4, !tbaa !22
  %459 = icmp eq i32 %402, %458
  %460 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv666
  %461 = load i32, ptr %460, align 4, !tbaa !22
  %462 = sub nsw i32 0, %461
  %463 = select i1 %459, i32 %461, i32 %462
  %464 = getelementptr inbounds i32, ptr %26, i64 %456
  %465 = load i32, ptr %464, align 4, !tbaa !22
  %466 = add nsw i32 %465, %463
  store i32 %466, ptr %464, align 4, !tbaa !22
  %467 = getelementptr inbounds i32, ptr %28, i64 %456
  %468 = load i32, ptr %467, align 4, !tbaa !22
  %469 = sub nsw i32 %468, %463
  store i32 %469, ptr %467, align 4, !tbaa !22
  %470 = getelementptr inbounds i32, ptr %33, i64 %456
  %471 = load i32, ptr %470, align 4, !tbaa !22
  %.not508 = icmp ne i32 %471, -1
  %472 = icmp eq i32 %468, %463
  %or.cond510 = select i1 %.not508, i1 %472, i1 false
  br i1 %or.cond510, label %.thread513, label %482

.thread513:                                       ; preds = %.lr.ph594
  %473 = add nsw i32 %.7592, -1
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds i32, ptr %35, i64 %474
  %476 = load i32, ptr %475, align 4, !tbaa !22
  %477 = sext i32 %471 to i64
  %478 = getelementptr inbounds i32, ptr %35, i64 %477
  store i32 %476, ptr %478, align 4, !tbaa !22
  %479 = load i32, ptr %470, align 4, !tbaa !22
  %480 = sext i32 %476 to i64
  %481 = getelementptr inbounds i32, ptr %33, i64 %480
  store i32 %479, ptr %481, align 4, !tbaa !22
  store i32 -1, ptr %470, align 4, !tbaa !22
  %.pre = load i32, ptr %467, align 4, !tbaa !22
  br label %484

482:                                              ; preds = %.lr.ph594
  %483 = icmp eq i32 %471, -1
  br i1 %483, label %484, label %491

484:                                              ; preds = %.thread513, %482
  %485 = phi i32 [ %.pre, %.thread513 ], [ %469, %482 ]
  %.8515 = phi i32 [ %473, %.thread513 ], [ %.7592, %482 ]
  %486 = icmp sgt i32 %485, 0
  br i1 %486, label %487, label %491

487:                                              ; preds = %484
  %488 = sext i32 %.8515 to i64
  %489 = getelementptr inbounds i32, ptr %35, i64 %488
  store i32 %455, ptr %489, align 4, !tbaa !22
  %490 = add nsw i32 %.8515, 1
  store i32 %.8515, ptr %470, align 4, !tbaa !22
  br label %491

491:                                              ; preds = %482, %484, %487
  %.9 = phi i32 [ %490, %487 ], [ %.8515, %484 ], [ %.7592, %482 ]
  %indvars.iv.next667 = add nsw i64 %indvars.iv666, 1
  %492 = load i32, ptr %450, align 4, !tbaa !22
  %493 = sext i32 %492 to i64
  %494 = icmp slt i64 %indvars.iv.next667, %493
  br i1 %494, label %.lr.ph594, label %.loopexit, !llvm.loop !48

._crit_edge601:                                   ; preds = %.loopexit, %.loopexit517
  %.5487.lcssa = phi i32 [ %.0482529, %.loopexit517 ], [ %.7.lcssa, %.loopexit ]
  %495 = load i32, ptr %145, align 4, !tbaa !35
  %496 = and i32 %495, 8
  %.not506 = icmp eq i32 %496, 0
  br i1 %.not506, label %509, label %497

497:                                              ; preds = %._crit_edge601
  %498 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %.0469527, i32 noundef %.0525, i32 noundef %.5487.lcssa)
  br i1 %46, label %.lr.ph605.preheader, label %._crit_edge606

.lr.ph605.preheader:                              ; preds = %497
  %499 = zext nneg i32 %14 to i64
  %invariant.gep710 = getelementptr inbounds float, ptr %30, i64 %499
  br label %.lr.ph605

.lr.ph605:                                        ; preds = %.lr.ph605.preheader, %.lr.ph605
  %indvars.iv674 = phi i64 [ 0, %.lr.ph605.preheader ], [ %indvars.iv.next675, %.lr.ph605 ]
  %500 = getelementptr inbounds float, ptr %30, i64 %indvars.iv674
  %501 = load float, ptr %500, align 4, !tbaa !26
  %502 = fpext float %501 to double
  %gep711 = getelementptr inbounds float, ptr %invariant.gep710, i64 %indvars.iv674
  %503 = load float, ptr %gep711, align 4, !tbaa !26
  %504 = fpext float %503 to double
  %505 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %502, double noundef %504)
  %indvars.iv.next675 = add nuw nsw i64 %indvars.iv674, 1
  %exitcond679.not = icmp eq i64 %indvars.iv.next675, %499
  br i1 %exitcond679.not, label %._crit_edge606, label %.lr.ph605, !llvm.loop !49

._crit_edge606:                                   ; preds = %.lr.ph605, %497
  %506 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef %2) #5
  %507 = fpext float %506 to double
  %508 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %507)
  br label %509

509:                                              ; preds = %._crit_edge606, %._crit_edge601
  store i32 %.0469527, ptr %143, align 8, !tbaa !34
  store i32 %.5487.lcssa, ptr %170, align 8, !tbaa !40
  br i1 %46, label %.lr.ph609.preheader, label %._crit_edge610

.lr.ph609.preheader:                              ; preds = %509
  %wide.trip.count684 = zext nneg i32 %14 to i64
  br label %.lr.ph609

.lr.ph609:                                        ; preds = %.lr.ph609.preheader, %.lr.ph609
  %indvars.iv680 = phi i64 [ 0, %.lr.ph609.preheader ], [ %indvars.iv.next681, %.lr.ph609 ]
  %510 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %indvars.iv680
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %510) #5
  %511 = getelementptr inbounds i8, ptr %510, i64 64
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %511) #5
  %indvars.iv.next681 = add nuw nsw i64 %indvars.iv680, 1
  %exitcond685.not = icmp eq i64 %indvars.iv.next681, %wide.trip.count684
  br i1 %exitcond685.not, label %._crit_edge610, label %.lr.ph609, !llvm.loop !50

._crit_edge610:                                   ; preds = %.lr.ph609, %509
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %12) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %12) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %12) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %12) #5
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %9) #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.start.p0(i64 immarg, ptr nocapture) #2

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

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

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

declare i32 @__samax2(i32 noundef, ptr noundef) local_unnamed_addr #0

; 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 #0

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

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

declare void @__SelectQueue(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @__PQueueGetMax(ptr noundef) local_unnamed_addr #0

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

declare i32 @__BetterBalance(i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fabs.v4f32(<4 x float>) #4

attributes #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 #1 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 nosync nounwind speculatable willreturn memory(none) }
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 = !{!10, !10, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!27, !27, i64 0}
!27 = !{!"float", !8, i64 0}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24, !31, !32}
!31 = !{!"llvm.loop.isvectorized", i32 1}
!32 = !{!"llvm.loop.unroll.runtime.disable"}
!33 = distinct !{!33, !24, !31}
!34 = !{!6, !10, i64 88}
!35 = !{!36, !10, i64 4}
!36 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !27, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !37, i64 48, !38, i64 104, !38, i64 112, !38, i64 120, !38, i64 128, !38, i64 136, !38, i64 144, !38, i64 152, !38, i64 160, !38, i64 168, !38, i64 176, !38, i64 184, !38, i64 192, !38, i64 200, !38, i64 208, !38, i64 216, !38, i64 224}
!37 = !{!"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}
!38 = !{!"double", !8, i64 0}
!39 = distinct !{!39, !24}
!40 = !{!6, !10, i64 112}
!41 = distinct !{!41, !24}
!42 = distinct !{!42, !24, !31, !32}
!43 = distinct !{!43, !24, !31}
!44 = distinct !{!44, !24}
!45 = distinct !{!45, !24}
!46 = distinct !{!46, !24}
!47 = distinct !{!47, !24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}


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