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

; 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
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) #1

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

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

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

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

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

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

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

; 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) #2

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

declare void @libmetis__idxwspacefree(ptr noundef, i64 noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Random_KWayVolRefineMConn(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, float noundef %4, i64 noundef %5, i64 noundef %6) #2 {
  %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 i64, align 8
  %37 = alloca i64, 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
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  %57 = load ptr, ptr %9, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.graphdef, ptr %57, i32 0, i32 0
  %59 = load i64, ptr %58, align 8, !tbaa !13
  store i64 %59, ptr %25, align 8, !tbaa !9
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.graphdef, ptr %60, i32 0, i32 2
  %62 = load ptr, ptr %61, align 8, !tbaa !16
  store ptr %62, ptr %38, align 8, !tbaa !5
  %63 = load ptr, ptr %9, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.graphdef, ptr %63, i32 0, i32 5
  %65 = load ptr, ptr %64, align 8, !tbaa !17
  store ptr %65, ptr %39, align 8, !tbaa !5
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.graphdef, ptr %66, i32 0, i32 6
  %68 = load ptr, ptr %67, align 8, !tbaa !18
  store ptr %68, ptr %40, align 8, !tbaa !5
  %69 = load ptr, ptr %9, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.graphdef, ptr %69, i32 0, i32 21
  %71 = load ptr, ptr %70, align 8, !tbaa !19
  store ptr %71, ptr %44, align 8, !tbaa !5
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.graphdef, ptr %72, i32 0, i32 22
  %74 = load ptr, ptr %73, align 8, !tbaa !20
  store ptr %74, ptr %45, align 8, !tbaa !5
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.graphdef, ptr %75, i32 0, i32 18
  %77 = load ptr, ptr %76, align 8, !tbaa !21
  store ptr %77, ptr %41, align 8, !tbaa !5
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.graphdef, ptr %78, i32 0, i32 19
  %80 = load ptr, ptr %79, align 8, !tbaa !22
  store ptr %80, ptr %42, align 8, !tbaa !5
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = load i64, ptr %10, align 8, !tbaa !9
  %83 = call ptr @libmetis__idxwspacemalloc(ptr noundef %81, i64 noundef %82)
  store ptr %83, ptr %46, align 8, !tbaa !5
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = load i64, ptr %10, align 8, !tbaa !9
  %86 = call ptr @libmetis__idxwspacemalloc(ptr noundef %84, i64 noundef %85)
  store ptr %86, ptr %47, align 8, !tbaa !5
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = load i64, ptr %10, align 8, !tbaa !9
  %89 = call ptr @libmetis__idxwspacemalloc(ptr noundef %87, i64 noundef %88)
  store ptr %89, ptr %48, align 8, !tbaa !5
  %90 = load i64, ptr %10, align 8, !tbaa !9
  %91 = load ptr, ptr %42, align 8, !tbaa !5
  %92 = call i64 @libmetis__idxsum(i64 noundef %90, ptr noundef %91, i64 noundef 1)
  store i64 %92, ptr %27, align 8, !tbaa !9
  %93 = load i64, ptr %25, align 8, !tbaa !9
  %94 = call ptr @libmetis__idxmalloc(i64 noundef %93, ptr noundef @.str)
  store ptr %94, ptr %49, align 8, !tbaa !5
  %95 = load i64, ptr %25, align 8, !tbaa !9
  %96 = call ptr @libmetis__idxsmalloc(i64 noundef %95, i64 noundef 0, ptr noundef @.str.1)
  store ptr %96, ptr %50, align 8, !tbaa !5
  %97 = load i64, ptr %10, align 8, !tbaa !9
  %98 = call ptr @libmetis__idxsmalloc(i64 noundef %97, i64 noundef -1, ptr noundef @.str.2)
  store ptr %98, ptr %51, align 8, !tbaa !5
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.controldef, ptr %99, i32 0, i32 11
  %101 = getelementptr inbounds %struct.workspacedef, ptr %100, i32 0, i32 7
  %102 = load ptr, ptr %101, align 8, !tbaa !23
  store ptr %102, ptr %52, align 8, !tbaa !5
  %103 = load ptr, ptr %8, align 8, !tbaa !5
  %104 = load i64, ptr %10, align 8, !tbaa !9
  %105 = call ptr @libmetis__idxwspacemalloc(ptr noundef %103, i64 noundef %104)
  store ptr %105, ptr %54, align 8, !tbaa !5
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = load i64, ptr %10, align 8, !tbaa !9
  %108 = load ptr, ptr %52, align 8, !tbaa !5
  %109 = load ptr, ptr %54, align 8, !tbaa !5
  call void @libmetis__ComputeVolSubDomainGraph(ptr noundef %106, i64 noundef %107, ptr noundef %108, ptr noundef %109)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %110

110:                                              ; preds = %155, %7
  %111 = load i64, ptr %15, align 8, !tbaa !9
  %112 = load i64, ptr %10, align 8, !tbaa !9
  %113 = icmp slt i64 %111, %112
  br i1 %113, label %114, label %158

114:                                              ; preds = %110
  %115 = load ptr, ptr %11, align 8, !tbaa !5
  %116 = load i64, ptr %15, align 8, !tbaa !9
  %117 = getelementptr inbounds float, ptr %115, i64 %116
  %118 = load float, ptr %117, align 4, !tbaa !11
  %119 = load i64, ptr %27, align 8, !tbaa !9
  %120 = sitofp i64 %119 to float
  %121 = fmul float %118, %120
  %122 = fptosi float %121 to i64
  %123 = load ptr, ptr %48, align 8, !tbaa !5
  %124 = load i64, ptr %15, align 8, !tbaa !9
  %125 = getelementptr inbounds i64, ptr %123, i64 %124
  store i64 %122, ptr %125, align 8, !tbaa !9
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = load i64, ptr %15, align 8, !tbaa !9
  %128 = getelementptr inbounds float, ptr %126, i64 %127
  %129 = load float, ptr %128, align 4, !tbaa !11
  %130 = load i64, ptr %27, align 8, !tbaa !9
  %131 = sitofp i64 %130 to float
  %132 = fmul float %129, %131
  %133 = load float, ptr %12, align 4, !tbaa !11
  %134 = fmul float %132, %133
  %135 = fptosi float %134 to i64
  %136 = load ptr, ptr %47, 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
  %139 = load ptr, ptr %11, align 8, !tbaa !5
  %140 = load i64, ptr %15, align 8, !tbaa !9
  %141 = getelementptr inbounds float, ptr %139, i64 %140
  %142 = load float, ptr %141, align 4, !tbaa !11
  %143 = load i64, ptr %27, align 8, !tbaa !9
  %144 = sitofp i64 %143 to float
  %145 = fmul float %142, %144
  %146 = fpext float %145 to double
  %147 = load float, ptr %12, align 4, !tbaa !11
  %148 = fpext float %147 to double
  %149 = fdiv double 1.000000e+00, %148
  %150 = fmul double %146, %149
  %151 = fptosi double %150 to i64
  %152 = load ptr, ptr %46, align 8, !tbaa !5
  %153 = load i64, ptr %15, align 8, !tbaa !9
  %154 = getelementptr inbounds i64, ptr %152, i64 %153
  store i64 %151, ptr %154, align 8, !tbaa !9
  br label %155

155:                                              ; preds = %114
  %156 = load i64, ptr %15, align 8, !tbaa !9
  %157 = add nsw i64 %156, 1
  store i64 %157, ptr %15, align 8, !tbaa !9
  br label %110, !llvm.loop !27

158:                                              ; preds = %110
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = load i64, ptr %25, align 8, !tbaa !9
  %161 = call ptr @libmetis__idxwspacemalloc(ptr noundef %159, i64 noundef %160)
  store ptr %161, ptr %43, align 8, !tbaa !5
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.controldef, ptr %162, i32 0, i32 1
  %164 = load i64, ptr %163, align 8, !tbaa !29
  %165 = and i64 %164, 8
  %166 = icmp ne i64 %165, 0
  br i1 %166, label %167, label %213

167:                                              ; preds = %158
  %168 = load ptr, ptr %42, align 8, !tbaa !5
  %169 = load i64, ptr %10, align 8, !tbaa !9
  %170 = load ptr, ptr %42, align 8, !tbaa !5
  %171 = call i64 @libmetis__idxargmin(i64 noundef %169, ptr noundef %170)
  %172 = getelementptr inbounds i64, ptr %168, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = load ptr, ptr %42, align 8, !tbaa !5
  %175 = load i64, ptr %10, align 8, !tbaa !9
  %176 = load ptr, ptr %42, align 8, !tbaa !5
  %177 = call i64 @libmetis__idxargmax(i64 noundef %175, ptr noundef %176)
  %178 = getelementptr inbounds i64, ptr %174, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !9
  %180 = load ptr, ptr %46, align 8, !tbaa !5
  %181 = getelementptr inbounds i64, ptr %180, i64 0
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = load ptr, ptr %47, align 8, !tbaa !5
  %184 = getelementptr inbounds i64, ptr %183, i64 0
  %185 = load i64, ptr %184, align 8, !tbaa !9
  %186 = load i64, ptr %10, align 8, !tbaa !9
  %187 = sitofp i64 %186 to double
  %188 = fmul double 1.000000e+00, %187
  %189 = load ptr, ptr %42, align 8, !tbaa !5
  %190 = load i64, ptr %10, align 8, !tbaa !9
  %191 = load ptr, ptr %42, align 8, !tbaa !5
  %192 = call i64 @libmetis__idxargmax(i64 noundef %190, ptr noundef %191)
  %193 = getelementptr inbounds i64, ptr %189, i64 %192
  %194 = load i64, ptr %193, align 8, !tbaa !9
  %195 = sitofp i64 %194 to double
  %196 = fmul double %188, %195
  %197 = load i64, ptr %27, align 8, !tbaa !9
  %198 = sitofp i64 %197 to double
  %199 = fdiv double %196, %198
  %200 = load ptr, ptr %9, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.graphdef, ptr %200, i32 0, i32 0
  %202 = load i64, ptr %201, align 8, !tbaa !13
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.graphdef, ptr %203, i32 0, i32 20
  %205 = load i64, ptr %204, align 8, !tbaa !30
  %206 = load ptr, ptr %9, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.graphdef, ptr %206, i32 0, i32 16
  %208 = load i64, ptr %207, align 8, !tbaa !31
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.graphdef, ptr %209, i32 0, i32 17
  %211 = load i64, ptr %210, align 8, !tbaa !32
  %212 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %173, i64 noundef %179, i64 noundef %182, i64 noundef %185, double noundef %199, i64 noundef %202, i64 noundef %205, i64 noundef %208, i64 noundef %211)
  br label %213

213:                                              ; preds = %167, %158
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %214

214:                                              ; preds = %1152, %213
  %215 = load i64, ptr %24, align 8, !tbaa !9
  %216 = load i64, ptr %13, align 8, !tbaa !9
  %217 = icmp slt i64 %215, %216
  br i1 %217, label %218, label %1155

218:                                              ; preds = %214
  %219 = load ptr, ptr %54, align 8, !tbaa !5
  %220 = load i64, ptr %10, align 8, !tbaa !9
  %221 = load ptr, ptr %54, align 8, !tbaa !5
  %222 = call i64 @libmetis__idxargmax(i64 noundef %220, ptr noundef %221)
  %223 = getelementptr inbounds i64, ptr %219, i64 %222
  %224 = load i64, ptr %223, align 8, !tbaa !9
  store i64 %224, ptr %37, align 8, !tbaa !9
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.graphdef, ptr %225, i32 0, i32 16
  %227 = load i64, ptr %226, align 8, !tbaa !31
  store i64 %227, ptr %33, align 8, !tbaa !9
  %228 = load ptr, ptr %9, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.graphdef, ptr %228, i32 0, i32 17
  %230 = load i64, ptr %229, align 8, !tbaa !32
  store i64 %230, ptr %34, align 8, !tbaa !9
  %231 = load ptr, ptr %9, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.graphdef, ptr %231, i32 0, i32 20
  %233 = load i64, ptr %232, align 8, !tbaa !30
  %234 = load ptr, ptr %43, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %233, ptr noundef %234, i64 noundef 1)
  store i64 0, ptr %17, align 8, !tbaa !9
  store i64 0, ptr %26, align 8, !tbaa !9
  br label %235

235:                                              ; preds = %1091, %218
  %236 = load i64, ptr %17, align 8, !tbaa !9
  %237 = load ptr, ptr %9, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.graphdef, ptr %237, i32 0, i32 20
  %239 = load i64, ptr %238, align 8, !tbaa !30
  %240 = icmp slt i64 %236, %239
  br i1 %240, label %241, label %1094

241:                                              ; preds = %235
  %242 = load ptr, ptr %43, align 8, !tbaa !5
  %243 = load i64, ptr %17, align 8, !tbaa !9
  %244 = getelementptr inbounds i64, ptr %242, i64 %243
  %245 = load i64, ptr %244, align 8, !tbaa !9
  store i64 %245, ptr %16, align 8, !tbaa !9
  %246 = load i64, ptr %16, align 8, !tbaa !9
  %247 = load ptr, ptr %9, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.graphdef, ptr %247, i32 0, i32 20
  %249 = load i64, ptr %248, align 8, !tbaa !30
  %250 = icmp sge i64 %246, %249
  br i1 %250, label %251, label %252

251:                                              ; preds = %241
  br label %1091

252:                                              ; preds = %241
  %253 = load ptr, ptr %45, align 8, !tbaa !5
  %254 = load i64, ptr %16, align 8, !tbaa !9
  %255 = getelementptr inbounds i64, ptr %253, i64 %254
  %256 = load i64, ptr %255, align 8, !tbaa !9
  store i64 %256, ptr %15, align 8, !tbaa !9
  %257 = load ptr, ptr %9, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.graphdef, ptr %257, i32 0, i32 26
  %259 = load ptr, ptr %258, align 8, !tbaa !33
  %260 = load i64, ptr %15, align 8, !tbaa !9
  %261 = getelementptr inbounds %struct.vrinfodef, ptr %259, i64 %260
  store ptr %261, ptr %56, align 8, !tbaa !5
  %262 = load ptr, ptr %56, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.vrinfodef, ptr %262, i32 0, i32 3
  %264 = load i64, ptr %263, align 8, !tbaa !34
  %265 = icmp sge i64 %264, 0
  br i1 %265, label %266, label %1090

