; LLVM IR from siconos/siconos :: externals/lbl/metis4/mfm.ll_ (MocFM_2WayEdgeRefine)

; 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 [54 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

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

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

108:                                              ; preds = %4
  br label %109

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

112:                                              ; preds = %109
  br label %125

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

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

122:                                              ; preds = %113
  br label %123

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

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

128:                                              ; preds = %145, %125
  %129 = load i32, ptr %9, align 4, !tbaa !9
  %130 = load i32, ptr %16, align 4, !tbaa !9
  %131 = icmp slt i32 %129, %130
  br i1 %131, label %132, label %148

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

145:                                              ; preds = %132
  %146 = load i32, ptr %9, align 4, !tbaa !9
  %147 = add nsw i32 %146, 1
  store i32 %147, ptr %9, align 4, !tbaa !9
  br label %128, !llvm.loop !24

148:                                              ; preds = %128
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %166, %148
  %150 = load i32, ptr %9, align 4, !tbaa !9
  %151 = load i32, ptr %15, align 4, !tbaa !9
  %152 = icmp slt i32 %150, %151
  br i1 %152, label %153, label %169

153:                                              ; preds = %149
  %154 = load i32, ptr %16, align 4, !tbaa !9
  %155 = load ptr, ptr %38, align 8, !tbaa !5
  %156 = load i32, ptr %9, align 4, !tbaa !9
  %157 = load i32, ptr %16, align 4, !tbaa !9
  %158 = mul nsw i32 %156, %157
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds float, ptr %155, i64 %159
  %161 = call i32 @__samax(i32 noundef %154, ptr noundef %160)
  %162 = load ptr, ptr %37, align 8, !tbaa !5
  %163 = load i32, ptr %9, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i32, ptr %162, i64 %164
  store i32 %161, ptr %165, align 4, !tbaa !9
  br label %166

166:                                              ; preds = %153
  %167 = load i32, ptr %9, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %9, align 4, !tbaa !9
  br label %149, !llvm.loop !26

169:                                              ; preds = %149
  %170 = load i32, ptr %16, align 4, !tbaa !9
  %171 = load ptr, ptr %39, align 8, !tbaa !5
  %172 = load ptr, ptr %7, align 8, !tbaa !5
  %173 = call float @__Compute2WayHLoadImbalance(i32 noundef %170, ptr noundef %171, ptr noundef %172)
  store float %173, ptr %41, align 4, !tbaa !27
  %174 = load float, ptr %41, align 4, !tbaa !27
  %175 = load ptr, ptr %7, align 8, !tbaa !5
  %176 = getelementptr inbounds float, ptr %175, i64 0
  %177 = load float, ptr %176, align 4, !tbaa !27
  %178 = fmul float %174, %177
  %179 = getelementptr inbounds [2 x float], ptr %51, i64 0, i64 0
  store float %178, ptr %179, align 4, !tbaa !27
  %180 = load float, ptr %41, align 4, !tbaa !27
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds float, ptr %181, i64 1
  %183 = load float, ptr %182, align 4, !tbaa !27
  %184 = fmul float %180, %183
  %185 = getelementptr inbounds [2 x float], ptr %51, i64 0, i64 1
  store float %184, ptr %185, align 4, !tbaa !27
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.controldef, ptr %186, i32 0, i32 1
  %188 = load i32, ptr %187, align 4, !tbaa !29
  %189 = and i32 %188, 8
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %191, label %237

191:                                              ; preds = %169
  %192 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %213, %191
  %194 = load i32, ptr %13, align 4, !tbaa !9
  %195 = load i32, ptr %16, align 4, !tbaa !9
  %196 = icmp slt i32 %194, %195
  br i1 %196, label %197, label %216

197:                                              ; preds = %193
  %198 = load ptr, ptr %39, align 8, !tbaa !5
  %199 = load i32, ptr %13, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds float, ptr %198, i64 %200
  %202 = load float, ptr %201, align 4, !tbaa !27
  %203 = fpext float %202 to double
  %204 = load ptr, ptr %39, align 8, !tbaa !5
  %205 = load i32, ptr %16, align 4, !tbaa !9
  %206 = load i32, ptr %13, align 4, !tbaa !9
  %207 = add nsw i32 %205, %206
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds float, ptr %204, i64 %208
  %210 = load float, ptr %209, align 4, !tbaa !27
  %211 = fpext float %210 to double
  %212 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %203, double noundef %211)
  br label %213

213:                                              ; preds = %197
  %214 = load i32, ptr %13, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %13, align 4, !tbaa !9
  br label %193, !llvm.loop !33

216:                                              ; preds = %193
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  %218 = getelementptr inbounds float, ptr %217, i64 0
  %219 = load float, ptr %218, align 4, !tbaa !27
  %220 = fpext float %219 to double
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = getelementptr inbounds float, ptr %221, i64 1
  %223 = load float, ptr %222, align 4, !tbaa !27
  %224 = fpext float %223 to double
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.graphdef, ptr %225, i32 0, i32 2
  %227 = load i32, ptr %226, align 8, !tbaa !11
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.graphdef, ptr %228, i32 0, i32 16
  %230 = load i32, ptr %229, align 8, !tbaa !34
  %231 = load ptr, ptr %6, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.graphdef, ptr %231, i32 0, i32 12
  %233 = load i32, ptr %232, align 8, !tbaa !35
  %234 = load float, ptr %41, align 4, !tbaa !27
  %235 = fpext float %234 to double
  %236 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, double noundef %220, double noundef %224, i32 noundef %227, i32 noundef %230, i32 noundef %233, double noundef %235)
  br label %237

237:                                              ; preds = %216, %169
  %238 = load i32, ptr %15, align 4, !tbaa !9
  %239 = load ptr, ptr %34, align 8, !tbaa !5
  %240 = call ptr @__idxset(i32 noundef %238, i32 noundef -1, ptr noundef %239)
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %1290, %237
  %242 = load i32, ptr %21, align 4, !tbaa !9
  %243 = load i32, ptr %8, align 4, !tbaa !9
  %244 = icmp slt i32 %242, %243
  br i1 %244, label %245, label %1293

245:                                              ; preds = %241
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %246

246:                                              ; preds = %259, %245
  %247 = load i32, ptr %9, align 4, !tbaa !9
  %248 = load i32, ptr %16, align 4, !tbaa !9
  %249 = icmp slt i32 %247, %248
  br i1 %249, label %250, label %262

250:                                              ; preds = %246
  %251 = load i32, ptr %9, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %252
  %254 = getelementptr inbounds [2 x %struct.PQueueType], ptr %253, i64 0, i64 0
  call void @__PQueueReset(ptr noundef %254)
  %255 = load i32, ptr %9, align 4, !tbaa !9
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %256
  %258 = getelementptr inbounds [2 x %struct.PQueueType], ptr %257, i64 0, i64 1
  call void @__PQueueReset(ptr noundef %258)
  br label %259

259:                                              ; preds = %250
  %260 = load i32, ptr %9, align 4, !tbaa !9
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %9, align 4, !tbaa !9
  br label %246, !llvm.loop !36

262:                                              ; preds = %246
  store i32 -1, ptr %50, align 4, !tbaa !9
  %263 = load ptr, ptr %6, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.graphdef, ptr %263, i32 0, i32 12
  %265 = load i32, ptr %264, align 8, !tbaa !35
  store i32 %265, ptr %48, align 4, !tbaa !9
  store i32 %265, ptr %47, align 4, !tbaa !9
  store i32 %265, ptr %49, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %266

266:                                              ; preds = %286, %262
  %267 = load i32, ptr %9, align 4, !tbaa !9
  %268 = load i32, ptr %16, align 4, !tbaa !9
  %269 = icmp slt i32 %267, %268
  br i1 %269, label %270, label %289

270:                                              ; preds = %266
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = getelementptr inbounds float, ptr %271, i64 0
  %273 = load float, ptr %272, align 4, !tbaa !27
  %274 = load ptr, ptr %39, align 8, !tbaa !5
  %275 = load i32, ptr %9, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds float, ptr %274, i64 %276
  %278 = load float, ptr %277, align 4, !tbaa !27
  %279 = fsub float %273, %278
  %280 = fpext float %279 to double
  %281 = call double @llvm.fabs.f64(double %280)
  %282 = fptrunc double %281 to float
  %283 = load i32, ptr %9, align 4, !tbaa !9
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %284
  store float %282, ptr %285, align 4, !tbaa !27
  br label %286

286:                                              ; preds = %270
  %287 = load i32, ptr %9, align 4, !tbaa !9
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %9, align 4, !tbaa !9
  br label %266, !llvm.loop !37

289:                                              ; preds = %266
  %290 = load i32, ptr %16, align 4, !tbaa !9
  %291 = load ptr, ptr %39, align 8, !tbaa !5
  %292 = load ptr, ptr %7, align 8, !tbaa !5
  %293 = call float @__Compute2WayHLoadImbalance(i32 noundef %290, ptr noundef %291, ptr noundef %292)
  store float %293, ptr %42, align 4, !tbaa !27
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.graphdef, ptr %294, i32 0, i32 16
  %296 = load i32, ptr %295, align 8, !tbaa !34
  store i32 %296, ptr %17, align 4, !tbaa !9
  %297 = load i32, ptr %17, align 4, !tbaa !9
  %298 = load ptr, ptr %36, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %297, ptr noundef %298, i32 noundef 1)
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %340, %289
  %300 = load i32, ptr %10, align 4, !tbaa !9
  %301 = load i32, ptr %17, align 4, !tbaa !9
  %302 = icmp slt i32 %300, %301
  br i1 %302, label %303, label %343

303:                                              ; preds = %299
  %304 = load ptr, ptr %33, align 8, !tbaa !5
  %305 = load ptr, ptr %36, align 8, !tbaa !5
  %306 = load i32, ptr %10, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %305, i64 %307
  %309 = load i32, ptr %308, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %304, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !9
  store i32 %312, ptr %9, align 4, !tbaa !9
  %313 = load ptr, ptr %37, align 8, !tbaa !5
  %314 = load i32, ptr %9, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %313, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %318
  %320 = load ptr, ptr %29, align 8, !tbaa !5
  %321 = load i32, ptr %9, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i32, ptr %320, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds [2 x %struct.PQueueType], ptr %319, i64 0, i64 %325
  %327 = load i32, ptr %9, align 4, !tbaa !9
  %328 = load ptr, ptr %31, align 8, !tbaa !5
  %329 = load i32, ptr %9, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %328, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !9
  %333 = load ptr, ptr %30, align 8, !tbaa !5
  %334 = load i32, ptr %9, align 4, !tbaa !9
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds i32, ptr %333, i64 %335
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = sub nsw i32 %332, %337
  %339 = call i32 @__PQueueInsert(ptr noundef %326, i32 noundef %327, i32 noundef %338)
  br label %340

340:                                              ; preds = %303
  %341 = load i32, ptr %10, align 4, !tbaa !9
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %10, align 4, !tbaa !9
  br label %299, !llvm.loop !38

343:                                              ; preds = %299
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %344

344:                                              ; preds = %904, %343
  %345 = load i32, ptr %18, align 4, !tbaa !9
  %346 = load i32, ptr %15, align 4, !tbaa !9
  %347 = icmp slt i32 %345, %346
  br i1 %347, label %348, label %907

348:                                              ; preds = %344
  %349 = load i32, ptr %16, align 4, !tbaa !9
  %350 = load ptr, ptr %39, align 8, !tbaa !5
  %351 = getelementptr inbounds [2 x float], ptr %51, i64 0, i64 0
  %352 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 0
  call void @__SelectQueue(i32 noundef %349, ptr noundef %350, ptr noundef %351, ptr noundef %19, ptr noundef %25, ptr noundef %352)
  %353 = load i32, ptr %19, align 4, !tbaa !9
  %354 = add nsw i32 %353, 1
  %355 = srem i32 %354, 2
  store i32 %355, ptr %20, align 4, !tbaa !9
  %356 = load i32, ptr %19, align 4, !tbaa !9
  %357 = icmp eq i32 %356, -1
  br i1 %357, label %367, label %358

358:                                              ; preds = %348
  %359 = load i32, ptr %25, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %360
  %362 = load i32, ptr %19, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds [2 x %struct.PQueueType], ptr %361, i64 0, i64 %363
  %365 = call i32 @__PQueueGetMax(ptr noundef %364)
  store i32 %365, ptr %45, align 4, !tbaa !9
  %366 = icmp eq i32 %365, -1
  br i1 %366, label %367, label %368

367:                                              ; preds = %358, %348
  br label %907

368:                                              ; preds = %358
  %369 = load i32, ptr %16, align 4, !tbaa !9
  %370 = load ptr, ptr %38, align 8, !tbaa !5
  %371 = load i32, ptr %45, align 4, !tbaa !9
  %372 = load i32, ptr %16, align 4, !tbaa !9
  %373 = mul nsw i32 %371, %372
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds float, ptr %370, i64 %374
  %376 = load ptr, ptr %39, align 8, !tbaa !5
  %377 = load i32, ptr %20, align 4, !tbaa !9
  %378 = load i32, ptr %16, align 4, !tbaa !9
  %379 = mul nsw i32 %377, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds float, ptr %376, i64 %380
  call void @__saxpy(i32 noundef %369, float noundef 1.000000e+00, ptr noundef %375, i32 noundef 1, ptr noundef %381, i32 noundef 1)
  %382 = load i32, ptr %16, align 4, !tbaa !9
  %383 = load ptr, ptr %38, align 8, !tbaa !5
  %384 = load i32, ptr %45, align 4, !tbaa !9
  %385 = load i32, ptr %16, align 4, !tbaa !9
  %386 = mul nsw i32 %384, %385
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds float, ptr %383, i64 %387
  %389 = load ptr, ptr %39, align 8, !tbaa !5
  %390 = load i32, ptr %19, align 4, !tbaa !9
  %391 = load i32, ptr %16, align 4, !tbaa !9
  %392 = mul nsw i32 %390, %391
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds float, ptr %389, i64 %393
  call void @__saxpy(i32 noundef %382, float noundef -1.000000e+00, ptr noundef %388, i32 noundef 1, ptr noundef %394, i32 noundef 1)
  %395 = load ptr, ptr %31, align 8, !tbaa !5
  %396 = load i32, ptr %45, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds i32, ptr %395, i64 %397
  %399 = load i32, ptr %398, align 4, !tbaa !9
  %400 = load ptr, ptr %30, align 8, !tbaa !5
  %401 = load i32, ptr %45, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i32, ptr %400, i64 %402
  %404 = load i32, ptr %403, align 4, !tbaa !9
  %405 = sub nsw i32 %399, %404
  %406 = load i32, ptr %49, align 4, !tbaa !9
  %407 = sub nsw i32 %406, %405
  store i32 %407, ptr %49, align 4, !tbaa !9
  %408 = load i32, ptr %16, align 4, !tbaa !9
  %409 = load ptr, ptr %39, align 8, !tbaa !5
  %410 = load ptr, ptr %7, align 8, !tbaa !5
  %411 = call float @__Compute2WayHLoadImbalance(i32 noundef %408, ptr noundef %409, ptr noundef %410)
  store float %411, ptr %43, align 4, !tbaa !27
  %412 = load i32, ptr %49, align 4, !tbaa !9
  %413 = load i32, ptr %47, align 4, !tbaa !9
  %414 = icmp slt i32 %412, %413
  br i1 %414, label %415, label %421

