; LLVM IR from siconos/siconos :: externals/lbl/metis4/sfm.ll_ (FM_2WayNodeRefineEqWgt)

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

%struct.PQueueType = type { i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr }
%struct.graphdef = type { ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr }
%struct.controldef = type { i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i32, i32, ptr, ptr, i32, ptr, ptr }
%struct.nrinfodef = type { [2 x i32] }

@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1

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

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

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

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

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

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

declare void @__PQueueReset(ptr noundef) #2

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #3

declare i32 @__PQueueSeeMax(ptr noundef) #2

declare i32 @__PQueueGetMax(ptr noundef) #2

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

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

106:                                              ; preds = %3
  %107 = load ptr, ptr %21, align 8, !tbaa !5
  %108 = getelementptr inbounds i32, ptr %107, i64 0
  %109 = load i32, ptr %108, align 4, !tbaa !9
  %110 = load ptr, ptr %21, align 8, !tbaa !5
  %111 = getelementptr inbounds i32, ptr %110, i64 1
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.graphdef, ptr %113, i32 0, i32 2
  %115 = load i32, ptr %114, align 8, !tbaa !11
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.graphdef, ptr %116, i32 0, i32 16
  %118 = load i32, ptr %117, align 8, !tbaa !26
  %119 = load ptr, ptr %5, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.graphdef, ptr %119, i32 0, i32 12
  %121 = load i32, ptr %120, align 8, !tbaa !27
  %122 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %109, i32 noundef %112, i32 noundef %115, i32 noundef %118, i32 noundef %121)
  br label %123

123:                                              ; preds = %106, %3
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %124

124:                                              ; preds = %1165, %123
  %125 = load i32, ptr %37, align 4, !tbaa !9
  %126 = load i32, ptr %6, align 4, !tbaa !9
  %127 = icmp slt i32 %125, %126
  br i1 %127, label %128, label %1168

128:                                              ; preds = %124
  %129 = load i32, ptr %13, align 4, !tbaa !9
  %130 = load ptr, ptr %27, align 8, !tbaa !5
  %131 = call ptr @__idxset(i32 noundef %129, i32 noundef -1, ptr noundef %130)
  %132 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  call void @__PQueueReset(ptr noundef %132)
  %133 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  call void @__PQueueReset(ptr noundef %133)
  store i32 -1, ptr %36, align 4, !tbaa !9
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.graphdef, ptr %134, i32 0, i32 12
  %136 = load i32, ptr %135, align 8, !tbaa !27
  store i32 %136, ptr %34, align 4, !tbaa !9
  store i32 %136, ptr %35, align 4, !tbaa !9
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.graphdef, ptr %137, i32 0, i32 16
  %139 = load i32, ptr %138, align 8, !tbaa !26
  store i32 %139, ptr %14, align 4, !tbaa !9
  %140 = load i32, ptr %14, align 4, !tbaa !9
  %141 = load ptr, ptr %29, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %140, ptr noundef %141, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %188, %128
  %143 = load i32, ptr %8, align 4, !tbaa !9
  %144 = load i32, ptr %14, align 4, !tbaa !9
  %145 = icmp slt i32 %143, %144
  br i1 %145, label %146, label %191

146:                                              ; preds = %142
  %147 = load ptr, ptr %23, align 8, !tbaa !5
  %148 = load ptr, ptr %29, align 8, !tbaa !5
  %149 = load i32, ptr %8, align 4, !tbaa !9
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds i32, ptr %148, i64 %150
  %152 = load i32, ptr %151, align 4, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %147, i64 %153
  %155 = load i32, ptr %154, align 4, !tbaa !9
  store i32 %155, ptr %7, align 4, !tbaa !9
  %156 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  %157 = load i32, ptr %7, align 4, !tbaa !9
  %158 = load ptr, ptr %18, align 8, !tbaa !5
  %159 = load i32, ptr %7, align 4, !tbaa !9
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i32, ptr %158, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = load ptr, ptr %31, align 8, !tbaa !5
  %164 = load i32, ptr %7, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds %struct.nrinfodef, ptr %163, i64 %165
  %167 = getelementptr inbounds %struct.nrinfodef, ptr %166, i32 0, i32 0
  %168 = getelementptr inbounds [2 x i32], ptr %167, i64 0, i64 1
  %169 = load i32, ptr %168, align 4, !tbaa !9
  %170 = sub nsw i32 %162, %169
  %171 = call i32 @__PQueueInsert(ptr noundef %156, i32 noundef %157, i32 noundef %170)
  %172 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  %173 = load i32, ptr %7, align 4, !tbaa !9
  %174 = load ptr, ptr %18, align 8, !tbaa !5
  %175 = load i32, ptr %7, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i32, ptr %174, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = load ptr, ptr %31, align 8, !tbaa !5
  %180 = load i32, ptr %7, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds %struct.nrinfodef, ptr %179, i64 %181
  %183 = getelementptr inbounds %struct.nrinfodef, ptr %182, i32 0, i32 0
  %184 = getelementptr inbounds [2 x i32], ptr %183, i64 0, i64 0
  %185 = load i32, ptr %184, align 4, !tbaa !9
  %186 = sub nsw i32 %178, %185
  %187 = call i32 @__PQueueInsert(ptr noundef %172, i32 noundef %173, i32 noundef %186)
  br label %188

188:                                              ; preds = %146
  %189 = load i32, ptr %8, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %8, align 4, !tbaa !9
  br label %142, !llvm.loop !28

191:                                              ; preds = %142
  %192 = load ptr, ptr %4, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.controldef, ptr %192, i32 0, i32 10
  %194 = load i32, ptr %193, align 8, !tbaa !30
  %195 = and i32 %194, 1
  %196 = icmp ne i32 %195, 0
  br i1 %196, label %197, label %207

197:                                              ; preds = %191
  %198 = load i32, ptr %14, align 4, !tbaa !9
  %199 = mul nsw i32 5, %198
  %200 = icmp sge i32 %199, 400
  br i1 %200, label %201, label %202

201:                                              ; preds = %197
  br label %205

202:                                              ; preds = %197
  %203 = load i32, ptr %14, align 4, !tbaa !9
  %204 = mul nsw i32 5, %203
  br label %205

205:                                              ; preds = %202, %201
  %206 = phi i32 [ 400, %201 ], [ %204, %202 ]
  br label %217

207:                                              ; preds = %191
  %208 = load i32, ptr %14, align 4, !tbaa !9
  %209 = mul nsw i32 2, %208
  %210 = icmp sge i32 %209, 300
  br i1 %210, label %211, label %212

211:                                              ; preds = %207
  br label %215

212:                                              ; preds = %207
  %213 = load i32, ptr %14, align 4, !tbaa !9
  %214 = mul nsw i32 2, %213
  br label %215

215:                                              ; preds = %212, %211
  %216 = phi i32 [ 300, %211 ], [ %214, %212 ]
  br label %217

217:                                              ; preds = %215, %205
  %218 = phi i32 [ %206, %205 ], [ %216, %215 ]
  store i32 %218, ptr %40, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  %219 = load ptr, ptr %25, align 8, !tbaa !5
  %220 = getelementptr inbounds i32, ptr %219, i64 0
  store i32 0, ptr %220, align 4, !tbaa !9
  %221 = load ptr, ptr %21, align 8, !tbaa !5
  %222 = getelementptr inbounds i32, ptr %221, i64 0
  %223 = load i32, ptr %222, align 4, !tbaa !9
  %224 = load ptr, ptr %21, align 8, !tbaa !5
  %225 = getelementptr inbounds i32, ptr %224, i64 1
  %226 = load i32, ptr %225, align 4, !tbaa !9
  %227 = sub nsw i32 %223, %226
  %228 = call i32 @llvm.abs.i32(i32 %227, i1 true)
  store i32 %228, ptr %41, align 4, !tbaa !9
  %229 = load ptr, ptr %21, align 8, !tbaa !5
  %230 = getelementptr inbounds i32, ptr %229, i64 0
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = load ptr, ptr %21, align 8, !tbaa !5
  %233 = getelementptr inbounds i32, ptr %232, i64 1
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = icmp slt i32 %231, %234
  %236 = zext i1 %235 to i64
  %237 = select i1 %235, i32 0, i32 1
  store i32 %237, ptr %38, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %238

238:                                              ; preds = %859, %217
  %239 = load i32, ptr %15, align 4, !tbaa !9
  %240 = load i32, ptr %13, align 4, !tbaa !9
  %241 = icmp slt i32 %239, %240
  br i1 %241, label %242, label %862

242:                                              ; preds = %238
  %243 = load ptr, ptr %21, align 8, !tbaa !5
  %244 = getelementptr inbounds i32, ptr %243, i64 0
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = load ptr, ptr %21, align 8, !tbaa !5
  %247 = getelementptr inbounds i32, ptr %246, i64 1
  %248 = load i32, ptr %247, align 4, !tbaa !9
  %249 = icmp slt i32 %245, %248
  %250 = zext i1 %249 to i64
  %251 = select i1 %249, i32 0, i32 1
  store i32 %251, ptr %38, align 4, !tbaa !9
  %252 = load ptr, ptr %21, align 8, !tbaa !5
  %253 = getelementptr inbounds i32, ptr %252, i64 0
  %254 = load i32, ptr %253, align 4, !tbaa !9
  %255 = load ptr, ptr %21, align 8, !tbaa !5
  %256 = getelementptr inbounds i32, ptr %255, i64 1
  %257 = load i32, ptr %256, align 4, !tbaa !9
  %258 = icmp eq i32 %254, %257
  br i1 %258, label %259, label %327

259:                                              ; preds = %242
  %260 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  %261 = call i32 @__PQueueSeeMax(ptr noundef %260)
  %262 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  store i32 %261, ptr %262, align 4, !tbaa !9
  %263 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  %264 = call i32 @__PQueueSeeMax(ptr noundef %263)
  %265 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  store i32 %264, ptr %265, align 4, !tbaa !9
  %266 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %267 = load i32, ptr %266, align 4, !tbaa !9
  %268 = icmp ne i32 %267, -1
  br i1 %268, label %269, label %326

269:                                              ; preds = %259
  %270 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %271 = load i32, ptr %270, align 4, !tbaa !9
  %272 = icmp ne i32 %271, -1
  br i1 %272, label %273, label %326

273:                                              ; preds = %269
  %274 = load ptr, ptr %18, align 8, !tbaa !5
  %275 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %276 = load i32, ptr %275, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds i32, ptr %274, i64 %277
  %279 = load i32, ptr %278, align 4, !tbaa !9
  %280 = load ptr, ptr %31, align 8, !tbaa !5
  %281 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %282 = load i32, ptr %281, align 4, !tbaa !9
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds %struct.nrinfodef, ptr %280, i64 %283
  %285 = getelementptr inbounds %struct.nrinfodef, ptr %284, i32 0, i32 0
  %286 = getelementptr inbounds [2 x i32], ptr %285, i64 0, i64 1
  %287 = load i32, ptr %286, align 4, !tbaa !9
  %288 = sub nsw i32 %279, %287
  %289 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 0
  store i32 %288, ptr %289, align 4, !tbaa !9
  %290 = load ptr, ptr %18, align 8, !tbaa !5
  %291 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %292 = load i32, ptr %291, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %290, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !9
  %296 = load ptr, ptr %31, align 8, !tbaa !5
  %297 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %298 = load i32, ptr %297, align 4, !tbaa !9
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds %struct.nrinfodef, ptr %296, i64 %299
  %301 = getelementptr inbounds %struct.nrinfodef, ptr %300, i32 0, i32 0
  %302 = getelementptr inbounds [2 x i32], ptr %301, i64 0, i64 0
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = sub nsw i32 %295, %303
  %305 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 1
  store i32 %304, ptr %305, align 4, !tbaa !9
  %306 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 0
  %307 = load i32, ptr %306, align 4, !tbaa !9
  %308 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 1
  %309 = load i32, ptr %308, align 4, !tbaa !9
  %310 = icmp sgt i32 %307, %309
  br i1 %310, label %311, label %312