266:                                              ; preds = %252
  %267 = load ptr, ptr %41, align 8, !tbaa !5
  %268 = load i64, ptr %15, align 8, !tbaa !9
  %269 = getelementptr inbounds i64, ptr %267, i64 %268
  %270 = load i64, ptr %269, align 8, !tbaa !9
  store i64 %270, ptr %30, align 8, !tbaa !9
  %271 = load ptr, ptr %9, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.graphdef, ptr %271, i32 0, i32 3
  %273 = load ptr, ptr %272, align 8, !tbaa !36
  %274 = load i64, ptr %15, align 8, !tbaa !9
  %275 = getelementptr inbounds i64, ptr %273, i64 %274
  %276 = load i64, ptr %275, align 8, !tbaa !9
  store i64 %276, ptr %35, align 8, !tbaa !9
  %277 = load ptr, ptr %56, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.vrinfodef, ptr %277, i32 0, i32 0
  %279 = load i64, ptr %278, align 8, !tbaa !37
  %280 = icmp sgt i64 %279, 0
  br i1 %280, label %281, label %294

281:                                              ; preds = %266
  %282 = load ptr, ptr %42, align 8, !tbaa !5
  %283 = load i64, ptr %30, align 8, !tbaa !9
  %284 = getelementptr inbounds i64, ptr %282, i64 %283
  %285 = load i64, ptr %284, align 8, !tbaa !9
  %286 = load i64, ptr %35, align 8, !tbaa !9
  %287 = sub nsw i64 %285, %286
  %288 = load ptr, ptr %46, align 8, !tbaa !5
  %289 = load i64, ptr %30, align 8, !tbaa !9
  %290 = getelementptr inbounds i64, ptr %288, i64 %289
  %291 = load i64, ptr %290, align 8, !tbaa !9
  %292 = icmp slt i64 %287, %291
  br i1 %292, label %293, label %294

293:                                              ; preds = %281
  br label %1091

294:                                              ; preds = %281, %266
  %295 = load ptr, ptr %56, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.vrinfodef, ptr %295, i32 0, i32 0
  %297 = load i64, ptr %296, align 8, !tbaa !37
  %298 = icmp eq i64 %297, 0
  br i1 %298, label %299, label %311

299:                                              ; preds = %294
  %300 = load ptr, ptr %56, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.vrinfodef, ptr %300, i32 0, i32 1
  %302 = load i64, ptr %301, align 8, !tbaa !38
  %303 = icmp sgt i64 %302, 0
  br i1 %303, label %304, label %311

304:                                              ; preds = %299
  %305 = load ptr, ptr %9, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.graphdef, ptr %305, i32 0, i32 4
  %307 = load ptr, ptr %306, align 8, !tbaa !39
  %308 = load i64, ptr %15, align 8, !tbaa !9
  %309 = getelementptr inbounds i64, ptr %307, i64 %308
  %310 = load i64, ptr %309, align 8, !tbaa !9
  br label %312

311:                                              ; preds = %299, %294
  br label %312

312:                                              ; preds = %311, %304
  %313 = phi i64 [ %310, %304 ], [ 0, %311 ]
  store i64 %313, ptr %29, align 8, !tbaa !9
  %314 = load ptr, ptr %56, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.vrinfodef, ptr %314, i32 0, i32 5
  %316 = load ptr, ptr %315, align 8, !tbaa !40
  store ptr %316, ptr %55, align 8, !tbaa !5
  %317 = load ptr, ptr %56, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.vrinfodef, ptr %317, i32 0, i32 4
  %319 = load i64, ptr %318, align 8, !tbaa !41
  store i64 %319, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %320

320:                                              ; preds = %399, %312
  %321 = load i64, ptr %18, align 8, !tbaa !9
  %322 = load i64, ptr %28, align 8, !tbaa !9
  %323 = icmp slt i64 %321, %322
  br i1 %323, label %324, label %402

324:                                              ; preds = %320
  %325 = load ptr, ptr %55, align 8, !tbaa !5
  %326 = load i64, ptr %18, align 8, !tbaa !9
  %327 = getelementptr inbounds %struct.vedegreedef, ptr %325, i64 %326
  %328 = getelementptr inbounds %struct.vedegreedef, ptr %327, i32 0, i32 0
  %329 = load i64, ptr %328, align 8, !tbaa !42
  store i64 %329, ptr %32, align 8, !tbaa !9
  %330 = load ptr, ptr %51, align 8, !tbaa !5
  %331 = load i64, ptr %32, align 8, !tbaa !9
  %332 = getelementptr inbounds i64, ptr %330, i64 %331
  store i64 1, ptr %332, align 8, !tbaa !9
  %333 = load ptr, ptr %52, align 8, !tbaa !5
  %334 = load i64, ptr %32, align 8, !tbaa !9
  %335 = load i64, ptr %10, align 8, !tbaa !9
  %336 = mul nsw i64 %334, %335
  %337 = getelementptr inbounds i64, ptr %333, i64 %336
  store ptr %337, ptr %53, align 8, !tbaa !5
  store i64 0, ptr %36, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %338

338:                                              ; preds = %375, %324
  %339 = load i64, ptr %20, align 8, !tbaa !9
  %340 = load i64, ptr %28, align 8, !tbaa !9
  %341 = icmp slt i64 %339, %340
  br i1 %341, label %342, label %378

342:                                              ; preds = %338
  %343 = load i64, ptr %20, align 8, !tbaa !9
  %344 = load i64, ptr %18, align 8, !tbaa !9
  %345 = icmp eq i64 %343, %344
  br i1 %345, label %346, label %347

346:                                              ; preds = %342
  br label %375

347:                                              ; preds = %342
  %348 = load ptr, ptr %55, align 8, !tbaa !5
  %349 = load i64, ptr %20, align 8, !tbaa !9
  %350 = getelementptr inbounds %struct.vedegreedef, ptr %348, i64 %349
  %351 = getelementptr inbounds %struct.vedegreedef, ptr %350, i32 0, i32 0
  %352 = load i64, ptr %351, align 8, !tbaa !42
  store i64 %352, ptr %22, align 8, !tbaa !9
  %353 = load ptr, ptr %53, align 8, !tbaa !5
  %354 = load i64, ptr %22, align 8, !tbaa !9
  %355 = getelementptr inbounds i64, ptr %353, i64 %354
  %356 = load i64, ptr %355, align 8, !tbaa !9
  %357 = icmp eq i64 %356, 0
  br i1 %357, label %358, label %374

358:                                              ; preds = %347
  %359 = load ptr, ptr %54, align 8, !tbaa !5
  %360 = load i64, ptr %22, 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 %37, align 8, !tbaa !9
  %364 = sub nsw i64 %363, 1
  %365 = icmp sgt i64 %362, %364
  br i1 %365, label %366, label %371

366:                                              ; preds = %358
  %367 = load ptr, ptr %51, align 8, !tbaa !5
  %368 = load i64, ptr %32, align 8, !tbaa !9
  %369 = getelementptr inbounds i64, ptr %367, i64 %368
  store i64 0, ptr %369, align 8, !tbaa !9
  %370 = load i64, ptr %37, align 8, !tbaa !9
  store i64 %370, ptr %36, align 8, !tbaa !9
  br label %378

371:                                              ; preds = %358
  %372 = load i64, ptr %36, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %36, align 8, !tbaa !9
  br label %374

374:                                              ; preds = %371, %347
  br label %375

375:                                              ; preds = %374, %346
  %376 = load i64, ptr %20, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %20, align 8, !tbaa !9
  br label %338, !llvm.loop !44

378:                                              ; preds = %366, %338
  %379 = load ptr, ptr %54, align 8, !tbaa !5
  %380 = load i64, ptr %32, align 8, !tbaa !9
  %381 = getelementptr inbounds i64, ptr %379, i64 %380
  %382 = load i64, ptr %381, align 8, !tbaa !9
  %383 = load i64, ptr %36, align 8, !tbaa !9
  %384 = add nsw i64 %382, %383
  %385 = load i64, ptr %37, align 8, !tbaa !9
  %386 = icmp sgt i64 %384, %385
  br i1 %386, label %387, label %391

387:                                              ; preds = %378
  %388 = load ptr, ptr %51, align 8, !tbaa !5
  %389 = load i64, ptr %32, align 8, !tbaa !9
  %390 = getelementptr inbounds i64, ptr %388, i64 %389
  store i64 0, ptr %390, align 8, !tbaa !9
  br label %391

391:                                              ; preds = %387, %378
  %392 = load i64, ptr %36, align 8, !tbaa !9
  %393 = icmp eq i64 %392, 0
  br i1 %393, label %394, label %398

394:                                              ; preds = %391
  %395 = load ptr, ptr %51, align 8, !tbaa !5
  %396 = load i64, ptr %32, align 8, !tbaa !9
  %397 = getelementptr inbounds i64, ptr %395, i64 %396
  store i64 2, ptr %397, align 8, !tbaa !9
  br label %398

398:                                              ; preds = %394, %391
  br label %399

399:                                              ; preds = %398
  %400 = load i64, ptr %18, align 8, !tbaa !9
  %401 = add nsw i64 %400, 1
  store i64 %401, ptr %18, align 8, !tbaa !9
  br label %320, !llvm.loop !45

402:                                              ; preds = %320
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %403

403:                                              ; preds = %450, %402
  %404 = load i64, ptr %20, align 8, !tbaa !9
  %405 = load i64, ptr %28, align 8, !tbaa !9
  %406 = icmp slt i64 %404, %405
  br i1 %406, label %407, label %453

407:                                              ; preds = %403
  %408 = load ptr, ptr %55, align 8, !tbaa !5
  %409 = load i64, ptr %20, align 8, !tbaa !9
  %410 = getelementptr inbounds %struct.vedegreedef, ptr %408, i64 %409
  %411 = getelementptr inbounds %struct.vedegreedef, ptr %410, i32 0, i32 0
  %412 = load i64, ptr %411, align 8, !tbaa !42
  store i64 %412, ptr %32, align 8, !tbaa !9
  %413 = load ptr, ptr %51, align 8, !tbaa !5
  %414 = load i64, ptr %32, align 8, !tbaa !9
  %415 = getelementptr inbounds i64, ptr %413, i64 %414
  %416 = load i64, ptr %415, align 8, !tbaa !9
  %417 = icmp ne i64 %416, 0
  br i1 %417, label %419, label %418

418:                                              ; preds = %407
  br label %450

419:                                              ; preds = %407
  %420 = load ptr, ptr %42, align 8, !tbaa !5
  %421 = load i64, ptr %32, align 8, !tbaa !9
  %422 = getelementptr inbounds i64, ptr %420, i64 %421
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = load i64, ptr %35, align 8, !tbaa !9
  %425 = add nsw i64 %423, %424
  %426 = load ptr, ptr %47, align 8, !tbaa !5
  %427 = load i64, ptr %32, align 8, !tbaa !9
  %428 = getelementptr inbounds i64, ptr %426, i64 %427
  %429 = load i64, ptr %428, align 8, !tbaa !9
  %430 = load i64, ptr %14, align 8, !tbaa !9
  %431 = load ptr, ptr %55, align 8, !tbaa !5
  %432 = load i64, ptr %20, align 8, !tbaa !9
  %433 = getelementptr inbounds %struct.vedegreedef, ptr %431, i64 %432
  %434 = getelementptr inbounds %struct.vedegreedef, ptr %433, i32 0, i32 3
  %435 = load i64, ptr %434, align 8, !tbaa !46
  %436 = mul nsw i64 %430, %435
  %437 = add nsw i64 %429, %436
  %438 = icmp sle i64 %425, %437
  br i1 %438, label %439, label %449

439:                                              ; preds = %419
  %440 = load i64, ptr %29, align 8, !tbaa !9
  %441 = load ptr, ptr %55, align 8, !tbaa !5
  %442 = load i64, ptr %20, align 8, !tbaa !9
  %443 = getelementptr inbounds %struct.vedegreedef, ptr %441, i64 %442
  %444 = getelementptr inbounds %struct.vedegreedef, ptr %443, i32 0, i32 3
  %445 = load i64, ptr %444, align 8, !tbaa !46
  %446 = add nsw i64 %440, %445
  %447 = icmp sge i64 %446, 0
  br i1 %447, label %448, label %449

448:                                              ; preds = %439
  br label %453

449:                                              ; preds = %439, %419
  br label %450

450:                                              ; preds = %449, %418
  %451 = load i64, ptr %20, align 8, !tbaa !9
  %452 = add nsw i64 %451, 1
  store i64 %452, ptr %20, align 8, !tbaa !9
  br label %403, !llvm.loop !47

453:                                              ; preds = %448, %403
  %454 = load i64, ptr %20, align 8, !tbaa !9
  %455 = load i64, ptr %28, align 8, !tbaa !9
  %456 = icmp eq i64 %454, %455
  br i1 %456, label %457, label %458

457:                                              ; preds = %453
  br label %1091

458:                                              ; preds = %453
  %459 = load i64, ptr %20, align 8, !tbaa !9
  %460 = add nsw i64 %459, 1
  store i64 %460, ptr %18, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %580, %458
  %462 = load i64, ptr %18, align 8, !tbaa !9
  %463 = load i64, ptr %28, align 8, !tbaa !9
  %464 = icmp slt i64 %462, %463
  br i1 %464, label %465, label %583

465:                                              ; preds = %461
  %466 = load ptr, ptr %55, align 8, !tbaa !5
  %467 = load i64, ptr %18, 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 !42
  store i64 %470, ptr %32, align 8, !tbaa !9
  %471 = load ptr, ptr %51, align 8, !tbaa !5
  %472 = load i64, ptr %32, align 8, !tbaa !9
  %473 = getelementptr inbounds i64, ptr %471, i64 %472
  %474 = load i64, ptr %473, align 8, !tbaa !9
  %475 = icmp ne i64 %474, 0
  br i1 %475, label %476, label %488

476:                                              ; preds = %465
  %477 = load ptr, ptr %42, align 8, !tbaa !5
  %478 = load i64, ptr %32, align 8, !tbaa !9
  %479 = getelementptr inbounds i64, ptr %477, i64 %478
  %480 = load i64, ptr %479, align 8, !tbaa !9
  %481 = load i64, ptr %35, align 8, !tbaa !9
  %482 = add nsw i64 %480, %481
  %483 = load ptr, ptr %47, align 8, !tbaa !5
  %484 = load i64, ptr %32, align 8, !tbaa !9
  %485 = getelementptr inbounds i64, ptr %483, i64 %484
  %486 = load i64, ptr %485, align 8, !tbaa !9
  %487 = icmp sgt i64 %482, %486
  br i1 %487, label %488, label %489

488:                                              ; preds = %476, %465
  br label %580

