; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis (mkwayfmh)

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

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

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

87:                                               ; preds = %122, %5
  %88 = load i64, ptr %11, align 8, !tbaa !9
  %89 = load i64, ptr %20, align 8, !tbaa !9
  %90 = icmp slt i64 %88, %89
  br i1 %90, label %91, label %125

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

98:                                               ; preds = %91
  %99 = load ptr, ptr %9, align 8, !tbaa !5
  %100 = load i64, ptr %11, align 8, !tbaa !9
  %101 = getelementptr inbounds float, ptr %99, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !22
  br label %105

103:                                              ; preds = %91
  %104 = load float, ptr %44, align 4, !tbaa !22
  br label %105

105:                                              ; preds = %103, %98
  %106 = phi float [ %102, %98 ], [ %104, %103 ]
  store float %106, ptr %44, align 4, !tbaa !22
  %107 = load ptr, ptr %9, align 8, !tbaa !5
  %108 = load i64, ptr %11, align 8, !tbaa !9
  %109 = getelementptr inbounds float, ptr %107, i64 %108
  %110 = load float, ptr %109, align 4, !tbaa !22
  %111 = load float, ptr %43, align 4, !tbaa !22
  %112 = fcmp ogt float %110, %111
  br i1 %112, label %113, label %118

113:                                              ; preds = %105
  %114 = load ptr, ptr %9, align 8, !tbaa !5
  %115 = load i64, ptr %11, align 8, !tbaa !9
  %116 = getelementptr inbounds float, ptr %114, i64 %115
  %117 = load float, ptr %116, align 4, !tbaa !22
  br label %120

118:                                              ; preds = %105
  %119 = load float, ptr %43, align 4, !tbaa !22
  br label %120

120:                                              ; preds = %118, %113
  %121 = phi float [ %117, %113 ], [ %119, %118 ]
  store float %121, ptr %43, align 4, !tbaa !22
  br label %122

122:                                              ; preds = %120
  %123 = load i64, ptr %11, align 8, !tbaa !9
  %124 = add nsw i64 %123, 1
  store i64 %124, ptr %11, align 8, !tbaa !9
  br label %87, !llvm.loop !24

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

139:                                              ; preds = %165, %125
  %140 = load i64, ptr %11, align 8, !tbaa !9
  %141 = load i64, ptr %20, align 8, !tbaa !9
  %142 = icmp slt i64 %140, %141
  br i1 %142, label %143, label %168

143:                                              ; preds = %139
  %144 = load i64, ptr %11, align 8, !tbaa !9
  %145 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %144
  %146 = load float, ptr %145, align 4, !tbaa !22
  %147 = load ptr, ptr %9, align 8, !tbaa !5
  %148 = load i64, ptr %11, align 8, !tbaa !9
  %149 = getelementptr inbounds float, ptr %147, i64 %148
  %150 = load float, ptr %149, align 4, !tbaa !22
  %151 = fcmp oge float %146, %150
  br i1 %151, label %152, label %156

152:                                              ; preds = %143
  %153 = load i64, ptr %11, align 8, !tbaa !9
  %154 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %153
  %155 = load float, ptr %154, align 4, !tbaa !22
  br label %161

156:                                              ; preds = %143
  %157 = load ptr, ptr %9, align 8, !tbaa !5
  %158 = load i64, ptr %11, align 8, !tbaa !9
  %159 = getelementptr inbounds float, ptr %157, i64 %158
  %160 = load float, ptr %159, align 4, !tbaa !22
  br label %161

161:                                              ; preds = %156, %152
  %162 = phi float [ %155, %152 ], [ %160, %156 ]
  %163 = load i64, ptr %11, align 8, !tbaa !9
  %164 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %163
  store float %162, ptr %164, align 4, !tbaa !22
  br label %165

165:                                              ; preds = %161
  %166 = load i64, ptr %11, align 8, !tbaa !9
  %167 = add nsw i64 %166, 1
  store i64 %167, ptr %11, align 8, !tbaa !9
  br label %139, !llvm.loop !26

168:                                              ; preds = %139
  %169 = load i64, ptr %24, align 8, !tbaa !9
  %170 = icmp ne i64 %169, 0
  br i1 %170, label %219, label %171

171:                                              ; preds = %168
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %172

172:                                              ; preds = %215, %171
  %173 = load i64, ptr %11, align 8, !tbaa !9
  %174 = load i64, ptr %8, align 8, !tbaa !9
  %175 = icmp slt i64 %173, %174
  br i1 %175, label %176, label %218

176:                                              ; preds = %172
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %177

177:                                              ; preds = %211, %176
  %178 = load i64, ptr %14, align 8, !tbaa !9
  %179 = load i64, ptr %20, align 8, !tbaa !9
  %180 = icmp slt i64 %178, %179
  br i1 %180, label %181, label %214

181:                                              ; preds = %177
  %182 = load i64, ptr %14, align 8, !tbaa !9
  %183 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !22
  %185 = load i64, ptr %8, align 8, !tbaa !9
  %186 = sitofp i64 %185 to float
  %187 = fdiv float %184, %186
  %188 = load ptr, ptr %42, align 8, !tbaa !5
  %189 = load i64, ptr %11, align 8, !tbaa !9
  %190 = load i64, ptr %20, align 8, !tbaa !9
  %191 = mul nsw i64 %189, %190
  %192 = load i64, ptr %14, align 8, !tbaa !9
  %193 = add nsw i64 %191, %192
  %194 = getelementptr inbounds float, ptr %188, i64 %193
  store float %187, ptr %194, align 4, !tbaa !22
  %195 = load i64, ptr %14, align 8, !tbaa !9
  %196 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %195
  %197 = load float, ptr %196, align 4, !tbaa !22
  %198 = load i64, ptr %8, align 8, !tbaa !9
  %199 = sitofp i64 %198 to float
  %200 = fmul float %197, %199
  %201 = fpext float %200 to double
  %202 = fdiv double 1.000000e+00, %201
  %203 = fptrunc double %202 to float
  %204 = load ptr, ptr %41, align 8, !tbaa !5
  %205 = load i64, ptr %11, align 8, !tbaa !9
  %206 = load i64, ptr %20, align 8, !tbaa !9
  %207 = mul nsw i64 %205, %206
  %208 = load i64, ptr %14, align 8, !tbaa !9
  %209 = add nsw i64 %207, %208
  %210 = getelementptr inbounds float, ptr %204, i64 %209
  store float %203, ptr %210, align 4, !tbaa !22
  br label %211

211:                                              ; preds = %181
  %212 = load i64, ptr %14, align 8, !tbaa !9
  %213 = add nsw i64 %212, 1
  store i64 %213, ptr %14, align 8, !tbaa !9
  br label %177, !llvm.loop !27

214:                                              ; preds = %177
  br label %215

215:                                              ; preds = %214
  %216 = load i64, ptr %11, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %11, align 8, !tbaa !9
  br label %172, !llvm.loop !28

218:                                              ; preds = %172
  br label %287

219:                                              ; preds = %168
  %220 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %221 = load float, ptr %220, align 16, !tbaa !22
  store float %221, ptr %43, align 4, !tbaa !22
  store i64 1, ptr %11, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %240, %219
  %223 = load i64, ptr %11, align 8, !tbaa !9
  %224 = load i64, ptr %20, align 8, !tbaa !9
  %225 = icmp slt i64 %223, %224
  br i1 %225, label %226, label %243

226:                                              ; preds = %222
  %227 = load i64, ptr %11, align 8, !tbaa !9
  %228 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %227
  %229 = load float, ptr %228, align 4, !tbaa !22
  %230 = load float, ptr %43, align 4, !tbaa !22
  %231 = fcmp ogt float %229, %230
  br i1 %231, label %232, label %236

232:                                              ; preds = %226
  %233 = load i64, ptr %11, align 8, !tbaa !9
  %234 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 %233
  %235 = load float, ptr %234, align 4, !tbaa !22
  br label %238

236:                                              ; preds = %226
  %237 = load float, ptr %43, align 4, !tbaa !22
  br label %238

238:                                              ; preds = %236, %232
  %239 = phi float [ %235, %232 ], [ %237, %236 ]
  store float %239, ptr %43, align 4, !tbaa !22
  br label %240

240:                                              ; preds = %238
  %241 = load i64, ptr %11, align 8, !tbaa !9
  %242 = add nsw i64 %241, 1
  store i64 %242, ptr %11, align 8, !tbaa !9
  br label %222, !llvm.loop !29

243:                                              ; preds = %222
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %244

244:                                              ; preds = %283, %243
  %245 = load i64, ptr %11, align 8, !tbaa !9
  %246 = load i64, ptr %8, align 8, !tbaa !9
  %247 = icmp slt i64 %245, %246
  br i1 %247, label %248, label %286

248:                                              ; preds = %244
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %249

249:                                              ; preds = %279, %248
  %250 = load i64, ptr %14, align 8, !tbaa !9
  %251 = load i64, ptr %20, align 8, !tbaa !9
  %252 = icmp slt i64 %250, %251
  br i1 %252, label %253, label %282

253:                                              ; preds = %249
  %254 = load float, ptr %43, align 4, !tbaa !22
  %255 = load i64, ptr %8, align 8, !tbaa !9
  %256 = sitofp i64 %255 to float
  %257 = fdiv float %254, %256
  %258 = load ptr, ptr %42, align 8, !tbaa !5
  %259 = load i64, ptr %11, align 8, !tbaa !9
  %260 = load i64, ptr %20, align 8, !tbaa !9
  %261 = mul nsw i64 %259, %260
  %262 = load i64, ptr %14, align 8, !tbaa !9
  %263 = add nsw i64 %261, %262
  %264 = getelementptr inbounds float, ptr %258, i64 %263
  store float %257, ptr %264, align 4, !tbaa !22
  %265 = load float, ptr %43, align 4, !tbaa !22
  %266 = load i64, ptr %8, align 8, !tbaa !9
  %267 = sitofp i64 %266 to float
  %268 = fmul float %265, %267
  %269 = fpext float %268 to double
  %270 = fdiv double 1.000000e+00, %269
  %271 = fptrunc double %270 to float
  %272 = load ptr, ptr %41, align 8, !tbaa !5
  %273 = load i64, ptr %11, align 8, !tbaa !9
  %274 = load i64, ptr %20, align 8, !tbaa !9
  %275 = mul nsw i64 %273, %274
  %276 = load i64, ptr %14, align 8, !tbaa !9
  %277 = add nsw i64 %275, %276
  %278 = getelementptr inbounds float, ptr %272, i64 %277
  store float %271, ptr %278, align 4, !tbaa !22
  br label %279

279:                                              ; preds = %253
  %280 = load i64, ptr %14, align 8, !tbaa !9
  %281 = add nsw i64 %280, 1
  store i64 %281, ptr %14, align 8, !tbaa !9
  br label %249, !llvm.loop !30

282:                                              ; preds = %249
  br label %283

283:                                              ; preds = %282
  %284 = load i64, ptr %11, align 8, !tbaa !9
  %285 = add nsw i64 %284, 1
  store i64 %285, ptr %11, align 8, !tbaa !9
  br label %244, !llvm.loop !31

286:                                              ; preds = %244
  br label %287

287:                                              ; preds = %286, %218
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = load i64, ptr %19, align 8, !tbaa !9
  %290 = call ptr @libmetis__idxwspacemalloc(ptr noundef %288, i64 noundef %289)
  store ptr %290, ptr %34, align 8, !tbaa !5
  %291 = load ptr, ptr %6, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.controldef, ptr %291, i32 0, i32 1
  %293 = load i64, ptr %292, align 8, !tbaa !32
  %294 = and i64 %293, 8
  %295 = icmp ne i64 %294, 0
  br i1 %295, label %296, label %344

296:                                              ; preds = %287
  %297 = load ptr, ptr %39, align 8, !tbaa !5
  %298 = load i64, ptr %20, align 8, !tbaa !9
  %299 = load i64, ptr %8, align 8, !tbaa !9
  %300 = mul nsw i64 %298, %299
  %301 = load ptr, ptr %39, align 8, !tbaa !5
  %302 = call i64 @gk_fargmin(i64 noundef %300, ptr noundef %301)
  %303 = getelementptr inbounds float, ptr %297, i64 %302
  %304 = load float, ptr %303, align 4, !tbaa !22
  %305 = fpext float %304 to double
  %306 = load ptr, ptr %39, align 8, !tbaa !5
  %307 = load i64, ptr %20, align 8, !tbaa !9
  %308 = load i64, ptr %8, align 8, !tbaa !9
  %309 = mul nsw i64 %307, %308
  %310 = load ptr, ptr %39, align 8, !tbaa !5
  %311 = call i64 @gk_fargmax(i64 noundef %309, ptr noundef %310)
  %312 = getelementptr inbounds float, ptr %306, i64 %311
  %313 = load float, ptr %312, align 4, !tbaa !22
  %314 = fpext float %313 to double
  %315 = load ptr, ptr %7, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.graphdef, ptr %315, i32 0, i32 0
  %317 = load i64, ptr %316, align 8, !tbaa !11
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.graphdef, ptr %318, i32 0, i32 20
  %320 = load i64, ptr %319, align 8, !tbaa !36
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.graphdef, ptr %321, i32 0, i32 16
  %323 = load i64, ptr %322, align 8, !tbaa !37
  %324 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, double noundef %305, double noundef %314, i64 noundef %317, i64 noundef %320, i64 noundef %323)
  %325 = load i64, ptr %20, align 8, !tbaa !9
  %326 = load i64, ptr %8, align 8, !tbaa !9
  %327 = load ptr, ptr %39, align 8, !tbaa !5
  %328 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 0
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %325, i64 noundef %326, ptr noundef %327, ptr noundef %328)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %329

329:                                              ; preds = %339, %296
  %330 = load i64, ptr %11, align 8, !tbaa !9
  %331 = load i64, ptr %20, align 8, !tbaa !9
  %332 = icmp slt i64 %330, %331
  br i1 %332, label %333, label %342

333:                                              ; preds = %329
  %334 = load i64, ptr %11, align 8, !tbaa !9
  %335 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 %334
  %336 = load float, ptr %335, align 4, !tbaa !22
  %337 = fpext float %336 to double
  %338 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %337)
  br label %339

339:                                              ; preds = %333
  %340 = load i64, ptr %11, align 8, !tbaa !9
  %341 = add nsw i64 %340, 1
  store i64 %341, ptr %11, align 8, !tbaa !9
  br label %329, !llvm.loop !38

342:                                              ; preds = %329
  %343 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2)
  br label %344

344:                                              ; preds = %342, %287
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %345

345:                                              ; preds = %1156, %344
  %346 = load i64, ptr %18, align 8, !tbaa !9
  %347 = load i64, ptr %10, align 8, !tbaa !9
  %348 = icmp slt i64 %346, %347
  br i1 %348, label %349, label %1159

349:                                              ; preds = %345
  %350 = load ptr, ptr %7, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.graphdef, ptr %350, i32 0, i32 16
  %352 = load i64, ptr %351, align 8, !tbaa !37
  store i64 %352, ptr %28, align 8, !tbaa !9
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.graphdef, ptr %353, i32 0, i32 20
  %355 = load i64, ptr %354, align 8, !tbaa !36
  store i64 %355, ptr %22, align 8, !tbaa !9
  %356 = load i64, ptr %22, align 8, !tbaa !9
  %357 = load ptr, ptr %34, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %356, ptr noundef %357, i64 noundef 1)
  store i64 0, ptr %13, align 8, !tbaa !9
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %358

