; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis/kwayvolfm.ll_libmetis (Random_KWayVolRefine)

; 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 { i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr }
%struct.controldef = type { i64, i64, i64, i64, i64, i64, float, i64, i64, i64, i64, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i64, i64, ptr, ptr, i64, ptr, ptr }
%struct.vrinfodef = type { i64, i64, i64, i64, i64, ptr }
%struct.vedegreedef = type { i64, i64, i64, i64 }

@.str = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [70 x i8], align 1

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

94:                                               ; preds = %139, %7
  %95 = load i64, ptr %15, align 8, !tbaa !9
  %96 = load i64, ptr %10, align 8, !tbaa !9
  %97 = icmp slt i64 %95, %96
  br i1 %97, label %98, label %142

98:                                               ; preds = %94
  %99 = load ptr, ptr %11, align 8, !tbaa !5
  %100 = load i64, ptr %15, align 8, !tbaa !9
  %101 = getelementptr inbounds float, ptr %99, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !11
  %103 = load i64, ptr %27, align 8, !tbaa !9
  %104 = sitofp i64 %103 to float
  %105 = fmul float %102, %104
  %106 = fptosi float %105 to i64
  %107 = load ptr, ptr %46, align 8, !tbaa !5
  %108 = load i64, ptr %15, align 8, !tbaa !9
  %109 = getelementptr inbounds i64, ptr %107, i64 %108
  store i64 %106, ptr %109, align 8, !tbaa !9
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = load i64, ptr %15, align 8, !tbaa !9
  %112 = getelementptr inbounds float, ptr %110, i64 %111
  %113 = load float, ptr %112, align 4, !tbaa !11
  %114 = load i64, ptr %27, align 8, !tbaa !9
  %115 = sitofp i64 %114 to float
  %116 = fmul float %113, %115
  %117 = load float, ptr %12, align 4, !tbaa !11
  %118 = fmul float %116, %117
  %119 = fptosi float %118 to i64
  %120 = load ptr, ptr %45, align 8, !tbaa !5
  %121 = load i64, ptr %15, align 8, !tbaa !9
  %122 = getelementptr inbounds i64, ptr %120, i64 %121
  store i64 %119, ptr %122, align 8, !tbaa !9
  %123 = load ptr, ptr %11, align 8, !tbaa !5
  %124 = load i64, ptr %15, align 8, !tbaa !9
  %125 = getelementptr inbounds float, ptr %123, i64 %124
  %126 = load float, ptr %125, align 4, !tbaa !11
  %127 = load i64, ptr %27, align 8, !tbaa !9
  %128 = sitofp i64 %127 to float
  %129 = fmul float %126, %128
  %130 = fpext float %129 to double
  %131 = load float, ptr %12, align 4, !tbaa !11
  %132 = fpext float %131 to double
  %133 = fdiv double 1.000000e+00, %132
  %134 = fmul double %130, %133
  %135 = fptosi double %134 to i64
  %136 = load ptr, ptr %44, align 8, !tbaa !5
  %137 = load i64, ptr %15, align 8, !tbaa !9
  %138 = getelementptr inbounds i64, ptr %136, i64 %137
  store i64 %135, ptr %138, align 8, !tbaa !9
  br label %139

139:                                              ; preds = %98
  %140 = load i64, ptr %15, align 8, !tbaa !9
  %141 = add nsw i64 %140, 1
  store i64 %141, ptr %15, align 8, !tbaa !9
  br label %94, !llvm.loop !23

142:                                              ; preds = %94
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = load i64, ptr %25, align 8, !tbaa !9
  %145 = call ptr @libmetis__idxwspacemalloc(ptr noundef %143, i64 noundef %144)
  store ptr %145, ptr %41, align 8, !tbaa !5
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.controldef, ptr %146, i32 0, i32 1
  %148 = load i64, ptr %147, align 8, !tbaa !25
  %149 = and i64 %148, 8
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %197

151:                                              ; preds = %142
  %152 = load ptr, ptr %40, align 8, !tbaa !5
  %153 = load i64, ptr %10, align 8, !tbaa !9
  %154 = load ptr, ptr %40, align 8, !tbaa !5
  %155 = call i64 @libmetis__idxargmin(i64 noundef %153, ptr noundef %154)
  %156 = getelementptr inbounds i64, ptr %152, i64 %155
  %157 = load i64, ptr %156, align 8, !tbaa !9
  %158 = load ptr, ptr %40, align 8, !tbaa !5
  %159 = load i64, ptr %10, align 8, !tbaa !9
  %160 = load ptr, ptr %40, align 8, !tbaa !5
  %161 = call i64 @libmetis__idxargmax(i64 noundef %159, ptr noundef %160)
  %162 = getelementptr inbounds i64, ptr %158, i64 %161
  %163 = load i64, ptr %162, align 8, !tbaa !9
  %164 = load ptr, ptr %44, align 8, !tbaa !5
  %165 = getelementptr inbounds i64, ptr %164, i64 0
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = load ptr, ptr %45, align 8, !tbaa !5
  %168 = getelementptr inbounds i64, ptr %167, i64 0
  %169 = load i64, ptr %168, align 8, !tbaa !9
  %170 = load i64, ptr %10, align 8, !tbaa !9
  %171 = sitofp i64 %170 to double
  %172 = fmul double 1.000000e+00, %171
  %173 = load ptr, ptr %40, align 8, !tbaa !5
  %174 = load i64, ptr %10, align 8, !tbaa !9
  %175 = load ptr, ptr %40, align 8, !tbaa !5
  %176 = call i64 @libmetis__idxargmax(i64 noundef %174, ptr noundef %175)
  %177 = getelementptr inbounds i64, ptr %173, i64 %176
  %178 = load i64, ptr %177, align 8, !tbaa !9
  %179 = sitofp i64 %178 to double
  %180 = fmul double %172, %179
  %181 = load i64, ptr %27, align 8, !tbaa !9
  %182 = sitofp i64 %181 to double
  %183 = fdiv double %180, %182
  %184 = load ptr, ptr %9, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.graphdef, ptr %184, i32 0, i32 0
  %186 = load i64, ptr %185, align 8, !tbaa !13
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.graphdef, ptr %187, i32 0, i32 20
  %189 = load i64, ptr %188, align 8, !tbaa !29
  %190 = load ptr, ptr %9, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.graphdef, ptr %190, i32 0, i32 16
  %192 = load i64, ptr %191, align 8, !tbaa !30
  %193 = load ptr, ptr %9, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.graphdef, ptr %193, i32 0, i32 17
  %195 = load i64, ptr %194, align 8, !tbaa !31
  %196 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %157, i64 noundef %163, i64 noundef %166, i64 noundef %169, double noundef %183, i64 noundef %186, i64 noundef %189, i64 noundef %192, i64 noundef %195)
  br label %197

197:                                              ; preds = %151, %142
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %198

198:                                              ; preds = %694, %197
  %199 = load i64, ptr %24, align 8, !tbaa !9
  %200 = load i64, ptr %13, align 8, !tbaa !9
  %201 = icmp slt i64 %199, %200
  br i1 %201, label %202, label %697

202:                                              ; preds = %198
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.graphdef, ptr %203, i32 0, i32 16
  %205 = load i64, ptr %204, align 8, !tbaa !30
  store i64 %205, ptr %33, align 8, !tbaa !9
  %206 = load ptr, ptr %9, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.graphdef, ptr %206, i32 0, i32 17
  %208 = load i64, ptr %207, align 8, !tbaa !31
  store i64 %208, ptr %34, align 8, !tbaa !9
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.graphdef, ptr %209, i32 0, i32 20
  %211 = load i64, ptr %210, align 8, !tbaa !29
  %212 = load ptr, ptr %41, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %211, ptr noundef %212, i64 noundef 1)
  store i64 0, ptr %17, align 8, !tbaa !9
  store i64 0, ptr %26, align 8, !tbaa !9
  br label %213

213:                                              ; preds = %633, %202
  %214 = load i64, ptr %17, align 8, !tbaa !9
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.graphdef, ptr %215, i32 0, i32 20
  %217 = load i64, ptr %216, align 8, !tbaa !29
  %218 = icmp slt i64 %214, %217
  br i1 %218, label %219, label %636

219:                                              ; preds = %213
  %220 = load ptr, ptr %41, align 8, !tbaa !5
  %221 = load i64, ptr %17, align 8, !tbaa !9
  %222 = getelementptr inbounds i64, ptr %220, i64 %221
  %223 = load i64, ptr %222, align 8, !tbaa !9
  store i64 %223, ptr %16, align 8, !tbaa !9
  %224 = load i64, ptr %16, align 8, !tbaa !9
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.graphdef, ptr %225, i32 0, i32 20
  %227 = load i64, ptr %226, align 8, !tbaa !29
  %228 = icmp sge i64 %224, %227
  br i1 %228, label %229, label %230