489:                                              ; preds = %476
  %490 = load ptr, ptr %55, align 8, !tbaa !5
  %491 = load i64, ptr %18, align 8, !tbaa !9
  %492 = getelementptr inbounds %struct.vedegreedef, ptr %490, i64 %491
  %493 = getelementptr inbounds %struct.vedegreedef, ptr %492, i32 0, i32 3
  %494 = load i64, ptr %493, align 8, !tbaa !46
  %495 = load ptr, ptr %55, align 8, !tbaa !5
  %496 = load i64, ptr %20, align 8, !tbaa !9
  %497 = getelementptr inbounds %struct.vedegreedef, ptr %495, i64 %496
  %498 = getelementptr inbounds %struct.vedegreedef, ptr %497, i32 0, i32 3
  %499 = load i64, ptr %498, align 8, !tbaa !46
  %500 = icmp sgt i64 %494, %499
  br i1 %500, label %577, label %501

501:                                              ; preds = %489
  %502 = load ptr, ptr %55, align 8, !tbaa !5
  %503 = load i64, ptr %18, align 8, !tbaa !9
  %504 = getelementptr inbounds %struct.vedegreedef, ptr %502, i64 %503
  %505 = getelementptr inbounds %struct.vedegreedef, ptr %504, i32 0, i32 3
  %506 = load i64, ptr %505, align 8, !tbaa !46
  %507 = load ptr, ptr %55, align 8, !tbaa !5
  %508 = load i64, ptr %20, align 8, !tbaa !9
  %509 = getelementptr inbounds %struct.vedegreedef, ptr %507, i64 %508
  %510 = getelementptr inbounds %struct.vedegreedef, ptr %509, i32 0, i32 3
  %511 = load i64, ptr %510, align 8, !tbaa !46
  %512 = icmp eq i64 %506, %511
  br i1 %512, label %513, label %525

513:                                              ; preds = %501
  %514 = load ptr, ptr %55, align 8, !tbaa !5
  %515 = load i64, ptr %18, align 8, !tbaa !9
  %516 = getelementptr inbounds %struct.vedegreedef, ptr %514, i64 %515
  %517 = getelementptr inbounds %struct.vedegreedef, ptr %516, i32 0, i32 1
  %518 = load i64, ptr %517, align 8, !tbaa !48
  %519 = load ptr, ptr %55, align 8, !tbaa !5
  %520 = load i64, ptr %20, align 8, !tbaa !9
  %521 = getelementptr inbounds %struct.vedegreedef, ptr %519, i64 %520
  %522 = getelementptr inbounds %struct.vedegreedef, ptr %521, i32 0, i32 1
  %523 = load i64, ptr %522, align 8, !tbaa !48
  %524 = icmp sgt i64 %518, %523
  br i1 %524, label %577, label %525

525:                                              ; preds = %513, %501
  %526 = load ptr, ptr %55, align 8, !tbaa !5
  %527 = load i64, ptr %18, align 8, !tbaa !9
  %528 = getelementptr inbounds %struct.vedegreedef, ptr %526, i64 %527
  %529 = getelementptr inbounds %struct.vedegreedef, ptr %528, i32 0, i32 3
  %530 = load i64, ptr %529, align 8, !tbaa !46
  %531 = load ptr, ptr %55, align 8, !tbaa !5
  %532 = load i64, ptr %20, align 8, !tbaa !9
  %533 = getelementptr inbounds %struct.vedegreedef, ptr %531, i64 %532
  %534 = getelementptr inbounds %struct.vedegreedef, ptr %533, i32 0, i32 3
  %535 = load i64, ptr %534, align 8, !tbaa !46
  %536 = icmp eq i64 %530, %535
  br i1 %536, label %537, label %579

537:                                              ; preds = %525
  %538 = load ptr, ptr %55, align 8, !tbaa !5
  %539 = load i64, ptr %18, align 8, !tbaa !9
  %540 = getelementptr inbounds %struct.vedegreedef, ptr %538, i64 %539
  %541 = getelementptr inbounds %struct.vedegreedef, ptr %540, i32 0, i32 1
  %542 = load i64, ptr %541, align 8, !tbaa !48
  %543 = load ptr, ptr %55, align 8, !tbaa !5
  %544 = load i64, ptr %20, align 8, !tbaa !9
  %545 = getelementptr inbounds %struct.vedegreedef, ptr %543, i64 %544
  %546 = getelementptr inbounds %struct.vedegreedef, ptr %545, i32 0, i32 1
  %547 = load i64, ptr %546, align 8, !tbaa !48
  %548 = icmp eq i64 %542, %547
  br i1 %548, label %549, label %579

549:                                              ; preds = %537
  %550 = load ptr, ptr %48, align 8, !tbaa !5
  %551 = load ptr, ptr %55, align 8, !tbaa !5
  %552 = load i64, ptr %20, align 8, !tbaa !9
  %553 = getelementptr inbounds %struct.vedegreedef, ptr %551, i64 %552
  %554 = getelementptr inbounds %struct.vedegreedef, ptr %553, i32 0, i32 0
  %555 = load i64, ptr %554, align 8, !tbaa !42
  %556 = getelementptr inbounds i64, ptr %550, i64 %555
  %557 = load i64, ptr %556, align 8, !tbaa !9
  %558 = load ptr, ptr %42, align 8, !tbaa !5
  %559 = load i64, ptr %32, align 8, !tbaa !9
  %560 = getelementptr inbounds i64, ptr %558, i64 %559
  %561 = load i64, ptr %560, align 8, !tbaa !9
  %562 = mul nsw i64 %557, %561
  %563 = load ptr, ptr %48, align 8, !tbaa !5
  %564 = load i64, ptr %32, align 8, !tbaa !9
  %565 = getelementptr inbounds i64, ptr %563, i64 %564
  %566 = load i64, ptr %565, align 8, !tbaa !9
  %567 = load ptr, ptr %42, align 8, !tbaa !5
  %568 = load ptr, ptr %55, align 8, !tbaa !5
  %569 = load i64, ptr %20, align 8, !tbaa !9
  %570 = getelementptr inbounds %struct.vedegreedef, ptr %568, i64 %569
  %571 = getelementptr inbounds %struct.vedegreedef, ptr %570, i32 0, i32 0
  %572 = load i64, ptr %571, align 8, !tbaa !42
  %573 = getelementptr inbounds i64, ptr %567, i64 %572
  %574 = load i64, ptr %573, align 8, !tbaa !9
  %575 = mul nsw i64 %566, %574
  %576 = icmp slt i64 %562, %575
  br i1 %576, label %577, label %579

577:                                              ; preds = %549, %513, %489
  %578 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %578, ptr %20, align 8, !tbaa !9
  br label %579

579:                                              ; preds = %577, %549, %537, %525
  br label %580

580:                                              ; preds = %579, %488
  %581 = load i64, ptr %18, align 8, !tbaa !9
  %582 = add nsw i64 %581, 1
  store i64 %582, ptr %18, align 8, !tbaa !9
  br label %461, !llvm.loop !49

583:                                              ; preds = %461
  %584 = load ptr, ptr %55, align 8, !tbaa !5
  %585 = load i64, ptr %20, align 8, !tbaa !9
  %586 = getelementptr inbounds %struct.vedegreedef, ptr %584, i64 %585
  %587 = getelementptr inbounds %struct.vedegreedef, ptr %586, i32 0, i32 0
  %588 = load i64, ptr %587, align 8, !tbaa !42
  store i64 %588, ptr %32, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  %589 = load i64, ptr %29, align 8, !tbaa !9
  %590 = load ptr, ptr %55, align 8, !tbaa !5
  %591 = load i64, ptr %20, align 8, !tbaa !9
  %592 = getelementptr inbounds %struct.vedegreedef, ptr %590, i64 %591
  %593 = getelementptr inbounds %struct.vedegreedef, ptr %592, i32 0, i32 3
  %594 = load i64, ptr %593, align 8, !tbaa !46
  %595 = add nsw i64 %589, %594
  %596 = icmp sgt i64 %595, 0
  br i1 %596, label %608, label %597

597:                                              ; preds = %583
  %598 = load ptr, ptr %55, align 8, !tbaa !5
  %599 = load i64, ptr %20, align 8, !tbaa !9
  %600 = getelementptr inbounds %struct.vedegreedef, ptr %598, i64 %599
  %601 = getelementptr inbounds %struct.vedegreedef, ptr %600, i32 0, i32 1
  %602 = load i64, ptr %601, align 8, !tbaa !48
  %603 = load ptr, ptr %56, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.vrinfodef, ptr %603, i32 0, i32 0
  %605 = load i64, ptr %604, align 8, !tbaa !37
  %606 = sub nsw i64 %602, %605
  %607 = icmp sgt i64 %606, 0
  br i1 %607, label %608, label %609

608:                                              ; preds = %597, %583
  store i64 1, ptr %18, align 8, !tbaa !9
  br label %669

609:                                              ; preds = %597
  %610 = load ptr, ptr %55, align 8, !tbaa !5
  %611 = load i64, ptr %20, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.vedegreedef, ptr %610, i64 %611
  %613 = getelementptr inbounds %struct.vedegreedef, ptr %612, i32 0, i32 1
  %614 = load i64, ptr %613, align 8, !tbaa !48
  %615 = load ptr, ptr %56, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.vrinfodef, ptr %615, i32 0, i32 0
  %617 = load i64, ptr %616, align 8, !tbaa !37
  %618 = sub nsw i64 %614, %617
  %619 = icmp eq i64 %618, 0
  br i1 %619, label %620, label %668

620:                                              ; preds = %609
  %621 = load i64, ptr %17, align 8, !tbaa !9
  %622 = and i64 %621, 5
  %623 = icmp eq i64 %622, 0
  br i1 %623, label %666, label %624

624:                                              ; preds = %620
  %625 = load ptr, ptr %51, align 8, !tbaa !5
  %626 = load ptr, ptr %55, align 8, !tbaa !5
  %627 = load i64, ptr %20, align 8, !tbaa !9
  %628 = getelementptr inbounds %struct.vedegreedef, ptr %626, i64 %627
  %629 = getelementptr inbounds %struct.vedegreedef, ptr %628, i32 0, i32 0
  %630 = load i64, ptr %629, align 8, !tbaa !42
  %631 = getelementptr inbounds i64, ptr %625, i64 %630
  %632 = load i64, ptr %631, align 8, !tbaa !9
  %633 = icmp eq i64 %632, 2
  br i1 %633, label %666, label %634

634:                                              ; preds = %624
  %635 = load ptr, ptr %42, align 8, !tbaa !5
  %636 = load i64, ptr %30, align 8, !tbaa !9
  %637 = getelementptr inbounds i64, ptr %635, i64 %636
  %638 = load i64, ptr %637, align 8, !tbaa !9
  %639 = load ptr, ptr %47, align 8, !tbaa !5
  %640 = load i64, ptr %30, align 8, !tbaa !9
  %641 = getelementptr inbounds i64, ptr %639, i64 %640
  %642 = load i64, ptr %641, align 8, !tbaa !9
  %643 = icmp sge i64 %638, %642
  br i1 %643, label %666, label %644

644:                                              ; preds = %634
  %645 = load ptr, ptr %48, align 8, !tbaa !5
  %646 = load i64, ptr %30, align 8, !tbaa !9
  %647 = getelementptr inbounds i64, ptr %645, i64 %646
  %648 = load i64, ptr %647, align 8, !tbaa !9
  %649 = load ptr, ptr %42, align 8, !tbaa !5
  %650 = load i64, ptr %32, align 8, !tbaa !9
  %651 = getelementptr inbounds i64, ptr %649, i64 %650
  %652 = load i64, ptr %651, align 8, !tbaa !9
  %653 = load i64, ptr %35, align 8, !tbaa !9
  %654 = add nsw i64 %652, %653
  %655 = mul nsw i64 %648, %654
  %656 = load ptr, ptr %48, align 8, !tbaa !5
  %657 = load i64, ptr %32, align 8, !tbaa !9
  %658 = getelementptr inbounds i64, ptr %656, i64 %657
  %659 = load i64, ptr %658, align 8, !tbaa !9
  %660 = load ptr, ptr %42, align 8, !tbaa !5
  %661 = load i64, ptr %30, align 8, !tbaa !9
  %662 = getelementptr inbounds i64, ptr %660, i64 %661
  %663 = load i64, ptr %662, align 8, !tbaa !9
  %664 = mul nsw i64 %659, %663
  %665 = icmp slt i64 %655, %664
  br i1 %665, label %666, label %667

666:                                              ; preds = %644, %634, %624, %620
  store i64 1, ptr %18, align 8, !tbaa !9
  br label %667

667:                                              ; preds = %666, %644
  br label %668

668:                                              ; preds = %667, %609
  br label %669

669:                                              ; preds = %668, %608
  %670 = load i64, ptr %18, align 8, !tbaa !9
  %671 = icmp eq i64 %670, 0
  br i1 %671, label %672, label %673

672:                                              ; preds = %669
  br label %1091

673:                                              ; preds = %669
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %674

674:                                              ; preds = %686, %673
  %675 = load i64, ptr %18, align 8, !tbaa !9
  %676 = load i64, ptr %28, align 8, !tbaa !9
  %677 = icmp slt i64 %675, %676
  br i1 %677, label %678, label %689

678:                                              ; preds = %674
  %679 = load ptr, ptr %51, align 8, !tbaa !5
  %680 = load ptr, ptr %55, align 8, !tbaa !5
  %681 = load i64, ptr %18, align 8, !tbaa !9
  %682 = getelementptr inbounds %struct.vedegreedef, ptr %680, i64 %681
  %683 = getelementptr inbounds %struct.vedegreedef, ptr %682, i32 0, i32 0
  %684 = load i64, ptr %683, align 8, !tbaa !42
  %685 = getelementptr inbounds i64, ptr %679, i64 %684
  store i64 -1, ptr %685, align 8, !tbaa !9
  br label %686

686:                                              ; preds = %678
  %687 = load i64, ptr %18, align 8, !tbaa !9
  %688 = add nsw i64 %687, 1
  store i64 %688, ptr %18, align 8, !tbaa !9
  br label %674, !llvm.loop !50

689:                                              ; preds = %674
  br label %690

690:                                              ; preds = %689
  %691 = load i64, ptr %35, align 8, !tbaa !9
  %692 = load ptr, ptr %42, align 8, !tbaa !5
  %693 = load i64, ptr %32, align 8, !tbaa !9
  %694 = getelementptr inbounds i64, ptr %692, i64 %693
  %695 = load i64, ptr %694, align 8, !tbaa !9
  %696 = add nsw i64 %695, %691
  store i64 %696, ptr %694, align 8, !tbaa !9
  %697 = load i64, ptr %35, align 8, !tbaa !9
  %698 = load ptr, ptr %42, align 8, !tbaa !5
  %699 = load i64, ptr %30, align 8, !tbaa !9
  %700 = getelementptr inbounds i64, ptr %698, i64 %699
  %701 = load i64, ptr %700, align 8, !tbaa !9
  %702 = sub nsw i64 %701, %697
  store i64 %702, ptr %700, align 8, !tbaa !9
  br label %703

703:                                              ; preds = %690
  br label %704