311:                                              ; preds = %273
  br label %324

312:                                              ; preds = %273
  %313 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 0
  %314 = load i32, ptr %313, align 4, !tbaa !9
  %315 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 1
  %316 = load i32, ptr %315, align 4, !tbaa !9
  %317 = icmp slt i32 %314, %316
  br i1 %317, label %318, label %319

318:                                              ; preds = %312
  br label %322

319:                                              ; preds = %312
  %320 = load i32, ptr %37, align 4, !tbaa !9
  %321 = srem i32 %320, 2
  br label %322

322:                                              ; preds = %319, %318
  %323 = phi i32 [ 1, %318 ], [ %321, %319 ]
  br label %324

324:                                              ; preds = %322, %311
  %325 = phi i32 [ 0, %311 ], [ %323, %322 ]
  store i32 %325, ptr %38, align 4, !tbaa !9
  br label %326

326:                                              ; preds = %324, %269, %259
  br label %327

327:                                              ; preds = %326, %242
  %328 = load i32, ptr %38, align 4, !tbaa !9
  %329 = add nsw i32 %328, 1
  %330 = srem i32 %329, 2
  store i32 %330, ptr %39, align 4, !tbaa !9
  %331 = load i32, ptr %38, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %332
  %334 = call i32 @__PQueueGetMax(ptr noundef %333)
  store i32 %334, ptr %32, align 4, !tbaa !9
  %335 = icmp eq i32 %334, -1
  br i1 %335, label %336, label %337

336:                                              ; preds = %327
  br label %862

337:                                              ; preds = %327
  %338 = load ptr, ptr %27, align 8, !tbaa !5
  %339 = load i32, ptr %32, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i32, ptr %338, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !9
  %343 = icmp eq i32 %342, -1
  br i1 %343, label %344, label %365

344:                                              ; preds = %337
  %345 = load i32, ptr %39, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %346
  %348 = load i32, ptr %32, align 4, !tbaa !9
  %349 = load ptr, ptr %18, align 8, !tbaa !5
  %350 = load i32, ptr %32, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds i32, ptr %349, i64 %351
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %354 = load ptr, ptr %31, align 8, !tbaa !5
  %355 = load i32, ptr %32, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds %struct.nrinfodef, ptr %354, i64 %356
  %358 = getelementptr inbounds %struct.nrinfodef, ptr %357, i32 0, i32 0
  %359 = load i32, ptr %38, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds [2 x i32], ptr %358, i64 0, i64 %360
  %362 = load i32, ptr %361, align 4, !tbaa !9
  %363 = sub nsw i32 %353, %362
  %364 = call i32 @__PQueueDelete(ptr noundef %347, i32 noundef %348, i32 noundef %363)
  br label %365

365:                                              ; preds = %344, %337
  %366 = load ptr, ptr %18, align 8, !tbaa !5
  %367 = load i32, ptr %32, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %366, i64 %368
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = load ptr, ptr %31, align 8, !tbaa !5
  %372 = load i32, ptr %32, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds %struct.nrinfodef, ptr %371, i64 %373
  %375 = getelementptr inbounds %struct.nrinfodef, ptr %374, i32 0, i32 0
  %376 = load i32, ptr %39, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [2 x i32], ptr %375, i64 0, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !9
  %380 = sub nsw i32 %370, %379
  %381 = load ptr, ptr %21, align 8, !tbaa !5
  %382 = getelementptr inbounds i32, ptr %381, i64 2
  %383 = load i32, ptr %382, align 4, !tbaa !9
  %384 = sub nsw i32 %383, %380
  store i32 %384, ptr %382, align 4, !tbaa !9
  %385 = load ptr, ptr %21, align 8, !tbaa !5
  %386 = load i32, ptr %38, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %385, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !9
  %390 = load ptr, ptr %18, align 8, !tbaa !5
  %391 = load i32, ptr %32, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %390, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = add nsw i32 %389, %394
  %396 = load ptr, ptr %21, align 8, !tbaa !5
  %397 = load i32, ptr %39, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %396, i64 %398
  %400 = load i32, ptr %399, align 4, !tbaa !9
  %401 = load ptr, ptr %31, align 8, !tbaa !5
  %402 = load i32, ptr %32, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds %struct.nrinfodef, ptr %401, i64 %403
  %405 = getelementptr inbounds %struct.nrinfodef, ptr %404, i32 0, i32 0
  %406 = load i32, ptr %39, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds [2 x i32], ptr %405, i64 0, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = sub nsw i32 %400, %409
  %411 = sub nsw i32 %395, %410
  %412 = call i32 @llvm.abs.i32(i32 %411, i1 true)
  store i32 %412, ptr %42, align 4, !tbaa !9
  %413 = load ptr, ptr %21, align 8, !tbaa !5
  %414 = getelementptr inbounds i32, ptr %413, i64 2
  %415 = load i32, ptr %414, align 4, !tbaa !9
  %416 = load i32, ptr %34, align 4, !tbaa !9
  %417 = icmp slt i32 %415, %416
  br i1 %417, label %428, label %418

418:                                              ; preds = %365
  %419 = load ptr, ptr %21, align 8, !tbaa !5
  %420 = getelementptr inbounds i32, ptr %419, i64 2
  %421 = load i32, ptr %420, align 4, !tbaa !9
  %422 = load i32, ptr %34, align 4, !tbaa !9
  %423 = icmp eq i32 %421, %422
  br i1 %423, label %424, label %434

424:                                              ; preds = %418
  %425 = load i32, ptr %42, align 4, !tbaa !9
  %426 = load i32, ptr %41, align 4, !tbaa !9
  %427 = icmp slt i32 %425, %426
  br i1 %427, label %428, label %434

428:                                              ; preds = %424, %365
  %429 = load ptr, ptr %21, align 8, !tbaa !5
  %430 = getelementptr inbounds i32, ptr %429, i64 2
  %431 = load i32, ptr %430, align 4, !tbaa !9
  store i32 %431, ptr %34, align 4, !tbaa !9
  %432 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %432, ptr %36, align 4, !tbaa !9
  %433 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %433, ptr %41, align 4, !tbaa !9
  br label %461

434:                                              ; preds = %424, %418
  %435 = load i32, ptr %15, align 4, !tbaa !9
  %436 = load i32, ptr %36, align 4, !tbaa !9
  %437 = sub nsw i32 %435, %436
  %438 = load i32, ptr %40, align 4, !tbaa !9
  %439 = icmp sgt i32 %437, %438
  br i1 %439, label %440, label %460

440:                                              ; preds = %434
  %441 = load ptr, ptr %18, align 8, !tbaa !5
  %442 = load i32, ptr %32, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds i32, ptr %441, i64 %443
  %445 = load i32, ptr %444, align 4, !tbaa !9
  %446 = load ptr, ptr %31, align 8, !tbaa !5
  %447 = load i32, ptr %32, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds %struct.nrinfodef, ptr %446, i64 %448
  %450 = getelementptr inbounds %struct.nrinfodef, ptr %449, i32 0, i32 0
  %451 = load i32, ptr %39, align 4, !tbaa !9
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds [2 x i32], ptr %450, i64 0, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = sub nsw i32 %445, %454
  %456 = load ptr, ptr %21, align 8, !tbaa !5
  %457 = getelementptr inbounds i32, ptr %456, i64 2
  %458 = load i32, ptr %457, align 4, !tbaa !9
  %459 = add nsw i32 %458, %455
  store i32 %459, ptr %457, align 4, !tbaa !9
  br label %862

460:                                              ; preds = %434
  br label %461

461:                                              ; preds = %460, %428
  br label %462

462:                                              ; preds = %461
  %463 = load ptr, ptr %23, align 8, !tbaa !5
  %464 = load i32, ptr %14, align 4, !tbaa !9
  %465 = add nsw i32 %464, -1
  store i32 %465, ptr %14, align 4, !tbaa !9
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds i32, ptr %463, i64 %466
  %468 = load i32, ptr %467, align 4, !tbaa !9
  %469 = load ptr, ptr %23, align 8, !tbaa !5
  %470 = load ptr, ptr %24, align 8, !tbaa !5
  %471 = load i32, ptr %32, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i32, ptr %470, i64 %472
  %474 = load i32, ptr %473, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %469, i64 %475
  store i32 %468, ptr %476, align 4, !tbaa !9
  %477 = load ptr, ptr %24, align 8, !tbaa !5
  %478 = load i32, ptr %32, align 4, !tbaa !9
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds i32, ptr %477, i64 %479
  %481 = load i32, ptr %480, align 4, !tbaa !9
  %482 = load ptr, ptr %24, align 8, !tbaa !5
  %483 = load ptr, ptr %23, align 8, !tbaa !5
  %484 = load i32, ptr %14, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds i32, ptr %483, i64 %485
  %487 = load i32, ptr %486, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i32, ptr %482, i64 %488
  store i32 %481, ptr %489, align 4, !tbaa !9
  %490 = load ptr, ptr %24, align 8, !tbaa !5
  %491 = load i32, ptr %32, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds i32, ptr %490, i64 %492
  store i32 -1, ptr %493, align 4, !tbaa !9
  br label %494

494:                                              ; preds = %462
  br label %495

495:                                              ; preds = %494
  %496 = load ptr, ptr %18, align 8, !tbaa !5
  %497 = load i32, ptr %32, align 4, !tbaa !9
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds i32, ptr %496, i64 %498
  %500 = load i32, ptr %499, align 4, !tbaa !9
  %501 = load ptr, ptr %21, align 8, !tbaa !5
  %502 = load i32, ptr %38, align 4, !tbaa !9
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i32, ptr %501, i64 %503
  %505 = load i32, ptr %504, align 4, !tbaa !9
  %506 = add nsw i32 %505, %500
  store i32 %506, ptr %504, align 4, !tbaa !9
  %507 = load i32, ptr %38, align 4, !tbaa !9
  %508 = load ptr, ptr %20, align 8, !tbaa !5
  %509 = load i32, ptr %32, align 4, !tbaa !9
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds i32, ptr %508, i64 %510
  store i32 %507, ptr %511, align 4, !tbaa !9
  %512 = load i32, ptr %15, align 4, !tbaa !9
  %513 = load ptr, ptr %27, align 8, !tbaa !5
  %514 = load i32, ptr %32, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds i32, ptr %513, i64 %515
  store i32 %512, ptr %516, align 4, !tbaa !9
  %517 = load i32, ptr %32, align 4, !tbaa !9
  %518 = load ptr, ptr %28, align 8, !tbaa !5
  %519 = load i32, ptr %15, align 4, !tbaa !9
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds i32, ptr %518, i64 %520
  store i32 %517, ptr %521, align 4, !tbaa !9
  %522 = load ptr, ptr %17, align 8, !tbaa !5
  %523 = load i32, ptr %32, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds i32, ptr %522, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !9
  store i32 %526, ptr %9, align 4, !tbaa !9
  br label %527

527:                                              ; preds = %806, %495
  %528 = load i32, ptr %9, align 4, !tbaa !9
  %529 = load ptr, ptr %17, align 8, !tbaa !5
  %530 = load i32, ptr %32, align 4, !tbaa !9
  %531 = add nsw i32 %530, 1
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i32, ptr %529, i64 %532
  %534 = load i32, ptr %533, align 4, !tbaa !9
  %535 = icmp slt i32 %528, %534
  br i1 %535, label %536, label %809

536:                                              ; preds = %527
  %537 = load ptr, ptr %19, align 8, !tbaa !5
  %538 = load i32, ptr %9, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds i32, ptr %537, i64 %539
  %541 = load i32, ptr %540, align 4, !tbaa !9
  store i32 %541, ptr %10, align 4, !tbaa !9
  %542 = load ptr, ptr %20, align 8, !tbaa !5
  %543 = load i32, ptr %10, align 4, !tbaa !9
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds i32, ptr %542, i64 %544
  %546 = load i32, ptr %545, align 4, !tbaa !9
  %547 = icmp eq i32 %546, 2
  br i1 %547, label %548, label %610

