; LLVM IR from siconos/siconos :: externals/lbl/metis4/mkwayfmh.ll_ (MCRandom_KWayEdgeRefineHorizontal)

; 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.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.rinfodef = type { i32, i32, i32, ptr }
%struct.edegreedef = type { i32, i32 }

@.str = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @__MCRandom_KWayEdgeRefineHorizontal(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr noundef %3, i32 noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca [16 x float], align 16
  %46 = alloca [16 x float], align 16
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  store i32 %4, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %46) #5
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graphdef, ptr %47, i32 0, i32 2
  %49 = load i32, ptr %48, align 8, !tbaa !11
  store i32 %49, ptr %19, align 4, !tbaa !9
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graphdef, ptr %50, i32 0, i32 24
  %52 = load i32, ptr %51, align 8, !tbaa !13
  store i32 %52, ptr %20, align 4, !tbaa !9
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graphdef, ptr %53, i32 0, i32 4
  %55 = load ptr, ptr %54, align 8, !tbaa !14
  store ptr %55, ptr %30, align 8, !tbaa !5
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graphdef, ptr %56, i32 0, i32 7
  %58 = load ptr, ptr %57, align 8, !tbaa !15
  store ptr %58, ptr %31, align 8, !tbaa !5
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graphdef, ptr %59, i32 0, i32 8
  %61 = load ptr, ptr %60, align 8, !tbaa !16
  store ptr %61, ptr %32, align 8, !tbaa !5
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graphdef, ptr %62, i32 0, i32 17
  %64 = load ptr, ptr %63, align 8, !tbaa !17
  store ptr %64, ptr %35, align 8, !tbaa !5
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.graphdef, ptr %65, i32 0, i32 18
  %67 = load ptr, ptr %66, align 8, !tbaa !18
  store ptr %67, ptr %36, align 8, !tbaa !5
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.graphdef, ptr %68, i32 0, i32 14
  %70 = load ptr, ptr %69, align 8, !tbaa !19
  store ptr %70, ptr %33, align 8, !tbaa !5
  %71 = load ptr, ptr %7, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.graphdef, ptr %71, i32 0, i32 26
  %73 = load ptr, ptr %72, align 8, !tbaa !20
  store ptr %73, ptr %39, align 8, !tbaa !5
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = load i32, ptr %8, align 4, !tbaa !9
  %76 = load i32, ptr %20, align 4, !tbaa !9
  %77 = mul nsw i32 %75, %76
  %78 = call ptr @__fwspacemalloc(ptr noundef %74, i32 noundef %77)
  store ptr %78, ptr %41, align 8, !tbaa !5
  %79 = load ptr, ptr %6, align 8, !tbaa !5
  %80 = load i32, ptr %8, align 4, !tbaa !9
  %81 = load i32, ptr %20, align 4, !tbaa !9
  %82 = mul nsw i32 %80, %81
  %83 = call ptr @__fwspacemalloc(ptr noundef %79, i32 noundef %82)
  store ptr %83, ptr %42, align 8, !tbaa !5
  %84 = load ptr, ptr %9, align 8, !tbaa !5
  %85 = getelementptr inbounds float, ptr %84, i64 0
  %86 = load float, ptr %85, align 4, !tbaa !21
  store float %86, ptr %44, align 4, !tbaa !21
  store float %86, ptr %43, align 4, !tbaa !21
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %87

87:                                               ; preds = %126, %5
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = load i32, ptr %20, align 4, !tbaa !9
  %90 = icmp slt i32 %88, %89
  br i1 %90, label %91, label %129

91:                                               ; preds = %87
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  %93 = load i32, ptr %11, align 4, !tbaa !9
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds float, ptr %92, i64 %94
  %96 = load float, ptr %95, align 4, !tbaa !21
  %97 = load float, ptr %44, align 4, !tbaa !21
  %98 = fcmp olt float %96, %97
  br i1 %98, label %99, label %105

99:                                               ; preds = %91
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = load i32, ptr %11, align 4, !tbaa !9
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds float, ptr %100, i64 %102
  %104 = load float, ptr %103, align 4, !tbaa !21
  br label %107

105:                                              ; preds = %91
  %106 = load float, ptr %44, align 4, !tbaa !21
  br label %107

107:                                              ; preds = %105, %99
  %108 = phi float [ %104, %99 ], [ %106, %105 ]
  store float %108, ptr %44, align 4, !tbaa !21
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  %110 = load i32, ptr %11, align 4, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds float, ptr %109, i64 %111
  %113 = load float, ptr %112, align 4, !tbaa !21
  %114 = load float, ptr %43, align 4, !tbaa !21
  %115 = fcmp ogt float %113, %114
  br i1 %115, label %116, label %122

116:                                              ; preds = %107
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = load i32, ptr %11, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds float, ptr %117, i64 %119
  %121 = load float, ptr %120, align 4, !tbaa !21
  br label %124

122:                                              ; preds = %107
  %123 = load float, ptr %43, align 4, !tbaa !21
  br label %124

124:                                              ; preds = %122, %116
  %125 = phi float [ %121, %116 ], [ %123, %122 ]
  store float %125, ptr %43, align 4, !tbaa !21
  br label %126

126:                                              ; preds = %124
  %127 = load i32, ptr %11, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %11, align 4, !tbaa !9
  br label %87, !llvm.loop !23

129:                                              ; preds = %87
  %130 = load float, ptr %43, align 4, !tbaa !21
  %131 = load float, ptr %44, align 4, !tbaa !21
  %132 = fsub float %130, %131
  %133 = fpext float %132 to double
  %134 = call double @llvm.fabs.f64(double %133)
  %135 = fcmp olt double %134, 1.000000e-02
  %136 = zext i1 %135 to i64
  %137 = select i1 %135, i32 1, i32 0
  store i32 %137, ptr %24, align 4, !tbaa !9
  %138 = load i32, ptr %20, align 4, !tbaa !9
  %139 = load i32, ptr %8, align 4, !tbaa !9
  %140 = load ptr, ptr %39, align 8, !tbaa !5
  %141 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  call void @__ComputeHKWayLoadImbalance(i32 noundef %138, i32 noundef %139, ptr noundef %140, ptr noundef %141)
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %173, %129
  %143 = load i32, ptr %11, align 4, !tbaa !9
  %144 = load i32, ptr %20, align 4, !tbaa !9
  %145 = icmp slt i32 %143, %144
  br i1 %145, label %146, label %176

146:                                              ; preds = %142
  %147 = load i32, ptr %11, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %148
  %150 = load float, ptr %149, align 4, !tbaa !21
  %151 = load ptr, ptr %9, align 8, !tbaa !5
  %152 = load i32, ptr %11, align 4, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds float, ptr %151, i64 %153
  %155 = load float, ptr %154, align 4, !tbaa !21
  %156 = fcmp oge float %150, %155
  br i1 %156, label %157, label %162

157:                                              ; preds = %146
  %158 = load i32, ptr %11, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %159
  %161 = load float, ptr %160, align 4, !tbaa !21
  br label %168

162:                                              ; preds = %146
  %163 = load ptr, ptr %9, align 8, !tbaa !5
  %164 = load i32, ptr %11, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds float, ptr %163, i64 %165
  %167 = load float, ptr %166, align 4, !tbaa !21
  br label %168

168:                                              ; preds = %162, %157
  %169 = phi float [ %161, %157 ], [ %167, %162 ]
  %170 = load i32, ptr %11, align 4, !tbaa !9
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %171
  store float %169, ptr %172, align 4, !tbaa !21
  br label %173

173:                                              ; preds = %168
  %174 = load i32, ptr %11, align 4, !tbaa !9
  %175 = add nsw i32 %174, 1
  store i32 %175, ptr %11, align 4, !tbaa !9
  br label %142, !llvm.loop !25

176:                                              ; preds = %142
  %177 = load i32, ptr %24, align 4, !tbaa !9
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %231, label %179

179:                                              ; preds = %176
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %227, %179
  %181 = load i32, ptr %11, align 4, !tbaa !9
  %182 = load i32, ptr %8, align 4, !tbaa !9
  %183 = icmp slt i32 %181, %182
  br i1 %183, label %184, label %230

184:                                              ; preds = %180
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %185

185:                                              ; preds = %223, %184
  %186 = load i32, ptr %14, align 4, !tbaa !9
  %187 = load i32, ptr %20, align 4, !tbaa !9
  %188 = icmp slt i32 %186, %187
  br i1 %188, label %189, label %226

189:                                              ; preds = %185
  %190 = load i32, ptr %14, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %191
  %193 = load float, ptr %192, align 4, !tbaa !21
  %194 = load i32, ptr %8, align 4, !tbaa !9
  %195 = sitofp i32 %194 to float
  %196 = fdiv float %193, %195
  %197 = load ptr, ptr %42, align 8, !tbaa !5
  %198 = load i32, ptr %11, align 4, !tbaa !9
  %199 = load i32, ptr %20, align 4, !tbaa !9
  %200 = mul nsw i32 %198, %199
  %201 = load i32, ptr %14, align 4, !tbaa !9
  %202 = add nsw i32 %200, %201
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds float, ptr %197, i64 %203
  store float %196, ptr %204, align 4, !tbaa !21
  %205 = load i32, ptr %14, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %206
  %208 = load float, ptr %207, align 4, !tbaa !21
  %209 = load i32, ptr %8, align 4, !tbaa !9
  %210 = sitofp i32 %209 to float
  %211 = fmul float %208, %210
  %212 = fpext float %211 to double
  %213 = fdiv double 1.000000e+00, %212
  %214 = fptrunc double %213 to float
  %215 = load ptr, ptr %41, align 8, !tbaa !5
  %216 = load i32, ptr %11, align 4, !tbaa !9
  %217 = load i32, ptr %20, align 4, !tbaa !9
  %218 = mul nsw i32 %216, %217
  %219 = load i32, ptr %14, align 4, !tbaa !9
  %220 = add nsw i32 %218, %219
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds float, ptr %215, i64 %221
  store float %214, ptr %222, align 4, !tbaa !21
  br label %223

223:                                              ; preds = %189
  %224 = load i32, ptr %14, align 4, !tbaa !9
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr %14, align 4, !tbaa !9
  br label %185, !llvm.loop !26

226:                                              ; preds = %185
  br label %227

227:                                              ; preds = %226
  %228 = load i32, ptr %11, align 4, !tbaa !9
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %11, align 4, !tbaa !9
  br label %180, !llvm.loop !27

230:                                              ; preds = %180
  br label %303

231:                                              ; preds = %176
  %232 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %233 = load float, ptr %232, align 16, !tbaa !21
  store float %233, ptr %43, align 4, !tbaa !21
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %254, %231
  %235 = load i32, ptr %11, align 4, !tbaa !9
  %236 = load i32, ptr %20, align 4, !tbaa !9
  %237 = icmp slt i32 %235, %236
  br i1 %237, label %238, label %257

238:                                              ; preds = %234
  %239 = load i32, ptr %11, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %240
  %242 = load float, ptr %241, align 4, !tbaa !21
  %243 = load float, ptr %43, align 4, !tbaa !21
  %244 = fcmp ogt float %242, %243
  br i1 %244, label %245, label %250

245:                                              ; preds = %238
  %246 = load i32, ptr %11, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %247
  %249 = load float, ptr %248, align 4, !tbaa !21
  br label %252

250:                                              ; preds = %238
  %251 = load float, ptr %43, align 4, !tbaa !21
  br label %252

252:                                              ; preds = %250, %245
  %253 = phi float [ %249, %245 ], [ %251, %250 ]
  store float %253, ptr %43, align 4, !tbaa !21
  br label %254

254:                                              ; preds = %252
  %255 = load i32, ptr %11, align 4, !tbaa !9
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %11, align 4, !tbaa !9
  br label %234, !llvm.loop !28

257:                                              ; preds = %234
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %299, %257
  %259 = load i32, ptr %11, align 4, !tbaa !9
  %260 = load i32, ptr %8, align 4, !tbaa !9
  %261 = icmp slt i32 %259, %260
  br i1 %261, label %262, label %302

262:                                              ; preds = %258
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %263

263:                                              ; preds = %295, %262
  %264 = load i32, ptr %14, align 4, !tbaa !9
  %265 = load i32, ptr %20, align 4, !tbaa !9
  %266 = icmp slt i32 %264, %265
  br i1 %266, label %267, label %298

267:                                              ; preds = %263
  %268 = load float, ptr %43, align 4, !tbaa !21
  %269 = load i32, ptr %8, align 4, !tbaa !9
  %270 = sitofp i32 %269 to float
  %271 = fdiv float %268, %270
  %272 = load ptr, ptr %42, align 8, !tbaa !5
  %273 = load i32, ptr %11, align 4, !tbaa !9
  %274 = load i32, ptr %20, align 4, !tbaa !9
  %275 = mul nsw i32 %273, %274
  %276 = load i32, ptr %14, align 4, !tbaa !9
  %277 = add nsw i32 %275, %276
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds float, ptr %272, i64 %278
  store float %271, ptr %279, align 4, !tbaa !21
  %280 = load float, ptr %43, align 4, !tbaa !21
  %281 = load i32, ptr %8, align 4, !tbaa !9
  %282 = sitofp i32 %281 to float
  %283 = fmul float %280, %282
  %284 = fpext float %283 to double
  %285 = fdiv double 1.000000e+00, %284
  %286 = fptrunc double %285 to float
  %287 = load ptr, ptr %41, align 8, !tbaa !5
  %288 = load i32, ptr %11, align 4, !tbaa !9
  %289 = load i32, ptr %20, align 4, !tbaa !9
  %290 = mul nsw i32 %288, %289
  %291 = load i32, ptr %14, align 4, !tbaa !9
  %292 = add nsw i32 %290, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds float, ptr %287, i64 %293
  store float %286, ptr %294, align 4, !tbaa !21
  br label %295

295:                                              ; preds = %267
  %296 = load i32, ptr %14, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %14, align 4, !tbaa !9
  br label %263, !llvm.loop !29

298:                                              ; preds = %263
  br label %299

299:                                              ; preds = %298
  %300 = load i32, ptr %11, align 4, !tbaa !9
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %11, align 4, !tbaa !9
  br label %258, !llvm.loop !30

302:                                              ; preds = %258
  br label %303

303:                                              ; preds = %302, %230
  %304 = load ptr, ptr %6, align 8, !tbaa !5
  %305 = load i32, ptr %19, align 4, !tbaa !9
  %306 = call ptr @__idxwspacemalloc(ptr noundef %304, i32 noundef %305)
  store ptr %306, ptr %34, align 8, !tbaa !5
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.controldef, ptr %307, i32 0, i32 1
  %309 = load i32, ptr %308, align 4, !tbaa !31
  %310 = and i32 %309, 8
  %311 = icmp ne i32 %310, 0
  br i1 %311, label %312, label %363

312:                                              ; preds = %303
  %313 = load ptr, ptr %39, align 8, !tbaa !5
  %314 = load i32, ptr %20, align 4, !tbaa !9
  %315 = load i32, ptr %8, align 4, !tbaa !9
  %316 = mul nsw i32 %314, %315
  %317 = load ptr, ptr %39, align 8, !tbaa !5
  %318 = call i32 @__samin(i32 noundef %316, ptr noundef %317)
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds float, ptr %313, i64 %319
  %321 = load float, ptr %320, align 4, !tbaa !21
  %322 = fpext float %321 to double
  %323 = load ptr, ptr %39, align 8, !tbaa !5
  %324 = load i32, ptr %20, align 4, !tbaa !9
  %325 = load i32, ptr %8, align 4, !tbaa !9
  %326 = mul nsw i32 %324, %325
  %327 = load ptr, ptr %39, align 8, !tbaa !5
  %328 = call i32 @__samax(i32 noundef %326, ptr noundef %327)
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds float, ptr %323, i64 %329
  %331 = load float, ptr %330, align 4, !tbaa !21
  %332 = fpext float %331 to double
  %333 = load ptr, ptr %7, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.graphdef, ptr %333, i32 0, i32 2
  %335 = load i32, ptr %334, align 8, !tbaa !11
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.graphdef, ptr %336, i32 0, i32 16
  %338 = load i32, ptr %337, align 8, !tbaa !35
  %339 = load ptr, ptr %7, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.graphdef, ptr %339, i32 0, i32 12
  %341 = load i32, ptr %340, align 8, !tbaa !36
  %342 = call i32 (ptr, ...) @printf(ptr noundef @.str, double noundef %322, double noundef %332, i32 noundef %335, i32 noundef %338, i32 noundef %341)
  %343 = load i32, ptr %20, align 4, !tbaa !9
  %344 = load i32, ptr %8, align 4, !tbaa !9
  %345 = load ptr, ptr %39, align 8, !tbaa !5
  %346 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 0
  call void @__ComputeHKWayLoadImbalance(i32 noundef %343, i32 noundef %344, ptr noundef %345, ptr noundef %346)
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %347