229:                                              ; preds = %219
  br label %633

230:                                              ; preds = %219
  %231 = load ptr, ptr %43, align 8, !tbaa !5
  %232 = load i64, ptr %16, align 8, !tbaa !9
  %233 = getelementptr inbounds i64, ptr %231, i64 %232
  %234 = load i64, ptr %233, align 8, !tbaa !9
  store i64 %234, ptr %15, align 8, !tbaa !9
  %235 = load ptr, ptr %9, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.graphdef, ptr %235, i32 0, i32 26
  %237 = load ptr, ptr %236, align 8, !tbaa !32
  %238 = load i64, ptr %15, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.vrinfodef, ptr %237, i64 %238
  store ptr %239, ptr %51, align 8, !tbaa !5
  %240 = load ptr, ptr %51, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.vrinfodef, ptr %240, i32 0, i32 3
  %242 = load i64, ptr %241, align 8, !tbaa !33
  %243 = icmp sge i64 %242, 0
  br i1 %243, label %244, label %632

244:                                              ; preds = %230
  %245 = load ptr, ptr %39, align 8, !tbaa !5
  %246 = load i64, ptr %15, align 8, !tbaa !9
  %247 = getelementptr inbounds i64, ptr %245, i64 %246
  %248 = load i64, ptr %247, align 8, !tbaa !9
  store i64 %248, ptr %30, align 8, !tbaa !9
  %249 = load ptr, ptr %9, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.graphdef, ptr %249, i32 0, i32 3
  %251 = load ptr, ptr %250, align 8, !tbaa !35
  %252 = load i64, ptr %15, align 8, !tbaa !9
  %253 = getelementptr inbounds i64, ptr %251, i64 %252
  %254 = load i64, ptr %253, align 8, !tbaa !9
  store i64 %254, ptr %35, align 8, !tbaa !9
  %255 = load ptr, ptr %51, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.vrinfodef, ptr %255, i32 0, i32 0
  %257 = load i64, ptr %256, align 8, !tbaa !36
  %258 = icmp sgt i64 %257, 0
  br i1 %258, label %259, label %272

259:                                              ; preds = %244
  %260 = load ptr, ptr %40, align 8, !tbaa !5
  %261 = load i64, ptr %30, align 8, !tbaa !9
  %262 = getelementptr inbounds i64, ptr %260, i64 %261
  %263 = load i64, ptr %262, align 8, !tbaa !9
  %264 = load i64, ptr %35, align 8, !tbaa !9
  %265 = sub nsw i64 %263, %264
  %266 = load ptr, ptr %44, align 8, !tbaa !5
  %267 = load i64, ptr %30, align 8, !tbaa !9
  %268 = getelementptr inbounds i64, ptr %266, i64 %267
  %269 = load i64, ptr %268, align 8, !tbaa !9
  %270 = icmp slt i64 %265, %269
  br i1 %270, label %271, label %272

271:                                              ; preds = %259
  br label %633

272:                                              ; preds = %259, %244
  %273 = load ptr, ptr %51, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.vrinfodef, ptr %273, i32 0, i32 0
  %275 = load i64, ptr %274, align 8, !tbaa !36
  %276 = icmp eq i64 %275, 0
  br i1 %276, label %277, label %289

277:                                              ; preds = %272
  %278 = load ptr, ptr %51, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.vrinfodef, ptr %278, i32 0, i32 1
  %280 = load i64, ptr %279, align 8, !tbaa !37
  %281 = icmp sgt i64 %280, 0
  br i1 %281, label %282, label %289

282:                                              ; preds = %277
  %283 = load ptr, ptr %9, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.graphdef, ptr %283, i32 0, i32 4
  %285 = load ptr, ptr %284, align 8, !tbaa !38
  %286 = load i64, ptr %15, align 8, !tbaa !9
  %287 = getelementptr inbounds i64, ptr %285, i64 %286
  %288 = load i64, ptr %287, align 8, !tbaa !9
  br label %290

289:                                              ; preds = %277, %272
  br label %290

290:                                              ; preds = %289, %282
  %291 = phi i64 [ %288, %282 ], [ 0, %289 ]
  store i64 %291, ptr %29, align 8, !tbaa !9
  %292 = load ptr, ptr %51, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.vrinfodef, ptr %292, i32 0, i32 5
  %294 = load ptr, ptr %293, align 8, !tbaa !39
  store ptr %294, ptr %50, align 8, !tbaa !5
  %295 = load ptr, ptr %51, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.vrinfodef, ptr %295, i32 0, i32 4
  %297 = load i64, ptr %296, align 8, !tbaa !40
  store i64 %297, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %298

298:                                              ; preds = %338, %290
  %299 = load i64, ptr %20, align 8, !tbaa !9
  %300 = load i64, ptr %28, align 8, !tbaa !9
  %301 = icmp slt i64 %299, %300
  br i1 %301, label %302, label %341

302:                                              ; preds = %298
  %303 = load ptr, ptr %50, align 8, !tbaa !5
  %304 = load i64, ptr %20, align 8, !tbaa !9
  %305 = getelementptr inbounds %struct.vedegreedef, ptr %303, i64 %304
  %306 = getelementptr inbounds %struct.vedegreedef, ptr %305, i32 0, i32 0
  %307 = load i64, ptr %306, align 8, !tbaa !41
  store i64 %307, ptr %32, align 8, !tbaa !9
  %308 = load ptr, ptr %40, align 8, !tbaa !5
  %309 = load i64, ptr %32, align 8, !tbaa !9
  %310 = getelementptr inbounds i64, ptr %308, i64 %309
  %311 = load i64, ptr %310, align 8, !tbaa !9
  %312 = load i64, ptr %35, align 8, !tbaa !9
  %313 = add nsw i64 %311, %312
  %314 = load ptr, ptr %45, align 8, !tbaa !5
  %315 = load i64, ptr %32, align 8, !tbaa !9
  %316 = getelementptr inbounds i64, ptr %314, i64 %315
  %317 = load i64, ptr %316, align 8, !tbaa !9
  %318 = load i64, ptr %14, align 8, !tbaa !9
  %319 = load ptr, ptr %50, align 8, !tbaa !5
  %320 = load i64, ptr %20, align 8, !tbaa !9
  %321 = getelementptr inbounds %struct.vedegreedef, ptr %319, i64 %320
  %322 = getelementptr inbounds %struct.vedegreedef, ptr %321, i32 0, i32 3
  %323 = load i64, ptr %322, align 8, !tbaa !43
  %324 = mul nsw i64 %318, %323
  %325 = add nsw i64 %317, %324
  %326 = icmp sle i64 %313, %325
  br i1 %326, label %327, label %337

327:                                              ; preds = %302
  %328 = load i64, ptr %29, align 8, !tbaa !9
  %329 = load ptr, ptr %50, align 8, !tbaa !5
  %330 = load i64, ptr %20, align 8, !tbaa !9
  %331 = getelementptr inbounds %struct.vedegreedef, ptr %329, i64 %330
  %332 = getelementptr inbounds %struct.vedegreedef, ptr %331, i32 0, i32 3
  %333 = load i64, ptr %332, align 8, !tbaa !43
  %334 = add nsw i64 %328, %333
  %335 = icmp sge i64 %334, 0
  br i1 %335, label %336, label %337

336:                                              ; preds = %327
  br label %341

337:                                              ; preds = %327, %302
  br label %338

338:                                              ; preds = %337
  %339 = load i64, ptr %20, align 8, !tbaa !9
  %340 = add nsw i64 %339, 1
  store i64 %340, ptr %20, align 8, !tbaa !9
  br label %298, !llvm.loop !44

341:                                              ; preds = %336, %298
  %342 = load i64, ptr %20, align 8, !tbaa !9
  %343 = load i64, ptr %28, align 8, !tbaa !9
  %344 = icmp eq i64 %342, %343
  br i1 %344, label %345, label %346

345:                                              ; preds = %341
  br label %633

346:                                              ; preds = %341
  %347 = load i64, ptr %20, align 8, !tbaa !9
  %348 = add nsw i64 %347, 1
  store i64 %348, ptr %18, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %462, %346
  %350 = load i64, ptr %18, align 8, !tbaa !9
  %351 = load i64, ptr %28, align 8, !tbaa !9
  %352 = icmp slt i64 %350, %351
  br i1 %352, label %353, label %465