415:                                              ; preds = %368
  %416 = load float, ptr %43, align 4, !tbaa !27
  %417 = load float, ptr %41, align 4, !tbaa !27
  %418 = fsub float %416, %417
  %419 = fpext float %418 to double
  %420 = fcmp ole double %419, 1.000000e-05
  br i1 %420, label %440, label %421

421:                                              ; preds = %415, %368
  %422 = load i32, ptr %49, align 4, !tbaa !9
  %423 = load i32, ptr %47, align 4, !tbaa !9
  %424 = icmp eq i32 %422, %423
  br i1 %424, label %425, label %468

425:                                              ; preds = %421
  %426 = load float, ptr %43, align 4, !tbaa !27
  %427 = load float, ptr %42, align 4, !tbaa !27
  %428 = fcmp olt float %426, %427
  br i1 %428, label %440, label %429

429:                                              ; preds = %425
  %430 = load float, ptr %43, align 4, !tbaa !27
  %431 = load float, ptr %42, align 4, !tbaa !27
  %432 = fcmp oeq float %430, %431
  br i1 %432, label %433, label %468

433:                                              ; preds = %429
  %434 = load i32, ptr %16, align 4, !tbaa !9
  %435 = load ptr, ptr %39, align 8, !tbaa !5
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 0
  %438 = call i32 @__BetterBalance(i32 noundef %434, ptr noundef %435, ptr noundef %436, ptr noundef %437)
  %439 = icmp ne i32 %438, 0
  br i1 %439, label %440, label %468

440:                                              ; preds = %433, %425, %415
  %441 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %441, ptr %47, align 4, !tbaa !9
  %442 = load float, ptr %43, align 4, !tbaa !27
  store float %442, ptr %42, align 4, !tbaa !27
  %443 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %443, ptr %50, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %464, %440
  %445 = load i32, ptr %9, align 4, !tbaa !9
  %446 = load i32, ptr %16, align 4, !tbaa !9
  %447 = icmp slt i32 %445, %446
  br i1 %447, label %448, label %467

448:                                              ; preds = %444
  %449 = load ptr, ptr %7, align 8, !tbaa !5
  %450 = getelementptr inbounds float, ptr %449, i64 0
  %451 = load float, ptr %450, align 4, !tbaa !27
  %452 = load ptr, ptr %39, align 8, !tbaa !5
  %453 = load i32, ptr %9, align 4, !tbaa !9
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds float, ptr %452, i64 %454
  %456 = load float, ptr %455, align 4, !tbaa !27
  %457 = fsub float %451, %456
  %458 = fpext float %457 to double
  %459 = call double @llvm.fabs.f64(double %458)
  %460 = fptrunc double %459 to float
  %461 = load i32, ptr %9, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds [16 x float], ptr %40, i64 0, i64 %462
  store float %460, ptr %463, align 4, !tbaa !27
  br label %464

464:                                              ; preds = %448
  %465 = load i32, ptr %9, align 4, !tbaa !9
  %466 = add nsw i32 %465, 1
  store i32 %466, ptr %9, align 4, !tbaa !9
  br label %444, !llvm.loop !39

467:                                              ; preds = %444
  br label %515

468:                                              ; preds = %433, %429, %421
  %469 = load i32, ptr %18, align 4, !tbaa !9
  %470 = load i32, ptr %50, align 4, !tbaa !9
  %471 = sub nsw i32 %469, %470
  %472 = load i32, ptr %23, align 4, !tbaa !9
  %473 = icmp sgt i32 %471, %472
  br i1 %473, label %474, label %514

474:                                              ; preds = %468
  %475 = load ptr, ptr %31, align 8, !tbaa !5
  %476 = load i32, ptr %45, align 4, !tbaa !9
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds i32, ptr %475, i64 %477
  %479 = load i32, ptr %478, align 4, !tbaa !9
  %480 = load ptr, ptr %30, align 8, !tbaa !5
  %481 = load i32, ptr %45, align 4, !tbaa !9
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds i32, ptr %480, i64 %482
  %484 = load i32, ptr %483, align 4, !tbaa !9
  %485 = sub nsw i32 %479, %484
  %486 = load i32, ptr %49, align 4, !tbaa !9
  %487 = add nsw i32 %486, %485
  store i32 %487, ptr %49, align 4, !tbaa !9
  %488 = load i32, ptr %16, align 4, !tbaa !9
  %489 = load ptr, ptr %38, align 8, !tbaa !5
  %490 = load i32, ptr %45, align 4, !tbaa !9
  %491 = load i32, ptr %16, align 4, !tbaa !9
  %492 = mul nsw i32 %490, %491
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds float, ptr %489, i64 %493
  %495 = load ptr, ptr %39, align 8, !tbaa !5
  %496 = load i32, ptr %19, align 4, !tbaa !9
  %497 = load i32, ptr %16, align 4, !tbaa !9
  %498 = mul nsw i32 %496, %497
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds float, ptr %495, i64 %499
  call void @__saxpy(i32 noundef %488, float noundef 1.000000e+00, ptr noundef %494, i32 noundef 1, ptr noundef %500, i32 noundef 1)
  %501 = load i32, ptr %16, align 4, !tbaa !9
  %502 = load ptr, ptr %38, align 8, !tbaa !5
  %503 = load i32, ptr %45, align 4, !tbaa !9
  %504 = load i32, ptr %16, align 4, !tbaa !9
  %505 = mul nsw i32 %503, %504
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds float, ptr %502, i64 %506
  %508 = load ptr, ptr %39, align 8, !tbaa !5
  %509 = load i32, ptr %20, align 4, !tbaa !9
  %510 = load i32, ptr %16, align 4, !tbaa !9
  %511 = mul nsw i32 %509, %510
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds float, ptr %508, i64 %512
  call void @__saxpy(i32 noundef %501, float noundef -1.000000e+00, ptr noundef %507, i32 noundef 1, ptr noundef %513, i32 noundef 1)
  br label %907

514:                                              ; preds = %468
  br label %515

515:                                              ; preds = %514, %467
  %516 = load i32, ptr %20, align 4, !tbaa !9
  %517 = load ptr, ptr %29, align 8, !tbaa !5
  %518 = load i32, ptr %45, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i32, ptr %517, i64 %519
  store i32 %516, ptr %520, align 4, !tbaa !9
  %521 = load i32, ptr %18, align 4, !tbaa !9
  %522 = load ptr, ptr %34, align 8, !tbaa !5
  %523 = load i32, ptr %45, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds i32, ptr %522, i64 %524
  store i32 %521, ptr %525, align 4, !tbaa !9
  %526 = load i32, ptr %45, align 4, !tbaa !9
  %527 = load ptr, ptr %35, align 8, !tbaa !5
  %528 = load i32, ptr %18, align 4, !tbaa !9
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %527, i64 %529
  store i32 %526, ptr %530, align 4, !tbaa !9
  %531 = load ptr, ptr %5, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.controldef, ptr %531, i32 0, i32 1
  %533 = load i32, ptr %532, align 4, !tbaa !29
  %534 = and i32 %533, 32
  %535 = icmp ne i32 %534, 0
  br i1 %535, label %536, label %582

536:                                              ; preds = %515
  %537 = load i32, ptr %45, align 4, !tbaa !9
  %538 = load i32, ptr %19, align 4, !tbaa !9
  %539 = load i32, ptr %25, align 4, !tbaa !9
  %540 = load ptr, ptr %31, align 8, !tbaa !5
  %541 = load i32, ptr %45, align 4, !tbaa !9
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds i32, ptr %540, i64 %542
  %544 = load i32, ptr %543, align 4, !tbaa !9
  %545 = load ptr, ptr %30, align 8, !tbaa !5
  %546 = load i32, ptr %45, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds i32, ptr %545, i64 %547
  %549 = load i32, ptr %548, align 4, !tbaa !9
  %550 = sub nsw i32 %544, %549
  %551 = load i32, ptr %49, align 4, !tbaa !9
  %552 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %537, i32 noundef %538, i32 noundef %539, i32 noundef %550, i32 noundef %551)
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %553

553:                                              ; preds = %573, %536
  %554 = load i32, ptr %13, align 4, !tbaa !9
  %555 = load i32, ptr %16, align 4, !tbaa !9
  %556 = icmp slt i32 %554, %555
  br i1 %556, label %557, label %576

557:                                              ; preds = %553
  %558 = load ptr, ptr %39, align 8, !tbaa !5
  %559 = load i32, ptr %13, align 4, !tbaa !9
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds float, ptr %558, i64 %560
  %562 = load float, ptr %561, align 4, !tbaa !27
  %563 = fpext float %562 to double
  %564 = load ptr, ptr %39, align 8, !tbaa !5
  %565 = load i32, ptr %16, align 4, !tbaa !9
  %566 = load i32, ptr %13, align 4, !tbaa !9
  %567 = add nsw i32 %565, %566
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds float, ptr %564, i64 %568
  %570 = load float, ptr %569, align 4, !tbaa !27
  %571 = fpext float %570 to double
  %572 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %563, double noundef %571)
  br label %573

573:                                              ; preds = %557
  %574 = load i32, ptr %13, align 4, !tbaa !9
  %575 = add nsw i32 %574, 1
  store i32 %575, ptr %13, align 4, !tbaa !9
  br label %553, !llvm.loop !40

576:                                              ; preds = %553
  %577 = load float, ptr %42, align 4, !tbaa !27
  %578 = fpext float %577 to double
  %579 = load float, ptr %43, align 4, !tbaa !27
  %580 = fpext float %579 to double
  %581 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %578, double noundef %580)
  br label %582

582:                                              ; preds = %576, %515
  br label %583

583:                                              ; preds = %582
  %584 = load ptr, ptr %30, align 8, !tbaa !5
  %585 = load i32, ptr %45, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %584, i64 %586
  %588 = load i32, ptr %587, align 4, !tbaa !9
  store i32 %588, ptr %24, align 4, !tbaa !9
  %589 = load ptr, ptr %31, align 8, !tbaa !5
  %590 = load i32, ptr %45, align 4, !tbaa !9
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds i32, ptr %589, i64 %591
  %593 = load i32, ptr %592, align 4, !tbaa !9
  %594 = load ptr, ptr %30, align 8, !tbaa !5
  %595 = load i32, ptr %45, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds i32, ptr %594, i64 %596
  store i32 %593, ptr %597, align 4, !tbaa !9
  %598 = load i32, ptr %24, align 4, !tbaa !9
  %599 = load ptr, ptr %31, align 8, !tbaa !5
  %600 = load i32, ptr %45, align 4, !tbaa !9
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds i32, ptr %599, i64 %601
  store i32 %598, ptr %602, align 4, !tbaa !9
  br label %603

603:                                              ; preds = %583
  br label %604

604:                                              ; preds = %603
  %605 = load ptr, ptr %31, align 8, !tbaa !5
  %606 = load i32, ptr %45, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds i32, ptr %605, i64 %607
  %609 = load i32, ptr %608, align 4, !tbaa !9
  %610 = icmp eq i32 %609, 0
  br i1 %610, label %611, label %659

611:                                              ; preds = %604
  %612 = load ptr, ptr %26, align 8, !tbaa !5
  %613 = load i32, ptr %45, align 4, !tbaa !9
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds i32, ptr %612, i64 %614
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = load ptr, ptr %26, align 8, !tbaa !5
  %618 = load i32, ptr %45, align 4, !tbaa !9
  %619 = add nsw i32 %618, 1
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds i32, ptr %617, i64 %620
  %622 = load i32, ptr %621, align 4, !tbaa !9
  %623 = icmp slt i32 %616, %622
  br i1 %623, label %624, label %659

624:                                              ; preds = %611
  br label %625

625:                                              ; preds = %624
  %626 = load ptr, ptr %33, align 8, !tbaa !5
  %627 = load i32, ptr %17, align 4, !tbaa !9
  %628 = add nsw i32 %627, -1
  store i32 %628, ptr %17, align 4, !tbaa !9
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %626, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = load ptr, ptr %33, align 8, !tbaa !5
  %633 = load ptr, ptr %32, align 8, !tbaa !5
  %634 = load i32, ptr %45, align 4, !tbaa !9
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds i32, ptr %633, i64 %635
  %637 = load i32, ptr %636, align 4, !tbaa !9
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %632, i64 %638
  store i32 %631, ptr %639, align 4, !tbaa !9
  %640 = load ptr, ptr %32, align 8, !tbaa !5
  %641 = load i32, ptr %45, align 4, !tbaa !9
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds i32, ptr %640, i64 %642
  %644 = load i32, ptr %643, align 4, !tbaa !9
  %645 = load ptr, ptr %32, align 8, !tbaa !5
  %646 = load ptr, ptr %33, align 8, !tbaa !5
  %647 = load i32, ptr %17, align 4, !tbaa !9
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds i32, ptr %646, i64 %648
  %650 = load i32, ptr %649, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds i32, ptr %645, i64 %651
  store i32 %644, ptr %652, align 4, !tbaa !9
  %653 = load ptr, ptr %32, align 8, !tbaa !5
  %654 = load i32, ptr %45, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  store i32 -1, ptr %656, align 4, !tbaa !9
  br label %657

657:                                              ; preds = %625
  br label %658

658:                                              ; preds = %657
  br label %659

659:                                              ; preds = %658, %611, %604
  %660 = load ptr, ptr %26, align 8, !tbaa !5
  %661 = load i32, ptr %45, align 4, !tbaa !9
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds i32, ptr %660, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !9
  store i32 %664, ptr %11, align 4, !tbaa !9
  br label %665

665:                                              ; preds = %900, %659
  %666 = load i32, ptr %11, align 4, !tbaa !9
  %667 = load ptr, ptr %26, align 8, !tbaa !5
  %668 = load i32, ptr %45, align 4, !tbaa !9
  %669 = add nsw i32 %668, 1
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds i32, ptr %667, i64 %670
  %672 = load i32, ptr %671, align 4, !tbaa !9
  %673 = icmp slt i32 %666, %672
  br i1 %673, label %674, label %903