358:                                              ; preds = %1092, %349
  %359 = load i64, ptr %13, align 8, !tbaa !9
  %360 = load ptr, ptr %7, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.graphdef, ptr %360, i32 0, i32 20
  %362 = load i64, ptr %361, align 8, !tbaa !36
  %363 = icmp slt i64 %359, %362
  br i1 %363, label %364, label %1095

364:                                              ; preds = %358
  %365 = load ptr, ptr %34, align 8, !tbaa !5
  %366 = load i64, ptr %13, align 8, !tbaa !9
  %367 = getelementptr inbounds i64, ptr %365, i64 %366
  %368 = load i64, ptr %367, align 8, !tbaa !9
  store i64 %368, ptr %12, align 8, !tbaa !9
  %369 = load i64, ptr %12, align 8, !tbaa !9
  %370 = load i64, ptr %22, align 8, !tbaa !9
  %371 = icmp sge i64 %369, %370
  br i1 %371, label %372, label %373

372:                                              ; preds = %364
  br label %1092

373:                                              ; preds = %364
  %374 = load ptr, ptr %36, align 8, !tbaa !5
  %375 = load i64, ptr %12, align 8, !tbaa !9
  %376 = getelementptr inbounds i64, ptr %374, i64 %375
  %377 = load i64, ptr %376, align 8, !tbaa !9
  store i64 %377, ptr %11, align 8, !tbaa !9
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.graphdef, ptr %378, i32 0, i32 25
  %380 = load ptr, ptr %379, align 8, !tbaa !39
  %381 = load i64, ptr %11, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.rinfodef, ptr %380, i64 %381
  store ptr %382, ptr %38, align 8, !tbaa !5
  %383 = load ptr, ptr %38, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.rinfodef, ptr %383, i32 0, i32 1
  %385 = load i64, ptr %384, align 8, !tbaa !40
  %386 = load ptr, ptr %38, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.rinfodef, ptr %386, i32 0, i32 0
  %388 = load i64, ptr %387, align 8, !tbaa !42
  %389 = icmp sge i64 %385, %388
  br i1 %389, label %390, label %1091

390:                                              ; preds = %373
  %391 = load ptr, ptr %33, align 8, !tbaa !5
  %392 = load i64, ptr %11, align 8, !tbaa !9
  %393 = getelementptr inbounds i64, ptr %391, i64 %392
  %394 = load i64, ptr %393, align 8, !tbaa !9
  store i64 %394, ptr %25, align 8, !tbaa !9
  %395 = load ptr, ptr %7, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.graphdef, ptr %395, i32 0, i32 29
  %397 = load ptr, ptr %396, align 8, !tbaa !43
  %398 = load i64, ptr %11, align 8, !tbaa !9
  %399 = load i64, ptr %20, align 8, !tbaa !9
  %400 = mul nsw i64 %398, %399
  %401 = getelementptr inbounds float, ptr %397, i64 %400
  store ptr %401, ptr %40, align 8, !tbaa !5
  %402 = load ptr, ptr %38, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.rinfodef, ptr %402, i32 0, i32 0
  %404 = load i64, ptr %403, align 8, !tbaa !42
  %405 = icmp sgt i64 %404, 0
  br i1 %405, label %406, label %422

406:                                              ; preds = %390
  %407 = load i64, ptr %20, align 8, !tbaa !9
  %408 = load ptr, ptr %39, align 8, !tbaa !5
  %409 = load i64, ptr %25, align 8, !tbaa !9
  %410 = load i64, ptr %20, align 8, !tbaa !9
  %411 = mul nsw i64 %409, %410
  %412 = getelementptr inbounds float, ptr %408, i64 %411
  %413 = load ptr, ptr %40, align 8, !tbaa !5
  %414 = load ptr, ptr %41, align 8, !tbaa !5
  %415 = load i64, ptr %25, align 8, !tbaa !9
  %416 = load i64, ptr %20, align 8, !tbaa !9
  %417 = mul nsw i64 %415, %416
  %418 = getelementptr inbounds float, ptr %414, i64 %417
  %419 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %407, float noundef 1.000000e+00, ptr noundef %412, float noundef -1.000000e+00, ptr noundef %413, ptr noundef %418)
  %420 = icmp ne i64 %419, 0
  br i1 %420, label %421, label %422

421:                                              ; preds = %406
  br label %1092

422:                                              ; preds = %406, %390
  %423 = load ptr, ptr %38, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.rinfodef, ptr %423, i32 0, i32 3
  %425 = load ptr, ptr %424, align 8, !tbaa !44
  store ptr %425, ptr %37, align 8, !tbaa !5
  %426 = load ptr, ptr %38, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.rinfodef, ptr %426, i32 0, i32 2
  %428 = load i64, ptr %427, align 8, !tbaa !45
  store i64 %428, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %429

429:                                              ; preds = %484, %422
  %430 = load i64, ptr %16, align 8, !tbaa !9
  %431 = load i64, ptr %23, align 8, !tbaa !9
  %432 = icmp slt i64 %430, %431
  br i1 %432, label %433, label %487

433:                                              ; preds = %429
  %434 = load ptr, ptr %37, align 8, !tbaa !5
  %435 = load i64, ptr %16, align 8, !tbaa !9
  %436 = getelementptr inbounds %struct.edegreedef, ptr %434, i64 %435
  %437 = getelementptr inbounds %struct.edegreedef, ptr %436, i32 0, i32 0
  %438 = load i64, ptr %437, align 8, !tbaa !46
  store i64 %438, ptr %27, align 8, !tbaa !9
  %439 = load ptr, ptr %37, align 8, !tbaa !5
  %440 = load i64, ptr %16, align 8, !tbaa !9
  %441 = getelementptr inbounds %struct.edegreedef, ptr %439, i64 %440
  %442 = getelementptr inbounds %struct.edegreedef, ptr %441, i32 0, i32 1
  %443 = load i64, ptr %442, align 8, !tbaa !48
  %444 = load ptr, ptr %38, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.rinfodef, ptr %444, i32 0, i32 0
  %446 = load i64, ptr %445, align 8, !tbaa !42
  %447 = sub nsw i64 %443, %446
  store i64 %447, ptr %29, align 8, !tbaa !9
  %448 = load i64, ptr %29, align 8, !tbaa !9
  %449 = icmp sge i64 %448, 0
  br i1 %449, label %450, label %483

450:                                              ; preds = %433
  %451 = load i64, ptr %20, align 8, !tbaa !9
  %452 = load ptr, ptr %39, align 8, !tbaa !5
  %453 = load i64, ptr %27, align 8, !tbaa !9
  %454 = load i64, ptr %20, align 8, !tbaa !9
  %455 = mul nsw i64 %453, %454
  %456 = getelementptr inbounds float, ptr %452, i64 %455
  %457 = load ptr, ptr %40, align 8, !tbaa !5
  %458 = load ptr, ptr %42, align 8, !tbaa !5
  %459 = load i64, ptr %27, align 8, !tbaa !9
  %460 = load i64, ptr %20, align 8, !tbaa !9
  %461 = mul nsw i64 %459, %460
  %462 = getelementptr inbounds float, ptr %458, i64 %461
  %463 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %451, float noundef 1.000000e+00, ptr noundef %456, float noundef 1.000000e+00, ptr noundef %457, ptr noundef %462)
  %464 = icmp ne i64 %463, 0
  br i1 %464, label %482, label %465

465:                                              ; preds = %450
  %466 = load i64, ptr %20, align 8, !tbaa !9
  %467 = load i64, ptr %8, align 8, !tbaa !9
  %468 = load ptr, ptr %39, align 8, !tbaa !5
  %469 = load i64, ptr %25, align 8, !tbaa !9
  %470 = load i64, ptr %20, align 8, !tbaa !9
  %471 = mul nsw i64 %469, %470
  %472 = getelementptr inbounds float, ptr %468, i64 %471
  %473 = load ptr, ptr %39, align 8, !tbaa !5
  %474 = load i64, ptr %27, align 8, !tbaa !9
  %475 = load i64, ptr %20, align 8, !tbaa !9
  %476 = mul nsw i64 %474, %475
  %477 = getelementptr inbounds float, ptr %473, i64 %476
  %478 = load ptr, ptr %40, align 8, !tbaa !5
  %479 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %480 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %466, i64 noundef %467, ptr noundef %472, ptr noundef %477, ptr noundef %478, ptr noundef %479)
  %481 = icmp ne i64 %480, 0
  br i1 %481, label %482, label %483

482:                                              ; preds = %465, %450
  br label %487

483:                                              ; preds = %465, %433
  br label %484

484:                                              ; preds = %483
  %485 = load i64, ptr %16, align 8, !tbaa !9
  %486 = add nsw i64 %485, 1
  store i64 %486, ptr %16, align 8, !tbaa !9
  br label %429, !llvm.loop !49

487:                                              ; preds = %482, %429
  %488 = load i64, ptr %16, align 8, !tbaa !9
  %489 = load i64, ptr %23, align 8, !tbaa !9
  %490 = icmp eq i64 %488, %489
  br i1 %490, label %491, label %492

491:                                              ; preds = %487
  br label %1092

492:                                              ; preds = %487
  %493 = load i64, ptr %16, align 8, !tbaa !9
  %494 = add nsw i64 %493, 1
  store i64 %494, ptr %14, align 8, !tbaa !9
  br label %495

495:                                              ; preds = %584, %492
  %496 = load i64, ptr %14, align 8, !tbaa !9
  %497 = load i64, ptr %23, align 8, !tbaa !9
  %498 = icmp slt i64 %496, %497
  br i1 %498, label %499, label %587

499:                                              ; preds = %495
  %500 = load ptr, ptr %37, align 8, !tbaa !5
  %501 = load i64, ptr %14, align 8, !tbaa !9
  %502 = getelementptr inbounds %struct.edegreedef, ptr %500, i64 %501
  %503 = getelementptr inbounds %struct.edegreedef, ptr %502, i32 0, i32 0
  %504 = load i64, ptr %503, align 8, !tbaa !46
  store i64 %504, ptr %27, align 8, !tbaa !9
  %505 = load ptr, ptr %37, align 8, !tbaa !5
  %506 = load i64, ptr %14, align 8, !tbaa !9
  %507 = getelementptr inbounds %struct.edegreedef, ptr %505, i64 %506
  %508 = getelementptr inbounds %struct.edegreedef, ptr %507, i32 0, i32 1
  %509 = load i64, ptr %508, align 8, !tbaa !48
  %510 = load ptr, ptr %37, align 8, !tbaa !5
  %511 = load i64, ptr %16, align 8, !tbaa !9
  %512 = getelementptr inbounds %struct.edegreedef, ptr %510, i64 %511
  %513 = getelementptr inbounds %struct.edegreedef, ptr %512, i32 0, i32 1
  %514 = load i64, ptr %513, align 8, !tbaa !48
  %515 = icmp sgt i64 %509, %514
  br i1 %515, label %516, label %548

516:                                              ; preds = %499
  %517 = load i64, ptr %20, align 8, !tbaa !9
  %518 = load ptr, ptr %39, align 8, !tbaa !5
  %519 = load i64, ptr %27, align 8, !tbaa !9
  %520 = load i64, ptr %20, align 8, !tbaa !9
  %521 = mul nsw i64 %519, %520
  %522 = getelementptr inbounds float, ptr %518, i64 %521
  %523 = load ptr, ptr %40, align 8, !tbaa !5
  %524 = load ptr, ptr %42, align 8, !tbaa !5
  %525 = load i64, ptr %27, align 8, !tbaa !9
  %526 = load i64, ptr %20, align 8, !tbaa !9
  %527 = mul nsw i64 %525, %526
  %528 = getelementptr inbounds float, ptr %524, i64 %527
  %529 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %517, float noundef 1.000000e+00, ptr noundef %522, float noundef 1.000000e+00, ptr noundef %523, ptr noundef %528)
  %530 = icmp ne i64 %529, 0
  br i1 %530, label %581, label %531

531:                                              ; preds = %516
  %532 = load i64, ptr %20, align 8, !tbaa !9
  %533 = load i64, ptr %8, align 8, !tbaa !9
  %534 = load ptr, ptr %39, align 8, !tbaa !5
  %535 = load i64, ptr %25, align 8, !tbaa !9
  %536 = load i64, ptr %20, align 8, !tbaa !9
  %537 = mul nsw i64 %535, %536
  %538 = getelementptr inbounds float, ptr %534, i64 %537
  %539 = load ptr, ptr %39, align 8, !tbaa !5
  %540 = load i64, ptr %27, align 8, !tbaa !9
  %541 = load i64, ptr %20, align 8, !tbaa !9
  %542 = mul nsw i64 %540, %541
  %543 = getelementptr inbounds float, ptr %539, i64 %542
  %544 = load ptr, ptr %40, align 8, !tbaa !5
  %545 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %546 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %532, i64 noundef %533, ptr noundef %538, ptr noundef %543, ptr noundef %544, ptr noundef %545)
  %547 = icmp ne i64 %546, 0
  br i1 %547, label %581, label %548

548:                                              ; preds = %531, %499
  %549 = load ptr, ptr %37, align 8, !tbaa !5
  %550 = load i64, ptr %14, align 8, !tbaa !9
  %551 = getelementptr inbounds %struct.edegreedef, ptr %549, i64 %550
  %552 = getelementptr inbounds %struct.edegreedef, ptr %551, i32 0, i32 1
  %553 = load i64, ptr %552, align 8, !tbaa !48
  %554 = load ptr, ptr %37, align 8, !tbaa !5
  %555 = load i64, ptr %16, align 8, !tbaa !9
  %556 = getelementptr inbounds %struct.edegreedef, ptr %554, i64 %555
  %557 = getelementptr inbounds %struct.edegreedef, ptr %556, i32 0, i32 1
  %558 = load i64, ptr %557, align 8, !tbaa !48
  %559 = icmp eq i64 %553, %558
  br i1 %559, label %560, label %583

560:                                              ; preds = %548
  %561 = load i64, ptr %20, align 8, !tbaa !9
  %562 = load i64, ptr %8, align 8, !tbaa !9
  %563 = load ptr, ptr %39, align 8, !tbaa !5
  %564 = load ptr, ptr %37, align 8, !tbaa !5
  %565 = load i64, ptr %16, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.edegreedef, ptr %564, i64 %565
  %567 = getelementptr inbounds %struct.edegreedef, ptr %566, i32 0, i32 0
  %568 = load i64, ptr %567, align 8, !tbaa !46
  %569 = load i64, ptr %20, align 8, !tbaa !9
  %570 = mul nsw i64 %568, %569
  %571 = getelementptr inbounds float, ptr %563, i64 %570
  %572 = load ptr, ptr %39, align 8, !tbaa !5
  %573 = load i64, ptr %27, align 8, !tbaa !9
  %574 = load i64, ptr %20, align 8, !tbaa !9
  %575 = mul nsw i64 %573, %574
  %576 = getelementptr inbounds float, ptr %572, i64 %575
  %577 = load ptr, ptr %40, align 8, !tbaa !5
  %578 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %579 = call i64 @libmetis__IsHBalanceBetterTT(i64 noundef %561, i64 noundef %562, ptr noundef %571, ptr noundef %576, ptr noundef %577, ptr noundef %578)
  %580 = icmp ne i64 %579, 0
  br i1 %580, label %581, label %583