353:                                              ; preds = %349
  %354 = load ptr, ptr %50, align 8, !tbaa !5
  %355 = load i64, ptr %18, align 8, !tbaa !9
  %356 = getelementptr inbounds %struct.vedegreedef, ptr %354, i64 %355
  %357 = getelementptr inbounds %struct.vedegreedef, ptr %356, i32 0, i32 0
  %358 = load i64, ptr %357, align 8, !tbaa !41
  store i64 %358, ptr %32, align 8, !tbaa !9
  %359 = load ptr, ptr %40, align 8, !tbaa !5
  %360 = load i64, ptr %32, align 8, !tbaa !9
  %361 = getelementptr inbounds i64, ptr %359, i64 %360
  %362 = load i64, ptr %361, align 8, !tbaa !9
  %363 = load i64, ptr %35, align 8, !tbaa !9
  %364 = add nsw i64 %362, %363
  %365 = load ptr, ptr %45, align 8, !tbaa !5
  %366 = load i64, ptr %32, align 8, !tbaa !9
  %367 = getelementptr inbounds i64, ptr %365, i64 %366
  %368 = load i64, ptr %367, align 8, !tbaa !9
  %369 = icmp sgt i64 %364, %368
  br i1 %369, label %370, label %371

370:                                              ; preds = %353
  br label %462

371:                                              ; preds = %353
  %372 = load ptr, ptr %50, align 8, !tbaa !5
  %373 = load i64, ptr %18, align 8, !tbaa !9
  %374 = getelementptr inbounds %struct.vedegreedef, ptr %372, i64 %373
  %375 = getelementptr inbounds %struct.vedegreedef, ptr %374, i32 0, i32 3
  %376 = load i64, ptr %375, align 8, !tbaa !43
  %377 = load ptr, ptr %50, align 8, !tbaa !5
  %378 = load i64, ptr %20, align 8, !tbaa !9
  %379 = getelementptr inbounds %struct.vedegreedef, ptr %377, i64 %378
  %380 = getelementptr inbounds %struct.vedegreedef, ptr %379, i32 0, i32 3
  %381 = load i64, ptr %380, align 8, !tbaa !43
  %382 = icmp sgt i64 %376, %381
  br i1 %382, label %459, label %383

383:                                              ; preds = %371
  %384 = load ptr, ptr %50, align 8, !tbaa !5
  %385 = load i64, ptr %18, align 8, !tbaa !9
  %386 = getelementptr inbounds %struct.vedegreedef, ptr %384, i64 %385
  %387 = getelementptr inbounds %struct.vedegreedef, ptr %386, i32 0, i32 3
  %388 = load i64, ptr %387, align 8, !tbaa !43
  %389 = load ptr, ptr %50, align 8, !tbaa !5
  %390 = load i64, ptr %20, align 8, !tbaa !9
  %391 = getelementptr inbounds %struct.vedegreedef, ptr %389, i64 %390
  %392 = getelementptr inbounds %struct.vedegreedef, ptr %391, i32 0, i32 3
  %393 = load i64, ptr %392, align 8, !tbaa !43
  %394 = icmp eq i64 %388, %393
  br i1 %394, label %395, label %407

395:                                              ; preds = %383
  %396 = load ptr, ptr %50, align 8, !tbaa !5
  %397 = load i64, ptr %18, align 8, !tbaa !9
  %398 = getelementptr inbounds %struct.vedegreedef, ptr %396, i64 %397
  %399 = getelementptr inbounds %struct.vedegreedef, ptr %398, i32 0, i32 1
  %400 = load i64, ptr %399, align 8, !tbaa !45
  %401 = load ptr, ptr %50, align 8, !tbaa !5
  %402 = load i64, ptr %20, align 8, !tbaa !9
  %403 = getelementptr inbounds %struct.vedegreedef, ptr %401, i64 %402
  %404 = getelementptr inbounds %struct.vedegreedef, ptr %403, i32 0, i32 1
  %405 = load i64, ptr %404, align 8, !tbaa !45
  %406 = icmp sgt i64 %400, %405
  br i1 %406, label %459, label %407

407:                                              ; preds = %395, %383
  %408 = load ptr, ptr %50, align 8, !tbaa !5
  %409 = load i64, ptr %18, align 8, !tbaa !9
  %410 = getelementptr inbounds %struct.vedegreedef, ptr %408, i64 %409
  %411 = getelementptr inbounds %struct.vedegreedef, ptr %410, i32 0, i32 3
  %412 = load i64, ptr %411, align 8, !tbaa !43
  %413 = load ptr, ptr %50, align 8, !tbaa !5
  %414 = load i64, ptr %20, align 8, !tbaa !9
  %415 = getelementptr inbounds %struct.vedegreedef, ptr %413, i64 %414
  %416 = getelementptr inbounds %struct.vedegreedef, ptr %415, i32 0, i32 3
  %417 = load i64, ptr %416, align 8, !tbaa !43
  %418 = icmp eq i64 %412, %417
  br i1 %418, label %419, label %461

419:                                              ; preds = %407
  %420 = load ptr, ptr %50, align 8, !tbaa !5
  %421 = load i64, ptr %18, align 8, !tbaa !9
  %422 = getelementptr inbounds %struct.vedegreedef, ptr %420, i64 %421
  %423 = getelementptr inbounds %struct.vedegreedef, ptr %422, i32 0, i32 1
  %424 = load i64, ptr %423, align 8, !tbaa !45
  %425 = load ptr, ptr %50, align 8, !tbaa !5
  %426 = load i64, ptr %20, align 8, !tbaa !9
  %427 = getelementptr inbounds %struct.vedegreedef, ptr %425, i64 %426
  %428 = getelementptr inbounds %struct.vedegreedef, ptr %427, i32 0, i32 1
  %429 = load i64, ptr %428, align 8, !tbaa !45
  %430 = icmp eq i64 %424, %429
  br i1 %430, label %431, label %461

431:                                              ; preds = %419
  %432 = load ptr, ptr %46, align 8, !tbaa !5
  %433 = load ptr, ptr %50, align 8, !tbaa !5
  %434 = load i64, ptr %20, align 8, !tbaa !9
  %435 = getelementptr inbounds %struct.vedegreedef, ptr %433, i64 %434
  %436 = getelementptr inbounds %struct.vedegreedef, ptr %435, i32 0, i32 0
  %437 = load i64, ptr %436, align 8, !tbaa !41
  %438 = getelementptr inbounds i64, ptr %432, i64 %437
  %439 = load i64, ptr %438, align 8, !tbaa !9
  %440 = load ptr, ptr %40, align 8, !tbaa !5
  %441 = load i64, ptr %32, align 8, !tbaa !9
  %442 = getelementptr inbounds i64, ptr %440, i64 %441
  %443 = load i64, ptr %442, align 8, !tbaa !9
  %444 = mul nsw i64 %439, %443
  %445 = load ptr, ptr %46, align 8, !tbaa !5
  %446 = load i64, ptr %32, align 8, !tbaa !9
  %447 = getelementptr inbounds i64, ptr %445, i64 %446
  %448 = load i64, ptr %447, align 8, !tbaa !9
  %449 = load ptr, ptr %40, align 8, !tbaa !5
  %450 = load ptr, ptr %50, align 8, !tbaa !5
  %451 = load i64, ptr %20, align 8, !tbaa !9
  %452 = getelementptr inbounds %struct.vedegreedef, ptr %450, i64 %451
  %453 = getelementptr inbounds %struct.vedegreedef, ptr %452, i32 0, i32 0
  %454 = load i64, ptr %453, align 8, !tbaa !41
  %455 = getelementptr inbounds i64, ptr %449, i64 %454
  %456 = load i64, ptr %455, align 8, !tbaa !9
  %457 = mul nsw i64 %448, %456
  %458 = icmp slt i64 %444, %457
  br i1 %458, label %459, label %461

459:                                              ; preds = %431, %395, %371
  %460 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %460, ptr %20, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %459, %431, %419, %407
  br label %462

462:                                              ; preds = %461, %370
  %463 = load i64, ptr %18, align 8, !tbaa !9
  %464 = add nsw i64 %463, 1
  store i64 %464, ptr %18, align 8, !tbaa !9
  br label %349, !llvm.loop !46

465:                                              ; preds = %349
  %466 = load ptr, ptr %50, align 8, !tbaa !5
  %467 = load i64, ptr %20, align 8, !tbaa !9
  %468 = getelementptr inbounds %struct.vedegreedef, ptr %466, i64 %467
  %469 = getelementptr inbounds %struct.vedegreedef, ptr %468, i32 0, i32 0
  %470 = load i64, ptr %469, align 8, !tbaa !41
  store i64 %470, ptr %32, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  %471 = load i64, ptr %29, align 8, !tbaa !9
  %472 = load ptr, ptr %50, align 8, !tbaa !5
  %473 = load i64, ptr %20, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct.vedegreedef, ptr %472, i64 %473
  %475 = getelementptr inbounds %struct.vedegreedef, ptr %474, i32 0, i32 3
  %476 = load i64, ptr %475, align 8, !tbaa !43
  %477 = add nsw i64 %471, %476
  %478 = icmp sgt i64 %477, 0
  br i1 %478, label %490, label %479