548:                                              ; preds = %536
  %549 = load ptr, ptr %18, align 8, !tbaa !5
  %550 = load i32, ptr %10, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds i32, ptr %549, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load ptr, ptr %31, align 8, !tbaa !5
  %555 = load i32, ptr %10, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds %struct.nrinfodef, ptr %554, i64 %556
  %558 = getelementptr inbounds %struct.nrinfodef, ptr %557, i32 0, i32 0
  %559 = load i32, ptr %38, align 4, !tbaa !9
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds [2 x i32], ptr %558, i64 0, i64 %560
  %562 = load i32, ptr %561, align 4, !tbaa !9
  %563 = sub nsw i32 %553, %562
  store i32 %563, ptr %33, align 4, !tbaa !9
  %564 = load ptr, ptr %18, align 8, !tbaa !5
  %565 = load i32, ptr %32, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i32, ptr %564, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !9
  %569 = load ptr, ptr %31, align 8, !tbaa !5
  %570 = load i32, ptr %10, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds %struct.nrinfodef, ptr %569, i64 %571
  %573 = getelementptr inbounds %struct.nrinfodef, ptr %572, i32 0, i32 0
  %574 = load i32, ptr %38, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds [2 x i32], ptr %573, i64 0, i64 %575
  %577 = load i32, ptr %576, align 4, !tbaa !9
  %578 = add nsw i32 %577, %568
  store i32 %578, ptr %576, align 4, !tbaa !9
  %579 = load ptr, ptr %27, align 8, !tbaa !5
  %580 = load i32, ptr %10, align 4, !tbaa !9
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds i32, ptr %579, i64 %581
  %583 = load i32, ptr %582, align 4, !tbaa !9
  %584 = icmp eq i32 %583, -1
  br i1 %584, label %595, label %585

585:                                              ; preds = %548
  %586 = load ptr, ptr %27, align 8, !tbaa !5
  %587 = load i32, ptr %10, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds i32, ptr %586, i64 %588
  %590 = load i32, ptr %589, align 4, !tbaa !9
  %591 = load i32, ptr %39, align 4, !tbaa !9
  %592 = add nsw i32 2, %591
  %593 = sub nsw i32 0, %592
  %594 = icmp eq i32 %590, %593
  br i1 %594, label %595, label %609

595:                                              ; preds = %585, %548
  %596 = load i32, ptr %39, align 4, !tbaa !9
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %597
  %599 = load i32, ptr %10, align 4, !tbaa !9
  %600 = load i32, ptr %33, align 4, !tbaa !9
  %601 = load i32, ptr %33, align 4, !tbaa !9
  %602 = load ptr, ptr %18, align 8, !tbaa !5
  %603 = load i32, ptr %32, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds i32, ptr %602, i64 %604
  %606 = load i32, ptr %605, align 4, !tbaa !9
  %607 = sub nsw i32 %601, %606
  %608 = call i32 @__PQueueUpdate(ptr noundef %598, i32 noundef %599, i32 noundef %600, i32 noundef %607)
  br label %609

609:                                              ; preds = %595, %585
  br label %805

610:                                              ; preds = %536
  %611 = load ptr, ptr %20, align 8, !tbaa !5
  %612 = load i32, ptr %10, align 4, !tbaa !9
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds i32, ptr %611, i64 %613
  %615 = load i32, ptr %614, align 4, !tbaa !9
  %616 = load i32, ptr %39, align 4, !tbaa !9
  %617 = icmp eq i32 %615, %616
  br i1 %617, label %618, label %804

618:                                              ; preds = %610
  br label %619

619:                                              ; preds = %618
  %620 = load i32, ptr %10, align 4, !tbaa !9
  %621 = load ptr, ptr %23, align 8, !tbaa !5
  %622 = load i32, ptr %14, align 4, !tbaa !9
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds i32, ptr %621, i64 %623
  store i32 %620, ptr %624, align 4, !tbaa !9
  %625 = load i32, ptr %14, align 4, !tbaa !9
  %626 = add nsw i32 %625, 1
  store i32 %626, ptr %14, align 4, !tbaa !9
  %627 = load ptr, ptr %24, align 8, !tbaa !5
  %628 = load i32, ptr %10, align 4, !tbaa !9
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  store i32 %625, ptr %630, align 4, !tbaa !9
  br label %631

631:                                              ; preds = %619
  br label %632

632:                                              ; preds = %631
  %633 = load i32, ptr %10, align 4, !tbaa !9
  %634 = load ptr, ptr %26, align 8, !tbaa !5
  %635 = load i32, ptr %16, align 4, !tbaa !9
  %636 = add nsw i32 %635, 1
  store i32 %636, ptr %16, align 4, !tbaa !9
  %637 = sext i32 %635 to i64
  %638 = getelementptr inbounds i32, ptr %634, i64 %637
  store i32 %633, ptr %638, align 4, !tbaa !9
  %639 = load ptr, ptr %20, align 8, !tbaa !5
  %640 = load i32, ptr %10, align 4, !tbaa !9
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds i32, ptr %639, i64 %641
  store i32 2, ptr %642, align 4, !tbaa !9
  %643 = load ptr, ptr %18, align 8, !tbaa !5
  %644 = load i32, ptr %10, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds i32, ptr %643, i64 %645
  %647 = load i32, ptr %646, align 4, !tbaa !9
  %648 = load ptr, ptr %21, align 8, !tbaa !5
  %649 = load i32, ptr %39, align 4, !tbaa !9
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds i32, ptr %648, i64 %650
  %652 = load i32, ptr %651, align 4, !tbaa !9
  %653 = sub nsw i32 %652, %647
  store i32 %653, ptr %651, align 4, !tbaa !9
  %654 = load ptr, ptr %31, align 8, !tbaa !5
  %655 = load i32, ptr %10, align 4, !tbaa !9
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds %struct.nrinfodef, ptr %654, i64 %656
  %658 = getelementptr inbounds %struct.nrinfodef, ptr %657, i32 0, i32 0
  %659 = getelementptr inbounds [2 x i32], ptr %658, i64 0, i64 0
  store ptr %659, ptr %22, align 8, !tbaa !5
  %660 = load ptr, ptr %22, align 8, !tbaa !5
  %661 = getelementptr inbounds i32, ptr %660, i64 1
  store i32 0, ptr %661, align 4, !tbaa !9
  %662 = load ptr, ptr %22, align 8, !tbaa !5
  %663 = getelementptr inbounds i32, ptr %662, i64 0
  store i32 0, ptr %663, align 4, !tbaa !9
  %664 = load ptr, ptr %17, align 8, !tbaa !5
  %665 = load i32, ptr %10, align 4, !tbaa !9
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds i32, ptr %664, i64 %666
  %668 = load i32, ptr %667, align 4, !tbaa !9
  store i32 %668, ptr %11, align 4, !tbaa !9
  br label %669

669:                                              ; preds = %769, %632
  %670 = load i32, ptr %11, align 4, !tbaa !9
  %671 = load ptr, ptr %17, align 8, !tbaa !5
  %672 = load i32, ptr %10, align 4, !tbaa !9
  %673 = add nsw i32 %672, 1
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds i32, ptr %671, i64 %674
  %676 = load i32, ptr %675, align 4, !tbaa !9
  %677 = icmp slt i32 %670, %676
  br i1 %677, label %678, label %772

678:                                              ; preds = %669
  %679 = load ptr, ptr %19, align 8, !tbaa !5
  %680 = load i32, ptr %11, align 4, !tbaa !9
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds i32, ptr %679, i64 %681
  %683 = load i32, ptr %682, align 4, !tbaa !9
  store i32 %683, ptr %12, align 4, !tbaa !9
  %684 = load ptr, ptr %20, align 8, !tbaa !5
  %685 = load i32, ptr %12, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds i32, ptr %684, i64 %686
  %688 = load i32, ptr %687, align 4, !tbaa !9
  %689 = icmp ne i32 %688, 2
  br i1 %689, label %690, label %706

690:                                              ; preds = %678
  %691 = load ptr, ptr %18, align 8, !tbaa !5
  %692 = load i32, ptr %12, align 4, !tbaa !9
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds i32, ptr %691, i64 %693
  %695 = load i32, ptr %694, align 4, !tbaa !9
  %696 = load ptr, ptr %22, align 8, !tbaa !5
  %697 = load ptr, ptr %20, align 8, !tbaa !5
  %698 = load i32, ptr %12, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds i32, ptr %697, i64 %699
  %701 = load i32, ptr %700, align 4, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds i32, ptr %696, i64 %702
  %704 = load i32, ptr %703, align 4, !tbaa !9
  %705 = add nsw i32 %704, %695
  store i32 %705, ptr %703, align 4, !tbaa !9
  br label %768

706:                                              ; preds = %678
  %707 = load ptr, ptr %18, align 8, !tbaa !5
  %708 = load i32, ptr %12, align 4, !tbaa !9
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %707, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !9
  %712 = load ptr, ptr %31, align 8, !tbaa !5
  %713 = load i32, ptr %12, align 4, !tbaa !9
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds %struct.nrinfodef, ptr %712, i64 %714
  %716 = getelementptr inbounds %struct.nrinfodef, ptr %715, i32 0, i32 0
  %717 = load i32, ptr %39, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds [2 x i32], ptr %716, i64 0, i64 %718
  %720 = load i32, ptr %719, align 4, !tbaa !9
  %721 = sub nsw i32 %711, %720
  store i32 %721, ptr %33, align 4, !tbaa !9
  %722 = load ptr, ptr %18, align 8, !tbaa !5
  %723 = load i32, ptr %10, 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 = load ptr, ptr %31, align 8, !tbaa !5
  %728 = load i32, ptr %12, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds %struct.nrinfodef, ptr %727, i64 %729
  %731 = getelementptr inbounds %struct.nrinfodef, ptr %730, i32 0, i32 0
  %732 = load i32, ptr %39, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds [2 x i32], ptr %731, i64 0, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !9
  %736 = sub nsw i32 %735, %726
  store i32 %736, ptr %734, align 4, !tbaa !9
  %737 = load ptr, ptr %27, 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, -1
  br i1 %742, label %753, label %743

743:                                              ; preds = %706
  %744 = load ptr, ptr %27, align 8, !tbaa !5
  %745 = load i32, ptr %12, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i32, ptr %744, i64 %746
  %748 = load i32, ptr %747, align 4, !tbaa !9
  %749 = load i32, ptr %38, align 4, !tbaa !9
  %750 = add nsw i32 2, %749
  %751 = sub nsw i32 0, %750
  %752 = icmp eq i32 %748, %751
  br i1 %752, label %753, label %767

753:                                              ; preds = %743, %706
  %754 = load i32, ptr %38, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %755
  %757 = load i32, ptr %12, align 4, !tbaa !9
  %758 = load i32, ptr %33, align 4, !tbaa !9
  %759 = load i32, ptr %33, align 4, !tbaa !9
  %760 = load ptr, ptr %18, align 8, !tbaa !5
  %761 = load i32, ptr %10, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i32, ptr %760, i64 %762
  %764 = load i32, ptr %763, align 4, !tbaa !9
  %765 = add nsw i32 %759, %764
  %766 = call i32 @__PQueueUpdate(ptr noundef %756, i32 noundef %757, i32 noundef %758, i32 noundef %765)
  br label %767

767:                                              ; preds = %753, %743
  br label %768

768:                                              ; preds = %767, %690
  br label %769

769:                                              ; preds = %768
  %770 = load i32, ptr %11, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  store i32 %771, ptr %11, align 4, !tbaa !9
  br label %669, !llvm.loop !31

772:                                              ; preds = %669
  %773 = load ptr, ptr %27, align 8, !tbaa !5
  %774 = load i32, ptr %10, align 4, !tbaa !9
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds i32, ptr %773, i64 %775
  %777 = load i32, ptr %776, align 4, !tbaa !9
  %778 = icmp eq i32 %777, -1
  br i1 %778, label %779, label %803