581:                                              ; preds = %560, %531, %516
  %582 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %582, ptr %16, align 8, !tbaa !9
  br label %583

583:                                              ; preds = %581, %560, %548
  br label %584

584:                                              ; preds = %583
  %585 = load i64, ptr %14, align 8, !tbaa !9
  %586 = add nsw i64 %585, 1
  store i64 %586, ptr %14, align 8, !tbaa !9
  br label %495, !llvm.loop !50

587:                                              ; preds = %495
  %588 = load ptr, ptr %37, align 8, !tbaa !5
  %589 = load i64, ptr %16, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.edegreedef, ptr %588, i64 %589
  %591 = getelementptr inbounds %struct.edegreedef, ptr %590, i32 0, i32 0
  %592 = load i64, ptr %591, align 8, !tbaa !46
  store i64 %592, ptr %27, align 8, !tbaa !9
  %593 = load ptr, ptr %37, align 8, !tbaa !5
  %594 = load i64, ptr %16, align 8, !tbaa !9
  %595 = getelementptr inbounds %struct.edegreedef, ptr %593, i64 %594
  %596 = getelementptr inbounds %struct.edegreedef, ptr %595, i32 0, i32 1
  %597 = load i64, ptr %596, align 8, !tbaa !48
  %598 = load ptr, ptr %38, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.rinfodef, ptr %598, i32 0, i32 0
  %600 = load i64, ptr %599, align 8, !tbaa !42
  %601 = sub nsw i64 %597, %600
  %602 = icmp eq i64 %601, 0
  br i1 %602, label %603, label %640

603:                                              ; preds = %587
  %604 = load i64, ptr %20, align 8, !tbaa !9
  %605 = load i64, ptr %8, align 8, !tbaa !9
  %606 = load ptr, ptr %39, align 8, !tbaa !5
  %607 = load i64, ptr %25, align 8, !tbaa !9
  %608 = load i64, ptr %20, align 8, !tbaa !9
  %609 = mul nsw i64 %607, %608
  %610 = getelementptr inbounds float, ptr %606, i64 %609
  %611 = load ptr, ptr %39, align 8, !tbaa !5
  %612 = load i64, ptr %27, align 8, !tbaa !9
  %613 = load i64, ptr %20, align 8, !tbaa !9
  %614 = mul nsw i64 %612, %613
  %615 = getelementptr inbounds float, ptr %611, i64 %614
  %616 = load ptr, ptr %40, align 8, !tbaa !5
  %617 = getelementptr inbounds [16 x float], ptr %45, i64 0, i64 0
  %618 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %604, i64 noundef %605, ptr noundef %610, ptr noundef %615, ptr noundef %616, ptr noundef %617)
  %619 = icmp ne i64 %618, 0
  br i1 %619, label %640, label %620

620:                                              ; preds = %603
  %621 = load i64, ptr %20, align 8, !tbaa !9
  %622 = load ptr, ptr %39, align 8, !tbaa !5
  %623 = load i64, ptr %25, align 8, !tbaa !9
  %624 = load i64, ptr %20, align 8, !tbaa !9
  %625 = mul nsw i64 %623, %624
  %626 = getelementptr inbounds float, ptr %622, i64 %625
  %627 = load ptr, ptr %39, align 8, !tbaa !5
  %628 = load i64, ptr %25, align 8, !tbaa !9
  %629 = load i64, ptr %20, align 8, !tbaa !9
  %630 = mul nsw i64 %628, %629
  %631 = getelementptr inbounds float, ptr %627, i64 %630
  %632 = load ptr, ptr %42, align 8, !tbaa !5
  %633 = load i64, ptr %25, align 8, !tbaa !9
  %634 = load i64, ptr %20, align 8, !tbaa !9
  %635 = mul nsw i64 %633, %634
  %636 = getelementptr inbounds float, ptr %632, i64 %635
  %637 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %621, float noundef 1.000000e+00, ptr noundef %626, float noundef 0.000000e+00, ptr noundef %631, ptr noundef %636)
  %638 = icmp ne i64 %637, 0
  br i1 %638, label %639, label %640

639:                                              ; preds = %620
  br label %1092

640:                                              ; preds = %620, %603, %587
  %641 = load ptr, ptr %37, align 8, !tbaa !5
  %642 = load i64, ptr %16, align 8, !tbaa !9
  %643 = getelementptr inbounds %struct.edegreedef, ptr %641, i64 %642
  %644 = getelementptr inbounds %struct.edegreedef, ptr %643, i32 0, i32 1
  %645 = load i64, ptr %644, align 8, !tbaa !48
  %646 = load ptr, ptr %38, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.rinfodef, ptr %646, i32 0, i32 0
  %648 = load i64, ptr %647, align 8, !tbaa !42
  %649 = sub nsw i64 %645, %648
  %650 = load ptr, ptr %7, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.graphdef, ptr %650, i32 0, i32 16
  %652 = load i64, ptr %651, align 8, !tbaa !37
  %653 = sub nsw i64 %652, %649
  store i64 %653, ptr %651, align 8, !tbaa !37
  %654 = load ptr, ptr %6, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.controldef, ptr %654, i32 0, i32 1
  %656 = load i64, ptr %655, align 8, !tbaa !32
  %657 = and i64 %656, 32
  %658 = icmp ne i64 %657, 0
  br i1 %658, label %659, label %675

659:                                              ; preds = %640
  %660 = load i64, ptr %11, align 8, !tbaa !9
  %661 = load i64, ptr %27, align 8, !tbaa !9
  %662 = load ptr, ptr %37, align 8, !tbaa !5
  %663 = load i64, ptr %16, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.edegreedef, ptr %662, i64 %663
  %665 = getelementptr inbounds %struct.edegreedef, ptr %664, i32 0, i32 1
  %666 = load i64, ptr %665, align 8, !tbaa !48
  %667 = load ptr, ptr %38, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.rinfodef, ptr %667, i32 0, i32 0
  %669 = load i64, ptr %668, align 8, !tbaa !42
  %670 = sub nsw i64 %666, %669
  %671 = load ptr, ptr %7, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.graphdef, ptr %671, i32 0, i32 16
  %673 = load i64, ptr %672, align 8, !tbaa !37
  %674 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %660, i64 noundef %661, i64 noundef %670, i64 noundef %673)
  br label %675

675:                                              ; preds = %659, %640
  %676 = load i64, ptr %20, align 8, !tbaa !9
  %677 = load ptr, ptr %40, align 8, !tbaa !5
  %678 = load ptr, ptr %39, align 8, !tbaa !5
  %679 = load i64, ptr %27, align 8, !tbaa !9
  %680 = load i64, ptr %20, align 8, !tbaa !9
  %681 = mul nsw i64 %679, %680
  %682 = getelementptr inbounds float, ptr %678, i64 %681
  %683 = call ptr @gk_faxpy(i64 noundef %676, float noundef 1.000000e+00, ptr noundef %677, i64 noundef 1, ptr noundef %682, i64 noundef 1)
  %684 = load i64, ptr %20, align 8, !tbaa !9
  %685 = load ptr, ptr %40, align 8, !tbaa !5
  %686 = load ptr, ptr %39, align 8, !tbaa !5
  %687 = load i64, ptr %25, align 8, !tbaa !9
  %688 = load i64, ptr %20, align 8, !tbaa !9
  %689 = mul nsw i64 %687, %688
  %690 = getelementptr inbounds float, ptr %686, i64 %689
  %691 = call ptr @gk_faxpy(i64 noundef %684, float noundef -1.000000e+00, ptr noundef %685, i64 noundef 1, ptr noundef %690, i64 noundef 1)
  %692 = load i64, ptr %27, align 8, !tbaa !9
  %693 = load ptr, ptr %33, align 8, !tbaa !5
  %694 = load i64, ptr %11, align 8, !tbaa !9
  %695 = getelementptr inbounds i64, ptr %693, i64 %694
  store i64 %692, ptr %695, align 8, !tbaa !9
  %696 = load ptr, ptr %38, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.rinfodef, ptr %696, i32 0, i32 0
  %698 = load i64, ptr %697, align 8, !tbaa !42
  %699 = load ptr, ptr %37, align 8, !tbaa !5
  %700 = load i64, ptr %16, align 8, !tbaa !9
  %701 = getelementptr inbounds %struct.edegreedef, ptr %699, i64 %700
  %702 = getelementptr inbounds %struct.edegreedef, ptr %701, i32 0, i32 1
  %703 = load i64, ptr %702, align 8, !tbaa !48
  %704 = sub nsw i64 %698, %703
  %705 = load ptr, ptr %38, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.rinfodef, ptr %705, i32 0, i32 1
  %707 = load i64, ptr %706, align 8, !tbaa !40
  %708 = add nsw i64 %707, %704
  store i64 %708, ptr %706, align 8, !tbaa !40
  br label %709

709:                                              ; preds = %675
  %710 = load ptr, ptr %38, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.rinfodef, ptr %710, i32 0, i32 0
  %712 = load i64, ptr %711, align 8, !tbaa !42
  store i64 %712, ptr %14, align 8, !tbaa !9
  %713 = load ptr, ptr %37, align 8, !tbaa !5
  %714 = load i64, ptr %16, align 8, !tbaa !9
  %715 = getelementptr inbounds %struct.edegreedef, ptr %713, i64 %714
  %716 = getelementptr inbounds %struct.edegreedef, ptr %715, i32 0, i32 1
  %717 = load i64, ptr %716, align 8, !tbaa !48
  %718 = load ptr, ptr %38, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.rinfodef, ptr %718, i32 0, i32 0
  store i64 %717, ptr %719, align 8, !tbaa !42
  %720 = load i64, ptr %14, align 8, !tbaa !9
  %721 = load ptr, ptr %37, align 8, !tbaa !5
  %722 = load i64, ptr %16, align 8, !tbaa !9
  %723 = getelementptr inbounds %struct.edegreedef, ptr %721, i64 %722
  %724 = getelementptr inbounds %struct.edegreedef, ptr %723, i32 0, i32 1
  store i64 %720, ptr %724, align 8, !tbaa !48
  br label %725

725:                                              ; preds = %709
  br label %726

726:                                              ; preds = %725
  %727 = load ptr, ptr %37, align 8, !tbaa !5
  %728 = load i64, ptr %16, align 8, !tbaa !9
  %729 = getelementptr inbounds %struct.edegreedef, ptr %727, i64 %728
  %730 = getelementptr inbounds %struct.edegreedef, ptr %729, i32 0, i32 1
  %731 = load i64, ptr %730, align 8, !tbaa !48
  %732 = icmp eq i64 %731, 0
  br i1 %732, label %733, label %743

733:                                              ; preds = %726
  %734 = load ptr, ptr %37, align 8, !tbaa !5
  %735 = load i64, ptr %16, align 8, !tbaa !9
  %736 = getelementptr inbounds %struct.edegreedef, ptr %734, i64 %735
  %737 = load ptr, ptr %37, align 8, !tbaa !5
  %738 = load ptr, ptr %38, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.rinfodef, ptr %738, i32 0, i32 2
  %740 = load i64, ptr %739, align 8, !tbaa !45
  %741 = add nsw i64 %740, -1
  store i64 %741, ptr %739, align 8, !tbaa !45
  %742 = getelementptr inbounds %struct.edegreedef, ptr %737, i64 %741
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %736, ptr align 8 %742, i64 16, i1 false), !tbaa.struct !51
  br label %749

743:                                              ; preds = %726
  %744 = load i64, ptr %25, align 8, !tbaa !9
  %745 = load ptr, ptr %37, align 8, !tbaa !5
  %746 = load i64, ptr %16, align 8, !tbaa !9
  %747 = getelementptr inbounds %struct.edegreedef, ptr %745, i64 %746
  %748 = getelementptr inbounds %struct.edegreedef, ptr %747, i32 0, i32 0
  store i64 %744, ptr %748, align 8, !tbaa !46
  br label %749

749:                                              ; preds = %743, %733
  %750 = load ptr, ptr %38, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.rinfodef, ptr %750, i32 0, i32 1
  %752 = load i64, ptr %751, align 8, !tbaa !40
  %753 = load ptr, ptr %38, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.rinfodef, ptr %753, i32 0, i32 0
  %755 = load i64, ptr %754, align 8, !tbaa !42
  %756 = sub nsw i64 %752, %755
  %757 = icmp slt i64 %756, 0
  br i1 %757, label %758, label %786

758:                                              ; preds = %749
  br label %759

759:                                              ; preds = %758
  %760 = load ptr, ptr %36, align 8, !tbaa !5
  %761 = load i64, ptr %22, align 8, !tbaa !9
  %762 = add nsw i64 %761, -1
  store i64 %762, ptr %22, align 8, !tbaa !9
  %763 = getelementptr inbounds i64, ptr %760, i64 %762
  %764 = load i64, ptr %763, align 8, !tbaa !9
  %765 = load ptr, ptr %36, align 8, !tbaa !5
  %766 = load ptr, ptr %35, align 8, !tbaa !5
  %767 = load i64, ptr %11, align 8, !tbaa !9
  %768 = getelementptr inbounds i64, ptr %766, i64 %767
  %769 = load i64, ptr %768, align 8, !tbaa !9
  %770 = getelementptr inbounds i64, ptr %765, i64 %769
  store i64 %764, ptr %770, align 8, !tbaa !9
  %771 = load ptr, ptr %35, align 8, !tbaa !5
  %772 = load i64, ptr %11, align 8, !tbaa !9
  %773 = getelementptr inbounds i64, ptr %771, i64 %772
  %774 = load i64, ptr %773, align 8, !tbaa !9
  %775 = load ptr, ptr %35, align 8, !tbaa !5
  %776 = load ptr, ptr %36, align 8, !tbaa !5
  %777 = load i64, ptr %22, align 8, !tbaa !9
  %778 = getelementptr inbounds i64, ptr %776, i64 %777
  %779 = load i64, ptr %778, align 8, !tbaa !9
  %780 = getelementptr inbounds i64, ptr %775, i64 %779
  store i64 %774, ptr %780, align 8, !tbaa !9
  %781 = load ptr, ptr %35, align 8, !tbaa !5
  %782 = load i64, ptr %11, align 8, !tbaa !9
  %783 = getelementptr inbounds i64, ptr %781, i64 %782
  store i64 -1, ptr %783, align 8, !tbaa !9
  br label %784

784:                                              ; preds = %759
  br label %785

785:                                              ; preds = %784
  br label %786

786:                                              ; preds = %785, %749
  %787 = load ptr, ptr %30, align 8, !tbaa !5
  %788 = load i64, ptr %11, align 8, !tbaa !9
  %789 = getelementptr inbounds i64, ptr %787, i64 %788
  %790 = load i64, ptr %789, align 8, !tbaa !9
  store i64 %790, ptr %14, align 8, !tbaa !9
  br label %791

791:                                              ; preds = %1085, %786
  %792 = load i64, ptr %14, align 8, !tbaa !9
  %793 = load ptr, ptr %30, align 8, !tbaa !5
  %794 = load i64, ptr %11, align 8, !tbaa !9
  %795 = add nsw i64 %794, 1
  %796 = getelementptr inbounds i64, ptr %793, i64 %795
  %797 = load i64, ptr %796, align 8, !tbaa !9
  %798 = icmp slt i64 %792, %797
  br i1 %798, label %799, label %1088