347:                                              ; preds = %358, %312
  %348 = load i32, ptr %11, align 4, !tbaa !9
  %349 = load i32, ptr %20, align 4, !tbaa !9
  %350 = icmp slt i32 %348, %349
  br i1 %350, label %351, label %361

351:                                              ; preds = %347
  %352 = load i32, ptr %11, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 %353
  %355 = load float, ptr %354, align 4, !tbaa !21
  %356 = fpext float %355 to double
  %357 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %356)
  br label %358

358:                                              ; preds = %351
  %359 = load i32, ptr %11, align 4, !tbaa !9
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %11, align 4, !tbaa !9
  br label %347, !llvm.loop !37

361:                                              ; preds = %347
  %362 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  br label %363

363:                                              ; preds = %361, %303
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %1263, %363
  %365 = load i32, ptr %18, align 4, !tbaa !9
  %366 = load i32, ptr %10, align 4, !tbaa !9
  %367 = icmp slt i32 %365, %366
  br i1 %367, label %368, label %1266

368:                                              ; preds = %364
  %369 = load ptr, ptr %7, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.graphdef, ptr %369, i32 0, i32 12
  %371 = load i32, ptr %370, align 8, !tbaa !36
  store i32 %371, ptr %28, align 4, !tbaa !9
  %372 = load ptr, ptr %7, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.graphdef, ptr %372, i32 0, i32 16
  %374 = load i32, ptr %373, align 8, !tbaa !35
  store i32 %374, ptr %22, align 4, !tbaa !9
  %375 = load i32, ptr %22, align 4, !tbaa !9
  %376 = load ptr, ptr %34, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %375, ptr noundef %376, i32 noundef 1)
  store i32 0, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %377

377:                                              ; preds = %1196, %368
  %378 = load i32, ptr %13, align 4, !tbaa !9
  %379 = load ptr, ptr %7, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.graphdef, ptr %379, i32 0, i32 16
  %381 = load i32, ptr %380, align 8, !tbaa !35
  %382 = icmp slt i32 %378, %381
  br i1 %382, label %383, label %1199

383:                                              ; preds = %377
  %384 = load ptr, ptr %34, align 8, !tbaa !5
  %385 = load i32, ptr %13, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %384, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !9
  store i32 %388, ptr %12, align 4, !tbaa !9
  %389 = load i32, ptr %12, align 4, !tbaa !9
  %390 = load i32, ptr %22, align 4, !tbaa !9
  %391 = icmp sge i32 %389, %390
  br i1 %391, label %392, label %393

392:                                              ; preds = %383
  br label %1196

393:                                              ; preds = %383
  %394 = load ptr, ptr %36, align 8, !tbaa !5
  %395 = load i32, ptr %12, align 4, !tbaa !9
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds i32, ptr %394, i64 %396
  %398 = load i32, ptr %397, align 4, !tbaa !9
  store i32 %398, ptr %11, align 4, !tbaa !9
  %399 = load ptr, ptr %7, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.graphdef, ptr %399, i32 0, i32 21
  %401 = load ptr, ptr %400, align 8, !tbaa !38
  %402 = load i32, ptr %11, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds %struct.rinfodef, ptr %401, i64 %403
  store ptr %404, ptr %38, align 8, !tbaa !5
  %405 = load ptr, ptr %38, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.rinfodef, ptr %405, i32 0, i32 1
  %407 = load i32, ptr %406, align 4, !tbaa !39
  %408 = load ptr, ptr %38, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.rinfodef, ptr %408, i32 0, i32 0
  %410 = load i32, ptr %409, align 8, !tbaa !41
  %411 = icmp sge i32 %407, %410
  br i1 %411, label %412, label %1195

412:                                              ; preds = %393
  %413 = load ptr, ptr %33, align 8, !tbaa !5
  %414 = load i32, ptr %11, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds i32, ptr %413, i64 %415
  %417 = load i32, ptr %416, align 4, !tbaa !9
  store i32 %417, ptr %25, align 4, !tbaa !9
  %418 = load ptr, ptr %7, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.graphdef, ptr %418, i32 0, i32 25
  %420 = load ptr, ptr %419, align 8, !tbaa !42
  %421 = load i32, ptr %11, align 4, !tbaa !9
  %422 = load i32, ptr %20, align 4, !tbaa !9
  %423 = mul nsw i32 %421, %422
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds float, ptr %420, i64 %424
  store ptr %425, ptr %40, align 8, !tbaa !5
  %426 = load ptr, ptr %38, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.rinfodef, ptr %426, i32 0, i32 0
  %428 = load i32, ptr %427, align 8, !tbaa !41
  %429 = icmp sgt i32 %428, 0
  br i1 %429, label %430, label %448

430:                                              ; preds = %412
  %431 = load i32, ptr %20, align 4, !tbaa !9
  %432 = load ptr, ptr %39, align 8, !tbaa !5
  %433 = load i32, ptr %25, align 4, !tbaa !9
  %434 = load i32, ptr %20, align 4, !tbaa !9
  %435 = mul nsw i32 %433, %434
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds float, ptr %432, i64 %436
  %438 = load ptr, ptr %40, align 8, !tbaa !5
  %439 = load ptr, ptr %41, align 8, !tbaa !5
  %440 = load i32, ptr %25, align 4, !tbaa !9
  %441 = load i32, ptr %20, align 4, !tbaa !9
  %442 = mul nsw i32 %440, %441
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds float, ptr %439, i64 %443
  %445 = call i32 @__AreAllHVwgtsBelow(i32 noundef %431, float noundef 1.000000e+00, ptr noundef %437, float noundef -1.000000e+00, ptr noundef %438, ptr noundef %444)
  %446 = icmp ne i32 %445, 0
  br i1 %446, label %447, label %448

447:                                              ; preds = %430
  br label %1196

448:                                              ; preds = %430, %412
  %449 = load ptr, ptr %38, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.rinfodef, ptr %449, i32 0, i32 3
  %451 = load ptr, ptr %450, align 8, !tbaa !43
  store ptr %451, ptr %37, align 8, !tbaa !5
  %452 = load ptr, ptr %38, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.rinfodef, ptr %452, i32 0, i32 2
  %454 = load i32, ptr %453, align 8, !tbaa !44
  store i32 %454, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %516, %448
  %456 = load i32, ptr %16, align 4, !tbaa !9
  %457 = load i32, ptr %23, align 4, !tbaa !9
  %458 = icmp slt i32 %456, %457
  br i1 %458, label %459, label %519

459:                                              ; preds = %455
  %460 = load ptr, ptr %37, align 8, !tbaa !5
  %461 = load i32, ptr %16, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds %struct.edegreedef, ptr %460, i64 %462
  %464 = getelementptr inbounds %struct.edegreedef, ptr %463, i32 0, i32 0
  %465 = load i32, ptr %464, align 4, !tbaa !45
  store i32 %465, ptr %27, align 4, !tbaa !9
  %466 = load ptr, ptr %37, align 8, !tbaa !5
  %467 = load i32, ptr %16, align 4, !tbaa !9
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds %struct.edegreedef, ptr %466, i64 %468
  %470 = getelementptr inbounds %struct.edegreedef, ptr %469, i32 0, i32 1
  %471 = load i32, ptr %470, align 4, !tbaa !47
  %472 = load ptr, ptr %38, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.rinfodef, ptr %472, i32 0, i32 0
  %474 = load i32, ptr %473, align 8, !tbaa !41
  %475 = sub nsw i32 %471, %474
  store i32 %475, ptr %29, align 4, !tbaa !9
  %476 = load i32, ptr %29, align 4, !tbaa !9
  %477 = icmp sge i32 %476, 0
  br i1 %477, label %478, label %515

478:                                              ; preds = %459
  %479 = load i32, ptr %20, align 4, !tbaa !9
  %480 = load ptr, ptr %39, align 8, !tbaa !5
  %481 = load i32, ptr %27, align 4, !tbaa !9
  %482 = load i32, ptr %20, align 4, !tbaa !9
  %483 = mul nsw i32 %481, %482
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds float, ptr %480, i64 %484
  %486 = load ptr, ptr %40, align 8, !tbaa !5
  %487 = load ptr, ptr %42, align 8, !tbaa !5
  %488 = load i32, ptr %27, align 4, !tbaa !9
  %489 = load i32, ptr %20, align 4, !tbaa !9
  %490 = mul nsw i32 %488, %489
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds float, ptr %487, i64 %491
  %493 = call i32 @__AreAllHVwgtsBelow(i32 noundef %479, float noundef 1.000000e+00, ptr noundef %485, float noundef 1.000000e+00, ptr noundef %486, ptr noundef %492)
  %494 = icmp ne i32 %493, 0
  br i1 %494, label %514, label %495

495:                                              ; preds = %478
  %496 = load i32, ptr %20, align 4, !tbaa !9
  %497 = load i32, ptr %8, align 4, !tbaa !9
  %498 = load ptr, ptr %39, align 8, !tbaa !5
  %499 = load i32, ptr %25, align 4, !tbaa !9
  %500 = load i32, ptr %20, align 4, !tbaa !9
  %501 = mul nsw i32 %499, %500
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds float, ptr %498, i64 %502
  %504 = load ptr, ptr %39, align 8, !tbaa !5
  %505 = load i32, ptr %27, align 4, !tbaa !9
  %506 = load i32, ptr %20, align 4, !tbaa !9
  %507 = mul nsw i32 %505, %506
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds float, ptr %504, i64 %508
  %510 = load ptr, ptr %40, align 8, !tbaa !5
  %511 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %512 = call i32 @__IsHBalanceBetterFT(i32 noundef %496, i32 noundef %497, ptr noundef %503, ptr noundef %509, ptr noundef %510, ptr noundef %511)
  %513 = icmp ne i32 %512, 0
  br i1 %513, label %514, label %515

514:                                              ; preds = %495, %478
  br label %519

515:                                              ; preds = %495, %459
  br label %516

516:                                              ; preds = %515
  %517 = load i32, ptr %16, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %16, align 4, !tbaa !9
  br label %455, !llvm.loop !48

519:                                              ; preds = %514, %455
  %520 = load i32, ptr %16, align 4, !tbaa !9
  %521 = load i32, ptr %23, align 4, !tbaa !9
  %522 = icmp eq i32 %520, %521
  br i1 %522, label %523, label %524

523:                                              ; preds = %519
  br label %1196

524:                                              ; preds = %519
  %525 = load i32, ptr %16, align 4, !tbaa !9
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %14, align 4, !tbaa !9
  br label %527

527:                                              ; preds = %628, %524
  %528 = load i32, ptr %14, align 4, !tbaa !9
  %529 = load i32, ptr %23, align 4, !tbaa !9
  %530 = icmp slt i32 %528, %529
  br i1 %530, label %531, label %631

531:                                              ; preds = %527
  %532 = load ptr, ptr %37, align 8, !tbaa !5
  %533 = load i32, ptr %14, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds %struct.edegreedef, ptr %532, i64 %534
  %536 = getelementptr inbounds %struct.edegreedef, ptr %535, i32 0, i32 0
  %537 = load i32, ptr %536, align 4, !tbaa !45
  store i32 %537, ptr %27, align 4, !tbaa !9
  %538 = load ptr, ptr %37, align 8, !tbaa !5
  %539 = load i32, ptr %14, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds %struct.edegreedef, ptr %538, i64 %540
  %542 = getelementptr inbounds %struct.edegreedef, ptr %541, i32 0, i32 1
  %543 = load i32, ptr %542, align 4, !tbaa !47
  %544 = load ptr, ptr %37, align 8, !tbaa !5
  %545 = load i32, ptr %16, align 4, !tbaa !9
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds %struct.edegreedef, ptr %544, i64 %546
  %548 = getelementptr inbounds %struct.edegreedef, ptr %547, i32 0, i32 1
  %549 = load i32, ptr %548, align 4, !tbaa !47
  %550 = icmp sgt i32 %543, %549
  br i1 %550, label %551, label %587

551:                                              ; preds = %531
  %552 = load i32, ptr %20, align 4, !tbaa !9
  %553 = load ptr, ptr %39, align 8, !tbaa !5
  %554 = load i32, ptr %27, align 4, !tbaa !9
  %555 = load i32, ptr %20, align 4, !tbaa !9
  %556 = mul nsw i32 %554, %555
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds float, ptr %553, i64 %557
  %559 = load ptr, ptr %40, align 8, !tbaa !5
  %560 = load ptr, ptr %42, align 8, !tbaa !5
  %561 = load i32, ptr %27, align 4, !tbaa !9
  %562 = load i32, ptr %20, align 4, !tbaa !9
  %563 = mul nsw i32 %561, %562
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds float, ptr %560, i64 %564
  %566 = call i32 @__AreAllHVwgtsBelow(i32 noundef %552, float noundef 1.000000e+00, ptr noundef %558, float noundef 1.000000e+00, ptr noundef %559, ptr noundef %565)
  %567 = icmp ne i32 %566, 0
  br i1 %567, label %625, label %568

568:                                              ; preds = %551
  %569 = load i32, ptr %20, align 4, !tbaa !9
  %570 = load i32, ptr %8, align 4, !tbaa !9
  %571 = load ptr, ptr %39, align 8, !tbaa !5
  %572 = load i32, ptr %25, align 4, !tbaa !9
  %573 = load i32, ptr %20, align 4, !tbaa !9
  %574 = mul nsw i32 %572, %573
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds float, ptr %571, i64 %575
  %577 = load ptr, ptr %39, align 8, !tbaa !5
  %578 = load i32, ptr %27, align 4, !tbaa !9
  %579 = load i32, ptr %20, align 4, !tbaa !9
  %580 = mul nsw i32 %578, %579
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds float, ptr %577, i64 %581
  %583 = load ptr, ptr %40, align 8, !tbaa !5
  %584 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %585 = call i32 @__IsHBalanceBetterFT(i32 noundef %569, i32 noundef %570, ptr noundef %576, ptr noundef %582, ptr noundef %583, ptr noundef %584)
  %586 = icmp ne i32 %585, 0
  br i1 %586, label %625, label %587

587:                                              ; preds = %568, %531
  %588 = load ptr, ptr %37, align 8, !tbaa !5
  %589 = load i32, ptr %14, align 4, !tbaa !9
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds %struct.edegreedef, ptr %588, i64 %590
  %592 = getelementptr inbounds %struct.edegreedef, ptr %591, i32 0, i32 1
  %593 = load i32, ptr %592, align 4, !tbaa !47
  %594 = load ptr, ptr %37, align 8, !tbaa !5
  %595 = load i32, ptr %16, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.edegreedef, ptr %594, i64 %596
  %598 = getelementptr inbounds %struct.edegreedef, ptr %597, i32 0, i32 1
  %599 = load i32, ptr %598, align 4, !tbaa !47
  %600 = icmp eq i32 %593, %599
  br i1 %600, label %601, label %627

601:                                              ; preds = %587
  %602 = load i32, ptr %20, align 4, !tbaa !9
  %603 = load i32, ptr %8, align 4, !tbaa !9
  %604 = load ptr, ptr %39, align 8, !tbaa !5
  %605 = load ptr, ptr %37, align 8, !tbaa !5
  %606 = load i32, ptr %16, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds %struct.edegreedef, ptr %605, i64 %607
  %609 = getelementptr inbounds %struct.edegreedef, ptr %608, i32 0, i32 0
  %610 = load i32, ptr %609, align 4, !tbaa !45
  %611 = load i32, ptr %20, align 4, !tbaa !9
  %612 = mul nsw i32 %610, %611
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds float, ptr %604, i64 %613
  %615 = load ptr, ptr %39, align 8, !tbaa !5
  %616 = load i32, ptr %27, align 4, !tbaa !9
  %617 = load i32, ptr %20, align 4, !tbaa !9
  %618 = mul nsw i32 %616, %617
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds float, ptr %615, i64 %619
  %621 = load ptr, ptr %40, align 8, !tbaa !5
  %622 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %623 = call i32 @__IsHBalanceBetterTT(i32 noundef %602, i32 noundef %603, ptr noundef %614, ptr noundef %620, ptr noundef %621, ptr noundef %622)
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %627

625:                                              ; preds = %601, %568, %551
  %626 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %626, ptr %16, align 4, !tbaa !9
  br label %627

627:                                              ; preds = %625, %601, %587
  br label %628

628:                                              ; preds = %627
  %629 = load i32, ptr %14, align 4, !tbaa !9
  %630 = add nsw i32 %629, 1
  store i32 %630, ptr %14, align 4, !tbaa !9
  br label %527, !llvm.loop !49

