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

; 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.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [56 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 @__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 @__PQueueGetMax(ptr 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

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

; Function Attrs: nounwind uwtable
define dso_local void @__FM_2WayNodeBalance(ptr noundef %0, ptr noundef %1, float noundef %2) #1 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca float, 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 ptr, align 8
  %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 %struct.PQueueType, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store float %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 8, 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 64, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %34 = load ptr, ptr %5, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.graphdef, ptr %34, i32 0, i32 2
  %36 = load i32, ptr %35, align 8, !tbaa !11
  store i32 %36, ptr %13, align 4, !tbaa !14
  %37 = load ptr, ptr %5, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.graphdef, ptr %37, i32 0, i32 4
  %39 = load ptr, ptr %38, align 8, !tbaa !15
  store ptr %39, ptr %16, align 8, !tbaa !5
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.graphdef, ptr %40, i32 0, i32 7
  %42 = load ptr, ptr %41, align 8, !tbaa !16
  store ptr %42, ptr %18, align 8, !tbaa !5
  %43 = load ptr, ptr %5, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.graphdef, ptr %43, i32 0, i32 5
  %45 = load ptr, ptr %44, align 8, !tbaa !17
  store ptr %45, ptr %17, align 8, !tbaa !5
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.graphdef, ptr %46, i32 0, i32 18
  %48 = load ptr, ptr %47, align 8, !tbaa !18
  store ptr %48, ptr %22, align 8, !tbaa !5
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.graphdef, ptr %49, i32 0, i32 17
  %51 = load ptr, ptr %50, align 8, !tbaa !19
  store ptr %51, ptr %23, align 8, !tbaa !5
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.graphdef, ptr %52, i32 0, i32 14
  %54 = load ptr, ptr %53, align 8, !tbaa !20
  store ptr %54, ptr %19, align 8, !tbaa !5
  %55 = load ptr, ptr %5, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.graphdef, ptr %55, i32 0, i32 15
  %57 = load ptr, ptr %56, align 8, !tbaa !21
  store ptr %57, ptr %20, align 8, !tbaa !5
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.graphdef, ptr %58, i32 0, i32 23
  %60 = load ptr, ptr %59, align 8, !tbaa !22
  store ptr %60, ptr %27, align 8, !tbaa !5
  %61 = load ptr, ptr %20, align 8, !tbaa !5
  %62 = getelementptr inbounds i32, ptr %61, i64 0
  %63 = load i32, ptr %62, align 4, !tbaa !14
  %64 = load ptr, ptr %20, align 8, !tbaa !5
  %65 = getelementptr inbounds i32, ptr %64, i64 1
  %66 = load i32, ptr %65, align 4, !tbaa !14
  %67 = sub nsw i32 %63, %66
  %68 = call i32 @llvm.abs.i32(i32 %67, i1 true)
  %69 = load float, ptr %6, align 4, !tbaa !9
  %70 = fpext float %69 to double
  %71 = fsub double %70, 1.000000e+00
  %72 = load ptr, ptr %20, align 8, !tbaa !5
  %73 = getelementptr inbounds i32, ptr %72, i64 0
  %74 = load i32, ptr %73, align 4, !tbaa !14
  %75 = load ptr, ptr %20, align 8, !tbaa !5
  %76 = getelementptr inbounds i32, ptr %75, i64 1
  %77 = load i32, ptr %76, align 4, !tbaa !14
  %78 = add nsw i32 %74, %77
  %79 = sitofp i32 %78 to double
  %80 = fmul double %71, %79
  %81 = fptosi double %80 to i32
  %82 = icmp slt i32 %68, %81
  br i1 %82, label %83, label %84

83:                                               ; preds = %3
  store i32 1, ptr %33, align 4
  br label %587

84:                                               ; preds = %3
  %85 = load ptr, ptr %20, align 8, !tbaa !5
  %86 = getelementptr inbounds i32, ptr %85, i64 0
  %87 = load i32, ptr %86, align 4, !tbaa !14
  %88 = load ptr, ptr %20, align 8, !tbaa !5
  %89 = getelementptr inbounds i32, ptr %88, i64 1
  %90 = load i32, ptr %89, align 4, !tbaa !14
  %91 = sub nsw i32 %87, %90
  %92 = call i32 @llvm.abs.i32(i32 %91, i1 true)
  %93 = load i32, ptr %13, align 4, !tbaa !14
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  %95 = call i32 @__idxsum(i32 noundef %93, ptr noundef %94)
  %96 = mul nsw i32 3, %95
  %97 = load i32, ptr %13, align 4, !tbaa !14
  %98 = sdiv i32 %96, %97
  %99 = icmp slt i32 %92, %98
  br i1 %99, label %100, label %101

100:                                              ; preds = %84
  store i32 1, ptr %33, align 4
  br label %587

101:                                              ; preds = %84
  %102 = load ptr, ptr %20, align 8, !tbaa !5
  %103 = getelementptr inbounds i32, ptr %102, i64 0
  %104 = load i32, ptr %103, align 4, !tbaa !14
  %105 = load ptr, ptr %20, align 8, !tbaa !5
  %106 = getelementptr inbounds i32, ptr %105, i64 1
  %107 = load i32, ptr %106, align 4, !tbaa !14
  %108 = icmp slt i32 %104, %107
  %109 = zext i1 %108 to i64
  %110 = select i1 %108, i32 0, i32 1
  store i32 %110, ptr %31, align 4, !tbaa !14
  %111 = load i32, ptr %31, align 4, !tbaa !14
  %112 = add nsw i32 %111, 1
  %113 = srem i32 %112, 2
  store i32 %113, ptr %32, align 4, !tbaa !14
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = load i32, ptr %13, align 4, !tbaa !14
  %116 = load i32, ptr %13, align 4, !tbaa !14
  %117 = load ptr, ptr %16, align 8, !tbaa !5
  %118 = load ptr, ptr %18, align 8, !tbaa !5
  %119 = load ptr, ptr %17, align 8, !tbaa !5
  %120 = call i32 @__ComputeMaxNodeGain(i32 noundef %116, ptr noundef %117, ptr noundef %118, ptr noundef %119)
  call void @__PQueueInit(ptr noundef %114, ptr noundef %26, i32 noundef %115, i32 noundef %120)
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = load i32, ptr %13, align 4, !tbaa !14
  %123 = call ptr @__idxwspacemalloc(ptr noundef %121, i32 noundef %122)
  store ptr %123, ptr %24, align 8, !tbaa !5
  %124 = load i32, ptr %13, align 4, !tbaa !14
  %125 = load ptr, ptr %4, align 8, !tbaa !5
  %126 = load i32, ptr %13, align 4, !tbaa !14
  %127 = call ptr @__idxwspacemalloc(ptr noundef %125, i32 noundef %126)
  %128 = call ptr @__idxset(i32 noundef %124, i32 noundef -1, ptr noundef %127)
  store ptr %128, ptr %25, align 8, !tbaa !5
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.controldef, ptr %129, i32 0, i32 1
  %131 = load i32, ptr %130, align 4, !tbaa !23
  %132 = and i32 %131, 8
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %134, label %151

134:                                              ; preds = %101
  %135 = load ptr, ptr %20, align 8, !tbaa !5
  %136 = getelementptr inbounds i32, ptr %135, i64 0
  %137 = load i32, ptr %136, align 4, !tbaa !14
  %138 = load ptr, ptr %20, align 8, !tbaa !5
  %139 = getelementptr inbounds i32, ptr %138, i64 1
  %140 = load i32, ptr %139, align 4, !tbaa !14
  %141 = load ptr, ptr %5, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.graphdef, ptr %141, i32 0, i32 2
  %143 = load i32, ptr %142, align 8, !tbaa !11
  %144 = load ptr, ptr %5, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.graphdef, ptr %144, i32 0, i32 16
  %146 = load i32, ptr %145, align 8, !tbaa !27
  %147 = load ptr, ptr %5, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.graphdef, ptr %147, i32 0, i32 12
  %149 = load i32, ptr %148, align 8, !tbaa !28
  %150 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %137, i32 noundef %140, i32 noundef %143, i32 noundef %146, i32 noundef %149)
  br label %151

151:                                              ; preds = %134, %101
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.graphdef, ptr %152, i32 0, i32 16
  %154 = load i32, ptr %153, align 8, !tbaa !27
  store i32 %154, ptr %14, align 4, !tbaa !14
  %155 = load i32, ptr %14, align 4, !tbaa !14
  %156 = load ptr, ptr %24, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %155, ptr noundef %156, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !14
  br label %157

157:                                              ; preds = %188, %151
  %158 = load i32, ptr %8, align 4, !tbaa !14
  %159 = load i32, ptr %14, align 4, !tbaa !14
  %160 = icmp slt i32 %158, %159
  br i1 %160, label %161, label %191

161:                                              ; preds = %157
  %162 = load ptr, ptr %22, align 8, !tbaa !5
  %163 = load ptr, ptr %24, align 8, !tbaa !5
  %164 = load i32, ptr %8, align 4, !tbaa !14
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i32, ptr %163, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !14
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i32, ptr %162, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !14
  store i32 %170, ptr %7, align 4, !tbaa !14
  %171 = load i32, ptr %7, align 4, !tbaa !14
  %172 = load ptr, ptr %17, align 8, !tbaa !5
  %173 = load i32, ptr %7, align 4, !tbaa !14
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i32, ptr %172, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !14
  %177 = load ptr, ptr %27, align 8, !tbaa !5
  %178 = load i32, ptr %7, align 4, !tbaa !14
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds %struct.nrinfodef, ptr %177, i64 %179
  %181 = getelementptr inbounds %struct.nrinfodef, ptr %180, i32 0, i32 0
  %182 = load i32, ptr %32, align 4, !tbaa !14
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds [2 x i32], ptr %181, i64 0, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !14
  %186 = sub nsw i32 %176, %185
  %187 = call i32 @__PQueueInsert(ptr noundef %26, i32 noundef %171, i32 noundef %186)
  br label %188

188:                                              ; preds = %161
  %189 = load i32, ptr %8, align 4, !tbaa !14
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %8, align 4, !tbaa !14
  br label %157, !llvm.loop !29

191:                                              ; preds = %157
  store i32 0, ptr %15, align 4, !tbaa !14
  br label %192

192:                                              ; preds = %551, %191
  %193 = load i32, ptr %15, align 4, !tbaa !14
  %194 = load i32, ptr %13, align 4, !tbaa !14
  %195 = icmp slt i32 %193, %194
  br i1 %195, label %196, label %554

196:                                              ; preds = %192
  %197 = call i32 @__PQueueGetMax(ptr noundef %26)
  store i32 %197, ptr %28, align 4, !tbaa !14
  %198 = icmp eq i32 %197, -1
  br i1 %198, label %199, label %200

199:                                              ; preds = %196
  br label %554

200:                                              ; preds = %196
  %201 = load ptr, ptr %25, align 8, !tbaa !5
  %202 = load i32, ptr %28, align 4, !tbaa !14
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds i32, ptr %201, i64 %203
  store i32 1, ptr %204, align 4, !tbaa !14
  %205 = load ptr, ptr %20, align 8, !tbaa !5
  %206 = load i32, ptr %32, align 4, !tbaa !14
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds i32, ptr %205, i64 %207
  %209 = load i32, ptr %208, align 4, !tbaa !14
  %210 = load ptr, ptr %27, align 8, !tbaa !5
  %211 = load i32, ptr %28, align 4, !tbaa !14
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds %struct.nrinfodef, ptr %210, i64 %212
  %214 = getelementptr inbounds %struct.nrinfodef, ptr %213, i32 0, i32 0
  %215 = load i32, ptr %32, align 4, !tbaa !14
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [2 x i32], ptr %214, i64 0, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !14
  %219 = sub nsw i32 %209, %218
  %220 = load ptr, ptr %20, align 8, !tbaa !5
  %221 = getelementptr inbounds i32, ptr %220, i64 0
  %222 = load i32, ptr %221, align 4, !tbaa !14
  %223 = load ptr, ptr %20, align 8, !tbaa !5
  %224 = getelementptr inbounds i32, ptr %223, i64 1
  %225 = load i32, ptr %224, align 4, !tbaa !14
  %226 = add nsw i32 %222, %225
  %227 = sdiv i32 %226, 2
  %228 = icmp slt i32 %219, %227
  br i1 %228, label %229, label %230

229:                                              ; preds = %200
  br label %551

230:                                              ; preds = %200
  %231 = load ptr, ptr %17, align 8, !tbaa !5
  %232 = load i32, ptr %28, align 4, !tbaa !14
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds i32, ptr %231, i64 %233
  %235 = load i32, ptr %234, align 4, !tbaa !14
  %236 = load ptr, ptr %27, align 8, !tbaa !5
  %237 = load i32, ptr %28, align 4, !tbaa !14
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds %struct.nrinfodef, ptr %236, i64 %238
  %240 = getelementptr inbounds %struct.nrinfodef, ptr %239, i32 0, i32 0
  %241 = load i32, ptr %32, align 4, !tbaa !14
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds [2 x i32], ptr %240, i64 0, i64 %242
  %244 = load i32, ptr %243, align 4, !tbaa !14
  %245 = sub nsw i32 %235, %244
  %246 = load ptr, ptr %20, align 8, !tbaa !5
  %247 = getelementptr inbounds i32, ptr %246, i64 2
  %248 = load i32, ptr %247, align 4, !tbaa !14
  %249 = sub nsw i32 %248, %245
  store i32 %249, ptr %247, align 4, !tbaa !14
  br label %250

250:                                              ; preds = %230
  %251 = load ptr, ptr %22, align 8, !tbaa !5
  %252 = load i32, ptr %14, align 4, !tbaa !14
  %253 = add nsw i32 %252, -1
  store i32 %253, ptr %14, align 4, !tbaa !14
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds i32, ptr %251, i64 %254
  %256 = load i32, ptr %255, align 4, !tbaa !14
  %257 = load ptr, ptr %22, align 8, !tbaa !5
  %258 = load ptr, ptr %23, align 8, !tbaa !5
  %259 = load i32, ptr %28, align 4, !tbaa !14
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds i32, ptr %258, i64 %260
  %262 = load i32, ptr %261, align 4, !tbaa !14
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %257, i64 %263
  store i32 %256, ptr %264, align 4, !tbaa !14
  %265 = load ptr, ptr %23, align 8, !tbaa !5
  %266 = load i32, ptr %28, align 4, !tbaa !14
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %265, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !14
  %270 = load ptr, ptr %23, align 8, !tbaa !5
  %271 = load ptr, ptr %22, align 8, !tbaa !5
  %272 = load i32, ptr %14, align 4, !tbaa !14
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i32, ptr %271, i64 %273
  %275 = load i32, ptr %274, align 4, !tbaa !14
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i32, ptr %270, i64 %276
  store i32 %269, ptr %277, align 4, !tbaa !14
  %278 = load ptr, ptr %23, align 8, !tbaa !5
  %279 = load i32, ptr %28, align 4, !tbaa !14
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %278, i64 %280
  store i32 -1, ptr %281, align 4, !tbaa !14
  br label %282

282:                                              ; preds = %250
  br label %283

283:                                              ; preds = %282
  %284 = load ptr, ptr %17, align 8, !tbaa !5
  %285 = load i32, ptr %28, align 4, !tbaa !14
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i32, ptr %284, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !14
  %289 = load ptr, ptr %20, align 8, !tbaa !5
  %290 = load i32, ptr %31, align 4, !tbaa !14
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %289, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !14
  %294 = add nsw i32 %293, %288
  store i32 %294, ptr %292, align 4, !tbaa !14
  %295 = load i32, ptr %31, align 4, !tbaa !14
  %296 = load ptr, ptr %19, align 8, !tbaa !5
  %297 = load i32, ptr %28, align 4, !tbaa !14
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %296, i64 %298
  store i32 %295, ptr %299, align 4, !tbaa !14
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.controldef, ptr %300, i32 0, i32 1
  %302 = load i32, ptr %301, align 4, !tbaa !23
  %303 = and i32 %302, 32
  %304 = icmp ne i32 %303, 0
  br i1 %304, label %305, label %333

305:                                              ; preds = %283
  %306 = load i32, ptr %28, align 4, !tbaa !14
  %307 = load i32, ptr %31, align 4, !tbaa !14
  %308 = load ptr, ptr %17, align 8, !tbaa !5
  %309 = load i32, ptr %28, align 4, !tbaa !14
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %308, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !14
  %313 = load ptr, ptr %27, align 8, !tbaa !5
  %314 = load i32, ptr %28, align 4, !tbaa !14
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds %struct.nrinfodef, ptr %313, i64 %315
  %317 = getelementptr inbounds %struct.nrinfodef, ptr %316, i32 0, i32 0
  %318 = load i32, ptr %32, align 4, !tbaa !14
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds [2 x i32], ptr %317, i64 0, i64 %319
  %321 = load i32, ptr %320, align 4, !tbaa !14
  %322 = sub nsw i32 %312, %321
  %323 = load ptr, ptr %20, align 8, !tbaa !5
  %324 = getelementptr inbounds i32, ptr %323, i64 0
  %325 = load i32, ptr %324, align 4, !tbaa !14
  %326 = load ptr, ptr %20, align 8, !tbaa !5
  %327 = getelementptr inbounds i32, ptr %326, i64 1
  %328 = load i32, ptr %327, align 4, !tbaa !14
  %329 = load ptr, ptr %20, align 8, !tbaa !5
  %330 = getelementptr inbounds i32, ptr %329, i64 2
  %331 = load i32, ptr %330, align 4, !tbaa !14
  %332 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef %306, i32 noundef %307, i32 noundef %322, i32 noundef %325, i32 noundef %328, i32 noundef %331)
  br label %333