779:                                              ; preds = %772
  %780 = load i32, ptr %38, align 4, !tbaa !9
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %781
  %783 = load i32, ptr %10, align 4, !tbaa !9
  %784 = load ptr, ptr %18, align 8, !tbaa !5
  %785 = load i32, ptr %10, align 4, !tbaa !9
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds i32, ptr %784, i64 %786
  %788 = load i32, ptr %787, align 4, !tbaa !9
  %789 = load ptr, ptr %22, align 8, !tbaa !5
  %790 = load i32, ptr %39, align 4, !tbaa !9
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds i32, ptr %789, i64 %791
  %793 = load i32, ptr %792, align 4, !tbaa !9
  %794 = sub nsw i32 %788, %793
  %795 = call i32 @__PQueueInsert(ptr noundef %782, i32 noundef %783, i32 noundef %794)
  %796 = load i32, ptr %38, align 4, !tbaa !9
  %797 = add nsw i32 2, %796
  %798 = sub nsw i32 0, %797
  %799 = load ptr, ptr %27, align 8, !tbaa !5
  %800 = load i32, ptr %10, align 4, !tbaa !9
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds i32, ptr %799, i64 %801
  store i32 %798, ptr %802, align 4, !tbaa !9
  br label %803

803:                                              ; preds = %779, %772
  br label %804

804:                                              ; preds = %803, %610
  br label %805

805:                                              ; preds = %804, %609
  br label %806

806:                                              ; preds = %805
  %807 = load i32, ptr %9, align 4, !tbaa !9
  %808 = add nsw i32 %807, 1
  store i32 %808, ptr %9, align 4, !tbaa !9
  br label %527, !llvm.loop !32

809:                                              ; preds = %527
  %810 = load i32, ptr %16, align 4, !tbaa !9
  %811 = load ptr, ptr %25, align 8, !tbaa !5
  %812 = load i32, ptr %15, align 4, !tbaa !9
  %813 = add nsw i32 %812, 1
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %811, i64 %814
  store i32 %810, ptr %815, align 4, !tbaa !9
  %816 = load ptr, ptr %4, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.controldef, ptr %816, i32 0, i32 1
  %818 = load i32, ptr %817, align 4, !tbaa !21
  %819 = and i32 %818, 32
  %820 = icmp ne i32 %819, 0
  br i1 %820, label %821, label %858

821:                                              ; preds = %809
  %822 = load i32, ptr %32, align 4, !tbaa !9
  %823 = load i32, ptr %38, align 4, !tbaa !9
  %824 = load i32, ptr %38, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 %825
  %827 = load i32, ptr %826, align 4, !tbaa !9
  %828 = load i32, ptr %39, align 4, !tbaa !9
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 %829
  %831 = load i32, ptr %830, align 4, !tbaa !9
  %832 = load ptr, ptr %18, align 8, !tbaa !5
  %833 = load i32, ptr %38, align 4, !tbaa !9
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %834
  %836 = load i32, ptr %835, align 4, !tbaa !9
  %837 = sext i32 %836 to i64
  %838 = getelementptr inbounds i32, ptr %832, i64 %837
  %839 = load i32, ptr %838, align 4, !tbaa !9
  %840 = load ptr, ptr %18, align 8, !tbaa !5
  %841 = load i32, ptr %39, align 4, !tbaa !9
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %842
  %844 = load i32, ptr %843, align 4, !tbaa !9
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds i32, ptr %840, i64 %845
  %847 = load i32, ptr %846, align 4, !tbaa !9
  %848 = load ptr, ptr %21, align 8, !tbaa !5
  %849 = getelementptr inbounds i32, ptr %848, i64 0
  %850 = load i32, ptr %849, align 4, !tbaa !9
  %851 = load ptr, ptr %21, align 8, !tbaa !5
  %852 = getelementptr inbounds i32, ptr %851, i64 1
  %853 = load i32, ptr %852, align 4, !tbaa !9
  %854 = load ptr, ptr %21, align 8, !tbaa !5
  %855 = getelementptr inbounds i32, ptr %854, i64 2
  %856 = load i32, ptr %855, align 4, !tbaa !9
  %857 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef %822, i32 noundef %823, i32 noundef %827, i32 noundef %831, i32 noundef %839, i32 noundef %847, i32 noundef %850, i32 noundef %853, i32 noundef %856)
  br label %858

858:                                              ; preds = %821, %809
  br label %859

859:                                              ; preds = %858
  %860 = load i32, ptr %15, align 4, !tbaa !9
  %861 = add nsw i32 %860, 1
  store i32 %861, ptr %15, align 4, !tbaa !9
  br label %238, !llvm.loop !33

862:                                              ; preds = %440, %336, %238
  %863 = load i32, ptr %15, align 4, !tbaa !9
  %864 = add nsw i32 %863, -1
  store i32 %864, ptr %15, align 4, !tbaa !9
  br label %865

865:                                              ; preds = %1130, %862
  %866 = load i32, ptr %15, align 4, !tbaa !9
  %867 = load i32, ptr %36, align 4, !tbaa !9
  %868 = icmp sgt i32 %866, %867
  br i1 %868, label %869, label %1133

869:                                              ; preds = %865
  %870 = load ptr, ptr %28, align 8, !tbaa !5
  %871 = load i32, ptr %15, 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
  store i32 %874, ptr %32, align 4, !tbaa !9
  %875 = load ptr, ptr %20, align 8, !tbaa !5
  %876 = load i32, ptr %32, align 4, !tbaa !9
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds i32, ptr %875, i64 %877
  %879 = load i32, ptr %878, align 4, !tbaa !9
  store i32 %879, ptr %38, align 4, !tbaa !9
  %880 = load i32, ptr %38, align 4, !tbaa !9
  %881 = add nsw i32 %880, 1
  %882 = srem i32 %881, 2
  store i32 %882, ptr %39, align 4, !tbaa !9
  br label %883

883:                                              ; preds = %869
  %884 = load ptr, ptr %18, align 8, !tbaa !5
  %885 = load i32, ptr %32, align 4, !tbaa !9
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds i32, ptr %884, i64 %886
  %888 = load i32, ptr %887, align 4, !tbaa !9
  %889 = load ptr, ptr %21, align 8, !tbaa !5
  %890 = getelementptr inbounds i32, ptr %889, i64 2
  %891 = load i32, ptr %890, align 4, !tbaa !9
  %892 = add nsw i32 %891, %888
  store i32 %892, ptr %890, align 4, !tbaa !9
  %893 = load ptr, ptr %18, align 8, !tbaa !5
  %894 = load i32, ptr %32, align 4, !tbaa !9
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds i32, ptr %893, i64 %895
  %897 = load i32, ptr %896, align 4, !tbaa !9
  %898 = load ptr, ptr %21, align 8, !tbaa !5
  %899 = load i32, ptr %38, align 4, !tbaa !9
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds i32, ptr %898, i64 %900
  %902 = load i32, ptr %901, align 4, !tbaa !9
  %903 = sub nsw i32 %902, %897
  store i32 %903, ptr %901, align 4, !tbaa !9
  br label %904

904:                                              ; preds = %883
  br label %905

905:                                              ; preds = %904
  %906 = load ptr, ptr %20, align 8, !tbaa !5
  %907 = load i32, ptr %32, align 4, !tbaa !9
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds i32, ptr %906, i64 %908
  store i32 2, ptr %909, align 4, !tbaa !9
  br label %910

910:                                              ; preds = %905
  %911 = load i32, ptr %32, align 4, !tbaa !9
  %912 = load ptr, ptr %23, align 8, !tbaa !5
  %913 = load i32, ptr %14, align 4, !tbaa !9
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds i32, ptr %912, i64 %914
  store i32 %911, ptr %915, align 4, !tbaa !9
  %916 = load i32, ptr %14, align 4, !tbaa !9
  %917 = add nsw i32 %916, 1
  store i32 %917, ptr %14, align 4, !tbaa !9
  %918 = load ptr, ptr %24, align 8, !tbaa !5
  %919 = load i32, ptr %32, align 4, !tbaa !9
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds i32, ptr %918, i64 %920
  store i32 %916, ptr %921, align 4, !tbaa !9
  br label %922

922:                                              ; preds = %910
  br label %923

923:                                              ; preds = %922
  %924 = load ptr, ptr %31, align 8, !tbaa !5
  %925 = load i32, ptr %32, align 4, !tbaa !9
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds %struct.nrinfodef, ptr %924, i64 %926
  %928 = getelementptr inbounds %struct.nrinfodef, ptr %927, i32 0, i32 0
  %929 = getelementptr inbounds [2 x i32], ptr %928, i64 0, i64 0
  store ptr %929, ptr %22, align 8, !tbaa !5
  %930 = load ptr, ptr %22, align 8, !tbaa !5
  %931 = getelementptr inbounds i32, ptr %930, i64 1
  store i32 0, ptr %931, align 4, !tbaa !9
  %932 = load ptr, ptr %22, align 8, !tbaa !5
  %933 = getelementptr inbounds i32, ptr %932, i64 0
  store i32 0, ptr %933, align 4, !tbaa !9
  %934 = load ptr, ptr %17, align 8, !tbaa !5
  %935 = load i32, ptr %32, align 4, !tbaa !9
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds i32, ptr %934, i64 %936
  %938 = load i32, ptr %937, align 4, !tbaa !9
  store i32 %938, ptr %9, align 4, !tbaa !9
  br label %939

939:                                              ; preds = %993, %923
  %940 = load i32, ptr %9, align 4, !tbaa !9
  %941 = load ptr, ptr %17, align 8, !tbaa !5
  %942 = load i32, ptr %32, align 4, !tbaa !9
  %943 = add nsw i32 %942, 1
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i32, ptr %941, i64 %944
  %946 = load i32, ptr %945, align 4, !tbaa !9
  %947 = icmp slt i32 %940, %946
  br i1 %947, label %948, label %996

948:                                              ; preds = %939
  %949 = load ptr, ptr %19, align 8, !tbaa !5
  %950 = load i32, ptr %9, 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 %10, align 4, !tbaa !9
  %954 = load ptr, ptr %20, align 8, !tbaa !5
  %955 = load i32, ptr %10, 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 = icmp eq i32 %958, 2
  br i1 %959, label %960, label %976

960:                                              ; preds = %948
  %961 = load ptr, ptr %18, align 8, !tbaa !5
  %962 = load i32, ptr %32, align 4, !tbaa !9
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds i32, ptr %961, i64 %963
  %965 = load i32, ptr %964, align 4, !tbaa !9
  %966 = load ptr, ptr %31, align 8, !tbaa !5
  %967 = load i32, ptr %10, align 4, !tbaa !9
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds %struct.nrinfodef, ptr %966, i64 %968
  %970 = getelementptr inbounds %struct.nrinfodef, ptr %969, i32 0, i32 0
  %971 = load i32, ptr %38, align 4, !tbaa !9
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds [2 x i32], ptr %970, i64 0, i64 %972
  %974 = load i32, ptr %973, align 4, !tbaa !9
  %975 = sub nsw i32 %974, %965
  store i32 %975, ptr %973, align 4, !tbaa !9
  br label %992

976:                                              ; preds = %948
  %977 = load ptr, ptr %18, align 8, !tbaa !5
  %978 = load i32, ptr %10, 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 = load ptr, ptr %22, align 8, !tbaa !5
  %983 = load ptr, ptr %20, align 8, !tbaa !5
  %984 = load i32, ptr %10, align 4, !tbaa !9
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds i32, ptr %983, i64 %985
  %987 = load i32, ptr %986, align 4, !tbaa !9
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds i32, ptr %982, i64 %988
  %990 = load i32, ptr %989, align 4, !tbaa !9
  %991 = add nsw i32 %990, %981
  store i32 %991, ptr %989, align 4, !tbaa !9
  br label %992

992:                                              ; preds = %976, %960
  br label %993

993:                                              ; preds = %992
  %994 = load i32, ptr %9, align 4, !tbaa !9
  %995 = add nsw i32 %994, 1
  store i32 %995, ptr %9, align 4, !tbaa !9
  br label %939, !llvm.loop !34