799:                                              ; preds = %791
  %800 = load ptr, ptr %31, align 8, !tbaa !5
  %801 = load i64, ptr %14, align 8, !tbaa !9
  %802 = getelementptr inbounds i64, ptr %800, i64 %801
  %803 = load i64, ptr %802, align 8, !tbaa !9
  store i64 %803, ptr %12, align 8, !tbaa !9
  %804 = load ptr, ptr %33, align 8, !tbaa !5
  %805 = load i64, ptr %12, align 8, !tbaa !9
  %806 = getelementptr inbounds i64, ptr %804, i64 %805
  %807 = load i64, ptr %806, align 8, !tbaa !9
  store i64 %807, ptr %26, align 8, !tbaa !9
  %808 = load ptr, ptr %7, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.graphdef, ptr %808, i32 0, i32 25
  %810 = load ptr, ptr %809, align 8, !tbaa !39
  %811 = load i64, ptr %12, align 8, !tbaa !9
  %812 = getelementptr inbounds %struct.rinfodef, ptr %810, i64 %811
  store ptr %812, ptr %38, align 8, !tbaa !5
  %813 = load ptr, ptr %38, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.rinfodef, ptr %813, i32 0, i32 3
  %815 = load ptr, ptr %814, align 8, !tbaa !44
  %816 = icmp eq ptr %815, null
  br i1 %816, label %817, label %844

817:                                              ; preds = %799
  %818 = load ptr, ptr %6, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.controldef, ptr %818, i32 0, i32 11
  %820 = getelementptr inbounds %struct.workspacedef, ptr %819, i32 0, i32 3
  %821 = load ptr, ptr %820, align 8, !tbaa !52
  %822 = load ptr, ptr %6, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.controldef, ptr %822, i32 0, i32 11
  %824 = getelementptr inbounds %struct.workspacedef, ptr %823, i32 0, i32 5
  %825 = load i64, ptr %824, align 8, !tbaa !53
  %826 = getelementptr inbounds %struct.edegreedef, ptr %821, i64 %825
  %827 = load ptr, ptr %38, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.rinfodef, ptr %827, i32 0, i32 3
  store ptr %826, ptr %828, align 8, !tbaa !44
  %829 = load ptr, ptr %30, align 8, !tbaa !5
  %830 = load i64, ptr %12, align 8, !tbaa !9
  %831 = add nsw i64 %830, 1
  %832 = getelementptr inbounds i64, ptr %829, i64 %831
  %833 = load i64, ptr %832, align 8, !tbaa !9
  %834 = load ptr, ptr %30, align 8, !tbaa !5
  %835 = load i64, ptr %12, align 8, !tbaa !9
  %836 = getelementptr inbounds i64, ptr %834, i64 %835
  %837 = load i64, ptr %836, align 8, !tbaa !9
  %838 = sub nsw i64 %833, %837
  %839 = load ptr, ptr %6, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.controldef, ptr %839, i32 0, i32 11
  %841 = getelementptr inbounds %struct.workspacedef, ptr %840, i32 0, i32 5
  %842 = load i64, ptr %841, align 8, !tbaa !53
  %843 = add nsw i64 %842, %838
  store i64 %843, ptr %841, align 8, !tbaa !53
  br label %844

844:                                              ; preds = %817, %799
  %845 = load ptr, ptr %38, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.rinfodef, ptr %845, i32 0, i32 3
  %847 = load ptr, ptr %846, align 8, !tbaa !44
  store ptr %847, ptr %37, align 8, !tbaa !5
  %848 = load i64, ptr %26, align 8, !tbaa !9
  %849 = load i64, ptr %25, align 8, !tbaa !9
  %850 = icmp eq i64 %848, %849
  br i1 %850, label %851, label %899

851:                                              ; preds = %844
  br label %852

852:                                              ; preds = %851
  %853 = load ptr, ptr %32, align 8, !tbaa !5
  %854 = load i64, ptr %14, align 8, !tbaa !9
  %855 = getelementptr inbounds i64, ptr %853, i64 %854
  %856 = load i64, ptr %855, align 8, !tbaa !9
  %857 = load ptr, ptr %38, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.rinfodef, ptr %857, i32 0, i32 1
  %859 = load i64, ptr %858, align 8, !tbaa !40
  %860 = add nsw i64 %859, %856
  store i64 %860, ptr %858, align 8, !tbaa !40
  %861 = load ptr, ptr %32, align 8, !tbaa !5
  %862 = load i64, ptr %14, align 8, !tbaa !9
  %863 = getelementptr inbounds i64, ptr %861, i64 %862
  %864 = load i64, ptr %863, align 8, !tbaa !9
  %865 = load ptr, ptr %38, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.rinfodef, ptr %865, i32 0, i32 0
  %867 = load i64, ptr %866, align 8, !tbaa !42
  %868 = sub nsw i64 %867, %864
  store i64 %868, ptr %866, align 8, !tbaa !42
  br label %869

869:                                              ; preds = %852
  br label %870

870:                                              ; preds = %869
  %871 = load ptr, ptr %38, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.rinfodef, ptr %871, i32 0, i32 1
  %873 = load i64, ptr %872, align 8, !tbaa !40
  %874 = load ptr, ptr %38, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.rinfodef, ptr %874, i32 0, i32 0
  %876 = load i64, ptr %875, align 8, !tbaa !42
  %877 = sub nsw i64 %873, %876
  %878 = icmp sge i64 %877, 0
  br i1 %878, label %879, label %898

879:                                              ; preds = %870
  %880 = load ptr, ptr %35, align 8, !tbaa !5
  %881 = load i64, ptr %12, align 8, !tbaa !9
  %882 = getelementptr inbounds i64, ptr %880, i64 %881
  %883 = load i64, ptr %882, align 8, !tbaa !9
  %884 = icmp eq i64 %883, -1
  br i1 %884, label %885, label %898

885:                                              ; preds = %879
  br label %886

886:                                              ; preds = %885
  %887 = load i64, ptr %12, align 8, !tbaa !9
  %888 = load ptr, ptr %36, align 8, !tbaa !5
  %889 = load i64, ptr %22, align 8, !tbaa !9
  %890 = getelementptr inbounds i64, ptr %888, i64 %889
  store i64 %887, ptr %890, align 8, !tbaa !9
  %891 = load i64, ptr %22, align 8, !tbaa !9
  %892 = add nsw i64 %891, 1
  store i64 %892, ptr %22, align 8, !tbaa !9
  %893 = load ptr, ptr %35, align 8, !tbaa !5
  %894 = load i64, ptr %12, align 8, !tbaa !9
  %895 = getelementptr inbounds i64, ptr %893, i64 %894
  store i64 %891, ptr %895, align 8, !tbaa !9
  br label %896

896:                                              ; preds = %886
  br label %897

897:                                              ; preds = %896
  br label %898

898:                                              ; preds = %897, %879, %870
  br label %967

899:                                              ; preds = %844
  %900 = load i64, ptr %26, align 8, !tbaa !9
  %901 = load i64, ptr %27, align 8, !tbaa !9
  %902 = icmp eq i64 %900, %901
  br i1 %902, label %903, label %966

903:                                              ; preds = %899
  br label %904

904:                                              ; preds = %903
  %905 = load ptr, ptr %32, align 8, !tbaa !5
  %906 = load i64, ptr %14, align 8, !tbaa !9
  %907 = getelementptr inbounds i64, ptr %905, i64 %906
  %908 = load i64, ptr %907, align 8, !tbaa !9
  %909 = load ptr, ptr %38, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.rinfodef, ptr %909, i32 0, i32 0
  %911 = load i64, ptr %910, align 8, !tbaa !42
  %912 = add nsw i64 %911, %908
  store i64 %912, ptr %910, align 8, !tbaa !42
  %913 = load ptr, ptr %32, align 8, !tbaa !5
  %914 = load i64, ptr %14, align 8, !tbaa !9
  %915 = getelementptr inbounds i64, ptr %913, i64 %914
  %916 = load i64, ptr %915, align 8, !tbaa !9
  %917 = load ptr, ptr %38, align 8, !tbaa !5
  %918 = getelementptr inbounds %struct.rinfodef, ptr %917, i32 0, i32 1
  %919 = load i64, ptr %918, align 8, !tbaa !40
  %920 = sub nsw i64 %919, %916
  store i64 %920, ptr %918, align 8, !tbaa !40
  br label %921

921:                                              ; preds = %904
  br label %922

922:                                              ; preds = %921
  %923 = load ptr, ptr %38, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.rinfodef, ptr %923, i32 0, i32 1
  %925 = load i64, ptr %924, align 8, !tbaa !40
  %926 = load ptr, ptr %38, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.rinfodef, ptr %926, i32 0, i32 0
  %928 = load i64, ptr %927, align 8, !tbaa !42
  %929 = sub nsw i64 %925, %928
  %930 = icmp slt i64 %929, 0
  br i1 %930, label %931, label %965

931:                                              ; preds = %922
  %932 = load ptr, ptr %35, align 8, !tbaa !5
  %933 = load i64, ptr %12, align 8, !tbaa !9
  %934 = getelementptr inbounds i64, ptr %932, i64 %933
  %935 = load i64, ptr %934, align 8, !tbaa !9
  %936 = icmp ne i64 %935, -1
  br i1 %936, label %937, label %965

937:                                              ; preds = %931
  br label %938

938:                                              ; preds = %937
  %939 = load ptr, ptr %36, align 8, !tbaa !5
  %940 = load i64, ptr %22, align 8, !tbaa !9
  %941 = add nsw i64 %940, -1
  store i64 %941, ptr %22, align 8, !tbaa !9
  %942 = getelementptr inbounds i64, ptr %939, i64 %941
  %943 = load i64, ptr %942, align 8, !tbaa !9
  %944 = load ptr, ptr %36, align 8, !tbaa !5
  %945 = load ptr, ptr %35, align 8, !tbaa !5
  %946 = load i64, ptr %12, align 8, !tbaa !9
  %947 = getelementptr inbounds i64, ptr %945, i64 %946
  %948 = load i64, ptr %947, align 8, !tbaa !9
  %949 = getelementptr inbounds i64, ptr %944, i64 %948
  store i64 %943, ptr %949, align 8, !tbaa !9
  %950 = load ptr, ptr %35, align 8, !tbaa !5
  %951 = load i64, ptr %12, align 8, !tbaa !9
  %952 = getelementptr inbounds i64, ptr %950, i64 %951
  %953 = load i64, ptr %952, align 8, !tbaa !9
  %954 = load ptr, ptr %35, align 8, !tbaa !5
  %955 = load ptr, ptr %36, align 8, !tbaa !5
  %956 = load i64, ptr %22, align 8, !tbaa !9
  %957 = getelementptr inbounds i64, ptr %955, i64 %956
  %958 = load i64, ptr %957, align 8, !tbaa !9
  %959 = getelementptr inbounds i64, ptr %954, i64 %958
  store i64 %953, ptr %959, align 8, !tbaa !9
  %960 = load ptr, ptr %35, align 8, !tbaa !5
  %961 = load i64, ptr %12, align 8, !tbaa !9
  %962 = getelementptr inbounds i64, ptr %960, i64 %961
  store i64 -1, ptr %962, align 8, !tbaa !9
  br label %963

963:                                              ; preds = %938
  br label %964

964:                                              ; preds = %963
  br label %965

965:                                              ; preds = %964, %931, %922
  br label %966

966:                                              ; preds = %965, %899
  br label %967

967:                                              ; preds = %966, %898
  %968 = load i64, ptr %26, align 8, !tbaa !9
  %969 = load i64, ptr %25, align 8, !tbaa !9
  %970 = icmp ne i64 %968, %969
  br i1 %970, label %971, label %1024

971:                                              ; preds = %967
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %972

972:                                              ; preds = %1020, %971
  %973 = load i64, ptr %16, align 8, !tbaa !9
  %974 = load ptr, ptr %38, align 8, !tbaa !5
  %975 = getelementptr inbounds %struct.rinfodef, ptr %974, i32 0, i32 2
  %976 = load i64, ptr %975, align 8, !tbaa !45
  %977 = icmp slt i64 %973, %976
  br i1 %977, label %978, label %1023

978:                                              ; preds = %972
  %979 = load ptr, ptr %37, align 8, !tbaa !5
  %980 = load i64, ptr %16, align 8, !tbaa !9
  %981 = getelementptr inbounds %struct.edegreedef, ptr %979, i64 %980
  %982 = getelementptr inbounds %struct.edegreedef, ptr %981, i32 0, i32 0
  %983 = load i64, ptr %982, align 8, !tbaa !46
  %984 = load i64, ptr %25, align 8, !tbaa !9
  %985 = icmp eq i64 %983, %984
  br i1 %985, label %986, label %1019

986:                                              ; preds = %978
  %987 = load ptr, ptr %37, align 8, !tbaa !5
  %988 = load i64, ptr %16, align 8, !tbaa !9
  %989 = getelementptr inbounds %struct.edegreedef, ptr %987, i64 %988
  %990 = getelementptr inbounds %struct.edegreedef, ptr %989, i32 0, i32 1
  %991 = load i64, ptr %990, align 8, !tbaa !48
  %992 = load ptr, ptr %32, align 8, !tbaa !5
  %993 = load i64, ptr %14, align 8, !tbaa !9
  %994 = getelementptr inbounds i64, ptr %992, i64 %993
  %995 = load i64, ptr %994, align 8, !tbaa !9
  %996 = icmp eq i64 %991, %995
  br i1 %996, label %997, label %1007

997:                                              ; preds = %986
  %998 = load ptr, ptr %37, align 8, !tbaa !5
  %999 = load i64, ptr %16, align 8, !tbaa !9
  %1000 = getelementptr inbounds %struct.edegreedef, ptr %998, i64 %999
  %1001 = load ptr, ptr %37, align 8, !tbaa !5
  %1002 = load ptr, ptr %38, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.rinfodef, ptr %1002, i32 0, i32 2
  %1004 = load i64, ptr %1003, align 8, !tbaa !45
  %1005 = add nsw i64 %1004, -1
  store i64 %1005, ptr %1003, align 8, !tbaa !45
  %1006 = getelementptr inbounds %struct.edegreedef, ptr %1001, i64 %1005
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1000, ptr align 8 %1006, i64 16, i1 false), !tbaa.struct !51
  br label %1018

1007:                                             ; preds = %986
  %1008 = load ptr, ptr %32, align 8, !tbaa !5
  %1009 = load i64, ptr %14, align 8, !tbaa !9
  %1010 = getelementptr inbounds i64, ptr %1008, i64 %1009
  %1011 = load i64, ptr %1010, align 8, !tbaa !9
  %1012 = load ptr, ptr %37, align 8, !tbaa !5
  %1013 = load i64, ptr %16, align 8, !tbaa !9
  %1014 = getelementptr inbounds %struct.edegreedef, ptr %1012, i64 %1013
  %1015 = getelementptr inbounds %struct.edegreedef, ptr %1014, i32 0, i32 1
  %1016 = load i64, ptr %1015, align 8, !tbaa !48
  %1017 = sub nsw i64 %1016, %1011
  store i64 %1017, ptr %1015, align 8, !tbaa !48
  br label %1018

1018:                                             ; preds = %1007, %997
  br label %1023

1019:                                             ; preds = %978
  br label %1020

1020:                                             ; preds = %1019
  %1021 = load i64, ptr %16, align 8, !tbaa !9
  %1022 = add nsw i64 %1021, 1
  store i64 %1022, ptr %16, align 8, !tbaa !9
  br label %972, !llvm.loop !54

1023:                                             ; preds = %1018, %972
  br label %1024