333:                                              ; preds = %305, %283
  %334 = load ptr, ptr %16, align 8, !tbaa !5
  %335 = load i32, ptr %28, align 4, !tbaa !14
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i32, ptr %334, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !14
  store i32 %338, ptr %9, align 4, !tbaa !14
  br label %339

339:                                              ; preds = %534, %333
  %340 = load i32, ptr %9, align 4, !tbaa !14
  %341 = load ptr, ptr %16, align 8, !tbaa !5
  %342 = load i32, ptr %28, align 4, !tbaa !14
  %343 = add nsw i32 %342, 1
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %341, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !14
  %347 = icmp slt i32 %340, %346
  br i1 %347, label %348, label %537

348:                                              ; preds = %339
  %349 = load ptr, ptr %18, align 8, !tbaa !5
  %350 = load i32, ptr %9, align 4, !tbaa !14
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds i32, ptr %349, i64 %351
  %353 = load i32, ptr %352, align 4, !tbaa !14
  store i32 %353, ptr %10, align 4, !tbaa !14
  %354 = load ptr, ptr %19, align 8, !tbaa !5
  %355 = load i32, ptr %10, align 4, !tbaa !14
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !14
  %359 = icmp eq i32 %358, 2
  br i1 %359, label %360, label %376

360:                                              ; preds = %348
  %361 = load ptr, ptr %17, align 8, !tbaa !5
  %362 = load i32, ptr %28, align 4, !tbaa !14
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i32, ptr %361, i64 %363
  %365 = load i32, ptr %364, align 4, !tbaa !14
  %366 = load ptr, ptr %27, align 8, !tbaa !5
  %367 = load i32, ptr %10, align 4, !tbaa !14
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds %struct.nrinfodef, ptr %366, i64 %368
  %370 = getelementptr inbounds %struct.nrinfodef, ptr %369, i32 0, i32 0
  %371 = load i32, ptr %31, align 4, !tbaa !14
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [2 x i32], ptr %370, i64 0, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !14
  %375 = add nsw i32 %374, %365
  store i32 %375, ptr %373, align 4, !tbaa !14
  br label %533