631:                                              ; preds = %527
  %632 = load ptr, ptr %37, align 8, !tbaa !5
  %633 = load i32, ptr %16, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds %struct.edegreedef, ptr %632, i64 %634
  %636 = getelementptr inbounds %struct.edegreedef, ptr %635, i32 0, i32 0
  %637 = load i32, ptr %636, align 4, !tbaa !45
  store i32 %637, ptr %27, align 4, !tbaa !9
  %638 = load ptr, ptr %37, align 8, !tbaa !5
  %639 = load i32, ptr %16, align 4, !tbaa !9
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds %struct.edegreedef, ptr %638, i64 %640
  %642 = getelementptr inbounds %struct.edegreedef, ptr %641, i32 0, i32 1
  %643 = load i32, ptr %642, align 4, !tbaa !47
  %644 = load ptr, ptr %38, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.rinfodef, ptr %644, i32 0, i32 0
  %646 = load i32, ptr %645, align 8, !tbaa !41
  %647 = sub nsw i32 %643, %646
  %648 = icmp eq i32 %647, 0
  br i1 %648, label %649, label %691

649:                                              ; preds = %631
  %650 = load i32, ptr %20, align 4, !tbaa !9
  %651 = load i32, ptr %8, align 4, !tbaa !9
  %652 = load ptr, ptr %39, align 8, !tbaa !5
  %653 = load i32, ptr %25, align 4, !tbaa !9
  %654 = load i32, ptr %20, align 4, !tbaa !9
  %655 = mul nsw i32 %653, %654
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds float, ptr %652, i64 %656
  %658 = load ptr, ptr %39, align 8, !tbaa !5
  %659 = load i32, ptr %27, align 4, !tbaa !9
  %660 = load i32, ptr %20, align 4, !tbaa !9
  %661 = mul nsw i32 %659, %660
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds float, ptr %658, i64 %662
  %664 = load ptr, ptr %40, align 8, !tbaa !5
  %665 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %666 = call i32 @__IsHBalanceBetterFT(i32 noundef %650, i32 noundef %651, ptr noundef %657, ptr noundef %663, ptr noundef %664, ptr noundef %665)
  %667 = icmp ne i32 %666, 0
  br i1 %667, label %691, label %668

668:                                              ; preds = %649
  %669 = load i32, ptr %20, align 4, !tbaa !9
  %670 = load ptr, ptr %39, align 8, !tbaa !5
  %671 = load i32, ptr %25, align 4, !tbaa !9
  %672 = load i32, ptr %20, align 4, !tbaa !9
  %673 = mul nsw i32 %671, %672
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds float, ptr %670, i64 %674
  %676 = load ptr, ptr %39, align 8, !tbaa !5
  %677 = load i32, ptr %25, align 4, !tbaa !9
  %678 = load i32, ptr %20, align 4, !tbaa !9
  %679 = mul nsw i32 %677, %678
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds float, ptr %676, i64 %680
  %682 = load ptr, ptr %42, align 8, !tbaa !5
  %683 = load i32, ptr %25, align 4, !tbaa !9
  %684 = load i32, ptr %20, align 4, !tbaa !9
  %685 = mul nsw i32 %683, %684
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds float, ptr %682, i64 %686
  %688 = call i32 @__AreAllHVwgtsBelow(i32 noundef %669, float noundef 1.000000e+00, ptr noundef %675, float noundef 0.000000e+00, ptr noundef %681, ptr noundef %687)
  %689 = icmp ne i32 %688, 0
  br i1 %689, label %690, label %691

690:                                              ; preds = %668
  br label %1196

691:                                              ; preds = %668, %649, %631
  %692 = load ptr, ptr %37, align 8, !tbaa !5
  %693 = load i32, ptr %16, align 4, !tbaa !9
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds %struct.edegreedef, ptr %692, i64 %694
  %696 = getelementptr inbounds %struct.edegreedef, ptr %695, i32 0, i32 1
  %697 = load i32, ptr %696, align 4, !tbaa !47
  %698 = load ptr, ptr %38, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.rinfodef, ptr %698, i32 0, i32 0
  %700 = load i32, ptr %699, align 8, !tbaa !41
  %701 = sub nsw i32 %697, %700
  %702 = load ptr, ptr %7, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.graphdef, ptr %702, i32 0, i32 12
  %704 = load i32, ptr %703, align 8, !tbaa !36
  %705 = sub nsw i32 %704, %701
  store i32 %705, ptr %703, align 8, !tbaa !36
  %706 = load ptr, ptr %6, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.controldef, ptr %706, i32 0, i32 1
  %708 = load i32, ptr %707, align 4, !tbaa !31
  %709 = and i32 %708, 32
  %710 = icmp ne i32 %709, 0
  br i1 %710, label %711, label %728

711:                                              ; preds = %691
  %712 = load i32, ptr %11, align 4, !tbaa !9
  %713 = load i32, ptr %27, align 4, !tbaa !9
  %714 = load ptr, ptr %37, align 8, !tbaa !5
  %715 = load i32, ptr %16, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds %struct.edegreedef, ptr %714, i64 %716
  %718 = getelementptr inbounds %struct.edegreedef, ptr %717, i32 0, i32 1
  %719 = load i32, ptr %718, align 4, !tbaa !47
  %720 = load ptr, ptr %38, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.rinfodef, ptr %720, i32 0, i32 0
  %722 = load i32, ptr %721, align 8, !tbaa !41
  %723 = sub nsw i32 %719, %722
  %724 = load ptr, ptr %7, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.graphdef, ptr %724, i32 0, i32 12
  %726 = load i32, ptr %725, align 8, !tbaa !36
  %727 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %712, i32 noundef %713, i32 noundef %723, i32 noundef %726)
  br label %728

728:                                              ; preds = %711, %691
  %729 = load i32, ptr %20, align 4, !tbaa !9
  %730 = load ptr, ptr %40, align 8, !tbaa !5
  %731 = load ptr, ptr %39, align 8, !tbaa !5
  %732 = load i32, ptr %27, align 4, !tbaa !9
  %733 = load i32, ptr %20, align 4, !tbaa !9
  %734 = mul nsw i32 %732, %733
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds float, ptr %731, i64 %735
  call void @__saxpy(i32 noundef %729, float noundef 1.000000e+00, ptr noundef %730, i32 noundef 1, ptr noundef %736, i32 noundef 1)
  %737 = load i32, ptr %20, align 4, !tbaa !9
  %738 = load ptr, ptr %40, align 8, !tbaa !5
  %739 = load ptr, ptr %39, align 8, !tbaa !5
  %740 = load i32, ptr %25, align 4, !tbaa !9
  %741 = load i32, ptr %20, align 4, !tbaa !9
  %742 = mul nsw i32 %740, %741
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds float, ptr %739, i64 %743
  call void @__saxpy(i32 noundef %737, float noundef -1.000000e+00, ptr noundef %738, i32 noundef 1, ptr noundef %744, i32 noundef 1)
  %745 = load i32, ptr %27, align 4, !tbaa !9
  %746 = load ptr, ptr %33, align 8, !tbaa !5
  %747 = load i32, ptr %11, align 4, !tbaa !9
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds i32, ptr %746, i64 %748
  store i32 %745, ptr %749, align 4, !tbaa !9
  %750 = load ptr, ptr %38, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.rinfodef, ptr %750, i32 0, i32 0
  %752 = load i32, ptr %751, align 8, !tbaa !41
  %753 = load ptr, ptr %37, align 8, !tbaa !5
  %754 = load i32, ptr %16, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds %struct.edegreedef, ptr %753, i64 %755
  %757 = getelementptr inbounds %struct.edegreedef, ptr %756, i32 0, i32 1
  %758 = load i32, ptr %757, align 4, !tbaa !47
  %759 = sub nsw i32 %752, %758
  %760 = load ptr, ptr %38, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.rinfodef, ptr %760, i32 0, i32 1
  %762 = load i32, ptr %761, align 4, !tbaa !39
  %763 = add nsw i32 %762, %759
  store i32 %763, ptr %761, align 4, !tbaa !39
  br label %764

764:                                              ; preds = %728
  %765 = load ptr, ptr %38, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.rinfodef, ptr %765, i32 0, i32 0
  %767 = load i32, ptr %766, align 8, !tbaa !41
  store i32 %767, ptr %14, align 4, !tbaa !9
  %768 = load ptr, ptr %37, align 8, !tbaa !5
  %769 = load i32, ptr %16, align 4, !tbaa !9
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds %struct.edegreedef, ptr %768, i64 %770
  %772 = getelementptr inbounds %struct.edegreedef, ptr %771, i32 0, i32 1
  %773 = load i32, ptr %772, align 4, !tbaa !47
  %774 = load ptr, ptr %38, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.rinfodef, ptr %774, i32 0, i32 0
  store i32 %773, ptr %775, align 8, !tbaa !41
  %776 = load i32, ptr %14, align 4, !tbaa !9
  %777 = load ptr, ptr %37, align 8, !tbaa !5
  %778 = load i32, ptr %16, align 4, !tbaa !9
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds %struct.edegreedef, ptr %777, i64 %779
  %781 = getelementptr inbounds %struct.edegreedef, ptr %780, i32 0, i32 1
  store i32 %776, ptr %781, align 4, !tbaa !47
  br label %782

782:                                              ; preds = %764
  br label %783

783:                                              ; preds = %782
  %784 = load ptr, ptr %37, align 8, !tbaa !5
  %785 = load i32, ptr %16, align 4, !tbaa !9
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds %struct.edegreedef, ptr %784, i64 %786
  %788 = getelementptr inbounds %struct.edegreedef, ptr %787, i32 0, i32 1
  %789 = load i32, ptr %788, align 4, !tbaa !47
  %790 = icmp eq i32 %789, 0
  br i1 %790, label %791, label %803

791:                                              ; preds = %783
  %792 = load ptr, ptr %37, align 8, !tbaa !5
  %793 = load i32, ptr %16, align 4, !tbaa !9
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds %struct.edegreedef, ptr %792, i64 %794
  %796 = load ptr, ptr %37, align 8, !tbaa !5
  %797 = load ptr, ptr %38, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.rinfodef, ptr %797, i32 0, i32 2
  %799 = load i32, ptr %798, align 8, !tbaa !44
  %800 = add nsw i32 %799, -1
  store i32 %800, ptr %798, align 8, !tbaa !44
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds %struct.edegreedef, ptr %796, i64 %801
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %795, ptr align 4 %802, i64 8, i1 false), !tbaa.struct !50
  br label %810

803:                                              ; preds = %783
  %804 = load i32, ptr %25, align 4, !tbaa !9
  %805 = load ptr, ptr %37, align 8, !tbaa !5
  %806 = load i32, ptr %16, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds %struct.edegreedef, ptr %805, i64 %807
  %809 = getelementptr inbounds %struct.edegreedef, ptr %808, i32 0, i32 0
  store i32 %804, ptr %809, align 4, !tbaa !45
  br label %810

810:                                              ; preds = %803, %791
  %811 = load ptr, ptr %38, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.rinfodef, ptr %811, i32 0, i32 1
  %813 = load i32, ptr %812, align 4, !tbaa !39
  %814 = load ptr, ptr %38, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.rinfodef, ptr %814, i32 0, i32 0
  %816 = load i32, ptr %815, align 8, !tbaa !41
  %817 = sub nsw i32 %813, %816
  %818 = icmp slt i32 %817, 0
  br i1 %818, label %819, label %854

819:                                              ; preds = %810
  br label %820

820:                                              ; preds = %819
  %821 = load ptr, ptr %36, align 8, !tbaa !5
  %822 = load i32, ptr %22, align 4, !tbaa !9
  %823 = add nsw i32 %822, -1
  store i32 %823, ptr %22, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %821, i64 %824
  %826 = load i32, ptr %825, align 4, !tbaa !9
  %827 = load ptr, ptr %36, align 8, !tbaa !5
  %828 = load ptr, ptr %35, align 8, !tbaa !5
  %829 = load i32, ptr %11, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds i32, ptr %828, i64 %830
  %832 = load i32, ptr %831, align 4, !tbaa !9
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds i32, ptr %827, i64 %833
  store i32 %826, ptr %834, align 4, !tbaa !9
  %835 = load ptr, ptr %35, align 8, !tbaa !5
  %836 = load i32, ptr %11, align 4, !tbaa !9
  %837 = sext i32 %836 to i64
  %838 = getelementptr inbounds i32, ptr %835, i64 %837
  %839 = load i32, ptr %838, align 4, !tbaa !9
  %840 = load ptr, ptr %35, align 8, !tbaa !5
  %841 = load ptr, ptr %36, align 8, !tbaa !5
  %842 = load i32, ptr %22, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds i32, ptr %841, i64 %843
  %845 = load i32, ptr %844, align 4, !tbaa !9
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds i32, ptr %840, i64 %846
  store i32 %839, ptr %847, align 4, !tbaa !9
  %848 = load ptr, ptr %35, align 8, !tbaa !5
  %849 = load i32, ptr %11, align 4, !tbaa !9
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds i32, ptr %848, i64 %850
  store i32 -1, ptr %851, align 4, !tbaa !9
  br label %852

852:                                              ; preds = %820
  br label %853

853:                                              ; preds = %852
  br label %854

854:                                              ; preds = %853, %810
  %855 = load ptr, ptr %30, align 8, !tbaa !5
  %856 = load i32, ptr %11, align 4, !tbaa !9
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds i32, ptr %855, i64 %857
  %859 = load i32, ptr %858, align 4, !tbaa !9
  store i32 %859, ptr %14, align 4, !tbaa !9
  br label %860

860:                                              ; preds = %1189, %854
  %861 = load i32, ptr %14, align 4, !tbaa !9
  %862 = load ptr, ptr %30, align 8, !tbaa !5
  %863 = load i32, ptr %11, align 4, !tbaa !9
  %864 = add nsw i32 %863, 1
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds i32, ptr %862, i64 %865
  %867 = load i32, ptr %866, align 4, !tbaa !9
  %868 = icmp slt i32 %861, %867
  br i1 %868, label %869, label %1192

869:                                              ; preds = %860
  %870 = load ptr, ptr %31, align 8, !tbaa !5
  %871 = load i32, ptr %14, 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 %12, align 4, !tbaa !9
  %875 = load ptr, ptr %33, align 8, !tbaa !5
  %876 = load i32, ptr %12, 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 %26, align 4, !tbaa !9
  %880 = load ptr, ptr %7, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.graphdef, ptr %880, i32 0, i32 21
  %882 = load ptr, ptr %881, align 8, !tbaa !38
  %883 = load i32, ptr %12, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.rinfodef, ptr %882, i64 %884
  store ptr %885, ptr %38, align 8, !tbaa !5
  %886 = load ptr, ptr %38, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.rinfodef, ptr %886, i32 0, i32 3
  %888 = load ptr, ptr %887, align 8, !tbaa !43
  %889 = icmp eq ptr %888, null
  br i1 %889, label %890, label %920

890:                                              ; preds = %869
  %891 = load ptr, ptr %6, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.controldef, ptr %891, i32 0, i32 11
  %893 = getelementptr inbounds %struct.workspacedef, ptr %892, i32 0, i32 3
  %894 = load ptr, ptr %893, align 8, !tbaa !51
  %895 = load ptr, ptr %6, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.controldef, ptr %895, i32 0, i32 11
  %897 = getelementptr inbounds %struct.workspacedef, ptr %896, i32 0, i32 5
  %898 = load i32, ptr %897, align 8, !tbaa !52
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds %struct.edegreedef, ptr %894, i64 %899
  %901 = load ptr, ptr %38, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.rinfodef, ptr %901, i32 0, i32 3
  store ptr %900, ptr %902, align 8, !tbaa !43
  %903 = load ptr, ptr %30, align 8, !tbaa !5
  %904 = load i32, ptr %12, align 4, !tbaa !9
  %905 = add nsw i32 %904, 1
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds i32, ptr %903, i64 %906
  %908 = load i32, ptr %907, align 4, !tbaa !9
  %909 = load ptr, ptr %30, align 8, !tbaa !5
  %910 = load i32, ptr %12, align 4, !tbaa !9
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds i32, ptr %909, i64 %911
  %913 = load i32, ptr %912, align 4, !tbaa !9
  %914 = sub nsw i32 %908, %913
  %915 = load ptr, ptr %6, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.controldef, ptr %915, i32 0, i32 11
  %917 = getelementptr inbounds %struct.workspacedef, ptr %916, i32 0, i32 5
  %918 = load i32, ptr %917, align 8, !tbaa !52
  %919 = add nsw i32 %918, %914
  store i32 %919, ptr %917, align 8, !tbaa !52
  br label %920

920:                                              ; preds = %890, %869
  %921 = load ptr, ptr %38, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.rinfodef, ptr %921, i32 0, i32 3
  %923 = load ptr, ptr %922, align 8, !tbaa !43
  store ptr %923, ptr %37, align 8, !tbaa !5
  %924 = load i32, ptr %26, align 4, !tbaa !9
  %925 = load i32, ptr %25, align 4, !tbaa !9
  %926 = icmp eq i32 %924, %925
  br i1 %926, label %927, label %980

927:                                              ; preds = %920
  br label %928