1024:                                             ; preds = %1023, %967
  %1025 = load i64, ptr %26, align 8, !tbaa !9
  %1026 = load i64, ptr %27, align 8, !tbaa !9
  %1027 = icmp ne i64 %1025, %1026
  br i1 %1027, label %1028, label %1084

1028:                                             ; preds = %1024
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %1029

1029:                                             ; preds = %1055, %1028
  %1030 = load i64, ptr %16, align 8, !tbaa !9
  %1031 = load ptr, ptr %38, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.rinfodef, ptr %1031, i32 0, i32 2
  %1033 = load i64, ptr %1032, align 8, !tbaa !45
  %1034 = icmp slt i64 %1030, %1033
  br i1 %1034, label %1035, label %1058

1035:                                             ; preds = %1029
  %1036 = load ptr, ptr %37, align 8, !tbaa !5
  %1037 = load i64, ptr %16, align 8, !tbaa !9
  %1038 = getelementptr inbounds %struct.edegreedef, ptr %1036, i64 %1037
  %1039 = getelementptr inbounds %struct.edegreedef, ptr %1038, i32 0, i32 0
  %1040 = load i64, ptr %1039, align 8, !tbaa !46
  %1041 = load i64, ptr %27, align 8, !tbaa !9
  %1042 = icmp eq i64 %1040, %1041
  br i1 %1042, label %1043, label %1054

1043:                                             ; preds = %1035
  %1044 = load ptr, ptr %32, align 8, !tbaa !5
  %1045 = load i64, ptr %14, align 8, !tbaa !9
  %1046 = getelementptr inbounds i64, ptr %1044, i64 %1045
  %1047 = load i64, ptr %1046, align 8, !tbaa !9
  %1048 = load ptr, ptr %37, align 8, !tbaa !5
  %1049 = load i64, ptr %16, align 8, !tbaa !9
  %1050 = getelementptr inbounds %struct.edegreedef, ptr %1048, i64 %1049
  %1051 = getelementptr inbounds %struct.edegreedef, ptr %1050, i32 0, i32 1
  %1052 = load i64, ptr %1051, align 8, !tbaa !48
  %1053 = add nsw i64 %1052, %1047
  store i64 %1053, ptr %1051, align 8, !tbaa !48
  br label %1058

1054:                                             ; preds = %1035
  br label %1055

1055:                                             ; preds = %1054
  %1056 = load i64, ptr %16, align 8, !tbaa !9
  %1057 = add nsw i64 %1056, 1
  store i64 %1057, ptr %16, align 8, !tbaa !9
  br label %1029, !llvm.loop !55

1058:                                             ; preds = %1043, %1029
  %1059 = load i64, ptr %16, align 8, !tbaa !9
  %1060 = load ptr, ptr %38, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.rinfodef, ptr %1060, i32 0, i32 2
  %1062 = load i64, ptr %1061, align 8, !tbaa !45
  %1063 = icmp eq i64 %1059, %1062
  br i1 %1063, label %1064, label %1083

1064:                                             ; preds = %1058
  %1065 = load i64, ptr %27, align 8, !tbaa !9
  %1066 = load ptr, ptr %37, align 8, !tbaa !5
  %1067 = load ptr, ptr %38, align 8, !tbaa !5
  %1068 = getelementptr inbounds %struct.rinfodef, ptr %1067, i32 0, i32 2
  %1069 = load i64, ptr %1068, align 8, !tbaa !45
  %1070 = getelementptr inbounds %struct.edegreedef, ptr %1066, i64 %1069
  %1071 = getelementptr inbounds %struct.edegreedef, ptr %1070, i32 0, i32 0
  store i64 %1065, ptr %1071, align 8, !tbaa !46
  %1072 = load ptr, ptr %32, align 8, !tbaa !5
  %1073 = load i64, ptr %14, align 8, !tbaa !9
  %1074 = getelementptr inbounds i64, ptr %1072, i64 %1073
  %1075 = load i64, ptr %1074, align 8, !tbaa !9
  %1076 = load ptr, ptr %37, align 8, !tbaa !5
  %1077 = load ptr, ptr %38, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.rinfodef, ptr %1077, i32 0, i32 2
  %1079 = load i64, ptr %1078, align 8, !tbaa !45
  %1080 = add nsw i64 %1079, 1
  store i64 %1080, ptr %1078, align 8, !tbaa !45
  %1081 = getelementptr inbounds %struct.edegreedef, ptr %1076, i64 %1079
  %1082 = getelementptr inbounds %struct.edegreedef, ptr %1081, i32 0, i32 1
  store i64 %1075, ptr %1082, align 8, !tbaa !48
  br label %1083

1083:                                             ; preds = %1064, %1058
  br label %1084

1084:                                             ; preds = %1083, %1024
  br label %1085

1085:                                             ; preds = %1084
  %1086 = load i64, ptr %14, align 8, !tbaa !9
  %1087 = add nsw i64 %1086, 1
  store i64 %1087, ptr %14, align 8, !tbaa !9
  br label %791, !llvm.loop !56

1088:                                             ; preds = %791
  %1089 = load i64, ptr %21, align 8, !tbaa !9
  %1090 = add nsw i64 %1089, 1
  store i64 %1090, ptr %21, align 8, !tbaa !9
  br label %1091

1091:                                             ; preds = %1088, %373
  br label %1092

1092:                                             ; preds = %1091, %639, %491, %421, %372
  %1093 = load i64, ptr %13, align 8, !tbaa !9
  %1094 = add nsw i64 %1093, 1
  store i64 %1094, ptr %13, align 8, !tbaa !9
  br label %358, !llvm.loop !57

1095:                                             ; preds = %358
  %1096 = load i64, ptr %22, align 8, !tbaa !9
  %1097 = load ptr, ptr %7, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.graphdef, ptr %1097, i32 0, i32 20
  store i64 %1096, ptr %1098, align 8, !tbaa !36
  %1099 = load ptr, ptr %6, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.controldef, ptr %1099, i32 0, i32 1
  %1101 = load i64, ptr %1100, align 8, !tbaa !32
  %1102 = and i64 %1101, 8
  %1103 = icmp ne i64 %1102, 0
  br i1 %1103, label %1104, label %1148

1104:                                             ; preds = %1095
  %1105 = load ptr, ptr %39, align 8, !tbaa !5
  %1106 = load i64, ptr %20, align 8, !tbaa !9
  %1107 = load i64, ptr %8, align 8, !tbaa !9
  %1108 = mul nsw i64 %1106, %1107
  %1109 = load ptr, ptr %39, align 8, !tbaa !5
  %1110 = call i64 @gk_fargmin(i64 noundef %1108, ptr noundef %1109)
  %1111 = getelementptr inbounds float, ptr %1105, i64 %1110
  %1112 = load float, ptr %1111, align 4, !tbaa !22
  %1113 = fpext float %1112 to double
  %1114 = load ptr, ptr %39, align 8, !tbaa !5
  %1115 = load i64, ptr %20, align 8, !tbaa !9
  %1116 = load i64, ptr %8, align 8, !tbaa !9
  %1117 = mul nsw i64 %1115, %1116
  %1118 = load ptr, ptr %39, align 8, !tbaa !5
  %1119 = call i64 @gk_fargmax(i64 noundef %1117, ptr noundef %1118)
  %1120 = getelementptr inbounds float, ptr %1114, i64 %1119
  %1121 = load float, ptr %1120, align 4, !tbaa !22
  %1122 = fpext float %1121 to double
  %1123 = load i64, ptr %22, align 8, !tbaa !9
  %1124 = load i64, ptr %21, align 8, !tbaa !9
  %1125 = load ptr, ptr %7, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.graphdef, ptr %1125, i32 0, i32 16
  %1127 = load i64, ptr %1126, align 8, !tbaa !37
  %1128 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, double noundef %1113, double noundef %1122, i64 noundef %1123, i64 noundef %1124, i64 noundef %1127)
  %1129 = load i64, ptr %20, align 8, !tbaa !9
  %1130 = load i64, ptr %8, align 8, !tbaa !9
  %1131 = load ptr, ptr %39, align 8, !tbaa !5
  %1132 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 0
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %1129, i64 noundef %1130, ptr noundef %1131, ptr noundef %1132)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %1133

1133:                                             ; preds = %1143, %1104
  %1134 = load i64, ptr %11, align 8, !tbaa !9
  %1135 = load i64, ptr %20, align 8, !tbaa !9
  %1136 = icmp slt i64 %1134, %1135
  br i1 %1136, label %1137, label %1146

1137:                                             ; preds = %1133
  %1138 = load i64, ptr %11, align 8, !tbaa !9
  %1139 = getelementptr inbounds [16 x float], ptr %46, i64 0, i64 %1138
  %1140 = load float, ptr %1139, align 4, !tbaa !22
  %1141 = fpext float %1140 to double
  %1142 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, double noundef %1141)
  br label %1143

1143:                                             ; preds = %1137
  %1144 = load i64, ptr %11, align 8, !tbaa !9
  %1145 = add nsw i64 %1144, 1
  store i64 %1145, ptr %11, align 8, !tbaa !9
  br label %1133, !llvm.loop !58

1146:                                             ; preds = %1133
  %1147 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2)
  br label %1148

1148:                                             ; preds = %1146, %1095
  %1149 = load ptr, ptr %7, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.graphdef, ptr %1149, i32 0, i32 16
  %1151 = load i64, ptr %1150, align 8, !tbaa !37
  %1152 = load i64, ptr %28, align 8, !tbaa !9
  %1153 = icmp eq i64 %1151, %1152
  br i1 %1153, label %1154, label %1155

1154:                                             ; preds = %1148
  br label %1159

1155:                                             ; preds = %1148
  br label %1156

1156:                                             ; preds = %1155
  %1157 = load i64, ptr %18, align 8, !tbaa !9
  %1158 = add nsw i64 %1157, 1
  store i64 %1158, ptr %18, align 8, !tbaa !9
  br label %345, !llvm.loop !59

1159:                                             ; preds = %1154, %345
  %1160 = load ptr, ptr %6, align 8, !tbaa !5
  %1161 = load i64, ptr %20, align 8, !tbaa !9
  %1162 = load i64, ptr %8, align 8, !tbaa !9
  %1163 = mul nsw i64 %1161, %1162
  call void @fwspacefree(ptr noundef %1160, i64 noundef %1163)
  %1164 = load ptr, ptr %6, align 8, !tbaa !5
  %1165 = load i64, ptr %20, align 8, !tbaa !9
  %1166 = load i64, ptr %8, align 8, !tbaa !9
  %1167 = mul nsw i64 %1165, %1166
  call void @fwspacefree(ptr noundef %1164, i64 noundef %1167)
  %1168 = load ptr, ptr %6, align 8, !tbaa !5
  %1169 = load i64, ptr %19, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1168, i64 noundef %1169)
  call void @llvm.lifetime.end.p0(i64 64, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #2

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

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

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

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

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

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

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


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

%struct.rinfodef = type { i64, i64, i64, ptr }
%struct.edegreedef = type { i64, i64 }

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

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

.lr.ph.preheader:                                 ; preds = %5
  %33 = add nsw i64 %11, -1
  %xtraiter = and i64 %33, 1
  %34 = icmp eq i64 %11, 2
  br i1 %34, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

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

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

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

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

.lr.ph519.preheader:                              ; preds = %._crit_edge
  %min.iters.check = icmp ult i64 %11, 8
  br i1 %min.iters.check, label %.lr.ph519.preheader673, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph519.preheader
  %n.vec = and i64 %11, 9223372036854775800
  br label %vector.body

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %11, %n.vec
  br i1 %cmp.n, label %._crit_edge520, label %.lr.ph519.preheader673

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

.lr.ph519:                                        ; preds = %.lr.ph519.preheader673, %.lr.ph519
  %.1437517 = phi i64 [ %68, %.lr.ph519 ], [ %.1437517.ph, %.lr.ph519.preheader673 ]
  %64 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %.1437517
  %65 = load float, ptr %64, align 4, !tbaa !20
  %66 = getelementptr inbounds float, ptr %3, i64 %.1437517
  %67 = load float, ptr %66, align 4, !tbaa !20
  %.inv = fcmp oge float %65, %67
  %. = select i1 %.inv, float %65, float %67
  store float %., ptr %64, align 4, !tbaa !20
  %68 = add nuw nsw i64 %.1437517, 1
  %exitcond595.not = icmp eq i64 %68, %11
  br i1 %exitcond595.not, label %._crit_edge520, label %.lr.ph519, !llvm.loop !27

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

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

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

.preheader500.us.preheader:                       ; preds = %.preheader500.lr.ph
  %71 = sub i64 %28, %30
  %72 = sub i64 %30, %7
  %73 = shl i64 %11, 2
  %74 = sub i64 %28, %7
  %min.iters.check639 = icmp ult i64 %11, 4
  %diff.check = icmp ult i64 %71, 16
  %n.vec642 = and i64 %11, 9223372036854775804
  %broadcast.splatinsert = insertelement <4 x float> poison, float %70, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n648 = icmp eq i64 %11, %n.vec642
  %xtraiter677 = and i64 %11, 1
  %lcmp.mod678.not = icmp eq i64 %xtraiter677, 0
  br label %.preheader500.us

.preheader500.us:                                 ; preds = %.preheader500.us.preheader, %._crit_edge523.us
  %.2524.us = phi i64 [ %115, %._crit_edge523.us ], [ 0, %.preheader500.us.preheader ]
  %75 = mul nuw nsw i64 %.2524.us, %11
  br i1 %min.iters.check639, label %scalar.ph638.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader500.us
  %76 = mul i64 %73, %.2524.us
  %77 = add i64 %74, %76
  %78 = add i64 %72, %76
  %diff.check634 = icmp ult i64 %78, 16
  %conflict.rdx = or i1 %diff.check, %diff.check634
  %diff.check635 = icmp ult i64 %77, 16
  %conflict.rdx636 = or i1 %conflict.rdx, %diff.check635
  br i1 %conflict.rdx636, label %scalar.ph638.preheader, label %vector.body644

vector.body644:                                   ; preds = %vector.memcheck, %vector.body644
  %index645 = phi i64 [ %index.next647, %vector.body644 ], [ 0, %vector.memcheck ]
  %79 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %index645
  %wide.load646 = load <4 x float>, ptr %79, align 16, !tbaa !20
  %80 = fdiv <4 x float> %wide.load646, %broadcast.splat
  %81 = add nuw nsw i64 %index645, %75
  %82 = getelementptr inbounds float, ptr %29, i64 %81
  store <4 x float> %80, ptr %82, align 4, !tbaa !20
  %83 = fmul <4 x float> %wide.load646, %broadcast.splat
  %84 = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %83
  %85 = getelementptr inbounds float, ptr %27, i64 %81
  store <4 x float> %84, ptr %85, align 4, !tbaa !20
  %index.next647 = add nuw i64 %index645, 4
  %86 = icmp eq i64 %index.next647, %n.vec642
  br i1 %86, label %middle.block637, label %vector.body644, !llvm.loop !28

middle.block637:                                  ; preds = %vector.body644
  br i1 %cmp.n648, label %._crit_edge523.us, label %scalar.ph638.preheader

scalar.ph638.preheader:                           ; preds = %middle.block637, %vector.memcheck, %.preheader500.us
  %.0439521.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader500.us ], [ %n.vec642, %middle.block637 ]
  %.neg686 = or disjoint i64 %.0439521.us.ph, 1
  br i1 %lcmp.mod678.not, label %scalar.ph638.prol.loopexit, label %scalar.ph638.prol