376:                                              ; preds = %348
  %377 = load ptr, ptr %19, align 8, !tbaa !5
  %378 = load i32, ptr %10, align 4, !tbaa !14
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds i32, ptr %377, i64 %379
  %381 = load i32, ptr %380, align 4, !tbaa !14
  %382 = load i32, ptr %32, align 4, !tbaa !14
  %383 = icmp eq i32 %381, %382
  br i1 %383, label %384, label %532

384:                                              ; preds = %376
  br label %385

385:                                              ; preds = %384
  %386 = load i32, ptr %10, align 4, !tbaa !14
  %387 = load ptr, ptr %22, align 8, !tbaa !5
  %388 = load i32, ptr %14, align 4, !tbaa !14
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds i32, ptr %387, i64 %389
  store i32 %386, ptr %390, align 4, !tbaa !14
  %391 = load i32, ptr %14, align 4, !tbaa !14
  %392 = add nsw i32 %391, 1
  store i32 %392, ptr %14, align 4, !tbaa !14
  %393 = load ptr, ptr %23, align 8, !tbaa !5
  %394 = load i32, ptr %10, align 4, !tbaa !14
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds i32, ptr %393, i64 %395
  store i32 %391, ptr %396, align 4, !tbaa !14
  br label %397

397:                                              ; preds = %385
  br label %398