928:                                              ; preds = %927
  %929 = load ptr, ptr %32, align 8, !tbaa !5
  %930 = load i32, ptr %14, align 4, !tbaa !9
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds i32, ptr %929, i64 %931
  %933 = load i32, ptr %932, align 4, !tbaa !9
  %934 = load ptr, ptr %38, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.rinfodef, ptr %934, i32 0, i32 1
  %936 = load i32, ptr %935, align 4, !tbaa !39
  %937 = add nsw i32 %936, %933
  store i32 %937, ptr %935, align 4, !tbaa !39
  %938 = load ptr, ptr %32, align 8, !tbaa !5
  %939 = load i32, ptr %14, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i32, ptr %938, i64 %940
  %942 = load i32, ptr %941, align 4, !tbaa !9
  %943 = load ptr, ptr %38, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.rinfodef, ptr %943, i32 0, i32 0
  %945 = load i32, ptr %944, align 8, !tbaa !41
  %946 = sub nsw i32 %945, %942
  store i32 %946, ptr %944, align 8, !tbaa !41
  br label %947

947:                                              ; preds = %928
  br label %948

948:                                              ; preds = %947
  %949 = load ptr, ptr %38, align 8, !tbaa !5
  %950 = getelementptr inbounds %struct.rinfodef, ptr %949, i32 0, i32 1
  %951 = load i32, ptr %950, align 4, !tbaa !39
  %952 = load ptr, ptr %38, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.rinfodef, ptr %952, i32 0, i32 0
  %954 = load i32, ptr %953, align 8, !tbaa !41
  %955 = sub nsw i32 %951, %954
  %956 = icmp sge i32 %955, 0
  br i1 %956, label %957, label %979

957:                                              ; preds = %948
  %958 = load ptr, ptr %35, align 8, !tbaa !5
  %959 = load i32, ptr %12, align 4, !tbaa !9
  %960 = sext i32 %959 to i64
  %961 = getelementptr inbounds i32, ptr %958, i64 %960
  %962 = load i32, ptr %961, align 4, !tbaa !9
  %963 = icmp eq i32 %962, -1
  br i1 %963, label %964, label %979

964:                                              ; preds = %957
  br label %965

965:                                              ; preds = %964
  %966 = load i32, ptr %12, align 4, !tbaa !9
  %967 = load ptr, ptr %36, align 8, !tbaa !5
  %968 = load i32, ptr %22, align 4, !tbaa !9
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds i32, ptr %967, i64 %969
  store i32 %966, ptr %970, align 4, !tbaa !9
  %971 = load i32, ptr %22, align 4, !tbaa !9
  %972 = add nsw i32 %971, 1
  store i32 %972, ptr %22, align 4, !tbaa !9
  %973 = load ptr, ptr %35, align 8, !tbaa !5
  %974 = load i32, ptr %12, align 4, !tbaa !9
  %975 = sext i32 %974 to i64
  %976 = getelementptr inbounds i32, ptr %973, i64 %975
  store i32 %971, ptr %976, align 4, !tbaa !9
  br label %977

977:                                              ; preds = %965
  br label %978

978:                                              ; preds = %977
  br label %979

979:                                              ; preds = %978, %957, %948
  br label %1058

980:                                              ; preds = %920
  %981 = load i32, ptr %26, align 4, !tbaa !9
  %982 = load i32, ptr %27, align 4, !tbaa !9
  %983 = icmp eq i32 %981, %982
  br i1 %983, label %984, label %1057

984:                                              ; preds = %980
  br label %985

985:                                              ; preds = %984
  %986 = load ptr, ptr %32, align 8, !tbaa !5
  %987 = load i32, ptr %14, align 4, !tbaa !9
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds i32, ptr %986, i64 %988
  %990 = load i32, ptr %989, align 4, !tbaa !9
  %991 = load ptr, ptr %38, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.rinfodef, ptr %991, i32 0, i32 0
  %993 = load i32, ptr %992, align 8, !tbaa !41
  %994 = add nsw i32 %993, %990
  store i32 %994, ptr %992, align 8, !tbaa !41
  %995 = load ptr, ptr %32, align 8, !tbaa !5
  %996 = load i32, ptr %14, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds i32, ptr %995, i64 %997
  %999 = load i32, ptr %998, align 4, !tbaa !9
  %1000 = load ptr, ptr %38, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.rinfodef, ptr %1000, i32 0, i32 1
  %1002 = load i32, ptr %1001, align 4, !tbaa !39
  %1003 = sub nsw i32 %1002, %999
  store i32 %1003, ptr %1001, align 4, !tbaa !39
  br label %1004

1004:                                             ; preds = %985
  br label %1005

1005:                                             ; preds = %1004
  %1006 = load ptr, ptr %38, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.rinfodef, ptr %1006, i32 0, i32 1
  %1008 = load i32, ptr %1007, align 4, !tbaa !39
  %1009 = load ptr, ptr %38, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.rinfodef, ptr %1009, i32 0, i32 0
  %1011 = load i32, ptr %1010, align 8, !tbaa !41
  %1012 = sub nsw i32 %1008, %1011
  %1013 = icmp slt i32 %1012, 0
  br i1 %1013, label %1014, label %1056

1014:                                             ; preds = %1005
  %1015 = load ptr, ptr %35, align 8, !tbaa !5
  %1016 = load i32, ptr %12, align 4, !tbaa !9
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds i32, ptr %1015, i64 %1017
  %1019 = load i32, ptr %1018, align 4, !tbaa !9
  %1020 = icmp ne i32 %1019, -1
  br i1 %1020, label %1021, label %1056

1021:                                             ; preds = %1014
  br label %1022

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

1054:                                             ; preds = %1022
  br label %1055

1055:                                             ; preds = %1054
  br label %1056

1056:                                             ; preds = %1055, %1014, %1005
  br label %1057

1057:                                             ; preds = %1056, %980
  br label %1058

1058:                                             ; preds = %1057, %979
  %1059 = load i32, ptr %26, align 4, !tbaa !9
  %1060 = load i32, ptr %25, align 4, !tbaa !9
  %1061 = icmp ne i32 %1059, %1060
  br i1 %1061, label %1062, label %1122

1062:                                             ; preds = %1058
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1063

1063:                                             ; preds = %1118, %1062
  %1064 = load i32, ptr %16, align 4, !tbaa !9
  %1065 = load ptr, ptr %38, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.rinfodef, ptr %1065, i32 0, i32 2
  %1067 = load i32, ptr %1066, align 8, !tbaa !44
  %1068 = icmp slt i32 %1064, %1067
  br i1 %1068, label %1069, label %1121

1069:                                             ; preds = %1063
  %1070 = load ptr, ptr %37, align 8, !tbaa !5
  %1071 = load i32, ptr %16, align 4, !tbaa !9
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds %struct.edegreedef, ptr %1070, i64 %1072
  %1074 = getelementptr inbounds %struct.edegreedef, ptr %1073, i32 0, i32 0
  %1075 = load i32, ptr %1074, align 4, !tbaa !45
  %1076 = load i32, ptr %25, align 4, !tbaa !9
  %1077 = icmp eq i32 %1075, %1076
  br i1 %1077, label %1078, label %1117

1078:                                             ; preds = %1069
  %1079 = load ptr, ptr %37, align 8, !tbaa !5
  %1080 = load i32, ptr %16, align 4, !tbaa !9
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds %struct.edegreedef, ptr %1079, i64 %1081
  %1083 = getelementptr inbounds %struct.edegreedef, ptr %1082, i32 0, i32 1
  %1084 = load i32, ptr %1083, align 4, !tbaa !47
  %1085 = load ptr, ptr %32, align 8, !tbaa !5
  %1086 = load i32, ptr %14, align 4, !tbaa !9
  %1087 = sext i32 %1086 to i64
  %1088 = getelementptr inbounds i32, ptr %1085, i64 %1087
  %1089 = load i32, ptr %1088, align 4, !tbaa !9
  %1090 = icmp eq i32 %1084, %1089
  br i1 %1090, label %1091, label %1103

1091:                                             ; preds = %1078
  %1092 = load ptr, ptr %37, align 8, !tbaa !5
  %1093 = load i32, ptr %16, align 4, !tbaa !9
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds %struct.edegreedef, ptr %1092, i64 %1094
  %1096 = load ptr, ptr %37, align 8, !tbaa !5
  %1097 = load ptr, ptr %38, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.rinfodef, ptr %1097, i32 0, i32 2
  %1099 = load i32, ptr %1098, align 8, !tbaa !44
  %1100 = add nsw i32 %1099, -1
  store i32 %1100, ptr %1098, align 8, !tbaa !44
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds %struct.edegreedef, ptr %1096, i64 %1101
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1095, ptr align 4 %1102, i64 8, i1 false), !tbaa.struct !50
  br label %1116

1103:                                             ; preds = %1078
  %1104 = load ptr, ptr %32, align 8, !tbaa !5
  %1105 = load i32, ptr %14, align 4, !tbaa !9
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds i32, ptr %1104, i64 %1106
  %1108 = load i32, ptr %1107, align 4, !tbaa !9
  %1109 = load ptr, ptr %37, align 8, !tbaa !5
  %1110 = load i32, ptr %16, align 4, !tbaa !9
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds %struct.edegreedef, ptr %1109, i64 %1111
  %1113 = getelementptr inbounds %struct.edegreedef, ptr %1112, i32 0, i32 1
  %1114 = load i32, ptr %1113, align 4, !tbaa !47
  %1115 = sub nsw i32 %1114, %1108
  store i32 %1115, ptr %1113, align 4, !tbaa !47
  br label %1116

1116:                                             ; preds = %1103, %1091
  br label %1121

1117:                                             ; preds = %1069
  br label %1118

1118:                                             ; preds = %1117
  %1119 = load i32, ptr %16, align 4, !tbaa !9
  %1120 = add nsw i32 %1119, 1
  store i32 %1120, ptr %16, align 4, !tbaa !9
  br label %1063, !llvm.loop !53

1121:                                             ; preds = %1116, %1063
  br label %1122

1122:                                             ; preds = %1121, %1058
  %1123 = load i32, ptr %26, align 4, !tbaa !9
  %1124 = load i32, ptr %27, align 4, !tbaa !9
  %1125 = icmp ne i32 %1123, %1124
  br i1 %1125, label %1126, label %1188

1126:                                             ; preds = %1122
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1127

1127:                                             ; preds = %1156, %1126
  %1128 = load i32, ptr %16, align 4, !tbaa !9
  %1129 = load ptr, ptr %38, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.rinfodef, ptr %1129, i32 0, i32 2
  %1131 = load i32, ptr %1130, align 8, !tbaa !44
  %1132 = icmp slt i32 %1128, %1131
  br i1 %1132, label %1133, label %1159

1133:                                             ; preds = %1127
  %1134 = load ptr, ptr %37, align 8, !tbaa !5
  %1135 = load i32, ptr %16, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds %struct.edegreedef, ptr %1134, i64 %1136
  %1138 = getelementptr inbounds %struct.edegreedef, ptr %1137, i32 0, i32 0
  %1139 = load i32, ptr %1138, align 4, !tbaa !45
  %1140 = load i32, ptr %27, align 4, !tbaa !9
  %1141 = icmp eq i32 %1139, %1140
  br i1 %1141, label %1142, label %1155

1142:                                             ; preds = %1133
  %1143 = load ptr, ptr %32, align 8, !tbaa !5
  %1144 = load i32, ptr %14, align 4, !tbaa !9
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds i32, ptr %1143, i64 %1145
  %1147 = load i32, ptr %1146, align 4, !tbaa !9
  %1148 = load ptr, ptr %37, align 8, !tbaa !5
  %1149 = load i32, ptr %16, align 4, !tbaa !9
  %1150 = sext i32 %1149 to i64
  %1151 = getelementptr inbounds %struct.edegreedef, ptr %1148, i64 %1150
  %1152 = getelementptr inbounds %struct.edegreedef, ptr %1151, i32 0, i32 1
  %1153 = load i32, ptr %1152, align 4, !tbaa !47
  %1154 = add nsw i32 %1153, %1147
  store i32 %1154, ptr %1152, align 4, !tbaa !47
  br label %1159

1155:                                             ; preds = %1133
  br label %1156

1156:                                             ; preds = %1155
  %1157 = load i32, ptr %16, align 4, !tbaa !9
  %1158 = add nsw i32 %1157, 1
  store i32 %1158, ptr %16, align 4, !tbaa !9
  br label %1127, !llvm.loop !54

1159:                                             ; preds = %1142, %1127
  %1160 = load i32, ptr %16, align 4, !tbaa !9
  %1161 = load ptr, ptr %38, align 8, !tbaa !5
  %1162 = getelementptr inbounds %struct.rinfodef, ptr %1161, i32 0, i32 2
  %1163 = load i32, ptr %1162, align 8, !tbaa !44
  %1164 = icmp eq i32 %1160, %1163
  br i1 %1164, label %1165, label %1187

1165:                                             ; preds = %1159
  %1166 = load i32, ptr %27, align 4, !tbaa !9
  %1167 = load ptr, ptr %37, align 8, !tbaa !5
  %1168 = load ptr, ptr %38, align 8, !tbaa !5
  %1169 = getelementptr inbounds %struct.rinfodef, ptr %1168, i32 0, i32 2
  %1170 = load i32, ptr %1169, align 8, !tbaa !44
  %1171 = sext i32 %1170 to i64
  %1172 = getelementptr inbounds %struct.edegreedef, ptr %1167, i64 %1171
  %1173 = getelementptr inbounds %struct.edegreedef, ptr %1172, i32 0, i32 0
  store i32 %1166, ptr %1173, align 4, !tbaa !45
  %1174 = load ptr, ptr %32, align 8, !tbaa !5
  %1175 = load i32, ptr %14, align 4, !tbaa !9
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds i32, ptr %1174, i64 %1176
  %1178 = load i32, ptr %1177, align 4, !tbaa !9
  %1179 = load ptr, ptr %37, align 8, !tbaa !5
  %1180 = load ptr, ptr %38, align 8, !tbaa !5
  %1181 = getelementptr inbounds %struct.rinfodef, ptr %1180, i32 0, i32 2
  %1182 = load i32, ptr %1181, align 8, !tbaa !44
  %1183 = add nsw i32 %1182, 1
  store i32 %1183, ptr %1181, align 8, !tbaa !44
  %1184 = sext i32 %1182 to i64
  %1185 = getelementptr inbounds %struct.edegreedef, ptr %1179, i64 %1184
  %1186 = getelementptr inbounds %struct.edegreedef, ptr %1185, i32 0, i32 1
  store i32 %1178, ptr %1186, align 4, !tbaa !47
  br label %1187

1187:                                             ; preds = %1165, %1159
  br label %1188

1188:                                             ; preds = %1187, %1122
  br label %1189

1189:                                             ; preds = %1188
  %1190 = load i32, ptr %14, align 4, !tbaa !9
  %1191 = add nsw i32 %1190, 1
  store i32 %1191, ptr %14, align 4, !tbaa !9
  br label %860, !llvm.loop !55

1192:                                             ; preds = %860
  %1193 = load i32, ptr %21, align 4, !tbaa !9
  %1194 = add nsw i32 %1193, 1
  store i32 %1194, ptr %21, align 4, !tbaa !9
  br label %1195

1195:                                             ; preds = %1192, %393
  br label %1196

1196:                                             ; preds = %1195, %690, %523, %447, %392
  %1197 = load i32, ptr %13, align 4, !tbaa !9
  %1198 = add nsw i32 %1197, 1
  store i32 %1198, ptr %13, align 4, !tbaa !9
  br label %377, !llvm.loop !56

1199:                                             ; preds = %377
  %1200 = load i32, ptr %22, align 4, !tbaa !9
  %1201 = load ptr, ptr %7, align 8, !tbaa !5
  %1202 = getelementptr inbounds %struct.graphdef, ptr %1201, i32 0, i32 16
  store i32 %1200, ptr %1202, align 8, !tbaa !35
  %1203 = load ptr, ptr %6, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct.controldef, ptr %1203, i32 0, i32 1
  %1205 = load i32, ptr %1204, align 4, !tbaa !31
  %1206 = and i32 %1205, 8
  %1207 = icmp ne i32 %1206, 0
  br i1 %1207, label %1208, label %1255