scalar.ph638.prol:                                ; preds = %scalar.ph638.preheader
  %87 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %.0439521.us.ph
  %88 = load float, ptr %87, align 16, !tbaa !20
  %89 = fdiv float %88, %70
  %90 = add nuw nsw i64 %.0439521.us.ph, %75
  %91 = getelementptr inbounds float, ptr %29, i64 %90
  store float %89, ptr %91, align 4, !tbaa !20
  %92 = fmul float %88, %70
  %93 = fdiv float 1.000000e+00, %92
  %94 = getelementptr inbounds float, ptr %27, i64 %90
  store float %93, ptr %94, align 4, !tbaa !20
  %95 = or disjoint i64 %.0439521.us.ph, 1
  br label %scalar.ph638.prol.loopexit

scalar.ph638.prol.loopexit:                       ; preds = %scalar.ph638.prol, %scalar.ph638.preheader
  %.0439521.us.unr = phi i64 [ %.0439521.us.ph, %scalar.ph638.preheader ], [ %95, %scalar.ph638.prol ]
  %96 = icmp eq i64 %11, %.neg686
  br i1 %96, label %._crit_edge523.us, label %scalar.ph638

scalar.ph638:                                     ; preds = %scalar.ph638.prol.loopexit, %scalar.ph638
  %.0439521.us = phi i64 [ %114, %scalar.ph638 ], [ %.0439521.us.unr, %scalar.ph638.prol.loopexit ]
  %97 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %.0439521.us
  %98 = load float, ptr %97, align 4, !tbaa !20
  %99 = fdiv float %98, %70
  %100 = add nuw nsw i64 %.0439521.us, %75
  %101 = getelementptr inbounds float, ptr %29, i64 %100
  store float %99, ptr %101, align 4, !tbaa !20
  %102 = fmul float %98, %70
  %103 = fdiv float 1.000000e+00, %102
  %104 = getelementptr inbounds float, ptr %27, i64 %100
  store float %103, ptr %104, align 4, !tbaa !20
  %105 = add nuw nsw i64 %.0439521.us, 1
  %106 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %105
  %107 = load float, ptr %106, align 4, !tbaa !20
  %108 = fdiv float %107, %70
  %109 = add nuw nsw i64 %105, %75
  %110 = getelementptr inbounds float, ptr %29, i64 %109
  store float %108, ptr %110, align 4, !tbaa !20
  %111 = fmul float %107, %70
  %112 = fdiv float 1.000000e+00, %111
  %113 = getelementptr inbounds float, ptr %27, i64 %109
  store float %112, ptr %113, align 4, !tbaa !20
  %114 = add nuw nsw i64 %.0439521.us, 2
  %exitcond596.not.1 = icmp eq i64 %114, %11
  br i1 %exitcond596.not.1, label %._crit_edge523.us, label %scalar.ph638, !llvm.loop !29

._crit_edge523.us:                                ; preds = %scalar.ph638.prol.loopexit, %scalar.ph638, %middle.block637
  %115 = add nuw nsw i64 %.2524.us, 1
  %exitcond597.not = icmp eq i64 %115, %2
  br i1 %exitcond597.not, label %.loopexit499, label %.preheader500.us, !llvm.loop !30

116:                                              ; preds = %._crit_edge520
  %117 = load float, ptr %6, align 16, !tbaa !20
  br i1 %32, label %.lr.ph528.preheader, label %.preheader498

.lr.ph528.preheader:                              ; preds = %116
  %118 = add nsw i64 %11, -1
  %119 = add nsw i64 %11, -2
  %xtraiter679 = and i64 %118, 3
  %120 = icmp ult i64 %119, 3
  br i1 %120, label %.preheader498.loopexit.unr-lcssa, label %.lr.ph528.preheader.new

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

.preheader498.loopexit.unr-lcssa:                 ; preds = %.lr.ph528, %.lr.ph528.preheader
  %..1.lcssa.ph = phi float [ poison, %.lr.ph528.preheader ], [ %..1.3, %.lr.ph528 ]
  %.1526.unr = phi float [ %117, %.lr.ph528.preheader ], [ %..1.3, %.lr.ph528 ]
  %.3525.unr = phi i64 [ 1, %.lr.ph528.preheader ], [ %176, %.lr.ph528 ]
  %lcmp.mod680.not = icmp eq i64 %xtraiter679, 0
  br i1 %lcmp.mod680.not, label %.preheader498, label %.lr.ph528.epil

.lr.ph528.epil:                                   ; preds = %.preheader498.loopexit.unr-lcssa, %.lr.ph528.epil
  %.1526.epil = phi float [ %..1.epil, %.lr.ph528.epil ], [ %.1526.unr, %.preheader498.loopexit.unr-lcssa ]
  %.3525.epil = phi i64 [ %124, %.lr.ph528.epil ], [ %.3525.unr, %.preheader498.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph528.epil ], [ 0, %.preheader498.loopexit.unr-lcssa ]
  %121 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %.3525.epil
  %122 = load float, ptr %121, align 4, !tbaa !20
  %123 = fcmp ogt float %122, %.1526.epil
  %..1.epil = select i1 %123, float %122, float %.1526.epil
  %124 = add nuw nsw i64 %.3525.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter679
  br i1 %epil.iter.cmp.not, label %.preheader498, label %.lr.ph528.epil, !llvm.loop !31

.preheader498:                                    ; preds = %.preheader498.loopexit.unr-lcssa, %.lr.ph528.epil, %116
  %.1.lcssa = phi float [ %117, %116 ], [ %..1.lcssa.ph, %.preheader498.loopexit.unr-lcssa ], [ %..1.epil, %.lr.ph528.epil ]
  %125 = icmp sgt i64 %2, 0
  br i1 %125, label %.preheader497.lr.ph, label %.loopexit499

.preheader497.lr.ph:                              ; preds = %.preheader498
  %126 = uitofp nneg i64 %2 to float
  %127 = fdiv float %.1.lcssa, %126
  %128 = fmul float %.1.lcssa, %126
  %129 = fdiv float 1.000000e+00, %128
  br i1 %54, label %.preheader497.us.preheader, label %.loopexit499

.preheader497.us.preheader:                       ; preds = %.preheader497.lr.ph
  %130 = sub i64 %28, %30
  %min.iters.check653 = icmp ult i64 %11, 8
  %diff.check650 = icmp ult i64 %130, 32
  %or.cond666 = select i1 %min.iters.check653, i1 true, i1 %diff.check650
  %n.vec656 = and i64 %11, 9223372036854775800
  %broadcast.splatinsert660 = insertelement <4 x float> poison, float %127, i64 0
  %broadcast.splat661 = shufflevector <4 x float> %broadcast.splatinsert660, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert662 = insertelement <4 x float> poison, float %129, i64 0
  %broadcast.splat663 = shufflevector <4 x float> %broadcast.splatinsert662, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n665 = icmp eq i64 %11, %n.vec656
  %xtraiter684 = and i64 %11, 3
  %lcmp.mod685.not = icmp eq i64 %xtraiter684, 0
  br label %.preheader497.us

.preheader497.us:                                 ; preds = %.preheader497.us.preheader, %._crit_edge532.us
  %.4533.us = phi i64 [ %160, %._crit_edge532.us ], [ 0, %.preheader497.us.preheader ]
  %131 = mul nuw nsw i64 %.4533.us, %11
  br i1 %or.cond666, label %scalar.ph652.preheader, label %vector.body658

vector.body658:                                   ; preds = %.preheader497.us, %vector.body658
  %index659 = phi i64 [ %index.next664, %vector.body658 ], [ 0, %.preheader497.us ]
  %132 = add nuw nsw i64 %index659, %131
  %133 = getelementptr inbounds float, ptr %29, i64 %132
  %134 = getelementptr inbounds i8, ptr %133, i64 16
  store <4 x float> %broadcast.splat661, ptr %133, align 4, !tbaa !20
  store <4 x float> %broadcast.splat661, ptr %134, align 4, !tbaa !20
  %135 = getelementptr inbounds float, ptr %27, i64 %132
  %136 = getelementptr inbounds i8, ptr %135, i64 16
  store <4 x float> %broadcast.splat663, ptr %135, align 4, !tbaa !20
  store <4 x float> %broadcast.splat663, ptr %136, align 4, !tbaa !20
  %index.next664 = add nuw i64 %index659, 8
  %137 = icmp eq i64 %index.next664, %n.vec656
  br i1 %137, label %middle.block651, label %vector.body658, !llvm.loop !33

middle.block651:                                  ; preds = %vector.body658
  br i1 %cmp.n665, label %._crit_edge532.us, label %scalar.ph652.preheader

scalar.ph652.preheader:                           ; preds = %middle.block651, %.preheader497.us
  %.1440530.us.ph = phi i64 [ 0, %.preheader497.us ], [ %n.vec656, %middle.block651 ]
  br i1 %lcmp.mod685.not, label %scalar.ph652.prol.loopexit, label %scalar.ph652.prol

scalar.ph652.prol:                                ; preds = %scalar.ph652.preheader, %scalar.ph652.prol
  %.1440530.us.prol = phi i64 [ %141, %scalar.ph652.prol ], [ %.1440530.us.ph, %scalar.ph652.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph652.prol ], [ 0, %scalar.ph652.preheader ]
  %138 = add nuw nsw i64 %.1440530.us.prol, %131
  %139 = getelementptr inbounds float, ptr %29, i64 %138
  store float %127, ptr %139, align 4, !tbaa !20
  %140 = getelementptr inbounds float, ptr %27, i64 %138
  store float %129, ptr %140, align 4, !tbaa !20
  %141 = add nuw nsw i64 %.1440530.us.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter684
  br i1 %prol.iter.cmp.not, label %scalar.ph652.prol.loopexit, label %scalar.ph652.prol, !llvm.loop !34

scalar.ph652.prol.loopexit:                       ; preds = %scalar.ph652.prol, %scalar.ph652.preheader
  %.1440530.us.unr = phi i64 [ %.1440530.us.ph, %scalar.ph652.preheader ], [ %141, %scalar.ph652.prol ]
  %142 = sub nsw i64 %.1440530.us.ph, %11
  %143 = icmp ugt i64 %142, -4
  br i1 %143, label %._crit_edge532.us, label %scalar.ph652

scalar.ph652:                                     ; preds = %scalar.ph652.prol.loopexit, %scalar.ph652
  %.1440530.us = phi i64 [ %159, %scalar.ph652 ], [ %.1440530.us.unr, %scalar.ph652.prol.loopexit ]
  %144 = add nuw nsw i64 %.1440530.us, %131
  %145 = getelementptr inbounds float, ptr %29, i64 %144
  store float %127, ptr %145, align 4, !tbaa !20
  %146 = getelementptr inbounds float, ptr %27, i64 %144
  store float %129, ptr %146, align 4, !tbaa !20
  %147 = add nuw nsw i64 %.1440530.us, 1
  %148 = add nuw nsw i64 %147, %131
  %149 = getelementptr inbounds float, ptr %29, i64 %148
  store float %127, ptr %149, align 4, !tbaa !20
  %150 = getelementptr inbounds float, ptr %27, i64 %148
  store float %129, ptr %150, align 4, !tbaa !20
  %151 = add nuw nsw i64 %.1440530.us, 2
  %152 = add nuw nsw i64 %151, %131
  %153 = getelementptr inbounds float, ptr %29, i64 %152
  store float %127, ptr %153, align 4, !tbaa !20
  %154 = getelementptr inbounds float, ptr %27, i64 %152
  store float %129, ptr %154, align 4, !tbaa !20
  %155 = add nuw nsw i64 %.1440530.us, 3
  %156 = add nuw nsw i64 %155, %131
  %157 = getelementptr inbounds float, ptr %29, i64 %156
  store float %127, ptr %157, align 4, !tbaa !20
  %158 = getelementptr inbounds float, ptr %27, i64 %156
  store float %129, ptr %158, align 4, !tbaa !20
  %159 = add nuw nsw i64 %.1440530.us, 4
  %exitcond599.not.3 = icmp eq i64 %159, %11
  br i1 %exitcond599.not.3, label %._crit_edge532.us, label %scalar.ph652, !llvm.loop !35

._crit_edge532.us:                                ; preds = %scalar.ph652.prol.loopexit, %scalar.ph652, %middle.block651
  %160 = add nuw nsw i64 %.4533.us, 1
  %exitcond600.not = icmp eq i64 %160, %2
  br i1 %exitcond600.not, label %.loopexit499, label %.preheader497.us, !llvm.loop !36

.lr.ph528:                                        ; preds = %.lr.ph528, %.lr.ph528.preheader.new
  %.1526 = phi float [ %117, %.lr.ph528.preheader.new ], [ %..1.3, %.lr.ph528 ]
  %.3525 = phi i64 [ 1, %.lr.ph528.preheader.new ], [ %176, %.lr.ph528 ]
  %niter683 = phi i64 [ 0, %.lr.ph528.preheader.new ], [ %niter683.next.3, %.lr.ph528 ]
  %161 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %.3525
  %162 = load float, ptr %161, align 4, !tbaa !20
  %163 = fcmp ogt float %162, %.1526
  %..1 = select i1 %163, float %162, float %.1526
  %164 = add nuw nsw i64 %.3525, 1
  %165 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %164
  %166 = load float, ptr %165, align 4, !tbaa !20
  %167 = fcmp ogt float %166, %..1
  %..1.1 = select i1 %167, float %166, float %..1
  %168 = add nuw nsw i64 %.3525, 2
  %169 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %168
  %170 = load float, ptr %169, align 4, !tbaa !20
  %171 = fcmp ogt float %170, %..1.1
  %..1.2 = select i1 %171, float %170, float %..1.1
  %172 = add nuw nsw i64 %.3525, 3
  %173 = getelementptr inbounds [16 x float], ptr %6, i64 0, i64 %172
  %174 = load float, ptr %173, align 4, !tbaa !20
  %175 = fcmp ogt float %174, %..1.2
  %..1.3 = select i1 %175, float %174, float %..1.2
  %176 = add nuw nsw i64 %.3525, 4
  %niter683.next.3 = add i64 %niter683, 4
  %niter683.ncmp.3 = icmp eq i64 %niter683.next.3, %unroll_iter682
  br i1 %niter683.ncmp.3, label %.preheader498.loopexit.unr-lcssa, label %.lr.ph528, !llvm.loop !37

.loopexit499:                                     ; preds = %._crit_edge523.us, %._crit_edge532.us, %.preheader497.lr.ph, %.preheader500.lr.ph, %.preheader501, %.preheader498
  %177 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %9) #5
  %178 = getelementptr inbounds i8, ptr %0, i64 8
  %179 = load i64, ptr %178, align 8, !tbaa !38
  %180 = and i64 %179, 8
  %.not = icmp eq i64 %180, 0
  br i1 %.not, label %202, label %181