398:                                              ; preds = %397
  %399 = load ptr, ptr %19, align 8, !tbaa !5
  %400 = load i32, ptr %10, align 4, !tbaa !14
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds i32, ptr %399, i64 %401
  store i32 2, ptr %402, align 4, !tbaa !14
  %403 = load ptr, ptr %17, align 8, !tbaa !5
  %404 = load i32, ptr %10, align 4, !tbaa !14
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %403, i64 %405
  %407 = load i32, ptr %406, align 4, !tbaa !14
  %408 = load ptr, ptr %20, align 8, !tbaa !5
  %409 = load i32, ptr %32, align 4, !tbaa !14
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds i32, ptr %408, i64 %410
  %412 = load i32, ptr %411, align 4, !tbaa !14
  %413 = sub nsw i32 %412, %407
  store i32 %413, ptr %411, align 4, !tbaa !14
  %414 = load ptr, ptr %27, align 8, !tbaa !5
  %415 = load i32, ptr %10, align 4, !tbaa !14
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds %struct.nrinfodef, ptr %414, i64 %416
  %418 = getelementptr inbounds %struct.nrinfodef, ptr %417, i32 0, i32 0
  %419 = getelementptr inbounds [2 x i32], ptr %418, i64 0, i64 0
  store ptr %419, ptr %21, align 8, !tbaa !5
  %420 = load ptr, ptr %21, align 8, !tbaa !5
  %421 = getelementptr inbounds i32, ptr %420, i64 1
  store i32 0, ptr %421, align 4, !tbaa !14
  %422 = load ptr, ptr %21, align 8, !tbaa !5
  %423 = getelementptr inbounds i32, ptr %422, i64 0
  store i32 0, ptr %423, align 4, !tbaa !14
  %424 = load ptr, ptr %16, align 8, !tbaa !5
  %425 = load i32, ptr %10, align 4, !tbaa !14
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds i32, ptr %424, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !14
  store i32 %428, ptr %11, align 4, !tbaa !14
  br label %429

429:                                              ; preds = %515, %398
  %430 = load i32, ptr %11, align 4, !tbaa !14
  %431 = load ptr, ptr %16, align 8, !tbaa !5
  %432 = load i32, ptr %10, align 4, !tbaa !14
  %433 = add nsw i32 %432, 1
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds i32, ptr %431, i64 %434
  %436 = load i32, ptr %435, align 4, !tbaa !14
  %437 = icmp slt i32 %430, %436
  br i1 %437, label %438, label %518

438:                                              ; preds = %429
  %439 = load ptr, ptr %18, align 8, !tbaa !5
  %440 = load i32, ptr %11, align 4, !tbaa !14
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds i32, ptr %439, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !14
  store i32 %443, ptr %12, align 4, !tbaa !14
  %444 = load ptr, ptr %19, align 8, !tbaa !5
  %445 = load i32, ptr %12, align 4, !tbaa !14
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !14
  %449 = icmp ne i32 %448, 2
  br i1 %449, label %450, label %466

450:                                              ; preds = %438
  %451 = load ptr, ptr %17, align 8, !tbaa !5
  %452 = load i32, ptr %12, align 4, !tbaa !14
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds i32, ptr %451, i64 %453
  %455 = load i32, ptr %454, align 4, !tbaa !14
  %456 = load ptr, ptr %21, align 8, !tbaa !5
  %457 = load ptr, ptr %19, align 8, !tbaa !5
  %458 = load i32, ptr %12, align 4, !tbaa !14
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %457, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !14
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %456, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !14
  %465 = add nsw i32 %464, %455
  store i32 %465, ptr %463, align 4, !tbaa !14
  br label %514

466:                                              ; preds = %438
  %467 = load ptr, ptr %17, align 8, !tbaa !5
  %468 = load i32, ptr %12, align 4, !tbaa !14
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds i32, ptr %467, i64 %469
  %471 = load i32, ptr %470, align 4, !tbaa !14
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = load i32, ptr %12, align 4, !tbaa !14
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds %struct.nrinfodef, ptr %472, i64 %474
  %476 = getelementptr inbounds %struct.nrinfodef, ptr %475, i32 0, i32 0
  %477 = load i32, ptr %32, align 4, !tbaa !14
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [2 x i32], ptr %476, i64 0, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !14
  %481 = sub nsw i32 %471, %480
  store i32 %481, ptr %29, align 4, !tbaa !14
  %482 = load ptr, ptr %17, align 8, !tbaa !5
  %483 = load i32, ptr %10, align 4, !tbaa !14
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds i32, ptr %482, i64 %484
  %486 = load i32, ptr %485, align 4, !tbaa !14
  %487 = load ptr, ptr %27, align 8, !tbaa !5
  %488 = load i32, ptr %12, align 4, !tbaa !14
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds %struct.nrinfodef, ptr %487, i64 %489
  %491 = getelementptr inbounds %struct.nrinfodef, ptr %490, i32 0, i32 0
  %492 = load i32, ptr %32, align 4, !tbaa !14
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds [2 x i32], ptr %491, i64 0, i64 %493
  %495 = load i32, ptr %494, align 4, !tbaa !14
  %496 = sub nsw i32 %495, %486
  store i32 %496, ptr %494, align 4, !tbaa !14
  %497 = load ptr, ptr %25, align 8, !tbaa !5
  %498 = load i32, ptr %12, align 4, !tbaa !14
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i32, ptr %497, i64 %499
  %501 = load i32, ptr %500, align 4, !tbaa !14
  %502 = icmp eq i32 %501, -1
  br i1 %502, label %503, label %513