1208:                                             ; preds = %1199
  %1209 = load ptr, ptr %39, align 8, !tbaa !5
  %1210 = load i32, ptr %20, align 4, !tbaa !9
  %1211 = load i32, ptr %8, align 4, !tbaa !9
  %1212 = mul nsw i32 %1210, %1211
  %1213 = load ptr, ptr %39, align 8, !tbaa !5
  %1214 = call i32 @__samin(i32 noundef %1212, ptr noundef %1213)
  %1215 = sext i32 %1214 to i64
  %1216 = getelementptr inbounds float, ptr %1209, i64 %1215
  %1217 = load float, ptr %1216, align 4, !tbaa !21
  %1218 = fpext float %1217 to double
  %1219 = load ptr, ptr %39, align 8, !tbaa !5
  %1220 = load i32, ptr %20, align 4, !tbaa !9
  %1221 = load i32, ptr %8, align 4, !tbaa !9
  %1222 = mul nsw i32 %1220, %1221
  %1223 = load ptr, ptr %39, align 8, !tbaa !5
  %1224 = call i32 @__samax(i32 noundef %1222, ptr noundef %1223)
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds float, ptr %1219, i64 %1225
  %1227 = load float, ptr %1226, align 4, !tbaa !21
  %1228 = fpext float %1227 to double
  %1229 = load i32, ptr %22, align 4, !tbaa !9
  %1230 = load i32, ptr %21, align 4, !tbaa !9
  %1231 = load ptr, ptr %7, align 8, !tbaa !5
  %1232 = getelementptr inbounds %struct.graphdef, ptr %1231, i32 0, i32 12
  %1233 = load i32, ptr %1232, align 8, !tbaa !36
  %1234 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %1218, double noundef %1228, i32 noundef %1229, i32 noundef %1230, i32 noundef %1233)
  %1235 = load i32, ptr %20, align 4, !tbaa !9
  %1236 = load i32, ptr %8, align 4, !tbaa !9
  %1237 = load ptr, ptr %39, align 8, !tbaa !5
  %1238 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 0
  call void @__ComputeHKWayLoadImbalance(i32 noundef %1235, i32 noundef %1236, ptr noundef %1237, ptr noundef %1238)
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %1239

1239:                                             ; preds = %1250, %1208
  %1240 = load i32, ptr %11, align 4, !tbaa !9
  %1241 = load i32, ptr %20, align 4, !tbaa !9
  %1242 = icmp slt i32 %1240, %1241
  br i1 %1242, label %1243, label %1253

1243:                                             ; preds = %1239
  %1244 = load i32, ptr %11, align 4, !tbaa !9
  %1245 = sext i32 %1244 to i64
  %1246 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 %1245
  %1247 = load float, ptr %1246, align 4, !tbaa !21
  %1248 = fpext float %1247 to double
  %1249 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %1248)
  br label %1250

1250:                                             ; preds = %1243
  %1251 = load i32, ptr %11, align 4, !tbaa !9
  %1252 = add nsw i32 %1251, 1
  store i32 %1252, ptr %11, align 4, !tbaa !9
  br label %1239, !llvm.loop !57

1253:                                             ; preds = %1239
  %1254 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  br label %1255

1255:                                             ; preds = %1253, %1199
  %1256 = load ptr, ptr %7, align 8, !tbaa !5
  %1257 = getelementptr inbounds %struct.graphdef, ptr %1256, i32 0, i32 12
  %1258 = load i32, ptr %1257, align 8, !tbaa !36
  %1259 = load i32, ptr %28, align 4, !tbaa !9
  %1260 = icmp eq i32 %1258, %1259
  br i1 %1260, label %1261, label %1262

1261:                                             ; preds = %1255
  br label %1266

1262:                                             ; preds = %1255
  br label %1263

1263:                                             ; preds = %1262
  %1264 = load i32, ptr %18, align 4, !tbaa !9
  %1265 = add nsw i32 %1264, 1
  store i32 %1265, ptr %18, align 4, !tbaa !9
  br label %364, !llvm.loop !58

1266:                                             ; preds = %1261, %364
  %1267 = load ptr, ptr %6, align 8, !tbaa !5
  %1268 = load i32, ptr %20, align 4, !tbaa !9
  %1269 = load i32, ptr %8, align 4, !tbaa !9
  %1270 = mul nsw i32 %1268, %1269
  call void @fwspacefree(ptr noundef %1267, i32 noundef %1270)
  %1271 = load ptr, ptr %6, align 8, !tbaa !5
  %1272 = load i32, ptr %20, align 4, !tbaa !9
  %1273 = load i32, ptr %8, align 4, !tbaa !9
  %1274 = mul nsw i32 %1272, %1273
  call void @fwspacefree(ptr noundef %1271, i32 noundef %1274)
  %1275 = load ptr, ptr %6, align 8, !tbaa !5
  %1276 = load i32, ptr %19, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %1275, i32 noundef %1276)
  call void @llvm.lifetime.end.p0(i64 64, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"graphdef", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !10, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208}