479:                                              ; preds = %465
  %480 = load ptr, ptr %50, align 8, !tbaa !5
  %481 = load i64, ptr %20, align 8, !tbaa !9
  %482 = getelementptr inbounds %struct.vedegreedef, ptr %480, i64 %481
  %483 = getelementptr inbounds %struct.vedegreedef, ptr %482, i32 0, i32 1
  %484 = load i64, ptr %483, align 8, !tbaa !45
  %485 = load ptr, ptr %51, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.vrinfodef, ptr %485, i32 0, i32 0
  %487 = load i64, ptr %486, align 8, !tbaa !36
  %488 = sub nsw i64 %484, %487
  %489 = icmp sgt i64 %488, 0
  br i1 %489, label %490, label %491

490:                                              ; preds = %479, %465
  store i64 1, ptr %18, align 8, !tbaa !9
  br label %541

491:                                              ; preds = %479
  %492 = load ptr, ptr %50, align 8, !tbaa !5
  %493 = load i64, ptr %20, align 8, !tbaa !9
  %494 = getelementptr inbounds %struct.vedegreedef, ptr %492, i64 %493
  %495 = getelementptr inbounds %struct.vedegreedef, ptr %494, i32 0, i32 1
  %496 = load i64, ptr %495, align 8, !tbaa !45
  %497 = load ptr, ptr %51, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.vrinfodef, ptr %497, i32 0, i32 0
  %499 = load i64, ptr %498, align 8, !tbaa !36
  %500 = sub nsw i64 %496, %499
  %501 = icmp eq i64 %500, 0
  br i1 %501, label %502, label %540

502:                                              ; preds = %491
  %503 = load i64, ptr %17, align 8, !tbaa !9
  %504 = and i64 %503, 5
  %505 = icmp eq i64 %504, 0
  br i1 %505, label %538, label %506

506:                                              ; preds = %502
  %507 = load ptr, ptr %40, align 8, !tbaa !5
  %508 = load i64, ptr %30, align 8, !tbaa !9
  %509 = getelementptr inbounds i64, ptr %507, i64 %508
  %510 = load i64, ptr %509, align 8, !tbaa !9
  %511 = load ptr, ptr %45, align 8, !tbaa !5
  %512 = load i64, ptr %30, align 8, !tbaa !9
  %513 = getelementptr inbounds i64, ptr %511, i64 %512
  %514 = load i64, ptr %513, align 8, !tbaa !9
  %515 = icmp sge i64 %510, %514
  br i1 %515, label %538, label %516

516:                                              ; preds = %506
  %517 = load ptr, ptr %46, align 8, !tbaa !5
  %518 = load i64, ptr %30, align 8, !tbaa !9
  %519 = getelementptr inbounds i64, ptr %517, i64 %518
  %520 = load i64, ptr %519, align 8, !tbaa !9
  %521 = load ptr, ptr %40, align 8, !tbaa !5
  %522 = load i64, ptr %32, align 8, !tbaa !9
  %523 = getelementptr inbounds i64, ptr %521, i64 %522
  %524 = load i64, ptr %523, align 8, !tbaa !9
  %525 = load i64, ptr %35, align 8, !tbaa !9
  %526 = add nsw i64 %524, %525
  %527 = mul nsw i64 %520, %526
  %528 = load ptr, ptr %46, align 8, !tbaa !5
  %529 = load i64, ptr %32, align 8, !tbaa !9
  %530 = getelementptr inbounds i64, ptr %528, i64 %529
  %531 = load i64, ptr %530, align 8, !tbaa !9
  %532 = load ptr, ptr %40, align 8, !tbaa !5
  %533 = load i64, ptr %30, align 8, !tbaa !9
  %534 = getelementptr inbounds i64, ptr %532, i64 %533
  %535 = load i64, ptr %534, align 8, !tbaa !9
  %536 = mul nsw i64 %531, %535
  %537 = icmp slt i64 %527, %536
  br i1 %537, label %538, label %539

538:                                              ; preds = %516, %506, %502
  store i64 1, ptr %18, align 8, !tbaa !9
  br label %539

539:                                              ; preds = %538, %516
  br label %540

540:                                              ; preds = %539, %491
  br label %541

541:                                              ; preds = %540, %490
  %542 = load i64, ptr %18, align 8, !tbaa !9
  %543 = icmp eq i64 %542, 0
  br i1 %543, label %544, label %545

544:                                              ; preds = %541
  br label %633

545:                                              ; preds = %541
  br label %546

546:                                              ; preds = %545
  %547 = load i64, ptr %35, align 8, !tbaa !9
  %548 = load ptr, ptr %40, align 8, !tbaa !5
  %549 = load i64, ptr %32, align 8, !tbaa !9
  %550 = getelementptr inbounds i64, ptr %548, i64 %549
  %551 = load i64, ptr %550, align 8, !tbaa !9
  %552 = add nsw i64 %551, %547
  store i64 %552, ptr %550, align 8, !tbaa !9
  %553 = load i64, ptr %35, align 8, !tbaa !9
  %554 = load ptr, ptr %40, align 8, !tbaa !5
  %555 = load i64, ptr %30, align 8, !tbaa !9
  %556 = getelementptr inbounds i64, ptr %554, i64 %555
  %557 = load i64, ptr %556, align 8, !tbaa !9
  %558 = sub nsw i64 %557, %553
  store i64 %558, ptr %556, align 8, !tbaa !9
  br label %559

559:                                              ; preds = %546
  br label %560

560:                                              ; preds = %559
  %561 = load ptr, ptr %50, align 8, !tbaa !5
  %562 = load i64, ptr %20, align 8, !tbaa !9
  %563 = getelementptr inbounds %struct.vedegreedef, ptr %561, i64 %562
  %564 = getelementptr inbounds %struct.vedegreedef, ptr %563, i32 0, i32 1
  %565 = load i64, ptr %564, align 8, !tbaa !45
  %566 = load ptr, ptr %51, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.vrinfodef, ptr %566, i32 0, i32 0
  %568 = load i64, ptr %567, align 8, !tbaa !36
  %569 = sub nsw i64 %565, %568
  %570 = load ptr, ptr %9, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.graphdef, ptr %570, i32 0, i32 16
  %572 = load i64, ptr %571, align 8, !tbaa !30
  %573 = sub nsw i64 %572, %569
  store i64 %573, ptr %571, align 8, !tbaa !30
  %574 = load i64, ptr %29, align 8, !tbaa !9
  %575 = load ptr, ptr %50, align 8, !tbaa !5
  %576 = load i64, ptr %20, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.vedegreedef, ptr %575, i64 %576
  %578 = getelementptr inbounds %struct.vedegreedef, ptr %577, i32 0, i32 3
  %579 = load i64, ptr %578, align 8, !tbaa !43
  %580 = add nsw i64 %574, %579
  %581 = load ptr, ptr %9, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.graphdef, ptr %581, i32 0, i32 17
  %583 = load i64, ptr %582, align 8, !tbaa !31
  %584 = sub nsw i64 %583, %580
  store i64 %584, ptr %582, align 8, !tbaa !31
  %585 = load i64, ptr %32, align 8, !tbaa !9
  %586 = load ptr, ptr %39, align 8, !tbaa !5
  %587 = load i64, ptr %15, align 8, !tbaa !9
  %588 = getelementptr inbounds i64, ptr %586, i64 %587
  store i64 %585, ptr %588, align 8, !tbaa !9
  %589 = load ptr, ptr %8, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.controldef, ptr %589, i32 0, i32 1
  %591 = load i64, ptr %590, align 8, !tbaa !25
  %592 = and i64 %591, 32
  %593 = icmp ne i64 %592, 0
  br i1 %593, label %594, label %621