704:                                              ; preds = %703
  %705 = load ptr, ptr %55, align 8, !tbaa !5
  %706 = load i64, ptr %20, align 8, !tbaa !9
  %707 = getelementptr inbounds %struct.vedegreedef, ptr %705, i64 %706
  %708 = getelementptr inbounds %struct.vedegreedef, ptr %707, i32 0, i32 1
  %709 = load i64, ptr %708, align 8, !tbaa !48
  %710 = load ptr, ptr %56, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.vrinfodef, ptr %710, i32 0, i32 0
  %712 = load i64, ptr %711, align 8, !tbaa !37
  %713 = sub nsw i64 %709, %712
  %714 = load ptr, ptr %9, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.graphdef, ptr %714, i32 0, i32 16
  %716 = load i64, ptr %715, align 8, !tbaa !31
  %717 = sub nsw i64 %716, %713
  store i64 %717, ptr %715, align 8, !tbaa !31
  %718 = load i64, ptr %29, align 8, !tbaa !9
  %719 = load ptr, ptr %55, align 8, !tbaa !5
  %720 = load i64, ptr %20, align 8, !tbaa !9
  %721 = getelementptr inbounds %struct.vedegreedef, ptr %719, i64 %720
  %722 = getelementptr inbounds %struct.vedegreedef, ptr %721, i32 0, i32 3
  %723 = load i64, ptr %722, align 8, !tbaa !46
  %724 = add nsw i64 %718, %723
  %725 = load ptr, ptr %9, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.graphdef, ptr %725, i32 0, i32 17
  %727 = load i64, ptr %726, align 8, !tbaa !32
  %728 = sub nsw i64 %727, %724
  store i64 %728, ptr %726, align 8, !tbaa !32
  %729 = load i64, ptr %32, align 8, !tbaa !9
  %730 = load ptr, ptr %41, align 8, !tbaa !5
  %731 = load i64, ptr %15, align 8, !tbaa !9
  %732 = getelementptr inbounds i64, ptr %730, i64 %731
  store i64 %729, ptr %732, align 8, !tbaa !9
  %733 = load ptr, ptr %8, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.controldef, ptr %733, i32 0, i32 1
  %735 = load i64, ptr %734, align 8, !tbaa !29
  %736 = and i64 %735, 32
  %737 = icmp ne i64 %736, 0
  br i1 %737, label %738, label %765

738:                                              ; preds = %704
  %739 = load i64, ptr %15, align 8, !tbaa !9
  %740 = load i64, ptr %30, align 8, !tbaa !9
  %741 = load i64, ptr %32, align 8, !tbaa !9
  %742 = load i64, ptr %29, align 8, !tbaa !9
  %743 = load ptr, ptr %55, align 8, !tbaa !5
  %744 = load i64, ptr %20, align 8, !tbaa !9
  %745 = getelementptr inbounds %struct.vedegreedef, ptr %743, i64 %744
  %746 = getelementptr inbounds %struct.vedegreedef, ptr %745, i32 0, i32 3
  %747 = load i64, ptr %746, align 8, !tbaa !46
  %748 = add nsw i64 %742, %747
  %749 = load ptr, ptr %55, align 8, !tbaa !5
  %750 = load i64, ptr %20, align 8, !tbaa !9
  %751 = getelementptr inbounds %struct.vedegreedef, ptr %749, i64 %750
  %752 = getelementptr inbounds %struct.vedegreedef, ptr %751, i32 0, i32 1
  %753 = load i64, ptr %752, align 8, !tbaa !48
  %754 = load ptr, ptr %56, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.vrinfodef, ptr %754, i32 0, i32 0
  %756 = load i64, ptr %755, align 8, !tbaa !37
  %757 = sub nsw i64 %753, %756
  %758 = load ptr, ptr %9, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.graphdef, ptr %758, i32 0, i32 16
  %760 = load i64, ptr %759, align 8, !tbaa !31
  %761 = load ptr, ptr %9, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.graphdef, ptr %761, i32 0, i32 17
  %763 = load i64, ptr %762, align 8, !tbaa !32
  %764 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, i64 noundef %739, i64 noundef %740, i64 noundef %741, i64 noundef %748, i64 noundef %757, i64 noundef %760, i64 noundef %763)
  br label %765

765:                                              ; preds = %738, %704
  %766 = load ptr, ptr %56, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.vrinfodef, ptr %766, i32 0, i32 0
  %768 = load i64, ptr %767, align 8, !tbaa !37
  %769 = load ptr, ptr %55, align 8, !tbaa !5
  %770 = load i64, ptr %20, align 8, !tbaa !9
  %771 = getelementptr inbounds %struct.vedegreedef, ptr %769, i64 %770
  %772 = getelementptr inbounds %struct.vedegreedef, ptr %771, i32 0, i32 1
  %773 = load i64, ptr %772, align 8, !tbaa !48
  %774 = sub nsw i64 %768, %773
  %775 = load ptr, ptr %52, align 8, !tbaa !5
  %776 = load i64, ptr %30, align 8, !tbaa !9
  %777 = load i64, ptr %10, align 8, !tbaa !9
  %778 = mul nsw i64 %776, %777
  %779 = load i64, ptr %32, align 8, !tbaa !9
  %780 = add nsw i64 %778, %779
  %781 = getelementptr inbounds i64, ptr %775, i64 %780
  %782 = load i64, ptr %781, align 8, !tbaa !9
  %783 = add nsw i64 %782, %774
  store i64 %783, ptr %781, align 8, !tbaa !9
  %784 = load ptr, ptr %56, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.vrinfodef, ptr %784, i32 0, i32 0
  %786 = load i64, ptr %785, align 8, !tbaa !37
  %787 = load ptr, ptr %55, align 8, !tbaa !5
  %788 = load i64, ptr %20, align 8, !tbaa !9
  %789 = getelementptr inbounds %struct.vedegreedef, ptr %787, i64 %788
  %790 = getelementptr inbounds %struct.vedegreedef, ptr %789, i32 0, i32 1
  %791 = load i64, ptr %790, align 8, !tbaa !48
  %792 = sub nsw i64 %786, %791
  %793 = load ptr, ptr %52, align 8, !tbaa !5
  %794 = load i64, ptr %32, align 8, !tbaa !9
  %795 = load i64, ptr %10, align 8, !tbaa !9
  %796 = mul nsw i64 %794, %795
  %797 = load i64, ptr %30, align 8, !tbaa !9
  %798 = add nsw i64 %796, %797
  %799 = getelementptr inbounds i64, ptr %793, i64 %798
  %800 = load i64, ptr %799, align 8, !tbaa !9
  %801 = add nsw i64 %800, %792
  store i64 %801, ptr %799, align 8, !tbaa !9
  %802 = load ptr, ptr %52, align 8, !tbaa !5
  %803 = load i64, ptr %30, align 8, !tbaa !9
  %804 = load i64, ptr %10, align 8, !tbaa !9
  %805 = mul nsw i64 %803, %804
  %806 = load i64, ptr %32, align 8, !tbaa !9
  %807 = add nsw i64 %805, %806
  %808 = getelementptr inbounds i64, ptr %802, i64 %807
  %809 = load i64, ptr %808, align 8, !tbaa !9
  %810 = icmp eq i64 %809, 0
  br i1 %810, label %811, label %832

811:                                              ; preds = %765
  %812 = load ptr, ptr %54, align 8, !tbaa !5
  %813 = load i64, ptr %30, align 8, !tbaa !9
  %814 = getelementptr inbounds i64, ptr %812, i64 %813
  %815 = load i64, ptr %814, align 8, !tbaa !9
  %816 = add nsw i64 %815, -1
  store i64 %816, ptr %814, align 8, !tbaa !9
  %817 = load ptr, ptr %54, align 8, !tbaa !5
  %818 = load i64, ptr %30, align 8, !tbaa !9
  %819 = getelementptr inbounds i64, ptr %817, i64 %818
  %820 = load i64, ptr %819, align 8, !tbaa !9
  %821 = add nsw i64 %820, 1
  %822 = load i64, ptr %37, align 8, !tbaa !9
  %823 = icmp eq i64 %821, %822
  br i1 %823, label %824, label %831

824:                                              ; preds = %811
  %825 = load ptr, ptr %54, align 8, !tbaa !5
  %826 = load i64, ptr %10, align 8, !tbaa !9
  %827 = load ptr, ptr %54, align 8, !tbaa !5
  %828 = call i64 @libmetis__idxargmax(i64 noundef %826, ptr noundef %827)
  %829 = getelementptr inbounds i64, ptr %825, i64 %828
  %830 = load i64, ptr %829, align 8, !tbaa !9
  store i64 %830, ptr %37, align 8, !tbaa !9
  br label %831

831:                                              ; preds = %824, %811
  br label %832

832:                                              ; preds = %831, %765
  %833 = load ptr, ptr %52, align 8, !tbaa !5
  %834 = load i64, ptr %32, align 8, !tbaa !9
  %835 = load i64, ptr %10, align 8, !tbaa !9
  %836 = mul nsw i64 %834, %835
  %837 = load i64, ptr %30, align 8, !tbaa !9
  %838 = add nsw i64 %836, %837
  %839 = getelementptr inbounds i64, ptr %833, i64 %838
  %840 = load i64, ptr %839, align 8, !tbaa !9
  %841 = icmp eq i64 %840, 0
  br i1 %841, label %842, label %863

842:                                              ; preds = %832
  %843 = load ptr, ptr %54, align 8, !tbaa !5
  %844 = load i64, ptr %32, align 8, !tbaa !9
  %845 = getelementptr inbounds i64, ptr %843, i64 %844
  %846 = load i64, ptr %845, align 8, !tbaa !9
  %847 = add nsw i64 %846, -1
  store i64 %847, ptr %845, align 8, !tbaa !9
  %848 = load ptr, ptr %54, align 8, !tbaa !5
  %849 = load i64, ptr %32, align 8, !tbaa !9
  %850 = getelementptr inbounds i64, ptr %848, i64 %849
  %851 = load i64, ptr %850, align 8, !tbaa !9
  %852 = add nsw i64 %851, 1
  %853 = load i64, ptr %37, align 8, !tbaa !9
  %854 = icmp eq i64 %852, %853
  br i1 %854, label %855, label %862

855:                                              ; preds = %842
  %856 = load ptr, ptr %54, align 8, !tbaa !5
  %857 = load i64, ptr %10, align 8, !tbaa !9
  %858 = load ptr, ptr %54, align 8, !tbaa !5
  %859 = call i64 @libmetis__idxargmax(i64 noundef %857, ptr noundef %858)
  %860 = getelementptr inbounds i64, ptr %856, i64 %859
  %861 = load i64, ptr %860, align 8, !tbaa !9
  store i64 %861, ptr %37, align 8, !tbaa !9
  br label %862

862:                                              ; preds = %855, %842
  br label %863

863:                                              ; preds = %862, %832
  %864 = load ptr, ptr %38, align 8, !tbaa !5
  %865 = load i64, ptr %15, align 8, !tbaa !9
  %866 = getelementptr inbounds i64, ptr %864, i64 %865
  %867 = load i64, ptr %866, align 8, !tbaa !9
  store i64 %867, ptr %18, align 8, !tbaa !9
  br label %868

868:                                              ; preds = %1076, %863
  %869 = load i64, ptr %18, align 8, !tbaa !9
  %870 = load ptr, ptr %38, align 8, !tbaa !5
  %871 = load i64, ptr %15, align 8, !tbaa !9
  %872 = add nsw i64 %871, 1
  %873 = getelementptr inbounds i64, ptr %870, i64 %872
  %874 = load i64, ptr %873, align 8, !tbaa !9
  %875 = icmp slt i64 %869, %874
  br i1 %875, label %876, label %1079

876:                                              ; preds = %868
  %877 = load ptr, ptr %39, align 8, !tbaa !5
  %878 = load i64, ptr %18, align 8, !tbaa !9
  %879 = getelementptr inbounds i64, ptr %877, i64 %878
  %880 = load i64, ptr %879, align 8, !tbaa !9
  store i64 %880, ptr %16, align 8, !tbaa !9
  %881 = load ptr, ptr %41, align 8, !tbaa !5
  %882 = load i64, ptr %16, align 8, !tbaa !9
  %883 = getelementptr inbounds i64, ptr %881, i64 %882
  %884 = load i64, ptr %883, align 8, !tbaa !9
  store i64 %884, ptr %31, align 8, !tbaa !9
  %885 = load i64, ptr %31, align 8, !tbaa !9
  %886 = load i64, ptr %30, align 8, !tbaa !9
  %887 = icmp ne i64 %885, %886
  br i1 %887, label %888, label %1075

888:                                              ; preds = %876
  %889 = load i64, ptr %31, align 8, !tbaa !9
  %890 = load i64, ptr %32, align 8, !tbaa !9
  %891 = icmp ne i64 %889, %890
  br i1 %891, label %892, label %1075

892:                                              ; preds = %888
  %893 = load ptr, ptr %40, align 8, !tbaa !5
  %894 = load i64, ptr %18, align 8, !tbaa !9
  %895 = getelementptr inbounds i64, ptr %893, i64 %894
  %896 = load i64, ptr %895, align 8, !tbaa !9
  %897 = load ptr, ptr %52, align 8, !tbaa !5
  %898 = load i64, ptr %31, align 8, !tbaa !9
  %899 = load i64, ptr %10, align 8, !tbaa !9
  %900 = mul nsw i64 %898, %899
  %901 = load i64, ptr %30, align 8, !tbaa !9
  %902 = add nsw i64 %900, %901
  %903 = getelementptr inbounds i64, ptr %897, i64 %902
  %904 = load i64, ptr %903, align 8, !tbaa !9
  %905 = sub nsw i64 %904, %896
  store i64 %905, ptr %903, align 8, !tbaa !9
  %906 = load ptr, ptr %40, align 8, !tbaa !5
  %907 = load i64, ptr %18, align 8, !tbaa !9
  %908 = getelementptr inbounds i64, ptr %906, i64 %907
  %909 = load i64, ptr %908, align 8, !tbaa !9
  %910 = load ptr, ptr %52, align 8, !tbaa !5
  %911 = load i64, ptr %30, align 8, !tbaa !9
  %912 = load i64, ptr %10, align 8, !tbaa !9
  %913 = mul nsw i64 %911, %912
  %914 = load i64, ptr %31, align 8, !tbaa !9
  %915 = add nsw i64 %913, %914
  %916 = getelementptr inbounds i64, ptr %910, i64 %915
  %917 = load i64, ptr %916, align 8, !tbaa !9
  %918 = sub nsw i64 %917, %909
  store i64 %918, ptr %916, align 8, !tbaa !9
  %919 = load ptr, ptr %52, align 8, !tbaa !5
  %920 = load i64, ptr %31, align 8, !tbaa !9
  %921 = load i64, ptr %10, align 8, !tbaa !9
  %922 = mul nsw i64 %920, %921
  %923 = load i64, ptr %30, align 8, !tbaa !9
  %924 = add nsw i64 %922, %923
  %925 = getelementptr inbounds i64, ptr %919, i64 %924
  %926 = load i64, ptr %925, align 8, !tbaa !9
  %927 = icmp eq i64 %926, 0
  br i1 %927, label %928, label %949