181:                                              ; preds = %.loopexit499
  %182 = call i64 @gk_fargmin(i64 noundef %26, ptr noundef %25) #5
  %183 = getelementptr inbounds float, ptr %25, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !20
  %185 = fpext float %184 to double
  %186 = call i64 @gk_fargmax(i64 noundef %26, ptr noundef %25) #5
  %187 = getelementptr inbounds float, ptr %25, i64 %186
  %188 = load float, ptr %187, align 4, !tbaa !20
  %189 = fpext float %188 to double
  %190 = load i64, ptr %1, align 8, !tbaa !5
  %191 = getelementptr inbounds i8, ptr %1, i64 144
  %192 = load i64, ptr %191, align 8, !tbaa !42
  %193 = getelementptr inbounds i8, ptr %1, i64 112
  %194 = load i64, ptr %193, align 8, !tbaa !43
  %195 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, double noundef %185, double noundef %189, i64 noundef %190, i64 noundef %192, i64 noundef %194) #5
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %11, i64 noundef %2, ptr noundef %25, ptr noundef nonnull %8)
  br i1 %54, label %.lr.ph536, label %._crit_edge537

.lr.ph536:                                        ; preds = %181, %.lr.ph536
  %.5534 = phi i64 [ %200, %.lr.ph536 ], [ 0, %181 ]
  %196 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %.5534
  %197 = load float, ptr %196, align 4, !tbaa !20
  %198 = fpext float %197 to double
  %199 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %198) #5
  %200 = add nuw nsw i64 %.5534, 1
  %exitcond601.not = icmp eq i64 %200, %11
  br i1 %exitcond601.not, label %._crit_edge537, label %.lr.ph536, !llvm.loop !44

._crit_edge537:                                   ; preds = %.lr.ph536, %181
  %201 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2) #5
  br label %202

202:                                              ; preds = %._crit_edge537, %.loopexit499
  %203 = icmp sgt i64 %4, 0
  br i1 %203, label %.lr.ph583, label %._crit_edge584

.lr.ph583:                                        ; preds = %202
  %204 = getelementptr inbounds i8, ptr %1, i64 112
  %205 = getelementptr inbounds i8, ptr %1, i64 144
  %206 = getelementptr inbounds i8, ptr %1, i64 184
  %207 = getelementptr inbounds i8, ptr %1, i64 216
  %208 = getelementptr inbounds i8, ptr %0, i64 112
  %209 = getelementptr inbounds i8, ptr %0, i64 128
  %.pre = load i64, ptr %204, align 8, !tbaa !43
  br label %210

210:                                              ; preds = %472, %.lr.ph583
  %211 = phi i64 [ %.pre, %.lr.ph583 ], [ %473, %472 ]
  %.0448581 = phi i64 [ 0, %.lr.ph583 ], [ %475, %472 ]
  %212 = load i64, ptr %205, align 8, !tbaa !42
  call void @libmetis__RandomPermute(i64 noundef %212, ptr noundef %177, i64 noundef 1) #5
  %213 = load i64, ptr %205, align 8, !tbaa !42
  %214 = icmp sgt i64 %213, 0
  br i1 %214, label %.lr.ph573, label %._crit_edge574

.lr.ph573:                                        ; preds = %210, %._crit_edge541.thread
  %.0438571 = phi i64 [ %450, %._crit_edge541.thread ], [ 0, %210 ]
  %.0449570 = phi i64 [ %.1450, %._crit_edge541.thread ], [ 0, %210 ]
  %.0451569 = phi i64 [ %.4455, %._crit_edge541.thread ], [ %212, %210 ]
  %215 = getelementptr inbounds i64, ptr %177, i64 %.0438571
  %216 = load i64, ptr %215, align 8, !tbaa !45
  %.not476 = icmp slt i64 %216, %.0451569
  br i1 %.not476, label %217, label %._crit_edge541.thread

217:                                              ; preds = %.lr.ph573
  %218 = getelementptr inbounds i64, ptr %21, i64 %216
  %219 = load i64, ptr %218, align 8, !tbaa !45
  %220 = load ptr, ptr %206, align 8, !tbaa !46
  %221 = getelementptr inbounds %struct.rinfodef, ptr %220, i64 %219
  %222 = getelementptr inbounds i8, ptr %221, i64 8
  %223 = load i64, ptr %222, align 8, !tbaa !47
  %224 = load i64, ptr %221, align 8, !tbaa !49
  %.not477 = icmp slt i64 %223, %224
  br i1 %.not477, label %._crit_edge541.thread, label %225

225:                                              ; preds = %217
  %226 = getelementptr inbounds i64, ptr %23, i64 %219
  %227 = load i64, ptr %226, align 8, !tbaa !45
  %228 = load ptr, ptr %207, align 8, !tbaa !50
  %229 = mul nsw i64 %219, %11
  %230 = getelementptr inbounds float, ptr %228, i64 %229
  %231 = icmp sgt i64 %224, 0
  %232 = mul nsw i64 %227, %11
  br i1 %231, label %233, label %._crit_edge613

233:                                              ; preds = %225
  %234 = getelementptr inbounds float, ptr %25, i64 %232
  %235 = getelementptr inbounds float, ptr %27, i64 %232
  %236 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %11, float noundef 1.000000e+00, ptr noundef %234, float noundef -1.000000e+00, ptr noundef %230, ptr noundef %235)
  %.not478 = icmp eq i64 %236, 0
  br i1 %.not478, label %._crit_edge613, label %._crit_edge541.thread

._crit_edge613:                                   ; preds = %225, %233
  %237 = getelementptr inbounds i8, ptr %221, i64 24
  %238 = load ptr, ptr %237, align 8, !tbaa !51
  %239 = getelementptr inbounds i8, ptr %221, i64 16
  %240 = load i64, ptr %239, align 8, !tbaa !52
  %241 = getelementptr inbounds float, ptr %25, i64 %232
  %242 = icmp sgt i64 %240, 0
  br i1 %242, label %.lr.ph540, label %._crit_edge541

.lr.ph540:                                        ; preds = %._crit_edge613, %255
  %.0443538 = phi i64 [ %256, %255 ], [ 0, %._crit_edge613 ]
  %243 = getelementptr inbounds %struct.edegreedef, ptr %238, i64 %.0443538
  %244 = getelementptr inbounds i8, ptr %243, i64 8
  %245 = load i64, ptr %244, align 8, !tbaa !53
  %246 = load i64, ptr %221, align 8, !tbaa !49
  %.not479 = icmp slt i64 %245, %246
  br i1 %.not479, label %255, label %247

247:                                              ; preds = %.lr.ph540
  %248 = load i64, ptr %243, align 8, !tbaa !55
  %249 = mul nsw i64 %248, %11
  %250 = getelementptr inbounds float, ptr %25, i64 %249
  %251 = getelementptr inbounds float, ptr %29, i64 %249
  %252 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %11, float noundef 1.000000e+00, ptr noundef %250, float noundef 1.000000e+00, ptr noundef %230, ptr noundef %251)
  %.not480 = icmp eq i64 %252, 0
  br i1 %.not480, label %253, label %._crit_edge541

253:                                              ; preds = %247
  %254 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %11, i64 noundef %2, ptr noundef %241, ptr noundef %250, ptr noundef %230, ptr noundef nonnull %6)
  %.not481 = icmp eq i64 %254, 0
  br i1 %.not481, label %255, label %._crit_edge541

255:                                              ; preds = %.lr.ph540, %253
  %256 = add nuw nsw i64 %.0443538, 1
  %exitcond602.not = icmp eq i64 %256, %240
  br i1 %exitcond602.not, label %._crit_edge541.thread, label %.lr.ph540, !llvm.loop !56

._crit_edge541:                                   ; preds = %253, %247, %._crit_edge613
  %.0443.lcssa = phi i64 [ 0, %._crit_edge613 ], [ %.0443538, %247 ], [ %.0443538, %253 ]
  %257 = icmp eq i64 %.0443.lcssa, %240
  br i1 %257, label %._crit_edge541.thread, label %.preheader496

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

.lr.ph550:                                        ; preds = %.preheader496, %286
  %.2441549 = phi i64 [ %.2441, %286 ], [ %.2441547, %.preheader496 ]
  %.1444548 = phi i64 [ %.2445, %286 ], [ %.0443.lcssa, %.preheader496 ]
  %259 = getelementptr inbounds %struct.edegreedef, ptr %238, i64 %.2441549
  %260 = load i64, ptr %259, align 8, !tbaa !55
  %261 = getelementptr inbounds i8, ptr %259, i64 8
  %262 = load i64, ptr %261, align 8, !tbaa !53
  %263 = getelementptr inbounds %struct.edegreedef, ptr %238, i64 %.1444548
  %264 = getelementptr inbounds i8, ptr %263, i64 8
  %265 = load i64, ptr %264, align 8, !tbaa !53
  %266 = icmp sgt i64 %262, %265
  br i1 %266, label %267, label %274

267:                                              ; preds = %.lr.ph550
  %268 = mul nsw i64 %260, %11
  %269 = getelementptr inbounds float, ptr %25, i64 %268
  %270 = getelementptr inbounds float, ptr %29, i64 %268
  %271 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %11, float noundef 1.000000e+00, ptr noundef %269, float noundef 1.000000e+00, ptr noundef %230, ptr noundef %270)
  %.not489 = icmp eq i64 %271, 0
  br i1 %.not489, label %272, label %285

272:                                              ; preds = %267
  %273 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %11, i64 noundef %2, ptr noundef %241, ptr noundef %269, ptr noundef %230, ptr noundef nonnull %6)
  %.not490 = icmp eq i64 %273, 0
  br i1 %.not490, label %._crit_edge608, label %285

._crit_edge608:                                   ; preds = %272
  %.pre609 = load i64, ptr %261, align 8, !tbaa !53
  %.pre610 = load i64, ptr %264, align 8, !tbaa !53
  br label %274

274:                                              ; preds = %._crit_edge608, %.lr.ph550
  %275 = phi i64 [ %.pre610, %._crit_edge608 ], [ %265, %.lr.ph550 ]
  %276 = phi i64 [ %.pre609, %._crit_edge608 ], [ %262, %.lr.ph550 ]
  %277 = icmp eq i64 %276, %275
  br i1 %277, label %278, label %286

278:                                              ; preds = %274
  %279 = load i64, ptr %263, align 8, !tbaa !55
  %280 = mul nsw i64 %279, %11
  %281 = getelementptr inbounds float, ptr %25, i64 %280
  %282 = mul nsw i64 %260, %11
  %283 = getelementptr inbounds float, ptr %25, i64 %282
  %284 = call i64 @libmetis__IsHBalanceBetterTT(i64 noundef %11, i64 noundef %2, ptr noundef %281, ptr noundef %283, ptr noundef %230, ptr noundef nonnull %6)
  %.not491 = icmp eq i64 %284, 0
  br i1 %.not491, label %286, label %285

285:                                              ; preds = %278, %272, %267
  br label %286

286:                                              ; preds = %274, %278, %285
  %.2445 = phi i64 [ %.2441549, %285 ], [ %.1444548, %278 ], [ %.1444548, %274 ]
  %.2441 = add i64 %.2441549, 1
  %exitcond603.not = icmp eq i64 %.2441, %240
  br i1 %exitcond603.not, label %._crit_edge551, label %.lr.ph550, !llvm.loop !57

._crit_edge551:                                   ; preds = %286, %.preheader496
  %.1444.lcssa = phi i64 [ %.0443.lcssa, %.preheader496 ], [ %.2445, %286 ]
  %287 = getelementptr inbounds %struct.edegreedef, ptr %238, i64 %.1444.lcssa
  %288 = load i64, ptr %287, align 8, !tbaa !55
  %289 = getelementptr inbounds i8, ptr %287, i64 8
  %290 = load i64, ptr %289, align 8, !tbaa !53
  %291 = load i64, ptr %221, align 8, !tbaa !49
  %292 = icmp eq i64 %290, %291
  br i1 %292, label %293, label %300

293:                                              ; preds = %._crit_edge551
  %294 = mul nsw i64 %288, %11
  %295 = getelementptr inbounds float, ptr %25, i64 %294
  %296 = call i64 @libmetis__IsHBalanceBetterFT(i64 noundef %11, i64 noundef %2, ptr noundef %241, ptr noundef %295, ptr noundef %230, ptr noundef nonnull %6)
  %.not482 = icmp eq i64 %296, 0
  br i1 %.not482, label %297, label %300

297:                                              ; preds = %293
  %298 = getelementptr inbounds float, ptr %29, i64 %232
  %299 = call i64 @libmetis__AreAllHVwgtsBelow(i64 noundef %11, float noundef 1.000000e+00, ptr noundef %241, float noundef 0.000000e+00, ptr noundef %241, ptr noundef %298)
  %.not483 = icmp eq i64 %299, 0
  br i1 %.not483, label %300, label %._crit_edge541.thread

300:                                              ; preds = %297, %293, %._crit_edge551
  %301 = load i64, ptr %289, align 8, !tbaa !53
  %302 = load i64, ptr %221, align 8, !tbaa !49
  %.neg = sub i64 %302, %301
  %303 = load i64, ptr %204, align 8, !tbaa !43
  %304 = add i64 %.neg, %303
  store i64 %304, ptr %204, align 8, !tbaa !43
  %305 = load i64, ptr %178, align 8, !tbaa !38
  %306 = and i64 %305, 32
  %.not484 = icmp eq i64 %306, 0
  br i1 %.not484, label %310, label %307

307:                                              ; preds = %300
  %308 = sub nsw i64 %301, %302
  %309 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %219, i64 noundef %288, i64 noundef %308, i64 noundef %304) #5
  br label %310

310:                                              ; preds = %307, %300
  %311 = mul nsw i64 %288, %11
  %312 = getelementptr inbounds float, ptr %25, i64 %311
  %313 = call ptr @gk_faxpy(i64 noundef %11, float noundef 1.000000e+00, ptr noundef %230, i64 noundef 1, ptr noundef %312, i64 noundef 1) #5
  %314 = call ptr @gk_faxpy(i64 noundef %11, float noundef -1.000000e+00, ptr noundef %230, i64 noundef 1, ptr noundef %241, i64 noundef 1) #5
  store i64 %288, ptr %226, align 8, !tbaa !45
  %315 = load i64, ptr %221, align 8, !tbaa !49
  %316 = load i64, ptr %289, align 8, !tbaa !53
  %317 = sub i64 %315, %316
  %318 = load i64, ptr %222, align 8, !tbaa !47
  %319 = add nsw i64 %317, %318
  store i64 %319, ptr %222, align 8, !tbaa !47
  store i64 %316, ptr %221, align 8, !tbaa !49
  store i64 %315, ptr %289, align 8, !tbaa !53
  %320 = icmp eq i64 %315, 0
  br i1 %320, label %321, label %325

321:                                              ; preds = %310
  %322 = load i64, ptr %239, align 8, !tbaa !52
  %323 = add nsw i64 %322, -1
  store i64 %323, ptr %239, align 8, !tbaa !52
  %324 = getelementptr inbounds %struct.edegreedef, ptr %238, i64 %323
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %287, ptr noundef nonnull align 8 dereferenceable(16) %324, i64 16, i1 false), !tbaa.struct !58
  %.pre611 = load i64, ptr %222, align 8, !tbaa !47
  %.pre612 = load i64, ptr %221, align 8, !tbaa !49
  br label %326

325:                                              ; preds = %310
  store i64 %227, ptr %287, align 8, !tbaa !55
  br label %326

326:                                              ; preds = %325, %321
  %327 = phi i64 [ %316, %325 ], [ %.pre612, %321 ]
  %328 = phi i64 [ %319, %325 ], [ %.pre611, %321 ]
  %329 = icmp slt i64 %328, %327
  br i1 %329, label %330, label %339