996:                                              ; preds = %939
  %997 = load ptr, ptr %25, align 8, !tbaa !5
  %998 = load i32, ptr %15, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds i32, ptr %997, i64 %999
  %1001 = load i32, ptr %1000, align 4, !tbaa !9
  store i32 %1001, ptr %9, align 4, !tbaa !9
  br label %1002

1002:                                             ; preds = %1126, %996
  %1003 = load i32, ptr %9, align 4, !tbaa !9
  %1004 = load ptr, ptr %25, align 8, !tbaa !5
  %1005 = load i32, ptr %15, align 4, !tbaa !9
  %1006 = add nsw i32 %1005, 1
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds i32, ptr %1004, i64 %1007
  %1009 = load i32, ptr %1008, align 4, !tbaa !9
  %1010 = icmp slt i32 %1003, %1009
  br i1 %1010, label %1011, label %1129

1011:                                             ; preds = %1002
  %1012 = load ptr, ptr %26, align 8, !tbaa !5
  %1013 = load i32, ptr %9, 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
  store i32 %1016, ptr %10, align 4, !tbaa !9
  %1017 = load i32, ptr %39, align 4, !tbaa !9
  %1018 = load ptr, ptr %20, align 8, !tbaa !5
  %1019 = load i32, ptr %10, align 4, !tbaa !9
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds i32, ptr %1018, i64 %1020
  store i32 %1017, ptr %1021, align 4, !tbaa !9
  br label %1022

1022:                                             ; preds = %1011
  %1023 = load ptr, ptr %18, align 8, !tbaa !5
  %1024 = load i32, ptr %10, align 4, !tbaa !9
  %1025 = sext i32 %1024 to i64
  %1026 = getelementptr inbounds i32, ptr %1023, i64 %1025
  %1027 = load i32, ptr %1026, align 4, !tbaa !9
  %1028 = load ptr, ptr %21, align 8, !tbaa !5
  %1029 = load i32, ptr %39, align 4, !tbaa !9
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds i32, ptr %1028, i64 %1030
  %1032 = load i32, ptr %1031, align 4, !tbaa !9
  %1033 = add nsw i32 %1032, %1027
  store i32 %1033, ptr %1031, align 4, !tbaa !9
  %1034 = load ptr, ptr %18, align 8, !tbaa !5
  %1035 = load i32, ptr %10, align 4, !tbaa !9
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds i32, ptr %1034, i64 %1036
  %1038 = load i32, ptr %1037, align 4, !tbaa !9
  %1039 = load ptr, ptr %21, align 8, !tbaa !5
  %1040 = getelementptr inbounds i32, ptr %1039, i64 2
  %1041 = load i32, ptr %1040, align 4, !tbaa !9
  %1042 = sub nsw i32 %1041, %1038
  store i32 %1042, ptr %1040, align 4, !tbaa !9
  br label %1043

1043:                                             ; preds = %1022
  br label %1044

1044:                                             ; preds = %1043
  br label %1045

1045:                                             ; preds = %1044
  %1046 = load ptr, ptr %23, align 8, !tbaa !5
  %1047 = load i32, ptr %14, align 4, !tbaa !9
  %1048 = add nsw i32 %1047, -1
  store i32 %1048, ptr %14, align 4, !tbaa !9
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds i32, ptr %1046, i64 %1049
  %1051 = load i32, ptr %1050, align 4, !tbaa !9
  %1052 = load ptr, ptr %23, align 8, !tbaa !5
  %1053 = load ptr, ptr %24, align 8, !tbaa !5
  %1054 = load i32, ptr %10, align 4, !tbaa !9
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds i32, ptr %1053, i64 %1055
  %1057 = load i32, ptr %1056, align 4, !tbaa !9
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds i32, ptr %1052, i64 %1058
  store i32 %1051, ptr %1059, align 4, !tbaa !9
  %1060 = load ptr, ptr %24, align 8, !tbaa !5
  %1061 = load i32, ptr %10, align 4, !tbaa !9
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds i32, ptr %1060, i64 %1062
  %1064 = load i32, ptr %1063, align 4, !tbaa !9
  %1065 = load ptr, ptr %24, align 8, !tbaa !5
  %1066 = load ptr, ptr %23, align 8, !tbaa !5
  %1067 = load i32, ptr %14, align 4, !tbaa !9
  %1068 = sext i32 %1067 to i64
  %1069 = getelementptr inbounds i32, ptr %1066, i64 %1068
  %1070 = load i32, ptr %1069, align 4, !tbaa !9
  %1071 = sext i32 %1070 to i64
  %1072 = getelementptr inbounds i32, ptr %1065, i64 %1071
  store i32 %1064, ptr %1072, align 4, !tbaa !9
  %1073 = load ptr, ptr %24, align 8, !tbaa !5
  %1074 = load i32, ptr %10, align 4, !tbaa !9
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds i32, ptr %1073, i64 %1075
  store i32 -1, ptr %1076, align 4, !tbaa !9
  br label %1077

1077:                                             ; preds = %1045
  br label %1078

1078:                                             ; preds = %1077
  %1079 = load ptr, ptr %17, align 8, !tbaa !5
  %1080 = load i32, ptr %10, align 4, !tbaa !9
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds i32, ptr %1079, i64 %1081
  %1083 = load i32, ptr %1082, align 4, !tbaa !9
  store i32 %1083, ptr %11, align 4, !tbaa !9
  br label %1084

1084:                                             ; preds = %1122, %1078
  %1085 = load i32, ptr %11, align 4, !tbaa !9
  %1086 = load ptr, ptr %17, align 8, !tbaa !5
  %1087 = load i32, ptr %10, align 4, !tbaa !9
  %1088 = add nsw i32 %1087, 1
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds i32, ptr %1086, i64 %1089
  %1091 = load i32, ptr %1090, align 4, !tbaa !9
  %1092 = icmp slt i32 %1085, %1091
  br i1 %1092, label %1093, label %1125

1093:                                             ; preds = %1084
  %1094 = load ptr, ptr %19, align 8, !tbaa !5
  %1095 = load i32, ptr %11, align 4, !tbaa !9
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds i32, ptr %1094, i64 %1096
  %1098 = load i32, ptr %1097, align 4, !tbaa !9
  store i32 %1098, ptr %12, align 4, !tbaa !9
  %1099 = load ptr, ptr %20, align 8, !tbaa !5
  %1100 = load i32, ptr %12, align 4, !tbaa !9
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds i32, ptr %1099, i64 %1101
  %1103 = load i32, ptr %1102, align 4, !tbaa !9
  %1104 = icmp eq i32 %1103, 2
  br i1 %1104, label %1105, label %1121

1105:                                             ; preds = %1093
  %1106 = load ptr, ptr %18, align 8, !tbaa !5
  %1107 = load i32, ptr %10, align 4, !tbaa !9
  %1108 = sext i32 %1107 to i64
  %1109 = getelementptr inbounds i32, ptr %1106, i64 %1108
  %1110 = load i32, ptr %1109, align 4, !tbaa !9
  %1111 = load ptr, ptr %31, align 8, !tbaa !5
  %1112 = load i32, ptr %12, align 4, !tbaa !9
  %1113 = sext i32 %1112 to i64
  %1114 = getelementptr inbounds %struct.nrinfodef, ptr %1111, i64 %1113
  %1115 = getelementptr inbounds %struct.nrinfodef, ptr %1114, i32 0, i32 0
  %1116 = load i32, ptr %39, align 4, !tbaa !9
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds [2 x i32], ptr %1115, i64 0, i64 %1117
  %1119 = load i32, ptr %1118, align 4, !tbaa !9
  %1120 = add nsw i32 %1119, %1110
  store i32 %1120, ptr %1118, align 4, !tbaa !9
  br label %1121

1121:                                             ; preds = %1105, %1093
  br label %1122

1122:                                             ; preds = %1121
  %1123 = load i32, ptr %11, align 4, !tbaa !9
  %1124 = add nsw i32 %1123, 1
  store i32 %1124, ptr %11, align 4, !tbaa !9
  br label %1084, !llvm.loop !35

1125:                                             ; preds = %1084
  br label %1126

1126:                                             ; preds = %1125
  %1127 = load i32, ptr %9, align 4, !tbaa !9
  %1128 = add nsw i32 %1127, 1
  store i32 %1128, ptr %9, align 4, !tbaa !9
  br label %1002, !llvm.loop !36

1129:                                             ; preds = %1002
  br label %1130

1130:                                             ; preds = %1129
  %1131 = load i32, ptr %15, align 4, !tbaa !9
  %1132 = add nsw i32 %1131, -1
  store i32 %1132, ptr %15, align 4, !tbaa !9
  br label %865, !llvm.loop !37

1133:                                             ; preds = %865
  %1134 = load ptr, ptr %4, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.controldef, ptr %1134, i32 0, i32 1
  %1136 = load i32, ptr %1135, align 4, !tbaa !21
  %1137 = and i32 %1136, 8
  %1138 = icmp ne i32 %1137, 0
  br i1 %1138, label %1139, label %1150

1139:                                             ; preds = %1133
  %1140 = load i32, ptr %34, align 4, !tbaa !9
  %1141 = load i32, ptr %36, align 4, !tbaa !9
  %1142 = load ptr, ptr %21, align 8, !tbaa !5
  %1143 = getelementptr inbounds i32, ptr %1142, i64 0
  %1144 = load i32, ptr %1143, align 4, !tbaa !9
  %1145 = load ptr, ptr %21, align 8, !tbaa !5
  %1146 = getelementptr inbounds i32, ptr %1145, i64 1
  %1147 = load i32, ptr %1146, align 4, !tbaa !9
  %1148 = load i32, ptr %14, align 4, !tbaa !9
  %1149 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %1140, i32 noundef %1141, i32 noundef %1144, i32 noundef %1147, i32 noundef %1148)
  br label %1150

1150:                                             ; preds = %1139, %1133
  %1151 = load i32, ptr %34, align 4, !tbaa !9
  %1152 = load ptr, ptr %5, align 8, !tbaa !5
  %1153 = getelementptr inbounds %struct.graphdef, ptr %1152, i32 0, i32 12
  store i32 %1151, ptr %1153, align 8, !tbaa !27
  %1154 = load i32, ptr %14, align 4, !tbaa !9
  %1155 = load ptr, ptr %5, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.graphdef, ptr %1155, i32 0, i32 16
  store i32 %1154, ptr %1156, align 8, !tbaa !26
  %1157 = load i32, ptr %36, align 4, !tbaa !9
  %1158 = icmp eq i32 %1157, -1
  br i1 %1158, label %1163, label %1159

1159:                                             ; preds = %1150
  %1160 = load i32, ptr %34, align 4, !tbaa !9
  %1161 = load i32, ptr %35, align 4, !tbaa !9
  %1162 = icmp sge i32 %1160, %1161
  br i1 %1162, label %1163, label %1164

1163:                                             ; preds = %1159, %1150
  br label %1168

1164:                                             ; preds = %1159
  br label %1165

1165:                                             ; preds = %1164
  %1166 = load i32, ptr %37, align 4, !tbaa !9
  %1167 = add nsw i32 %1166, 1
  store i32 %1167, ptr %37, align 4, !tbaa !9
  br label %124, !llvm.loop !38

1168:                                             ; preds = %1163, %124
  %1169 = load ptr, ptr %4, align 8, !tbaa !5
  %1170 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  call void @__PQueueFree(ptr noundef %1169, ptr noundef %1170)
  %1171 = load ptr, ptr %4, align 8, !tbaa !5
  %1172 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  call void @__PQueueFree(ptr noundef %1171, ptr noundef %1172)
  %1173 = load ptr, ptr %4, align 8, !tbaa !5
  %1174 = load i32, ptr %13, align 4, !tbaa !9
  %1175 = add nsw i32 %1174, 1
  call void @__idxwspacefree(ptr noundef %1173, i32 noundef %1175)
  %1176 = load ptr, ptr %4, align 8, !tbaa !5
  %1177 = load i32, ptr %13, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1176, i32 noundef %1177)
  %1178 = load ptr, ptr %4, align 8, !tbaa !5
  %1179 = load i32, ptr %13, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1178, i32 noundef %1179)
  %1180 = load ptr, ptr %4, align 8, !tbaa !5
  %1181 = load i32, ptr %13, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1180, i32 noundef %1181)
  %1182 = load ptr, ptr %4, align 8, !tbaa !5
  %1183 = load i32, ptr %13, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1182, i32 noundef %1183)
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 128, 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 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.PQueueType = type { i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr }
%struct.nrinfodef = type { [2 x i32] }