503:                                              ; preds = %466
  %504 = load i32, ptr %12, align 4, !tbaa !14
  %505 = load i32, ptr %29, align 4, !tbaa !14
  %506 = load i32, ptr %29, align 4, !tbaa !14
  %507 = load ptr, ptr %17, align 8, !tbaa !5
  %508 = load i32, ptr %10, align 4, !tbaa !14
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds i32, ptr %507, i64 %509
  %511 = load i32, ptr %510, align 4, !tbaa !14
  %512 = add nsw i32 %506, %511
  call void @__PQueueUpdateUp(ptr noundef %26, i32 noundef %504, i32 noundef %505, i32 noundef %512)
  br label %513

513:                                              ; preds = %503, %466
  br label %514

514:                                              ; preds = %513, %450
  br label %515

515:                                              ; preds = %514
  %516 = load i32, ptr %11, align 4, !tbaa !14
  %517 = add nsw i32 %516, 1
  store i32 %517, ptr %11, align 4, !tbaa !14
  br label %429, !llvm.loop !31

518:                                              ; preds = %429
  %519 = load i32, ptr %10, align 4, !tbaa !14
  %520 = load ptr, ptr %17, align 8, !tbaa !5
  %521 = load i32, ptr %10, align 4, !tbaa !14
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds i32, ptr %520, i64 %522
  %524 = load i32, ptr %523, align 4, !tbaa !14
  %525 = load ptr, ptr %21, align 8, !tbaa !5
  %526 = load i32, ptr %32, align 4, !tbaa !14
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds i32, ptr %525, i64 %527
  %529 = load i32, ptr %528, align 4, !tbaa !14
  %530 = sub nsw i32 %524, %529
  %531 = call i32 @__PQueueInsert(ptr noundef %26, i32 noundef %519, i32 noundef %530)
  br label %532

532:                                              ; preds = %518, %376
  br label %533

533:                                              ; preds = %532, %360
  br label %534

534:                                              ; preds = %533
  %535 = load i32, ptr %9, align 4, !tbaa !14
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr %9, align 4, !tbaa !14
  br label %339, !llvm.loop !32

537:                                              ; preds = %339
  %538 = load ptr, ptr %20, align 8, !tbaa !5
  %539 = load i32, ptr %31, align 4, !tbaa !14
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds i32, ptr %538, i64 %540
  %542 = load i32, ptr %541, align 4, !tbaa !14
  %543 = load ptr, ptr %20, align 8, !tbaa !5
  %544 = load i32, ptr %32, align 4, !tbaa !14
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %543, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !14
  %548 = icmp sgt i32 %542, %547
  br i1 %548, label %549, label %550

549:                                              ; preds = %537
  br label %554

550:                                              ; preds = %537
  br label %551

551:                                              ; preds = %550, %229
  %552 = load i32, ptr %15, align 4, !tbaa !14
  %553 = add nsw i32 %552, 1
  store i32 %553, ptr %15, align 4, !tbaa !14
  br label %192, !llvm.loop !33

554:                                              ; preds = %549, %199, %192
  %555 = load ptr, ptr %4, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.controldef, ptr %555, i32 0, i32 1
  %557 = load i32, ptr %556, align 4, !tbaa !23
  %558 = and i32 %557, 8
  %559 = icmp ne i32 %558, 0
  br i1 %559, label %560, label %573

560:                                              ; preds = %554
  %561 = load ptr, ptr %20, align 8, !tbaa !5
  %562 = getelementptr inbounds i32, ptr %561, i64 2
  %563 = load i32, ptr %562, align 4, !tbaa !14
  %564 = load i32, ptr %15, align 4, !tbaa !14
  %565 = load ptr, ptr %20, align 8, !tbaa !5
  %566 = getelementptr inbounds i32, ptr %565, i64 0
  %567 = load i32, ptr %566, align 4, !tbaa !14
  %568 = load ptr, ptr %20, align 8, !tbaa !5
  %569 = getelementptr inbounds i32, ptr %568, i64 1
  %570 = load i32, ptr %569, align 4, !tbaa !14
  %571 = load i32, ptr %14, align 4, !tbaa !14
  %572 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %563, i32 noundef %564, i32 noundef %567, i32 noundef %570, i32 noundef %571)
  br label %573

573:                                              ; preds = %560, %554
  %574 = load ptr, ptr %20, align 8, !tbaa !5
  %575 = getelementptr inbounds i32, ptr %574, i64 2
  %576 = load i32, ptr %575, align 4, !tbaa !14
  %577 = load ptr, ptr %5, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.graphdef, ptr %577, i32 0, i32 12
  store i32 %576, ptr %578, align 8, !tbaa !28
  %579 = load i32, ptr %14, align 4, !tbaa !14
  %580 = load ptr, ptr %5, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.graphdef, ptr %580, i32 0, i32 16
  store i32 %579, ptr %581, align 8, !tbaa !27
  %582 = load ptr, ptr %4, align 8, !tbaa !5
  call void @__PQueueFree(ptr noundef %582, ptr noundef %26)
  %583 = load ptr, ptr %4, align 8, !tbaa !5
  %584 = load i32, ptr %13, align 4, !tbaa !14
  call void @__idxwspacefree(ptr noundef %583, i32 noundef %584)
  %585 = load ptr, ptr %4, align 8, !tbaa !5
  %586 = load i32, ptr %13, align 4, !tbaa !14
  call void @__idxwspacefree(ptr noundef %585, i32 noundef %586)
  store i32 0, ptr %33, align 4
  br label %587

587:                                              ; preds = %573, %100, %83
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 64, 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 8, 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
  %588 = load i32, ptr %33, align 4
  switch i32 %588, label %590 [
    i32 0, label %589
    i32 1, label %589
  ]

589:                                              ; preds = %587, %587
  ret void