594:                                              ; preds = %560
  %595 = load i64, ptr %15, align 8, !tbaa !9
  %596 = load i64, ptr %30, align 8, !tbaa !9
  %597 = load i64, ptr %32, align 8, !tbaa !9
  %598 = load i64, ptr %29, align 8, !tbaa !9
  %599 = load ptr, ptr %50, align 8, !tbaa !5
  %600 = load i64, ptr %20, align 8, !tbaa !9
  %601 = getelementptr inbounds %struct.vedegreedef, ptr %599, i64 %600
  %602 = getelementptr inbounds %struct.vedegreedef, ptr %601, i32 0, i32 3
  %603 = load i64, ptr %602, align 8, !tbaa !43
  %604 = add nsw i64 %598, %603
  %605 = load ptr, ptr %50, align 8, !tbaa !5
  %606 = load i64, ptr %20, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct.vedegreedef, ptr %605, i64 %606
  %608 = getelementptr inbounds %struct.vedegreedef, ptr %607, i32 0, i32 1
  %609 = load i64, ptr %608, align 8, !tbaa !45
  %610 = load ptr, ptr %51, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.vrinfodef, ptr %610, i32 0, i32 0
  %612 = load i64, ptr %611, align 8, !tbaa !36
  %613 = sub nsw i64 %609, %612
  %614 = load ptr, ptr %9, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.graphdef, ptr %614, i32 0, i32 16
  %616 = load i64, ptr %615, align 8, !tbaa !30
  %617 = load ptr, ptr %9, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.graphdef, ptr %617, i32 0, i32 17
  %619 = load i64, ptr %618, align 8, !tbaa !31
  %620 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, i64 noundef %595, i64 noundef %596, i64 noundef %597, i64 noundef %604, i64 noundef %613, i64 noundef %616, i64 noundef %619)
  br label %621

621:                                              ; preds = %594, %560
  %622 = load ptr, ptr %8, align 8, !tbaa !5
  %623 = load ptr, ptr %9, align 8, !tbaa !5
  %624 = load i64, ptr %15, align 8, !tbaa !9
  %625 = load i64, ptr %30, align 8, !tbaa !9
  %626 = load i64, ptr %32, align 8, !tbaa !9
  %627 = load ptr, ptr %48, align 8, !tbaa !5
  %628 = load ptr, ptr %49, align 8, !tbaa !5
  %629 = load ptr, ptr %47, align 8, !tbaa !5
  call void @libmetis__KWayVolUpdate(ptr noundef %622, ptr noundef %623, i64 noundef %624, i64 noundef %625, i64 noundef %626, ptr noundef %627, ptr noundef %628, ptr noundef %629)
  %630 = load i64, ptr %26, align 8, !tbaa !9
  %631 = add nsw i64 %630, 1
  store i64 %631, ptr %26, align 8, !tbaa !9
  br label %632

632:                                              ; preds = %621, %230
  br label %633

633:                                              ; preds = %632, %544, %345, %271, %229
  %634 = load i64, ptr %17, align 8, !tbaa !9
  %635 = add nsw i64 %634, 1
  store i64 %635, ptr %17, align 8, !tbaa !9
  br label %213, !llvm.loop !47

636:                                              ; preds = %213
  %637 = load ptr, ptr %8, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.controldef, ptr %637, i32 0, i32 1
  %639 = load i64, ptr %638, align 8, !tbaa !25
  %640 = and i64 %639, 8
  %641 = icmp ne i64 %640, 0
  br i1 %641, label %642, label %680

642:                                              ; preds = %636
  %643 = load ptr, ptr %40, align 8, !tbaa !5
  %644 = load i64, ptr %10, align 8, !tbaa !9
  %645 = load ptr, ptr %40, align 8, !tbaa !5
  %646 = call i64 @libmetis__idxargmin(i64 noundef %644, ptr noundef %645)
  %647 = getelementptr inbounds i64, ptr %643, i64 %646
  %648 = load i64, ptr %647, align 8, !tbaa !9
  %649 = load ptr, ptr %40, align 8, !tbaa !5
  %650 = load i64, ptr %10, align 8, !tbaa !9
  %651 = load ptr, ptr %40, align 8, !tbaa !5
  %652 = call i64 @libmetis__idxargmax(i64 noundef %650, ptr noundef %651)
  %653 = getelementptr inbounds i64, ptr %649, i64 %652
  %654 = load i64, ptr %653, align 8, !tbaa !9
  %655 = load i64, ptr %10, align 8, !tbaa !9
  %656 = sitofp i64 %655 to double
  %657 = fmul double 1.000000e+00, %656
  %658 = load ptr, ptr %40, align 8, !tbaa !5
  %659 = load i64, ptr %10, align 8, !tbaa !9
  %660 = load ptr, ptr %40, align 8, !tbaa !5
  %661 = call i64 @libmetis__idxargmax(i64 noundef %659, ptr noundef %660)
  %662 = getelementptr inbounds i64, ptr %658, i64 %661
  %663 = load i64, ptr %662, align 8, !tbaa !9
  %664 = sitofp i64 %663 to double
  %665 = fmul double %657, %664
  %666 = load i64, ptr %27, align 8, !tbaa !9
  %667 = sitofp i64 %666 to double
  %668 = fdiv double %665, %667
  %669 = load ptr, ptr %9, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.graphdef, ptr %669, i32 0, i32 20
  %671 = load i64, ptr %670, align 8, !tbaa !29
  %672 = load i64, ptr %26, align 8, !tbaa !9
  %673 = load ptr, ptr %9, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.graphdef, ptr %673, i32 0, i32 16
  %675 = load i64, ptr %674, align 8, !tbaa !30
  %676 = load ptr, ptr %9, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.graphdef, ptr %676, i32 0, i32 17
  %678 = load i64, ptr %677, align 8, !tbaa !31
  %679 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %648, i64 noundef %654, double noundef %668, i64 noundef %671, i64 noundef %672, i64 noundef %675, i64 noundef %678)
  br label %680

680:                                              ; preds = %642, %636
  %681 = load ptr, ptr %9, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.graphdef, ptr %681, i32 0, i32 17
  %683 = load i64, ptr %682, align 8, !tbaa !31
  %684 = load i64, ptr %34, align 8, !tbaa !9
  %685 = icmp eq i64 %683, %684
  br i1 %685, label %686, label %693

686:                                              ; preds = %680
  %687 = load ptr, ptr %9, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.graphdef, ptr %687, i32 0, i32 16
  %689 = load i64, ptr %688, align 8, !tbaa !30
  %690 = load i64, ptr %33, align 8, !tbaa !9
  %691 = icmp eq i64 %689, %690
  br i1 %691, label %692, label %693

692:                                              ; preds = %686
  br label %697

693:                                              ; preds = %686, %680
  br label %694

694:                                              ; preds = %693
  %695 = load i64, ptr %24, align 8, !tbaa !9
  %696 = add nsw i64 %695, 1
  store i64 %696, ptr %24, align 8, !tbaa !9
  br label %198, !llvm.loop !48

697:                                              ; preds = %692, %198
  call void (ptr, ...) @gk_free(ptr noundef %48, ptr noundef %47, ptr noundef %49, ptr noundef null)
  %698 = load ptr, ptr %8, align 8, !tbaa !5
  %699 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %698, i64 noundef %699)
  %700 = load ptr, ptr %8, align 8, !tbaa !5
  %701 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %700, i64 noundef %701)
  %702 = load ptr, ptr %8, align 8, !tbaa !5
  %703 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %702, i64 noundef %703)
  %704 = load ptr, ptr %8, align 8, !tbaa !5
  %705 = load i64, ptr %25, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %704, i64 noundef %705)
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  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 @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) #2

declare i64 @libmetis__idxsum(i64 noundef, ptr noundef, i64 noundef) #2

declare ptr @libmetis__idxmalloc(i64 noundef, ptr noundef) #2

declare ptr @libmetis__idxsmalloc(i64 noundef, i64 noundef, ptr noundef) #2

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

declare i64 @libmetis__idxargmin(i64 noundef, ptr noundef) #2

declare i64 @libmetis__idxargmax(i64 noundef, ptr noundef) #2

declare void @libmetis__RandomPermute(i64 noundef, ptr noundef, i64 noundef) #2

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

declare void @gk_free(ptr noundef, ...) #2