674:                                              ; preds = %665
  %675 = load ptr, ptr %27, align 8, !tbaa !5
  %676 = load i32, ptr %11, align 4, !tbaa !9
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %675, i64 %677
  %679 = load i32, ptr %678, align 4, !tbaa !9
  store i32 %679, ptr %12, align 4, !tbaa !9
  %680 = load ptr, ptr %31, align 8, !tbaa !5
  %681 = load i32, ptr %12, align 4, !tbaa !9
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds i32, ptr %680, i64 %682
  %684 = load i32, ptr %683, align 4, !tbaa !9
  %685 = load ptr, ptr %30, align 8, !tbaa !5
  %686 = load i32, ptr %12, align 4, !tbaa !9
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds i32, ptr %685, i64 %687
  %689 = load i32, ptr %688, align 4, !tbaa !9
  %690 = sub nsw i32 %684, %689
  store i32 %690, ptr %46, align 4, !tbaa !9
  %691 = load i32, ptr %20, align 4, !tbaa !9
  %692 = load ptr, ptr %29, align 8, !tbaa !5
  %693 = load i32, ptr %12, align 4, !tbaa !9
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds i32, ptr %692, i64 %694
  %696 = load i32, ptr %695, align 4, !tbaa !9
  %697 = icmp eq i32 %691, %696
  br i1 %697, label %698, label %704

698:                                              ; preds = %674
  %699 = load ptr, ptr %28, align 8, !tbaa !5
  %700 = load i32, ptr %11, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i32, ptr %699, i64 %701
  %703 = load i32, ptr %702, align 4, !tbaa !9
  br label %711

704:                                              ; preds = %674
  %705 = load ptr, ptr %28, align 8, !tbaa !5
  %706 = load i32, ptr %11, align 4, !tbaa !9
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds i32, ptr %705, i64 %707
  %709 = load i32, ptr %708, align 4, !tbaa !9
  %710 = sub nsw i32 0, %709
  br label %711

711:                                              ; preds = %704, %698
  %712 = phi i32 [ %703, %698 ], [ %710, %704 ]
  store i32 %712, ptr %14, align 4, !tbaa !9
  br label %713

713:                                              ; preds = %711
  %714 = load i32, ptr %14, align 4, !tbaa !9
  %715 = load ptr, ptr %30, align 8, !tbaa !5
  %716 = load i32, ptr %12, align 4, !tbaa !9
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds i32, ptr %715, i64 %717
  %719 = load i32, ptr %718, align 4, !tbaa !9
  %720 = add nsw i32 %719, %714
  store i32 %720, ptr %718, align 4, !tbaa !9
  %721 = load i32, ptr %14, align 4, !tbaa !9
  %722 = load ptr, ptr %31, align 8, !tbaa !5
  %723 = load i32, ptr %12, align 4, !tbaa !9
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %722, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !9
  %727 = sub nsw i32 %726, %721
  store i32 %727, ptr %725, align 4, !tbaa !9
  br label %728

728:                                              ; preds = %713
  br label %729

729:                                              ; preds = %728
  %730 = load ptr, ptr %32, align 8, !tbaa !5
  %731 = load i32, ptr %12, align 4, !tbaa !9
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds i32, ptr %730, i64 %732
  %734 = load i32, ptr %733, align 4, !tbaa !9
  %735 = icmp ne i32 %734, -1
  br i1 %735, label %736, label %841

736:                                              ; preds = %729
  %737 = load ptr, ptr %31, align 8, !tbaa !5
  %738 = load i32, ptr %12, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds i32, ptr %737, i64 %739
  %741 = load i32, ptr %740, align 4, !tbaa !9
  %742 = icmp eq i32 %741, 0
  br i1 %742, label %743, label %803

743:                                              ; preds = %736
  br label %744

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

776:                                              ; preds = %744
  br label %777

777:                                              ; preds = %776
  %778 = load ptr, ptr %34, align 8, !tbaa !5
  %779 = load i32, ptr %12, align 4, !tbaa !9
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds i32, ptr %778, i64 %780
  %782 = load i32, ptr %781, align 4, !tbaa !9
  %783 = icmp eq i32 %782, -1
  br i1 %783, label %784, label %802

784:                                              ; preds = %777
  %785 = load ptr, ptr %37, align 8, !tbaa !5
  %786 = load i32, ptr %12, align 4, !tbaa !9
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds i32, ptr %785, i64 %787
  %789 = load i32, ptr %788, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %790
  %792 = load ptr, ptr %29, align 8, !tbaa !5
  %793 = load i32, ptr %12, align 4, !tbaa !9
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds i32, ptr %792, i64 %794
  %796 = load i32, ptr %795, align 4, !tbaa !9
  %797 = sext i32 %796 to i64
  %798 = getelementptr inbounds [2 x %struct.PQueueType], ptr %791, i64 0, i64 %797
  %799 = load i32, ptr %12, align 4, !tbaa !9
  %800 = load i32, ptr %46, align 4, !tbaa !9
  %801 = call i32 @__PQueueDelete(ptr noundef %798, i32 noundef %799, i32 noundef %800)
  br label %802

802:                                              ; preds = %784, %777
  br label %840

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

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

839:                                              ; preds = %810, %803
  br label %840

840:                                              ; preds = %839, %802
  br label %899

841:                                              ; preds = %729
  %842 = load ptr, ptr %31, align 8, !tbaa !5
  %843 = load i32, ptr %12, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds i32, ptr %842, i64 %844
  %846 = load i32, ptr %845, align 4, !tbaa !9
  %847 = icmp sgt i32 %846, 0
  br i1 %847, label %848, label %898

848:                                              ; preds = %841
  br label %849

849:                                              ; preds = %848
  %850 = load i32, ptr %12, align 4, !tbaa !9
  %851 = load ptr, ptr %33, align 8, !tbaa !5
  %852 = load i32, ptr %17, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  store i32 %850, ptr %854, align 4, !tbaa !9
  %855 = load i32, ptr %17, align 4, !tbaa !9
  %856 = add nsw i32 %855, 1
  store i32 %856, ptr %17, align 4, !tbaa !9
  %857 = load ptr, ptr %32, align 8, !tbaa !5
  %858 = load i32, ptr %12, align 4, !tbaa !9
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds i32, ptr %857, i64 %859
  store i32 %855, ptr %860, align 4, !tbaa !9
  br label %861

861:                                              ; preds = %849
  br label %862

862:                                              ; preds = %861
  %863 = load ptr, ptr %34, align 8, !tbaa !5
  %864 = load i32, ptr %12, align 4, !tbaa !9
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds i32, ptr %863, i64 %865
  %867 = load i32, ptr %866, align 4, !tbaa !9
  %868 = icmp eq i32 %867, -1
  br i1 %868, label %869, label %897

869:                                              ; preds = %862
  %870 = load ptr, ptr %37, align 8, !tbaa !5
  %871 = load i32, ptr %12, align 4, !tbaa !9
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds i32, ptr %870, i64 %872
  %874 = load i32, ptr %873, align 4, !tbaa !9
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %875
  %877 = load ptr, ptr %29, align 8, !tbaa !5
  %878 = load i32, ptr %12, align 4, !tbaa !9
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds i32, ptr %877, i64 %879
  %881 = load i32, ptr %880, align 4, !tbaa !9
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds [2 x %struct.PQueueType], ptr %876, i64 0, i64 %882
  %884 = load i32, ptr %12, align 4, !tbaa !9
  %885 = load ptr, ptr %31, align 8, !tbaa !5
  %886 = load i32, ptr %12, align 4, !tbaa !9
  %887 = sext i32 %886 to i64
  %888 = getelementptr inbounds i32, ptr %885, i64 %887
  %889 = load i32, ptr %888, align 4, !tbaa !9
  %890 = load ptr, ptr %30, align 8, !tbaa !5
  %891 = load i32, ptr %12, align 4, !tbaa !9
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds i32, ptr %890, i64 %892
  %894 = load i32, ptr %893, align 4, !tbaa !9
  %895 = sub nsw i32 %889, %894
  %896 = call i32 @__PQueueInsert(ptr noundef %883, i32 noundef %884, i32 noundef %895)
  br label %897

897:                                              ; preds = %869, %862
  br label %898

898:                                              ; preds = %897, %841
  br label %899

899:                                              ; preds = %898, %840
  br label %900

900:                                              ; preds = %899
  %901 = load i32, ptr %11, align 4, !tbaa !9
  %902 = add nsw i32 %901, 1
  store i32 %902, ptr %11, align 4, !tbaa !9
  br label %665, !llvm.loop !41

903:                                              ; preds = %665
  br label %904

904:                                              ; preds = %903
  %905 = load i32, ptr %18, align 4, !tbaa !9
  %906 = add nsw i32 %905, 1
  store i32 %906, ptr %18, align 4, !tbaa !9
  br label %344, !llvm.loop !42

907:                                              ; preds = %474, %367, %344
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %908

908:                                              ; preds = %921, %907
  %909 = load i32, ptr %9, align 4, !tbaa !9
  %910 = load i32, ptr %18, align 4, !tbaa !9
  %911 = icmp slt i32 %909, %910
  br i1 %911, label %912, label %924

912:                                              ; preds = %908
  %913 = load ptr, ptr %34, align 8, !tbaa !5
  %914 = load ptr, ptr %35, align 8, !tbaa !5
  %915 = load i32, ptr %9, align 4, !tbaa !9
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds i32, ptr %914, i64 %916
  %918 = load i32, ptr %917, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds i32, ptr %913, i64 %919
  store i32 -1, ptr %920, align 4, !tbaa !9
  br label %921

921:                                              ; preds = %912
  %922 = load i32, ptr %9, align 4, !tbaa !9
  %923 = add nsw i32 %922, 1
  store i32 %923, ptr %9, align 4, !tbaa !9
  br label %908, !llvm.loop !43

924:                                              ; preds = %908
  %925 = load i32, ptr %18, align 4, !tbaa !9
  %926 = add nsw i32 %925, -1
  store i32 %926, ptr %18, align 4, !tbaa !9
  br label %927

927:                                              ; preds = %1231, %924
  %928 = load i32, ptr %18, align 4, !tbaa !9
  %929 = load i32, ptr %50, align 4, !tbaa !9
  %930 = icmp sgt i32 %928, %929
  br i1 %930, label %931, label %1234

931:                                              ; preds = %927
  %932 = load ptr, ptr %35, align 8, !tbaa !5
  %933 = load i32, ptr %18, align 4, !tbaa !9
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds i32, ptr %932, i64 %934
  %936 = load i32, ptr %935, align 4, !tbaa !9
  store i32 %936, ptr %45, align 4, !tbaa !9
  %937 = load ptr, ptr %29, align 8, !tbaa !5
  %938 = load i32, ptr %45, align 4, !tbaa !9
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i32, ptr %937, i64 %939
  %941 = load i32, ptr %940, align 4, !tbaa !9
  %942 = add nsw i32 %941, 1
  %943 = srem i32 %942, 2
  %944 = load ptr, ptr %29, align 8, !tbaa !5
  %945 = load i32, ptr %45, align 4, !tbaa !9
  %946 = sext i32 %945 to i64
  %947 = getelementptr inbounds i32, ptr %944, i64 %946
  store i32 %943, ptr %947, align 4, !tbaa !9
  store i32 %943, ptr %20, align 4, !tbaa !9
  br label %948

948:                                              ; preds = %931
  %949 = load ptr, ptr %30, align 8, !tbaa !5
  %950 = load i32, ptr %45, align 4, !tbaa !9
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds i32, ptr %949, i64 %951
  %953 = load i32, ptr %952, align 4, !tbaa !9
  store i32 %953, ptr %24, align 4, !tbaa !9
  %954 = load ptr, ptr %31, align 8, !tbaa !5
  %955 = load i32, ptr %45, align 4, !tbaa !9
  %956 = sext i32 %955 to i64
  %957 = getelementptr inbounds i32, ptr %954, i64 %956
  %958 = load i32, ptr %957, align 4, !tbaa !9
  %959 = load ptr, ptr %30, align 8, !tbaa !5
  %960 = load i32, ptr %45, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds i32, ptr %959, i64 %961
  store i32 %958, ptr %962, align 4, !tbaa !9
  %963 = load i32, ptr %24, align 4, !tbaa !9
  %964 = load ptr, ptr %31, align 8, !tbaa !5
  %965 = load i32, ptr %45, align 4, !tbaa !9
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds i32, ptr %964, i64 %966
  store i32 %963, ptr %967, align 4, !tbaa !9
  br label %968

968:                                              ; preds = %948
  br label %969

969:                                              ; preds = %968
  %970 = load ptr, ptr %31, align 8, !tbaa !5
  %971 = load i32, ptr %45, align 4, !tbaa !9
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds i32, ptr %970, i64 %972
  %974 = load i32, ptr %973, align 4, !tbaa !9
  %975 = icmp eq i32 %974, 0
  br i1 %975, label %976, label %1031

976:                                              ; preds = %969
  %977 = load ptr, ptr %32, align 8, !tbaa !5
  %978 = load i32, ptr %45, align 4, !tbaa !9
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds i32, ptr %977, i64 %979
  %981 = load i32, ptr %980, align 4, !tbaa !9
  %982 = icmp ne i32 %981, -1
  br i1 %982, label %983, label %1031

983:                                              ; preds = %976
  %984 = load ptr, ptr %26, align 8, !tbaa !5
  %985 = load i32, ptr %45, align 4, !tbaa !9
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds i32, ptr %984, i64 %986
  %988 = load i32, ptr %987, align 4, !tbaa !9
  %989 = load ptr, ptr %26, align 8, !tbaa !5
  %990 = load i32, ptr %45, align 4, !tbaa !9
  %991 = add nsw i32 %990, 1
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds i32, ptr %989, i64 %992
  %994 = load i32, ptr %993, align 4, !tbaa !9
  %995 = icmp slt i32 %988, %994
  br i1 %995, label %996, label %1031

996:                                              ; preds = %983
  br label %997

997:                                              ; preds = %996
  %998 = load ptr, ptr %33, align 8, !tbaa !5
  %999 = load i32, ptr %17, align 4, !tbaa !9
  %1000 = add nsw i32 %999, -1
  store i32 %1000, ptr %17, align 4, !tbaa !9
  %1001 = sext i32 %1000 to i64
  %1002 = getelementptr inbounds i32, ptr %998, i64 %1001
  %1003 = load i32, ptr %1002, align 4, !tbaa !9
  %1004 = load ptr, ptr %33, align 8, !tbaa !5
  %1005 = load ptr, ptr %32, align 8, !tbaa !5
  %1006 = load i32, ptr %45, align 4, !tbaa !9
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds i32, ptr %1005, i64 %1007
  %1009 = load i32, ptr %1008, align 4, !tbaa !9
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds i32, ptr %1004, i64 %1010
  store i32 %1003, ptr %1011, align 4, !tbaa !9
  %1012 = load ptr, ptr %32, align 8, !tbaa !5
  %1013 = load i32, ptr %45, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds i32, ptr %1012, i64 %1014
  %1016 = load i32, ptr %1015, align 4, !tbaa !9
  %1017 = load ptr, ptr %32, align 8, !tbaa !5
  %1018 = load ptr, ptr %33, align 8, !tbaa !5
  %1019 = load i32, ptr %17, align 4, !tbaa !9
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds i32, ptr %1018, i64 %1020
  %1022 = load i32, ptr %1021, align 4, !tbaa !9
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds i32, ptr %1017, i64 %1023
  store i32 %1016, ptr %1024, align 4, !tbaa !9
  %1025 = load ptr, ptr %32, align 8, !tbaa !5
  %1026 = load i32, ptr %45, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds i32, ptr %1025, i64 %1027
  store i32 -1, ptr %1028, align 4, !tbaa !9
  br label %1029