330:                                              ; preds = %326
  %331 = add nsw i64 %.0451569, -1
  %332 = getelementptr inbounds i64, ptr %21, i64 %331
  %333 = load i64, ptr %332, align 8, !tbaa !45
  %334 = getelementptr inbounds i64, ptr %19, i64 %219
  %335 = load i64, ptr %334, align 8, !tbaa !45
  %336 = getelementptr inbounds i64, ptr %21, i64 %335
  store i64 %333, ptr %336, align 8, !tbaa !45
  %337 = load i64, ptr %334, align 8, !tbaa !45
  %338 = getelementptr inbounds i64, ptr %19, i64 %333
  store i64 %337, ptr %338, align 8, !tbaa !45
  store i64 -1, ptr %334, align 8, !tbaa !45
  br label %339

339:                                              ; preds = %330, %326
  %.1452 = phi i64 [ %331, %330 ], [ %.0451569, %326 ]
  %340 = getelementptr inbounds i64, ptr %13, i64 %219
  %341 = load i64, ptr %340, align 8, !tbaa !45
  %342 = getelementptr i8, ptr %340, i64 8
  %343 = load i64, ptr %342, align 8, !tbaa !45
  %344 = icmp slt i64 %341, %343
  br i1 %344, label %.lr.ph566, label %._crit_edge567

.lr.ph566:                                        ; preds = %339, %445
  %.3442561 = phi i64 [ %446, %445 ], [ %341, %339 ]
  %.2453560 = phi i64 [ %.3454493, %445 ], [ %.1452, %339 ]
  %345 = getelementptr inbounds i64, ptr %15, i64 %.3442561
  %346 = load i64, ptr %345, align 8, !tbaa !45
  %347 = getelementptr inbounds i64, ptr %23, i64 %346
  %348 = load i64, ptr %347, align 8, !tbaa !45
  %349 = load ptr, ptr %206, align 8, !tbaa !46
  %350 = getelementptr inbounds %struct.rinfodef, ptr %349, i64 %346
  %351 = getelementptr inbounds i8, ptr %350, i64 24
  %352 = load ptr, ptr %351, align 8, !tbaa !51
  %353 = icmp eq ptr %352, null
  br i1 %353, label %354, label %364

354:                                              ; preds = %.lr.ph566
  %355 = load ptr, ptr %208, align 8, !tbaa !59
  %356 = load i64, ptr %209, align 8, !tbaa !60
  %357 = getelementptr inbounds %struct.edegreedef, ptr %355, i64 %356
  store ptr %357, ptr %351, align 8, !tbaa !51
  %358 = getelementptr i64, ptr %13, i64 %346
  %359 = getelementptr i8, ptr %358, i64 8
  %360 = load i64, ptr %359, align 8, !tbaa !45
  %361 = load i64, ptr %358, align 8, !tbaa !45
  %362 = add i64 %360, %356
  %363 = sub i64 %362, %361
  store i64 %363, ptr %209, align 8, !tbaa !60
  br label %364

364:                                              ; preds = %354, %.lr.ph566
  %365 = phi ptr [ %357, %354 ], [ %352, %.lr.ph566 ]
  %366 = icmp eq i64 %348, %227
  br i1 %366, label %367, label %383

367:                                              ; preds = %364
  %368 = getelementptr inbounds i64, ptr %17, i64 %.3442561
  %369 = load i64, ptr %368, align 8, !tbaa !45
  %370 = getelementptr inbounds i8, ptr %350, i64 8
  %371 = load i64, ptr %370, align 8, !tbaa !47
  %372 = add nsw i64 %371, %369
  store i64 %372, ptr %370, align 8, !tbaa !47
  %373 = load i64, ptr %368, align 8, !tbaa !45
  %374 = load i64, ptr %350, align 8, !tbaa !49
  %375 = sub nsw i64 %374, %373
  store i64 %375, ptr %350, align 8, !tbaa !49
  %.not486 = icmp slt i64 %372, %375
  br i1 %.not486, label %.thread, label %376

376:                                              ; preds = %367
  %377 = getelementptr inbounds i64, ptr %19, i64 %346
  %378 = load i64, ptr %377, align 8, !tbaa !45
  %379 = icmp eq i64 %378, -1
  br i1 %379, label %380, label %.thread

380:                                              ; preds = %376
  %381 = getelementptr inbounds i64, ptr %21, i64 %.2453560
  store i64 %346, ptr %381, align 8, !tbaa !45
  %382 = add nsw i64 %.2453560, 1
  store i64 %.2453560, ptr %377, align 8, !tbaa !45
  br label %.thread

383:                                              ; preds = %364
  %384 = icmp eq i64 %348, %288
  br i1 %384, label %385, label %405

385:                                              ; preds = %383
  %386 = getelementptr inbounds i64, ptr %17, i64 %.3442561
  %387 = load i64, ptr %386, align 8, !tbaa !45
  %388 = load i64, ptr %350, align 8, !tbaa !49
  %389 = add nsw i64 %388, %387
  store i64 %389, ptr %350, align 8, !tbaa !49
  %390 = load i64, ptr %386, align 8, !tbaa !45
  %391 = getelementptr inbounds i8, ptr %350, i64 8
  %392 = load i64, ptr %391, align 8, !tbaa !47
  %393 = sub nsw i64 %392, %390
  store i64 %393, ptr %391, align 8, !tbaa !47
  %394 = icmp slt i64 %393, %389
  br i1 %394, label %395, label %405

395:                                              ; preds = %385
  %396 = getelementptr inbounds i64, ptr %19, i64 %346
  %397 = load i64, ptr %396, align 8, !tbaa !45
  %.not485 = icmp eq i64 %397, -1
  br i1 %.not485, label %405, label %398

398:                                              ; preds = %395
  %399 = add nsw i64 %.2453560, -1
  %400 = getelementptr inbounds i64, ptr %21, i64 %399
  %401 = load i64, ptr %400, align 8, !tbaa !45
  %402 = getelementptr inbounds i64, ptr %21, i64 %397
  store i64 %401, ptr %402, align 8, !tbaa !45
  %403 = load i64, ptr %396, align 8, !tbaa !45
  %404 = getelementptr inbounds i64, ptr %19, i64 %401
  store i64 %403, ptr %404, align 8, !tbaa !45
  store i64 -1, ptr %396, align 8, !tbaa !45
  br label %405

405:                                              ; preds = %383, %398, %395, %385
  %.3454 = phi i64 [ %399, %398 ], [ %.2453560, %395 ], [ %.2453560, %385 ], [ %.2453560, %383 ]
  %406 = getelementptr inbounds i8, ptr %350, i64 16
  %407 = load i64, ptr %406, align 8, !tbaa !52
  %408 = icmp sgt i64 %407, 0
  br i1 %408, label %.lr.ph555, label %.thread

409:                                              ; preds = %.lr.ph555
  %410 = add nuw nsw i64 %.3446553, 1
  %exitcond604.not = icmp eq i64 %410, %407
  br i1 %exitcond604.not, label %.thread, label %.lr.ph555, !llvm.loop !61

.lr.ph555:                                        ; preds = %405, %409
  %.3446553 = phi i64 [ %410, %409 ], [ 0, %405 ]
  %411 = getelementptr inbounds %struct.edegreedef, ptr %365, i64 %.3446553
  %412 = load i64, ptr %411, align 8, !tbaa !55
  %413 = icmp eq i64 %412, %227
  br i1 %413, label %414, label %409

414:                                              ; preds = %.lr.ph555
  %415 = getelementptr inbounds i8, ptr %411, i64 8
  %416 = load i64, ptr %415, align 8, !tbaa !53
  %417 = getelementptr inbounds i64, ptr %17, i64 %.3442561
  %418 = load i64, ptr %417, align 8, !tbaa !45
  %419 = icmp eq i64 %416, %418
  br i1 %419, label %420, label %423

420:                                              ; preds = %414
  %421 = add nsw i64 %407, -1
  store i64 %421, ptr %406, align 8, !tbaa !52
  %422 = getelementptr inbounds %struct.edegreedef, ptr %365, i64 %421
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %411, ptr noundef nonnull align 8 dereferenceable(16) %422, i64 16, i1 false), !tbaa.struct !58
  br label %.thread

423:                                              ; preds = %414
  %424 = sub nsw i64 %416, %418
  store i64 %424, ptr %415, align 8, !tbaa !53
  br label %.thread

.thread:                                          ; preds = %409, %405, %380, %376, %367, %423, %420
  %.3454493 = phi i64 [ %.3454, %423 ], [ %.3454, %420 ], [ %.2453560, %367 ], [ %.2453560, %376 ], [ %382, %380 ], [ %.3454, %405 ], [ %.3454, %409 ]
  %.not488 = icmp eq i64 %348, %288
  br i1 %.not488, label %445, label %.preheader

.preheader:                                       ; preds = %.thread
  %425 = getelementptr inbounds i8, ptr %350, i64 16
  %426 = load i64, ptr %425, align 8, !tbaa !52
  %427 = icmp sgt i64 %426, 0
  br i1 %427, label %.lr.ph557, label %.loopexit

.lr.ph557:                                        ; preds = %.preheader, %437
  %.4447556 = phi i64 [ %438, %437 ], [ 0, %.preheader ]
  %428 = getelementptr inbounds %struct.edegreedef, ptr %365, i64 %.4447556
  %429 = load i64, ptr %428, align 8, !tbaa !55
  %430 = icmp eq i64 %429, %288
  br i1 %430, label %431, label %437

431:                                              ; preds = %.lr.ph557
  %432 = getelementptr inbounds i64, ptr %17, i64 %.3442561
  %433 = load i64, ptr %432, align 8, !tbaa !45
  %434 = getelementptr inbounds i8, ptr %428, i64 8
  %435 = load i64, ptr %434, align 8, !tbaa !53
  %436 = add nsw i64 %435, %433
  store i64 %436, ptr %434, align 8, !tbaa !53
  br label %.loopexit

437:                                              ; preds = %.lr.ph557
  %438 = add nuw nsw i64 %.4447556, 1
  %exitcond605.not = icmp eq i64 %438, %426
  br i1 %exitcond605.not, label %.loopexit.thread, label %.lr.ph557, !llvm.loop !62

.loopexit:                                        ; preds = %.preheader, %431
  %.4447511 = phi i64 [ %.4447556, %431 ], [ 0, %.preheader ]
  %439 = icmp eq i64 %.4447511, %426
  br i1 %439, label %.loopexit.thread, label %445

.loopexit.thread:                                 ; preds = %437, %.loopexit
  %440 = getelementptr inbounds %struct.edegreedef, ptr %365, i64 %426
  store i64 %288, ptr %440, align 8, !tbaa !55
  %441 = getelementptr inbounds i64, ptr %17, i64 %.3442561
  %442 = load i64, ptr %441, align 8, !tbaa !45
  %443 = add nsw i64 %426, 1
  store i64 %443, ptr %425, align 8, !tbaa !52
  %444 = getelementptr inbounds %struct.edegreedef, ptr %365, i64 %426, i32 1
  store i64 %442, ptr %444, align 8, !tbaa !53
  br label %445

445:                                              ; preds = %.thread, %.loopexit.thread, %.loopexit
  %446 = add nsw i64 %.3442561, 1
  %447 = load i64, ptr %342, align 8, !tbaa !45
  %448 = icmp slt i64 %446, %447
  br i1 %448, label %.lr.ph566, label %._crit_edge567, !llvm.loop !63

._crit_edge567:                                   ; preds = %445, %339
  %.2453.lcssa = phi i64 [ %.1452, %339 ], [ %.3454493, %445 ]
  %449 = add nsw i64 %.0449570, 1
  br label %._crit_edge541.thread

._crit_edge541.thread:                            ; preds = %255, %217, %._crit_edge567, %297, %._crit_edge541, %233, %.lr.ph573
  %.4455 = phi i64 [ %.0451569, %.lr.ph573 ], [ %.0451569, %233 ], [ %.0451569, %._crit_edge541 ], [ %.2453.lcssa, %._crit_edge567 ], [ %.0451569, %297 ], [ %.0451569, %217 ], [ %.0451569, %255 ]
  %.1450 = phi i64 [ %.0449570, %.lr.ph573 ], [ %.0449570, %233 ], [ %.0449570, %._crit_edge541 ], [ %449, %._crit_edge567 ], [ %.0449570, %297 ], [ %.0449570, %217 ], [ %.0449570, %255 ]
  %450 = add nuw nsw i64 %.0438571, 1
  %451 = load i64, ptr %205, align 8, !tbaa !42
  %452 = icmp slt i64 %450, %451
  br i1 %452, label %.lr.ph573, label %._crit_edge574, !llvm.loop !64

._crit_edge574:                                   ; preds = %._crit_edge541.thread, %210
  %.0451.lcssa = phi i64 [ %212, %210 ], [ %.4455, %._crit_edge541.thread ]
  %.0449.lcssa = phi i64 [ 0, %210 ], [ %.1450, %._crit_edge541.thread ]
  store i64 %.0451.lcssa, ptr %205, align 8, !tbaa !42
  %453 = load i64, ptr %178, align 8, !tbaa !38
  %454 = and i64 %453, 8
  %.not475 = icmp eq i64 %454, 0
  br i1 %.not475, label %472, label %455

455:                                              ; preds = %._crit_edge574
  %456 = call i64 @gk_fargmin(i64 noundef %26, ptr noundef %25) #5
  %457 = getelementptr inbounds float, ptr %25, i64 %456
  %458 = load float, ptr %457, align 4, !tbaa !20
  %459 = fpext float %458 to double
  %460 = call i64 @gk_fargmax(i64 noundef %26, ptr noundef %25) #5
  %461 = getelementptr inbounds float, ptr %25, i64 %460
  %462 = load float, ptr %461, align 4, !tbaa !20
  %463 = fpext float %462 to double
  %464 = load i64, ptr %204, align 8, !tbaa !43
  %465 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, double noundef %459, double noundef %463, i64 noundef %.0451.lcssa, i64 noundef %.0449.lcssa, i64 noundef %464) #5
  call void @libmetis__ComputeHKWayLoadImbalance(i64 noundef %11, i64 noundef %2, ptr noundef %25, ptr noundef nonnull %8)
  br i1 %54, label %.lr.ph579, label %._crit_edge580

.lr.ph579:                                        ; preds = %455, %.lr.ph579
  %.6577 = phi i64 [ %470, %.lr.ph579 ], [ 0, %455 ]
  %466 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %.6577
  %467 = load float, ptr %466, align 4, !tbaa !20
  %468 = fpext float %467 to double
  %469 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, double noundef %468) #5
  %470 = add nuw nsw i64 %.6577, 1
  %exitcond606.not = icmp eq i64 %470, %11
  br i1 %exitcond606.not, label %._crit_edge580, label %.lr.ph579, !llvm.loop !65

._crit_edge580:                                   ; preds = %.lr.ph579, %455
  %471 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2) #5
  br label %472

472:                                              ; preds = %._crit_edge580, %._crit_edge574
  %473 = load i64, ptr %204, align 8, !tbaa !43
  %474 = icmp eq i64 %473, %211
  %475 = add nuw nsw i64 %.0448581, 1
  %exitcond607.not = icmp eq i64 %475, %4
  %or.cond = select i1 %474, i1 true, i1 %exitcond607.not
  br i1 %or.cond, label %._crit_edge584, label %210, !llvm.loop !66

._crit_edge584:                                   ; preds = %472, %202
  call void @fwspacefree(ptr noundef %0, i64 noundef %26) #5
  call void @fwspacefree(ptr noundef %0, i64 noundef %26) #5
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %9) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #5
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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


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