declare void @libmetis__idxwspacefree(ptr noundef, i64 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 = { 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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !15, i64 56, !15, i64 60, !15, i64 64, !15, i64 68, !15, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !10, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!15 = !{!"int", !7, i64 0}
!16 = !{!14, !6, i64 16}
!17 = !{!14, !6, i64 40}
!18 = !{!14, !6, i64 48}
!19 = !{!14, !6, i64 152}
!20 = !{!14, !6, i64 160}
!21 = !{!14, !6, i64 128}
!22 = !{!14, !6, i64 136}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!26, !10, i64 8}
!26 = !{!"controldef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !12, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !27, i64 88, !28, i64 152, !28, i64 160, !28, i64 168, !28, i64 176, !28, i64 184, !28, i64 192, !28, i64 200, !28, i64 208, !28, i64 216, !28, i64 224, !28, i64 232, !28, i64 240, !28, i64 248, !28, i64 256, !28, i64 264, !28, i64 272}
!27 = !{!"workspacedef", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56}
!28 = !{!"double", !7, i64 0}
!29 = !{!14, !10, i64 144}
!30 = !{!14, !10, i64 112}
!31 = !{!14, !10, i64 120}
!32 = !{!14, !6, i64 192}
!33 = !{!34, !10, i64 24}
!34 = !{!"vrinfodef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !6, i64 40}
!35 = !{!14, !6, i64 24}
!36 = !{!34, !10, i64 0}
!37 = !{!34, !10, i64 8}
!38 = !{!14, !6, i64 32}
!39 = !{!34, !6, i64 40}
!40 = !{!34, !10, i64 32}
!41 = !{!42, !10, i64 0}
!42 = !{!"vedegreedef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!43 = !{!42, !10, i64 24}
!44 = distinct !{!44, !24}
!45 = !{!42, !10, i64 8}
!46 = distinct !{!46, !24}
!47 = distinct !{!47, !24}
!48 = distinct !{!48, !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.vrinfodef = type { i64, i64, i64, i64, i64, ptr }
%struct.vedegreedef = type { i64, i64, i64, i64 }

@.str = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [70 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Random_KWayVolRefine(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr nocapture noundef readonly %3, float noundef %4, i64 noundef %5, i64 noundef %6) local_unnamed_addr #0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  %11 = load i64, ptr %1, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %1, i64 160
  %13 = load ptr, ptr %12, align 8, !tbaa !12
  %14 = getelementptr inbounds i8, ptr %1, i64 128
  %15 = load ptr, ptr %14, align 8, !tbaa !13
  %16 = getelementptr inbounds i8, ptr %1, i64 136
  %17 = load ptr, ptr %16, align 8, !tbaa !14
  %18 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  %19 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  %20 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  %21 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %17, i64 noundef 1) #3
  %22 = tail call ptr @libmetis__idxmalloc(i64 noundef %11, ptr noundef nonnull @.str) #3
  store ptr %22, ptr %8, align 8, !tbaa !15
  %23 = tail call ptr @libmetis__idxsmalloc(i64 noundef %11, i64 noundef 0, ptr noundef nonnull @.str.1) #3
  store ptr %23, ptr %9, align 8, !tbaa !15
  %24 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef -1, ptr noundef nonnull @.str.2) #3
  store ptr %24, ptr %10, align 8, !tbaa !15
  %25 = icmp sgt i64 %2, 0
  br i1 %25, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %7
  %26 = sitofp i64 %21 to float
  %27 = fpext float %4 to double
  %28 = fdiv double 1.000000e+00, %27
  br label %29

29:                                               ; preds = %.lr.ph, %29
  %.0268 = phi i64 [ 0, %.lr.ph ], [ %42, %29 ]
  %30 = getelementptr inbounds float, ptr %3, i64 %.0268
  %31 = load float, ptr %30, align 4, !tbaa !16
  %32 = fmul float %31, %26
  %33 = fptosi float %32 to i64
  %34 = getelementptr inbounds i64, ptr %20, i64 %.0268
  store i64 %33, ptr %34, align 8, !tbaa !18
  %35 = fmul float %32, %4
  %36 = fptosi float %35 to i64
  %37 = getelementptr inbounds i64, ptr %19, i64 %.0268
  store i64 %36, ptr %37, align 8, !tbaa !18
  %38 = fpext float %32 to double
  %39 = fmul double %28, %38
  %40 = fptosi double %39 to i64
  %41 = getelementptr inbounds i64, ptr %18, i64 %.0268
  store i64 %40, ptr %41, align 8, !tbaa !18
  %42 = add nuw nsw i64 %.0268, 1
  %exitcond.not = icmp eq i64 %42, %2
  br i1 %exitcond.not, label %._crit_edge, label %29, !llvm.loop !19

._crit_edge:                                      ; preds = %29, %7
  %43 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %11) #3
  %44 = getelementptr inbounds i8, ptr %0, i64 8
  %45 = load i64, ptr %44, align 8, !tbaa !21
  %46 = and i64 %45, 8
  %.not = icmp eq i64 %46, 0
  br i1 %.not, label %72, label %47

47:                                               ; preds = %._crit_edge
  %48 = tail call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %17) #3
  %49 = getelementptr inbounds i64, ptr %17, i64 %48
  %50 = load i64, ptr %49, align 8, !tbaa !18
  %51 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %17) #3
  %52 = getelementptr inbounds i64, ptr %17, i64 %51
  %53 = load i64, ptr %52, align 8, !tbaa !18
  %54 = load i64, ptr %18, align 8, !tbaa !18
  %55 = load i64, ptr %19, align 8, !tbaa !18
  %56 = sitofp i64 %2 to double
  %57 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %17) #3
  %58 = getelementptr inbounds i64, ptr %17, i64 %57
  %59 = load i64, ptr %58, align 8, !tbaa !18
  %60 = sitofp i64 %59 to double
  %61 = fmul double %56, %60
  %62 = sitofp i64 %21 to double
  %63 = fdiv double %61, %62
  %64 = load i64, ptr %1, align 8, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %1, i64 144
  %66 = load i64, ptr %65, align 8, !tbaa !25
  %67 = getelementptr inbounds i8, ptr %1, i64 112
  %68 = load i64, ptr %67, align 8, !tbaa !26
  %69 = getelementptr inbounds i8, ptr %1, i64 120
  %70 = load i64, ptr %69, align 8, !tbaa !27
  %71 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %50, i64 noundef %53, i64 noundef %54, i64 noundef %55, double noundef %63, i64 noundef %64, i64 noundef %66, i64 noundef %68, i64 noundef %70) #3
  br label %72

72:                                               ; preds = %47, %._crit_edge
  %73 = icmp sgt i64 %5, 0
  br i1 %73, label %.lr.ph288, label %._crit_edge289

.lr.ph288:                                        ; preds = %72
  %74 = getelementptr inbounds i8, ptr %1, i64 112
  %75 = getelementptr inbounds i8, ptr %1, i64 120
  %76 = getelementptr inbounds i8, ptr %1, i64 144
  %77 = getelementptr inbounds i8, ptr %1, i64 192
  %78 = getelementptr inbounds i8, ptr %1, i64 24
  %79 = getelementptr inbounds i8, ptr %1, i64 32
  %80 = sitofp i64 %2 to double
  %81 = sitofp i64 %21 to double
  %.pre = load i64, ptr %75, align 8, !tbaa !27
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph288
  %82 = phi i64 [ %.pre, %.lr.ph288 ], [ %265, %.backedge.backedge ]
  %.0246286 = phi i64 [ 0, %.lr.ph288 ], [ %.0246286.be, %.backedge.backedge ]
  %83 = load i64, ptr %74, align 8, !tbaa !26
  %84 = load i64, ptr %76, align 8, !tbaa !25
  tail call void @libmetis__RandomPermute(i64 noundef %84, ptr noundef %43, i64 noundef 1) #3
  %85 = load i64, ptr %76, align 8, !tbaa !25
  %86 = icmp sgt i64 %85, 0
  br i1 %86, label %.lr.ph283, label %._crit_edge284

.lr.ph283:                                        ; preds = %.backedge, %._crit_edge271.thread
  %87 = phi i64 [ %242, %._crit_edge271.thread ], [ %85, %.backedge ]
  %.0242281 = phi i64 [ %243, %._crit_edge271.thread ], [ 0, %.backedge ]
  %.0247280 = phi i64 [ %.1248, %._crit_edge271.thread ], [ 0, %.backedge ]
  %88 = getelementptr inbounds i64, ptr %43, i64 %.0242281
  %89 = load i64, ptr %88, align 8, !tbaa !18
  %.not258 = icmp slt i64 %89, %87
  br i1 %.not258, label %90, label %._crit_edge271.thread

90:                                               ; preds = %.lr.ph283
  %91 = getelementptr inbounds i64, ptr %13, i64 %89
  %92 = load i64, ptr %91, align 8, !tbaa !18
  %93 = load ptr, ptr %77, align 8, !tbaa !28
  %94 = getelementptr inbounds %struct.vrinfodef, ptr %93, i64 %92
  %95 = getelementptr inbounds i8, ptr %94, i64 24
  %96 = load i64, ptr %95, align 8, !tbaa !29
  %97 = icmp sgt i64 %96, -1
  br i1 %97, label %98, label %._crit_edge271.thread

98:                                               ; preds = %90
  %99 = getelementptr inbounds i64, ptr %15, i64 %92
  %100 = load i64, ptr %99, align 8, !tbaa !18
  %101 = load ptr, ptr %78, align 8, !tbaa !31
  %102 = getelementptr inbounds i64, ptr %101, i64 %92
  %103 = load i64, ptr %102, align 8, !tbaa !18
  %104 = load i64, ptr %94, align 8, !tbaa !32
  %105 = icmp sgt i64 %104, 0
  br i1 %105, label %106, label %113