928:                                              ; preds = %892
  %929 = load ptr, ptr %54, align 8, !tbaa !5
  %930 = load i64, ptr %31, align 8, !tbaa !9
  %931 = getelementptr inbounds i64, ptr %929, i64 %930
  %932 = load i64, ptr %931, align 8, !tbaa !9
  %933 = add nsw i64 %932, -1
  store i64 %933, ptr %931, align 8, !tbaa !9
  %934 = load ptr, ptr %54, align 8, !tbaa !5
  %935 = load i64, ptr %31, align 8, !tbaa !9
  %936 = getelementptr inbounds i64, ptr %934, i64 %935
  %937 = load i64, ptr %936, align 8, !tbaa !9
  %938 = add nsw i64 %937, 1
  %939 = load i64, ptr %37, align 8, !tbaa !9
  %940 = icmp eq i64 %938, %939
  br i1 %940, label %941, label %948

941:                                              ; preds = %928
  %942 = load ptr, ptr %54, align 8, !tbaa !5
  %943 = load i64, ptr %10, align 8, !tbaa !9
  %944 = load ptr, ptr %54, align 8, !tbaa !5
  %945 = call i64 @libmetis__idxargmax(i64 noundef %943, ptr noundef %944)
  %946 = getelementptr inbounds i64, ptr %942, i64 %945
  %947 = load i64, ptr %946, align 8, !tbaa !9
  store i64 %947, ptr %37, align 8, !tbaa !9
  br label %948

948:                                              ; preds = %941, %928
  br label %949

949:                                              ; preds = %948, %892
  %950 = load ptr, ptr %52, align 8, !tbaa !5
  %951 = load i64, ptr %30, align 8, !tbaa !9
  %952 = load i64, ptr %10, align 8, !tbaa !9
  %953 = mul nsw i64 %951, %952
  %954 = load i64, ptr %31, align 8, !tbaa !9
  %955 = add nsw i64 %953, %954
  %956 = getelementptr inbounds i64, ptr %950, i64 %955
  %957 = load i64, ptr %956, align 8, !tbaa !9
  %958 = icmp eq i64 %957, 0
  br i1 %958, label %959, label %980

959:                                              ; preds = %949
  %960 = load ptr, ptr %54, align 8, !tbaa !5
  %961 = load i64, ptr %30, align 8, !tbaa !9
  %962 = getelementptr inbounds i64, ptr %960, i64 %961
  %963 = load i64, ptr %962, align 8, !tbaa !9
  %964 = add nsw i64 %963, -1
  store i64 %964, ptr %962, align 8, !tbaa !9
  %965 = load ptr, ptr %54, align 8, !tbaa !5
  %966 = load i64, ptr %30, align 8, !tbaa !9
  %967 = getelementptr inbounds i64, ptr %965, i64 %966
  %968 = load i64, ptr %967, align 8, !tbaa !9
  %969 = add nsw i64 %968, 1
  %970 = load i64, ptr %37, align 8, !tbaa !9
  %971 = icmp eq i64 %969, %970
  br i1 %971, label %972, label %979

972:                                              ; preds = %959
  %973 = load ptr, ptr %54, align 8, !tbaa !5
  %974 = load i64, ptr %10, align 8, !tbaa !9
  %975 = load ptr, ptr %54, align 8, !tbaa !5
  %976 = call i64 @libmetis__idxargmax(i64 noundef %974, ptr noundef %975)
  %977 = getelementptr inbounds i64, ptr %973, i64 %976
  %978 = load i64, ptr %977, align 8, !tbaa !9
  store i64 %978, ptr %37, align 8, !tbaa !9
  br label %979

979:                                              ; preds = %972, %959
  br label %980

980:                                              ; preds = %979, %949
  %981 = load ptr, ptr %52, align 8, !tbaa !5
  %982 = load i64, ptr %31, align 8, !tbaa !9
  %983 = load i64, ptr %10, align 8, !tbaa !9
  %984 = mul nsw i64 %982, %983
  %985 = load i64, ptr %32, align 8, !tbaa !9
  %986 = add nsw i64 %984, %985
  %987 = getelementptr inbounds i64, ptr %981, i64 %986
  %988 = load i64, ptr %987, align 8, !tbaa !9
  %989 = icmp eq i64 %988, 0
  br i1 %989, label %990, label %1014

990:                                              ; preds = %980
  %991 = load ptr, ptr %54, align 8, !tbaa !5
  %992 = load i64, ptr %31, align 8, !tbaa !9
  %993 = getelementptr inbounds i64, ptr %991, i64 %992
  %994 = load i64, ptr %993, align 8, !tbaa !9
  %995 = add nsw i64 %994, 1
  store i64 %995, ptr %993, align 8, !tbaa !9
  %996 = load ptr, ptr %54, align 8, !tbaa !5
  %997 = load i64, ptr %31, align 8, !tbaa !9
  %998 = getelementptr inbounds i64, ptr %996, i64 %997
  %999 = load i64, ptr %998, align 8, !tbaa !9
  %1000 = load i64, ptr %37, align 8, !tbaa !9
  %1001 = icmp sgt i64 %999, %1000
  br i1 %1001, label %1002, label %1013

1002:                                             ; preds = %990
  %1003 = load ptr, ptr %54, align 8, !tbaa !5
  %1004 = load i64, ptr %31, align 8, !tbaa !9
  %1005 = getelementptr inbounds i64, ptr %1003, i64 %1004
  %1006 = load i64, ptr %1005, align 8, !tbaa !9
  %1007 = load i64, ptr %37, align 8, !tbaa !9
  %1008 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6, i64 noundef %1006, i64 noundef %1007)
  %1009 = load ptr, ptr %54, align 8, !tbaa !5
  %1010 = load i64, ptr %31, align 8, !tbaa !9
  %1011 = getelementptr inbounds i64, ptr %1009, i64 %1010
  %1012 = load i64, ptr %1011, align 8, !tbaa !9
  store i64 %1012, ptr %37, align 8, !tbaa !9
  br label %1013

1013:                                             ; preds = %1002, %990
  br label %1014

1014:                                             ; preds = %1013, %980
  %1015 = load ptr, ptr %52, align 8, !tbaa !5
  %1016 = load i64, ptr %32, align 8, !tbaa !9
  %1017 = load i64, ptr %10, align 8, !tbaa !9
  %1018 = mul nsw i64 %1016, %1017
  %1019 = load i64, ptr %31, align 8, !tbaa !9
  %1020 = add nsw i64 %1018, %1019
  %1021 = getelementptr inbounds i64, ptr %1015, i64 %1020
  %1022 = load i64, ptr %1021, align 8, !tbaa !9
  %1023 = icmp eq i64 %1022, 0
  br i1 %1023, label %1024, label %1048

1024:                                             ; preds = %1014
  %1025 = load ptr, ptr %54, align 8, !tbaa !5
  %1026 = load i64, ptr %32, align 8, !tbaa !9
  %1027 = getelementptr inbounds i64, ptr %1025, i64 %1026
  %1028 = load i64, ptr %1027, align 8, !tbaa !9
  %1029 = add nsw i64 %1028, 1
  store i64 %1029, ptr %1027, align 8, !tbaa !9
  %1030 = load ptr, ptr %54, align 8, !tbaa !5
  %1031 = load i64, ptr %32, align 8, !tbaa !9
  %1032 = getelementptr inbounds i64, ptr %1030, i64 %1031
  %1033 = load i64, ptr %1032, align 8, !tbaa !9
  %1034 = load i64, ptr %37, align 8, !tbaa !9
  %1035 = icmp sgt i64 %1033, %1034
  br i1 %1035, label %1036, label %1047

1036:                                             ; preds = %1024
  %1037 = load ptr, ptr %54, align 8, !tbaa !5
  %1038 = load i64, ptr %32, align 8, !tbaa !9
  %1039 = getelementptr inbounds i64, ptr %1037, i64 %1038
  %1040 = load i64, ptr %1039, align 8, !tbaa !9
  %1041 = load i64, ptr %37, align 8, !tbaa !9
  %1042 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6, i64 noundef %1040, i64 noundef %1041)
  %1043 = load ptr, ptr %54, align 8, !tbaa !5
  %1044 = load i64, ptr %32, align 8, !tbaa !9
  %1045 = getelementptr inbounds i64, ptr %1043, i64 %1044
  %1046 = load i64, ptr %1045, align 8, !tbaa !9
  store i64 %1046, ptr %37, align 8, !tbaa !9
  br label %1047

1047:                                             ; preds = %1036, %1024
  br label %1048

1048:                                             ; preds = %1047, %1014
  %1049 = load ptr, ptr %40, align 8, !tbaa !5
  %1050 = load i64, ptr %18, align 8, !tbaa !9
  %1051 = getelementptr inbounds i64, ptr %1049, i64 %1050
  %1052 = load i64, ptr %1051, align 8, !tbaa !9
  %1053 = load ptr, ptr %52, align 8, !tbaa !5
  %1054 = load i64, ptr %31, align 8, !tbaa !9
  %1055 = load i64, ptr %10, align 8, !tbaa !9
  %1056 = mul nsw i64 %1054, %1055
  %1057 = load i64, ptr %32, align 8, !tbaa !9
  %1058 = add nsw i64 %1056, %1057
  %1059 = getelementptr inbounds i64, ptr %1053, i64 %1058
  %1060 = load i64, ptr %1059, align 8, !tbaa !9
  %1061 = add nsw i64 %1060, %1052
  store i64 %1061, ptr %1059, align 8, !tbaa !9
  %1062 = load ptr, ptr %40, align 8, !tbaa !5
  %1063 = load i64, ptr %18, align 8, !tbaa !9
  %1064 = getelementptr inbounds i64, ptr %1062, i64 %1063
  %1065 = load i64, ptr %1064, align 8, !tbaa !9
  %1066 = load ptr, ptr %52, align 8, !tbaa !5
  %1067 = load i64, ptr %32, align 8, !tbaa !9
  %1068 = load i64, ptr %10, align 8, !tbaa !9
  %1069 = mul nsw i64 %1067, %1068
  %1070 = load i64, ptr %31, align 8, !tbaa !9
  %1071 = add nsw i64 %1069, %1070
  %1072 = getelementptr inbounds i64, ptr %1066, i64 %1071
  %1073 = load i64, ptr %1072, align 8, !tbaa !9
  %1074 = add nsw i64 %1073, %1065
  store i64 %1074, ptr %1072, align 8, !tbaa !9
  br label %1075

1075:                                             ; preds = %1048, %888, %876
  br label %1076

1076:                                             ; preds = %1075
  %1077 = load i64, ptr %18, align 8, !tbaa !9
  %1078 = add nsw i64 %1077, 1
  store i64 %1078, ptr %18, align 8, !tbaa !9
  br label %868, !llvm.loop !51

1079:                                             ; preds = %868
  %1080 = load ptr, ptr %8, align 8, !tbaa !5
  %1081 = load ptr, ptr %9, align 8, !tbaa !5
  %1082 = load i64, ptr %15, align 8, !tbaa !9
  %1083 = load i64, ptr %30, align 8, !tbaa !9
  %1084 = load i64, ptr %32, align 8, !tbaa !9
  %1085 = load ptr, ptr %50, align 8, !tbaa !5
  %1086 = load ptr, ptr %51, align 8, !tbaa !5
  %1087 = load ptr, ptr %49, align 8, !tbaa !5
  call void @libmetis__KWayVolUpdate(ptr noundef %1080, ptr noundef %1081, i64 noundef %1082, i64 noundef %1083, i64 noundef %1084, ptr noundef %1085, ptr noundef %1086, ptr noundef %1087)
  %1088 = load i64, ptr %26, align 8, !tbaa !9
  %1089 = add nsw i64 %1088, 1
  store i64 %1089, ptr %26, align 8, !tbaa !9
  br label %1090

1090:                                             ; preds = %1079, %252
  br label %1091

1091:                                             ; preds = %1090, %672, %457, %293, %251
  %1092 = load i64, ptr %17, align 8, !tbaa !9
  %1093 = add nsw i64 %1092, 1
  store i64 %1093, ptr %17, align 8, !tbaa !9
  br label %235, !llvm.loop !52

1094:                                             ; preds = %235
  %1095 = load ptr, ptr %8, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.controldef, ptr %1095, i32 0, i32 1
  %1097 = load i64, ptr %1096, align 8, !tbaa !29
  %1098 = and i64 %1097, 8
  %1099 = icmp ne i64 %1098, 0
  br i1 %1099, label %1100, label %1138

1100:                                             ; preds = %1094
  %1101 = load ptr, ptr %42, align 8, !tbaa !5
  %1102 = load i64, ptr %10, align 8, !tbaa !9
  %1103 = load ptr, ptr %42, align 8, !tbaa !5
  %1104 = call i64 @libmetis__idxargmin(i64 noundef %1102, ptr noundef %1103)
  %1105 = getelementptr inbounds i64, ptr %1101, i64 %1104
  %1106 = load i64, ptr %1105, align 8, !tbaa !9
  %1107 = load ptr, ptr %42, align 8, !tbaa !5
  %1108 = load i64, ptr %10, align 8, !tbaa !9
  %1109 = load ptr, ptr %42, align 8, !tbaa !5
  %1110 = call i64 @libmetis__idxargmax(i64 noundef %1108, ptr noundef %1109)
  %1111 = getelementptr inbounds i64, ptr %1107, i64 %1110
  %1112 = load i64, ptr %1111, align 8, !tbaa !9
  %1113 = load i64, ptr %10, align 8, !tbaa !9
  %1114 = sitofp i64 %1113 to double
  %1115 = fmul double 1.000000e+00, %1114
  %1116 = load ptr, ptr %42, align 8, !tbaa !5
  %1117 = load i64, ptr %10, align 8, !tbaa !9
  %1118 = load ptr, ptr %42, align 8, !tbaa !5
  %1119 = call i64 @libmetis__idxargmax(i64 noundef %1117, ptr noundef %1118)
  %1120 = getelementptr inbounds i64, ptr %1116, i64 %1119
  %1121 = load i64, ptr %1120, align 8, !tbaa !9
  %1122 = sitofp i64 %1121 to double
  %1123 = fmul double %1115, %1122
  %1124 = load i64, ptr %27, align 8, !tbaa !9
  %1125 = sitofp i64 %1124 to double
  %1126 = fdiv double %1123, %1125
  %1127 = load ptr, ptr %9, align 8, !tbaa !5
  %1128 = getelementptr inbounds %struct.graphdef, ptr %1127, i32 0, i32 20
  %1129 = load i64, ptr %1128, align 8, !tbaa !30
  %1130 = load i64, ptr %26, align 8, !tbaa !9
  %1131 = load ptr, ptr %9, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.graphdef, ptr %1131, i32 0, i32 16
  %1133 = load i64, ptr %1132, align 8, !tbaa !31
  %1134 = load ptr, ptr %9, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.graphdef, ptr %1134, i32 0, i32 17
  %1136 = load i64, ptr %1135, align 8, !tbaa !32
  %1137 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %1106, i64 noundef %1112, double noundef %1126, i64 noundef %1129, i64 noundef %1130, i64 noundef %1133, i64 noundef %1136)
  br label %1138