590:                                              ; preds = %587
  unreachable
}

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

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 = !{!"float", !7, i64 0}
!11 = !{!12, !13, i64 16}
!12 = !{!"graphdef", !6, i64 0, !6, i64 8, !13, i64 16, !13, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !13, i64 88, !13, i64 92, !6, i64 96, !6, i64 104, !13, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !13, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208}
!13 = !{!"int", !7, i64 0}
!14 = !{!13, !13, i64 0}
!15 = !{!12, !6, i64 24}
!16 = !{!12, !6, i64 48}
!17 = !{!12, !6, i64 32}
!18 = !{!12, !6, i64 128}
!19 = !{!12, !6, i64 120}
!20 = !{!12, !6, i64 96}
!21 = !{!12, !6, i64 104}
!22 = !{!12, !6, i64 168}
!23 = !{!24, !13, i64 4}
!24 = !{!"controldef", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !10, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !25, i64 48, !26, i64 104, !26, i64 112, !26, i64 120, !26, i64 128, !26, i64 136, !26, i64 144, !26, i64 152, !26, i64 160, !26, i64 168, !26, i64 176, !26, i64 184, !26, i64 192, !26, i64 200, !26, i64 208, !26, i64 216, !26, i64 224}
!25 = !{!"workspacedef", !6, i64 0, !13, i64 8, !13, i64 12, !6, i64 16, !6, i64 24, !13, i64 32, !6, i64 40, !6, i64 48}
!26 = !{!"double", !7, i64 0}
!27 = !{!12, !13, i64 112}
!28 = !{!12, !13, i64 88}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !30}


; 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.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [56 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 @__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 @__PQueueGetMax(ptr 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

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

; Function Attrs: nounwind uwtable
define dso_local void @__FM_2WayNodeBalance(ptr noundef %0, ptr nocapture noundef %1, float noundef %2) local_unnamed_addr #1 {
  %4 = alloca %struct.PQueueType, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #5
  %5 = getelementptr inbounds i8, ptr %1, i64 16
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 24
  %8 = load ptr, ptr %7, align 8, !tbaa !11
  %9 = getelementptr inbounds i8, ptr %1, i64 48
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %1, i64 32
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 128
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %1, i64 120
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %1, i64 96
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 104
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %1, i64 168
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = load i32, ptr %20, align 4, !tbaa !19
  %24 = getelementptr inbounds i8, ptr %20, i64 4
  %25 = load i32, ptr %24, align 4, !tbaa !19
  %26 = sub nsw i32 %23, %25
  %27 = tail call i32 @llvm.abs.i32(i32 %26, i1 true)
  %28 = fpext float %2 to double
  %29 = fadd double %28, -1.000000e+00
  %30 = add nsw i32 %25, %23
  %31 = sitofp i32 %30 to double
  %32 = fmul double %29, %31
  %33 = fptosi double %32 to i32
  %34 = icmp slt i32 %27, %33
  br i1 %34, label %218, label %35

35:                                               ; preds = %3
  %36 = tail call i32 @__idxsum(i32 noundef %6, ptr noundef %12) #5
  %37 = mul nsw i32 %36, 3
  %38 = sdiv i32 %37, %6
  %39 = icmp slt i32 %27, %38
  br i1 %39, label %218, label %40

40:                                               ; preds = %35
  %41 = load i32, ptr %20, align 4, !tbaa !19
  %42 = load i32, ptr %24, align 4, !tbaa !19
  %43 = icmp sge i32 %41, %42
  %44 = zext i1 %43 to i32
  %not. = xor i1 %43, true
  %45 = zext i1 %not. to i32
  %46 = tail call i32 @__ComputeMaxNodeGain(i32 noundef %6, ptr noundef %8, ptr noundef %10, ptr noundef %12)
  call void @__PQueueInit(ptr noundef %0, ptr noundef nonnull %4, i32 noundef %6, i32 noundef %46) #5
  %47 = call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %6) #5
  %48 = call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %6) #5
  %49 = call ptr @__idxset(i32 noundef %6, i32 noundef -1, ptr noundef %48) #5
  %50 = getelementptr inbounds i8, ptr %0, i64 4
  %51 = load i32, ptr %50, align 4, !tbaa !20
  %52 = and i32 %51, 8
  %.not = icmp eq i32 %52, 0
  br i1 %.not, label %62, label %53

53:                                               ; preds = %40
  %54 = load i32, ptr %20, align 4, !tbaa !19
  %55 = load i32, ptr %24, align 4, !tbaa !19
  %56 = load i32, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %1, i64 112
  %58 = load i32, ptr %57, align 8, !tbaa !25
  %59 = getelementptr inbounds i8, ptr %1, i64 88
  %60 = load i32, ptr %59, align 8, !tbaa !26
  %61 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %54, i32 noundef %55, i32 noundef %56, i32 noundef %58, i32 noundef %60)
  br label %62

62:                                               ; preds = %53, %40
  %63 = getelementptr inbounds i8, ptr %1, i64 112
  %64 = load i32, ptr %63, align 8, !tbaa !25
  call void @__RandomPermute(i32 noundef %64, ptr noundef %47, i32 noundef 1) #5
  %65 = icmp sgt i32 %64, 0
  br i1 %65, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %62
  %66 = zext i1 %not. to i64
  %invariant.gep = getelementptr [2 x i32], ptr %22, i64 0, i64 %66
  %wide.trip.count = zext nneg i32 %64 to i64
  br label %73

.preheader:                                       ; preds = %73, %62
  %67 = icmp sgt i32 %6, 0
  br i1 %67, label %.lr.ph218, label %._crit_edge219

.lr.ph218:                                        ; preds = %.preheader
  %68 = zext i1 %not. to i64
  %69 = getelementptr inbounds i32, ptr %20, i64 %68
  %invariant.gep228 = getelementptr [2 x i32], ptr %22, i64 0, i64 %68
  %70 = getelementptr inbounds i8, ptr %20, i64 8
  %71 = zext i1 %43 to i64
  %72 = getelementptr inbounds i32, ptr %20, i64 %71
  %invariant.gep209 = getelementptr [2 x i32], ptr %22, i64 0, i64 %71
  br label %85

73:                                               ; preds = %.lr.ph, %73
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %73 ]
  %74 = getelementptr inbounds i32, ptr %47, i64 %indvars.iv
  %75 = load i32, ptr %74, align 4, !tbaa !19
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds i32, ptr %14, i64 %76
  %78 = load i32, ptr %77, align 4, !tbaa !19
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %12, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !19
  %gep = getelementptr %struct.nrinfodef, ptr %invariant.gep, i64 %79
  %82 = load i32, ptr %gep, align 4, !tbaa !19
  %83 = sub nsw i32 %81, %82
  %84 = call i32 @__PQueueInsert(ptr noundef nonnull %4, i32 noundef %78, i32 noundef %83) #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 %.preheader, label %73, !llvm.loop !27