!13 = !{!12, !10, i64 176}
!14 = !{!12, !6, i64 24}
!15 = !{!12, !6, i64 48}
!16 = !{!12, !6, i64 56}
!17 = !{!12, !6, i64 120}
!18 = !{!12, !6, i64 128}
!19 = !{!12, !6, i64 96}
!20 = !{!12, !6, i64 192}
!21 = !{!22, !22, i64 0}
!22 = !{!"float", !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = !{!32, !10, i64 4}
!32 = !{!"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, !33, i64 48, !34, i64 104, !34, i64 112, !34, i64 120, !34, i64 128, !34, i64 136, !34, i64 144, !34, i64 152, !34, i64 160, !34, i64 168, !34, i64 176, !34, i64 184, !34, i64 192, !34, i64 200, !34, i64 208, !34, i64 216, !34, i64 224}
!33 = !{!"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}
!34 = !{!"double", !7, i64 0}
!35 = !{!12, !10, i64 112}
!36 = !{!12, !10, i64 88}
!37 = distinct !{!37, !24}
!38 = !{!12, !6, i64 152}
!39 = !{!40, !10, i64 4}
!40 = !{!"rinfodef", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16}
!41 = !{!40, !10, i64 0}
!42 = !{!12, !6, i64 184}
!43 = !{!40, !6, i64 16}
!44 = !{!40, !10, i64 8}
!45 = !{!46, !10, i64 0}
!46 = !{!"edegreedef", !10, i64 0, !10, i64 4}
!47 = !{!46, !10, i64 4}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = !{i64 0, i64 4, !9, i64 4, i64 4, !9}
!51 = !{!32, !6, i64 64}
!52 = !{!32, !10, i64 80}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}
!55 = distinct !{!55, !24}
!56 = distinct !{!56, !24}
!57 = distinct !{!57, !24}
!58 = distinct !{!58, !24}


; 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.rinfodef = type { i32, i32, i32, ptr }
%struct.edegreedef = type { i32, i32 }

@.str = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @__MCRandom_KWayEdgeRefineHorizontal(ptr noundef %0, ptr nocapture noundef %1, i32 noundef %2, ptr nocapture noundef readonly %3, i32 noundef %4) local_unnamed_addr #0 {
  %6 = alloca [16 x float], align 16
  %7 = ptrtoint ptr %6 to i64
  %8 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #5
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load i32, ptr %9, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %1, i64 176
  %12 = load i32, ptr %11, align 8, !tbaa !11
  %13 = getelementptr inbounds i8, ptr %1, i64 24
  %14 = load ptr, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %1, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %1, i64 56
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %1, i64 120
  %20 = load ptr, ptr %19, align 8, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %1, i64 128
  %22 = load ptr, ptr %21, align 8, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %1, i64 96
  %24 = load ptr, ptr %23, align 8, !tbaa !17
  %25 = getelementptr inbounds i8, ptr %1, i64 192
  %26 = load ptr, ptr %25, align 8, !tbaa !18
  %27 = mul nsw i32 %12, %2
  %28 = tail call ptr @__fwspacemalloc(ptr noundef %0, i32 noundef %27) #5
  %29 = ptrtoint ptr %28 to i64
  %30 = tail call ptr @__fwspacemalloc(ptr noundef %0, i32 noundef %27) #5
  %31 = ptrtoint ptr %30 to i64
  %32 = load float, ptr %3, align 4, !tbaa !19
  %33 = icmp sgt i32 %12, 1
  br i1 %33, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %5
  %wide.trip.count = zext nneg i32 %12 to i64
  %34 = add nsw i64 %wide.trip.count, -1
  %xtraiter = and i64 %34, 1
  %35 = icmp eq i32 %12, 2
  br i1 %35, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %34, -2
  %invariant.gep = getelementptr inbounds i8, ptr %3, i64 4
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %.lr.ph ]
  %.0515 = phi float [ %32, %.lr.ph.preheader.new ], [ %..0.1, %.lr.ph ]
  %.0435514 = phi float [ %32, %.lr.ph.preheader.new ], [ %44, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %36 = getelementptr inbounds float, ptr %3, i64 %indvars.iv
  %37 = load float, ptr %36, align 4, !tbaa !19
  %38 = fcmp olt float %37, %.0515
  %..0 = select i1 %38, float %37, float %.0515
  %39 = fcmp ogt float %37, %.0435514
  %40 = select i1 %39, float %37, float %.0435514
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv
  %41 = load float, ptr %gep, align 4, !tbaa !19
  %42 = fcmp olt float %41, %..0
  %..0.1 = select i1 %42, float %41, float %..0
  %43 = fcmp ogt float %41, %40
  %44 = select i1 %43, float %41, float %40
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !21

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %..0.lcssa.ph = phi float [ poison, %.lr.ph.preheader ], [ %..0.1, %.lr.ph ]
  %.lcssa.ph = phi float [ poison, %.lr.ph.preheader ], [ %44, %.lr.ph ]
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.1, %.lr.ph ]
  %.0515.unr = phi float [ %32, %.lr.ph.preheader ], [ %..0.1, %.lr.ph ]
  %.0435514.unr = phi float [ %32, %.lr.ph.preheader ], [ %44, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa
  %45 = getelementptr inbounds float, ptr %3, i64 %indvars.iv.unr
  %46 = load float, ptr %45, align 4, !tbaa !19
  %47 = fcmp olt float %46, %.0515.unr
  %..0.epil = select i1 %47, float %46, float %.0515.unr
  %48 = fcmp ogt float %46, %.0435514.unr
  %49 = select i1 %48, float %46, float %.0435514.unr
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %5
  %.0435.lcssa = phi float [ %32, %5 ], [ %.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %49, %.lr.ph.epil ]
  %.0.lcssa = phi float [ %32, %5 ], [ %..0.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %..0.epil, %.lr.ph.epil ]
  %50 = fsub float %.0435.lcssa, %.0.lcssa
  %51 = tail call float @llvm.fabs.f32(float %50)
  %52 = fpext float %51 to double
  %53 = fcmp olt double %52, 1.000000e-02
  call void @__ComputeHKWayLoadImbalance(i32 noundef %12, i32 noundef %2, ptr noundef %26, ptr noundef nonnull %6)
  %54 = icmp sgt i32 %12, 0
  br i1 %54, label %.lr.ph519.preheader, label %._crit_edge520

.lr.ph519.preheader:                              ; preds = %._crit_edge
  %wide.trip.count598 = zext nneg i32 %12 to i64
  %min.iters.check = icmp ult i32 %12, 8
  br i1 %min.iters.check, label %.lr.ph519.preheader720, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph519.preheader
  %n.vec = and i64 %wide.trip.count598, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %55 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %index
  %56 = getelementptr inbounds i8, ptr %55, i64 16
  %wide.load = load <4 x float>, ptr %55, align 16, !tbaa !19
  %wide.load680 = load <4 x float>, ptr %56, align 16, !tbaa !19
  %57 = getelementptr inbounds float, ptr %3, i64 %index
  %58 = getelementptr inbounds i8, ptr %57, i64 16
  %wide.load681 = load <4 x float>, ptr %57, align 4, !tbaa !19
  %wide.load682 = load <4 x float>, ptr %58, align 4, !tbaa !19
  %59 = fcmp oge <4 x float> %wide.load, %wide.load681
  %60 = fcmp oge <4 x float> %wide.load680, %wide.load682
  %61 = select <4 x i1> %59, <4 x float> %wide.load, <4 x float> %wide.load681
  %62 = select <4 x i1> %60, <4 x float> %wide.load680, <4 x float> %wide.load682
  store <4 x float> %61, ptr %55, align 16, !tbaa !19
  store <4 x float> %62, ptr %56, align 16, !tbaa !19
  %index.next = add nuw i64 %index, 8
  %63 = icmp eq i64 %index.next, %n.vec
  br i1 %63, label %middle.block, label %vector.body, !llvm.loop !23

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count598
  br i1 %cmp.n, label %._crit_edge520, label %.lr.ph519.preheader720

.lr.ph519.preheader720:                           ; preds = %middle.block, %.lr.ph519.preheader
  %indvars.iv595.ph = phi i64 [ 0, %.lr.ph519.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph519

.lr.ph519:                                        ; preds = %.lr.ph519.preheader720, %.lr.ph519
  %indvars.iv595 = phi i64 [ %indvars.iv.next596, %.lr.ph519 ], [ %indvars.iv595.ph, %.lr.ph519.preheader720 ]
  %64 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv595
  %65 = load float, ptr %64, align 4, !tbaa !19
  %66 = getelementptr inbounds float, ptr %3, i64 %indvars.iv595
  %67 = load float, ptr %66, align 4, !tbaa !19
  %.inv = fcmp oge float %65, %67
  %. = select i1 %.inv, float %65, float %67
  store float %., ptr %64, align 4, !tbaa !19
  %indvars.iv.next596 = add nuw nsw i64 %indvars.iv595, 1
  %exitcond599.not = icmp eq i64 %indvars.iv.next596, %wide.trip.count598
  br i1 %exitcond599.not, label %._crit_edge520, label %.lr.ph519, !llvm.loop !26

._crit_edge520:                                   ; preds = %.lr.ph519, %middle.block, %._crit_edge
  br i1 %53, label %113, label %.preheader501

.preheader501:                                    ; preds = %._crit_edge520
  %68 = icmp sgt i32 %2, 0
  br i1 %68, label %.preheader500.lr.ph, label %.loopexit499

.preheader500.lr.ph:                              ; preds = %.preheader501
  %69 = uitofp nneg i32 %2 to float
  br i1 %54, label %.preheader500.us.preheader, label %.loopexit499

.preheader500.us.preheader:                       ; preds = %.preheader500.lr.ph
  %70 = zext nneg i32 %12 to i64
  %wide.trip.count608 = zext nneg i32 %2 to i64
  %71 = sub i64 %29, %31
  %72 = sub i64 %31, %7
  %73 = shl nuw nsw i64 %70, 2
  %74 = sub i64 %29, %7
  %min.iters.check688 = icmp ult i32 %12, 4
  %diff.check = icmp ult i64 %71, 16
  %n.vec691 = and i64 %70, 2147483644
  %broadcast.splatinsert = insertelement <4 x float> poison, float %69, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n697 = icmp eq i64 %n.vec691, %70
  %xtraiter723 = and i64 %70, 1
  %lcmp.mod724.not = icmp eq i64 %xtraiter723, 0
  %75 = add nsw i64 %70, -1
  br label %.preheader500.us

.preheader500.us:                                 ; preds = %.preheader500.us.preheader, %._crit_edge523.us
  %indvars.iv605 = phi i64 [ 0, %.preheader500.us.preheader ], [ %indvars.iv.next606, %._crit_edge523.us ]
  %76 = mul nuw nsw i64 %indvars.iv605, %70
  br i1 %min.iters.check688, label %scalar.ph687.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader500.us
  %77 = mul i64 %73, %indvars.iv605
  %78 = add i64 %74, %77
  %79 = add i64 %72, %77
  %diff.check683 = icmp ult i64 %79, 16
  %conflict.rdx = or i1 %diff.check, %diff.check683
  %diff.check684 = icmp ult i64 %78, 16
  %conflict.rdx685 = or i1 %conflict.rdx, %diff.check684
  br i1 %conflict.rdx685, label %scalar.ph687.preheader, label %vector.body693

vector.body693:                                   ; preds = %vector.memcheck, %vector.body693
  %index694 = phi i64 [ %index.next696, %vector.body693 ], [ 0, %vector.memcheck ]
  %80 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %index694
  %wide.load695 = load <4 x float>, ptr %80, align 16, !tbaa !19
  %81 = fdiv <4 x float> %wide.load695, %broadcast.splat
  %82 = add nuw nsw i64 %index694, %76
  %83 = getelementptr inbounds float, ptr %30, i64 %82
  store <4 x float> %81, ptr %83, align 4, !tbaa !19
  %84 = fmul <4 x float> %wide.load695, %broadcast.splat
  %85 = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %84
  %86 = getelementptr inbounds float, ptr %28, i64 %82
  store <4 x float> %85, ptr %86, align 4, !tbaa !19
  %index.next696 = add nuw i64 %index694, 4
  %87 = icmp eq i64 %index.next696, %n.vec691
  br i1 %87, label %middle.block686, label %vector.body693, !llvm.loop !27

middle.block686:                                  ; preds = %vector.body693
  br i1 %cmp.n697, label %._crit_edge523.us, label %scalar.ph687.preheader

scalar.ph687.preheader:                           ; preds = %middle.block686, %vector.memcheck, %.preheader500.us
  %indvars.iv600.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader500.us ], [ %n.vec691, %middle.block686 ]
  br i1 %lcmp.mod724.not, label %scalar.ph687.prol.loopexit, label %scalar.ph687.prol

scalar.ph687.prol:                                ; preds = %scalar.ph687.preheader
  %88 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv600.ph
  %89 = load float, ptr %88, align 16, !tbaa !19
  %90 = fdiv float %89, %69
  %91 = add nuw nsw i64 %indvars.iv600.ph, %76
  %92 = getelementptr inbounds float, ptr %30, i64 %91
  store float %90, ptr %92, align 4, !tbaa !19
  %93 = fmul float %89, %69
  %94 = fdiv float 1.000000e+00, %93
  %95 = getelementptr inbounds float, ptr %28, i64 %91
  store float %94, ptr %95, align 4, !tbaa !19
  %indvars.iv.next601.prol = or disjoint i64 %indvars.iv600.ph, 1
  br label %scalar.ph687.prol.loopexit

scalar.ph687.prol.loopexit:                       ; preds = %scalar.ph687.prol, %scalar.ph687.preheader
  %indvars.iv600.unr = phi i64 [ %indvars.iv600.ph, %scalar.ph687.preheader ], [ %indvars.iv.next601.prol, %scalar.ph687.prol ]
  %96 = icmp eq i64 %indvars.iv600.ph, %75
  br i1 %96, label %._crit_edge523.us, label %scalar.ph687

scalar.ph687:                                     ; preds = %scalar.ph687.prol.loopexit, %scalar.ph687
  %indvars.iv600 = phi i64 [ %indvars.iv.next601.1, %scalar.ph687 ], [ %indvars.iv600.unr, %scalar.ph687.prol.loopexit ]
  %97 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv600
  %98 = load float, ptr %97, align 4, !tbaa !19
  %99 = fdiv float %98, %69
  %100 = add nuw nsw i64 %indvars.iv600, %76
  %101 = getelementptr inbounds float, ptr %30, i64 %100
  store float %99, ptr %101, align 4, !tbaa !19
  %102 = fmul float %98, %69
  %103 = fdiv float 1.000000e+00, %102
  %104 = getelementptr inbounds float, ptr %28, i64 %100
  store float %103, ptr %104, align 4, !tbaa !19
  %indvars.iv.next601 = add nuw nsw i64 %indvars.iv600, 1
  %105 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv.next601
  %106 = load float, ptr %105, align 4, !tbaa !19
  %107 = fdiv float %106, %69
  %108 = add nuw nsw i64 %indvars.iv.next601, %76
  %109 = getelementptr inbounds float, ptr %30, i64 %108
  store float %107, ptr %109, align 4, !tbaa !19
  %110 = fmul float %106, %69
  %111 = fdiv float 1.000000e+00, %110
  %112 = getelementptr inbounds float, ptr %28, i64 %108
  store float %111, ptr %112, align 4, !tbaa !19
  %indvars.iv.next601.1 = add nuw nsw i64 %indvars.iv600, 2
  %exitcond604.not.1 = icmp eq i64 %indvars.iv.next601.1, %70
  br i1 %exitcond604.not.1, label %._crit_edge523.us, label %scalar.ph687, !llvm.loop !28

._crit_edge523.us:                                ; preds = %scalar.ph687.prol.loopexit, %scalar.ph687, %middle.block686
  %indvars.iv.next606 = add nuw nsw i64 %indvars.iv605, 1
  %exitcond609.not = icmp eq i64 %indvars.iv.next606, %wide.trip.count608
  br i1 %exitcond609.not, label %.loopexit499, label %.preheader500.us, !llvm.loop !29

113:                                              ; preds = %._crit_edge520
  %114 = load float, ptr %6, align 16, !tbaa !19
  br i1 %33, label %.lr.ph528.preheader, label %.preheader498

.lr.ph528.preheader:                              ; preds = %113
  %wide.trip.count613 = zext nneg i32 %12 to i64
  %115 = add nsw i64 %wide.trip.count613, -1
  %116 = add nsw i64 %wide.trip.count613, -2
  %xtraiter725 = and i64 %115, 3
  %117 = icmp ult i64 %116, 3
  br i1 %117, label %.preheader498.loopexit.unr-lcssa, label %.lr.ph528.preheader.new

.lr.ph528.preheader.new:                          ; preds = %.lr.ph528.preheader
  %unroll_iter728 = and i64 %115, -4
  br label %.lr.ph528

.preheader498.loopexit.unr-lcssa:                 ; preds = %.lr.ph528, %.lr.ph528.preheader
  %..1.lcssa.ph = phi float [ poison, %.lr.ph528.preheader ], [ %..1.3, %.lr.ph528 ]
  %indvars.iv610.unr = phi i64 [ 1, %.lr.ph528.preheader ], [ %indvars.iv.next611.3, %.lr.ph528 ]
  %.1526.unr = phi float [ %114, %.lr.ph528.preheader ], [ %..1.3, %.lr.ph528 ]
  %lcmp.mod726.not = icmp eq i64 %xtraiter725, 0
  br i1 %lcmp.mod726.not, label %.preheader498, label %.lr.ph528.epil

.lr.ph528.epil:                                   ; preds = %.preheader498.loopexit.unr-lcssa, %.lr.ph528.epil
  %indvars.iv610.epil = phi i64 [ %indvars.iv.next611.epil, %.lr.ph528.epil ], [ %indvars.iv610.unr, %.preheader498.loopexit.unr-lcssa ]
  %.1526.epil = phi float [ %..1.epil, %.lr.ph528.epil ], [ %.1526.unr, %.preheader498.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph528.epil ], [ 0, %.preheader498.loopexit.unr-lcssa ]
  %118 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv610.epil
  %119 = load float, ptr %118, align 4, !tbaa !19
  %120 = fcmp ogt float %119, %.1526.epil
  %..1.epil = select i1 %120, float %119, float %.1526.epil
  %indvars.iv.next611.epil = add nuw nsw i64 %indvars.iv610.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter725
  br i1 %epil.iter.cmp.not, label %.preheader498, label %.lr.ph528.epil, !llvm.loop !30

.preheader498:                                    ; preds = %.preheader498.loopexit.unr-lcssa, %.lr.ph528.epil, %113
  %.1.lcssa = phi float [ %114, %113 ], [ %..1.lcssa.ph, %.preheader498.loopexit.unr-lcssa ], [ %..1.epil, %.lr.ph528.epil ]
  %121 = icmp sgt i32 %2, 0
  br i1 %121, label %.preheader497.lr.ph, label %.loopexit499

.preheader497.lr.ph:                              ; preds = %.preheader498
  %122 = uitofp nneg i32 %2 to float
  %123 = fdiv float %.1.lcssa, %122
  %124 = fmul float %.1.lcssa, %122
  %125 = fdiv float 1.000000e+00, %124
  br i1 %54, label %.preheader497.us.preheader, label %.loopexit499

.preheader497.us.preheader:                       ; preds = %.preheader497.lr.ph
  %126 = zext nneg i32 %12 to i64
  %wide.trip.count623 = zext nneg i32 %2 to i64
  %127 = sub i64 %29, %31
  %min.iters.check702 = icmp ult i32 %12, 8
  %diff.check699 = icmp ult i64 %127, 32
  %or.cond715 = select i1 %min.iters.check702, i1 true, i1 %diff.check699
  %n.vec705 = and i64 %126, 2147483640
  %broadcast.splatinsert709 = insertelement <4 x float> poison, float %123, i64 0
  %broadcast.splat710 = shufflevector <4 x float> %broadcast.splatinsert709, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert711 = insertelement <4 x float> poison, float %125, i64 0
  %broadcast.splat712 = shufflevector <4 x float> %broadcast.splatinsert711, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n714 = icmp eq i64 %n.vec705, %126
  %xtraiter730 = and i64 %126, 3
  %lcmp.mod731.not = icmp eq i64 %xtraiter730, 0
  br label %.preheader497.us

.preheader497.us:                                 ; preds = %.preheader497.us.preheader, %._crit_edge532.us
  %indvars.iv620 = phi i64 [ 0, %.preheader497.us.preheader ], [ %indvars.iv.next621, %._crit_edge532.us ]
  %128 = mul nuw nsw i64 %indvars.iv620, %126
  br i1 %or.cond715, label %scalar.ph701.preheader, label %vector.body707

vector.body707:                                   ; preds = %.preheader497.us, %vector.body707
  %index708 = phi i64 [ %index.next713, %vector.body707 ], [ 0, %.preheader497.us ]
  %129 = add nuw nsw i64 %index708, %128
  %130 = getelementptr inbounds float, ptr %30, i64 %129
  %131 = getelementptr inbounds i8, ptr %130, i64 16
  store <4 x float> %broadcast.splat710, ptr %130, align 4, !tbaa !19
  store <4 x float> %broadcast.splat710, ptr %131, align 4, !tbaa !19
  %132 = getelementptr inbounds float, ptr %28, i64 %129
  %133 = getelementptr inbounds i8, ptr %132, i64 16
  store <4 x float> %broadcast.splat712, ptr %132, align 4, !tbaa !19
  store <4 x float> %broadcast.splat712, ptr %133, align 4, !tbaa !19
  %index.next713 = add nuw i64 %index708, 8
  %134 = icmp eq i64 %index.next713, %n.vec705
  br i1 %134, label %middle.block700, label %vector.body707, !llvm.loop !32

middle.block700:                                  ; preds = %vector.body707
  br i1 %cmp.n714, label %._crit_edge532.us, label %scalar.ph701.preheader

scalar.ph701.preheader:                           ; preds = %middle.block700, %.preheader497.us
  %indvars.iv615.ph = phi i64 [ 0, %.preheader497.us ], [ %n.vec705, %middle.block700 ]
  br i1 %lcmp.mod731.not, label %scalar.ph701.prol.loopexit, label %scalar.ph701.prol

scalar.ph701.prol:                                ; preds = %scalar.ph701.preheader, %scalar.ph701.prol
  %indvars.iv615.prol = phi i64 [ %indvars.iv.next616.prol, %scalar.ph701.prol ], [ %indvars.iv615.ph, %scalar.ph701.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph701.prol ], [ 0, %scalar.ph701.preheader ]
  %135 = add nuw nsw i64 %indvars.iv615.prol, %128
  %136 = getelementptr inbounds float, ptr %30, i64 %135
  store float %123, ptr %136, align 4, !tbaa !19
  %137 = getelementptr inbounds float, ptr %28, i64 %135
  store float %125, ptr %137, align 4, !tbaa !19
  %indvars.iv.next616.prol = add nuw nsw i64 %indvars.iv615.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter730
  br i1 %prol.iter.cmp.not, label %scalar.ph701.prol.loopexit, label %scalar.ph701.prol, !llvm.loop !33

scalar.ph701.prol.loopexit:                       ; preds = %scalar.ph701.prol, %scalar.ph701.preheader
  %indvars.iv615.unr = phi i64 [ %indvars.iv615.ph, %scalar.ph701.preheader ], [ %indvars.iv.next616.prol, %scalar.ph701.prol ]
  %138 = sub nsw i64 %indvars.iv615.ph, %126
  %139 = icmp ugt i64 %138, -4
  br i1 %139, label %._crit_edge532.us, label %scalar.ph701

scalar.ph701:                                     ; preds = %scalar.ph701.prol.loopexit, %scalar.ph701
  %indvars.iv615 = phi i64 [ %indvars.iv.next616.3, %scalar.ph701 ], [ %indvars.iv615.unr, %scalar.ph701.prol.loopexit ]
  %140 = add nuw nsw i64 %indvars.iv615, %128
  %141 = getelementptr inbounds float, ptr %30, i64 %140
  store float %123, ptr %141, align 4, !tbaa !19
  %142 = getelementptr inbounds float, ptr %28, i64 %140
  store float %125, ptr %142, align 4, !tbaa !19
  %indvars.iv.next616 = add nuw nsw i64 %indvars.iv615, 1
  %143 = add nuw nsw i64 %indvars.iv.next616, %128
  %144 = getelementptr inbounds float, ptr %30, i64 %143
  store float %123, ptr %144, align 4, !tbaa !19
  %145 = getelementptr inbounds float, ptr %28, i64 %143
  store float %125, ptr %145, align 4, !tbaa !19
  %indvars.iv.next616.1 = add nuw nsw i64 %indvars.iv615, 2
  %146 = add nuw nsw i64 %indvars.iv.next616.1, %128
  %147 = getelementptr inbounds float, ptr %30, i64 %146
  store float %123, ptr %147, align 4, !tbaa !19
  %148 = getelementptr inbounds float, ptr %28, i64 %146
  store float %125, ptr %148, align 4, !tbaa !19
  %indvars.iv.next616.2 = add nuw nsw i64 %indvars.iv615, 3
  %149 = add nuw nsw i64 %indvars.iv.next616.2, %128
  %150 = getelementptr inbounds float, ptr %30, i64 %149
  store float %123, ptr %150, align 4, !tbaa !19
  %151 = getelementptr inbounds float, ptr %28, i64 %149
  store float %125, ptr %151, align 4, !tbaa !19
  %indvars.iv.next616.3 = add nuw nsw i64 %indvars.iv615, 4
  %exitcond619.not.3 = icmp eq i64 %indvars.iv.next616.3, %126
  br i1 %exitcond619.not.3, label %._crit_edge532.us, label %scalar.ph701, !llvm.loop !34

._crit_edge532.us:                                ; preds = %scalar.ph701.prol.loopexit, %scalar.ph701, %middle.block700
  %indvars.iv.next621 = add nuw nsw i64 %indvars.iv620, 1
  %exitcond624.not = icmp eq i64 %indvars.iv.next621, %wide.trip.count623
  br i1 %exitcond624.not, label %.loopexit499, label %.preheader497.us, !llvm.loop !35

.lr.ph528:                                        ; preds = %.lr.ph528, %.lr.ph528.preheader.new
  %indvars.iv610 = phi i64 [ 1, %.lr.ph528.preheader.new ], [ %indvars.iv.next611.3, %.lr.ph528 ]
  %.1526 = phi float [ %114, %.lr.ph528.preheader.new ], [ %..1.3, %.lr.ph528 ]
  %niter729 = phi i64 [ 0, %.lr.ph528.preheader.new ], [ %niter729.next.3, %.lr.ph528 ]
  %152 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv610
  %153 = load float, ptr %152, align 4, !tbaa !19
  %154 = fcmp ogt float %153, %.1526
  %..1 = select i1 %154, float %153, float %.1526
  %indvars.iv.next611 = add nuw nsw i64 %indvars.iv610, 1
  %155 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv.next611
  %156 = load float, ptr %155, align 4, !tbaa !19
  %157 = fcmp ogt float %156, %..1
  %..1.1 = select i1 %157, float %156, float %..1
  %indvars.iv.next611.1 = add nuw nsw i64 %indvars.iv610, 2
  %158 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv.next611.1
  %159 = load float, ptr %158, align 4, !tbaa !19
  %160 = fcmp ogt float %159, %..1.1
  %..1.2 = select i1 %160, float %159, float %..1.1
  %indvars.iv.next611.2 = add nuw nsw i64 %indvars.iv610, 3
  %161 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %indvars.iv.next611.2
  %162 = load float, ptr %161, align 4, !tbaa !19
  %163 = fcmp ogt float %162, %..1.2
  %..1.3 = select i1 %163, float %162, float %..1.2
  %indvars.iv.next611.3 = add nuw nsw i64 %indvars.iv610, 4
  %niter729.next.3 = add i64 %niter729, 4
  %niter729.ncmp.3 = icmp eq i64 %niter729.next.3, %unroll_iter728
  br i1 %niter729.ncmp.3, label %.preheader498.loopexit.unr-lcssa, label %.lr.ph528, !llvm.loop !36

.loopexit499:                                     ; preds = %._crit_edge523.us, %._crit_edge532.us, %.preheader497.lr.ph, %.preheader500.lr.ph, %.preheader501, %.preheader498
  %164 = call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %10) #5
  %165 = getelementptr inbounds i8, ptr %0, i64 4
  %166 = load i32, ptr %165, align 4, !tbaa !37
  %167 = and i32 %166, 8
  %.not = icmp eq i32 %167, 0
  br i1 %.not, label %190, label %168

168:                                              ; preds = %.loopexit499
  %169 = call i32 @__samin(i32 noundef %27, ptr noundef %26) #5
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds float, ptr %26, i64 %170
  %172 = load float, ptr %171, align 4, !tbaa !19
  %173 = fpext float %172 to double
  %174 = call i32 @__samax(i32 noundef %27, ptr noundef %26) #5
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds float, ptr %26, i64 %175
  %177 = load float, ptr %176, align 4, !tbaa !19
  %178 = fpext float %177 to double
  %179 = load i32, ptr %9, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %1, i64 112
  %181 = load i32, ptr %180, align 8, !tbaa !41
  %182 = getelementptr inbounds i8, ptr %1, i64 88
  %183 = load i32, ptr %182, align 8, !tbaa !42
  %184 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, double noundef %173, double noundef %178, i32 noundef %179, i32 noundef %181, i32 noundef %183)
  call void @__ComputeHKWayLoadImbalance(i32 noundef %12, i32 noundef %2, ptr noundef %26, ptr noundef nonnull %8)
  br i1 %54, label %.lr.ph536.preheader, label %._crit_edge537

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