@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1

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

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

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

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

; 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: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #4

declare i32 @__PQueueSeeMax(ptr noundef) local_unnamed_addr #2

declare i32 @__PQueueGetMax(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

36:                                               ; preds = %3
  %37 = load i32, ptr %22, align 4, !tbaa !24
  %38 = getelementptr inbounds i8, ptr %22, i64 4
  %39 = load i32, ptr %38, align 4, !tbaa !24
  %40 = load i32, ptr %7, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %1, i64 112
  %42 = load i32, ptr %41, align 8, !tbaa !25
  %43 = getelementptr inbounds i8, ptr %1, i64 88
  %44 = load i32, ptr %43, align 8, !tbaa !26
  %45 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %37, i32 noundef %39, i32 noundef %40, i32 noundef %42, i32 noundef %44)
  br label %46

46:                                               ; preds = %36, %3
  %47 = icmp sgt i32 %2, 0
  br i1 %47, label %.lr.ph500, label %._crit_edge501

.lr.ph500:                                        ; preds = %46
  %48 = getelementptr inbounds i8, ptr %1, i64 88
  %49 = getelementptr inbounds i8, ptr %1, i64 112
  %50 = getelementptr inbounds i8, ptr %0, i64 40
  %51 = getelementptr inbounds i8, ptr %22, i64 4
  %52 = icmp sgt i32 %8, 0
  %53 = getelementptr inbounds i8, ptr %5, i64 4
  %54 = getelementptr inbounds i8, ptr %6, i64 4
  %55 = getelementptr inbounds i8, ptr %22, i64 8
  %wide.trip.count520 = zext nneg i32 %8 to i64
  br label %56

56:                                               ; preds = %419, %.lr.ph500
  %.0387497 = phi i32 [ 0, %.lr.ph500 ], [ %421, %419 ]
  %57 = call ptr @__idxset(i32 noundef %8, i32 noundef -1, ptr noundef %27) #5
  call void @__PQueueReset(ptr noundef nonnull %4) #5
  call void @__PQueueReset(ptr noundef nonnull %26) #5
  %58 = load i32, ptr %48, align 8, !tbaa !26
  %59 = load i32, ptr %49, align 8, !tbaa !25
  call void @__RandomPermute(i32 noundef %59, ptr noundef %32, i32 noundef 1) #5
  %60 = icmp sgt i32 %59, 0
  br i1 %60, label %.lr.ph.preheader, label %._crit_edge

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

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %61 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv
  %62 = load i32, ptr %61, align 4, !tbaa !24
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds i32, ptr %16, i64 %63
  %65 = load i32, ptr %64, align 4, !tbaa !24
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds i32, ptr %14, i64 %66
  %68 = load i32, ptr %67, align 4, !tbaa !24
  %69 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %66
  %70 = getelementptr inbounds i8, ptr %69, i64 4
  %71 = load i32, ptr %70, align 4, !tbaa !24
  %72 = sub nsw i32 %68, %71
  %73 = call i32 @__PQueueInsert(ptr noundef nonnull %4, i32 noundef %65, i32 noundef %72) #5
  %74 = load i32, ptr %67, align 4, !tbaa !24
  %75 = load i32, ptr %69, align 4, !tbaa !24
  %76 = sub nsw i32 %74, %75
  %77 = call i32 @__PQueueInsert(ptr noundef nonnull %26, i32 noundef %65, i32 noundef %76) #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 %._crit_edge, label %.lr.ph, !llvm.loop !27

._crit_edge:                                      ; preds = %.lr.ph, %56
  %78 = load i32, ptr %50, align 8, !tbaa !29
  %79 = and i32 %78, 1
  %.not415 = icmp eq i32 %79, 0
  br i1 %.not415, label %84, label %80

80:                                               ; preds = %._crit_edge
  %81 = mul nsw i32 %59, 5
  %82 = icmp sgt i32 %59, 79
  %83 = select i1 %82, i32 400, i32 %81
  br label %88

84:                                               ; preds = %._crit_edge
  %85 = shl nsw i32 %59, 1
  %86 = icmp sgt i32 %59, 149
  %87 = select i1 %86, i32 300, i32 %85
  br label %88

88:                                               ; preds = %84, %80
  %89 = phi i32 [ %83, %80 ], [ %87, %84 ]
  store i32 0, ptr %30, align 4, !tbaa !24
  br i1 %52, label %.lr.ph462, label %.loopexit429

.lr.ph462:                                        ; preds = %88
  %90 = load i32, ptr %22, align 4, !tbaa !24
  %91 = load i32, ptr %51, align 4, !tbaa !24
  %92 = sub nsw i32 %90, %91
  %93 = call i32 @llvm.abs.i32(i32 %92, i1 true)
  %94 = and i32 %.0387497, 1
  br label %95

95:                                               ; preds = %.lr.ph462, %303
  %indvars.iv517 = phi i64 [ 0, %.lr.ph462 ], [ %indvars.iv.next518, %303 ]
  %.0460 = phi i32 [ %93, %.lr.ph462 ], [ %.1, %303 ]
  %.0388459 = phi i32 [ -1, %.lr.ph462 ], [ %.1389, %303 ]
  %.0392458 = phi i32 [ %58, %.lr.ph462 ], [ %.1393, %303 ]
  %.0396457 = phi i32 [ %59, %.lr.ph462 ], [ %.1397.lcssa, %303 ]
  %.0401455 = phi i32 [ 0, %.lr.ph462 ], [ %.1402.lcssa, %303 ]
  %96 = load i32, ptr %22, align 4, !tbaa !24
  %97 = load i32, ptr %51, align 4, !tbaa !24
  %98 = icmp sge i32 %96, %97
  %99 = zext i1 %98 to i32
  %100 = icmp eq i32 %96, %97
  br i1 %100, label %101, label %122

101:                                              ; preds = %95
  %102 = call i32 @__PQueueSeeMax(ptr noundef nonnull %4) #5
  store i32 %102, ptr %5, align 4, !tbaa !24
  %103 = call i32 @__PQueueSeeMax(ptr noundef nonnull %26) #5
  store i32 %103, ptr %53, align 4, !tbaa !24
  %104 = icmp ne i32 %102, -1
  %105 = icmp ne i32 %103, -1
  %or.cond = select i1 %104, i1 %105, i1 false
  br i1 %or.cond, label %106, label %122

106:                                              ; preds = %101
  %107 = sext i32 %102 to i64
  %108 = getelementptr inbounds i32, ptr %14, i64 %107
  %109 = load i32, ptr %108, align 4, !tbaa !24
  %110 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %107, i32 0, i64 1
  %111 = load i32, ptr %110, align 4, !tbaa !24
  %112 = sub nsw i32 %109, %111
  store i32 %112, ptr %6, align 4, !tbaa !24
  %113 = sext i32 %103 to i64
  %114 = getelementptr inbounds i32, ptr %14, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !24
  %116 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %113
  %117 = load i32, ptr %116, align 4, !tbaa !24
  %118 = sub nsw i32 %115, %117
  store i32 %118, ptr %54, align 4, !tbaa !24
  %119 = icmp sgt i32 %112, %118
  br i1 %119, label %122, label %120

120:                                              ; preds = %106
  %121 = icmp slt i32 %112, %118
  %spec.select = select i1 %121, i32 1, i32 %94
  br label %122

122:                                              ; preds = %120, %106, %101, %95
  %.0386 = phi i32 [ %99, %101 ], [ %99, %95 ], [ 0, %106 ], [ %spec.select, %120 ]
  %123 = xor i32 %.0386, 1
  %124 = zext nneg i32 %.0386 to i64
  %125 = getelementptr inbounds [2 x %struct.PQueueType], ptr %4, i64 0, i64 %124
  %126 = call i32 @__PQueueGetMax(ptr noundef nonnull %125) #5
  %127 = icmp eq i32 %126, -1
  %128 = trunc nuw nsw i64 %indvars.iv517 to i32
  br i1 %127, label %.loopexit429, label %129

129:                                              ; preds = %122
  %130 = sext i32 %126 to i64
  %131 = getelementptr inbounds i32, ptr %27, i64 %130
  %132 = load i32, ptr %131, align 4, !tbaa !24
  %133 = icmp eq i32 %132, -1
  %134 = zext nneg i32 %123 to i64
  br i1 %133, label %135, label %._crit_edge543

135:                                              ; preds = %129
  %136 = getelementptr inbounds [2 x %struct.PQueueType], ptr %4, i64 0, i64 %134
  %137 = getelementptr inbounds i32, ptr %14, i64 %130
  %138 = load i32, ptr %137, align 4, !tbaa !24
  %139 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %130
  %140 = getelementptr inbounds [2 x i32], ptr %139, i64 0, i64 %124
  %141 = load i32, ptr %140, align 4, !tbaa !24
  %142 = sub nsw i32 %138, %141
  %143 = call i32 @__PQueueDelete(ptr noundef nonnull %136, i32 noundef %126, i32 noundef %142) #5
  br label %._crit_edge543

._crit_edge543:                                   ; preds = %129, %135
  %144 = getelementptr inbounds i32, ptr %14, i64 %130
  %145 = load i32, ptr %144, align 4, !tbaa !24
  %146 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %130
  %147 = getelementptr inbounds [2 x i32], ptr %146, i64 0, i64 %134
  %148 = load i32, ptr %147, align 4, !tbaa !24
  %.neg = sub i32 %148, %145
  %149 = load i32, ptr %55, align 4, !tbaa !24
  %150 = add i32 %.neg, %149
  store i32 %150, ptr %55, align 4, !tbaa !24
  %151 = getelementptr inbounds i32, ptr %22, i64 %124
  %152 = load i32, ptr %151, align 4, !tbaa !24
  %153 = load i32, ptr %144, align 4, !tbaa !24
  %154 = getelementptr inbounds i32, ptr %22, i64 %134
  %155 = load i32, ptr %154, align 4, !tbaa !24
  %156 = load i32, ptr %147, align 4, !tbaa !24
  %.neg416 = add i32 %153, %152
  %157 = sub i32 %.neg416, %155
  %158 = add i32 %157, %156
  %159 = call i32 @llvm.abs.i32(i32 %158, i1 true)
  %160 = icmp slt i32 %150, %.0392458
  br i1 %160, label %170, label %161

161:                                              ; preds = %._crit_edge543
  %162 = icmp eq i32 %150, %.0392458
  %163 = icmp slt i32 %159, %.0460
  %or.cond422 = select i1 %162, i1 %163, i1 false
  br i1 %or.cond422, label %170, label %164

164:                                              ; preds = %161
  %165 = sub nsw i32 %128, %.0388459
  %166 = icmp sgt i32 %165, %89
  br i1 %166, label %167, label %170

167:                                              ; preds = %164
  %168 = add i32 %153, %150
  %169 = sub i32 %168, %156
  store i32 %169, ptr %55, align 4, !tbaa !24
  br label %.loopexit429