85:                                               ; preds = %.lr.ph218, %204
  %.0193217 = phi i32 [ %64, %.lr.ph218 ], [ %.3, %204 ]
  %.0194216 = phi i32 [ 0, %.lr.ph218 ], [ %205, %204 ]
  %86 = call i32 @__PQueueGetMax(ptr noundef nonnull %4) #5
  %87 = icmp eq i32 %86, -1
  br i1 %87, label %._crit_edge219, label %88

88:                                               ; preds = %85
  %89 = sext i32 %86 to i64
  %90 = getelementptr inbounds i32, ptr %49, i64 %89
  store i32 1, ptr %90, align 4, !tbaa !19
  %91 = load i32, ptr %69, align 4, !tbaa !19
  %gep229 = getelementptr %struct.nrinfodef, ptr %invariant.gep228, i64 %89
  %92 = load i32, ptr %gep229, align 4, !tbaa !19
  %93 = sub nsw i32 %91, %92
  %94 = load i32, ptr %20, align 4, !tbaa !19
  %95 = load i32, ptr %24, align 4, !tbaa !19
  %96 = add nsw i32 %95, %94
  %97 = sdiv i32 %96, 2
  %98 = icmp slt i32 %93, %97
  br i1 %98, label %204, label %99

99:                                               ; preds = %88
  %100 = getelementptr inbounds i32, ptr %12, i64 %89
  %101 = load i32, ptr %100, align 4, !tbaa !19
  %.neg = sub i32 %92, %101
  %102 = load i32, ptr %70, align 4, !tbaa !19
  %103 = add i32 %.neg, %102
  store i32 %103, ptr %70, align 4, !tbaa !19
  %104 = add nsw i32 %.0193217, -1
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds i32, ptr %14, i64 %105
  %107 = load i32, ptr %106, align 4, !tbaa !19
  %108 = getelementptr inbounds i32, ptr %16, i64 %89
  %109 = load i32, ptr %108, align 4, !tbaa !19
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %14, i64 %110
  store i32 %107, ptr %111, align 4, !tbaa !19
  %112 = load i32, ptr %108, align 4, !tbaa !19
  %113 = sext i32 %107 to i64
  %114 = getelementptr inbounds i32, ptr %16, i64 %113
  store i32 %112, ptr %114, align 4, !tbaa !19
  store i32 -1, ptr %108, align 4, !tbaa !19
  %115 = load i32, ptr %100, align 4, !tbaa !19
  %116 = load i32, ptr %72, align 4, !tbaa !19
  %117 = add nsw i32 %116, %115
  store i32 %117, ptr %72, align 4, !tbaa !19
  %118 = getelementptr inbounds i32, ptr %18, i64 %89
  store i32 %44, ptr %118, align 4, !tbaa !19
  %119 = load i32, ptr %50, align 4, !tbaa !20
  %120 = and i32 %119, 32
  %.not200 = icmp eq i32 %120, 0
  br i1 %.not200, label %129, label %121

121:                                              ; preds = %99
  %122 = load i32, ptr %100, align 4, !tbaa !19
  %123 = load i32, ptr %gep229, align 4, !tbaa !19
  %124 = sub nsw i32 %122, %123
  %125 = load i32, ptr %20, align 4, !tbaa !19
  %126 = load i32, ptr %24, align 4, !tbaa !19
  %127 = load i32, ptr %70, align 4, !tbaa !19
  %128 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef %86, i32 noundef %44, i32 noundef %124, i32 noundef %125, i32 noundef %126, i32 noundef %127)
  br label %129

129:                                              ; preds = %121, %99
  %130 = getelementptr inbounds i32, ptr %8, i64 %89
  %131 = load i32, ptr %130, align 4, !tbaa !19
  %132 = getelementptr i8, ptr %130, i64 4
  %133 = load i32, ptr %132, align 4, !tbaa !19
  %134 = icmp slt i32 %131, %133
  br i1 %134, label %.lr.ph214.preheader, label %._crit_edge215

.lr.ph214.preheader:                              ; preds = %129
  %135 = sext i32 %131 to i64
  br label %.lr.ph214

.lr.ph214:                                        ; preds = %.lr.ph214.preheader, %197
  %indvars.iv234 = phi i64 [ %135, %.lr.ph214.preheader ], [ %indvars.iv.next235, %197 ]
  %.1211 = phi i32 [ %104, %.lr.ph214.preheader ], [ %.2, %197 ]
  %136 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv234
  %137 = load i32, ptr %136, align 4, !tbaa !19
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds i32, ptr %18, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !19
  %141 = icmp eq i32 %140, 2
  br i1 %141, label %142, label %146

142:                                              ; preds = %.lr.ph214
  %143 = load i32, ptr %100, align 4, !tbaa !19
  %gep210 = getelementptr %struct.nrinfodef, ptr %invariant.gep209, i64 %138
  %144 = load i32, ptr %gep210, align 4, !tbaa !19
  %145 = add nsw i32 %144, %143
  store i32 %145, ptr %gep210, align 4, !tbaa !19
  br label %197

146:                                              ; preds = %.lr.ph214
  %147 = icmp eq i32 %140, %45
  br i1 %147, label %148, label %197

148:                                              ; preds = %146
  %149 = sext i32 %.1211 to i64
  %150 = getelementptr inbounds i32, ptr %14, i64 %149
  store i32 %137, ptr %150, align 4, !tbaa !19
  %151 = add nsw i32 %.1211, 1
  %152 = getelementptr inbounds i32, ptr %16, i64 %138
  store i32 %.1211, ptr %152, align 4, !tbaa !19
  store i32 2, ptr %139, align 4, !tbaa !19
  %153 = getelementptr inbounds i32, ptr %12, i64 %138
  %154 = load i32, ptr %153, align 4, !tbaa !19
  %155 = load i32, ptr %69, align 4, !tbaa !19
  %156 = sub nsw i32 %155, %154
  store i32 %156, ptr %69, align 4, !tbaa !19
  %157 = getelementptr inbounds %struct.nrinfodef, ptr %22, i64 %138
  %158 = getelementptr inbounds i8, ptr %157, i64 4
  store i32 0, ptr %158, align 4, !tbaa !19
  store i32 0, ptr %157, align 4, !tbaa !19
  %159 = getelementptr inbounds i32, ptr %8, i64 %138
  %160 = load i32, ptr %159, align 4, !tbaa !19
  %161 = getelementptr i8, ptr %159, i64 4
  %162 = load i32, ptr %161, align 4, !tbaa !19
  %163 = icmp slt i32 %160, %162
  br i1 %163, label %.lr.ph208.preheader, label %._crit_edge