1138:                                             ; preds = %1100, %1094
  %1139 = load ptr, ptr %9, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.graphdef, ptr %1139, i32 0, i32 17
  %1141 = load i64, ptr %1140, align 8, !tbaa !32
  %1142 = load i64, ptr %34, align 8, !tbaa !9
  %1143 = icmp eq i64 %1141, %1142
  br i1 %1143, label %1144, label %1151

1144:                                             ; preds = %1138
  %1145 = load ptr, ptr %9, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.graphdef, ptr %1145, i32 0, i32 16
  %1147 = load i64, ptr %1146, align 8, !tbaa !31
  %1148 = load i64, ptr %33, align 8, !tbaa !9
  %1149 = icmp eq i64 %1147, %1148
  br i1 %1149, label %1150, label %1151

1150:                                             ; preds = %1144
  br label %1155

1151:                                             ; preds = %1144, %1138
  br label %1152

1152:                                             ; preds = %1151
  %1153 = load i64, ptr %24, align 8, !tbaa !9
  %1154 = add nsw i64 %1153, 1
  store i64 %1154, ptr %24, align 8, !tbaa !9
  br label %214, !llvm.loop !53

1155:                                             ; preds = %1150, %214
  call void (ptr, ...) @gk_free(ptr noundef %50, ptr noundef %49, ptr noundef %51, ptr noundef null)
  %1156 = load ptr, ptr %8, align 8, !tbaa !5
  %1157 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1156, i64 noundef %1157)
  %1158 = load ptr, ptr %8, align 8, !tbaa !5
  %1159 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1158, i64 noundef %1159)
  %1160 = load ptr, ptr %8, align 8, !tbaa !5
  %1161 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1160, i64 noundef %1161)
  %1162 = load ptr, ptr %8, align 8, !tbaa !5
  %1163 = load i64, ptr %10, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1162, i64 noundef %1163)
  %1164 = load ptr, ptr %8, align 8, !tbaa !5
  %1165 = load i64, ptr %25, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1164, i64 noundef %1165)
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  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: nounwind uwtable
declare dso_local void @libmetis__ComputeVolSubDomainGraph(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #2

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


; 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
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

; 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 #2

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

declare void @libmetis__idxwspacefree(ptr noundef, i64 noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Random_KWayVolRefineMConn(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 #2 {
  %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 16
  %13 = load ptr, ptr %12, align 8, !tbaa !12
  %14 = getelementptr inbounds i8, ptr %1, i64 40
  %15 = load ptr, ptr %14, align 8, !tbaa !13
  %16 = getelementptr inbounds i8, ptr %1, i64 48
  %17 = load ptr, ptr %16, align 8, !tbaa !14
  %18 = getelementptr inbounds i8, ptr %1, i64 160
  %19 = load ptr, ptr %18, align 8, !tbaa !15
  %20 = getelementptr inbounds i8, ptr %1, i64 128
  %21 = load ptr, ptr %20, align 8, !tbaa !16
  %22 = getelementptr inbounds i8, ptr %1, i64 136
  %23 = load ptr, ptr %22, align 8, !tbaa !17
  %24 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  %25 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  %26 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  %27 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %23, i64 noundef 1) #3
  %28 = tail call ptr @libmetis__idxmalloc(i64 noundef %11, ptr noundef nonnull @.str) #3
  store ptr %28, ptr %8, align 8, !tbaa !18
  %29 = tail call ptr @libmetis__idxsmalloc(i64 noundef %11, i64 noundef 0, ptr noundef nonnull @.str.1) #3
  store ptr %29, ptr %9, align 8, !tbaa !18
  %30 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef -1, ptr noundef nonnull @.str.2) #3
  store ptr %30, ptr %10, align 8, !tbaa !18
  %31 = getelementptr inbounds i8, ptr %0, i64 144
  %32 = load ptr, ptr %31, align 8, !tbaa !19
  %33 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #3
  tail call void @libmetis__ComputeVolSubDomainGraph(ptr noundef nonnull %1, i64 noundef %2, ptr noundef %32, ptr noundef %33)
  %34 = icmp sgt i64 %2, 0
  br i1 %34, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %7
  %35 = sitofp i64 %27 to float
  %36 = fpext float %4 to double
  %37 = fdiv double 1.000000e+00, %36
  br label %38

38:                                               ; preds = %.lr.ph, %38
  %.0479 = phi i64 [ 0, %.lr.ph ], [ %51, %38 ]
  %39 = getelementptr inbounds float, ptr %3, i64 %.0479
  %40 = load float, ptr %39, align 4, !tbaa !24
  %41 = fmul float %40, %35
  %42 = fptosi float %41 to i64
  %43 = getelementptr inbounds i64, ptr %26, i64 %.0479
  store i64 %42, ptr %43, align 8, !tbaa !25
  %44 = fmul float %41, %4
  %45 = fptosi float %44 to i64
  %46 = getelementptr inbounds i64, ptr %25, i64 %.0479
  store i64 %45, ptr %46, align 8, !tbaa !25
  %47 = fpext float %41 to double
  %48 = fmul double %37, %47
  %49 = fptosi double %48 to i64
  %50 = getelementptr inbounds i64, ptr %24, i64 %.0479
  store i64 %49, ptr %50, align 8, !tbaa !25
  %51 = add nuw nsw i64 %.0479, 1
  %exitcond.not = icmp eq i64 %51, %2
  br i1 %exitcond.not, label %._crit_edge, label %38, !llvm.loop !26

._crit_edge:                                      ; preds = %38, %7
  %52 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %11) #3
  %53 = getelementptr inbounds i8, ptr %0, i64 8
  %54 = load i64, ptr %53, align 8, !tbaa !28
  %55 = and i64 %54, 8
  %.not = icmp eq i64 %55, 0
  br i1 %.not, label %81, label %56

56:                                               ; preds = %._crit_edge
  %57 = tail call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %23) #3
  %58 = getelementptr inbounds i64, ptr %23, i64 %57
  %59 = load i64, ptr %58, align 8, !tbaa !25
  %60 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %23) #3
  %61 = getelementptr inbounds i64, ptr %23, i64 %60
  %62 = load i64, ptr %61, align 8, !tbaa !25
  %63 = load i64, ptr %24, align 8, !tbaa !25
  %64 = load i64, ptr %25, align 8, !tbaa !25
  %65 = sitofp i64 %2 to double
  %66 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %23) #3
  %67 = getelementptr inbounds i64, ptr %23, i64 %66
  %68 = load i64, ptr %67, align 8, !tbaa !25
  %69 = sitofp i64 %68 to double
  %70 = fmul double %65, %69
  %71 = sitofp i64 %27 to double
  %72 = fdiv double %70, %71
  %73 = load i64, ptr %1, align 8, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %1, i64 144
  %75 = load i64, ptr %74, align 8, !tbaa !29
  %76 = getelementptr inbounds i8, ptr %1, i64 112
  %77 = load i64, ptr %76, align 8, !tbaa !30
  %78 = getelementptr inbounds i8, ptr %1, i64 120
  %79 = load i64, ptr %78, align 8, !tbaa !31
  %80 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %59, i64 noundef %62, i64 noundef %63, i64 noundef %64, double noundef %72, i64 noundef %73, i64 noundef %75, i64 noundef %77, i64 noundef %79) #3
  br label %81

81:                                               ; preds = %56, %._crit_edge
  %82 = icmp sgt i64 %5, 0
  br i1 %82, label %.lr.ph517, label %._crit_edge518

.lr.ph517:                                        ; preds = %81
  %83 = getelementptr inbounds i8, ptr %1, i64 112
  %84 = getelementptr inbounds i8, ptr %1, i64 120
  %85 = getelementptr inbounds i8, ptr %1, i64 144
  %86 = getelementptr inbounds i8, ptr %1, i64 192
  %87 = getelementptr inbounds i8, ptr %1, i64 24
  %88 = getelementptr inbounds i8, ptr %1, i64 32
  %89 = sitofp i64 %2 to double
  %90 = sitofp i64 %27 to double
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph517
  %.0428515 = phi i64 [ 0, %.lr.ph517 ], [ %.0428515.be, %.backedge.backedge ]
  %91 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %33) #3
  %92 = getelementptr inbounds i64, ptr %33, i64 %91
  %93 = load i64, ptr %92, align 8, !tbaa !25
  %94 = load i64, ptr %83, align 8, !tbaa !30
  %95 = load i64, ptr %84, align 8, !tbaa !31
  %96 = load i64, ptr %85, align 8, !tbaa !29
  tail call void @libmetis__RandomPermute(i64 noundef %96, ptr noundef %52, i64 noundef 1) #3
  %97 = load i64, ptr %85, align 8, !tbaa !29
  %98 = icmp sgt i64 %97, 0
  br i1 %98, label %.lr.ph512, label %._crit_edge513

.lr.ph512:                                        ; preds = %.backedge, %._crit_edge489.thread
  %99 = phi i64 [ %434, %._crit_edge489.thread ], [ %97, %.backedge ]
  %.0422510 = phi i64 [ %433, %._crit_edge489.thread ], [ 0, %.backedge ]
  %.0429509 = phi i64 [ %.1430, %._crit_edge489.thread ], [ 0, %.backedge ]
  %.0434508 = phi i64 [ %.9, %._crit_edge489.thread ], [ %93, %.backedge ]
  %100 = getelementptr inbounds i64, ptr %52, i64 %.0422510
  %101 = load i64, ptr %100, align 8, !tbaa !25
  %.not454 = icmp slt i64 %101, %99
  br i1 %.not454, label %102, label %._crit_edge489.thread

102:                                              ; preds = %.lr.ph512
  %103 = getelementptr inbounds i64, ptr %19, i64 %101
  %104 = load i64, ptr %103, align 8, !tbaa !25
  %105 = load ptr, ptr %86, align 8, !tbaa !32
  %106 = getelementptr inbounds %struct.vrinfodef, ptr %105, i64 %104
  %107 = getelementptr inbounds i8, ptr %106, i64 24
  %108 = load i64, ptr %107, align 8, !tbaa !33
  %109 = icmp sgt i64 %108, -1
  br i1 %109, label %110, label %._crit_edge489.thread

110:                                              ; preds = %102
  %111 = getelementptr inbounds i64, ptr %21, i64 %104
  %112 = load i64, ptr %111, align 8, !tbaa !25
  %113 = load ptr, ptr %87, align 8, !tbaa !35
  %114 = getelementptr inbounds i64, ptr %113, i64 %104
  %115 = load i64, ptr %114, align 8, !tbaa !25
  %116 = load i64, ptr %106, align 8, !tbaa !36
  %117 = icmp sgt i64 %116, 0
  br i1 %117, label %118, label %125

118:                                              ; preds = %110
  %119 = getelementptr inbounds i64, ptr %23, i64 %112
  %120 = load i64, ptr %119, align 8, !tbaa !25
  %121 = sub nsw i64 %120, %115
  %122 = getelementptr inbounds i64, ptr %24, i64 %112
  %123 = load i64, ptr %122, align 8, !tbaa !25
  %124 = icmp slt i64 %121, %123
  br i1 %124, label %._crit_edge489.thread, label %.thread

125:                                              ; preds = %110
  %126 = icmp eq i64 %116, 0
  br i1 %126, label %127, label %.thread

127:                                              ; preds = %125
  %128 = getelementptr inbounds i8, ptr %106, i64 8
  %129 = load i64, ptr %128, align 8, !tbaa !37
  %130 = icmp sgt i64 %129, 0
  br i1 %130, label %131, label %.thread

131:                                              ; preds = %127
  %132 = load ptr, ptr %88, align 8, !tbaa !38
  %133 = getelementptr inbounds i64, ptr %132, i64 %104
  %134 = load i64, ptr %133, align 8, !tbaa !25
  br label %.thread

.thread:                                          ; preds = %118, %125, %127, %131
  %135 = phi i64 [ %134, %131 ], [ 0, %127 ], [ 0, %125 ], [ 0, %118 ]
  %136 = getelementptr inbounds i8, ptr %106, i64 40
  %137 = load ptr, ptr %136, align 8, !tbaa !39
  %138 = getelementptr inbounds i8, ptr %106, i64 32
  %139 = load i64, ptr %138, align 8, !tbaa !40
  %140 = icmp sgt i64 %139, 0
  br i1 %140, label %.lr.ph486, label %._crit_edge489

.preheader477:                                    ; preds = %167
  %invariant.op = xor i64 %135, -1
  br i1 %140, label %.lr.ph488, label %._crit_edge489

.lr.ph486:                                        ; preds = %.thread, %167
  %.0423484 = phi i64 [ %168, %167 ], [ 0, %.thread ]
  %141 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.0423484
  %142 = load i64, ptr %141, align 8, !tbaa !41
  %143 = getelementptr inbounds i64, ptr %30, i64 %142
  store i64 1, ptr %143, align 8, !tbaa !25
  %144 = mul nsw i64 %142, %2
  %145 = getelementptr inbounds i64, ptr %32, i64 %144
  br label %146

146:                                              ; preds = %.lr.ph486, %160
  %.0424481 = phi i64 [ 0, %.lr.ph486 ], [ %161, %160 ]
  %.0431480 = phi i64 [ 0, %.lr.ph486 ], [ %.1432, %160 ]
  %147 = icmp eq i64 %.0424481, %.0423484
  br i1 %147, label %160, label %148

148:                                              ; preds = %146
  %149 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.0424481
  %150 = load i64, ptr %149, align 8, !tbaa !41
  %151 = getelementptr inbounds i64, ptr %145, i64 %150
  %152 = load i64, ptr %151, align 8, !tbaa !25
  %153 = icmp eq i64 %152, 0
  br i1 %153, label %154, label %160

154:                                              ; preds = %148
  %155 = getelementptr inbounds i64, ptr %33, i64 %150
  %156 = load i64, ptr %155, align 8, !tbaa !25
  %.not464 = icmp slt i64 %156, %.0434508
  br i1 %.not464, label %158, label %157