.lr.ph536:                                        ; preds = %.lr.ph536.preheader, %.lr.ph536
  %indvars.iv625 = phi i64 [ 0, %.lr.ph536.preheader ], [ %indvars.iv.next626, %.lr.ph536 ]
  %185 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %indvars.iv625
  %186 = load float, ptr %185, align 4, !tbaa !19
  %187 = fpext float %186 to double
  %188 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %187)
  %indvars.iv.next626 = add nuw nsw i64 %indvars.iv625, 1
  %exitcond629.not = icmp eq i64 %indvars.iv.next626, %wide.trip.count628
  br i1 %exitcond629.not, label %._crit_edge537, label %.lr.ph536, !llvm.loop !43

._crit_edge537:                                   ; preds = %.lr.ph536, %168
  %189 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %190

190:                                              ; preds = %._crit_edge537, %.loopexit499
  %191 = icmp sgt i32 %4, 0
  br i1 %191, label %.lr.ph582, label %._crit_edge583

.lr.ph582:                                        ; preds = %190
  %192 = getelementptr inbounds i8, ptr %1, i64 88
  %193 = getelementptr inbounds i8, ptr %1, i64 112
  %194 = getelementptr inbounds i8, ptr %1, i64 152
  %195 = getelementptr inbounds i8, ptr %1, i64 184
  %196 = getelementptr inbounds i8, ptr %0, i64 64
  %197 = getelementptr inbounds i8, ptr %0, i64 80
  %.pre = load i32, ptr %192, align 8, !tbaa !42
  %wide.trip.count657 = zext nneg i32 %12 to i64
  br label %198

198:                                              ; preds = %491, %.lr.ph582
  %199 = phi i32 [ %.pre, %.lr.ph582 ], [ %492, %491 ]
  %.0448580 = phi i32 [ 0, %.lr.ph582 ], [ %494, %491 ]
  %200 = load i32, ptr %193, align 8, !tbaa !41
  call void @__RandomPermute(i32 noundef %200, ptr noundef %164, i32 noundef 1) #5
  %201 = load i32, ptr %193, align 8, !tbaa !41
  %202 = icmp sgt i32 %201, 0
  br i1 %202, label %.lr.ph572, label %._crit_edge573

.lr.ph572:                                        ; preds = %198, %._crit_edge541.thread
  %indvars.iv651 = phi i64 [ %indvars.iv.next652, %._crit_edge541.thread ], [ 0, %198 ]
  %.0449569 = phi i32 [ %.1450, %._crit_edge541.thread ], [ 0, %198 ]
  %.0451568 = phi i32 [ %.4455, %._crit_edge541.thread ], [ %200, %198 ]
  %203 = getelementptr inbounds i32, ptr %164, i64 %indvars.iv651
  %204 = load i32, ptr %203, align 4, !tbaa !44
  %.not476 = icmp slt i32 %204, %.0451568
  br i1 %.not476, label %205, label %._crit_edge541.thread

205:                                              ; preds = %.lr.ph572
  %206 = sext i32 %204 to i64
  %207 = getelementptr inbounds i32, ptr %22, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !44
  %209 = load ptr, ptr %194, align 8, !tbaa !45
  %210 = sext i32 %208 to i64
  %211 = getelementptr inbounds %struct.rinfodef, ptr %209, i64 %210
  %212 = getelementptr inbounds i8, ptr %211, i64 4
  %213 = load i32, ptr %212, align 4, !tbaa !46
  %214 = load i32, ptr %211, align 8, !tbaa !48
  %.not477 = icmp slt i32 %213, %214
  br i1 %.not477, label %._crit_edge541.thread, label %215

215:                                              ; preds = %205
  %216 = getelementptr inbounds i32, ptr %24, i64 %210
  %217 = load i32, ptr %216, align 4, !tbaa !44
  %218 = load ptr, ptr %195, align 8, !tbaa !49
  %219 = mul nsw i32 %208, %12
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds float, ptr %218, i64 %220
  %222 = icmp sgt i32 %214, 0
  %223 = mul nsw i32 %217, %12
  %224 = sext i32 %223 to i64
  br i1 %222, label %225, label %._crit_edge665

225:                                              ; preds = %215
  %226 = getelementptr inbounds float, ptr %26, i64 %224
  %227 = getelementptr inbounds float, ptr %28, i64 %224
  %228 = call i32 @__AreAllHVwgtsBelow(i32 noundef %12, float noundef 1.000000e+00, ptr noundef %226, float noundef -1.000000e+00, ptr noundef %221, ptr noundef %227)
  %.not478 = icmp eq i32 %228, 0
  br i1 %.not478, label %._crit_edge665, label %._crit_edge541.thread

._crit_edge665:                                   ; preds = %215, %225
  %229 = getelementptr inbounds i8, ptr %211, i64 16
  %230 = load ptr, ptr %229, align 8, !tbaa !50
  %231 = getelementptr inbounds i8, ptr %211, i64 8
  %232 = load i32, ptr %231, align 8, !tbaa !51
  %233 = getelementptr inbounds float, ptr %26, i64 %224
  %234 = icmp sgt i32 %232, 0
  br i1 %234, label %.lr.ph540.preheader, label %._crit_edge541

.lr.ph540.preheader:                              ; preds = %._crit_edge665
  %wide.trip.count633 = zext nneg i32 %232 to i64
  br label %.lr.ph540

.lr.ph540:                                        ; preds = %.lr.ph540.preheader, %248
  %indvars.iv630 = phi i64 [ 0, %.lr.ph540.preheader ], [ %indvars.iv.next631, %248 ]
  %235 = getelementptr inbounds %struct.edegreedef, ptr %230, i64 %indvars.iv630
  %236 = getelementptr inbounds i8, ptr %235, i64 4
  %237 = load i32, ptr %236, align 4, !tbaa !52
  %238 = load i32, ptr %211, align 8, !tbaa !48
  %.not479 = icmp slt i32 %237, %238
  br i1 %.not479, label %248, label %239

239:                                              ; preds = %.lr.ph540
  %240 = load i32, ptr %235, align 4, !tbaa !54
  %241 = mul nsw i32 %240, %12
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds float, ptr %26, i64 %242
  %244 = getelementptr inbounds float, ptr %30, i64 %242
  %245 = call i32 @__AreAllHVwgtsBelow(i32 noundef %12, float noundef 1.000000e+00, ptr noundef %243, float noundef 1.000000e+00, ptr noundef %221, ptr noundef %244)
  %.not480 = icmp eq i32 %245, 0
  br i1 %.not480, label %246, label %._crit_edge541.loopexit

246:                                              ; preds = %239
  %247 = call i32 @__IsHBalanceBetterFT(i32 noundef %12, i32 noundef %2, ptr noundef %233, ptr noundef %243, ptr noundef %221, ptr noundef nonnull %6)
  %.not481 = icmp eq i32 %247, 0
  br i1 %.not481, label %248, label %._crit_edge541.loopexit

248:                                              ; preds = %.lr.ph540, %246
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %exitcond634.not = icmp eq i64 %indvars.iv.next631, %wide.trip.count633
  br i1 %exitcond634.not, label %._crit_edge541.thread, label %.lr.ph540, !llvm.loop !55

._crit_edge541.loopexit:                          ; preds = %239, %246
  %249 = trunc nuw nsw i64 %indvars.iv630 to i32
  br label %._crit_edge541

._crit_edge541:                                   ; preds = %._crit_edge541.loopexit, %._crit_edge665
  %.0443.lcssa = phi i32 [ 0, %._crit_edge665 ], [ %249, %._crit_edge541.loopexit ]
  %250 = icmp eq i32 %.0443.lcssa, %232
  br i1 %250, label %._crit_edge541.thread, label %.preheader496

.preheader496:                                    ; preds = %._crit_edge541
  %.2441547 = add nuw nsw i32 %.0443.lcssa, 1
  %251 = icmp slt i32 %.2441547, %232
  br i1 %251, label %.lr.ph550, label %._crit_edge551

.lr.ph550:                                        ; preds = %.preheader496
  %252 = zext i32 %.2441547 to i64
  br label %253

253:                                              ; preds = %.lr.ph550, %286
  %indvars.iv635 = phi i64 [ %252, %.lr.ph550 ], [ %indvars.iv.next636, %286 ]
  %.1444548 = phi i32 [ %.0443.lcssa, %.lr.ph550 ], [ %.2445, %286 ]
  %254 = getelementptr inbounds %struct.edegreedef, ptr %230, i64 %indvars.iv635
  %255 = load i32, ptr %254, align 4, !tbaa !54
  %256 = getelementptr inbounds i8, ptr %254, i64 4
  %257 = load i32, ptr %256, align 4, !tbaa !52
  %258 = sext i32 %.1444548 to i64
  %259 = getelementptr inbounds %struct.edegreedef, ptr %230, i64 %258
  %260 = getelementptr inbounds i8, ptr %259, i64 4
  %261 = load i32, ptr %260, align 4, !tbaa !52
  %262 = icmp sgt i32 %257, %261
  br i1 %262, label %263, label %271

263:                                              ; preds = %253
  %264 = mul nsw i32 %255, %12
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds float, ptr %26, i64 %265
  %267 = getelementptr inbounds float, ptr %30, i64 %265
  %268 = call i32 @__AreAllHVwgtsBelow(i32 noundef %12, float noundef 1.000000e+00, ptr noundef %266, float noundef 1.000000e+00, ptr noundef %221, ptr noundef %267)
  %.not489 = icmp eq i32 %268, 0
  br i1 %.not489, label %269, label %284

269:                                              ; preds = %263
  %270 = call i32 @__IsHBalanceBetterFT(i32 noundef %12, i32 noundef %2, ptr noundef %233, ptr noundef %266, ptr noundef %221, ptr noundef nonnull %6)
  %.not490 = icmp eq i32 %270, 0
  br i1 %.not490, label %._crit_edge660, label %284

._crit_edge660:                                   ; preds = %269
  %.pre661 = load i32, ptr %256, align 4, !tbaa !52
  %.pre662 = load i32, ptr %260, align 4, !tbaa !52
  br label %271

271:                                              ; preds = %._crit_edge660, %253
  %272 = phi i32 [ %.pre662, %._crit_edge660 ], [ %261, %253 ]
  %273 = phi i32 [ %.pre661, %._crit_edge660 ], [ %257, %253 ]
  %274 = icmp eq i32 %273, %272
  br i1 %274, label %275, label %286

275:                                              ; preds = %271
  %276 = load i32, ptr %259, align 4, !tbaa !54
  %277 = mul nsw i32 %276, %12
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds float, ptr %26, i64 %278
  %280 = mul nsw i32 %255, %12
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds float, ptr %26, i64 %281
  %283 = call i32 @__IsHBalanceBetterTT(i32 noundef %12, i32 noundef %2, ptr noundef %279, ptr noundef %282, ptr noundef %221, ptr noundef nonnull %6)
  %.not491 = icmp eq i32 %283, 0
  br i1 %.not491, label %286, label %284

284:                                              ; preds = %275, %269, %263
  %285 = trunc nuw i64 %indvars.iv635 to i32
  br label %286

286:                                              ; preds = %271, %275, %284
  %.2445 = phi i32 [ %285, %284 ], [ %.1444548, %275 ], [ %.1444548, %271 ]
  %indvars.iv.next636 = add nuw nsw i64 %indvars.iv635, 1
  %287 = trunc nuw i64 %indvars.iv.next636 to i32
  %288 = icmp sgt i32 %232, %287
  br i1 %288, label %253, label %._crit_edge551, !llvm.loop !56

._crit_edge551:                                   ; preds = %286, %.preheader496
  %.1444.lcssa = phi i32 [ %.0443.lcssa, %.preheader496 ], [ %.2445, %286 ]
  %289 = sext i32 %.1444.lcssa to i64
  %290 = getelementptr inbounds %struct.edegreedef, ptr %230, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !54
  %292 = getelementptr inbounds i8, ptr %290, i64 4
  %293 = load i32, ptr %292, align 4, !tbaa !52
  %294 = load i32, ptr %211, align 8, !tbaa !48
  %295 = icmp eq i32 %293, %294
  br i1 %295, label %296, label %304

296:                                              ; preds = %._crit_edge551
  %297 = mul nsw i32 %291, %12
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds float, ptr %26, i64 %298
  %300 = call i32 @__IsHBalanceBetterFT(i32 noundef %12, i32 noundef %2, ptr noundef %233, ptr noundef %299, ptr noundef %221, ptr noundef nonnull %6)
  %.not482 = icmp eq i32 %300, 0
  br i1 %.not482, label %301, label %304

301:                                              ; preds = %296
  %302 = getelementptr inbounds float, ptr %30, i64 %224
  %303 = call i32 @__AreAllHVwgtsBelow(i32 noundef %12, float noundef 1.000000e+00, ptr noundef %233, float noundef 0.000000e+00, ptr noundef %233, ptr noundef %302)
  %.not483 = icmp eq i32 %303, 0
  br i1 %.not483, label %304, label %._crit_edge541.thread

304:                                              ; preds = %301, %296, %._crit_edge551
  %305 = load i32, ptr %292, align 4, !tbaa !52
  %306 = load i32, ptr %211, align 8, !tbaa !48
  %.neg = sub i32 %306, %305
  %307 = load i32, ptr %192, align 8, !tbaa !42
  %308 = add i32 %.neg, %307
  store i32 %308, ptr %192, align 8, !tbaa !42
  %309 = load i32, ptr %165, align 4, !tbaa !37
  %310 = and i32 %309, 32
  %.not484 = icmp eq i32 %310, 0
  br i1 %.not484, label %314, label %311

311:                                              ; preds = %304
  %312 = sub nsw i32 %305, %306
  %313 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %208, i32 noundef %291, i32 noundef %312, i32 noundef %308)
  br label %314

314:                                              ; preds = %311, %304
  %315 = mul nsw i32 %291, %12
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds float, ptr %26, i64 %316
  call void @__saxpy(i32 noundef %12, float noundef 1.000000e+00, ptr noundef %221, i32 noundef 1, ptr noundef %317, i32 noundef 1) #5
  call void @__saxpy(i32 noundef %12, float noundef -1.000000e+00, ptr noundef %221, i32 noundef 1, ptr noundef %233, i32 noundef 1) #5
  store i32 %291, ptr %216, align 4, !tbaa !44
  %318 = load i32, ptr %211, align 8, !tbaa !48
  %319 = load i32, ptr %292, align 4, !tbaa !52
  %320 = sub i32 %318, %319
  %321 = load i32, ptr %212, align 4, !tbaa !46
  %322 = add nsw i32 %320, %321
  store i32 %322, ptr %212, align 4, !tbaa !46
  store i32 %319, ptr %211, align 8, !tbaa !48
  store i32 %318, ptr %292, align 4, !tbaa !52
  %323 = icmp eq i32 %318, 0
  br i1 %323, label %324, label %330

324:                                              ; preds = %314
  %325 = load i32, ptr %231, align 8, !tbaa !51
  %326 = add nsw i32 %325, -1
  store i32 %326, ptr %231, align 8, !tbaa !51
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds %struct.edegreedef, ptr %230, i64 %327
  %329 = load i64, ptr %328, align 4
  store i64 %329, ptr %290, align 4
  %.pre663 = load i32, ptr %212, align 4, !tbaa !46
  %.pre664 = load i32, ptr %211, align 8, !tbaa !48
  br label %331

330:                                              ; preds = %314
  store i32 %217, ptr %290, align 4, !tbaa !54
  br label %331

331:                                              ; preds = %330, %324
  %332 = phi i32 [ %319, %330 ], [ %.pre664, %324 ]
  %333 = phi i32 [ %322, %330 ], [ %.pre663, %324 ]
  %334 = icmp slt i32 %333, %332
  br i1 %334, label %335, label %347

335:                                              ; preds = %331
  %336 = add nsw i32 %.0451568, -1
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds i32, ptr %22, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !44
  %340 = getelementptr inbounds i32, ptr %20, i64 %210
  %341 = load i32, ptr %340, align 4, !tbaa !44
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %22, i64 %342
  store i32 %339, ptr %343, align 4, !tbaa !44
  %344 = load i32, ptr %340, align 4, !tbaa !44
  %345 = sext i32 %339 to i64
  %346 = getelementptr inbounds i32, ptr %20, i64 %345
  store i32 %344, ptr %346, align 4, !tbaa !44
  store i32 -1, ptr %340, align 4, !tbaa !44
  br label %347

347:                                              ; preds = %335, %331
  %.1452 = phi i32 [ %336, %335 ], [ %.0451568, %331 ]
  %348 = getelementptr inbounds i32, ptr %14, i64 %210
  %349 = load i32, ptr %348, align 4, !tbaa !44
  %350 = getelementptr i8, ptr %348, i64 4
  %351 = load i32, ptr %350, align 4, !tbaa !44
  %352 = icmp slt i32 %349, %351
  br i1 %352, label %.lr.ph565.preheader, label %._crit_edge566

.lr.ph565.preheader:                              ; preds = %347
  %353 = sext i32 %349 to i64
  br label %.lr.ph565