106:                                              ; preds = %98
  %107 = getelementptr inbounds i64, ptr %17, i64 %100
  %108 = load i64, ptr %107, align 8, !tbaa !18
  %109 = sub nsw i64 %108, %103
  %110 = getelementptr inbounds i64, ptr %18, i64 %100
  %111 = load i64, ptr %110, align 8, !tbaa !18
  %112 = icmp slt i64 %109, %111
  br i1 %112, label %._crit_edge271.thread, label %.thread

113:                                              ; preds = %98
  %114 = icmp eq i64 %104, 0
  br i1 %114, label %115, label %.thread

115:                                              ; preds = %113
  %116 = getelementptr inbounds i8, ptr %94, i64 8
  %117 = load i64, ptr %116, align 8, !tbaa !33
  %118 = icmp sgt i64 %117, 0
  br i1 %118, label %119, label %.thread

119:                                              ; preds = %115
  %120 = load ptr, ptr %79, align 8, !tbaa !34
  %121 = getelementptr inbounds i64, ptr %120, i64 %92
  %122 = load i64, ptr %121, align 8, !tbaa !18
  br label %.thread

.thread:                                          ; preds = %106, %113, %115, %119
  %123 = phi i64 [ %122, %119 ], [ 0, %115 ], [ 0, %113 ], [ 0, %106 ]
  %124 = getelementptr inbounds i8, ptr %94, i64 40
  %125 = load ptr, ptr %124, align 8, !tbaa !35
  %126 = getelementptr inbounds i8, ptr %94, i64 32
  %127 = load i64, ptr %126, align 8, !tbaa !36
  %invariant.op = xor i64 %123, -1
  %128 = icmp sgt i64 %127, 0
  br i1 %128, label %.lr.ph270, label %._crit_edge271

.lr.ph270:                                        ; preds = %.thread, %141
  %.0244269 = phi i64 [ %142, %141 ], [ 0, %.thread ]
  %129 = getelementptr inbounds %struct.vedegreedef, ptr %125, i64 %.0244269
  %130 = load i64, ptr %129, align 8, !tbaa !37
  %131 = getelementptr inbounds i64, ptr %17, i64 %130
  %132 = load i64, ptr %131, align 8, !tbaa !18
  %133 = add nsw i64 %132, %103
  %134 = getelementptr inbounds i64, ptr %19, i64 %130
  %135 = load i64, ptr %134, align 8, !tbaa !18
  %136 = getelementptr inbounds i8, ptr %129, i64 24
  %137 = load i64, ptr %136, align 8, !tbaa !39
  %138 = mul nsw i64 %137, %6
  %139 = add nsw i64 %138, %135
  %.not259 = icmp sle i64 %133, %139
  %140 = icmp sgt i64 %137, %invariant.op
  %or.cond = select i1 %.not259, i1 %140, i1 false
  br i1 %or.cond, label %._crit_edge271, label %141

141:                                              ; preds = %.lr.ph270
  %142 = add nuw nsw i64 %.0244269, 1
  %exitcond293.not = icmp eq i64 %142, %127
  br i1 %exitcond293.not, label %._crit_edge271.thread, label %.lr.ph270, !llvm.loop !40

._crit_edge271:                                   ; preds = %.lr.ph270, %.thread
  %.0244.lcssa = phi i64 [ 0, %.thread ], [ %.0244269, %.lr.ph270 ]
  %143 = icmp eq i64 %.0244.lcssa, %127
  br i1 %143, label %._crit_edge271.thread, label %.preheader

.preheader:                                       ; preds = %._crit_edge271
  %.0243274 = add nuw nsw i64 %.0244.lcssa, 1
  %144 = icmp slt i64 %.0243274, %127
  br i1 %144, label %.lr.ph277, label %._crit_edge278

.lr.ph277:                                        ; preds = %.preheader, %182
  %.0243276 = phi i64 [ %.0243, %182 ], [ %.0243274, %.preheader ]
  %.1245275 = phi i64 [ %.2, %182 ], [ %.0244.lcssa, %.preheader ]
  %145 = getelementptr inbounds %struct.vedegreedef, ptr %125, i64 %.0243276
  %146 = load i64, ptr %145, align 8, !tbaa !37
  %147 = getelementptr inbounds i64, ptr %17, i64 %146
  %148 = load i64, ptr %147, align 8, !tbaa !18
  %149 = add nsw i64 %148, %103
  %150 = getelementptr inbounds i64, ptr %19, i64 %146
  %151 = load i64, ptr %150, align 8, !tbaa !18
  %152 = icmp sgt i64 %149, %151
  br i1 %152, label %182, label %153

153:                                              ; preds = %.lr.ph277
  %154 = getelementptr inbounds i8, ptr %145, i64 24
  %155 = load i64, ptr %154, align 8, !tbaa !39
  %156 = getelementptr inbounds %struct.vedegreedef, ptr %125, i64 %.1245275
  %157 = getelementptr inbounds i8, ptr %156, i64 24
  %158 = load i64, ptr %157, align 8, !tbaa !39
  %159 = icmp sgt i64 %155, %158
  br i1 %159, label %181, label %160

160:                                              ; preds = %153
  %161 = icmp eq i64 %155, %158
  br i1 %161, label %162, label %182

162:                                              ; preds = %160
  %163 = getelementptr inbounds i8, ptr %145, i64 8
  %164 = load i64, ptr %163, align 8, !tbaa !41
  %165 = getelementptr inbounds i8, ptr %156, i64 8
  %166 = load i64, ptr %165, align 8, !tbaa !41
  %167 = icmp sgt i64 %164, %166
  br i1 %167, label %181, label %168

168:                                              ; preds = %162
  %169 = icmp eq i64 %164, %166
  br i1 %169, label %170, label %182

170:                                              ; preds = %168
  %171 = load i64, ptr %156, align 8, !tbaa !37
  %172 = getelementptr inbounds i64, ptr %20, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !18
  %174 = mul nsw i64 %173, %148
  %175 = getelementptr inbounds i64, ptr %20, i64 %146
  %176 = load i64, ptr %175, align 8, !tbaa !18
  %177 = getelementptr inbounds i64, ptr %17, i64 %171
  %178 = load i64, ptr %177, align 8, !tbaa !18
  %179 = mul nsw i64 %178, %176
  %180 = icmp slt i64 %174, %179
  br i1 %180, label %181, label %182

181:                                              ; preds = %170, %162, %153
  br label %182

182:                                              ; preds = %160, %168, %170, %181, %.lr.ph277
  %.2 = phi i64 [ %.1245275, %.lr.ph277 ], [ %.0243276, %181 ], [ %.1245275, %170 ], [ %.1245275, %168 ], [ %.1245275, %160 ]
  %.0243 = add nuw nsw i64 %.0243276, 1
  %exitcond294.not = icmp eq i64 %.0243, %127
  br i1 %exitcond294.not, label %._crit_edge278, label %.lr.ph277, !llvm.loop !42

._crit_edge278:                                   ; preds = %182, %.preheader
  %.1245.lcssa = phi i64 [ %.0244.lcssa, %.preheader ], [ %.2, %182 ]
  %183 = getelementptr inbounds %struct.vedegreedef, ptr %125, i64 %.1245.lcssa
  %184 = load i64, ptr %183, align 8, !tbaa !37
  %185 = getelementptr inbounds i8, ptr %183, i64 24
  %186 = load i64, ptr %185, align 8, !tbaa !39
  %187 = add nsw i64 %186, %123
  %188 = icmp sgt i64 %187, 0
  br i1 %188, label %.critedge, label %189

189:                                              ; preds = %._crit_edge278
  %190 = getelementptr inbounds i8, ptr %183, i64 8
  %191 = load i64, ptr %190, align 8, !tbaa !41
  %192 = icmp sgt i64 %191, %104
  br i1 %192, label %.critedge, label %193

193:                                              ; preds = %189
  %194 = icmp eq i64 %191, %104
  br i1 %194, label %195, label %._crit_edge271.thread

195:                                              ; preds = %193
  %196 = and i64 %.0242281, 5
  %197 = icmp eq i64 %196, 0
  br i1 %197, label %.critedge, label %198

198:                                              ; preds = %195
  %199 = getelementptr inbounds i64, ptr %17, i64 %100
  %200 = load i64, ptr %199, align 8, !tbaa !18
  %201 = getelementptr inbounds i64, ptr %19, i64 %100
  %202 = load i64, ptr %201, align 8, !tbaa !18
  %.not260 = icmp slt i64 %200, %202
  br i1 %.not260, label %203, label %.critedge

203:                                              ; preds = %198
  %204 = getelementptr inbounds i64, ptr %20, i64 %100
  %205 = load i64, ptr %204, align 8, !tbaa !18
  %206 = getelementptr inbounds i64, ptr %17, i64 %184
  %207 = load i64, ptr %206, align 8, !tbaa !18
  %208 = add nsw i64 %207, %103
  %209 = mul nsw i64 %208, %205
  %210 = getelementptr inbounds i64, ptr %20, i64 %184
  %211 = load i64, ptr %210, align 8, !tbaa !18
  %212 = mul nsw i64 %211, %200
  %213 = icmp slt i64 %209, %212
  br i1 %213, label %.critedge, label %._crit_edge271.thread