157:                                              ; preds = %154
  store i64 0, ptr %143, align 8, !tbaa !25
  br label %.loopexit

158:                                              ; preds = %154
  %159 = add nsw i64 %.0431480, 1
  br label %160

160:                                              ; preds = %148, %158, %146
  %.1432 = phi i64 [ %.0431480, %146 ], [ %159, %158 ], [ %.0431480, %148 ]
  %161 = add nuw nsw i64 %.0424481, 1
  %exitcond522.not = icmp eq i64 %161, %139
  br i1 %exitcond522.not, label %.loopexit, label %146, !llvm.loop !43

.loopexit:                                        ; preds = %160, %157
  %.2433 = phi i64 [ %.0434508, %157 ], [ %.1432, %160 ]
  %162 = getelementptr inbounds i64, ptr %33, i64 %142
  %163 = load i64, ptr %162, align 8, !tbaa !25
  %164 = add nsw i64 %163, %.2433
  %.not470 = icmp sgt i64 %164, %.0434508
  %.not471 = icmp eq i64 %.2433, 0
  %165 = or i1 %.not471, %.not470
  br i1 %165, label %166, label %167

166:                                              ; preds = %.loopexit
  %spec.select = select i1 %.not471, i64 2, i64 0
  store i64 %spec.select, ptr %143, align 8, !tbaa !25
  br label %167

167:                                              ; preds = %.loopexit, %166
  %168 = add nuw nsw i64 %.0423484, 1
  %exitcond523.not = icmp eq i64 %168, %139
  br i1 %exitcond523.not, label %.preheader477, label %.lr.ph486, !llvm.loop !44

.lr.ph488:                                        ; preds = %.preheader477, %184
  %.1425487 = phi i64 [ %185, %184 ], [ 0, %.preheader477 ]
  %169 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.1425487
  %170 = load i64, ptr %169, align 8, !tbaa !41
  %171 = getelementptr inbounds i64, ptr %30, i64 %170
  %172 = load i64, ptr %171, align 8, !tbaa !25
  %.not455 = icmp eq i64 %172, 0
  br i1 %.not455, label %184, label %173

173:                                              ; preds = %.lr.ph488
  %174 = getelementptr inbounds i64, ptr %23, i64 %170
  %175 = load i64, ptr %174, align 8, !tbaa !25
  %176 = add nsw i64 %175, %115
  %177 = getelementptr inbounds i64, ptr %25, i64 %170
  %178 = load i64, ptr %177, align 8, !tbaa !25
  %179 = getelementptr inbounds i8, ptr %169, i64 24
  %180 = load i64, ptr %179, align 8, !tbaa !45
  %181 = mul nsw i64 %180, %6
  %182 = add nsw i64 %181, %178
  %.not456 = icmp sle i64 %176, %182
  %183 = icmp sgt i64 %180, %invariant.op
  %or.cond = select i1 %.not456, i1 %183, i1 false
  br i1 %or.cond, label %._crit_edge489, label %184

184:                                              ; preds = %173, %.lr.ph488
  %185 = add nuw nsw i64 %.1425487, 1
  %exitcond524.not = icmp eq i64 %185, %139
  br i1 %exitcond524.not, label %._crit_edge489.thread, label %.lr.ph488, !llvm.loop !46

._crit_edge489:                                   ; preds = %173, %.thread, %.preheader477
  %.1425.lcssa = phi i64 [ 0, %.preheader477 ], [ 0, %.thread ], [ %.1425487, %173 ]
  %186 = icmp eq i64 %.1425.lcssa, %139
  br i1 %186, label %._crit_edge489.thread, label %.preheader

.preheader:                                       ; preds = %._crit_edge489
  %.1493 = add nuw nsw i64 %.1425.lcssa, 1
  %187 = icmp slt i64 %.1493, %139
  br i1 %187, label %.lr.ph496, label %._crit_edge497

.lr.ph496:                                        ; preds = %.preheader, %228
  %.1495 = phi i64 [ %.1, %228 ], [ %.1493, %.preheader ]
  %.2426494 = phi i64 [ %.3427, %228 ], [ %.1425.lcssa, %.preheader ]
  %188 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.1495
  %189 = load i64, ptr %188, align 8, !tbaa !41
  %190 = getelementptr inbounds i64, ptr %30, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !25
  %.not463 = icmp eq i64 %191, 0
  br i1 %.not463, label %228, label %192

192:                                              ; preds = %.lr.ph496
  %193 = getelementptr inbounds i64, ptr %23, i64 %189
  %194 = load i64, ptr %193, align 8, !tbaa !25
  %195 = add nsw i64 %194, %115
  %196 = getelementptr inbounds i64, ptr %25, i64 %189
  %197 = load i64, ptr %196, align 8, !tbaa !25
  %198 = icmp sgt i64 %195, %197
  br i1 %198, label %228, label %199

199:                                              ; preds = %192
  %200 = getelementptr inbounds i8, ptr %188, i64 24
  %201 = load i64, ptr %200, align 8, !tbaa !45
  %202 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.2426494
  %203 = getelementptr inbounds i8, ptr %202, i64 24
  %204 = load i64, ptr %203, align 8, !tbaa !45
  %205 = icmp sgt i64 %201, %204
  br i1 %205, label %227, label %206

206:                                              ; preds = %199
  %207 = icmp eq i64 %201, %204
  br i1 %207, label %208, label %228

208:                                              ; preds = %206
  %209 = getelementptr inbounds i8, ptr %188, i64 8
  %210 = load i64, ptr %209, align 8, !tbaa !47
  %211 = getelementptr inbounds i8, ptr %202, i64 8
  %212 = load i64, ptr %211, align 8, !tbaa !47
  %213 = icmp sgt i64 %210, %212
  br i1 %213, label %227, label %214

214:                                              ; preds = %208
  %215 = icmp eq i64 %210, %212
  br i1 %215, label %216, label %228

216:                                              ; preds = %214
  %217 = load i64, ptr %202, align 8, !tbaa !41
  %218 = getelementptr inbounds i64, ptr %26, i64 %217
  %219 = load i64, ptr %218, align 8, !tbaa !25
  %220 = mul nsw i64 %219, %194
  %221 = getelementptr inbounds i64, ptr %26, i64 %189
  %222 = load i64, ptr %221, align 8, !tbaa !25
  %223 = getelementptr inbounds i64, ptr %23, i64 %217
  %224 = load i64, ptr %223, align 8, !tbaa !25
  %225 = mul nsw i64 %224, %222
  %226 = icmp slt i64 %220, %225
  br i1 %226, label %227, label %228

227:                                              ; preds = %216, %208, %199
  br label %228

228:                                              ; preds = %206, %214, %216, %227, %.lr.ph496, %192
  %.3427 = phi i64 [ %.2426494, %192 ], [ %.1495, %227 ], [ %.2426494, %216 ], [ %.2426494, %214 ], [ %.2426494, %.lr.ph496 ], [ %.2426494, %206 ]
  %.1 = add nuw nsw i64 %.1495, 1
  %exitcond525.not = icmp eq i64 %.1, %139
  br i1 %exitcond525.not, label %._crit_edge497, label %.lr.ph496, !llvm.loop !48

._crit_edge497:                                   ; preds = %228, %.preheader
  %.2426.lcssa = phi i64 [ %.1425.lcssa, %.preheader ], [ %.3427, %228 ]
  %229 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.2426.lcssa
  %230 = load i64, ptr %229, align 8, !tbaa !41
  %231 = getelementptr inbounds i8, ptr %229, i64 24
  %232 = load i64, ptr %231, align 8, !tbaa !45
  %233 = add nsw i64 %232, %135
  %234 = icmp sgt i64 %233, 0
  br i1 %234, label %.critedge, label %235

235:                                              ; preds = %._crit_edge497
  %236 = getelementptr inbounds i8, ptr %229, i64 8
  %237 = load i64, ptr %236, align 8, !tbaa !47
  %238 = load i64, ptr %106, align 8, !tbaa !36
  %239 = icmp sgt i64 %237, %238
  br i1 %239, label %.critedge, label %240

240:                                              ; preds = %235
  %241 = icmp eq i64 %237, %238
  br i1 %241, label %242, label %._crit_edge489.thread

242:                                              ; preds = %240
  %243 = and i64 %.0422510, 5
  %244 = icmp eq i64 %243, 0
  br i1 %244, label %.critedge, label %245

245:                                              ; preds = %242
  %246 = getelementptr inbounds i64, ptr %30, i64 %230
  %247 = load i64, ptr %246, align 8, !tbaa !25
  %248 = icmp eq i64 %247, 2
  br i1 %248, label %.critedge, label %249

249:                                              ; preds = %245
  %250 = getelementptr inbounds i64, ptr %23, i64 %112
  %251 = load i64, ptr %250, align 8, !tbaa !25
  %252 = getelementptr inbounds i64, ptr %25, i64 %112
  %253 = load i64, ptr %252, align 8, !tbaa !25
  %.not457 = icmp slt i64 %251, %253
  br i1 %.not457, label %254, label %.critedge

254:                                              ; preds = %249
  %255 = getelementptr inbounds i64, ptr %26, i64 %112
  %256 = load i64, ptr %255, align 8, !tbaa !25
  %257 = getelementptr inbounds i64, ptr %23, i64 %230
  %258 = load i64, ptr %257, align 8, !tbaa !25
  %259 = add nsw i64 %258, %115
  %260 = mul nsw i64 %259, %256
  %261 = getelementptr inbounds i64, ptr %26, i64 %230
  %262 = load i64, ptr %261, align 8, !tbaa !25
  %263 = mul nsw i64 %262, %251
  %264 = icmp slt i64 %260, %263
  br i1 %264, label %.critedge, label %._crit_edge489.thread

.critedge:                                        ; preds = %242, %245, %249, %254, %._crit_edge497, %235
  br i1 %140, label %.lr.ph500.preheader, label %._crit_edge501

.lr.ph500.preheader:                              ; preds = %.critedge
  %xtraiter = and i64 %139, 3
  %265 = icmp ult i64 %139, 4
  br i1 %265, label %._crit_edge501.loopexit.unr-lcssa, label %.lr.ph500.preheader.new

.lr.ph500.preheader.new:                          ; preds = %.lr.ph500.preheader
  %unroll_iter = and i64 %139, 9223372036854775804
  br label %.lr.ph500

.lr.ph500:                                        ; preds = %.lr.ph500, %.lr.ph500.preheader.new
  %.3499 = phi i64 [ 0, %.lr.ph500.preheader.new ], [ %281, %.lr.ph500 ]
  %niter = phi i64 [ 0, %.lr.ph500.preheader.new ], [ %niter.next.3, %.lr.ph500 ]
  %266 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.3499
  %267 = load i64, ptr %266, align 8, !tbaa !41
  %268 = getelementptr inbounds i64, ptr %30, i64 %267
  store i64 -1, ptr %268, align 8, !tbaa !25
  %269 = or disjoint i64 %.3499, 1
  %270 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %269
  %271 = load i64, ptr %270, align 8, !tbaa !41
  %272 = getelementptr inbounds i64, ptr %30, i64 %271
  store i64 -1, ptr %272, align 8, !tbaa !25
  %273 = or disjoint i64 %.3499, 2
  %274 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %273
  %275 = load i64, ptr %274, align 8, !tbaa !41
  %276 = getelementptr inbounds i64, ptr %30, i64 %275
  store i64 -1, ptr %276, align 8, !tbaa !25
  %277 = or disjoint i64 %.3499, 3
  %278 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %277
  %279 = load i64, ptr %278, align 8, !tbaa !41
  %280 = getelementptr inbounds i64, ptr %30, i64 %279
  store i64 -1, ptr %280, align 8, !tbaa !25
  %281 = add nuw nsw i64 %.3499, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge501.loopexit.unr-lcssa, label %.lr.ph500, !llvm.loop !49

._crit_edge501.loopexit.unr-lcssa:                ; preds = %.lr.ph500, %.lr.ph500.preheader
  %.3499.unr = phi i64 [ 0, %.lr.ph500.preheader ], [ %281, %.lr.ph500 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge501, label %.lr.ph500.epil

.lr.ph500.epil:                                   ; preds = %._crit_edge501.loopexit.unr-lcssa, %.lr.ph500.epil
  %.3499.epil = phi i64 [ %285, %.lr.ph500.epil ], [ %.3499.unr, %._crit_edge501.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph500.epil ], [ 0, %._crit_edge501.loopexit.unr-lcssa ]
  %282 = getelementptr inbounds %struct.vedegreedef, ptr %137, i64 %.3499.epil
  %283 = load i64, ptr %282, align 8, !tbaa !41
  %284 = getelementptr inbounds i64, ptr %30, i64 %283
  store i64 -1, ptr %284, align 8, !tbaa !25
  %285 = add nuw nsw i64 %.3499.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge501, label %.lr.ph500.epil, !llvm.loop !50

._crit_edge501:                                   ; preds = %._crit_edge501.loopexit.unr-lcssa, %.lr.ph500.epil, %.critedge
  %286 = getelementptr inbounds i64, ptr %23, i64 %230
  %287 = load i64, ptr %286, align 8, !tbaa !25
  %288 = add nsw i64 %287, %115
  store i64 %288, ptr %286, align 8, !tbaa !25
  %289 = getelementptr inbounds i64, ptr %23, i64 %112
  %290 = load i64, ptr %289, align 8, !tbaa !25
  %291 = sub nsw i64 %290, %115
  store i64 %291, ptr %289, align 8, !tbaa !25
  %292 = getelementptr inbounds i8, ptr %229, i64 8
  %293 = load i64, ptr %292, align 8, !tbaa !47
  %294 = load i64, ptr %106, align 8, !tbaa !36
  %.neg = sub i64 %294, %293
  %295 = load i64, ptr %83, align 8, !tbaa !30
  %296 = add i64 %.neg, %295
  store i64 %296, ptr %83, align 8, !tbaa !30
  %297 = load i64, ptr %231, align 8, !tbaa !45
  %298 = load i64, ptr %84, align 8, !tbaa !31
  %299 = add i64 %297, %135
  %300 = sub i64 %298, %299
  store i64 %300, ptr %84, align 8, !tbaa !31
  store i64 %230, ptr %111, align 8, !tbaa !25
  %301 = load i64, ptr %53, align 8, !tbaa !28
  %302 = and i64 %301, 32
  %.not458 = icmp eq i64 %302, 0
  br i1 %.not458, label %312, label %303

303:                                              ; preds = %._crit_edge501
  %304 = load i64, ptr %231, align 8, !tbaa !45
  %305 = add nsw i64 %304, %135
  %306 = load i64, ptr %292, align 8, !tbaa !47
  %307 = load i64, ptr %106, align 8, !tbaa !36
  %308 = sub nsw i64 %306, %307
  %309 = load i64, ptr %83, align 8, !tbaa !30
  %310 = load i64, ptr %84, align 8, !tbaa !31
  %311 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, i64 noundef %104, i64 noundef %112, i64 noundef %230, i64 noundef %305, i64 noundef %308, i64 noundef %309, i64 noundef %310) #3
  br label %312