1029:                                             ; preds = %997
  br label %1030

1030:                                             ; preds = %1029
  br label %1061

1031:                                             ; preds = %983, %976, %969
  %1032 = load ptr, ptr %31, align 8, !tbaa !5
  %1033 = load i32, ptr %45, align 4, !tbaa !9
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i32, ptr %1032, i64 %1034
  %1036 = load i32, ptr %1035, align 4, !tbaa !9
  %1037 = icmp sgt i32 %1036, 0
  br i1 %1037, label %1038, label %1060

1038:                                             ; preds = %1031
  %1039 = load ptr, ptr %32, align 8, !tbaa !5
  %1040 = load i32, ptr %45, align 4, !tbaa !9
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds i32, ptr %1039, i64 %1041
  %1043 = load i32, ptr %1042, align 4, !tbaa !9
  %1044 = icmp eq i32 %1043, -1
  br i1 %1044, label %1045, label %1060

1045:                                             ; preds = %1038
  br label %1046

1046:                                             ; preds = %1045
  %1047 = load i32, ptr %45, align 4, !tbaa !9
  %1048 = load ptr, ptr %33, align 8, !tbaa !5
  %1049 = load i32, ptr %17, align 4, !tbaa !9
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds i32, ptr %1048, i64 %1050
  store i32 %1047, ptr %1051, align 4, !tbaa !9
  %1052 = load i32, ptr %17, align 4, !tbaa !9
  %1053 = add nsw i32 %1052, 1
  store i32 %1053, ptr %17, align 4, !tbaa !9
  %1054 = load ptr, ptr %32, align 8, !tbaa !5
  %1055 = load i32, ptr %45, align 4, !tbaa !9
  %1056 = sext i32 %1055 to i64
  %1057 = getelementptr inbounds i32, ptr %1054, i64 %1056
  store i32 %1052, ptr %1057, align 4, !tbaa !9
  br label %1058

1058:                                             ; preds = %1046
  br label %1059

1059:                                             ; preds = %1058
  br label %1060

1060:                                             ; preds = %1059, %1038, %1031
  br label %1061

1061:                                             ; preds = %1060, %1030
  %1062 = load i32, ptr %16, align 4, !tbaa !9
  %1063 = load ptr, ptr %38, align 8, !tbaa !5
  %1064 = load i32, ptr %45, align 4, !tbaa !9
  %1065 = load i32, ptr %16, align 4, !tbaa !9
  %1066 = mul nsw i32 %1064, %1065
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds float, ptr %1063, i64 %1067
  %1069 = load ptr, ptr %39, align 8, !tbaa !5
  %1070 = load i32, ptr %20, align 4, !tbaa !9
  %1071 = load i32, ptr %16, align 4, !tbaa !9
  %1072 = mul nsw i32 %1070, %1071
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds float, ptr %1069, i64 %1073
  call void @__saxpy(i32 noundef %1062, float noundef 1.000000e+00, ptr noundef %1068, i32 noundef 1, ptr noundef %1074, i32 noundef 1)
  %1075 = load i32, ptr %16, align 4, !tbaa !9
  %1076 = load ptr, ptr %38, align 8, !tbaa !5
  %1077 = load i32, ptr %45, align 4, !tbaa !9
  %1078 = load i32, ptr %16, align 4, !tbaa !9
  %1079 = mul nsw i32 %1077, %1078
  %1080 = sext i32 %1079 to i64
  %1081 = getelementptr inbounds float, ptr %1076, i64 %1080
  %1082 = load ptr, ptr %39, align 8, !tbaa !5
  %1083 = load i32, ptr %20, align 4, !tbaa !9
  %1084 = add nsw i32 %1083, 1
  %1085 = srem i32 %1084, 2
  %1086 = load i32, ptr %16, align 4, !tbaa !9
  %1087 = mul nsw i32 %1085, %1086
  %1088 = sext i32 %1087 to i64
  %1089 = getelementptr inbounds float, ptr %1082, i64 %1088
  call void @__saxpy(i32 noundef %1075, float noundef -1.000000e+00, ptr noundef %1081, i32 noundef 1, ptr noundef %1089, i32 noundef 1)
  %1090 = load ptr, ptr %26, align 8, !tbaa !5
  %1091 = load i32, ptr %45, align 4, !tbaa !9
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds i32, ptr %1090, i64 %1092
  %1094 = load i32, ptr %1093, align 4, !tbaa !9
  store i32 %1094, ptr %11, align 4, !tbaa !9
  br label %1095

1095:                                             ; preds = %1227, %1061
  %1096 = load i32, ptr %11, align 4, !tbaa !9
  %1097 = load ptr, ptr %26, align 8, !tbaa !5
  %1098 = load i32, ptr %45, align 4, !tbaa !9
  %1099 = add nsw i32 %1098, 1
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds i32, ptr %1097, i64 %1100
  %1102 = load i32, ptr %1101, align 4, !tbaa !9
  %1103 = icmp slt i32 %1096, %1102
  br i1 %1103, label %1104, label %1230

1104:                                             ; preds = %1095
  %1105 = load ptr, ptr %27, align 8, !tbaa !5
  %1106 = load i32, ptr %11, align 4, !tbaa !9
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds i32, ptr %1105, i64 %1107
  %1109 = load i32, ptr %1108, align 4, !tbaa !9
  store i32 %1109, ptr %12, align 4, !tbaa !9
  %1110 = load i32, ptr %20, align 4, !tbaa !9
  %1111 = load ptr, ptr %29, align 8, !tbaa !5
  %1112 = load i32, ptr %12, align 4, !tbaa !9
  %1113 = sext i32 %1112 to i64
  %1114 = getelementptr inbounds i32, ptr %1111, i64 %1113
  %1115 = load i32, ptr %1114, align 4, !tbaa !9
  %1116 = icmp eq i32 %1110, %1115
  br i1 %1116, label %1117, label %1123

1117:                                             ; preds = %1104
  %1118 = load ptr, ptr %28, align 8, !tbaa !5
  %1119 = load i32, ptr %11, align 4, !tbaa !9
  %1120 = sext i32 %1119 to i64
  %1121 = getelementptr inbounds i32, ptr %1118, i64 %1120
  %1122 = load i32, ptr %1121, align 4, !tbaa !9
  br label %1130

1123:                                             ; preds = %1104
  %1124 = load ptr, ptr %28, align 8, !tbaa !5
  %1125 = load i32, ptr %11, align 4, !tbaa !9
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds i32, ptr %1124, i64 %1126
  %1128 = load i32, ptr %1127, align 4, !tbaa !9
  %1129 = sub nsw i32 0, %1128
  br label %1130

1130:                                             ; preds = %1123, %1117
  %1131 = phi i32 [ %1122, %1117 ], [ %1129, %1123 ]
  store i32 %1131, ptr %14, align 4, !tbaa !9
  br label %1132

1132:                                             ; preds = %1130
  %1133 = load i32, ptr %14, align 4, !tbaa !9
  %1134 = load ptr, ptr %30, align 8, !tbaa !5
  %1135 = load i32, ptr %12, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds i32, ptr %1134, i64 %1136
  %1138 = load i32, ptr %1137, align 4, !tbaa !9
  %1139 = add nsw i32 %1138, %1133
  store i32 %1139, ptr %1137, align 4, !tbaa !9
  %1140 = load i32, ptr %14, align 4, !tbaa !9
  %1141 = load ptr, ptr %31, align 8, !tbaa !5
  %1142 = load i32, ptr %12, align 4, !tbaa !9
  %1143 = sext i32 %1142 to i64
  %1144 = getelementptr inbounds i32, ptr %1141, i64 %1143
  %1145 = load i32, ptr %1144, align 4, !tbaa !9
  %1146 = sub nsw i32 %1145, %1140
  store i32 %1146, ptr %1144, align 4, !tbaa !9
  br label %1147

1147:                                             ; preds = %1132
  br label %1148

1148:                                             ; preds = %1147
  %1149 = load ptr, ptr %32, align 8, !tbaa !5
  %1150 = load i32, ptr %12, align 4, !tbaa !9
  %1151 = sext i32 %1150 to i64
  %1152 = getelementptr inbounds i32, ptr %1149, i64 %1151
  %1153 = load i32, ptr %1152, align 4, !tbaa !9
  %1154 = icmp ne i32 %1153, -1
  br i1 %1154, label %1155, label %1197

1155:                                             ; preds = %1148
  %1156 = load ptr, ptr %31, align 8, !tbaa !5
  %1157 = load i32, ptr %12, align 4, !tbaa !9
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds i32, ptr %1156, i64 %1158
  %1160 = load i32, ptr %1159, align 4, !tbaa !9
  %1161 = icmp eq i32 %1160, 0
  br i1 %1161, label %1162, label %1197

1162:                                             ; preds = %1155
  br label %1163

1163:                                             ; preds = %1162
  %1164 = load ptr, ptr %33, align 8, !tbaa !5
  %1165 = load i32, ptr %17, align 4, !tbaa !9
  %1166 = add nsw i32 %1165, -1
  store i32 %1166, ptr %17, align 4, !tbaa !9
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds i32, ptr %1164, i64 %1167
  %1169 = load i32, ptr %1168, align 4, !tbaa !9
  %1170 = load ptr, ptr %33, align 8, !tbaa !5
  %1171 = load ptr, ptr %32, align 8, !tbaa !5
  %1172 = load i32, ptr %12, align 4, !tbaa !9
  %1173 = sext i32 %1172 to i64
  %1174 = getelementptr inbounds i32, ptr %1171, i64 %1173
  %1175 = load i32, ptr %1174, align 4, !tbaa !9
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds i32, ptr %1170, i64 %1176
  store i32 %1169, ptr %1177, align 4, !tbaa !9
  %1178 = load ptr, ptr %32, align 8, !tbaa !5
  %1179 = load i32, ptr %12, align 4, !tbaa !9
  %1180 = sext i32 %1179 to i64
  %1181 = getelementptr inbounds i32, ptr %1178, i64 %1180
  %1182 = load i32, ptr %1181, align 4, !tbaa !9
  %1183 = load ptr, ptr %32, align 8, !tbaa !5
  %1184 = load ptr, ptr %33, align 8, !tbaa !5
  %1185 = load i32, ptr %17, align 4, !tbaa !9
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds i32, ptr %1184, i64 %1186
  %1188 = load i32, ptr %1187, align 4, !tbaa !9
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds i32, ptr %1183, i64 %1189
  store i32 %1182, ptr %1190, align 4, !tbaa !9
  %1191 = load ptr, ptr %32, align 8, !tbaa !5
  %1192 = load i32, ptr %12, align 4, !tbaa !9
  %1193 = sext i32 %1192 to i64
  %1194 = getelementptr inbounds i32, ptr %1191, i64 %1193
  store i32 -1, ptr %1194, align 4, !tbaa !9
  br label %1195

1195:                                             ; preds = %1163
  br label %1196

1196:                                             ; preds = %1195
  br label %1197

1197:                                             ; preds = %1196, %1155, %1148
  %1198 = load ptr, ptr %32, align 8, !tbaa !5
  %1199 = load i32, ptr %12, align 4, !tbaa !9
  %1200 = sext i32 %1199 to i64
  %1201 = getelementptr inbounds i32, ptr %1198, i64 %1200
  %1202 = load i32, ptr %1201, align 4, !tbaa !9
  %1203 = icmp eq i32 %1202, -1
  br i1 %1203, label %1204, label %1226

1204:                                             ; preds = %1197
  %1205 = load ptr, ptr %31, align 8, !tbaa !5
  %1206 = load i32, ptr %12, align 4, !tbaa !9
  %1207 = sext i32 %1206 to i64
  %1208 = getelementptr inbounds i32, ptr %1205, i64 %1207
  %1209 = load i32, ptr %1208, align 4, !tbaa !9
  %1210 = icmp sgt i32 %1209, 0
  br i1 %1210, label %1211, label %1226

1211:                                             ; preds = %1204
  br label %1212

1212:                                             ; preds = %1211
  %1213 = load i32, ptr %12, align 4, !tbaa !9
  %1214 = load ptr, ptr %33, align 8, !tbaa !5
  %1215 = load i32, ptr %17, align 4, !tbaa !9
  %1216 = sext i32 %1215 to i64
  %1217 = getelementptr inbounds i32, ptr %1214, i64 %1216
  store i32 %1213, ptr %1217, align 4, !tbaa !9
  %1218 = load i32, ptr %17, align 4, !tbaa !9
  %1219 = add nsw i32 %1218, 1
  store i32 %1219, ptr %17, align 4, !tbaa !9
  %1220 = load ptr, ptr %32, align 8, !tbaa !5
  %1221 = load i32, ptr %12, align 4, !tbaa !9
  %1222 = sext i32 %1221 to i64
  %1223 = getelementptr inbounds i32, ptr %1220, i64 %1222
  store i32 %1218, ptr %1223, align 4, !tbaa !9
  br label %1224

1224:                                             ; preds = %1212
  br label %1225

1225:                                             ; preds = %1224
  br label %1226

1226:                                             ; preds = %1225, %1204, %1197
  br label %1227

1227:                                             ; preds = %1226
  %1228 = load i32, ptr %11, align 4, !tbaa !9
  %1229 = add nsw i32 %1228, 1
  store i32 %1229, ptr %11, align 4, !tbaa !9
  br label %1095, !llvm.loop !44

1230:                                             ; preds = %1095
  br label %1231

1231:                                             ; preds = %1230
  %1232 = load i32, ptr %18, align 4, !tbaa !9
  %1233 = add nsw i32 %1232, -1
  store i32 %1233, ptr %18, align 4, !tbaa !9
  br label %927, !llvm.loop !45

1234:                                             ; preds = %927
  %1235 = load ptr, ptr %5, align 8, !tbaa !5
  %1236 = getelementptr inbounds %struct.controldef, ptr %1235, i32 0, i32 1
  %1237 = load i32, ptr %1236, align 4, !tbaa !29
  %1238 = and i32 %1237, 8
  %1239 = icmp ne i32 %1238, 0
  br i1 %1239, label %1240, label %1275

1240:                                             ; preds = %1234
  %1241 = load i32, ptr %47, align 4, !tbaa !9
  %1242 = load i32, ptr %50, align 4, !tbaa !9
  %1243 = load i32, ptr %17, align 4, !tbaa !9
  %1244 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %1241, i32 noundef %1242, i32 noundef %1243)
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %1245