170:                                              ; preds = %._crit_edge543, %161, %164
  %.1393 = phi i32 [ %.0392458, %164 ], [ %.0392458, %161 ], [ %150, %._crit_edge543 ]
  %.1389 = phi i32 [ %.0388459, %164 ], [ %128, %161 ], [ %128, %._crit_edge543 ]
  %.1 = phi i32 [ %.0460, %164 ], [ %159, %161 ], [ %159, %._crit_edge543 ]
  %171 = add nsw i32 %.0396457, -1
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds i32, ptr %16, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !24
  %175 = getelementptr inbounds i32, ptr %18, i64 %130
  %176 = load i32, ptr %175, align 4, !tbaa !24
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i32, ptr %16, i64 %177
  store i32 %174, ptr %178, align 4, !tbaa !24
  %179 = load i32, ptr %175, align 4, !tbaa !24
  %180 = sext i32 %174 to i64
  %181 = getelementptr inbounds i32, ptr %18, i64 %180
  store i32 %179, ptr %181, align 4, !tbaa !24
  store i32 -1, ptr %175, align 4, !tbaa !24
  %182 = load i32, ptr %144, align 4, !tbaa !24
  %183 = load i32, ptr %151, align 4, !tbaa !24
  %184 = add nsw i32 %183, %182
  store i32 %184, ptr %151, align 4, !tbaa !24
  %185 = getelementptr inbounds i32, ptr %20, i64 %130
  store i32 %.0386, ptr %185, align 4, !tbaa !24
  store i32 %128, ptr %131, align 4, !tbaa !24
  %186 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv517
  store i32 %126, ptr %186, align 4, !tbaa !24
  %187 = getelementptr inbounds i32, ptr %10, i64 %130
  %188 = load i32, ptr %187, align 4, !tbaa !24
  %189 = getelementptr i8, ptr %187, i64 4
  %invariant.gep446 = getelementptr [2 x i32], ptr %24, i64 0, i64 %124
  %190 = load i32, ptr %189, align 4, !tbaa !24
  %191 = icmp slt i32 %188, %190
  br i1 %191, label %.lr.ph452, label %._crit_edge453

.lr.ph452:                                        ; preds = %170
  %invariant.gep = getelementptr [2 x i32], ptr %24, i64 0, i64 %134
  %192 = sub nuw nsw i32 -2, %.0386
  %.neg419 = add nuw nsw i32 %.0386, -3
  %193 = getelementptr inbounds [2 x %struct.PQueueType], ptr %4, i64 0, i64 %134
  %194 = sext i32 %188 to i64
  br label %195

195:                                              ; preds = %.lr.ph452, %277
  %indvars.iv514 = phi i64 [ %194, %.lr.ph452 ], [ %indvars.iv.next515, %277 ]
  %.1397449 = phi i32 [ %171, %.lr.ph452 ], [ %.2398, %277 ]
  %.1402448 = phi i32 [ %.0401455, %.lr.ph452 ], [ %.2403, %277 ]
  %196 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv514
  %197 = load i32, ptr %196, align 4, !tbaa !24
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %20, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !24
  %201 = icmp eq i32 %200, 2
  br i1 %201, label %202, label %217

202:                                              ; preds = %195
  %203 = getelementptr inbounds i32, ptr %14, i64 %198
  %204 = load i32, ptr %203, align 4, !tbaa !24
  %gep447 = getelementptr %struct.nrinfodef, ptr %invariant.gep446, i64 %198
  %205 = load i32, ptr %gep447, align 4, !tbaa !24
  %206 = load i32, ptr %144, align 4, !tbaa !24
  %207 = add nsw i32 %206, %205
  store i32 %207, ptr %gep447, align 4, !tbaa !24
  %208 = getelementptr inbounds i32, ptr %27, i64 %198
  %209 = load i32, ptr %208, align 4, !tbaa !24
  %210 = icmp eq i32 %209, -1
  %211 = icmp eq i32 %209, %.neg419
  %or.cond423 = select i1 %210, i1 true, i1 %211
  br i1 %or.cond423, label %212, label %277

212:                                              ; preds = %202
  %213 = sub nsw i32 %204, %205
  %214 = load i32, ptr %144, align 4, !tbaa !24
  %215 = sub nsw i32 %213, %214
  %216 = call i32 @__PQueueUpdate(ptr noundef nonnull %193, i32 noundef %197, i32 noundef %213, i32 noundef %215) #5
  br label %277

217:                                              ; preds = %195
  %218 = icmp eq i32 %200, %123
  br i1 %218, label %219, label %277

219:                                              ; preds = %217
  %220 = sext i32 %.1397449 to i64
  %221 = getelementptr inbounds i32, ptr %16, i64 %220
  store i32 %197, ptr %221, align 4, !tbaa !24
  %222 = add nsw i32 %.1397449, 1
  %223 = getelementptr inbounds i32, ptr %18, i64 %198
  store i32 %.1397449, ptr %223, align 4, !tbaa !24
  %224 = add nsw i32 %.1402448, 1
  %225 = sext i32 %.1402448 to i64
  %226 = getelementptr inbounds i32, ptr %31, i64 %225
  store i32 %197, ptr %226, align 4, !tbaa !24
  store i32 2, ptr %199, align 4, !tbaa !24
  %227 = getelementptr inbounds i32, ptr %14, i64 %198
  %228 = load i32, ptr %227, align 4, !tbaa !24
  %229 = load i32, ptr %154, align 4, !tbaa !24
  %230 = sub nsw i32 %229, %228
  store i32 %230, ptr %154, align 4, !tbaa !24
  %231 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %198
  %232 = getelementptr inbounds i8, ptr %231, i64 4
  store i32 0, ptr %232, align 4, !tbaa !24
  store i32 0, ptr %231, align 4, !tbaa !24
  %233 = getelementptr inbounds i32, ptr %10, i64 %198
  %234 = load i32, ptr %233, align 4, !tbaa !24
  %235 = getelementptr i8, ptr %233, i64 4
  %236 = load i32, ptr %235, align 4, !tbaa !24
  %237 = icmp slt i32 %234, %236
  br i1 %237, label %.lr.ph444.preheader, label %._crit_edge445

.lr.ph444.preheader:                              ; preds = %219
  %238 = sext i32 %234 to i64
  br label %.lr.ph444

.lr.ph444:                                        ; preds = %.lr.ph444.preheader, %264
  %indvars.iv511 = phi i64 [ %238, %.lr.ph444.preheader ], [ %indvars.iv.next512, %264 ]
  %239 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv511
  %240 = load i32, ptr %239, align 4, !tbaa !24
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %20, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !24
  %.not418 = icmp eq i32 %243, 2
  %244 = getelementptr inbounds i32, ptr %14, i64 %241
  %245 = load i32, ptr %244, align 4, !tbaa !24
  br i1 %.not418, label %251, label %246

246:                                              ; preds = %.lr.ph444
  %247 = sext i32 %243 to i64
  %248 = getelementptr inbounds i32, ptr %231, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !24
  %250 = add nsw i32 %249, %245
  store i32 %250, ptr %248, align 4, !tbaa !24
  br label %264

251:                                              ; preds = %.lr.ph444
  %gep = getelementptr %struct.nrinfodef, ptr %invariant.gep, i64 %241
  %252 = load i32, ptr %gep, align 4, !tbaa !24
  %253 = load i32, ptr %227, align 4, !tbaa !24
  %254 = sub nsw i32 %252, %253
  store i32 %254, ptr %gep, align 4, !tbaa !24
  %255 = getelementptr inbounds i32, ptr %27, i64 %241
  %256 = load i32, ptr %255, align 4, !tbaa !24
  %257 = icmp eq i32 %256, -1
  %258 = icmp eq i32 %256, %192
  %or.cond425 = select i1 %257, i1 true, i1 %258
  br i1 %or.cond425, label %259, label %264

259:                                              ; preds = %251
  %260 = sub nsw i32 %245, %252
  %261 = load i32, ptr %227, align 4, !tbaa !24
  %262 = add nsw i32 %261, %260
  %263 = call i32 @__PQueueUpdate(ptr noundef nonnull %125, i32 noundef %240, i32 noundef %260, i32 noundef %262) #5
  br label %264

264:                                              ; preds = %251, %246, %259
  %indvars.iv.next512 = add nsw i64 %indvars.iv511, 1
  %265 = load i32, ptr %235, align 4, !tbaa !24
  %266 = sext i32 %265 to i64
  %267 = icmp slt i64 %indvars.iv.next512, %266
  br i1 %267, label %.lr.ph444, label %._crit_edge445, !llvm.loop !30

._crit_edge445:                                   ; preds = %264, %219
  %268 = getelementptr inbounds i32, ptr %27, i64 %198
  %269 = load i32, ptr %268, align 4, !tbaa !24
  %270 = icmp eq i32 %269, -1
  br i1 %270, label %271, label %277

271:                                              ; preds = %._crit_edge445
  %272 = load i32, ptr %227, align 4, !tbaa !24
  %273 = getelementptr inbounds i32, ptr %231, i64 %134
  %274 = load i32, ptr %273, align 4, !tbaa !24
  %275 = sub nsw i32 %272, %274
  %276 = call i32 @__PQueueInsert(ptr noundef nonnull %125, i32 noundef %197, i32 noundef %275) #5
  store i32 %192, ptr %268, align 4, !tbaa !24
  br label %277

277:                                              ; preds = %202, %212, %._crit_edge445, %271, %217
  %.2403 = phi i32 [ %.1402448, %212 ], [ %224, %271 ], [ %224, %._crit_edge445 ], [ %.1402448, %217 ], [ %.1402448, %202 ]
  %.2398 = phi i32 [ %.1397449, %212 ], [ %222, %271 ], [ %222, %._crit_edge445 ], [ %.1397449, %217 ], [ %.1397449, %202 ]
  %indvars.iv.next515 = add nsw i64 %indvars.iv514, 1
  %278 = load i32, ptr %189, align 4, !tbaa !24
  %279 = sext i32 %278 to i64
  %280 = icmp slt i64 %indvars.iv.next515, %279
  br i1 %280, label %195, label %._crit_edge453, !llvm.loop !31

._crit_edge453:                                   ; preds = %277, %170
  %.1402.lcssa = phi i32 [ %.0401455, %170 ], [ %.2403, %277 ]
  %.1397.lcssa = phi i32 [ %171, %170 ], [ %.2398, %277 ]
  %indvars.iv.next518 = add nuw nsw i64 %indvars.iv517, 1
  %281 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv.next518
  store i32 %.1402.lcssa, ptr %281, align 4, !tbaa !24
  %282 = load i32, ptr %33, align 4, !tbaa !19
  %283 = and i32 %282, 32
  %.not417 = icmp eq i32 %283, 0
  br i1 %.not417, label %303, label %284

284:                                              ; preds = %._crit_edge453
  %285 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %124
  %286 = load i32, ptr %285, align 4, !tbaa !24
  %287 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %134
  %288 = load i32, ptr %287, align 4, !tbaa !24
  %289 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 %124
  %290 = load i32, ptr %289, align 4, !tbaa !24
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %14, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !24
  %294 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 %134
  %295 = load i32, ptr %294, align 4, !tbaa !24
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds i32, ptr %14, i64 %296
  %298 = load i32, ptr %297, align 4, !tbaa !24
  %299 = load i32, ptr %22, align 4, !tbaa !24
  %300 = load i32, ptr %51, align 4, !tbaa !24
  %301 = load i32, ptr %55, align 4, !tbaa !24
  %302 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %126, i32 noundef %.0386, i32 noundef %286, i32 noundef %288, i32 noundef %293, i32 noundef %298, i32 noundef %299, i32 noundef %300, i32 noundef %301)
  br label %303

303:                                              ; preds = %._crit_edge453, %284
  %exitcond521.not = icmp eq i64 %indvars.iv.next518, %wide.trip.count520
  br i1 %exitcond521.not, label %.loopexit429, label %95, !llvm.loop !32

.loopexit429:                                     ; preds = %303, %122, %88, %167
  %.0399437 = phi i32 [ %128, %167 ], [ 0, %88 ], [ %8, %303 ], [ %128, %122 ]
  %.0396435 = phi i32 [ %.0396457, %167 ], [ %59, %88 ], [ %.1397.lcssa, %303 ], [ %.0396457, %122 ]
  %.0392433 = phi i32 [ %.0392458, %167 ], [ %58, %88 ], [ %.1393, %303 ], [ %.0392458, %122 ]
  %.0388431 = phi i32 [ %.0388459, %167 ], [ -1, %88 ], [ %.1389, %303 ], [ %.0388459, %122 ]
  %.1400489 = add nsw i32 %.0399437, -1
  %304 = icmp sgt i32 %.1400489, %.0388431
  br i1 %304, label %.lr.ph494.preheader, label %._crit_edge495