.lr.ph208.preheader:                              ; preds = %148
  %164 = sext i32 %160 to i64
  br label %.lr.ph208

.lr.ph208:                                        ; preds = %.lr.ph208.preheader, %188
  %indvars.iv231 = phi i64 [ %164, %.lr.ph208.preheader ], [ %indvars.iv.next232, %188 ]
  %165 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv231
  %166 = load i32, ptr %165, align 4, !tbaa !19
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds i32, ptr %18, i64 %167
  %169 = load i32, ptr %168, align 4, !tbaa !19
  %.not201 = icmp eq i32 %169, 2
  %170 = getelementptr inbounds i32, ptr %12, i64 %167
  %171 = load i32, ptr %170, align 4, !tbaa !19
  br i1 %.not201, label %177, label %172

172:                                              ; preds = %.lr.ph208
  %173 = sext i32 %169 to i64
  %174 = getelementptr inbounds i32, ptr %157, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !19
  %176 = add nsw i32 %175, %171
  store i32 %176, ptr %174, align 4, !tbaa !19
  br label %188

177:                                              ; preds = %.lr.ph208
  %gep206 = getelementptr %struct.nrinfodef, ptr %invariant.gep228, i64 %167
  %178 = load i32, ptr %gep206, align 4, !tbaa !19
  %179 = load i32, ptr %153, align 4, !tbaa !19
  %180 = sub nsw i32 %178, %179
  store i32 %180, ptr %gep206, align 4, !tbaa !19
  %181 = getelementptr inbounds i32, ptr %49, i64 %167
  %182 = load i32, ptr %181, align 4, !tbaa !19
  %183 = icmp eq i32 %182, -1
  br i1 %183, label %184, label %188

184:                                              ; preds = %177
  %185 = sub nsw i32 %171, %178
  %186 = load i32, ptr %153, align 4, !tbaa !19
  %187 = add nsw i32 %186, %185
  call void @__PQueueUpdateUp(ptr noundef nonnull %4, i32 noundef %166, i32 noundef %185, i32 noundef %187) #5
  br label %188

188:                                              ; preds = %172, %184, %177
  %indvars.iv.next232 = add nsw i64 %indvars.iv231, 1
  %189 = load i32, ptr %161, align 4, !tbaa !19
  %190 = sext i32 %189 to i64
  %191 = icmp slt i64 %indvars.iv.next232, %190
  br i1 %191, label %.lr.ph208, label %._crit_edge, !llvm.loop !29

._crit_edge:                                      ; preds = %188, %148
  %192 = load i32, ptr %153, align 4, !tbaa !19
  %193 = getelementptr inbounds i32, ptr %157, i64 %68
  %194 = load i32, ptr %193, align 4, !tbaa !19
  %195 = sub nsw i32 %192, %194
  %196 = call i32 @__PQueueInsert(ptr noundef nonnull %4, i32 noundef %137, i32 noundef %195) #5
  br label %197

197:                                              ; preds = %142, %._crit_edge, %146
  %.2 = phi i32 [ %.1211, %142 ], [ %151, %._crit_edge ], [ %.1211, %146 ]
  %indvars.iv.next235 = add nsw i64 %indvars.iv234, 1
  %198 = load i32, ptr %132, align 4, !tbaa !19
  %199 = sext i32 %198 to i64
  %200 = icmp slt i64 %indvars.iv.next235, %199
  br i1 %200, label %.lr.ph214, label %._crit_edge215, !llvm.loop !30

._crit_edge215:                                   ; preds = %197, %129
  %.1.lcssa = phi i32 [ %104, %129 ], [ %.2, %197 ]
  %201 = load i32, ptr %72, align 4, !tbaa !19
  %202 = load i32, ptr %69, align 4, !tbaa !19
  %203 = icmp sgt i32 %201, %202
  br i1 %203, label %._crit_edge219, label %204

204:                                              ; preds = %._crit_edge215, %88
  %.3 = phi i32 [ %.0193217, %88 ], [ %.1.lcssa, %._crit_edge215 ]
  %205 = add nuw nsw i32 %.0194216, 1
  %exitcond237.not = icmp eq i32 %205, %6
  br i1 %exitcond237.not, label %._crit_edge219, label %85, !llvm.loop !31

._crit_edge219:                                   ; preds = %204, %85, %._crit_edge215, %.preheader
  %.0194.lcssa = phi i32 [ 0, %.preheader ], [ %.0194216, %._crit_edge215 ], [ %.0194216, %85 ], [ %6, %204 ]
  %.4 = phi i32 [ %64, %.preheader ], [ %.1.lcssa, %._crit_edge215 ], [ %.0193217, %85 ], [ %.3, %204 ]
  %206 = load i32, ptr %50, align 4, !tbaa !20
  %207 = and i32 %206, 8
  %.not202 = icmp eq i32 %207, 0
  br i1 %.not202, label %214, label %208

208:                                              ; preds = %._crit_edge219
  %209 = getelementptr inbounds i8, ptr %20, i64 8
  %210 = load i32, ptr %209, align 4, !tbaa !19
  %211 = load i32, ptr %20, align 4, !tbaa !19
  %212 = load i32, ptr %24, align 4, !tbaa !19
  %213 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %210, i32 noundef %.0194.lcssa, i32 noundef %211, i32 noundef %212, i32 noundef %.4)
  br label %214

214:                                              ; preds = %208, %._crit_edge219
  %215 = getelementptr inbounds i8, ptr %20, i64 8
  %216 = load i32, ptr %215, align 4, !tbaa !19
  %217 = getelementptr inbounds i8, ptr %1, i64 88
  store i32 %216, ptr %217, align 8, !tbaa !26
  store i32 %.4, ptr %63, align 8, !tbaa !25
  call void @__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %4) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %6) #5
  call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %6) #5
  br label %218

218:                                              ; preds = %35, %3, %214
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #5
  ret void
}

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

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 = !{!10, !10, i64 0}
!20 = !{!21, !10, i64 4}
!21 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !22, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !23, i64 48, !24, i64 104, !24, i64 112, !24, i64 120, !24, i64 128, !24, i64 136, !24, i64 144, !24, i64 152, !24, i64 160, !24, i64 168, !24, i64 176, !24, i64 184, !24, i64 192, !24, i64 200, !24, i64 208, !24, i64 216, !24, i64 224}
!22 = !{!"float", !8, i64 0}
!23 = !{!"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}
!24 = !{!"double", !8, i64 0}
!25 = !{!6, !10, i64 112}
!26 = !{!6, !10, i64 88}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}


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