1245:                                             ; preds = %1265, %1240
  %1246 = load i32, ptr %13, align 4, !tbaa !9
  %1247 = load i32, ptr %16, align 4, !tbaa !9
  %1248 = icmp slt i32 %1246, %1247
  br i1 %1248, label %1249, label %1268

1249:                                             ; preds = %1245
  %1250 = load ptr, ptr %39, align 8, !tbaa !5
  %1251 = load i32, ptr %13, align 4, !tbaa !9
  %1252 = sext i32 %1251 to i64
  %1253 = getelementptr inbounds float, ptr %1250, i64 %1252
  %1254 = load float, ptr %1253, align 4, !tbaa !27
  %1255 = fpext float %1254 to double
  %1256 = load ptr, ptr %39, align 8, !tbaa !5
  %1257 = load i32, ptr %16, align 4, !tbaa !9
  %1258 = load i32, ptr %13, align 4, !tbaa !9
  %1259 = add nsw i32 %1257, %1258
  %1260 = sext i32 %1259 to i64
  %1261 = getelementptr inbounds float, ptr %1256, i64 %1260
  %1262 = load float, ptr %1261, align 4, !tbaa !27
  %1263 = fpext float %1262 to double
  %1264 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %1255, double noundef %1263)
  br label %1265

1265:                                             ; preds = %1249
  %1266 = load i32, ptr %13, align 4, !tbaa !9
  %1267 = add nsw i32 %1266, 1
  store i32 %1267, ptr %13, align 4, !tbaa !9
  br label %1245, !llvm.loop !46

1268:                                             ; preds = %1245
  %1269 = load i32, ptr %16, align 4, !tbaa !9
  %1270 = load ptr, ptr %39, align 8, !tbaa !5
  %1271 = load ptr, ptr %7, align 8, !tbaa !5
  %1272 = call float @__Compute2WayHLoadImbalance(i32 noundef %1269, ptr noundef %1270, ptr noundef %1271)
  %1273 = fpext float %1272 to double
  %1274 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %1273)
  br label %1275

1275:                                             ; preds = %1268, %1234
  %1276 = load i32, ptr %47, align 4, !tbaa !9
  %1277 = load ptr, ptr %6, align 8, !tbaa !5
  %1278 = getelementptr inbounds %struct.graphdef, ptr %1277, i32 0, i32 12
  store i32 %1276, ptr %1278, align 8, !tbaa !35
  %1279 = load i32, ptr %17, align 4, !tbaa !9
  %1280 = load ptr, ptr %6, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.graphdef, ptr %1280, i32 0, i32 16
  store i32 %1279, ptr %1281, align 8, !tbaa !34
  %1282 = load i32, ptr %50, align 4, !tbaa !9
  %1283 = icmp eq i32 %1282, -1
  br i1 %1283, label %1288, label %1284

1284:                                             ; preds = %1275
  %1285 = load i32, ptr %47, align 4, !tbaa !9
  %1286 = load i32, ptr %48, align 4, !tbaa !9
  %1287 = icmp eq i32 %1285, %1286
  br i1 %1287, label %1288, label %1289

1288:                                             ; preds = %1284, %1275
  br label %1293

1289:                                             ; preds = %1284
  br label %1290

1290:                                             ; preds = %1289
  %1291 = load i32, ptr %21, align 4, !tbaa !9
  %1292 = add nsw i32 %1291, 1
  store i32 %1292, ptr %21, align 4, !tbaa !9
  br label %241, !llvm.loop !47

1293:                                             ; preds = %1288, %241
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %1294

1294:                                             ; preds = %1309, %1293
  %1295 = load i32, ptr %9, align 4, !tbaa !9
  %1296 = load i32, ptr %16, align 4, !tbaa !9
  %1297 = icmp slt i32 %1295, %1296
  br i1 %1297, label %1298, label %1312

1298:                                             ; preds = %1294
  %1299 = load ptr, ptr %5, align 8, !tbaa !5
  %1300 = load i32, ptr %9, align 4, !tbaa !9
  %1301 = sext i32 %1300 to i64
  %1302 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1301
  %1303 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1302, i64 0, i64 0
  call void @__PQueueFree(ptr noundef %1299, ptr noundef %1303)
  %1304 = load ptr, ptr %5, align 8, !tbaa !5
  %1305 = load i32, ptr %9, align 4, !tbaa !9
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %44, i64 0, i64 %1306
  %1308 = getelementptr inbounds [2 x %struct.PQueueType], ptr %1307, i64 0, i64 1
  call void @__PQueueFree(ptr noundef %1304, ptr noundef %1308)
  br label %1309

1309:                                             ; preds = %1298
  %1310 = load i32, ptr %9, align 4, !tbaa !9
  %1311 = add nsw i32 %1310, 1
  store i32 %1311, ptr %9, align 4, !tbaa !9
  br label %1294, !llvm.loop !48

1312:                                             ; preds = %1294
  %1313 = load ptr, ptr %5, align 8, !tbaa !5
  %1314 = load i32, ptr %15, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1313, i32 noundef %1314)
  %1315 = load ptr, ptr %5, align 8, !tbaa !5
  %1316 = load i32, ptr %15, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1315, i32 noundef %1316)
  %1317 = load ptr, ptr %5, align 8, !tbaa !5
  %1318 = load i32, ptr %15, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1317, i32 noundef %1318)
  %1319 = load ptr, ptr %5, align 8, !tbaa !5
  %1320 = load i32, ptr %15, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1319, i32 noundef %1320)
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, 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) #1

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

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

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

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

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

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

declare void @__PQueueReset(ptr noundef) #2

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

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

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

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

declare i32 @__PQueueGetMax(ptr noundef) #2

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"graphdef", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !10, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208}
!13 = !{!12, !10, i64 176}
!14 = !{!12, !6, i64 24}
!15 = !{!12, !6, i64 184}
!16 = !{!12, !6, i64 48}
!17 = !{!12, !6, i64 56}
!18 = !{!12, !6, i64 96}
!19 = !{!12, !6, i64 136}
!20 = !{!12, !6, i64 144}
!21 = !{!12, !6, i64 192}
!22 = !{!12, !6, i64 120}
!23 = !{!12, !6, i64 128}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!28, !28, i64 0}
!28 = !{!"float", !7, i64 0}
!29 = !{!30, !10, i64 4}
!30 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !28, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !31, i64 48, !32, i64 104, !32, i64 112, !32, i64 120, !32, i64 128, !32, i64 136, !32, i64 144, !32, i64 152, !32, i64 160, !32, i64 168, !32, i64 176, !32, i64 184, !32, i64 192, !32, i64 200, !32, i64 208, !32, i64 216, !32, i64 224}
!31 = !{!"workspacedef", !6, i64 0, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !10, i64 32, !6, i64 40, !6, i64 48}
!32 = !{!"double", !7, i64 0}
!33 = distinct !{!33, !25}
!34 = !{!12, !10, i64 112}
!35 = !{!12, !10, i64 88}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}
!47 = distinct !{!47, !25}
!48 = distinct !{!48, !25}


; 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 [54 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

; Function Attrs: nounwind uwtable
define dso_local void @__MocFM_2WayEdgeRefine(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2, i32 noundef %3) local_unnamed_addr #0 {
  %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 [2 x float], align 8
  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 8, 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, 2.500000e+01
  %43 = select i1 %42, double %41, double 2.500000e+01
  %.inv = fcmp oge double %43, 1.500000e+02
  %44 = select i1 %.inv, double 1.500000e+02, double %43
  %45 = fptosi double %44 to i32
  %46 = icmp sgt i32 %14, 0
  br i1 %46, label %.lr.ph.preheader, label %.preheader506

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

.preheader506:                                    ; preds = %.lr.ph, %4
  %47 = icmp sgt i32 %12, 0
  br i1 %47, label %.lr.ph518.preheader, label %._crit_edge

.lr.ph518.preheader:                              ; preds = %.preheader506
  %48 = sext i32 %14 to i64
  %wide.trip.count601 = zext nneg i32 %12 to i64
  br label %.lr.ph518

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %49 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %indvars.iv
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %49, i32 noundef %12, i32 noundef 501) #5
  %50 = getelementptr inbounds i8, ptr %49, i64 64
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %50, i32 noundef %12, i32 noundef 501) #5
  %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 %.preheader506, label %.lr.ph, !llvm.loop !22

.lr.ph518:                                        ; preds = %.lr.ph518.preheader, %.lr.ph518
  %indvars.iv598 = phi i64 [ 0, %.lr.ph518.preheader ], [ %indvars.iv.next599, %.lr.ph518 ]
  %51 = mul nsw i64 %indvars.iv598, %48
  %52 = getelementptr inbounds float, ptr %18, i64 %51
  %53 = call i32 @__samax(i32 noundef %14, ptr noundef %52) #5
  %54 = getelementptr inbounds i32, ptr %39, i64 %indvars.iv598
  store i32 %53, ptr %54, align 4, !tbaa !24
  %indvars.iv.next599 = add nuw nsw i64 %indvars.iv598, 1
  %exitcond602.not = icmp eq i64 %indvars.iv.next599, %wide.trip.count601
  br i1 %exitcond602.not, label %._crit_edge, label %.lr.ph518, !llvm.loop !25

._crit_edge:                                      ; preds = %.lr.ph518, %.preheader506
  %55 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef %2)
  %56 = getelementptr inbounds i8, ptr %2, i64 4
  %57 = load <2 x float>, ptr %2, align 4, !tbaa !26
  %58 = insertelement <2 x float> poison, float %55, i64 0
  %59 = shufflevector <2 x float> %58, <2 x float> poison, <2 x i32> zeroinitializer
  %60 = fmul <2 x float> %59, %57
  store <2 x float> %60, ptr %10, align 8, !tbaa !26
  %61 = getelementptr inbounds i8, ptr %0, i64 4
  %62 = load i32, ptr %61, align 4, !tbaa !28
  %63 = and i32 %62, 8
  %.not = icmp eq i32 %63, 0
  br i1 %.not, label %84, label %64

64:                                               ; preds = %._crit_edge
  %65 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  br i1 %46, label %.lr.ph521.preheader, label %._crit_edge522

.lr.ph521.preheader:                              ; preds = %64
  %66 = zext nneg i32 %14 to i64
  %invariant.gep = getelementptr inbounds float, ptr %30, i64 %66
  br label %.lr.ph521

.lr.ph521:                                        ; preds = %.lr.ph521.preheader, %.lr.ph521
  %indvars.iv603 = phi i64 [ 0, %.lr.ph521.preheader ], [ %indvars.iv.next604, %.lr.ph521 ]
  %67 = getelementptr inbounds float, ptr %30, i64 %indvars.iv603
  %68 = load float, ptr %67, align 4, !tbaa !26
  %69 = fpext float %68 to double
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv603
  %70 = load float, ptr %gep, align 4, !tbaa !26
  %71 = fpext float %70 to double
  %72 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %69, double noundef %71)
  %indvars.iv.next604 = add nuw nsw i64 %indvars.iv603, 1
  %exitcond607.not = icmp eq i64 %indvars.iv.next604, %66
  br i1 %exitcond607.not, label %._crit_edge522, label %.lr.ph521, !llvm.loop !32

._crit_edge522:                                   ; preds = %.lr.ph521, %64
  %73 = load float, ptr %2, align 4, !tbaa !26
  %74 = fpext float %73 to double
  %75 = load float, ptr %56, align 4, !tbaa !26
  %76 = fpext float %75 to double
  %77 = load i32, ptr %11, align 8, !tbaa !5
  %78 = getelementptr inbounds i8, ptr %1, i64 112
  %79 = load i32, ptr %78, align 8, !tbaa !33
  %80 = getelementptr inbounds i8, ptr %1, i64 88
  %81 = load i32, ptr %80, align 8, !tbaa !34
  %82 = fpext float %55 to double
  %83 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, double noundef %74, double noundef %76, i32 noundef %77, i32 noundef %79, i32 noundef %81, double noundef %82)
  br label %84

84:                                               ; preds = %._crit_edge522, %._crit_edge
  %85 = call ptr @__idxset(i32 noundef %12, i32 noundef -1, ptr noundef %36) #5
  %86 = icmp sgt i32 %3, 0
  br i1 %86, label %.preheader505.lr.ph, label %._crit_edge585

.preheader505.lr.ph:                              ; preds = %84
  %87 = getelementptr inbounds i8, ptr %1, i64 88
  %88 = getelementptr inbounds i8, ptr %1, i64 112
  %89 = zext i32 %14 to i64
  %wide.trip.count639 = zext nneg i32 %12 to i64
  %invariant.gep678 = getelementptr inbounds float, ptr %30, i64 %89
  %invariant.gep680 = getelementptr inbounds float, ptr %30, i64 %89
  %90 = sub i64 %8, %31
  %min.iters.check694 = icmp ult i32 %14, 8
  %diff.check691 = icmp ult i64 %90, 32
  %or.cond707 = select i1 %min.iters.check694, i1 true, i1 %diff.check691
  %n.vec697 = and i64 %89, 2147483640
  %cmp.n706 = icmp eq i64 %n.vec697, %89
  %xtraiter = and i64 %89, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %91 = add nsw i64 %89, -1
  %min.iters.check = icmp ult i32 %14, 8
  %diff.check = icmp ult i64 %90, 32
  %or.cond708 = select i1 %min.iters.check, i1 true, i1 %diff.check
  %n.vec = and i64 %89, 2147483640
  %cmp.n = icmp eq i64 %n.vec, %89
  %xtraiter715 = and i64 %89, 1
  %lcmp.mod716.not = icmp eq i64 %xtraiter715, 0
  %92 = add nsw i64 %89, -1
  br label %.preheader505

.preheader505:                                    ; preds = %492, %.preheader505.lr.ph
  %.0480584 = phi i32 [ 0, %.preheader505.lr.ph ], [ %495, %492 ]
  br i1 %46, label %.lr.ph524, label %._crit_edge525.thread

._crit_edge525.thread:                            ; preds = %.preheader505
  %93 = load i32, ptr %87, align 8, !tbaa !34
  br label %._crit_edge529

.lr.ph524:                                        ; preds = %.preheader505, %.lr.ph524
  %indvars.iv608 = phi i64 [ %indvars.iv.next609, %.lr.ph524 ], [ 0, %.preheader505 ]
  %94 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %indvars.iv608
  call void @__PQueueReset(ptr noundef nonnull %94) #5
  %95 = getelementptr inbounds i8, ptr %94, i64 64
  call void @__PQueueReset(ptr noundef nonnull %95) #5
  %indvars.iv.next609 = add nuw nsw i64 %indvars.iv608, 1
  %exitcond612.not = icmp eq i64 %indvars.iv.next609, %89
  br i1 %exitcond612.not, label %._crit_edge525, label %.lr.ph524, !llvm.loop !35

._crit_edge525:                                   ; preds = %.lr.ph524
  %96 = load i32, ptr %87, align 8, !tbaa !34
  br i1 %46, label %.lr.ph528, label %._crit_edge529