312:                                              ; preds = %303, %._crit_edge501
  %313 = load i64, ptr %106, align 8, !tbaa !36
  %314 = load i64, ptr %292, align 8, !tbaa !47
  %315 = sub i64 %313, %314
  %316 = mul nsw i64 %112, %2
  %317 = getelementptr i64, ptr %32, i64 %316
  %318 = getelementptr i64, ptr %317, i64 %230
  %319 = load i64, ptr %318, align 8, !tbaa !25
  %320 = add nsw i64 %315, %319
  store i64 %320, ptr %318, align 8, !tbaa !25
  %321 = load i64, ptr %106, align 8, !tbaa !36
  %322 = load i64, ptr %292, align 8, !tbaa !47
  %323 = sub nsw i64 %321, %322
  %324 = mul nsw i64 %230, %2
  %325 = getelementptr i64, ptr %32, i64 %324
  %326 = getelementptr i64, ptr %325, i64 %112
  %327 = load i64, ptr %326, align 8, !tbaa !25
  %328 = add nsw i64 %327, %323
  store i64 %328, ptr %326, align 8, !tbaa !25
  %329 = load i64, ptr %318, align 8, !tbaa !25
  %330 = icmp eq i64 %329, 0
  br i1 %330, label %331, label %340

331:                                              ; preds = %312
  %332 = getelementptr inbounds i64, ptr %33, i64 %112
  %333 = load i64, ptr %332, align 8, !tbaa !25
  %334 = add nsw i64 %333, -1
  store i64 %334, ptr %332, align 8, !tbaa !25
  %335 = icmp eq i64 %333, %.0434508
  br i1 %335, label %336, label %thread-pre-split

336:                                              ; preds = %331
  %337 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %33) #3
  %338 = getelementptr inbounds i64, ptr %33, i64 %337
  %339 = load i64, ptr %338, align 8, !tbaa !25
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %336, %331
  %.1435.ph = phi i64 [ %.0434508, %331 ], [ %339, %336 ]
  %.pr = load i64, ptr %326, align 8, !tbaa !25
  br label %340

340:                                              ; preds = %thread-pre-split, %312
  %341 = phi i64 [ %.pr, %thread-pre-split ], [ %328, %312 ]
  %.1435 = phi i64 [ %.1435.ph, %thread-pre-split ], [ %.0434508, %312 ]
  %342 = icmp eq i64 %341, 0
  br i1 %342, label %343, label %352

343:                                              ; preds = %340
  %344 = getelementptr inbounds i64, ptr %33, i64 %230
  %345 = load i64, ptr %344, align 8, !tbaa !25
  %346 = add nsw i64 %345, -1
  store i64 %346, ptr %344, align 8, !tbaa !25
  %347 = icmp eq i64 %345, %.1435
  br i1 %347, label %348, label %352

348:                                              ; preds = %343
  %349 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %33) #3
  %350 = getelementptr inbounds i64, ptr %33, i64 %349
  %351 = load i64, ptr %350, align 8, !tbaa !25
  br label %352

352:                                              ; preds = %343, %348, %340
  %.2436 = phi i64 [ %351, %348 ], [ %.1435, %343 ], [ %.1435, %340 ]
  %353 = getelementptr inbounds i64, ptr %13, i64 %104
  %354 = load i64, ptr %353, align 8, !tbaa !25
  %355 = getelementptr i8, ptr %353, i64 8
  %356 = load i64, ptr %355, align 8, !tbaa !25
  %357 = icmp slt i64 %354, %356
  br i1 %357, label %.lr.ph505, label %._crit_edge506

.lr.ph505:                                        ; preds = %352
  %358 = getelementptr inbounds i64, ptr %33, i64 %112
  %359 = getelementptr inbounds i64, ptr %33, i64 %230
  br label %360

360:                                              ; preds = %.lr.ph505, %428
  %361 = phi i64 [ %356, %.lr.ph505 ], [ %429, %428 ]
  %.4503 = phi i64 [ %354, %.lr.ph505 ], [ %430, %428 ]
  %.3437502 = phi i64 [ %.2436, %.lr.ph505 ], [ %.8, %428 ]
  %362 = getelementptr inbounds i64, ptr %15, i64 %.4503
  %363 = load i64, ptr %362, align 8, !tbaa !25
  %364 = getelementptr inbounds i64, ptr %21, i64 %363
  %365 = load i64, ptr %364, align 8, !tbaa !25
  %.not459 = icmp eq i64 %365, %112
  %.not460 = icmp eq i64 %365, %230
  %or.cond466 = select i1 %.not459, i1 true, i1 %.not460
  br i1 %or.cond466, label %428, label %366

366:                                              ; preds = %360
  %367 = getelementptr inbounds i64, ptr %17, i64 %.4503
  %368 = load i64, ptr %367, align 8, !tbaa !25
  %369 = mul nsw i64 %365, %2
  %370 = getelementptr i64, ptr %32, i64 %369
  %371 = getelementptr i64, ptr %370, i64 %112
  %372 = load i64, ptr %371, align 8, !tbaa !25
  %373 = sub nsw i64 %372, %368
  store i64 %373, ptr %371, align 8, !tbaa !25
  %374 = load i64, ptr %367, align 8, !tbaa !25
  %375 = getelementptr i64, ptr %317, i64 %365
  %376 = load i64, ptr %375, align 8, !tbaa !25
  %377 = sub nsw i64 %376, %374
  store i64 %377, ptr %375, align 8, !tbaa !25
  %378 = load i64, ptr %371, align 8, !tbaa !25
  %379 = icmp eq i64 %378, 0
  br i1 %379, label %380, label %389

380:                                              ; preds = %366
  %381 = getelementptr inbounds i64, ptr %33, i64 %365
  %382 = load i64, ptr %381, align 8, !tbaa !25
  %383 = add nsw i64 %382, -1
  store i64 %383, ptr %381, align 8, !tbaa !25
  %384 = icmp eq i64 %382, %.3437502
  br i1 %384, label %385, label %thread-pre-split468

385:                                              ; preds = %380
  %386 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %33) #3
  %387 = getelementptr inbounds i64, ptr %33, i64 %386
  %388 = load i64, ptr %387, align 8, !tbaa !25
  br label %thread-pre-split468

thread-pre-split468:                              ; preds = %385, %380
  %.4438.ph = phi i64 [ %.3437502, %380 ], [ %388, %385 ]
  %.pr469 = load i64, ptr %375, align 8, !tbaa !25
  br label %389

389:                                              ; preds = %thread-pre-split468, %366
  %390 = phi i64 [ %.pr469, %thread-pre-split468 ], [ %377, %366 ]
  %.4438 = phi i64 [ %.4438.ph, %thread-pre-split468 ], [ %.3437502, %366 ]
  %391 = icmp eq i64 %390, 0
  br i1 %391, label %392, label %400

392:                                              ; preds = %389
  %393 = load i64, ptr %358, align 8, !tbaa !25
  %394 = add nsw i64 %393, -1
  store i64 %394, ptr %358, align 8, !tbaa !25
  %395 = icmp eq i64 %393, %.4438
  br i1 %395, label %396, label %400

396:                                              ; preds = %392
  %397 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %33) #3
  %398 = getelementptr inbounds i64, ptr %33, i64 %397
  %399 = load i64, ptr %398, align 8, !tbaa !25
  br label %400

400:                                              ; preds = %392, %396, %389
  %.5 = phi i64 [ %399, %396 ], [ %.4438, %392 ], [ %.4438, %389 ]
  %401 = getelementptr i64, ptr %370, i64 %230
  %402 = load i64, ptr %401, align 8, !tbaa !25
  %403 = icmp eq i64 %402, 0
  br i1 %403, label %404, label %411

404:                                              ; preds = %400
  %405 = getelementptr inbounds i64, ptr %33, i64 %365
  %406 = load i64, ptr %405, align 8, !tbaa !25
  %407 = add nsw i64 %406, 1
  store i64 %407, ptr %405, align 8, !tbaa !25
  %.not461 = icmp slt i64 %406, %.5
  br i1 %.not461, label %411, label %408

408:                                              ; preds = %404
  %409 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6, i64 noundef %407, i64 noundef %.5) #3
  %410 = load i64, ptr %405, align 8, !tbaa !25
  br label %411

411:                                              ; preds = %404, %408, %400
  %.6 = phi i64 [ %410, %408 ], [ %.5, %404 ], [ %.5, %400 ]
  %412 = getelementptr i64, ptr %325, i64 %365
  %413 = load i64, ptr %412, align 8, !tbaa !25
  %414 = icmp eq i64 %413, 0
  br i1 %414, label %415, label %421

415:                                              ; preds = %411
  %416 = load i64, ptr %359, align 8, !tbaa !25
  %417 = add nsw i64 %416, 1
  store i64 %417, ptr %359, align 8, !tbaa !25
  %.not462 = icmp slt i64 %416, %.6
  br i1 %.not462, label %421, label %418

418:                                              ; preds = %415
  %419 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6, i64 noundef %417, i64 noundef %.6) #3
  %420 = load i64, ptr %359, align 8, !tbaa !25
  br label %421

421:                                              ; preds = %415, %418, %411
  %.7 = phi i64 [ %420, %418 ], [ %.6, %415 ], [ %.6, %411 ]
  %422 = load i64, ptr %367, align 8, !tbaa !25
  %423 = load i64, ptr %401, align 8, !tbaa !25
  %424 = add nsw i64 %423, %422
  store i64 %424, ptr %401, align 8, !tbaa !25
  %425 = load i64, ptr %367, align 8, !tbaa !25
  %426 = load i64, ptr %412, align 8, !tbaa !25
  %427 = add nsw i64 %426, %425
  store i64 %427, ptr %412, align 8, !tbaa !25
  %.pre = load i64, ptr %355, align 8, !tbaa !25
  br label %428

428:                                              ; preds = %360, %421
  %429 = phi i64 [ %.pre, %421 ], [ %361, %360 ]
  %.8 = phi i64 [ %.7, %421 ], [ %.3437502, %360 ]
  %430 = add nsw i64 %.4503, 1
  %431 = icmp slt i64 %430, %429
  br i1 %431, label %360, label %._crit_edge506, !llvm.loop !52

._crit_edge506:                                   ; preds = %428, %352
  %.3437.lcssa = phi i64 [ %.2436, %352 ], [ %.8, %428 ]
  tail call void @libmetis__KWayVolUpdate(ptr noundef %0, ptr noundef nonnull %1, i64 noundef %104, i64 noundef %112, i64 noundef %230, ptr noundef %29, ptr noundef %30, ptr noundef %28)
  %432 = add nsw i64 %.0429509, 1
  br label %._crit_edge489.thread

._crit_edge489.thread:                            ; preds = %184, %254, %240, %102, %._crit_edge506, %._crit_edge489, %118, %.lr.ph512
  %.9 = phi i64 [ %.0434508, %.lr.ph512 ], [ %.0434508, %118 ], [ %.0434508, %._crit_edge489 ], [ %.3437.lcssa, %._crit_edge506 ], [ %.0434508, %102 ], [ %.0434508, %240 ], [ %.0434508, %254 ], [ %.0434508, %184 ]
  %.1430 = phi i64 [ %.0429509, %.lr.ph512 ], [ %.0429509, %118 ], [ %.0429509, %._crit_edge489 ], [ %432, %._crit_edge506 ], [ %.0429509, %102 ], [ %.0429509, %240 ], [ %.0429509, %254 ], [ %.0429509, %184 ]
  %433 = add nuw nsw i64 %.0422510, 1
  %434 = load i64, ptr %85, align 8, !tbaa !29
  %435 = icmp slt i64 %433, %434
  br i1 %435, label %.lr.ph512, label %._crit_edge513, !llvm.loop !53

._crit_edge513:                                   ; preds = %._crit_edge489.thread, %.backedge
  %.0429.lcssa = phi i64 [ 0, %.backedge ], [ %.1430, %._crit_edge489.thread ]
  %436 = load i64, ptr %53, align 8, !tbaa !28
  %437 = and i64 %436, 8
  %.not453 = icmp eq i64 %437, 0
  br i1 %.not453, label %455, label %438

438:                                              ; preds = %._crit_edge513
  %439 = tail call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %23) #3
  %440 = getelementptr inbounds i64, ptr %23, i64 %439
  %441 = load i64, ptr %440, align 8, !tbaa !25
  %442 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %23) #3
  %443 = getelementptr inbounds i64, ptr %23, i64 %442
  %444 = load i64, ptr %443, align 8, !tbaa !25
  %445 = tail call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %23) #3
  %446 = getelementptr inbounds i64, ptr %23, i64 %445
  %447 = load i64, ptr %446, align 8, !tbaa !25
  %448 = sitofp i64 %447 to double
  %449 = fmul double %89, %448
  %450 = fdiv double %449, %90
  %451 = load i64, ptr %85, align 8, !tbaa !29
  %452 = load i64, ptr %83, align 8, !tbaa !30
  %453 = load i64, ptr %84, align 8, !tbaa !31
  %454 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %441, i64 noundef %444, double noundef %450, i64 noundef %451, i64 noundef %.0429.lcssa, i64 noundef %452, i64 noundef %453) #3
  br label %455

455:                                              ; preds = %438, %._crit_edge513
  %456 = load i64, ptr %84, align 8, !tbaa !31
  %457 = icmp eq i64 %456, %95
  br i1 %457, label %458, label %463

458:                                              ; preds = %455
  %459 = load i64, ptr %83, align 8, !tbaa !30
  %460 = icmp ne i64 %459, %94
  %461 = add nuw nsw i64 %.0428515, 1
  %462 = icmp slt i64 %461, %5
  %or.cond521 = select i1 %460, i1 %462, i1 false
  br i1 %or.cond521, label %.backedge.backedge, label %._crit_edge518

463:                                              ; preds = %455
  %.old = add nuw nsw i64 %.0428515, 1
  %.old520 = icmp slt i64 %.old, %5
  br i1 %.old520, label %.backedge.backedge, label %._crit_edge518

.backedge.backedge:                               ; preds = %463, %458
  %.0428515.be = phi i64 [ %.old, %463 ], [ %461, %458 ]
  br label %.backedge, !llvm.loop !54

._crit_edge518:                                   ; preds = %463, %458, %81
  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 %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: nounwind uwtable
declare dso_local void @libmetis__ComputeVolSubDomainGraph(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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


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