.critedge:                                        ; preds = %195, %198, %203, %._crit_edge278, %189
  %214 = getelementptr inbounds i64, ptr %17, i64 %184
  %215 = load i64, ptr %214, align 8, !tbaa !18
  %216 = add nsw i64 %215, %103
  store i64 %216, ptr %214, align 8, !tbaa !18
  %217 = getelementptr inbounds i64, ptr %17, i64 %100
  %218 = load i64, ptr %217, align 8, !tbaa !18
  %219 = sub nsw i64 %218, %103
  store i64 %219, ptr %217, align 8, !tbaa !18
  %220 = getelementptr inbounds i8, ptr %183, i64 8
  %221 = load i64, ptr %220, align 8, !tbaa !41
  %222 = load i64, ptr %94, align 8, !tbaa !32
  %.neg = sub i64 %222, %221
  %223 = load i64, ptr %74, align 8, !tbaa !26
  %224 = add i64 %.neg, %223
  store i64 %224, ptr %74, align 8, !tbaa !26
  %225 = load i64, ptr %185, align 8, !tbaa !39
  %226 = load i64, ptr %75, align 8, !tbaa !27
  %227 = add i64 %225, %123
  %228 = sub i64 %226, %227
  store i64 %228, ptr %75, align 8, !tbaa !27
  store i64 %184, ptr %99, align 8, !tbaa !18
  %229 = load i64, ptr %44, align 8, !tbaa !21
  %230 = and i64 %229, 32
  %.not261 = icmp eq i64 %230, 0
  br i1 %.not261, label %240, label %231

231:                                              ; preds = %.critedge
  %232 = load i64, ptr %185, align 8, !tbaa !39
  %233 = add nsw i64 %232, %123
  %234 = load i64, ptr %220, align 8, !tbaa !41
  %235 = load i64, ptr %94, align 8, !tbaa !32
  %236 = sub nsw i64 %234, %235
  %237 = load i64, ptr %74, align 8, !tbaa !26
  %238 = load i64, ptr %75, align 8, !tbaa !27
  %239 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, i64 noundef %92, i64 noundef %100, i64 noundef %184, i64 noundef %233, i64 noundef %236, i64 noundef %237, i64 noundef %238) #3
  br label %240

240:                                              ; preds = %231, %.critedge
  tail call void @libmetis__KWayVolUpdate(ptr noundef nonnull %0, ptr noundef nonnull %1, i64 noundef %92, i64 noundef %100, i64 noundef %184, ptr noundef %23, ptr noundef %24, ptr noundef %22)
  %241 = add nsw i64 %.0247280, 1
  %.pre295 = load i64, ptr %76, align 8, !tbaa !25
  br label %._crit_edge271.thread

._crit_edge271.thread:                            ; preds = %141, %203, %193, %90, %240, %._crit_edge271, %106, %.lr.ph283
  %242 = phi i64 [ %87, %.lr.ph283 ], [ %87, %106 ], [ %87, %._crit_edge271 ], [ %.pre295, %240 ], [ %87, %90 ], [ %87, %193 ], [ %87, %203 ], [ %87, %141 ]
  %.1248 = phi i64 [ %.0247280, %.lr.ph283 ], [ %.0247280, %106 ], [ %.0247280, %._crit_edge271 ], [ %241, %240 ], [ %.0247280, %90 ], [ %.0247280, %193 ], [ %.0247280, %203 ], [ %.0247280, %141 ]
  %243 = add nuw nsw i64 %.0242281, 1
  %244 = icmp slt i64 %243, %242
  br i1 %244, label %.lr.ph283, label %._crit_edge284, !llvm.loop !43

._crit_edge284:                                   ; preds = %._crit_edge271.thread, %.backedge
  %.0247.lcssa = phi i64 [ 0, %.backedge ], [ %.1248, %._crit_edge271.thread ]
  %245 = load i64, ptr %44, align 8, !tbaa !21
  %246 = and i64 %245, 8
  %.not257 = icmp eq i64 %246, 0
  br i1 %.not257, label %264, label %247

247:                                              ; preds = %._crit_edge284
  %248 = tail call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %17) #3
  %249 = getelementptr inbounds i64, ptr %17, i64 %248
  %250 = load i64, ptr %249, align 8, !tbaa !18
  %251 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %17) #3
  %252 = getelementptr inbounds i64, ptr %17, i64 %251
  %253 = load i64, ptr %252, align 8, !tbaa !18
  %254 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %17) #3
  %255 = getelementptr inbounds i64, ptr %17, i64 %254
  %256 = load i64, ptr %255, align 8, !tbaa !18
  %257 = sitofp i64 %256 to double
  %258 = fmul double %80, %257
  %259 = fdiv double %258, %81
  %260 = load i64, ptr %76, align 8, !tbaa !25
  %261 = load i64, ptr %74, align 8, !tbaa !26
  %262 = load i64, ptr %75, align 8, !tbaa !27
  %263 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %250, i64 noundef %253, double noundef %259, i64 noundef %260, i64 noundef %.0247.lcssa, i64 noundef %261, i64 noundef %262) #3
  br label %264

264:                                              ; preds = %247, %._crit_edge284
  %265 = load i64, ptr %75, align 8, !tbaa !27
  %266 = icmp eq i64 %265, %82
  br i1 %266, label %267, label %272

267:                                              ; preds = %264
  %268 = load i64, ptr %74, align 8, !tbaa !26
  %269 = icmp ne i64 %268, %83
  %270 = add nuw nsw i64 %.0246286, 1
  %271 = icmp slt i64 %270, %5
  %or.cond292 = select i1 %269, i1 %271, i1 false
  br i1 %or.cond292, label %.backedge.backedge, label %._crit_edge289

272:                                              ; preds = %264
  %.old = add nuw nsw i64 %.0246286, 1
  %.old291 = icmp slt i64 %.old, %5
  br i1 %.old291, label %.backedge.backedge, label %._crit_edge289

.backedge.backedge:                               ; preds = %272, %267
  %.0246286.be = phi i64 [ %.old, %272 ], [ %270, %267 ]
  br label %.backedge, !llvm.loop !44

._crit_edge289:                                   ; preds = %272, %267, %72
  call void (ptr, ...) @gk_free(ptr noundef nonnull %9, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef null) #3
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %2) #3
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %2) #3
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %2) #3
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  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 @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #2

declare i64 @libmetis__idxsum(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare ptr @libmetis__idxmalloc(i64 noundef, ptr noundef) local_unnamed_addr #2

declare ptr @libmetis__idxsmalloc(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @mprintf(ptr noundef, ...) local_unnamed_addr #2

declare i64 @libmetis__idxargmin(i64 noundef, ptr noundef) local_unnamed_addr #2

declare i64 @libmetis__idxargmax(i64 noundef, ptr noundef) local_unnamed_addr #2

declare void @libmetis__RandomPermute(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

declare void @gk_free(ptr noundef, ...) local_unnamed_addr #2

declare void @libmetis__idxwspacefree(ptr noundef, i64 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

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 = { 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, !7, i64 0}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !7, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !10, i64 160}
!13 = !{!6, !10, i64 128}
!14 = !{!6, !10, i64 136}
!15 = !{!10, !10, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"float", !8, i64 0}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !7, i64 8}
!22 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !17, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !23, i64 88, !24, i64 152, !24, i64 160, !24, i64 168, !24, i64 176, !24, i64 184, !24, i64 192, !24, i64 200, !24, i64 208, !24, i64 216, !24, i64 224, !24, i64 232, !24, i64 240, !24, i64 248, !24, i64 256, !24, i64 264, !24, i64 272}
!23 = !{!"workspacedef", !10, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !10, i64 48, !10, i64 56}
!24 = !{!"double", !8, i64 0}
!25 = !{!6, !7, i64 144}
!26 = !{!6, !7, i64 112}
!27 = !{!6, !7, i64 120}
!28 = !{!6, !10, i64 192}
!29 = !{!30, !7, i64 24}
!30 = !{!"vrinfodef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40}
!31 = !{!6, !10, i64 24}
!32 = !{!30, !7, i64 0}
!33 = !{!30, !7, i64 8}
!34 = !{!6, !10, i64 32}
!35 = !{!30, !10, i64 40}
!36 = !{!30, !7, i64 32}
!37 = !{!38, !7, i64 0}
!38 = !{!"vedegreedef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!39 = !{!38, !7, i64 24}
!40 = distinct !{!40, !20}
!41 = !{!38, !7, i64 8}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}


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