.lr.ph528:                                        ; preds = %._crit_edge525
  %97 = load float, ptr %2, align 4, !tbaa !26
  br i1 %or.cond707, label %scalar.ph693.preheader, label %vector.ph695

vector.ph695:                                     ; preds = %.lr.ph528
  %broadcast.splatinsert703 = insertelement <4 x float> poison, float %97, i64 0
  %broadcast.splat704 = shufflevector <4 x float> %broadcast.splatinsert703, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body699

vector.body699:                                   ; preds = %vector.body699, %vector.ph695
  %index700 = phi i64 [ 0, %vector.ph695 ], [ %index.next705, %vector.body699 ]
  %98 = getelementptr inbounds float, ptr %30, i64 %index700
  %99 = getelementptr inbounds i8, ptr %98, i64 16
  %wide.load701 = load <4 x float>, ptr %98, align 4, !tbaa !26
  %wide.load702 = load <4 x float>, ptr %99, align 4, !tbaa !26
  %100 = fsub <4 x float> %broadcast.splat704, %wide.load701
  %101 = fsub <4 x float> %broadcast.splat704, %wide.load702
  %102 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %100)
  %103 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %101)
  %104 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index700
  %105 = getelementptr inbounds i8, ptr %104, i64 16
  store <4 x float> %102, ptr %104, align 16, !tbaa !26
  store <4 x float> %103, ptr %105, align 16, !tbaa !26
  %index.next705 = add nuw i64 %index700, 8
  %106 = icmp eq i64 %index.next705, %n.vec697
  br i1 %106, label %middle.block692, label %vector.body699, !llvm.loop !36

middle.block692:                                  ; preds = %vector.body699
  br i1 %cmp.n706, label %._crit_edge529, label %scalar.ph693.preheader

scalar.ph693.preheader:                           ; preds = %middle.block692, %.lr.ph528
  %indvars.iv613.ph = phi i64 [ 0, %.lr.ph528 ], [ %n.vec697, %middle.block692 ]
  br i1 %lcmp.mod.not, label %scalar.ph693.prol.loopexit, label %scalar.ph693.prol

scalar.ph693.prol:                                ; preds = %scalar.ph693.preheader
  %107 = getelementptr inbounds float, ptr %30, i64 %indvars.iv613.ph
  %108 = load float, ptr %107, align 4, !tbaa !26
  %109 = fsub float %97, %108
  %110 = call float @llvm.fabs.f32(float %109)
  %111 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv613.ph
  store float %110, ptr %111, align 16, !tbaa !26
  %indvars.iv.next614.prol = or disjoint i64 %indvars.iv613.ph, 1
  br label %scalar.ph693.prol.loopexit

scalar.ph693.prol.loopexit:                       ; preds = %scalar.ph693.prol, %scalar.ph693.preheader
  %indvars.iv613.unr = phi i64 [ %indvars.iv613.ph, %scalar.ph693.preheader ], [ %indvars.iv.next614.prol, %scalar.ph693.prol ]
  %112 = icmp eq i64 %indvars.iv613.ph, %91
  br i1 %112, label %._crit_edge529, label %scalar.ph693

scalar.ph693:                                     ; preds = %scalar.ph693.prol.loopexit, %scalar.ph693
  %indvars.iv613 = phi i64 [ %indvars.iv.next614.1, %scalar.ph693 ], [ %indvars.iv613.unr, %scalar.ph693.prol.loopexit ]
  %113 = getelementptr inbounds float, ptr %30, i64 %indvars.iv613
  %114 = load float, ptr %113, align 4, !tbaa !26
  %115 = fsub float %97, %114
  %116 = call float @llvm.fabs.f32(float %115)
  %117 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv613
  store float %116, ptr %117, align 4, !tbaa !26
  %indvars.iv.next614 = add nuw nsw i64 %indvars.iv613, 1
  %118 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next614
  %119 = load float, ptr %118, align 4, !tbaa !26
  %120 = fsub float %97, %119
  %121 = call float @llvm.fabs.f32(float %120)
  %122 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv.next614
  store float %121, ptr %122, align 4, !tbaa !26
  %indvars.iv.next614.1 = add nuw nsw i64 %indvars.iv613, 2
  %exitcond617.not.1 = icmp eq i64 %indvars.iv.next614.1, %89
  br i1 %exitcond617.not.1, label %._crit_edge529, label %scalar.ph693, !llvm.loop !39

._crit_edge529:                                   ; preds = %scalar.ph693.prol.loopexit, %scalar.ph693, %middle.block692, %._crit_edge525.thread, %._crit_edge525
  %123 = phi i32 [ %93, %._crit_edge525.thread ], [ %96, %._crit_edge525 ], [ %96, %middle.block692 ], [ %96, %scalar.ph693 ], [ %96, %scalar.ph693.prol.loopexit ]
  %124 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef nonnull %2)
  %125 = load i32, ptr %88, align 8, !tbaa !33
  call void @__RandomPermute(i32 noundef %125, ptr noundef %38, i32 noundef 1) #5
  %126 = icmp sgt i32 %125, 0
  br i1 %126, label %.lr.ph532.preheader, label %.preheader503

.lr.ph532.preheader:                              ; preds = %._crit_edge529
  %wide.trip.count621 = zext nneg i32 %125 to i64
  br label %.lr.ph532

.preheader503:                                    ; preds = %.lr.ph532, %._crit_edge529
  br i1 %47, label %.lr.ph552, label %.preheader

.lr.ph532:                                        ; preds = %.lr.ph532.preheader, %.lr.ph532
  %indvars.iv618 = phi i64 [ 0, %.lr.ph532.preheader ], [ %indvars.iv.next619, %.lr.ph532 ]
  %127 = getelementptr inbounds i32, ptr %38, i64 %indvars.iv618
  %128 = load i32, ptr %127, align 4, !tbaa !24
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i32, ptr %35, i64 %129
  %131 = load i32, ptr %130, align 4, !tbaa !24
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %39, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !24
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i32, ptr %24, i64 %132
  %137 = load i32, ptr %136, align 4, !tbaa !24
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %135, i64 %138
  %140 = getelementptr inbounds i32, ptr %28, i64 %132
  %141 = load i32, ptr %140, align 4, !tbaa !24
  %142 = getelementptr inbounds i32, ptr %26, i64 %132
  %143 = load i32, ptr %142, align 4, !tbaa !24
  %144 = sub nsw i32 %141, %143
  %145 = call i32 @__PQueueInsert(ptr noundef nonnull %139, i32 noundef %131, i32 noundef %144) #5
  %indvars.iv.next619 = add nuw nsw i64 %indvars.iv618, 1
  %exitcond622.not = icmp eq i64 %indvars.iv.next619, %wide.trip.count621
  br i1 %exitcond622.not, label %.preheader503, label %.lr.ph532, !llvm.loop !40

.lr.ph552:                                        ; preds = %.preheader503, %._crit_edge544
  %indvars.iv636 = phi i64 [ %indvars.iv.next637, %._crit_edge544 ], [ 0, %.preheader503 ]
  %.0551 = phi i32 [ %.1, %._crit_edge544 ], [ -1, %.preheader503 ]
  %.0458550 = phi i32 [ %174, %._crit_edge544 ], [ %123, %.preheader503 ]
  %.0461549 = phi i32 [ %.1462, %._crit_edge544 ], [ %123, %.preheader503 ]
  %.0466548 = phi float [ %.1467, %._crit_edge544 ], [ %124, %.preheader503 ]
  %.0471546 = phi i32 [ %.2473.lcssa, %._crit_edge544 ], [ %125, %.preheader503 ]
  call void @__SelectQueue(i32 noundef %14, ptr noundef %30, ptr noundef nonnull %10, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %9)
  %146 = load i32, ptr %5, align 4, !tbaa !24
  %147 = add nsw i32 %146, 1
  %148 = srem i32 %147, 2
  %149 = icmp eq i32 %146, -1
  %150 = trunc nuw nsw i64 %indvars.iv636 to i32
  br i1 %149, label %.loopexit504, label %151

151:                                              ; preds = %.lr.ph552
  %152 = load i32, ptr %6, align 4, !tbaa !24
  %153 = sext i32 %152 to i64
  %154 = sext i32 %146 to i64
  %155 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %153, i64 %154
  %156 = call i32 @__PQueueGetMax(ptr noundef nonnull %155) #5
  %157 = icmp eq i32 %156, -1
  br i1 %157, label %.loopexit504, label %158

158:                                              ; preds = %151
  %159 = mul nsw i32 %156, %14
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds float, ptr %18, i64 %160
  %162 = mul nsw i32 %148, %14
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds float, ptr %30, i64 %163
  call void @__saxpy(i32 noundef %14, float noundef 1.000000e+00, ptr noundef %161, i32 noundef 1, ptr noundef %164, i32 noundef 1) #5
  %165 = load i32, ptr %5, align 4, !tbaa !24
  %166 = mul nsw i32 %165, %14
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds float, ptr %30, i64 %167
  call void @__saxpy(i32 noundef %14, float noundef -1.000000e+00, ptr noundef %161, i32 noundef 1, ptr noundef %168, i32 noundef 1) #5
  %169 = sext i32 %156 to i64
  %170 = getelementptr inbounds i32, ptr %28, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !24
  %172 = getelementptr inbounds i32, ptr %26, i64 %169
  %173 = load i32, ptr %172, align 4, !tbaa !24
  %.neg = sub i32 %173, %171
  %174 = add i32 %.neg, %.0458550
  %175 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef nonnull %2)
  %176 = icmp slt i32 %174, %.0461549
  br i1 %176, label %177, label %181

177:                                              ; preds = %158
  %178 = fsub float %175, %55
  %179 = fpext float %178 to double
  %180 = fcmp ugt double %179, 1.000000e-05
  br i1 %180, label %181, label %189

181:                                              ; preds = %177, %158
  %182 = icmp eq i32 %174, %.0461549
  br i1 %182, label %183, label %216

183:                                              ; preds = %181
  %184 = fcmp olt float %175, %.0466548
  br i1 %184, label %189, label %185

185:                                              ; preds = %183
  %186 = fcmp oeq float %175, %.0466548
  br i1 %186, label %187, label %216

187:                                              ; preds = %185
  %188 = call i32 @__BetterBalance(i32 noundef %14, ptr noundef %30, ptr noundef nonnull %2, ptr noundef nonnull %7)
  %.not492 = icmp eq i32 %188, 0
  br i1 %.not492, label %216, label %189

189:                                              ; preds = %187, %183, %177
  br i1 %46, label %.lr.ph535, label %.loopexit502

.lr.ph535:                                        ; preds = %189
  %190 = load float, ptr %2, align 4, !tbaa !26
  br i1 %or.cond708, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph535
  %broadcast.splatinsert = insertelement <4 x float> poison, float %190, 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 ]
  %191 = getelementptr inbounds float, ptr %30, i64 %index
  %192 = getelementptr inbounds i8, ptr %191, i64 16
  %wide.load = load <4 x float>, ptr %191, align 4, !tbaa !26
  %wide.load689 = load <4 x float>, ptr %192, align 4, !tbaa !26
  %193 = fsub <4 x float> %broadcast.splat, %wide.load
  %194 = fsub <4 x float> %broadcast.splat, %wide.load689
  %195 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %193)
  %196 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %194)
  %197 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %index
  %198 = getelementptr inbounds i8, ptr %197, i64 16
  store <4 x float> %195, ptr %197, align 16, !tbaa !26
  store <4 x float> %196, ptr %198, align 16, !tbaa !26
  %index.next = add nuw i64 %index, 8
  %199 = icmp eq i64 %index.next, %n.vec
  br i1 %199, label %middle.block, label %vector.body, !llvm.loop !41

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph535
  %indvars.iv623.ph = phi i64 [ 0, %.lr.ph535 ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod716.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %200 = getelementptr inbounds float, ptr %30, i64 %indvars.iv623.ph
  %201 = load float, ptr %200, align 4, !tbaa !26
  %202 = fsub float %190, %201
  %203 = call float @llvm.fabs.f32(float %202)
  %204 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv623.ph
  store float %203, ptr %204, align 16, !tbaa !26
  %indvars.iv.next624.prol = or disjoint i64 %indvars.iv623.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv623.unr = phi i64 [ %indvars.iv623.ph, %scalar.ph.preheader ], [ %indvars.iv.next624.prol, %scalar.ph.prol ]
  %205 = icmp eq i64 %indvars.iv623.ph, %92
  br i1 %205, label %.loopexit502, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv623 = phi i64 [ %indvars.iv.next624.1, %scalar.ph ], [ %indvars.iv623.unr, %scalar.ph.prol.loopexit ]
  %206 = getelementptr inbounds float, ptr %30, i64 %indvars.iv623
  %207 = load float, ptr %206, align 4, !tbaa !26
  %208 = fsub float %190, %207
  %209 = call float @llvm.fabs.f32(float %208)
  %210 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv623
  store float %209, ptr %210, align 4, !tbaa !26
  %indvars.iv.next624 = add nuw nsw i64 %indvars.iv623, 1
  %211 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next624
  %212 = load float, ptr %211, align 4, !tbaa !26
  %213 = fsub float %190, %212
  %214 = call float @llvm.fabs.f32(float %213)
  %215 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv.next624
  store float %214, ptr %215, align 4, !tbaa !26
  %indvars.iv.next624.1 = add nuw nsw i64 %indvars.iv623, 2
  %exitcond627.not.1 = icmp eq i64 %indvars.iv.next624.1, %89
  br i1 %exitcond627.not.1, label %.loopexit502, label %scalar.ph, !llvm.loop !42

216:                                              ; preds = %187, %185, %181
  %217 = sub nsw i32 %150, %.0551
  %218 = icmp sgt i32 %217, %45
  br i1 %218, label %219, label %.loopexit502

219:                                              ; preds = %216
  %220 = load i32, ptr %5, align 4, !tbaa !24
  %221 = mul nsw i32 %220, %14
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds float, ptr %30, i64 %222
  call void @__saxpy(i32 noundef %14, float noundef 1.000000e+00, ptr noundef %161, i32 noundef 1, ptr noundef %223, i32 noundef 1) #5
  call void @__saxpy(i32 noundef %14, float noundef -1.000000e+00, ptr noundef %161, i32 noundef 1, ptr noundef %164, i32 noundef 1) #5
  br label %.loopexit504

.loopexit502:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %189, %216
  %.1467 = phi float [ %.0466548, %216 ], [ %175, %189 ], [ %175, %middle.block ], [ %175, %scalar.ph ], [ %175, %scalar.ph.prol.loopexit ]
  %.1462 = phi i32 [ %.0461549, %216 ], [ %174, %189 ], [ %174, %middle.block ], [ %174, %scalar.ph ], [ %174, %scalar.ph.prol.loopexit ]
  %.1 = phi i32 [ %.0551, %216 ], [ %150, %189 ], [ %150, %middle.block ], [ %150, %scalar.ph ], [ %150, %scalar.ph.prol.loopexit ]
  %224 = getelementptr inbounds i32, ptr %24, i64 %169
  store i32 %148, ptr %224, align 4, !tbaa !24
  %225 = getelementptr inbounds i32, ptr %36, i64 %169
  store i32 %150, ptr %225, align 4, !tbaa !24
  %226 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv636
  store i32 %156, ptr %226, align 4, !tbaa !24
  %227 = load i32, ptr %61, align 4, !tbaa !28
  %228 = and i32 %227, 32
  %.not493 = icmp eq i32 %228, 0
  br i1 %.not493, label %245, label %229

229:                                              ; preds = %.loopexit502
  %230 = load i32, ptr %5, align 4, !tbaa !24
  %231 = load i32, ptr %6, align 4, !tbaa !24
  %232 = load i32, ptr %170, align 4, !tbaa !24
  %233 = load i32, ptr %172, align 4, !tbaa !24
  %234 = sub nsw i32 %232, %233
  %235 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %156, i32 noundef %230, i32 noundef %231, i32 noundef %234, i32 noundef %174)
  br i1 %46, label %.lr.ph538, label %._crit_edge539