.lr.ph565:                                        ; preds = %.lr.ph565.preheader, %463
  %indvars.iv648 = phi i64 [ %353, %.lr.ph565.preheader ], [ %indvars.iv.next649, %463 ]
  %.2453562 = phi i32 [ %.1452, %.lr.ph565.preheader ], [ %.3454493, %463 ]
  %354 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv648
  %355 = load i32, ptr %354, align 4, !tbaa !44
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %24, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !44
  %359 = load ptr, ptr %194, align 8, !tbaa !45
  %360 = getelementptr inbounds %struct.rinfodef, ptr %359, i64 %356
  %361 = getelementptr inbounds i8, ptr %360, i64 16
  %362 = load ptr, ptr %361, align 8, !tbaa !50
  %363 = icmp eq ptr %362, null
  br i1 %363, label %364, label %375

364:                                              ; preds = %.lr.ph565
  %365 = load ptr, ptr %196, align 8, !tbaa !57
  %366 = load i32, ptr %197, align 8, !tbaa !58
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds %struct.edegreedef, ptr %365, i64 %367
  store ptr %368, ptr %361, align 8, !tbaa !50
  %369 = getelementptr i32, ptr %14, i64 %356
  %370 = getelementptr i8, ptr %369, i64 4
  %371 = load i32, ptr %370, align 4, !tbaa !44
  %372 = load i32, ptr %369, align 4, !tbaa !44
  %373 = add i32 %371, %366
  %374 = sub i32 %373, %372
  store i32 %374, ptr %197, align 8, !tbaa !58
  br label %375

375:                                              ; preds = %364, %.lr.ph565
  %376 = phi ptr [ %368, %364 ], [ %362, %.lr.ph565 ]
  %377 = icmp eq i32 %358, %217
  br i1 %377, label %378, label %395

378:                                              ; preds = %375
  %379 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv648
  %380 = load i32, ptr %379, align 4, !tbaa !44
  %381 = getelementptr inbounds i8, ptr %360, i64 4
  %382 = load i32, ptr %381, align 4, !tbaa !46
  %383 = add nsw i32 %382, %380
  store i32 %383, ptr %381, align 4, !tbaa !46
  %384 = load i32, ptr %379, align 4, !tbaa !44
  %385 = load i32, ptr %360, align 8, !tbaa !48
  %386 = sub nsw i32 %385, %384
  store i32 %386, ptr %360, align 8, !tbaa !48
  %.not486 = icmp slt i32 %383, %386
  br i1 %.not486, label %.thread, label %387

387:                                              ; preds = %378
  %388 = getelementptr inbounds i32, ptr %20, i64 %356
  %389 = load i32, ptr %388, align 4, !tbaa !44
  %390 = icmp eq i32 %389, -1
  br i1 %390, label %391, label %.thread

391:                                              ; preds = %387
  %392 = sext i32 %.2453562 to i64
  %393 = getelementptr inbounds i32, ptr %22, i64 %392
  store i32 %355, ptr %393, align 4, !tbaa !44
  %394 = add nsw i32 %.2453562, 1
  store i32 %.2453562, ptr %388, align 4, !tbaa !44
  br label %.thread

395:                                              ; preds = %375
  %396 = icmp eq i32 %358, %291
  br i1 %396, label %397, label %420

397:                                              ; preds = %395
  %398 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv648
  %399 = load i32, ptr %398, align 4, !tbaa !44
  %400 = load i32, ptr %360, align 8, !tbaa !48
  %401 = add nsw i32 %400, %399
  store i32 %401, ptr %360, align 8, !tbaa !48
  %402 = load i32, ptr %398, align 4, !tbaa !44
  %403 = getelementptr inbounds i8, ptr %360, i64 4
  %404 = load i32, ptr %403, align 4, !tbaa !46
  %405 = sub nsw i32 %404, %402
  store i32 %405, ptr %403, align 4, !tbaa !46
  %406 = icmp slt i32 %405, %401
  br i1 %406, label %407, label %420

407:                                              ; preds = %397
  %408 = getelementptr inbounds i32, ptr %20, i64 %356
  %409 = load i32, ptr %408, align 4, !tbaa !44
  %.not485 = icmp eq i32 %409, -1
  br i1 %.not485, label %420, label %410

410:                                              ; preds = %407
  %411 = add nsw i32 %.2453562, -1
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds i32, ptr %22, i64 %412
  %414 = load i32, ptr %413, align 4, !tbaa !44
  %415 = sext i32 %409 to i64
  %416 = getelementptr inbounds i32, ptr %22, i64 %415
  store i32 %414, ptr %416, align 4, !tbaa !44
  %417 = load i32, ptr %408, align 4, !tbaa !44
  %418 = sext i32 %414 to i64
  %419 = getelementptr inbounds i32, ptr %20, i64 %418
  store i32 %417, ptr %419, align 4, !tbaa !44
  store i32 -1, ptr %408, align 4, !tbaa !44
  br label %420

420:                                              ; preds = %395, %410, %407, %397
  %.3454 = phi i32 [ %411, %410 ], [ %.2453562, %407 ], [ %.2453562, %397 ], [ %.2453562, %395 ]
  %421 = getelementptr inbounds i8, ptr %360, i64 8
  %422 = load i32, ptr %421, align 8, !tbaa !51
  %423 = icmp sgt i32 %422, 0
  br i1 %423, label %.lr.ph556.preheader, label %.thread

.lr.ph556.preheader:                              ; preds = %420
  %wide.trip.count641 = zext nneg i32 %422 to i64
  br label %.lr.ph556

424:                                              ; preds = %.lr.ph556
  %indvars.iv.next639 = add nuw nsw i64 %indvars.iv638, 1
  %exitcond642.not = icmp eq i64 %indvars.iv.next639, %wide.trip.count641
  br i1 %exitcond642.not, label %.thread, label %.lr.ph556, !llvm.loop !59

.lr.ph556:                                        ; preds = %.lr.ph556.preheader, %424
  %indvars.iv638 = phi i64 [ 0, %.lr.ph556.preheader ], [ %indvars.iv.next639, %424 ]
  %425 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %indvars.iv638
  %426 = load i32, ptr %425, align 4, !tbaa !54
  %427 = icmp eq i32 %426, %217
  br i1 %427, label %428, label %424

428:                                              ; preds = %.lr.ph556
  %429 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %indvars.iv638
  %430 = getelementptr inbounds i8, ptr %429, i64 4
  %431 = load i32, ptr %430, align 4, !tbaa !52
  %432 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv648
  %433 = load i32, ptr %432, align 4, !tbaa !44
  %434 = icmp eq i32 %431, %433
  br i1 %434, label %435, label %440

435:                                              ; preds = %428
  %436 = add nsw i32 %422, -1
  store i32 %436, ptr %421, align 8, !tbaa !51
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %437
  %439 = load i64, ptr %438, align 4
  store i64 %439, ptr %429, align 4
  br label %.thread

440:                                              ; preds = %428
  %441 = sub nsw i32 %431, %433
  store i32 %441, ptr %430, align 4, !tbaa !52
  br label %.thread

.thread:                                          ; preds = %424, %420, %391, %387, %378, %440, %435
  %.3454493 = phi i32 [ %.3454, %440 ], [ %.3454, %435 ], [ %.2453562, %378 ], [ %.2453562, %387 ], [ %394, %391 ], [ %.3454, %420 ], [ %.3454, %424 ]
  %.not488 = icmp eq i32 %358, %291
  br i1 %.not488, label %463, label %.preheader

.preheader:                                       ; preds = %.thread
  %442 = getelementptr inbounds i8, ptr %360, i64 8
  %443 = load i32, ptr %442, align 8, !tbaa !51
  %444 = icmp sgt i32 %443, 0
  br i1 %444, label %.lr.ph559.preheader, label %.loopexit

.lr.ph559.preheader:                              ; preds = %.preheader
  %wide.trip.count646 = zext nneg i32 %443 to i64
  br label %.lr.ph559

.lr.ph559:                                        ; preds = %.lr.ph559.preheader, %455
  %indvars.iv643 = phi i64 [ 0, %.lr.ph559.preheader ], [ %indvars.iv.next644, %455 ]
  %445 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %indvars.iv643
  %446 = load i32, ptr %445, align 4, !tbaa !54
  %447 = icmp eq i32 %446, %291
  br i1 %447, label %448, label %455

448:                                              ; preds = %.lr.ph559
  %449 = trunc nuw nsw i64 %indvars.iv643 to i32
  %450 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv648
  %451 = load i32, ptr %450, align 4, !tbaa !44
  %452 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %indvars.iv643, i32 1
  %453 = load i32, ptr %452, align 4, !tbaa !52
  %454 = add nsw i32 %453, %451
  store i32 %454, ptr %452, align 4, !tbaa !52
  br label %.loopexit

455:                                              ; preds = %.lr.ph559
  %indvars.iv.next644 = add nuw nsw i64 %indvars.iv643, 1
  %exitcond647.not = icmp eq i64 %indvars.iv.next644, %wide.trip.count646
  br i1 %exitcond647.not, label %.loopexit.thread, label %.lr.ph559, !llvm.loop !60

.loopexit:                                        ; preds = %.preheader, %448
  %.4447511 = phi i32 [ %449, %448 ], [ 0, %.preheader ]
  %456 = icmp eq i32 %.4447511, %443
  br i1 %456, label %.loopexit.thread, label %463

.loopexit.thread:                                 ; preds = %455, %.loopexit
  %457 = sext i32 %443 to i64
  %458 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %457
  store i32 %291, ptr %458, align 4, !tbaa !54
  %459 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv648
  %460 = load i32, ptr %459, align 4, !tbaa !44
  %461 = add nsw i32 %443, 1
  store i32 %461, ptr %442, align 8, !tbaa !51
  %462 = getelementptr inbounds %struct.edegreedef, ptr %376, i64 %457, i32 1
  store i32 %460, ptr %462, align 4, !tbaa !52
  br label %463

463:                                              ; preds = %.thread, %.loopexit.thread, %.loopexit
  %indvars.iv.next649 = add nsw i64 %indvars.iv648, 1
  %464 = load i32, ptr %350, align 4, !tbaa !44
  %465 = sext i32 %464 to i64
  %466 = icmp slt i64 %indvars.iv.next649, %465
  br i1 %466, label %.lr.ph565, label %._crit_edge566, !llvm.loop !61

._crit_edge566:                                   ; preds = %463, %347
  %.2453.lcssa = phi i32 [ %.1452, %347 ], [ %.3454493, %463 ]
  %467 = add nsw i32 %.0449569, 1
  br label %._crit_edge541.thread

._crit_edge541.thread:                            ; preds = %248, %205, %._crit_edge566, %301, %._crit_edge541, %225, %.lr.ph572
  %.4455 = phi i32 [ %.0451568, %.lr.ph572 ], [ %.0451568, %225 ], [ %.0451568, %._crit_edge541 ], [ %.2453.lcssa, %._crit_edge566 ], [ %.0451568, %301 ], [ %.0451568, %205 ], [ %.0451568, %248 ]
  %.1450 = phi i32 [ %.0449569, %.lr.ph572 ], [ %.0449569, %225 ], [ %.0449569, %._crit_edge541 ], [ %467, %._crit_edge566 ], [ %.0449569, %301 ], [ %.0449569, %205 ], [ %.0449569, %248 ]
  %indvars.iv.next652 = add nuw nsw i64 %indvars.iv651, 1
  %468 = load i32, ptr %193, align 8, !tbaa !41
  %469 = sext i32 %468 to i64
  %470 = icmp slt i64 %indvars.iv.next652, %469
  br i1 %470, label %.lr.ph572, label %._crit_edge573, !llvm.loop !62

._crit_edge573:                                   ; preds = %._crit_edge541.thread, %198
  %.0451.lcssa = phi i32 [ %200, %198 ], [ %.4455, %._crit_edge541.thread ]
  %.0449.lcssa = phi i32 [ 0, %198 ], [ %.1450, %._crit_edge541.thread ]
  store i32 %.0451.lcssa, ptr %193, align 8, !tbaa !41
  %471 = load i32, ptr %165, align 4, !tbaa !37
  %472 = and i32 %471, 8
  %.not475 = icmp eq i32 %472, 0
  br i1 %.not475, label %491, label %473

473:                                              ; preds = %._crit_edge573
  %474 = call i32 @__samin(i32 noundef %27, ptr noundef %26) #5
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds float, ptr %26, i64 %475
  %477 = load float, ptr %476, align 4, !tbaa !19
  %478 = fpext float %477 to double
  %479 = call i32 @__samax(i32 noundef %27, ptr noundef %26) #5
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds float, ptr %26, i64 %480
  %482 = load float, ptr %481, align 4, !tbaa !19
  %483 = fpext float %482 to double
  %484 = load i32, ptr %192, align 8, !tbaa !42
  %485 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %478, double noundef %483, i32 noundef %.0451.lcssa, i32 noundef %.0449.lcssa, i32 noundef %484)
  call void @__ComputeHKWayLoadImbalance(i32 noundef %12, i32 noundef %2, ptr noundef %26, ptr noundef nonnull %8)
  br i1 %54, label %.lr.ph578, label %._crit_edge579

.lr.ph578:                                        ; preds = %473, %.lr.ph578
  %indvars.iv654 = phi i64 [ %indvars.iv.next655, %.lr.ph578 ], [ 0, %473 ]
  %486 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %indvars.iv654
  %487 = load float, ptr %486, align 4, !tbaa !19
  %488 = fpext float %487 to double
  %489 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %488)
  %indvars.iv.next655 = add nuw nsw i64 %indvars.iv654, 1
  %exitcond658.not = icmp eq i64 %indvars.iv.next655, %wide.trip.count657
  br i1 %exitcond658.not, label %._crit_edge579, label %.lr.ph578, !llvm.loop !63

._crit_edge579:                                   ; preds = %.lr.ph578, %473
  %490 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %491

491:                                              ; preds = %._crit_edge579, %._crit_edge573
  %492 = load i32, ptr %192, align 8, !tbaa !42
  %493 = icmp eq i32 %492, %199
  %494 = add nuw nsw i32 %.0448580, 1
  %exitcond659.not = icmp eq i32 %494, %4
  %or.cond = select i1 %493, i1 true, i1 %exitcond659.not
  br i1 %or.cond, label %._crit_edge583, label %198, !llvm.loop !64

._crit_edge583:                                   ; preds = %491, %190
  call void @fwspacefree(ptr noundef %0, i32 noundef %27) #5
  call void @fwspacefree(ptr noundef %0, i32 noundef %27) #5
  call void @__idxwspacefree(ptr noundef %0, i32 noundef %10) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #5
  ret void
}

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

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

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

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 i32 @__samin(i32 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 16}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 104, !10, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !10, i64 176, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !10, i64 176}
!12 = !{!6, !7, i64 24}
!13 = !{!6, !7, i64 48}
!14 = !{!6, !7, i64 56}
!15 = !{!6, !7, i64 120}
!16 = !{!6, !7, i64 128}
!17 = !{!6, !7, i64 96}
!18 = !{!6, !7, i64 192}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !8, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22, !24, !25}
!24 = !{!"llvm.loop.isvectorized", i32 1}
!25 = !{!"llvm.loop.unroll.runtime.disable"}
!26 = distinct !{!26, !22, !25, !24}
!27 = distinct !{!27, !22, !24, !25}
!28 = distinct !{!28, !22, !24}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.unroll.disable"}
!32 = distinct !{!32, !22, !24, !25}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !22, !24}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = !{!38, !10, i64 4}
!38 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !20, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !39, i64 48, !40, i64 104, !40, i64 112, !40, i64 120, !40, i64 128, !40, i64 136, !40, i64 144, !40, i64 152, !40, i64 160, !40, i64 168, !40, i64 176, !40, i64 184, !40, i64 192, !40, i64 200, !40, i64 208, !40, i64 216, !40, i64 224}
!39 = !{!"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}
!40 = !{!"double", !8, i64 0}
!41 = !{!6, !10, i64 112}
!42 = !{!6, !10, i64 88}
!43 = distinct !{!43, !22}
!44 = !{!10, !10, i64 0}
!45 = !{!6, !7, i64 152}
!46 = !{!47, !10, i64 4}
!47 = !{!"rinfodef", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16}
!48 = !{!47, !10, i64 0}
!49 = !{!6, !7, i64 184}
!50 = !{!47, !7, i64 16}
!51 = !{!47, !10, i64 8}
!52 = !{!53, !10, i64 4}
!53 = !{!"edegreedef", !10, i64 0, !10, i64 4}
!54 = !{!53, !10, i64 0}
!55 = distinct !{!55, !22}
!56 = distinct !{!56, !22}
!57 = !{!38, !7, i64 64}
!58 = !{!38, !10, i64 80}
!59 = distinct !{!59, !22}
!60 = distinct !{!60, !22}
!61 = distinct !{!61, !22}
!62 = distinct !{!62, !22}
!63 = distinct !{!63, !22}
!64 = distinct !{!64, !22}


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