.lr.ph494.preheader:                              ; preds = %.loopexit429
  %305 = sext i32 %.0399437 to i64
  %306 = add nsw i64 %305, -1
  %307 = sext i32 %.0388431 to i64
  br label %.lr.ph494

.loopexit.loopexit:                               ; preds = %._crit_edge483
  %308 = trunc nsw i64 %indvars.iv.next531 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %._crit_edge477
  %.4.lcssa = phi i32 [ %328, %._crit_edge477 ], [ %308, %.loopexit.loopexit ]
  %indvars.iv.next536 = add nsw i64 %indvars.iv535, -1
  %309 = icmp sgt i64 %indvars.iv.next536, %307
  %indvars.iv.next538 = add nsw i64 %indvars.iv537, -1
  br i1 %309, label %.lr.ph494, label %._crit_edge495, !llvm.loop !33

.lr.ph494:                                        ; preds = %.lr.ph494.preheader, %.loopexit
  %indvars.iv537 = phi i64 [ %305, %.lr.ph494.preheader ], [ %indvars.iv.next538, %.loopexit ]
  %indvars.iv535 = phi i64 [ %306, %.lr.ph494.preheader ], [ %indvars.iv.next536, %.loopexit ]
  %.3491 = phi i32 [ %.0396435, %.lr.ph494.preheader ], [ %.4.lcssa, %.loopexit ]
  %310 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv535
  %311 = load i32, ptr %310, align 4, !tbaa !24
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds i32, ptr %20, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !24
  %315 = add nsw i32 %314, 1
  %316 = srem i32 %315, 2
  %317 = getelementptr inbounds i32, ptr %14, i64 %312
  %318 = load i32, ptr %317, align 4, !tbaa !24
  %319 = load i32, ptr %55, align 4, !tbaa !24
  %320 = add nsw i32 %319, %318
  store i32 %320, ptr %55, align 4, !tbaa !24
  %321 = load i32, ptr %317, align 4, !tbaa !24
  %322 = sext i32 %314 to i64
  %323 = getelementptr inbounds i32, ptr %22, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !24
  %325 = sub nsw i32 %324, %321
  store i32 %325, ptr %323, align 4, !tbaa !24
  store i32 2, ptr %313, align 4, !tbaa !24
  %326 = sext i32 %.3491 to i64
  %327 = getelementptr inbounds i32, ptr %16, i64 %326
  store i32 %311, ptr %327, align 4, !tbaa !24
  %328 = add i32 %.3491, 1
  %329 = getelementptr inbounds i32, ptr %18, i64 %312
  store i32 %.3491, ptr %329, align 4, !tbaa !24
  %330 = getelementptr inbounds %struct.nrinfodef, ptr %24, i64 %312
  %331 = getelementptr inbounds i8, ptr %330, i64 4
  store i32 0, ptr %331, align 4, !tbaa !24
  store i32 0, ptr %330, align 4, !tbaa !24
  %332 = getelementptr inbounds i32, ptr %10, i64 %312
  %333 = load i32, ptr %332, align 4, !tbaa !24
  %334 = getelementptr i8, ptr %332, i64 4
  %invariant.gep472 = getelementptr [2 x i32], ptr %24, i64 0, i64 %322
  %335 = load i32, ptr %334, align 4, !tbaa !24
  %336 = icmp slt i32 %333, %335
  br i1 %336, label %.lr.ph476.preheader, label %._crit_edge477

.lr.ph476.preheader:                              ; preds = %.lr.ph494
  %337 = sext i32 %333 to i64
  br label %.lr.ph476

.lr.ph476:                                        ; preds = %.lr.ph476.preheader, %355
  %indvars.iv522 = phi i64 [ %337, %.lr.ph476.preheader ], [ %indvars.iv.next523, %355 ]
  %338 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv522
  %339 = load i32, ptr %338, align 4, !tbaa !24
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i32, ptr %20, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !24
  %343 = icmp eq i32 %342, 2
  br i1 %343, label %344, label %348

344:                                              ; preds = %.lr.ph476
  %345 = load i32, ptr %317, align 4, !tbaa !24
  %gep473 = getelementptr %struct.nrinfodef, ptr %invariant.gep472, i64 %340
  %346 = load i32, ptr %gep473, align 4, !tbaa !24
  %347 = sub nsw i32 %346, %345
  store i32 %347, ptr %gep473, align 4, !tbaa !24
  br label %355

348:                                              ; preds = %.lr.ph476
  %349 = getelementptr inbounds i32, ptr %14, i64 %340
  %350 = load i32, ptr %349, align 4, !tbaa !24
  %351 = sext i32 %342 to i64
  %352 = getelementptr inbounds i32, ptr %330, i64 %351
  %353 = load i32, ptr %352, align 4, !tbaa !24
  %354 = add nsw i32 %353, %350
  store i32 %354, ptr %352, align 4, !tbaa !24
  br label %355

355:                                              ; preds = %344, %348
  %indvars.iv.next523 = add nsw i64 %indvars.iv522, 1
  %356 = load i32, ptr %334, align 4, !tbaa !24
  %357 = sext i32 %356 to i64
  %358 = icmp slt i64 %indvars.iv.next523, %357
  br i1 %358, label %.lr.ph476, label %._crit_edge477, !llvm.loop !34

._crit_edge477:                                   ; preds = %355, %.lr.ph494
  %359 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv535
  %360 = load i32, ptr %359, align 4, !tbaa !24
  %361 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv537
  %362 = load i32, ptr %361, align 4, !tbaa !24
  %363 = icmp slt i32 %360, %362
  br i1 %363, label %.lr.ph487, label %.loopexit

.lr.ph487:                                        ; preds = %._crit_edge477
  %364 = sext i32 %316 to i64
  %365 = getelementptr inbounds i32, ptr %22, i64 %364
  %invariant.gep478 = getelementptr [2 x i32], ptr %24, i64 0, i64 %364
  %366 = sext i32 %360 to i64
  %367 = sext i32 %328 to i64
  br label %368

368:                                              ; preds = %.lr.ph487, %._crit_edge483
  %indvars.iv530 = phi i64 [ %367, %.lr.ph487 ], [ %indvars.iv.next531, %._crit_edge483 ]
  %indvars.iv528 = phi i64 [ %366, %.lr.ph487 ], [ %indvars.iv.next529, %._crit_edge483 ]
  %369 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv528
  %370 = load i32, ptr %369, align 4, !tbaa !24
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds i32, ptr %20, i64 %371
  store i32 %316, ptr %372, align 4, !tbaa !24
  %373 = getelementptr inbounds i32, ptr %14, i64 %371
  %374 = load i32, ptr %373, align 4, !tbaa !24
  %375 = load i32, ptr %365, align 4, !tbaa !24
  %376 = add nsw i32 %375, %374
  store i32 %376, ptr %365, align 4, !tbaa !24
  %377 = load i32, ptr %373, align 4, !tbaa !24
  %378 = load i32, ptr %55, align 4, !tbaa !24
  %379 = sub nsw i32 %378, %377
  store i32 %379, ptr %55, align 4, !tbaa !24
  %indvars.iv.next531 = add nsw i64 %indvars.iv530, -1
  %380 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.next531
  %381 = load i32, ptr %380, align 4, !tbaa !24
  %382 = getelementptr inbounds i32, ptr %18, i64 %371
  %383 = load i32, ptr %382, align 4, !tbaa !24
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %16, i64 %384
  store i32 %381, ptr %385, align 4, !tbaa !24
  %386 = load i32, ptr %382, align 4, !tbaa !24
  %387 = sext i32 %381 to i64
  %388 = getelementptr inbounds i32, ptr %18, i64 %387
  store i32 %386, ptr %388, align 4, !tbaa !24
  store i32 -1, ptr %382, align 4, !tbaa !24
  %389 = getelementptr inbounds i32, ptr %10, i64 %371
  %390 = load i32, ptr %389, align 4, !tbaa !24
  %391 = getelementptr i8, ptr %389, i64 4
  %392 = load i32, ptr %391, align 4, !tbaa !24
  %393 = icmp slt i32 %390, %392
  br i1 %393, label %.lr.ph482.preheader, label %._crit_edge483

.lr.ph482.preheader:                              ; preds = %368
  %394 = sext i32 %390 to i64
  br label %.lr.ph482

.lr.ph482:                                        ; preds = %.lr.ph482.preheader, %406
  %395 = phi i32 [ %392, %.lr.ph482.preheader ], [ %407, %406 ]
  %indvars.iv525 = phi i64 [ %394, %.lr.ph482.preheader ], [ %indvars.iv.next526, %406 ]
  %396 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv525
  %397 = load i32, ptr %396, align 4, !tbaa !24
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %20, i64 %398
  %400 = load i32, ptr %399, align 4, !tbaa !24
  %401 = icmp eq i32 %400, 2
  br i1 %401, label %402, label %406

402:                                              ; preds = %.lr.ph482
  %403 = load i32, ptr %373, align 4, !tbaa !24
  %gep479 = getelementptr %struct.nrinfodef, ptr %invariant.gep478, i64 %398
  %404 = load i32, ptr %gep479, align 4, !tbaa !24
  %405 = add nsw i32 %404, %403
  store i32 %405, ptr %gep479, align 4, !tbaa !24
  %.pre = load i32, ptr %391, align 4, !tbaa !24
  br label %406

406:                                              ; preds = %.lr.ph482, %402
  %407 = phi i32 [ %395, %.lr.ph482 ], [ %.pre, %402 ]
  %indvars.iv.next526 = add nsw i64 %indvars.iv525, 1
  %408 = sext i32 %407 to i64
  %409 = icmp slt i64 %indvars.iv.next526, %408
  br i1 %409, label %.lr.ph482, label %._crit_edge483, !llvm.loop !35

._crit_edge483:                                   ; preds = %406, %368
  %indvars.iv.next529 = add nsw i64 %indvars.iv528, 1
  %410 = load i32, ptr %361, align 4, !tbaa !24
  %411 = sext i32 %410 to i64
  %412 = icmp slt i64 %indvars.iv.next529, %411
  br i1 %412, label %368, label %.loopexit.loopexit, !llvm.loop !36

._crit_edge495:                                   ; preds = %.loopexit, %.loopexit429
  %.3.lcssa = phi i32 [ %.0396435, %.loopexit429 ], [ %.4.lcssa, %.loopexit ]
  %413 = load i32, ptr %33, align 4, !tbaa !19
  %414 = and i32 %413, 8
  %.not420 = icmp eq i32 %414, 0
  br i1 %.not420, label %419, label %415

415:                                              ; preds = %._crit_edge495
  %416 = load i32, ptr %22, align 4, !tbaa !24
  %417 = load i32, ptr %51, align 4, !tbaa !24
  %418 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %.0392433, i32 noundef %.0388431, i32 noundef %416, i32 noundef %417, i32 noundef %.3.lcssa)
  br label %419

419:                                              ; preds = %415, %._crit_edge495
  store i32 %.0392433, ptr %48, align 8, !tbaa !26
  store i32 %.3.lcssa, ptr %49, align 8, !tbaa !25
  %420 = icmp eq i32 %.0388431, -1
  %.not421 = icmp sge i32 %.0392433, %58
  %or.cond426.not554 = select i1 %420, i1 true, i1 %.not421
  %421 = add nuw nsw i32 %.0387497, 1
  %exitcond542.not = icmp eq i32 %421, %2
  %or.cond552 = select i1 %or.cond426.not554, i1 true, i1 %exitcond542.not
  br i1 %or.cond552, label %._crit_edge501, label %56, !llvm.loop !37

._crit_edge501:                                   ; preds = %419, %46
  call void @__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %4) #5
  call void @__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %26) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %29) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %8) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %8) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %8) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %4) #5
  ret void
}

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


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