.lr.ph538:                                        ; preds = %229, %.lr.ph538
  %indvars.iv628 = phi i64 [ %indvars.iv.next629, %.lr.ph538 ], [ 0, %229 ]
  %236 = getelementptr inbounds float, ptr %30, i64 %indvars.iv628
  %237 = load float, ptr %236, align 4, !tbaa !26
  %238 = fpext float %237 to double
  %gep679 = getelementptr inbounds float, ptr %invariant.gep678, i64 %indvars.iv628
  %239 = load float, ptr %gep679, align 4, !tbaa !26
  %240 = fpext float %239 to double
  %241 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %238, double noundef %240)
  %indvars.iv.next629 = add nuw nsw i64 %indvars.iv628, 1
  %exitcond632.not = icmp eq i64 %indvars.iv.next629, %89
  br i1 %exitcond632.not, label %._crit_edge539, label %.lr.ph538, !llvm.loop !43

._crit_edge539:                                   ; preds = %.lr.ph538, %229
  %242 = fpext float %.1467 to double
  %243 = fpext float %175 to double
  %244 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %242, double noundef %243)
  br label %245

245:                                              ; preds = %.loopexit502, %._crit_edge539
  %246 = load i32, ptr %172, align 4, !tbaa !24
  %247 = load i32, ptr %170, align 4, !tbaa !24
  store i32 %247, ptr %172, align 4, !tbaa !24
  store i32 %246, ptr %170, align 4, !tbaa !24
  %248 = icmp eq i32 %246, 0
  br i1 %248, label %249, label %267

249:                                              ; preds = %245
  %250 = getelementptr inbounds i32, ptr %16, i64 %169
  %251 = load i32, ptr %250, align 4, !tbaa !24
  %252 = getelementptr i8, ptr %250, i64 4
  %253 = load i32, ptr %252, align 4, !tbaa !24
  %254 = icmp slt i32 %251, %253
  br i1 %254, label %255, label %267

255:                                              ; preds = %249
  %256 = add nsw i32 %.0471546, -1
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %35, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !24
  %260 = getelementptr inbounds i32, ptr %33, i64 %169
  %261 = load i32, ptr %260, align 4, !tbaa !24
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %35, i64 %262
  store i32 %259, ptr %263, align 4, !tbaa !24
  %264 = load i32, ptr %260, align 4, !tbaa !24
  %265 = sext i32 %259 to i64
  %266 = getelementptr inbounds i32, ptr %33, i64 %265
  store i32 %264, ptr %266, align 4, !tbaa !24
  store i32 -1, ptr %260, align 4, !tbaa !24
  br label %267

267:                                              ; preds = %255, %249, %245
  %.1472 = phi i32 [ %256, %255 ], [ %.0471546, %249 ], [ %.0471546, %245 ]
  %268 = getelementptr inbounds i32, ptr %16, i64 %169
  %269 = load i32, ptr %268, align 4, !tbaa !24
  %270 = getelementptr i8, ptr %268, i64 4
  %271 = load i32, ptr %270, align 4, !tbaa !24
  %272 = icmp slt i32 %269, %271
  br i1 %272, label %.lr.ph543.preheader, label %._crit_edge544

.lr.ph543.preheader:                              ; preds = %267
  %273 = sext i32 %269 to i64
  br label %.lr.ph543

.lr.ph543:                                        ; preds = %.lr.ph543.preheader, %351
  %indvars.iv633 = phi i64 [ %273, %.lr.ph543.preheader ], [ %indvars.iv.next634, %351 ]
  %.2473540 = phi i32 [ %.1472, %.lr.ph543.preheader ], [ %.3474, %351 ]
  %274 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv633
  %275 = load i32, ptr %274, align 4, !tbaa !24
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i32, ptr %28, i64 %276
  %278 = load i32, ptr %277, align 4, !tbaa !24
  %279 = getelementptr inbounds i32, ptr %26, i64 %276
  %280 = load i32, ptr %279, align 4, !tbaa !24
  %281 = sub nsw i32 %278, %280
  %282 = getelementptr inbounds i32, ptr %24, i64 %276
  %283 = load i32, ptr %282, align 4, !tbaa !24
  %284 = icmp eq i32 %148, %283
  %285 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv633
  %286 = load i32, ptr %285, align 4, !tbaa !24
  %287 = sub nsw i32 0, %286
  %288 = select i1 %284, i32 %286, i32 %287
  %289 = add nsw i32 %288, %280
  store i32 %289, ptr %279, align 4, !tbaa !24
  %290 = load i32, ptr %277, align 4, !tbaa !24
  %291 = sub nsw i32 %290, %288
  store i32 %291, ptr %277, align 4, !tbaa !24
  %292 = getelementptr inbounds i32, ptr %33, i64 %276
  %293 = load i32, ptr %292, align 4, !tbaa !24
  %.not494 = icmp eq i32 %293, -1
  br i1 %.not494, label %331, label %294

294:                                              ; preds = %.lr.ph543
  %295 = icmp eq i32 %290, %288
  br i1 %295, label %296, label %317

296:                                              ; preds = %294
  %297 = add nsw i32 %.2473540, -1
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %35, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !24
  %301 = sext i32 %293 to i64
  %302 = getelementptr inbounds i32, ptr %35, i64 %301
  store i32 %300, ptr %302, align 4, !tbaa !24
  %303 = load i32, ptr %292, align 4, !tbaa !24
  %304 = sext i32 %300 to i64
  %305 = getelementptr inbounds i32, ptr %33, i64 %304
  store i32 %303, ptr %305, align 4, !tbaa !24
  store i32 -1, ptr %292, align 4, !tbaa !24
  %306 = getelementptr inbounds i32, ptr %36, i64 %276
  %307 = load i32, ptr %306, align 4, !tbaa !24
  %308 = icmp eq i32 %307, -1
  br i1 %308, label %309, label %351

309:                                              ; preds = %296
  %310 = getelementptr inbounds i32, ptr %39, i64 %276
  %311 = load i32, ptr %310, align 4, !tbaa !24
  %312 = sext i32 %311 to i64
  %313 = load i32, ptr %282, align 4, !tbaa !24
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %312, i64 %314
  %316 = call i32 @__PQueueDelete(ptr noundef nonnull %315, i32 noundef %275, i32 noundef %281) #5
  br label %351

317:                                              ; preds = %294
  %318 = getelementptr inbounds i32, ptr %36, i64 %276
  %319 = load i32, ptr %318, align 4, !tbaa !24
  %320 = icmp eq i32 %319, -1
  br i1 %320, label %321, label %351

321:                                              ; preds = %317
  %322 = getelementptr inbounds i32, ptr %39, i64 %276
  %323 = load i32, ptr %322, align 4, !tbaa !24
  %324 = sext i32 %323 to i64
  %325 = load i32, ptr %282, align 4, !tbaa !24
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %324, i64 %326
  %328 = load i32, ptr %279, align 4, !tbaa !24
  %329 = sub nsw i32 %291, %328
  %330 = call i32 @__PQueueUpdate(ptr noundef nonnull %327, i32 noundef %275, i32 noundef %281, i32 noundef %329) #5
  br label %351

331:                                              ; preds = %.lr.ph543
  %332 = icmp sgt i32 %291, 0
  br i1 %332, label %333, label %351

333:                                              ; preds = %331
  %334 = sext i32 %.2473540 to i64
  %335 = getelementptr inbounds i32, ptr %35, i64 %334
  store i32 %275, ptr %335, align 4, !tbaa !24
  %336 = add nsw i32 %.2473540, 1
  store i32 %.2473540, ptr %292, align 4, !tbaa !24
  %337 = getelementptr inbounds i32, ptr %36, i64 %276
  %338 = load i32, ptr %337, align 4, !tbaa !24
  %339 = icmp eq i32 %338, -1
  br i1 %339, label %340, label %351

340:                                              ; preds = %333
  %341 = getelementptr inbounds i32, ptr %39, i64 %276
  %342 = load i32, ptr %341, align 4, !tbaa !24
  %343 = sext i32 %342 to i64
  %344 = load i32, ptr %282, align 4, !tbaa !24
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %343, i64 %345
  %347 = load i32, ptr %277, align 4, !tbaa !24
  %348 = load i32, ptr %279, align 4, !tbaa !24
  %349 = sub nsw i32 %347, %348
  %350 = call i32 @__PQueueInsert(ptr noundef nonnull %346, i32 noundef %275, i32 noundef %349) #5
  br label %351

351:                                              ; preds = %317, %321, %296, %309, %333, %340, %331
  %.3474 = phi i32 [ %297, %309 ], [ %297, %296 ], [ %.2473540, %321 ], [ %.2473540, %317 ], [ %336, %340 ], [ %336, %333 ], [ %.2473540, %331 ]
  %indvars.iv.next634 = add nsw i64 %indvars.iv633, 1
  %352 = load i32, ptr %270, align 4, !tbaa !24
  %353 = sext i32 %352 to i64
  %354 = icmp slt i64 %indvars.iv.next634, %353
  br i1 %354, label %.lr.ph543, label %._crit_edge544, !llvm.loop !44

._crit_edge544:                                   ; preds = %351, %267
  %.2473.lcssa = phi i32 [ %.1472, %267 ], [ %.3474, %351 ]
  %indvars.iv.next637 = add nuw nsw i64 %indvars.iv636, 1
  %exitcond640.not = icmp eq i64 %indvars.iv.next637, %wide.trip.count639
  br i1 %exitcond640.not, label %.loopexit504, label %.lr.ph552, !llvm.loop !45

.loopexit504:                                     ; preds = %._crit_edge544, %151, %.lr.ph552, %219
  %.0478514 = phi i32 [ %150, %219 ], [ %12, %._crit_edge544 ], [ %150, %151 ], [ %150, %.lr.ph552 ]
  %.0471512 = phi i32 [ %.0471546, %219 ], [ %.2473.lcssa, %._crit_edge544 ], [ %.0471546, %151 ], [ %.0471546, %.lr.ph552 ]
  %.0461510 = phi i32 [ %.0461549, %219 ], [ %.1462, %._crit_edge544 ], [ %.0461549, %151 ], [ %.0461549, %.lr.ph552 ]
  %.0508 = phi i32 [ %.0551, %219 ], [ %.1, %._crit_edge544 ], [ %.0551, %151 ], [ %.0551, %.lr.ph552 ]
  %.not591 = icmp eq i32 %.0478514, 0
  br i1 %.not591, label %.preheader, label %.lr.ph569.preheader

.lr.ph569.preheader:                              ; preds = %.loopexit504
  %wide.trip.count644 = zext i32 %.0478514 to i64
  %xtraiter717 = and i64 %wide.trip.count644, 3
  %355 = icmp ult i32 %.0478514, 4
  br i1 %355, label %.preheader.loopexit.unr-lcssa, label %.lr.ph569.preheader.new

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

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph569, %.lr.ph569.preheader
  %indvars.iv641.unr = phi i64 [ 0, %.lr.ph569.preheader ], [ %indvars.iv.next642.3, %.lr.ph569 ]
  %lcmp.mod718.not = icmp eq i64 %xtraiter717, 0
  br i1 %lcmp.mod718.not, label %.preheader, label %.lr.ph569.epil

.lr.ph569.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph569.epil
  %indvars.iv641.epil = phi i64 [ %indvars.iv.next642.epil, %.lr.ph569.epil ], [ %indvars.iv641.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph569.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %356 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv641.epil
  %357 = load i32, ptr %356, align 4, !tbaa !24
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i32, ptr %36, i64 %358
  store i32 -1, ptr %359, align 4, !tbaa !24
  %indvars.iv.next642.epil = add nuw nsw i64 %indvars.iv641.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter717
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph569.epil, !llvm.loop !46

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph569.epil, %.preheader503, %.loopexit504
  %.0508671 = phi i32 [ %.0508, %.loopexit504 ], [ -1, %.preheader503 ], [ %.0508, %.lr.ph569.epil ], [ %.0508, %.preheader.loopexit.unr-lcssa ]
  %.0461510670 = phi i32 [ %.0461510, %.loopexit504 ], [ %123, %.preheader503 ], [ %.0461510, %.lr.ph569.epil ], [ %.0461510, %.preheader.loopexit.unr-lcssa ]
  %.0471512669 = phi i32 [ %.0471512, %.loopexit504 ], [ %125, %.preheader503 ], [ %.0471512, %.lr.ph569.epil ], [ %.0471512, %.preheader.loopexit.unr-lcssa ]
  %.0478514668 = phi i32 [ 0, %.loopexit504 ], [ 0, %.preheader503 ], [ %.0478514, %.lr.ph569.epil ], [ %.0478514, %.preheader.loopexit.unr-lcssa ]
  %.1479574 = add nsw i32 %.0478514668, -1
  %360 = icmp sgt i32 %.1479574, %.0508671
  br i1 %360, label %.lr.ph577.preheader, label %._crit_edge578

.lr.ph577.preheader:                              ; preds = %.preheader
  %361 = sext i32 %.1479574 to i64
  %362 = sext i32 %.0508671 to i64
  br label %.lr.ph577

.lr.ph569:                                        ; preds = %.lr.ph569, %.lr.ph569.preheader.new
  %indvars.iv641 = phi i64 [ 0, %.lr.ph569.preheader.new ], [ %indvars.iv.next642.3, %.lr.ph569 ]
  %niter = phi i64 [ 0, %.lr.ph569.preheader.new ], [ %niter.next.3, %.lr.ph569 ]
  %363 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv641
  %364 = load i32, ptr %363, align 4, !tbaa !24
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i32, ptr %36, i64 %365
  store i32 -1, ptr %366, align 4, !tbaa !24
  %indvars.iv.next642 = or disjoint i64 %indvars.iv641, 1
  %367 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next642
  %368 = load i32, ptr %367, align 4, !tbaa !24
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds i32, ptr %36, i64 %369
  store i32 -1, ptr %370, align 4, !tbaa !24
  %indvars.iv.next642.1 = or disjoint i64 %indvars.iv641, 2
  %371 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next642.1
  %372 = load i32, ptr %371, align 4, !tbaa !24
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i32, ptr %36, i64 %373
  store i32 -1, ptr %374, align 4, !tbaa !24
  %indvars.iv.next642.2 = or disjoint i64 %indvars.iv641, 3
  %375 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next642.2
  %376 = load i32, ptr %375, align 4, !tbaa !24
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds i32, ptr %36, i64 %377
  store i32 -1, ptr %378, align 4, !tbaa !24
  %indvars.iv.next642.3 = add nuw nsw i64 %indvars.iv641, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph569, !llvm.loop !48

.loopexit:                                        ; preds = %475, %.thread
  %.6477.lcssa = phi i32 [ %.5476, %.thread ], [ %.8, %475 ]
  %indvars.iv.next650 = add nsw i64 %indvars.iv649, -1
  %379 = icmp sgt i64 %indvars.iv.next650, %362
  br i1 %379, label %.lr.ph577, label %._crit_edge578, !llvm.loop !49

.lr.ph577:                                        ; preds = %.lr.ph577.preheader, %.loopexit
  %indvars.iv649 = phi i64 [ %361, %.lr.ph577.preheader ], [ %indvars.iv.next650, %.loopexit ]
  %.4475575 = phi i32 [ %.0471512669, %.lr.ph577.preheader ], [ %.6477.lcssa, %.loopexit ]
  %380 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv649
  %381 = load i32, ptr %380, align 4, !tbaa !24
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i32, ptr %24, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !24
  %385 = add nsw i32 %384, 1
  %386 = srem i32 %385, 2
  store i32 %386, ptr %383, align 4, !tbaa !24
  %387 = getelementptr inbounds i32, ptr %26, i64 %382
  %388 = load i32, ptr %387, align 4, !tbaa !24
  %389 = getelementptr inbounds i32, ptr %28, i64 %382
  %390 = load i32, ptr %389, align 4, !tbaa !24
  store i32 %390, ptr %387, align 4, !tbaa !24
  store i32 %388, ptr %389, align 4, !tbaa !24
  %391 = icmp eq i32 %388, 0
  br i1 %391, label %392, label %411

392:                                              ; preds = %.lr.ph577
  %393 = getelementptr inbounds i32, ptr %33, i64 %382
  %394 = load i32, ptr %393, align 4, !tbaa !24
  %.not496 = icmp eq i32 %394, -1
  br i1 %.not496, label %.thread, label %395

395:                                              ; preds = %392
  %396 = getelementptr inbounds i32, ptr %16, i64 %382
  %397 = load i32, ptr %396, align 4, !tbaa !24
  %398 = getelementptr i8, ptr %396, i64 4
  %399 = load i32, ptr %398, align 4, !tbaa !24
  %400 = icmp slt i32 %397, %399
  br i1 %400, label %401, label %.thread

401:                                              ; preds = %395
  %402 = add nsw i32 %.4475575, -1
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds i32, ptr %35, i64 %403
  %405 = load i32, ptr %404, align 4, !tbaa !24
  %406 = sext i32 %394 to i64
  %407 = getelementptr inbounds i32, ptr %35, i64 %406
  store i32 %405, ptr %407, align 4, !tbaa !24
  %408 = load i32, ptr %393, align 4, !tbaa !24
  %409 = sext i32 %405 to i64
  %410 = getelementptr inbounds i32, ptr %33, i64 %409
  store i32 %408, ptr %410, align 4, !tbaa !24
  store i32 -1, ptr %393, align 4, !tbaa !24
  br label %.thread

411:                                              ; preds = %.lr.ph577
  %412 = icmp sgt i32 %388, 0
  br i1 %412, label %413, label %.thread

413:                                              ; preds = %411
  %414 = getelementptr inbounds i32, ptr %33, i64 %382
  %415 = load i32, ptr %414, align 4, !tbaa !24
  %416 = icmp eq i32 %415, -1
  br i1 %416, label %417, label %.thread

417:                                              ; preds = %413
  %418 = sext i32 %.4475575 to i64
  %419 = getelementptr inbounds i32, ptr %35, i64 %418
  store i32 %381, ptr %419, align 4, !tbaa !24
  %420 = add nsw i32 %.4475575, 1
  store i32 %.4475575, ptr %414, align 4, !tbaa !24
  br label %.thread

.thread:                                          ; preds = %392, %395, %411, %413, %417, %401
  %.5476 = phi i32 [ %402, %401 ], [ %420, %417 ], [ %.4475575, %413 ], [ %.4475575, %411 ], [ %.4475575, %395 ], [ %.4475575, %392 ]
  %421 = mul nsw i32 %381, %14
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds float, ptr %18, i64 %422
  %424 = mul nsw i32 %386, %14
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds float, ptr %30, i64 %425
  call void @__saxpy(i32 noundef %14, float noundef 1.000000e+00, ptr noundef %423, i32 noundef 1, ptr noundef %426, i32 noundef 1) #5
  %427 = and i32 %386, 1
  %428 = xor i32 %427, 1
  %429 = mul nuw nsw i32 %428, %14
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds float, ptr %30, i64 %430
  call void @__saxpy(i32 noundef %14, float noundef -1.000000e+00, ptr noundef %423, i32 noundef 1, ptr noundef %431, i32 noundef 1) #5
  %432 = getelementptr inbounds i32, ptr %16, i64 %382
  %433 = load i32, ptr %432, align 4, !tbaa !24
  %434 = getelementptr i8, ptr %432, i64 4
  %435 = load i32, ptr %434, align 4, !tbaa !24
  %436 = icmp slt i32 %433, %435
  br i1 %436, label %.lr.ph572.preheader, label %.loopexit

.lr.ph572.preheader:                              ; preds = %.thread
  %437 = sext i32 %433 to i64
  br label %.lr.ph572

.lr.ph572:                                        ; preds = %.lr.ph572.preheader, %475
  %indvars.iv646 = phi i64 [ %437, %.lr.ph572.preheader ], [ %indvars.iv.next647, %475 ]
  %.6477570 = phi i32 [ %.5476, %.lr.ph572.preheader ], [ %.8, %475 ]
  %438 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv646
  %439 = load i32, ptr %438, align 4, !tbaa !24
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds i32, ptr %24, i64 %440
  %442 = load i32, ptr %441, align 4, !tbaa !24
  %443 = icmp eq i32 %386, %442
  %444 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv646
  %445 = load i32, ptr %444, align 4, !tbaa !24
  %446 = sub nsw i32 0, %445
  %447 = select i1 %443, i32 %445, i32 %446
  %448 = getelementptr inbounds i32, ptr %26, i64 %440
  %449 = load i32, ptr %448, align 4, !tbaa !24
  %450 = add nsw i32 %449, %447
  store i32 %450, ptr %448, align 4, !tbaa !24
  %451 = getelementptr inbounds i32, ptr %28, i64 %440
  %452 = load i32, ptr %451, align 4, !tbaa !24
  %453 = sub nsw i32 %452, %447
  store i32 %453, ptr %451, align 4, !tbaa !24
  %454 = getelementptr inbounds i32, ptr %33, i64 %440
  %455 = load i32, ptr %454, align 4, !tbaa !24
  %.not497 = icmp ne i32 %455, -1
  %456 = icmp eq i32 %452, %447
  %or.cond = select i1 %.not497, i1 %456, i1 false
  br i1 %or.cond, label %.thread499, label %466

.thread499:                                       ; preds = %.lr.ph572
  %457 = add nsw i32 %.6477570, -1
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds i32, ptr %35, i64 %458
  %460 = load i32, ptr %459, align 4, !tbaa !24
  %461 = sext i32 %455 to i64
  %462 = getelementptr inbounds i32, ptr %35, i64 %461
  store i32 %460, ptr %462, align 4, !tbaa !24
  %463 = load i32, ptr %454, align 4, !tbaa !24
  %464 = sext i32 %460 to i64
  %465 = getelementptr inbounds i32, ptr %33, i64 %464
  store i32 %463, ptr %465, align 4, !tbaa !24
  store i32 -1, ptr %454, align 4, !tbaa !24
  %.pre = load i32, ptr %451, align 4, !tbaa !24
  br label %468

466:                                              ; preds = %.lr.ph572
  %467 = icmp eq i32 %455, -1
  br i1 %467, label %468, label %475

468:                                              ; preds = %.thread499, %466
  %469 = phi i32 [ %.pre, %.thread499 ], [ %453, %466 ]
  %.7501 = phi i32 [ %457, %.thread499 ], [ %.6477570, %466 ]
  %470 = icmp sgt i32 %469, 0
  br i1 %470, label %471, label %475

471:                                              ; preds = %468
  %472 = sext i32 %.7501 to i64
  %473 = getelementptr inbounds i32, ptr %35, i64 %472
  store i32 %439, ptr %473, align 4, !tbaa !24
  %474 = add nsw i32 %.7501, 1
  store i32 %.7501, ptr %454, align 4, !tbaa !24
  br label %475

475:                                              ; preds = %466, %468, %471
  %.8 = phi i32 [ %474, %471 ], [ %.7501, %468 ], [ %.6477570, %466 ]
  %indvars.iv.next647 = add nsw i64 %indvars.iv646, 1
  %476 = load i32, ptr %434, align 4, !tbaa !24
  %477 = sext i32 %476 to i64
  %478 = icmp slt i64 %indvars.iv.next647, %477
  br i1 %478, label %.lr.ph572, label %.loopexit, !llvm.loop !50

._crit_edge578:                                   ; preds = %.loopexit, %.preheader
  %.4475.lcssa = phi i32 [ %.0471512669, %.preheader ], [ %.6477.lcssa, %.loopexit ]
  %479 = load i32, ptr %61, align 4, !tbaa !28
  %480 = and i32 %479, 8
  %.not495 = icmp eq i32 %480, 0
  br i1 %.not495, label %492, label %481

481:                                              ; preds = %._crit_edge578
  %482 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %.0461510670, i32 noundef %.0508671, i32 noundef %.4475.lcssa)
  br i1 %46, label %.lr.ph582, label %._crit_edge583

.lr.ph582:                                        ; preds = %481, %.lr.ph582
  %indvars.iv652 = phi i64 [ %indvars.iv.next653, %.lr.ph582 ], [ 0, %481 ]
  %483 = getelementptr inbounds float, ptr %30, i64 %indvars.iv652
  %484 = load float, ptr %483, align 4, !tbaa !26
  %485 = fpext float %484 to double
  %gep681 = getelementptr inbounds float, ptr %invariant.gep680, i64 %indvars.iv652
  %486 = load float, ptr %gep681, align 4, !tbaa !26
  %487 = fpext float %486 to double
  %488 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %485, double noundef %487)
  %indvars.iv.next653 = add nuw nsw i64 %indvars.iv652, 1
  %exitcond656.not = icmp eq i64 %indvars.iv.next653, %89
  br i1 %exitcond656.not, label %._crit_edge583, label %.lr.ph582, !llvm.loop !51

._crit_edge583:                                   ; preds = %.lr.ph582, %481
  %489 = call float @__Compute2WayHLoadImbalance(i32 noundef %14, ptr noundef %30, ptr noundef nonnull %2)
  %490 = fpext float %489 to double
  %491 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %490)
  br label %492

492:                                              ; preds = %._crit_edge583, %._crit_edge578
  store i32 %.0461510670, ptr %87, align 8, !tbaa !34
  store i32 %.4475.lcssa, ptr %88, align 8, !tbaa !33
  %493 = icmp eq i32 %.0508671, -1
  %494 = icmp eq i32 %.0461510670, %123
  %or.cond498 = select i1 %493, i1 true, i1 %494
  %495 = add nuw nsw i32 %.0480584, 1
  %exitcond657.not = icmp eq i32 %495, %3
  %or.cond682 = select i1 %or.cond498, i1 true, i1 %exitcond657.not
  br i1 %or.cond682, label %._crit_edge585, label %.preheader505, !llvm.loop !52

._crit_edge585:                                   ; preds = %492, %84
  br i1 %46, label %.lr.ph589.preheader, label %._crit_edge590

.lr.ph589.preheader:                              ; preds = %._crit_edge585
  %wide.trip.count661 = zext nneg i32 %14 to i64
  br label %.lr.ph589

.lr.ph589:                                        ; preds = %.lr.ph589.preheader, %.lr.ph589
  %indvars.iv658 = phi i64 [ 0, %.lr.ph589.preheader ], [ %indvars.iv.next659, %.lr.ph589 ]
  %496 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %9, i64 0, i64 %indvars.iv658
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %496) #5
  %497 = getelementptr inbounds i8, ptr %496, i64 64
  call void @__PQueueFree(ptr noundef %0, ptr noundef nonnull %497) #5
  %indvars.iv.next659 = add nuw nsw i64 %indvars.iv658, 1
  %exitcond662.not = icmp eq i64 %indvars.iv.next659, %wide.trip.count661
  br i1 %exitcond662.not, label %._crit_edge590, label %.lr.ph589, !llvm.loop !53

._crit_edge590:                                   ; preds = %.lr.ph589, %._crit_edge585
  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 8, 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) #1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local float @__Compute2WayHLoadImbalance(i32 noundef, ptr 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 #2

declare void @__PQueueReset(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
declare dso_local 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 #2

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

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

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

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

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

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

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

; 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 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!10, !10, i64 0}
!25 = distinct !{!25, !23}
!26 = !{!27, !27, i64 0}
!27 = !{!"float", !8, i64 0}
!28 = !{!29, !10, i64 4}
!29 = !{!"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, !30, i64 48, !31, i64 104, !31, i64 112, !31, i64 120, !31, i64 128, !31, i64 136, !31, i64 144, !31, i64 152, !31, i64 160, !31, i64 168, !31, i64 176, !31, i64 184, !31, i64 192, !31, i64 200, !31, i64 208, !31, i64 216, !31, i64 224}
!30 = !{!"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}
!31 = !{!"double", !8, i64 0}
!32 = distinct !{!32, !23}
!33 = !{!6, !10, i64 112}
!34 = !{!6, !10, i64 88}
!35 = distinct !{!35, !23}
!36 = distinct !{!36, !23, !37, !38}
!37 = !{!"llvm.loop.isvectorized", i32 1}
!38 = !{!"llvm.loop.unroll.runtime.disable"}
!39 = distinct !{!39, !23, !37}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23, !37, !38}
!42 = distinct !{!42, !23, !37}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !23}
!45 = distinct !{!45, !23}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.unroll.disable"}
!48 = distinct !{!48, !23}
!49 = distinct !{!49, !23}
!50 = distinct !{!50, !23}
!51 = distinct !{!51, !23}
!52 = distinct !{!52, !23}
!53 = distinct !{!53, !23}


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