; LLVM IR from GGiecold-zz/Cluster_Ensembles :: src/Cluster_Ensembles/Hypergraph_Partitioning/metis-5.1.0/libmetis (balance)

; 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.graph_t = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.ctrl_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, float, ptr, ptr, ptr, float, double, double, double, double, double, double, double, double, double, double, double, double, ptr, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str.1 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [13 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance = external hidden unnamed_addr constant [67 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__McGeneral2WayBalance(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, 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 i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %49)
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 0
  %52 = load i32, ptr %51, align 8, !tbaa !9
  store i32 %52, ptr %13, align 4, !tbaa !12
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graph_t, ptr %53, i32 0, i32 2
  %55 = load i32, ptr %54, align 8, !tbaa !13
  store i32 %55, ptr %14, align 4, !tbaa !12
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graph_t, ptr %56, i32 0, i32 3
  %58 = load ptr, ptr %57, align 8, !tbaa !14
  store ptr %58, ptr %24, align 8, !tbaa !5
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graph_t, ptr %59, i32 0, i32 4
  %61 = load ptr, ptr %60, align 8, !tbaa !15
  store ptr %61, ptr %26, align 8, !tbaa !5
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graph_t, ptr %62, i32 0, i32 6
  %64 = load ptr, ptr %63, align 8, !tbaa !16
  store ptr %64, ptr %25, align 8, !tbaa !5
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.graph_t, ptr %65, i32 0, i32 7
  %67 = load ptr, ptr %66, align 8, !tbaa !17
  store ptr %67, ptr %27, align 8, !tbaa !5
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.graph_t, ptr %68, i32 0, i32 9
  %70 = load ptr, ptr %69, align 8, !tbaa !18
  store ptr %70, ptr %43, align 8, !tbaa !5
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.graph_t, ptr %71, i32 0, i32 19
  %73 = load ptr, ptr %72, align 8, !tbaa !19
  store ptr %73, ptr %28, align 8, !tbaa !5
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.graph_t, ptr %74, i32 0, i32 24
  %76 = load ptr, ptr %75, align 8, !tbaa !20
  store ptr %76, ptr %30, align 8, !tbaa !5
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.graph_t, ptr %77, i32 0, i32 25
  %79 = load ptr, ptr %78, align 8, !tbaa !21
  store ptr %79, ptr %31, align 8, !tbaa !5
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.graph_t, ptr %80, i32 0, i32 20
  %82 = load ptr, ptr %81, align 8, !tbaa !22
  store ptr %82, ptr %29, align 8, !tbaa !5
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.graph_t, ptr %83, i32 0, i32 22
  %85 = load ptr, ptr %84, align 8, !tbaa !23
  store ptr %85, ptr %32, align 8, !tbaa !5
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.graph_t, ptr %86, i32 0, i32 23
  %88 = load ptr, ptr %87, align 8, !tbaa !24
  store ptr %88, ptr %33, align 8, !tbaa !5
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = load i32, ptr %13, align 4, !tbaa !12
  %91 = call ptr @libmetis__iwspacemalloc(ptr noundef %89, i32 noundef %90)
  store ptr %91, ptr %34, align 8, !tbaa !5
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = load i32, ptr %13, align 4, !tbaa !12
  %94 = call ptr @libmetis__iwspacemalloc(ptr noundef %92, i32 noundef %93)
  store ptr %94, ptr %35, align 8, !tbaa !5
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = load i32, ptr %13, align 4, !tbaa !12
  %97 = call ptr @libmetis__iwspacemalloc(ptr noundef %95, i32 noundef %96)
  store ptr %97, ptr %36, align 8, !tbaa !5
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = load i32, ptr %13, align 4, !tbaa !12
  %100 = call ptr @libmetis__iwspacemalloc(ptr noundef %98, i32 noundef %99)
  store ptr %100, ptr %37, align 8, !tbaa !5
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = load i32, ptr %14, align 4, !tbaa !12
  %103 = call ptr @libmetis__rwspacemalloc(ptr noundef %101, i32 noundef %102)
  store ptr %103, ptr %45, align 8, !tbaa !5
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = load i32, ptr %14, align 4, !tbaa !12
  %106 = call ptr @libmetis__rwspacemalloc(ptr noundef %104, i32 noundef %105)
  store ptr %106, ptr %44, align 8, !tbaa !5
  %107 = load ptr, ptr %4, align 8, !tbaa !5
  %108 = load i32, ptr %14, align 4, !tbaa !12
  %109 = mul nsw i32 2, %108
  %110 = call ptr @libmetis__iwspacemalloc(ptr noundef %107, i32 noundef %109)
  store ptr %110, ptr %38, align 8, !tbaa !5
  %111 = load i32, ptr %13, align 4, !tbaa !12
  %112 = sitofp i32 %111 to double
  %113 = fmul double 1.000000e-02, %112
  %114 = fcmp oge double %113, 1.500000e+01
  br i1 %114, label %115, label %119

115:                                              ; preds = %3
  %116 = load i32, ptr %13, align 4, !tbaa !12
  %117 = sitofp i32 %116 to double
  %118 = fmul double 1.000000e-02, %117
  br label %120

119:                                              ; preds = %3
  br label %120

120:                                              ; preds = %119, %115
  %121 = phi double [ %118, %115 ], [ 1.500000e+01, %119 ]
  %122 = fcmp oge double %121, 1.000000e+02
  br i1 %122, label %123, label %124

123:                                              ; preds = %120
  br label %136

124:                                              ; preds = %120
  %125 = load i32, ptr %13, align 4, !tbaa !12
  %126 = sitofp i32 %125 to double
  %127 = fmul double 1.000000e-02, %126
  %128 = fcmp oge double %127, 1.500000e+01
  br i1 %128, label %129, label %133

129:                                              ; preds = %124
  %130 = load i32, ptr %13, align 4, !tbaa !12
  %131 = sitofp i32 %130 to double
  %132 = fmul double 1.000000e-02, %131
  br label %134

133:                                              ; preds = %124
  br label %134

134:                                              ; preds = %133, %129
  %135 = phi double [ %132, %129 ], [ 1.500000e+01, %133 ]
  br label %136

136:                                              ; preds = %134, %123
  %137 = phi double [ 1.000000e+02, %123 ], [ %135, %134 ]
  %138 = fptosi double %137 to i32
  store i32 %138, ptr %21, align 4, !tbaa !12
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = load i32, ptr %14, align 4, !tbaa !12
  %141 = mul nsw i32 2, %140
  %142 = sext i32 %141 to i64
  %143 = mul i64 %142, 8
  %144 = call ptr @libmetis__wspacemalloc(ptr noundef %139, i64 noundef %143)
  store ptr %144, ptr %48, align 8, !tbaa !5
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %145

145:                                              ; preds = %162, %136
  %146 = load i32, ptr %7, align 4, !tbaa !12
  %147 = load i32, ptr %14, align 4, !tbaa !12
  %148 = mul nsw i32 2, %147
  %149 = icmp slt i32 %146, %148
  br i1 %149, label %150, label %165

150:                                              ; preds = %145
  %151 = load i32, ptr %13, align 4, !tbaa !12
  %152 = sext i32 %151 to i64
  %153 = call ptr @libmetis__rpqCreate(i64 noundef %152)
  %154 = load ptr, ptr %48, align 8, !tbaa !5
  %155 = load i32, ptr %7, align 4, !tbaa !12
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds ptr, ptr %154, i64 %156
  store ptr %153, ptr %157, align 8, !tbaa !5
  %158 = load ptr, ptr %38, align 8, !tbaa !5
  %159 = load i32, ptr %7, align 4, !tbaa !12
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i32, ptr %158, i64 %160
  store i32 0, ptr %161, align 4, !tbaa !12
  br label %162

162:                                              ; preds = %150
  %163 = load i32, ptr %7, align 4, !tbaa !12
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %7, align 4, !tbaa !12
  br label %145, !llvm.loop !25

165:                                              ; preds = %145
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %166

166:                                              ; preds = %202, %165
  %167 = load i32, ptr %7, align 4, !tbaa !12
  %168 = load i32, ptr %13, align 4, !tbaa !12
  %169 = icmp slt i32 %167, %168
  br i1 %169, label %170, label %205

170:                                              ; preds = %166
  %171 = load i32, ptr %14, align 4, !tbaa !12
  %172 = sext i32 %171 to i64
  %173 = load ptr, ptr %26, align 8, !tbaa !5
  %174 = load i32, ptr %7, align 4, !tbaa !12
  %175 = load i32, ptr %14, align 4, !tbaa !12
  %176 = mul nsw i32 %174, %175
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i32, ptr %173, i64 %177
  %179 = load ptr, ptr %43, align 8, !tbaa !5
  %180 = call i32 @libmetis__iargmax_nrm(i64 noundef %172, ptr noundef %178, ptr noundef %179)
  %181 = load ptr, ptr %37, align 8, !tbaa !5
  %182 = load i32, ptr %7, align 4, !tbaa !12
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %181, i64 %183
  store i32 %180, ptr %184, align 4, !tbaa !12
  %185 = load ptr, ptr %38, align 8, !tbaa !5
  %186 = load ptr, ptr %37, align 8, !tbaa !5
  %187 = load i32, ptr %7, align 4, !tbaa !12
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %186, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !12
  %191 = mul nsw i32 2, %190
  %192 = load ptr, ptr %28, align 8, !tbaa !5
  %193 = load i32, ptr %7, align 4, !tbaa !12
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds i32, ptr %192, i64 %194
  %196 = load i32, ptr %195, align 4, !tbaa !12
  %197 = add nsw i32 %191, %196
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %185, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !12
  %201 = add nsw i32 %200, 1
  store i32 %201, ptr %199, align 4, !tbaa !12
  br label %202

202:                                              ; preds = %170
  %203 = load i32, ptr %7, align 4, !tbaa !12
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %7, align 4, !tbaa !12
  br label %166, !llvm.loop !27

205:                                              ; preds = %166
  store i32 0, ptr %17, align 4, !tbaa !12
  br label %206

206:                                              ; preds = %357, %205
  %207 = load i32, ptr %17, align 4, !tbaa !12
  %208 = icmp slt i32 %207, 2
  br i1 %208, label %209, label %360

209:                                              ; preds = %206
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %210

210:                                              ; preds = %353, %209
  %211 = load i32, ptr %9, align 4, !tbaa !12
  %212 = load i32, ptr %14, align 4, !tbaa !12
  %213 = icmp slt i32 %211, %212
  br i1 %213, label %214, label %356

214:                                              ; preds = %210
  %215 = load ptr, ptr %38, align 8, !tbaa !5
  %216 = load i32, ptr %9, align 4, !tbaa !12
  %217 = mul nsw i32 2, %216
  %218 = load i32, ptr %17, align 4, !tbaa !12
  %219 = add nsw i32 %217, %218
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i32, ptr %215, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !12
  %223 = icmp eq i32 %222, 0
  br i1 %223, label %224, label %352

224:                                              ; preds = %214
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %225

225:                                              ; preds = %348, %224
  %226 = load i32, ptr %7, align 4, !tbaa !12
  %227 = load i32, ptr %13, align 4, !tbaa !12
  %228 = icmp slt i32 %226, %227
  br i1 %228, label %229, label %351

229:                                              ; preds = %225
  %230 = load ptr, ptr %28, align 8, !tbaa !5
  %231 = load i32, ptr %7, align 4, !tbaa !12
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds i32, ptr %230, i64 %232
  %234 = load i32, ptr %233, align 4, !tbaa !12
  %235 = load i32, ptr %17, align 4, !tbaa !12
  %236 = icmp ne i32 %234, %235
  br i1 %236, label %237, label %238

237:                                              ; preds = %229
  br label %348

238:                                              ; preds = %229
  %239 = load i32, ptr %14, align 4, !tbaa !12
  %240 = sext i32 %239 to i64
  %241 = load ptr, ptr %26, align 8, !tbaa !5
  %242 = load i32, ptr %7, align 4, !tbaa !12
  %243 = load i32, ptr %14, align 4, !tbaa !12
  %244 = mul nsw i32 %242, %243
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %241, i64 %245
  %247 = load ptr, ptr %43, align 8, !tbaa !5
  %248 = call i32 @libmetis__iargmax2_nrm(i64 noundef %240, ptr noundef %246, ptr noundef %247)
  store i32 %248, ptr %10, align 4, !tbaa !12
  %249 = load i32, ptr %10, align 4, !tbaa !12
  %250 = load i32, ptr %9, align 4, !tbaa !12
  %251 = icmp eq i32 %249, %250
  br i1 %251, label %252, label %347

252:                                              ; preds = %238
  %253 = load ptr, ptr %38, align 8, !tbaa !5
  %254 = load ptr, ptr %37, align 8, !tbaa !5
  %255 = load i32, ptr %7, align 4, !tbaa !12
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds i32, ptr %254, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !12
  %259 = mul nsw i32 2, %258
  %260 = load i32, ptr %17, align 4, !tbaa !12
  %261 = add nsw i32 %259, %260
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %253, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !12
  %265 = load ptr, ptr %38, align 8, !tbaa !5
  %266 = load i32, ptr %9, align 4, !tbaa !12
  %267 = mul nsw i32 2, %266
  %268 = load i32, ptr %17, align 4, !tbaa !12
  %269 = add nsw i32 %267, %268
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %265, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !12
  %273 = icmp sgt i32 %264, %272
  br i1 %273, label %274, label %347

274:                                              ; preds = %252
  %275 = load ptr, ptr %26, align 8, !tbaa !5
  %276 = load i32, ptr %7, align 4, !tbaa !12
  %277 = load i32, ptr %14, align 4, !tbaa !12
  %278 = mul nsw i32 %276, %277
  %279 = load ptr, ptr %37, align 8, !tbaa !5
  %280 = load i32, ptr %7, align 4, !tbaa !12
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i32, ptr %279, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !12
  %284 = add nsw i32 %278, %283
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds i32, ptr %275, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !12
  %288 = sitofp i32 %287 to float
  %289 = load ptr, ptr %43, align 8, !tbaa !5
  %290 = load ptr, ptr %37, align 8, !tbaa !5
  %291 = load i32, ptr %7, align 4, !tbaa !12
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %290, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !12
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds float, ptr %289, i64 %295
  %297 = load float, ptr %296, align 4, !tbaa !28
  %298 = fmul float %288, %297
  %299 = fpext float %298 to double
  %300 = load ptr, ptr %26, align 8, !tbaa !5
  %301 = load i32, ptr %7, align 4, !tbaa !12
  %302 = load i32, ptr %14, align 4, !tbaa !12
  %303 = mul nsw i32 %301, %302
  %304 = load i32, ptr %9, align 4, !tbaa !12
  %305 = add nsw i32 %303, %304
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i32, ptr %300, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !12
  %309 = sitofp i32 %308 to double
  %310 = fmul double 1.300000e+00, %309
  %311 = load ptr, ptr %43, align 8, !tbaa !5
  %312 = load i32, ptr %9, align 4, !tbaa !12
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds float, ptr %311, i64 %313
  %315 = load float, ptr %314, align 4, !tbaa !28
  %316 = fpext float %315 to double
  %317 = fmul double %310, %316
  %318 = fcmp olt double %299, %317
  br i1 %318, label %319, label %347

319:                                              ; preds = %274
  %320 = load ptr, ptr %38, align 8, !tbaa !5
  %321 = load ptr, ptr %37, align 8, !tbaa !5
  %322 = load i32, ptr %7, align 4, !tbaa !12
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds i32, ptr %321, i64 %323
  %325 = load i32, ptr %324, align 4, !tbaa !12
  %326 = mul nsw i32 2, %325
  %327 = load i32, ptr %17, align 4, !tbaa !12
  %328 = add nsw i32 %326, %327
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %320, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !12
  %332 = add nsw i32 %331, -1
  store i32 %332, ptr %330, align 4, !tbaa !12
  %333 = load ptr, ptr %38, align 8, !tbaa !5
  %334 = load i32, ptr %9, align 4, !tbaa !12
  %335 = mul nsw i32 2, %334
  %336 = load i32, ptr %17, align 4, !tbaa !12
  %337 = add nsw i32 %335, %336
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %333, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !12
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %339, align 4, !tbaa !12
  %342 = load i32, ptr %9, align 4, !tbaa !12
  %343 = load ptr, ptr %37, align 8, !tbaa !5
  %344 = load i32, ptr %7, align 4, !tbaa !12
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds i32, ptr %343, i64 %345
  store i32 %342, ptr %346, align 4, !tbaa !12
  br label %347

347:                                              ; preds = %319, %274, %252, %238
  br label %348

348:                                              ; preds = %347, %237
  %349 = load i32, ptr %7, align 4, !tbaa !12
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %7, align 4, !tbaa !12
  br label %225, !llvm.loop !30

351:                                              ; preds = %225
  br label %352

352:                                              ; preds = %351, %214
  br label %353

353:                                              ; preds = %352
  %354 = load i32, ptr %9, align 4, !tbaa !12
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %9, align 4, !tbaa !12
  br label %210, !llvm.loop !31

356:                                              ; preds = %210
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %17, align 4, !tbaa !12
  %359 = add nsw i32 %358, 1
  store i32 %359, ptr %17, align 4, !tbaa !12
  br label %206, !llvm.loop !32

360:                                              ; preds = %206
  %361 = load ptr, ptr %5, align 8, !tbaa !5
  %362 = load ptr, ptr %4, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.ctrl_t, ptr %362, i32 0, i32 25
  %364 = load ptr, ptr %363, align 8, !tbaa !33
  %365 = load ptr, ptr %4, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.ctrl_t, ptr %365, i32 0, i32 23
  %367 = load ptr, ptr %366, align 8, !tbaa !37
  %368 = load ptr, ptr %44, align 8, !tbaa !5
  %369 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef %361, i32 noundef 2, ptr noundef %364, ptr noundef %367, ptr noundef %368)
  store float %369, ptr %46, align 4, !tbaa !28
  %370 = load float, ptr %46, align 4, !tbaa !28
  %371 = fpext float %370 to double
  %372 = fcmp ogt double %371, 0.000000e+00
  br i1 %372, label %381, label %373

373:                                              ; preds = %360
  %374 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef 353, ptr noundef @.str.2)
  %375 = load float, ptr %46, align 4, !tbaa !28
  %376 = fpext float %375 to double
  %377 = fcmp ogt double %376, 0.000000e+00
  br i1 %377, label %378, label %379

378:                                              ; preds = %373
  br label %380

379:                                              ; preds = %373
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.2, i32 noundef 353, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

380:                                              ; preds = %378
  br label %381

381:                                              ; preds = %380, %360
  %382 = load ptr, ptr %5, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.graph_t, ptr %382, i32 0, i32 17
  %384 = load i32, ptr %383, align 8, !tbaa !38
  store i32 %384, ptr %40, align 4, !tbaa !12
  store i32 %384, ptr %41, align 4, !tbaa !12
  store i32 -1, ptr %42, align 4, !tbaa !12
  %385 = load ptr, ptr %4, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.ctrl_t, ptr %385, i32 0, i32 2
  %387 = load i32, ptr %386, align 8, !tbaa !39
  %388 = and i32 %387, 8
  %389 = icmp ne i32 %388, 0
  br i1 %389, label %390, label %440

390:                                              ; preds = %381
  %391 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  store i32 0, ptr %11, align 4, !tbaa !12
  br label %392

392:                                              ; preds = %424, %390
  %393 = load i32, ptr %11, align 4, !tbaa !12
  %394 = load i32, ptr %14, align 4, !tbaa !12
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %396, label %427

396:                                              ; preds = %392
  %397 = load ptr, ptr %29, align 8, !tbaa !5
  %398 = load i32, ptr %11, align 4, !tbaa !12
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !12
  %402 = load ptr, ptr %29, align 8, !tbaa !5
  %403 = load i32, ptr %14, align 4, !tbaa !12
  %404 = load i32, ptr %11, align 4, !tbaa !12
  %405 = add nsw i32 %403, %404
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %402, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !12
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = load i32, ptr %11, align 4, !tbaa !12
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds float, ptr %409, i64 %411
  %413 = load float, ptr %412, align 4, !tbaa !28
  %414 = fpext float %413 to double
  %415 = load ptr, ptr %6, align 8, !tbaa !5
  %416 = load i32, ptr %14, align 4, !tbaa !12
  %417 = load i32, ptr %11, align 4, !tbaa !12
  %418 = add nsw i32 %416, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds float, ptr %415, i64 %419
  %421 = load float, ptr %420, align 4, !tbaa !28
  %422 = fpext float %421 to double
  %423 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i32 noundef %401, i32 noundef %408, double noundef %414, double noundef %422)
  br label %424

424:                                              ; preds = %396
  %425 = load i32, ptr %11, align 4, !tbaa !12
  %426 = add nsw i32 %425, 1
  store i32 %426, ptr %11, align 4, !tbaa !12
  br label %392, !llvm.loop !40

427:                                              ; preds = %392
  %428 = load ptr, ptr %5, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.graph_t, ptr %428, i32 0, i32 0
  %430 = load i32, ptr %429, align 8, !tbaa !9
  %431 = load ptr, ptr %5, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.graph_t, ptr %431, i32 0, i32 21
  %433 = load i32, ptr %432, align 8, !tbaa !41
  %434 = load ptr, ptr %5, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.graph_t, ptr %434, i32 0, i32 17
  %436 = load i32, ptr %435, align 8, !tbaa !38
  %437 = load float, ptr %46, align 4, !tbaa !28
  %438 = fpext float %437 to double
  %439 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, i32 noundef %430, i32 noundef %433, i32 noundef %436, double noundef %438)
  br label %440

440:                                              ; preds = %427, %381
  %441 = load i32, ptr %13, align 4, !tbaa !12
  %442 = sext i32 %441 to i64
  %443 = load ptr, ptr %34, align 8, !tbaa !5
  %444 = call ptr @libmetis__iset(i64 noundef %442, i32 noundef -1, ptr noundef %443)
  %445 = load ptr, ptr %5, align 8, !tbaa !5
  %446 = load ptr, ptr %28, align 8, !tbaa !5
  %447 = call i32 @libmetis__ComputeCut(ptr noundef %445, ptr noundef %446)
  %448 = load ptr, ptr %5, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.graph_t, ptr %448, i32 0, i32 17
  %450 = load i32, ptr %449, align 8, !tbaa !38
  %451 = icmp eq i32 %447, %450
  br i1 %451, label %464, label %452

452:                                              ; preds = %440
  %453 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef 369, ptr noundef @.str.2)
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = load ptr, ptr %28, align 8, !tbaa !5
  %456 = call i32 @libmetis__ComputeCut(ptr noundef %454, ptr noundef %455)
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.graph_t, ptr %457, i32 0, i32 17
  %459 = load i32, ptr %458, align 8, !tbaa !38
  %460 = icmp eq i32 %456, %459
  br i1 %460, label %461, label %462

461:                                              ; preds = %452
  br label %463

462:                                              ; preds = %452
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 369, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

463:                                              ; preds = %461
  br label %464

464:                                              ; preds = %463, %440
  %465 = load ptr, ptr %5, align 8, !tbaa !5
  %466 = call i32 @libmetis__CheckBnd(ptr noundef %465)
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %476, label %468

468:                                              ; preds = %464
  %469 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef 370, ptr noundef @.str.2)
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = call i32 @libmetis__CheckBnd(ptr noundef %470)
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %473, label %474

473:                                              ; preds = %468
  br label %475

474:                                              ; preds = %468
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.2, i32 noundef 370, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

475:                                              ; preds = %473
  br label %476

476:                                              ; preds = %475, %464
  %477 = load ptr, ptr %5, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.graph_t, ptr %477, i32 0, i32 21
  %479 = load i32, ptr %478, align 8, !tbaa !41
  store i32 %479, ptr %15, align 4, !tbaa !12
  %480 = load i32, ptr %13, align 4, !tbaa !12
  %481 = load ptr, ptr %36, align 8, !tbaa !5
  %482 = load i32, ptr %13, align 4, !tbaa !12
  %483 = sdiv i32 %482, 10
  call void @libmetis__irandArrayPermute(i32 noundef %480, ptr noundef %481, i32 noundef %483, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !12
  br label %484

484:                                              ; preds = %524, %476
  %485 = load i32, ptr %8, align 4, !tbaa !12
  %486 = load i32, ptr %13, align 4, !tbaa !12
  %487 = icmp slt i32 %485, %486
  br i1 %487, label %488, label %527

488:                                              ; preds = %484
  %489 = load ptr, ptr %36, align 8, !tbaa !5
  %490 = load i32, ptr %8, align 4, !tbaa !12
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %489, i64 %491
  %493 = load i32, ptr %492, align 4, !tbaa !12
  store i32 %493, ptr %7, align 4, !tbaa !12
  %494 = load ptr, ptr %48, align 8, !tbaa !5
  %495 = load ptr, ptr %37, align 8, !tbaa !5
  %496 = load i32, ptr %7, align 4, !tbaa !12
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds i32, ptr %495, i64 %497
  %499 = load i32, ptr %498, align 4, !tbaa !12
  %500 = mul nsw i32 2, %499
  %501 = load ptr, ptr %28, align 8, !tbaa !5
  %502 = load i32, ptr %7, align 4, !tbaa !12
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i32, ptr %501, i64 %503
  %505 = load i32, ptr %504, align 4, !tbaa !12
  %506 = add nsw i32 %500, %505
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds ptr, ptr %494, i64 %507
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  %510 = load i32, ptr %7, align 4, !tbaa !12
  %511 = load ptr, ptr %31, align 8, !tbaa !5
  %512 = load i32, ptr %7, align 4, !tbaa !12
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !12
  %516 = load ptr, ptr %30, align 8, !tbaa !5
  %517 = load i32, ptr %7, align 4, !tbaa !12
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !12
  %521 = sub nsw i32 %515, %520
  %522 = sitofp i32 %521 to float
  %523 = call i32 @libmetis__rpqInsert(ptr noundef %509, i32 noundef %510, float noundef %522)
  br label %524

524:                                              ; preds = %488
  %525 = load i32, ptr %8, align 4, !tbaa !12
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %8, align 4, !tbaa !12
  br label %484, !llvm.loop !42

527:                                              ; preds = %484
  store i32 0, ptr %16, align 4, !tbaa !12
  br label %528

528:                                              ; preds = %1127, %527
  %529 = load i32, ptr %16, align 4, !tbaa !12
  %530 = load i32, ptr %13, align 4, !tbaa !12
  %531 = icmp slt i32 %529, %530
  br i1 %531, label %532, label %1130

532:                                              ; preds = %528
  %533 = load float, ptr %46, align 4, !tbaa !28
  %534 = fpext float %533 to double
  %535 = fcmp ole double %534, 0.000000e+00
  br i1 %535, label %536, label %537

536:                                              ; preds = %532
  br label %1130

537:                                              ; preds = %532
  %538 = load ptr, ptr %5, align 8, !tbaa !5
  %539 = load ptr, ptr %4, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.ctrl_t, ptr %539, i32 0, i32 25
  %541 = load ptr, ptr %540, align 8, !tbaa !33
  %542 = load ptr, ptr %4, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.ctrl_t, ptr %542, i32 0, i32 23
  %544 = load ptr, ptr %543, align 8, !tbaa !37
  %545 = load ptr, ptr %48, align 8, !tbaa !5
  call void @libmetis__SelectQueue(ptr noundef %538, ptr noundef %541, ptr noundef %544, ptr noundef %545, ptr noundef %17, ptr noundef %23)
  %546 = load i32, ptr %17, align 4, !tbaa !12
  %547 = add nsw i32 %546, 1
  %548 = srem i32 %547, 2
  store i32 %548, ptr %18, align 4, !tbaa !12
  %549 = load i32, ptr %17, align 4, !tbaa !12
  %550 = icmp eq i32 %549, -1
  br i1 %550, label %562, label %551

551:                                              ; preds = %537
  %552 = load ptr, ptr %48, align 8, !tbaa !5
  %553 = load i32, ptr %23, align 4, !tbaa !12
  %554 = mul nsw i32 2, %553
  %555 = load i32, ptr %17, align 4, !tbaa !12
  %556 = add nsw i32 %554, %555
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds ptr, ptr %552, i64 %557
  %559 = load ptr, ptr %558, align 8, !tbaa !5
  %560 = call i32 @libmetis__rpqGetTop(ptr noundef %559)
  store i32 %560, ptr %39, align 4, !tbaa !12
  %561 = icmp eq i32 %560, -1
  br i1 %561, label %562, label %563

562:                                              ; preds = %551, %537
  br label %1130

563:                                              ; preds = %551
  %564 = load ptr, ptr %31, align 8, !tbaa !5
  %565 = load i32, ptr %39, align 4, !tbaa !12
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i32, ptr %564, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !12
  %569 = load ptr, ptr %30, align 8, !tbaa !5
  %570 = load i32, ptr %39, align 4, !tbaa !12
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds i32, ptr %569, i64 %571
  %573 = load i32, ptr %572, align 4, !tbaa !12
  %574 = sub nsw i32 %568, %573
  %575 = load i32, ptr %41, align 4, !tbaa !12
  %576 = sub nsw i32 %575, %574
  store i32 %576, ptr %41, align 4, !tbaa !12
  %577 = load i32, ptr %14, align 4, !tbaa !12
  %578 = sext i32 %577 to i64
  %579 = load ptr, ptr %26, align 8, !tbaa !5
  %580 = load i32, ptr %39, align 4, !tbaa !12
  %581 = load i32, ptr %14, align 4, !tbaa !12
  %582 = mul nsw i32 %580, %581
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds i32, ptr %579, i64 %583
  %585 = load ptr, ptr %29, align 8, !tbaa !5
  %586 = load i32, ptr %18, align 4, !tbaa !12
  %587 = load i32, ptr %14, align 4, !tbaa !12
  %588 = mul nsw i32 %586, %587
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds i32, ptr %585, i64 %589
  %591 = call ptr @libmetis__iaxpy(i64 noundef %578, i32 noundef 1, ptr noundef %584, i64 noundef 1, ptr noundef %590, i64 noundef 1)
  %592 = load i32, ptr %14, align 4, !tbaa !12
  %593 = sext i32 %592 to i64
  %594 = load ptr, ptr %26, align 8, !tbaa !5
  %595 = load i32, ptr %39, align 4, !tbaa !12
  %596 = load i32, ptr %14, align 4, !tbaa !12
  %597 = mul nsw i32 %595, %596
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i32, ptr %594, i64 %598
  %600 = load ptr, ptr %29, align 8, !tbaa !5
  %601 = load i32, ptr %17, align 4, !tbaa !12
  %602 = load i32, ptr %14, align 4, !tbaa !12
  %603 = mul nsw i32 %601, %602
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds i32, ptr %600, i64 %604
  %606 = call ptr @libmetis__iaxpy(i64 noundef %593, i32 noundef -1, ptr noundef %599, i64 noundef 1, ptr noundef %605, i64 noundef 1)
  %607 = load ptr, ptr %5, align 8, !tbaa !5
  %608 = load ptr, ptr %4, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.ctrl_t, ptr %608, i32 0, i32 25
  %610 = load ptr, ptr %609, align 8, !tbaa !33
  %611 = load ptr, ptr %4, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.ctrl_t, ptr %611, i32 0, i32 23
  %613 = load ptr, ptr %612, align 8, !tbaa !37
  %614 = load ptr, ptr %45, align 8, !tbaa !5
  %615 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef %607, i32 noundef 2, ptr noundef %610, ptr noundef %613, ptr noundef %614)
  store float %615, ptr %47, align 4, !tbaa !28
  %616 = load float, ptr %47, align 4, !tbaa !28
  %617 = load float, ptr %46, align 4, !tbaa !28
  %618 = fcmp olt float %616, %617
  br i1 %618, label %637, label %619

619:                                              ; preds = %563
  %620 = load float, ptr %47, align 4, !tbaa !28
  %621 = load float, ptr %46, align 4, !tbaa !28
  %622 = fcmp oeq float %620, %621
  br i1 %622, label %623, label %646

623:                                              ; preds = %619
  %624 = load i32, ptr %41, align 4, !tbaa !12
  %625 = load i32, ptr %40, align 4, !tbaa !12
  %626 = icmp slt i32 %624, %625
  br i1 %626, label %637, label %627

627:                                              ; preds = %623
  %628 = load i32, ptr %41, align 4, !tbaa !12
  %629 = load i32, ptr %40, align 4, !tbaa !12
  %630 = icmp eq i32 %628, %629
  br i1 %630, label %631, label %646

631:                                              ; preds = %627
  %632 = load i32, ptr %14, align 4, !tbaa !12
  %633 = load ptr, ptr %44, align 8, !tbaa !5
  %634 = load ptr, ptr %45, align 8, !tbaa !5
  %635 = call i32 @libmetis__BetterBalance2Way(i32 noundef %632, ptr noundef %633, ptr noundef %634)
  %636 = icmp ne i32 %635, 0
  br i1 %636, label %637, label %646

637:                                              ; preds = %631, %623, %563
  %638 = load i32, ptr %41, align 4, !tbaa !12
  store i32 %638, ptr %40, align 4, !tbaa !12
  %639 = load float, ptr %47, align 4, !tbaa !28
  store float %639, ptr %46, align 4, !tbaa !28
  %640 = load i32, ptr %16, align 4, !tbaa !12
  store i32 %640, ptr %42, align 4, !tbaa !12
  %641 = load i32, ptr %14, align 4, !tbaa !12
  %642 = sext i32 %641 to i64
  %643 = load ptr, ptr %45, align 8, !tbaa !5
  %644 = load ptr, ptr %44, align 8, !tbaa !5
  %645 = call ptr @libmetis__rcopy(i64 noundef %642, ptr noundef %643, ptr noundef %644)
  br label %697

646:                                              ; preds = %631, %627, %619
  %647 = load i32, ptr %16, align 4, !tbaa !12
  %648 = load i32, ptr %42, align 4, !tbaa !12
  %649 = sub nsw i32 %647, %648
  %650 = load i32, ptr %21, align 4, !tbaa !12
  %651 = icmp sgt i32 %649, %650
  br i1 %651, label %652, label %696

652:                                              ; preds = %646
  %653 = load ptr, ptr %31, align 8, !tbaa !5
  %654 = load i32, ptr %39, align 4, !tbaa !12
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !12
  %658 = load ptr, ptr %30, align 8, !tbaa !5
  %659 = load i32, ptr %39, align 4, !tbaa !12
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds i32, ptr %658, i64 %660
  %662 = load i32, ptr %661, align 4, !tbaa !12
  %663 = sub nsw i32 %657, %662
  %664 = load i32, ptr %41, align 4, !tbaa !12
  %665 = add nsw i32 %664, %663
  store i32 %665, ptr %41, align 4, !tbaa !12
  %666 = load i32, ptr %14, align 4, !tbaa !12
  %667 = sext i32 %666 to i64
  %668 = load ptr, ptr %26, align 8, !tbaa !5
  %669 = load i32, ptr %39, align 4, !tbaa !12
  %670 = load i32, ptr %14, align 4, !tbaa !12
  %671 = mul nsw i32 %669, %670
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds i32, ptr %668, i64 %672
  %674 = load ptr, ptr %29, align 8, !tbaa !5
  %675 = load i32, ptr %17, align 4, !tbaa !12
  %676 = load i32, ptr %14, align 4, !tbaa !12
  %677 = mul nsw i32 %675, %676
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds i32, ptr %674, i64 %678
  %680 = call ptr @libmetis__iaxpy(i64 noundef %667, i32 noundef 1, ptr noundef %673, i64 noundef 1, ptr noundef %679, i64 noundef 1)
  %681 = load i32, ptr %14, align 4, !tbaa !12
  %682 = sext i32 %681 to i64
  %683 = load ptr, ptr %26, align 8, !tbaa !5
  %684 = load i32, ptr %39, align 4, !tbaa !12
  %685 = load i32, ptr %14, align 4, !tbaa !12
  %686 = mul nsw i32 %684, %685
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds i32, ptr %683, i64 %687
  %689 = load ptr, ptr %29, align 8, !tbaa !5
  %690 = load i32, ptr %18, align 4, !tbaa !12
  %691 = load i32, ptr %14, align 4, !tbaa !12
  %692 = mul nsw i32 %690, %691
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds i32, ptr %689, i64 %693
  %695 = call ptr @libmetis__iaxpy(i64 noundef %682, i32 noundef -1, ptr noundef %688, i64 noundef 1, ptr noundef %694, i64 noundef 1)
  br label %1130

696:                                              ; preds = %646
  br label %697

697:                                              ; preds = %696, %637
  %698 = load i32, ptr %18, align 4, !tbaa !12
  %699 = load ptr, ptr %28, align 8, !tbaa !5
  %700 = load i32, ptr %39, align 4, !tbaa !12
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i32, ptr %699, i64 %701
  store i32 %698, ptr %702, align 4, !tbaa !12
  %703 = load i32, ptr %16, align 4, !tbaa !12
  %704 = load ptr, ptr %34, align 8, !tbaa !5
  %705 = load i32, ptr %39, align 4, !tbaa !12
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i32, ptr %704, i64 %706
  store i32 %703, ptr %707, align 4, !tbaa !12
  %708 = load i32, ptr %39, align 4, !tbaa !12
  %709 = load ptr, ptr %35, align 8, !tbaa !5
  %710 = load i32, ptr %16, align 4, !tbaa !12
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i32, ptr %709, i64 %711
  store i32 %708, ptr %712, align 4, !tbaa !12
  %713 = load ptr, ptr %4, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.ctrl_t, ptr %713, i32 0, i32 2
  %715 = load i32, ptr %714, align 8, !tbaa !39
  %716 = and i32 %715, 32
  %717 = icmp ne i32 %716, 0
  br i1 %717, label %718, label %762

718:                                              ; preds = %697
  %719 = load i32, ptr %39, align 4, !tbaa !12
  %720 = load i32, ptr %17, align 4, !tbaa !12
  %721 = load i32, ptr %23, align 4, !tbaa !12
  %722 = load ptr, ptr %31, align 8, !tbaa !5
  %723 = load i32, ptr %39, align 4, !tbaa !12
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %722, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !12
  %727 = load ptr, ptr %30, align 8, !tbaa !5
  %728 = load i32, ptr %39, align 4, !tbaa !12
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds i32, ptr %727, i64 %729
  %731 = load i32, ptr %730, align 4, !tbaa !12
  %732 = sub nsw i32 %726, %731
  %733 = load i32, ptr %41, align 4, !tbaa !12
  %734 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, i32 noundef %719, i32 noundef %720, i32 noundef %721, i32 noundef %732, i32 noundef %733)
  store i32 0, ptr %11, align 4, !tbaa !12
  br label %735

735:                                              ; preds = %753, %718
  %736 = load i32, ptr %11, align 4, !tbaa !12
  %737 = load i32, ptr %14, align 4, !tbaa !12
  %738 = icmp slt i32 %736, %737
  br i1 %738, label %739, label %756

739:                                              ; preds = %735
  %740 = load ptr, ptr %29, align 8, !tbaa !5
  %741 = load i32, ptr %11, align 4, !tbaa !12
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds i32, ptr %740, i64 %742
  %744 = load i32, ptr %743, align 4, !tbaa !12
  %745 = load ptr, ptr %29, align 8, !tbaa !5
  %746 = load i32, ptr %14, align 4, !tbaa !12
  %747 = load i32, ptr %11, align 4, !tbaa !12
  %748 = add nsw i32 %746, %747
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds i32, ptr %745, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !12
  %752 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, i32 noundef %744, i32 noundef %751)
  br label %753

753:                                              ; preds = %739
  %754 = load i32, ptr %11, align 4, !tbaa !12
  %755 = add nsw i32 %754, 1
  store i32 %755, ptr %11, align 4, !tbaa !12
  br label %735, !llvm.loop !43

756:                                              ; preds = %735
  %757 = load float, ptr %46, align 4, !tbaa !28
  %758 = fpext float %757 to double
  %759 = load float, ptr %47, align 4, !tbaa !28
  %760 = fpext float %759 to double
  %761 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, double noundef %758, double noundef %760)
  br label %762

762:                                              ; preds = %756, %697
  br label %763

763:                                              ; preds = %762
  %764 = load ptr, ptr %30, align 8, !tbaa !5
  %765 = load i32, ptr %39, align 4, !tbaa !12
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds i32, ptr %764, i64 %766
  %768 = load i32, ptr %767, align 4, !tbaa !12
  store i32 %768, ptr %22, align 4, !tbaa !12
  %769 = load ptr, ptr %31, align 8, !tbaa !5
  %770 = load i32, ptr %39, align 4, !tbaa !12
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds i32, ptr %769, i64 %771
  %773 = load i32, ptr %772, align 4, !tbaa !12
  %774 = load ptr, ptr %30, align 8, !tbaa !5
  %775 = load i32, ptr %39, align 4, !tbaa !12
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %774, i64 %776
  store i32 %773, ptr %777, align 4, !tbaa !12
  %778 = load i32, ptr %22, align 4, !tbaa !12
  %779 = load ptr, ptr %31, align 8, !tbaa !5
  %780 = load i32, ptr %39, align 4, !tbaa !12
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds i32, ptr %779, i64 %781
  store i32 %778, ptr %782, align 4, !tbaa !12
  br label %783

783:                                              ; preds = %763
  br label %784

784:                                              ; preds = %783
  %785 = load ptr, ptr %31, align 8, !tbaa !5
  %786 = load i32, ptr %39, align 4, !tbaa !12
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds i32, ptr %785, i64 %787
  %789 = load i32, ptr %788, align 4, !tbaa !12
  %790 = icmp eq i32 %789, 0
  br i1 %790, label %791, label %864

791:                                              ; preds = %784
  %792 = load ptr, ptr %32, align 8, !tbaa !5
  %793 = load i32, ptr %39, align 4, !tbaa !12
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds i32, ptr %792, i64 %794
  %796 = load i32, ptr %795, align 4, !tbaa !12
  %797 = icmp ne i32 %796, -1
  br i1 %797, label %798, label %864

798:                                              ; preds = %791
  %799 = load ptr, ptr %24, align 8, !tbaa !5
  %800 = load i32, ptr %39, align 4, !tbaa !12
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds i32, ptr %799, i64 %801
  %803 = load i32, ptr %802, align 4, !tbaa !12
  %804 = load ptr, ptr %24, align 8, !tbaa !5
  %805 = load i32, ptr %39, align 4, !tbaa !12
  %806 = add nsw i32 %805, 1
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds i32, ptr %804, i64 %807
  %809 = load i32, ptr %808, align 4, !tbaa !12
  %810 = icmp slt i32 %803, %809
  br i1 %810, label %811, label %864

811:                                              ; preds = %798
  br label %812

812:                                              ; preds = %811
  %813 = load ptr, ptr %32, align 8, !tbaa !5
  %814 = load i32, ptr %39, align 4, !tbaa !12
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds i32, ptr %813, i64 %815
  %817 = load i32, ptr %816, align 4, !tbaa !12
  %818 = icmp ne i32 %817, -1
  br i1 %818, label %830, label %819

819:                                              ; preds = %812
  %820 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 429, ptr noundef @.str.2)
  %821 = load ptr, ptr %32, align 8, !tbaa !5
  %822 = load i32, ptr %39, align 4, !tbaa !12
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %821, i64 %823
  %825 = load i32, ptr %824, align 4, !tbaa !12
  %826 = icmp ne i32 %825, -1
  br i1 %826, label %827, label %828

827:                                              ; preds = %819
  br label %829

828:                                              ; preds = %819
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.2, i32 noundef 429, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

829:                                              ; preds = %827
  br label %830

830:                                              ; preds = %829, %812
  %831 = load ptr, ptr %33, align 8, !tbaa !5
  %832 = load i32, ptr %15, align 4, !tbaa !12
  %833 = add nsw i32 %832, -1
  store i32 %833, ptr %15, align 4, !tbaa !12
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds i32, ptr %831, i64 %834
  %836 = load i32, ptr %835, align 4, !tbaa !12
  %837 = load ptr, ptr %33, align 8, !tbaa !5
  %838 = load ptr, ptr %32, align 8, !tbaa !5
  %839 = load i32, ptr %39, align 4, !tbaa !12
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds i32, ptr %838, i64 %840
  %842 = load i32, ptr %841, align 4, !tbaa !12
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds i32, ptr %837, i64 %843
  store i32 %836, ptr %844, align 4, !tbaa !12
  %845 = load ptr, ptr %32, align 8, !tbaa !5
  %846 = load i32, ptr %39, align 4, !tbaa !12
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds i32, ptr %845, i64 %847
  %849 = load i32, ptr %848, align 4, !tbaa !12
  %850 = load ptr, ptr %32, align 8, !tbaa !5
  %851 = load ptr, ptr %33, align 8, !tbaa !5
  %852 = load i32, ptr %15, align 4, !tbaa !12
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !12
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds i32, ptr %850, i64 %856
  store i32 %849, ptr %857, align 4, !tbaa !12
  %858 = load ptr, ptr %32, align 8, !tbaa !5
  %859 = load i32, ptr %39, align 4, !tbaa !12
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds i32, ptr %858, i64 %860
  store i32 -1, ptr %861, align 4, !tbaa !12
  br label %862

862:                                              ; preds = %830
  br label %863

863:                                              ; preds = %862
  br label %864

864:                                              ; preds = %863, %798, %791, %784
  %865 = load ptr, ptr %31, align 8, !tbaa !5
  %866 = load i32, ptr %39, align 4, !tbaa !12
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds i32, ptr %865, i64 %867
  %869 = load i32, ptr %868, align 4, !tbaa !12
  %870 = icmp sgt i32 %869, 0
  br i1 %870, label %871, label %911

871:                                              ; preds = %864
  %872 = load ptr, ptr %32, align 8, !tbaa !5
  %873 = load i32, ptr %39, align 4, !tbaa !12
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds i32, ptr %872, i64 %874
  %876 = load i32, ptr %875, align 4, !tbaa !12
  %877 = icmp eq i32 %876, -1
  br i1 %877, label %878, label %911

878:                                              ; preds = %871
  br label %879

879:                                              ; preds = %878
  %880 = load ptr, ptr %32, align 8, !tbaa !5
  %881 = load i32, ptr %39, align 4, !tbaa !12
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds i32, ptr %880, i64 %882
  %884 = load i32, ptr %883, align 4, !tbaa !12
  %885 = icmp eq i32 %884, -1
  br i1 %885, label %897, label %886

886:                                              ; preds = %879
  %887 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef 431, ptr noundef @.str.2)
  %888 = load ptr, ptr %32, align 8, !tbaa !5
  %889 = load i32, ptr %39, align 4, !tbaa !12
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds i32, ptr %888, i64 %890
  %892 = load i32, ptr %891, align 4, !tbaa !12
  %893 = icmp eq i32 %892, -1
  br i1 %893, label %894, label %895

894:                                              ; preds = %886
  br label %896

895:                                              ; preds = %886
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.2, i32 noundef 431, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

896:                                              ; preds = %894
  br label %897

897:                                              ; preds = %896, %879
  %898 = load i32, ptr %39, align 4, !tbaa !12
  %899 = load ptr, ptr %33, align 8, !tbaa !5
  %900 = load i32, ptr %15, align 4, !tbaa !12
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds i32, ptr %899, i64 %901
  store i32 %898, ptr %902, align 4, !tbaa !12
  %903 = load i32, ptr %15, align 4, !tbaa !12
  %904 = add nsw i32 %903, 1
  store i32 %904, ptr %15, align 4, !tbaa !12
  %905 = load ptr, ptr %32, align 8, !tbaa !5
  %906 = load i32, ptr %39, align 4, !tbaa !12
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds i32, ptr %905, i64 %907
  store i32 %903, ptr %908, align 4, !tbaa !12
  br label %909

909:                                              ; preds = %897
  br label %910

910:                                              ; preds = %909
  br label %911

911:                                              ; preds = %910, %871, %864
  %912 = load ptr, ptr %24, align 8, !tbaa !5
  %913 = load i32, ptr %39, align 4, !tbaa !12
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds i32, ptr %912, i64 %914
  %916 = load i32, ptr %915, align 4, !tbaa !12
  store i32 %916, ptr %9, align 4, !tbaa !12
  br label %917

917:                                              ; preds = %1123, %911
  %918 = load i32, ptr %9, align 4, !tbaa !12
  %919 = load ptr, ptr %24, align 8, !tbaa !5
  %920 = load i32, ptr %39, align 4, !tbaa !12
  %921 = add nsw i32 %920, 1
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds i32, ptr %919, i64 %922
  %924 = load i32, ptr %923, align 4, !tbaa !12
  %925 = icmp slt i32 %918, %924
  br i1 %925, label %926, label %1126

926:                                              ; preds = %917
  %927 = load ptr, ptr %25, align 8, !tbaa !5
  %928 = load i32, ptr %9, align 4, !tbaa !12
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds i32, ptr %927, i64 %929
  %931 = load i32, ptr %930, align 4, !tbaa !12
  store i32 %931, ptr %10, align 4, !tbaa !12
  %932 = load i32, ptr %18, align 4, !tbaa !12
  %933 = load ptr, ptr %28, align 8, !tbaa !5
  %934 = load i32, ptr %10, align 4, !tbaa !12
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds i32, ptr %933, i64 %935
  %937 = load i32, ptr %936, align 4, !tbaa !12
  %938 = icmp eq i32 %932, %937
  br i1 %938, label %939, label %945

939:                                              ; preds = %926
  %940 = load ptr, ptr %27, align 8, !tbaa !5
  %941 = load i32, ptr %9, align 4, !tbaa !12
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds i32, ptr %940, i64 %942
  %944 = load i32, ptr %943, align 4, !tbaa !12
  br label %952

945:                                              ; preds = %926
  %946 = load ptr, ptr %27, align 8, !tbaa !5
  %947 = load i32, ptr %9, align 4, !tbaa !12
  %948 = sext i32 %947 to i64
  %949 = getelementptr inbounds i32, ptr %946, i64 %948
  %950 = load i32, ptr %949, align 4, !tbaa !12
  %951 = sub nsw i32 0, %950
  br label %952

952:                                              ; preds = %945, %939
  %953 = phi i32 [ %944, %939 ], [ %951, %945 ]
  store i32 %953, ptr %12, align 4, !tbaa !12
  br label %954

954:                                              ; preds = %952
  %955 = load i32, ptr %12, align 4, !tbaa !12
  %956 = load ptr, ptr %30, align 8, !tbaa !5
  %957 = load i32, ptr %10, align 4, !tbaa !12
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds i32, ptr %956, i64 %958
  %960 = load i32, ptr %959, align 4, !tbaa !12
  %961 = add nsw i32 %960, %955
  store i32 %961, ptr %959, align 4, !tbaa !12
  %962 = load i32, ptr %12, align 4, !tbaa !12
  %963 = load ptr, ptr %31, align 8, !tbaa !5
  %964 = load i32, ptr %10, align 4, !tbaa !12
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds i32, ptr %963, i64 %965
  %967 = load i32, ptr %966, align 4, !tbaa !12
  %968 = sub nsw i32 %967, %962
  store i32 %968, ptr %966, align 4, !tbaa !12
  br label %969

969:                                              ; preds = %954
  br label %970

970:                                              ; preds = %969
  %971 = load ptr, ptr %34, align 8, !tbaa !5
  %972 = load i32, ptr %10, align 4, !tbaa !12
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds i32, ptr %971, i64 %973
  %975 = load i32, ptr %974, align 4, !tbaa !12
  %976 = icmp eq i32 %975, -1
  br i1 %976, label %977, label %1007

977:                                              ; preds = %970
  %978 = load ptr, ptr %48, align 8, !tbaa !5
  %979 = load ptr, ptr %37, align 8, !tbaa !5
  %980 = load i32, ptr %10, align 4, !tbaa !12
  %981 = sext i32 %980 to i64
  %982 = getelementptr inbounds i32, ptr %979, i64 %981
  %983 = load i32, ptr %982, align 4, !tbaa !12
  %984 = mul nsw i32 2, %983
  %985 = load ptr, ptr %28, align 8, !tbaa !5
  %986 = load i32, ptr %10, align 4, !tbaa !12
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds i32, ptr %985, i64 %987
  %989 = load i32, ptr %988, align 4, !tbaa !12
  %990 = add nsw i32 %984, %989
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds ptr, ptr %978, i64 %991
  %993 = load ptr, ptr %992, align 8, !tbaa !5
  %994 = load i32, ptr %10, align 4, !tbaa !12
  %995 = load ptr, ptr %31, align 8, !tbaa !5
  %996 = load i32, ptr %10, align 4, !tbaa !12
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds i32, ptr %995, i64 %997
  %999 = load i32, ptr %998, align 4, !tbaa !12
  %1000 = load ptr, ptr %30, align 8, !tbaa !5
  %1001 = load i32, ptr %10, align 4, !tbaa !12
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds i32, ptr %1000, i64 %1002
  %1004 = load i32, ptr %1003, align 4, !tbaa !12
  %1005 = sub nsw i32 %999, %1004
  %1006 = sitofp i32 %1005 to float
  call void @libmetis__rpqUpdate(ptr noundef %993, i32 noundef %994, float noundef %1006)
  br label %1007

1007:                                             ; preds = %977, %970
  %1008 = load ptr, ptr %31, align 8, !tbaa !5
  %1009 = load i32, ptr %10, align 4, !tbaa !12
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds i32, ptr %1008, i64 %1010
  %1012 = load i32, ptr %1011, align 4, !tbaa !12
  %1013 = icmp eq i32 %1012, 0
  br i1 %1013, label %1014, label %1074

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

1021:                                             ; preds = %1014
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load ptr, ptr %32, align 8, !tbaa !5
  %1024 = load i32, ptr %10, align 4, !tbaa !12
  %1025 = sext i32 %1024 to i64
  %1026 = getelementptr inbounds i32, ptr %1023, i64 %1025
  %1027 = load i32, ptr %1026, align 4, !tbaa !12
  %1028 = icmp ne i32 %1027, -1
  br i1 %1028, label %1040, label %1029

1029:                                             ; preds = %1022
  %1030 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 445, ptr noundef @.str.2)
  %1031 = load ptr, ptr %32, align 8, !tbaa !5
  %1032 = load i32, ptr %10, align 4, !tbaa !12
  %1033 = sext i32 %1032 to i64
  %1034 = getelementptr inbounds i32, ptr %1031, i64 %1033
  %1035 = load i32, ptr %1034, align 4, !tbaa !12
  %1036 = icmp ne i32 %1035, -1
  br i1 %1036, label %1037, label %1038

1037:                                             ; preds = %1029
  br label %1039

1038:                                             ; preds = %1029
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.2, i32 noundef 445, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

1039:                                             ; preds = %1037
  br label %1040

1040:                                             ; preds = %1039, %1022
  %1041 = load ptr, ptr %33, align 8, !tbaa !5
  %1042 = load i32, ptr %15, align 4, !tbaa !12
  %1043 = add nsw i32 %1042, -1
  store i32 %1043, ptr %15, align 4, !tbaa !12
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds i32, ptr %1041, i64 %1044
  %1046 = load i32, ptr %1045, align 4, !tbaa !12
  %1047 = load ptr, ptr %33, align 8, !tbaa !5
  %1048 = load ptr, ptr %32, align 8, !tbaa !5
  %1049 = load i32, ptr %10, align 4, !tbaa !12
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds i32, ptr %1048, i64 %1050
  %1052 = load i32, ptr %1051, align 4, !tbaa !12
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds i32, ptr %1047, i64 %1053
  store i32 %1046, ptr %1054, align 4, !tbaa !12
  %1055 = load ptr, ptr %32, align 8, !tbaa !5
  %1056 = load i32, ptr %10, align 4, !tbaa !12
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds i32, ptr %1055, i64 %1057
  %1059 = load i32, ptr %1058, align 4, !tbaa !12
  %1060 = load ptr, ptr %32, align 8, !tbaa !5
  %1061 = load ptr, ptr %33, align 8, !tbaa !5
  %1062 = load i32, ptr %15, align 4, !tbaa !12
  %1063 = sext i32 %1062 to i64
  %1064 = getelementptr inbounds i32, ptr %1061, i64 %1063
  %1065 = load i32, ptr %1064, align 4, !tbaa !12
  %1066 = sext i32 %1065 to i64
  %1067 = getelementptr inbounds i32, ptr %1060, i64 %1066
  store i32 %1059, ptr %1067, align 4, !tbaa !12
  %1068 = load ptr, ptr %32, align 8, !tbaa !5
  %1069 = load i32, ptr %10, align 4, !tbaa !12
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds i32, ptr %1068, i64 %1070
  store i32 -1, ptr %1071, align 4, !tbaa !12
  br label %1072

1072:                                             ; preds = %1040
  br label %1073

1073:                                             ; preds = %1072
  br label %1122

1074:                                             ; preds = %1014, %1007
  %1075 = load ptr, ptr %31, align 8, !tbaa !5
  %1076 = load i32, ptr %10, align 4, !tbaa !12
  %1077 = sext i32 %1076 to i64
  %1078 = getelementptr inbounds i32, ptr %1075, i64 %1077
  %1079 = load i32, ptr %1078, align 4, !tbaa !12
  %1080 = icmp sgt i32 %1079, 0
  br i1 %1080, label %1081, label %1121

1081:                                             ; preds = %1074
  %1082 = load ptr, ptr %32, align 8, !tbaa !5
  %1083 = load i32, ptr %10, align 4, !tbaa !12
  %1084 = sext i32 %1083 to i64
  %1085 = getelementptr inbounds i32, ptr %1082, i64 %1084
  %1086 = load i32, ptr %1085, align 4, !tbaa !12
  %1087 = icmp eq i32 %1086, -1
  br i1 %1087, label %1088, label %1121

1088:                                             ; preds = %1081
  br label %1089

1089:                                             ; preds = %1088
  %1090 = load ptr, ptr %32, align 8, !tbaa !5
  %1091 = load i32, ptr %10, align 4, !tbaa !12
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds i32, ptr %1090, i64 %1092
  %1094 = load i32, ptr %1093, align 4, !tbaa !12
  %1095 = icmp eq i32 %1094, -1
  br i1 %1095, label %1107, label %1096

1096:                                             ; preds = %1089
  %1097 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 447, ptr noundef @.str.2)
  %1098 = load ptr, ptr %32, align 8, !tbaa !5
  %1099 = load i32, ptr %10, align 4, !tbaa !12
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds i32, ptr %1098, i64 %1100
  %1102 = load i32, ptr %1101, align 4, !tbaa !12
  %1103 = icmp eq i32 %1102, -1
  br i1 %1103, label %1104, label %1105

1104:                                             ; preds = %1096
  br label %1106

1105:                                             ; preds = %1096
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.2, i32 noundef 447, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

1106:                                             ; preds = %1104
  br label %1107

1107:                                             ; preds = %1106, %1089
  %1108 = load i32, ptr %10, align 4, !tbaa !12
  %1109 = load ptr, ptr %33, align 8, !tbaa !5
  %1110 = load i32, ptr %15, align 4, !tbaa !12
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds i32, ptr %1109, i64 %1111
  store i32 %1108, ptr %1112, align 4, !tbaa !12
  %1113 = load i32, ptr %15, align 4, !tbaa !12
  %1114 = add nsw i32 %1113, 1
  store i32 %1114, ptr %15, align 4, !tbaa !12
  %1115 = load ptr, ptr %32, align 8, !tbaa !5
  %1116 = load i32, ptr %10, align 4, !tbaa !12
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds i32, ptr %1115, i64 %1117
  store i32 %1113, ptr %1118, align 4, !tbaa !12
  br label %1119

1119:                                             ; preds = %1107
  br label %1120

1120:                                             ; preds = %1119
  br label %1121

1121:                                             ; preds = %1120, %1081, %1074
  br label %1122

1122:                                             ; preds = %1121, %1073
  br label %1123

1123:                                             ; preds = %1122
  %1124 = load i32, ptr %9, align 4, !tbaa !12
  %1125 = add nsw i32 %1124, 1
  store i32 %1125, ptr %9, align 4, !tbaa !12
  br label %917, !llvm.loop !44

1126:                                             ; preds = %917
  br label %1127

1127:                                             ; preds = %1126
  %1128 = load i32, ptr %16, align 4, !tbaa !12
  %1129 = add nsw i32 %1128, 1
  store i32 %1129, ptr %16, align 4, !tbaa !12
  br label %528, !llvm.loop !45

1130:                                             ; preds = %652, %562, %536, %528
  %1131 = load i32, ptr %16, align 4, !tbaa !12
  %1132 = add nsw i32 %1131, -1
  store i32 %1132, ptr %16, align 4, !tbaa !12
  br label %1133

1133:                                             ; preds = %1513, %1130
  %1134 = load i32, ptr %16, align 4, !tbaa !12
  %1135 = load i32, ptr %42, align 4, !tbaa !12
  %1136 = icmp sgt i32 %1134, %1135
  br i1 %1136, label %1137, label %1516

1137:                                             ; preds = %1133
  %1138 = load ptr, ptr %35, align 8, !tbaa !5
  %1139 = load i32, ptr %16, align 4, !tbaa !12
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds i32, ptr %1138, i64 %1140
  %1142 = load i32, ptr %1141, align 4, !tbaa !12
  store i32 %1142, ptr %39, align 4, !tbaa !12
  %1143 = load ptr, ptr %28, align 8, !tbaa !5
  %1144 = load i32, ptr %39, align 4, !tbaa !12
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds i32, ptr %1143, i64 %1145
  %1147 = load i32, ptr %1146, align 4, !tbaa !12
  %1148 = add nsw i32 %1147, 1
  %1149 = srem i32 %1148, 2
  %1150 = load ptr, ptr %28, align 8, !tbaa !5
  %1151 = load i32, ptr %39, align 4, !tbaa !12
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr inbounds i32, ptr %1150, i64 %1152
  store i32 %1149, ptr %1153, align 4, !tbaa !12
  store i32 %1149, ptr %18, align 4, !tbaa !12
  br label %1154

1154:                                             ; preds = %1137
  %1155 = load ptr, ptr %30, align 8, !tbaa !5
  %1156 = load i32, ptr %39, align 4, !tbaa !12
  %1157 = sext i32 %1156 to i64
  %1158 = getelementptr inbounds i32, ptr %1155, i64 %1157
  %1159 = load i32, ptr %1158, align 4, !tbaa !12
  store i32 %1159, ptr %22, align 4, !tbaa !12
  %1160 = load ptr, ptr %31, align 8, !tbaa !5
  %1161 = load i32, ptr %39, align 4, !tbaa !12
  %1162 = sext i32 %1161 to i64
  %1163 = getelementptr inbounds i32, ptr %1160, i64 %1162
  %1164 = load i32, ptr %1163, align 4, !tbaa !12
  %1165 = load ptr, ptr %30, align 8, !tbaa !5
  %1166 = load i32, ptr %39, align 4, !tbaa !12
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds i32, ptr %1165, i64 %1167
  store i32 %1164, ptr %1168, align 4, !tbaa !12
  %1169 = load i32, ptr %22, align 4, !tbaa !12
  %1170 = load ptr, ptr %31, align 8, !tbaa !5
  %1171 = load i32, ptr %39, align 4, !tbaa !12
  %1172 = sext i32 %1171 to i64
  %1173 = getelementptr inbounds i32, ptr %1170, i64 %1172
  store i32 %1169, ptr %1173, align 4, !tbaa !12
  br label %1174

1174:                                             ; preds = %1154
  br label %1175

1175:                                             ; preds = %1174
  %1176 = load ptr, ptr %31, align 8, !tbaa !5
  %1177 = load i32, ptr %39, align 4, !tbaa !12
  %1178 = sext i32 %1177 to i64
  %1179 = getelementptr inbounds i32, ptr %1176, i64 %1178
  %1180 = load i32, ptr %1179, align 4, !tbaa !12
  %1181 = icmp eq i32 %1180, 0
  br i1 %1181, label %1182, label %1255

1182:                                             ; preds = %1175
  %1183 = load ptr, ptr %32, align 8, !tbaa !5
  %1184 = load i32, ptr %39, align 4, !tbaa !12
  %1185 = sext i32 %1184 to i64
  %1186 = getelementptr inbounds i32, ptr %1183, i64 %1185
  %1187 = load i32, ptr %1186, align 4, !tbaa !12
  %1188 = icmp ne i32 %1187, -1
  br i1 %1188, label %1189, label %1255

1189:                                             ; preds = %1182
  %1190 = load ptr, ptr %24, align 8, !tbaa !5
  %1191 = load i32, ptr %39, align 4, !tbaa !12
  %1192 = sext i32 %1191 to i64
  %1193 = getelementptr inbounds i32, ptr %1190, i64 %1192
  %1194 = load i32, ptr %1193, align 4, !tbaa !12
  %1195 = load ptr, ptr %24, align 8, !tbaa !5
  %1196 = load i32, ptr %39, align 4, !tbaa !12
  %1197 = add nsw i32 %1196, 1
  %1198 = sext i32 %1197 to i64
  %1199 = getelementptr inbounds i32, ptr %1195, i64 %1198
  %1200 = load i32, ptr %1199, align 4, !tbaa !12
  %1201 = icmp slt i32 %1194, %1200
  br i1 %1201, label %1202, label %1255

1202:                                             ; preds = %1189
  br label %1203

1203:                                             ; preds = %1202
  %1204 = load ptr, ptr %32, align 8, !tbaa !5
  %1205 = load i32, ptr %39, align 4, !tbaa !12
  %1206 = sext i32 %1205 to i64
  %1207 = getelementptr inbounds i32, ptr %1204, i64 %1206
  %1208 = load i32, ptr %1207, align 4, !tbaa !12
  %1209 = icmp ne i32 %1208, -1
  br i1 %1209, label %1221, label %1210

1210:                                             ; preds = %1203
  %1211 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 462, ptr noundef @.str.2)
  %1212 = load ptr, ptr %32, align 8, !tbaa !5
  %1213 = load i32, ptr %39, align 4, !tbaa !12
  %1214 = sext i32 %1213 to i64
  %1215 = getelementptr inbounds i32, ptr %1212, i64 %1214
  %1216 = load i32, ptr %1215, align 4, !tbaa !12
  %1217 = icmp ne i32 %1216, -1
  br i1 %1217, label %1218, label %1219

1218:                                             ; preds = %1210
  br label %1220

1219:                                             ; preds = %1210
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.2, i32 noundef 462, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

1220:                                             ; preds = %1218
  br label %1221

1221:                                             ; preds = %1220, %1203
  %1222 = load ptr, ptr %33, align 8, !tbaa !5
  %1223 = load i32, ptr %15, align 4, !tbaa !12
  %1224 = add nsw i32 %1223, -1
  store i32 %1224, ptr %15, align 4, !tbaa !12
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds i32, ptr %1222, i64 %1225
  %1227 = load i32, ptr %1226, align 4, !tbaa !12
  %1228 = load ptr, ptr %33, align 8, !tbaa !5
  %1229 = load ptr, ptr %32, align 8, !tbaa !5
  %1230 = load i32, ptr %39, align 4, !tbaa !12
  %1231 = sext i32 %1230 to i64
  %1232 = getelementptr inbounds i32, ptr %1229, i64 %1231
  %1233 = load i32, ptr %1232, align 4, !tbaa !12
  %1234 = sext i32 %1233 to i64
  %1235 = getelementptr inbounds i32, ptr %1228, i64 %1234
  store i32 %1227, ptr %1235, align 4, !tbaa !12
  %1236 = load ptr, ptr %32, align 8, !tbaa !5
  %1237 = load i32, ptr %39, align 4, !tbaa !12
  %1238 = sext i32 %1237 to i64
  %1239 = getelementptr inbounds i32, ptr %1236, i64 %1238
  %1240 = load i32, ptr %1239, align 4, !tbaa !12
  %1241 = load ptr, ptr %32, align 8, !tbaa !5
  %1242 = load ptr, ptr %33, align 8, !tbaa !5
  %1243 = load i32, ptr %15, align 4, !tbaa !12
  %1244 = sext i32 %1243 to i64
  %1245 = getelementptr inbounds i32, ptr %1242, i64 %1244
  %1246 = load i32, ptr %1245, align 4, !tbaa !12
  %1247 = sext i32 %1246 to i64
  %1248 = getelementptr inbounds i32, ptr %1241, i64 %1247
  store i32 %1240, ptr %1248, align 4, !tbaa !12
  %1249 = load ptr, ptr %32, align 8, !tbaa !5
  %1250 = load i32, ptr %39, align 4, !tbaa !12
  %1251 = sext i32 %1250 to i64
  %1252 = getelementptr inbounds i32, ptr %1249, i64 %1251
  store i32 -1, ptr %1252, align 4, !tbaa !12
  br label %1253

1253:                                             ; preds = %1221
  br label %1254

1254:                                             ; preds = %1253
  br label %1303

1255:                                             ; preds = %1189, %1182, %1175
  %1256 = load ptr, ptr %31, align 8, !tbaa !5
  %1257 = load i32, ptr %39, align 4, !tbaa !12
  %1258 = sext i32 %1257 to i64
  %1259 = getelementptr inbounds i32, ptr %1256, i64 %1258
  %1260 = load i32, ptr %1259, align 4, !tbaa !12
  %1261 = icmp sgt i32 %1260, 0
  br i1 %1261, label %1262, label %1302

1262:                                             ; preds = %1255
  %1263 = load ptr, ptr %32, align 8, !tbaa !5
  %1264 = load i32, ptr %39, align 4, !tbaa !12
  %1265 = sext i32 %1264 to i64
  %1266 = getelementptr inbounds i32, ptr %1263, i64 %1265
  %1267 = load i32, ptr %1266, align 4, !tbaa !12
  %1268 = icmp eq i32 %1267, -1
  br i1 %1268, label %1269, label %1302

1269:                                             ; preds = %1262
  br label %1270

1270:                                             ; preds = %1269
  %1271 = load ptr, ptr %32, align 8, !tbaa !5
  %1272 = load i32, ptr %39, align 4, !tbaa !12
  %1273 = sext i32 %1272 to i64
  %1274 = getelementptr inbounds i32, ptr %1271, i64 %1273
  %1275 = load i32, ptr %1274, align 4, !tbaa !12
  %1276 = icmp eq i32 %1275, -1
  br i1 %1276, label %1288, label %1277

1277:                                             ; preds = %1270
  %1278 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef 464, ptr noundef @.str.2)
  %1279 = load ptr, ptr %32, align 8, !tbaa !5
  %1280 = load i32, ptr %39, align 4, !tbaa !12
  %1281 = sext i32 %1280 to i64
  %1282 = getelementptr inbounds i32, ptr %1279, i64 %1281
  %1283 = load i32, ptr %1282, align 4, !tbaa !12
  %1284 = icmp eq i32 %1283, -1
  br i1 %1284, label %1285, label %1286

1285:                                             ; preds = %1277
  br label %1287

1286:                                             ; preds = %1277
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.2, i32 noundef 464, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

1287:                                             ; preds = %1285
  br label %1288

1288:                                             ; preds = %1287, %1270
  %1289 = load i32, ptr %39, align 4, !tbaa !12
  %1290 = load ptr, ptr %33, align 8, !tbaa !5
  %1291 = load i32, ptr %15, align 4, !tbaa !12
  %1292 = sext i32 %1291 to i64
  %1293 = getelementptr inbounds i32, ptr %1290, i64 %1292
  store i32 %1289, ptr %1293, align 4, !tbaa !12
  %1294 = load i32, ptr %15, align 4, !tbaa !12
  %1295 = add nsw i32 %1294, 1
  store i32 %1295, ptr %15, align 4, !tbaa !12
  %1296 = load ptr, ptr %32, align 8, !tbaa !5
  %1297 = load i32, ptr %39, align 4, !tbaa !12
  %1298 = sext i32 %1297 to i64
  %1299 = getelementptr inbounds i32, ptr %1296, i64 %1298
  store i32 %1294, ptr %1299, align 4, !tbaa !12
  br label %1300

1300:                                             ; preds = %1288
  br label %1301

1301:                                             ; preds = %1300
  br label %1302

1302:                                             ; preds = %1301, %1262, %1255
  br label %1303

1303:                                             ; preds = %1302, %1254
  %1304 = load i32, ptr %14, align 4, !tbaa !12
  %1305 = sext i32 %1304 to i64
  %1306 = load ptr, ptr %26, align 8, !tbaa !5
  %1307 = load i32, ptr %39, align 4, !tbaa !12
  %1308 = load i32, ptr %14, align 4, !tbaa !12
  %1309 = mul nsw i32 %1307, %1308
  %1310 = sext i32 %1309 to i64
  %1311 = getelementptr inbounds i32, ptr %1306, i64 %1310
  %1312 = load ptr, ptr %29, align 8, !tbaa !5
  %1313 = load i32, ptr %18, align 4, !tbaa !12
  %1314 = load i32, ptr %14, align 4, !tbaa !12
  %1315 = mul nsw i32 %1313, %1314
  %1316 = sext i32 %1315 to i64
  %1317 = getelementptr inbounds i32, ptr %1312, i64 %1316
  %1318 = call ptr @libmetis__iaxpy(i64 noundef %1305, i32 noundef 1, ptr noundef %1311, i64 noundef 1, ptr noundef %1317, i64 noundef 1)
  %1319 = load i32, ptr %14, align 4, !tbaa !12
  %1320 = sext i32 %1319 to i64
  %1321 = load ptr, ptr %26, align 8, !tbaa !5
  %1322 = load i32, ptr %39, align 4, !tbaa !12
  %1323 = load i32, ptr %14, align 4, !tbaa !12
  %1324 = mul nsw i32 %1322, %1323
  %1325 = sext i32 %1324 to i64
  %1326 = getelementptr inbounds i32, ptr %1321, i64 %1325
  %1327 = load ptr, ptr %29, align 8, !tbaa !5
  %1328 = load i32, ptr %18, align 4, !tbaa !12
  %1329 = add nsw i32 %1328, 1
  %1330 = srem i32 %1329, 2
  %1331 = load i32, ptr %14, align 4, !tbaa !12
  %1332 = mul nsw i32 %1330, %1331
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds i32, ptr %1327, i64 %1333
  %1335 = call ptr @libmetis__iaxpy(i64 noundef %1320, i32 noundef -1, ptr noundef %1326, i64 noundef 1, ptr noundef %1334, i64 noundef 1)
  %1336 = load ptr, ptr %24, align 8, !tbaa !5
  %1337 = load i32, ptr %39, align 4, !tbaa !12
  %1338 = sext i32 %1337 to i64
  %1339 = getelementptr inbounds i32, ptr %1336, i64 %1338
  %1340 = load i32, ptr %1339, align 4, !tbaa !12
  store i32 %1340, ptr %9, align 4, !tbaa !12
  br label %1341

1341:                                             ; preds = %1509, %1303
  %1342 = load i32, ptr %9, align 4, !tbaa !12
  %1343 = load ptr, ptr %24, align 8, !tbaa !5
  %1344 = load i32, ptr %39, align 4, !tbaa !12
  %1345 = add nsw i32 %1344, 1
  %1346 = sext i32 %1345 to i64
  %1347 = getelementptr inbounds i32, ptr %1343, i64 %1346
  %1348 = load i32, ptr %1347, align 4, !tbaa !12
  %1349 = icmp slt i32 %1342, %1348
  br i1 %1349, label %1350, label %1512

1350:                                             ; preds = %1341
  %1351 = load ptr, ptr %25, align 8, !tbaa !5
  %1352 = load i32, ptr %9, align 4, !tbaa !12
  %1353 = sext i32 %1352 to i64
  %1354 = getelementptr inbounds i32, ptr %1351, i64 %1353
  %1355 = load i32, ptr %1354, align 4, !tbaa !12
  store i32 %1355, ptr %10, align 4, !tbaa !12
  %1356 = load i32, ptr %18, align 4, !tbaa !12
  %1357 = load ptr, ptr %28, align 8, !tbaa !5
  %1358 = load i32, ptr %10, align 4, !tbaa !12
  %1359 = sext i32 %1358 to i64
  %1360 = getelementptr inbounds i32, ptr %1357, i64 %1359
  %1361 = load i32, ptr %1360, align 4, !tbaa !12
  %1362 = icmp eq i32 %1356, %1361
  br i1 %1362, label %1363, label %1369

1363:                                             ; preds = %1350
  %1364 = load ptr, ptr %27, align 8, !tbaa !5
  %1365 = load i32, ptr %9, align 4, !tbaa !12
  %1366 = sext i32 %1365 to i64
  %1367 = getelementptr inbounds i32, ptr %1364, i64 %1366
  %1368 = load i32, ptr %1367, align 4, !tbaa !12
  br label %1376

1369:                                             ; preds = %1350
  %1370 = load ptr, ptr %27, align 8, !tbaa !5
  %1371 = load i32, ptr %9, align 4, !tbaa !12
  %1372 = sext i32 %1371 to i64
  %1373 = getelementptr inbounds i32, ptr %1370, i64 %1372
  %1374 = load i32, ptr %1373, align 4, !tbaa !12
  %1375 = sub nsw i32 0, %1374
  br label %1376

1376:                                             ; preds = %1369, %1363
  %1377 = phi i32 [ %1368, %1363 ], [ %1375, %1369 ]
  store i32 %1377, ptr %12, align 4, !tbaa !12
  br label %1378

1378:                                             ; preds = %1376
  %1379 = load i32, ptr %12, align 4, !tbaa !12
  %1380 = load ptr, ptr %30, align 8, !tbaa !5
  %1381 = load i32, ptr %10, align 4, !tbaa !12
  %1382 = sext i32 %1381 to i64
  %1383 = getelementptr inbounds i32, ptr %1380, i64 %1382
  %1384 = load i32, ptr %1383, align 4, !tbaa !12
  %1385 = add nsw i32 %1384, %1379
  store i32 %1385, ptr %1383, align 4, !tbaa !12
  %1386 = load i32, ptr %12, align 4, !tbaa !12
  %1387 = load ptr, ptr %31, align 8, !tbaa !5
  %1388 = load i32, ptr %10, align 4, !tbaa !12
  %1389 = sext i32 %1388 to i64
  %1390 = getelementptr inbounds i32, ptr %1387, i64 %1389
  %1391 = load i32, ptr %1390, align 4, !tbaa !12
  %1392 = sub nsw i32 %1391, %1386
  store i32 %1392, ptr %1390, align 4, !tbaa !12
  br label %1393

1393:                                             ; preds = %1378
  br label %1394

1394:                                             ; preds = %1393
  %1395 = load ptr, ptr %32, align 8, !tbaa !5
  %1396 = load i32, ptr %10, align 4, !tbaa !12
  %1397 = sext i32 %1396 to i64
  %1398 = getelementptr inbounds i32, ptr %1395, i64 %1397
  %1399 = load i32, ptr %1398, align 4, !tbaa !12
  %1400 = icmp ne i32 %1399, -1
  br i1 %1400, label %1401, label %1461

1401:                                             ; preds = %1394
  %1402 = load ptr, ptr %31, align 8, !tbaa !5
  %1403 = load i32, ptr %10, align 4, !tbaa !12
  %1404 = sext i32 %1403 to i64
  %1405 = getelementptr inbounds i32, ptr %1402, i64 %1404
  %1406 = load i32, ptr %1405, align 4, !tbaa !12
  %1407 = icmp eq i32 %1406, 0
  br i1 %1407, label %1408, label %1461

1408:                                             ; preds = %1401
  br label %1409

1409:                                             ; preds = %1408
  %1410 = load ptr, ptr %32, align 8, !tbaa !5
  %1411 = load i32, ptr %10, align 4, !tbaa !12
  %1412 = sext i32 %1411 to i64
  %1413 = getelementptr inbounds i32, ptr %1410, i64 %1412
  %1414 = load i32, ptr %1413, align 4, !tbaa !12
  %1415 = icmp ne i32 %1414, -1
  br i1 %1415, label %1427, label %1416

1416:                                             ; preds = %1409
  %1417 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 475, ptr noundef @.str.2)
  %1418 = load ptr, ptr %32, align 8, !tbaa !5
  %1419 = load i32, ptr %10, align 4, !tbaa !12
  %1420 = sext i32 %1419 to i64
  %1421 = getelementptr inbounds i32, ptr %1418, i64 %1420
  %1422 = load i32, ptr %1421, align 4, !tbaa !12
  %1423 = icmp ne i32 %1422, -1
  br i1 %1423, label %1424, label %1425

1424:                                             ; preds = %1416
  br label %1426

1425:                                             ; preds = %1416
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.2, i32 noundef 475, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

1426:                                             ; preds = %1424
  br label %1427

1427:                                             ; preds = %1426, %1409
  %1428 = load ptr, ptr %33, align 8, !tbaa !5
  %1429 = load i32, ptr %15, align 4, !tbaa !12
  %1430 = add nsw i32 %1429, -1
  store i32 %1430, ptr %15, align 4, !tbaa !12
  %1431 = sext i32 %1430 to i64
  %1432 = getelementptr inbounds i32, ptr %1428, i64 %1431
  %1433 = load i32, ptr %1432, align 4, !tbaa !12
  %1434 = load ptr, ptr %33, align 8, !tbaa !5
  %1435 = load ptr, ptr %32, align 8, !tbaa !5
  %1436 = load i32, ptr %10, align 4, !tbaa !12
  %1437 = sext i32 %1436 to i64
  %1438 = getelementptr inbounds i32, ptr %1435, i64 %1437
  %1439 = load i32, ptr %1438, align 4, !tbaa !12
  %1440 = sext i32 %1439 to i64
  %1441 = getelementptr inbounds i32, ptr %1434, i64 %1440
  store i32 %1433, ptr %1441, align 4, !tbaa !12
  %1442 = load ptr, ptr %32, align 8, !tbaa !5
  %1443 = load i32, ptr %10, align 4, !tbaa !12
  %1444 = sext i32 %1443 to i64
  %1445 = getelementptr inbounds i32, ptr %1442, i64 %1444
  %1446 = load i32, ptr %1445, align 4, !tbaa !12
  %1447 = load ptr, ptr %32, align 8, !tbaa !5
  %1448 = load ptr, ptr %33, align 8, !tbaa !5
  %1449 = load i32, ptr %15, align 4, !tbaa !12
  %1450 = sext i32 %1449 to i64
  %1451 = getelementptr inbounds i32, ptr %1448, i64 %1450
  %1452 = load i32, ptr %1451, align 4, !tbaa !12
  %1453 = sext i32 %1452 to i64
  %1454 = getelementptr inbounds i32, ptr %1447, i64 %1453
  store i32 %1446, ptr %1454, align 4, !tbaa !12
  %1455 = load ptr, ptr %32, align 8, !tbaa !5
  %1456 = load i32, ptr %10, align 4, !tbaa !12
  %1457 = sext i32 %1456 to i64
  %1458 = getelementptr inbounds i32, ptr %1455, i64 %1457
  store i32 -1, ptr %1458, align 4, !tbaa !12
  br label %1459

1459:                                             ; preds = %1427
  br label %1460

1460:                                             ; preds = %1459
  br label %1461

1461:                                             ; preds = %1460, %1401, %1394
  %1462 = load ptr, ptr %32, align 8, !tbaa !5
  %1463 = load i32, ptr %10, align 4, !tbaa !12
  %1464 = sext i32 %1463 to i64
  %1465 = getelementptr inbounds i32, ptr %1462, i64 %1464
  %1466 = load i32, ptr %1465, align 4, !tbaa !12
  %1467 = icmp eq i32 %1466, -1
  br i1 %1467, label %1468, label %1508

1468:                                             ; preds = %1461
  %1469 = load ptr, ptr %31, align 8, !tbaa !5
  %1470 = load i32, ptr %10, align 4, !tbaa !12
  %1471 = sext i32 %1470 to i64
  %1472 = getelementptr inbounds i32, ptr %1469, i64 %1471
  %1473 = load i32, ptr %1472, align 4, !tbaa !12
  %1474 = icmp sgt i32 %1473, 0
  br i1 %1474, label %1475, label %1508

1475:                                             ; preds = %1468
  br label %1476

1476:                                             ; preds = %1475
  %1477 = load ptr, ptr %32, align 8, !tbaa !5
  %1478 = load i32, ptr %10, align 4, !tbaa !12
  %1479 = sext i32 %1478 to i64
  %1480 = getelementptr inbounds i32, ptr %1477, i64 %1479
  %1481 = load i32, ptr %1480, align 4, !tbaa !12
  %1482 = icmp eq i32 %1481, -1
  br i1 %1482, label %1494, label %1483

1483:                                             ; preds = %1476
  %1484 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 477, ptr noundef @.str.2)
  %1485 = load ptr, ptr %32, align 8, !tbaa !5
  %1486 = load i32, ptr %10, align 4, !tbaa !12
  %1487 = sext i32 %1486 to i64
  %1488 = getelementptr inbounds i32, ptr %1485, i64 %1487
  %1489 = load i32, ptr %1488, align 4, !tbaa !12
  %1490 = icmp eq i32 %1489, -1
  br i1 %1490, label %1491, label %1492

1491:                                             ; preds = %1483
  br label %1493

1492:                                             ; preds = %1483
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.2, i32 noundef 477, ptr noundef @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #5
  unreachable

1493:                                             ; preds = %1491
  br label %1494

1494:                                             ; preds = %1493, %1476
  %1495 = load i32, ptr %10, align 4, !tbaa !12
  %1496 = load ptr, ptr %33, align 8, !tbaa !5
  %1497 = load i32, ptr %15, align 4, !tbaa !12
  %1498 = sext i32 %1497 to i64
  %1499 = getelementptr inbounds i32, ptr %1496, i64 %1498
  store i32 %1495, ptr %1499, align 4, !tbaa !12
  %1500 = load i32, ptr %15, align 4, !tbaa !12
  %1501 = add nsw i32 %1500, 1
  store i32 %1501, ptr %15, align 4, !tbaa !12
  %1502 = load ptr, ptr %32, align 8, !tbaa !5
  %1503 = load i32, ptr %10, align 4, !tbaa !12
  %1504 = sext i32 %1503 to i64
  %1505 = getelementptr inbounds i32, ptr %1502, i64 %1504
  store i32 %1500, ptr %1505, align 4, !tbaa !12
  br label %1506

1506:                                             ; preds = %1494
  br label %1507

1507:                                             ; preds = %1506
  br label %1508

1508:                                             ; preds = %1507, %1468, %1461
  br label %1509

1509:                                             ; preds = %1508
  %1510 = load i32, ptr %9, align 4, !tbaa !12
  %1511 = add nsw i32 %1510, 1
  store i32 %1511, ptr %9, align 4, !tbaa !12
  br label %1341, !llvm.loop !46

1512:                                             ; preds = %1341
  br label %1513

1513:                                             ; preds = %1512
  %1514 = load i32, ptr %16, align 4, !tbaa !12
  %1515 = add nsw i32 %1514, -1
  store i32 %1515, ptr %16, align 4, !tbaa !12
  br label %1133, !llvm.loop !47

1516:                                             ; preds = %1133
  %1517 = load ptr, ptr %4, align 8, !tbaa !5
  %1518 = getelementptr inbounds %struct.ctrl_t, ptr %1517, i32 0, i32 2
  %1519 = load i32, ptr %1518, align 8, !tbaa !39
  %1520 = and i32 %1519, 8
  %1521 = icmp ne i32 %1520, 0
  br i1 %1521, label %1522, label %1556

1522:                                             ; preds = %1516
  %1523 = load i32, ptr %40, align 4, !tbaa !12
  %1524 = load i32, ptr %42, align 4, !tbaa !12
  %1525 = load i32, ptr %15, align 4, !tbaa !12
  %1526 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef %1523, i32 noundef %1524, i32 noundef %1525)
  store i32 0, ptr %11, align 4, !tbaa !12
  br label %1527

1527:                                             ; preds = %1545, %1522
  %1528 = load i32, ptr %11, align 4, !tbaa !12
  %1529 = load i32, ptr %14, align 4, !tbaa !12
  %1530 = icmp slt i32 %1528, %1529
  br i1 %1530, label %1531, label %1548

1531:                                             ; preds = %1527
  %1532 = load ptr, ptr %29, align 8, !tbaa !5
  %1533 = load i32, ptr %11, align 4, !tbaa !12
  %1534 = sext i32 %1533 to i64
  %1535 = getelementptr inbounds i32, ptr %1532, i64 %1534
  %1536 = load i32, ptr %1535, align 4, !tbaa !12
  %1537 = load ptr, ptr %29, align 8, !tbaa !5
  %1538 = load i32, ptr %14, align 4, !tbaa !12
  %1539 = load i32, ptr %11, align 4, !tbaa !12
  %1540 = add nsw i32 %1538, %1539
  %1541 = sext i32 %1540 to i64
  %1542 = getelementptr inbounds i32, ptr %1537, i64 %1541
  %1543 = load i32, ptr %1542, align 4, !tbaa !12
  %1544 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, i32 noundef %1536, i32 noundef %1543)
  br label %1545

1545:                                             ; preds = %1531
  %1546 = load i32, ptr %11, align 4, !tbaa !12
  %1547 = add nsw i32 %1546, 1
  store i32 %1547, ptr %11, align 4, !tbaa !12
  br label %1527, !llvm.loop !48

1548:                                             ; preds = %1527
  %1549 = load ptr, ptr %5, align 8, !tbaa !5
  %1550 = load ptr, ptr %4, align 8, !tbaa !5
  %1551 = getelementptr inbounds %struct.ctrl_t, ptr %1550, i32 0, i32 25
  %1552 = load ptr, ptr %1551, align 8, !tbaa !33
  %1553 = call float @libmetis__ComputeLoadImbalance(ptr noundef %1549, i32 noundef 2, ptr noundef %1552)
  %1554 = fpext float %1553 to double
  %1555 = call i32 (ptr, ...) @printf(ptr noundef @.str.29, double noundef %1554)
  br label %1556

1556:                                             ; preds = %1548, %1516
  %1557 = load i32, ptr %40, align 4, !tbaa !12
  %1558 = load ptr, ptr %5, align 8, !tbaa !5
  %1559 = getelementptr inbounds %struct.graph_t, ptr %1558, i32 0, i32 17
  store i32 %1557, ptr %1559, align 8, !tbaa !38
  %1560 = load i32, ptr %15, align 4, !tbaa !12
  %1561 = load ptr, ptr %5, align 8, !tbaa !5
  %1562 = getelementptr inbounds %struct.graph_t, ptr %1561, i32 0, i32 21
  store i32 %1560, ptr %1562, align 8, !tbaa !41
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %1563

1563:                                             ; preds = %1574, %1556
  %1564 = load i32, ptr %7, align 4, !tbaa !12
  %1565 = load i32, ptr %14, align 4, !tbaa !12
  %1566 = mul nsw i32 2, %1565
  %1567 = icmp slt i32 %1564, %1566
  br i1 %1567, label %1568, label %1577

1568:                                             ; preds = %1563
  %1569 = load ptr, ptr %48, align 8, !tbaa !5
  %1570 = load i32, ptr %7, align 4, !tbaa !12
  %1571 = sext i32 %1570 to i64
  %1572 = getelementptr inbounds ptr, ptr %1569, i64 %1571
  %1573 = load ptr, ptr %1572, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1573)
  br label %1574

1574:                                             ; preds = %1568
  %1575 = load i32, ptr %7, align 4, !tbaa !12
  %1576 = add nsw i32 %1575, 1
  store i32 %1576, ptr %7, align 4, !tbaa !12
  br label %1563, !llvm.loop !49

1577:                                             ; preds = %1563
  %1578 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1578)
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) #2

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

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

declare ptr @libmetis__rpqCreate(i64 noundef) #2

declare ptr @libmetis__iset(i64 noundef, i32 noundef, ptr noundef) #2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

declare i32 @libmetis__CheckBnd(ptr noundef) #2

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

declare i32 @libmetis__rpqInsert(ptr noundef, i32 noundef, float noundef) #2

declare i32 @libmetis__rpqGetTop(ptr noundef) #2

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

declare void @libmetis__rpqDestroy(ptr noundef) #2

declare void @libmetis__wspacepop(ptr noundef) #2

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

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

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

declare i32 @libmetis__iargmax_nrm(i64 noundef, ptr noundef, ptr noundef) #2

declare i32 @libmetis__iargmax2_nrm(i64 noundef, ptr noundef, ptr noundef) #2

declare float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @libmetis__SelectQueue(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare ptr @libmetis__iaxpy(i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #2

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

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

declare float @libmetis__ComputeLoadImbalance(ptr noundef, i32 noundef, ptr noundef) #2

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn 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, !11, i64 0}
!10 = !{!"graph_t", !11, i64 0, !11, i64 4, !11, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !6, i64 96, !6, i64 104, !11, i64 112, !11, i64 116, !6, i64 120, !6, i64 128, !11, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208}
!11 = !{!"int", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!10, !11, i64 8}
!14 = !{!10, !6, i64 16}
!15 = !{!10, !6, i64 24}
!16 = !{!10, !6, i64 40}
!17 = !{!10, !6, i64 48}
!18 = !{!10, !6, i64 64}
!19 = !{!10, !6, i64 120}
!20 = !{!10, !6, i64 160}
!21 = !{!10, !6, i64 168}
!22 = !{!10, !6, i64 128}
!23 = !{!10, !6, i64 144}
!24 = !{!10, !6, i64 152}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!29, !29, i64 0}
!29 = !{!"float", !7, i64 0}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = !{!34, !6, i64 120}
!34 = !{!"ctrl_t", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !6, i64 80, !11, i64 88, !11, i64 92, !29, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !29, i64 128, !35, i64 136, !35, i64 144, !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, !6, i64 232, !36, i64 240, !36, i64 248, !36, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320}
!35 = !{!"double", !7, i64 0}
!36 = !{!"long", !7, i64 0}
!37 = !{!34, !6, i64 104}
!38 = !{!10, !11, i64 112}
!39 = !{!34, !11, i64 8}
!40 = distinct !{!40, !26}
!41 = !{!10, !11, i64 136}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !26}
!47 = distinct !{!47, !26}
!48 = distinct !{!48, !26}
!49 = distinct !{!49, !26}


; 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"

@.str.1 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [13 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance = external hidden unnamed_addr constant [67 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__McGeneral2WayBalance(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2) local_unnamed_addr #0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  tail call void @libmetis__wspacepush(ptr noundef %0) #6
  %6 = load i32, ptr %1, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 8
  %8 = load i32, ptr %7, align 8, !tbaa !11
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %1, i64 24
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 40
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %1, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %1, i64 64
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 120
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %1, i64 160
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = getelementptr inbounds i8, ptr %1, i64 168
  %24 = load ptr, ptr %23, align 8, !tbaa !19
  %25 = getelementptr inbounds i8, ptr %1, i64 128
  %26 = load ptr, ptr %25, align 8, !tbaa !20
  %27 = getelementptr inbounds i8, ptr %1, i64 144
  %28 = load ptr, ptr %27, align 8, !tbaa !21
  %29 = getelementptr inbounds i8, ptr %1, i64 152
  %30 = load ptr, ptr %29, align 8, !tbaa !22
  %31 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %6) #6
  %32 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %6) #6
  %33 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %6) #6
  %34 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %6) #6
  %35 = tail call ptr @libmetis__rwspacemalloc(ptr noundef %0, i32 noundef %8) #6
  %36 = tail call ptr @libmetis__rwspacemalloc(ptr noundef %0, i32 noundef %8) #6
  %37 = shl nsw i32 %8, 1
  %38 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %37) #6
  %39 = sitofp i32 %6 to double
  %40 = fmul double %39, 1.000000e-02
  %41 = fcmp oge double %40, 1.500000e+01
  %42 = select i1 %41, double %40, double 1.500000e+01
  %.inv = fcmp oge double %42, 1.000000e+02
  %43 = select i1 %.inv, double 1.000000e+02, double %42
  %44 = fptosi double %43 to i32
  %45 = sext i32 %37 to i64
  %46 = shl nsw i64 %45, 3
  %47 = tail call ptr @libmetis__wspacemalloc(ptr noundef %0, i64 noundef %46) #6
  %48 = icmp sgt i32 %8, 0
  br i1 %48, label %.lr.ph, label %.preheader566.thread

.lr.ph:                                           ; preds = %3
  %49 = sext i32 %6 to i64
  %smax = tail call i32 @llvm.smax.i32(i32 %37, i32 1)
  %wide.trip.count = zext nneg i32 %smax to i64
  br label %53

.preheader566:                                    ; preds = %53
  %50 = icmp sgt i32 %6, 0
  br i1 %50, label %.lr.ph579, label %.preheader565.thread

.preheader566.thread:                             ; preds = %3
  %51 = icmp sgt i32 %6, 0
  br i1 %51, label %.lr.ph579, label %.preheader565.thread.thread

.preheader565.thread.thread:                      ; preds = %.preheader566.thread
  %.pre717725 = sext i32 %8 to i64
  br label %.preheader565.split

.lr.ph579:                                        ; preds = %.preheader566.thread, %.preheader566
  %52 = sext i32 %8 to i64
  %wide.trip.count659 = zext nneg i32 %6 to i64
  br label %171

53:                                               ; preds = %.lr.ph, %53
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %53 ]
  %54 = tail call ptr @libmetis__rpqCreate(i64 noundef %49) #6
  %55 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv
  store ptr %54, ptr %55, align 8, !tbaa !23
  %56 = getelementptr inbounds i32, ptr %38, i64 %indvars.iv
  store i32 0, ptr %56, align 4, !tbaa !24
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader566, label %53, !llvm.loop !25

.preheader565:                                    ; preds = %171
  br i1 %48, label %.preheader564.us.us.preheader, label %.preheader565.split

.preheader565.thread:                             ; preds = %.preheader566
  %.pre717 = zext nneg i32 %8 to i64
  br i1 %48, label %.preheader564.us, label %.preheader565.split

.preheader564.us.us.preheader:                    ; preds = %.preheader565
  %57 = zext nneg i32 %8 to i64
  %wide.trip.count667 = zext nneg i32 %6 to i64
  br label %58

58:                                               ; preds = %..loopexit563_crit_edge.us.us.us, %.preheader564.us.us.preheader
  %indvars.iv669 = phi i64 [ %indvars.iv.next670, %..loopexit563_crit_edge.us.us.us ], [ 0, %.preheader564.us.us.preheader ]
  %indvars.iv669.tr = trunc i64 %indvars.iv669 to i32
  %59 = shl i32 %indvars.iv669.tr, 1
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds i32, ptr %38, i64 %60
  %62 = load i32, ptr %61, align 4, !tbaa !24
  %63 = icmp eq i32 %62, 0
  br i1 %63, label %.preheader562.us.us.us, label %..loopexit563_crit_edge.us.us.us

..loopexit563_crit_edge.us.us.us:                 ; preds = %105, %58
  %indvars.iv.next670 = add nuw nsw i64 %indvars.iv669, 1
  %exitcond673.not = icmp eq i64 %indvars.iv.next670, %57
  br i1 %exitcond673.not, label %._crit_edge.split.us.us.us, label %58, !llvm.loop !27

64:                                               ; preds = %.preheader562.us.us.us, %105
  %indvars.iv664 = phi i64 [ 0, %.preheader562.us.us.us ], [ %indvars.iv.next665, %105 ]
  %65 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv664
  %66 = load i32, ptr %65, align 4, !tbaa !24
  %.not554.us.us.us = icmp eq i32 %66, 0
  br i1 %.not554.us.us.us, label %67, label %105

67:                                               ; preds = %64
  %68 = mul nuw nsw i64 %indvars.iv664, %57
  %69 = getelementptr inbounds i32, ptr %12, i64 %68
  %70 = tail call i32 @libmetis__iargmax2_nrm(i64 noundef %52, ptr noundef %69, ptr noundef %18) #6
  %71 = zext i32 %70 to i64
  %72 = icmp eq i64 %indvars.iv669, %71
  br i1 %72, label %73, label %105

73:                                               ; preds = %67
  %74 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv664
  %75 = load i32, ptr %74, align 4, !tbaa !24
  %76 = shl nsw i32 %75, 1
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i32, ptr %38, i64 %77
  %79 = load i32, ptr %78, align 4, !tbaa !24
  %80 = load i32, ptr %108, align 4, !tbaa !24
  %81 = icmp sgt i32 %79, %80
  br i1 %81, label %82, label %105

82:                                               ; preds = %73
  %83 = trunc nuw i64 %68 to i32
  %84 = add nsw i32 %75, %83
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds i32, ptr %12, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !24
  %88 = sitofp i32 %87 to float
  %89 = sext i32 %75 to i64
  %90 = getelementptr inbounds float, ptr %18, i64 %89
  %91 = load float, ptr %90, align 4, !tbaa !28
  %92 = fmul float %91, %88
  %93 = fpext float %92 to double
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %68
  %94 = load i32, ptr %gep, align 4, !tbaa !24
  %95 = sitofp i32 %94 to double
  %96 = fmul double %95, 1.300000e+00
  %97 = load float, ptr %106, align 4, !tbaa !28
  %98 = fpext float %97 to double
  %99 = fmul double %96, %98
  %100 = fcmp ogt double %99, %93
  br i1 %100, label %101, label %105

101:                                              ; preds = %82
  %102 = add nsw i32 %79, -1
  store i32 %102, ptr %78, align 4, !tbaa !24
  %103 = load i32, ptr %110, align 4, !tbaa !24
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %110, align 4, !tbaa !24
  store i32 %111, ptr %74, align 4, !tbaa !24
  br label %105

105:                                              ; preds = %101, %82, %73, %67, %64
  %indvars.iv.next665 = add nuw nsw i64 %indvars.iv664, 1
  %exitcond668.not = icmp eq i64 %indvars.iv.next665, %wide.trip.count667
  br i1 %exitcond668.not, label %..loopexit563_crit_edge.us.us.us, label %64, !llvm.loop !30

.preheader562.us.us.us:                           ; preds = %58
  %106 = getelementptr inbounds float, ptr %18, i64 %indvars.iv669
  %107 = sext i32 %59 to i64
  %108 = getelementptr inbounds i32, ptr %38, i64 %107
  %invariant.gep = getelementptr inbounds i32, ptr %12, i64 %indvars.iv669
  %109 = sext i32 %59 to i64
  %110 = getelementptr inbounds i32, ptr %38, i64 %109
  %111 = trunc nuw nsw i64 %indvars.iv669 to i32
  br label %64

._crit_edge.split.us.us.us:                       ; preds = %..loopexit563_crit_edge.us.us.us
  store i32 1, ptr %4, align 4, !tbaa !24
  br label %112

112:                                              ; preds = %..loopexit563_crit_edge.us.us.us.1, %._crit_edge.split.us.us.us
  %indvars.iv669.1 = phi i64 [ %indvars.iv.next670.1, %..loopexit563_crit_edge.us.us.us.1 ], [ 0, %._crit_edge.split.us.us.us ]
  %indvars.iv669.tr.1 = trunc i64 %indvars.iv669.1 to i32
  %113 = shl i32 %indvars.iv669.tr.1, 1
  %114 = or disjoint i32 %113, 1
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds i32, ptr %38, i64 %115
  %117 = load i32, ptr %116, align 4, !tbaa !24
  %118 = icmp eq i32 %117, 0
  br i1 %118, label %.preheader562.us.us.us.1, label %..loopexit563_crit_edge.us.us.us.1

.preheader562.us.us.us.1:                         ; preds = %112
  %119 = getelementptr inbounds float, ptr %18, i64 %indvars.iv669.1
  %120 = or disjoint i32 %113, 1
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds i32, ptr %38, i64 %121
  %invariant.gep.1 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv669.1
  %123 = or disjoint i32 %113, 1
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds i32, ptr %38, i64 %124
  %126 = trunc nuw nsw i64 %indvars.iv669.1 to i32
  br label %127

127:                                              ; preds = %169, %.preheader562.us.us.us.1
  %indvars.iv664.1 = phi i64 [ 0, %.preheader562.us.us.us.1 ], [ %indvars.iv.next665.1, %169 ]
  %128 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv664.1
  %129 = load i32, ptr %128, align 4, !tbaa !24
  %.not554.us.us.us.1 = icmp eq i32 %129, 1
  br i1 %.not554.us.us.us.1, label %130, label %169

130:                                              ; preds = %127
  %131 = mul nuw nsw i64 %indvars.iv664.1, %57
  %132 = getelementptr inbounds i32, ptr %12, i64 %131
  %133 = tail call i32 @libmetis__iargmax2_nrm(i64 noundef %52, ptr noundef %132, ptr noundef %18) #6
  %134 = zext i32 %133 to i64
  %135 = icmp eq i64 %indvars.iv669.1, %134
  br i1 %135, label %136, label %169

136:                                              ; preds = %130
  %137 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv664.1
  %138 = load i32, ptr %137, align 4, !tbaa !24
  %139 = shl nsw i32 %138, 1
  %140 = or disjoint i32 %139, 1
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds i32, ptr %38, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !24
  %144 = load i32, ptr %122, align 4, !tbaa !24
  %145 = icmp sgt i32 %143, %144
  br i1 %145, label %146, label %169

146:                                              ; preds = %136
  %147 = trunc nuw i64 %131 to i32
  %148 = add nsw i32 %138, %147
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds i32, ptr %12, i64 %149
  %151 = load i32, ptr %150, align 4, !tbaa !24
  %152 = sitofp i32 %151 to float
  %153 = sext i32 %138 to i64
  %154 = getelementptr inbounds float, ptr %18, i64 %153
  %155 = load float, ptr %154, align 4, !tbaa !28
  %156 = fmul float %155, %152
  %157 = fpext float %156 to double
  %gep.1 = getelementptr inbounds i32, ptr %invariant.gep.1, i64 %131
  %158 = load i32, ptr %gep.1, align 4, !tbaa !24
  %159 = sitofp i32 %158 to double
  %160 = fmul double %159, 1.300000e+00
  %161 = load float, ptr %119, align 4, !tbaa !28
  %162 = fpext float %161 to double
  %163 = fmul double %160, %162
  %164 = fcmp ogt double %163, %157
  br i1 %164, label %165, label %169

165:                                              ; preds = %146
  %166 = add nsw i32 %143, -1
  store i32 %166, ptr %142, align 4, !tbaa !24
  %167 = load i32, ptr %125, align 4, !tbaa !24
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %125, align 4, !tbaa !24
  store i32 %126, ptr %137, align 4, !tbaa !24
  br label %169

169:                                              ; preds = %165, %146, %136, %130, %127
  %indvars.iv.next665.1 = add nuw nsw i64 %indvars.iv664.1, 1
  %exitcond668.not.1 = icmp eq i64 %indvars.iv.next665.1, %wide.trip.count667
  br i1 %exitcond668.not.1, label %..loopexit563_crit_edge.us.us.us.1, label %127, !llvm.loop !30

..loopexit563_crit_edge.us.us.us.1:               ; preds = %169, %112
  %indvars.iv.next670.1 = add nuw nsw i64 %indvars.iv669.1, 1
  %exitcond673.not.1 = icmp eq i64 %indvars.iv.next670.1, %57
  br i1 %exitcond673.not.1, label %._crit_edge.split.us.us.us.1, label %112, !llvm.loop !27

._crit_edge.split.us.us.us.1:                     ; preds = %..loopexit563_crit_edge.us.us.us.1
  store i32 2, ptr %4, align 4, !tbaa !24
  br label %.split.us

.preheader564.us:                                 ; preds = %.preheader565.thread
  store i32 2, ptr %4, align 4, !tbaa !24
  br label %.split.us

.preheader565.split:                              ; preds = %.preheader565.thread.thread, %.preheader565.thread, %.preheader565
  %170 = phi i1 [ false, %.preheader565.thread ], [ true, %.preheader565 ], [ false, %.preheader565.thread.thread ]
  %.pre-phi720 = phi i64 [ %.pre717, %.preheader565.thread ], [ %52, %.preheader565 ], [ %.pre717725, %.preheader565.thread.thread ]
  store i32 2, ptr %4, align 4, !tbaa !24
  br label %.split.us

171:                                              ; preds = %.lr.ph579, %171
  %indvars.iv656 = phi i64 [ 0, %.lr.ph579 ], [ %indvars.iv.next657, %171 ]
  %172 = mul nsw i64 %indvars.iv656, %52
  %173 = getelementptr inbounds i32, ptr %12, i64 %172
  %174 = tail call i32 @libmetis__iargmax_nrm(i64 noundef %52, ptr noundef %173, ptr noundef %18) #6
  %175 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv656
  store i32 %174, ptr %175, align 4, !tbaa !24
  %176 = shl nsw i32 %174, 1
  %177 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv656
  %178 = load i32, ptr %177, align 4, !tbaa !24
  %179 = add nsw i32 %178, %176
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %38, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !24
  %183 = add nsw i32 %182, 1
  store i32 %183, ptr %181, align 4, !tbaa !24
  %indvars.iv.next657 = add nuw nsw i64 %indvars.iv656, 1
  %exitcond660.not = icmp eq i64 %indvars.iv.next657, %wide.trip.count659
  br i1 %exitcond660.not, label %.preheader565, label %171, !llvm.loop !31

.split.us:                                        ; preds = %._crit_edge.split.us.us.us.1, %.preheader564.us, %.preheader565.split
  %184 = phi i1 [ %170, %.preheader565.split ], [ false, %.preheader564.us ], [ true, %._crit_edge.split.us.us.us.1 ]
  %.pre-phi719 = phi i64 [ %.pre-phi720, %.preheader565.split ], [ %.pre717, %.preheader564.us ], [ %52, %._crit_edge.split.us.us.us.1 ]
  %185 = getelementptr inbounds i8, ptr %0, i64 120
  %186 = load ptr, ptr %185, align 8, !tbaa !32
  %187 = getelementptr inbounds i8, ptr %0, i64 104
  %188 = load ptr, ptr %187, align 8, !tbaa !36
  %189 = tail call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %186, ptr noundef %188, ptr noundef %36) #6
  %190 = fpext float %189 to double
  %191 = fcmp ogt float %189, 0.000000e+00
  br i1 %191, label %194, label %192

192:                                              ; preds = %.split.us
  %193 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef 353, ptr noundef nonnull @.str.2)
  tail call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.2, i32 noundef 353, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #7
  unreachable

194:                                              ; preds = %.split.us
  %195 = getelementptr inbounds i8, ptr %1, i64 112
  %196 = load i32, ptr %195, align 8, !tbaa !37
  %197 = getelementptr inbounds i8, ptr %0, i64 8
  %198 = load i32, ptr %197, align 8, !tbaa !38
  %199 = and i32 %198, 8
  %.not = icmp eq i32 %199, 0
  br i1 %.not, label %220, label %200

200:                                              ; preds = %194
  %201 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22)
  br i1 %48, label %.lr.ph592.preheader, label %._crit_edge

.lr.ph592.preheader:                              ; preds = %200
  %202 = zext nneg i32 %8 to i64
  br label %.lr.ph592

.lr.ph592:                                        ; preds = %.lr.ph592.preheader, %.lr.ph592
  %indvars.iv674 = phi i64 [ 0, %.lr.ph592.preheader ], [ %indvars.iv.next675, %.lr.ph592 ]
  %203 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv674
  %204 = load i32, ptr %203, align 4, !tbaa !24
  %205 = add nuw nsw i64 %indvars.iv674, %202
  %206 = getelementptr inbounds i32, ptr %26, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !24
  %208 = getelementptr inbounds float, ptr %2, i64 %indvars.iv674
  %209 = load float, ptr %208, align 4, !tbaa !28
  %210 = fpext float %209 to double
  %211 = getelementptr inbounds float, ptr %2, i64 %205
  %212 = load float, ptr %211, align 4, !tbaa !28
  %213 = fpext float %212 to double
  %214 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i32 noundef %204, i32 noundef %207, double noundef %210, double noundef %213)
  %indvars.iv.next675 = add nuw nsw i64 %indvars.iv674, 1
  %exitcond678.not = icmp eq i64 %indvars.iv.next675, %202
  br i1 %exitcond678.not, label %._crit_edge, label %.lr.ph592, !llvm.loop !39

._crit_edge:                                      ; preds = %.lr.ph592, %200
  %215 = load i32, ptr %1, align 8, !tbaa !5
  %216 = getelementptr inbounds i8, ptr %1, i64 136
  %217 = load i32, ptr %216, align 8, !tbaa !40
  %218 = load i32, ptr %195, align 8, !tbaa !37
  %219 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, i32 noundef %215, i32 noundef %217, i32 noundef %218, double noundef %190)
  br label %220

220:                                              ; preds = %._crit_edge, %194
  %221 = sext i32 %6 to i64
  %222 = tail call ptr @libmetis__iset(i64 noundef %221, i32 noundef -1, ptr noundef %31) #6
  %223 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %20) #6
  %224 = load i32, ptr %195, align 8, !tbaa !37
  %225 = icmp eq i32 %223, %224
  br i1 %225, label %232, label %226

226:                                              ; preds = %220
  %227 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef 369, ptr noundef nonnull @.str.2)
  %228 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %20) #6
  %229 = load i32, ptr %195, align 8, !tbaa !37
  %230 = icmp eq i32 %228, %229
  br i1 %230, label %232, label %231

231:                                              ; preds = %226
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 369, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #7
  unreachable

232:                                              ; preds = %226, %220
  %233 = tail call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #6
  %.not545 = icmp eq i32 %233, 0
  br i1 %.not545, label %234, label %238

234:                                              ; preds = %232
  %235 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef 370, ptr noundef nonnull @.str.2)
  %236 = tail call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #6
  %.not546 = icmp eq i32 %236, 0
  br i1 %.not546, label %237, label %238

237:                                              ; preds = %234
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, i32 noundef 370, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__McGeneral2WayBalance) #7
  unreachable

238:                                              ; preds = %234, %232
  %239 = getelementptr inbounds i8, ptr %1, i64 136
  %240 = load i32, ptr %239, align 8, !tbaa !40
  %241 = sdiv i32 %6, 10
  tail call void @libmetis__irandArrayPermute(i32 noundef %6, ptr noundef %33, i32 noundef %241, i32 noundef 1) #6
  br i1 %184, label %.lr.ph595.preheader, label %.loopexit561

.lr.ph595.preheader:                              ; preds = %238
  %wide.trip.count682 = zext nneg i32 %6 to i64
  br label %.lr.ph595

.preheader:                                       ; preds = %.lr.ph595
  br i1 %184, label %.lr.ph614, label %.loopexit561

.lr.ph614:                                        ; preds = %.preheader
  %242 = zext i32 %8 to i64
  %invariant.gep734 = getelementptr inbounds i32, ptr %26, i64 %242
  br label %262

.lr.ph595:                                        ; preds = %.lr.ph595.preheader, %.lr.ph595
  %indvars.iv679 = phi i64 [ 0, %.lr.ph595.preheader ], [ %indvars.iv.next680, %.lr.ph595 ]
  %243 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv679
  %244 = load i32, ptr %243, align 4, !tbaa !24
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %34, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !24
  %248 = shl nsw i32 %247, 1
  %249 = getelementptr inbounds i32, ptr %20, i64 %245
  %250 = load i32, ptr %249, align 4, !tbaa !24
  %251 = add nsw i32 %248, %250
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds ptr, ptr %47, i64 %252
  %254 = load ptr, ptr %253, align 8, !tbaa !23
  %255 = getelementptr inbounds i32, ptr %24, i64 %245
  %256 = load i32, ptr %255, align 4, !tbaa !24
  %257 = getelementptr inbounds i32, ptr %22, i64 %245
  %258 = load i32, ptr %257, align 4, !tbaa !24
  %259 = sub nsw i32 %256, %258
  %260 = sitofp i32 %259 to float
  %261 = tail call i32 @libmetis__rpqInsert(ptr noundef %254, i32 noundef %244, float noundef %260) #6
  %indvars.iv.next680 = add nuw nsw i64 %indvars.iv679, 1
  %exitcond683.not = icmp eq i64 %indvars.iv.next680, %wide.trip.count682
  br i1 %exitcond683.not, label %.preheader, label %.lr.ph595, !llvm.loop !41

262:                                              ; preds = %.lr.ph614, %._crit_edge604
  %indvars.iv692 = phi i64 [ 0, %.lr.ph614 ], [ %indvars.iv.next693, %._crit_edge604 ]
  %.0514613 = phi float [ %189, %.lr.ph614 ], [ %.1515, %._crit_edge604 ]
  %.0522612 = phi i32 [ -1, %.lr.ph614 ], [ %.1523, %._crit_edge604 ]
  %.0524611 = phi i32 [ %196, %.lr.ph614 ], [ %285, %._crit_edge604 ]
  %.0525610 = phi i32 [ %196, %.lr.ph614 ], [ %.1526, %._crit_edge604 ]
  %.0527608 = phi i32 [ %240, %.lr.ph614 ], [ %.3530.lcssa, %._crit_edge604 ]
  %263 = load ptr, ptr %185, align 8, !tbaa !32
  %264 = load ptr, ptr %187, align 8, !tbaa !36
  call void @libmetis__SelectQueue(ptr noundef nonnull %1, ptr noundef %263, ptr noundef %264, ptr noundef %47, ptr noundef nonnull %4, ptr noundef nonnull %5) #6
  %265 = load i32, ptr %4, align 4, !tbaa !24
  %266 = add nsw i32 %265, 1
  %267 = srem i32 %266, 2
  %268 = icmp eq i32 %265, -1
  %269 = trunc nuw nsw i64 %indvars.iv692 to i32
  br i1 %268, label %.loopexit561, label %270

270:                                              ; preds = %262
  %271 = load i32, ptr %5, align 4, !tbaa !24
  %272 = shl nsw i32 %271, 1
  %273 = add nsw i32 %272, %265
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds ptr, ptr %47, i64 %274
  %276 = load ptr, ptr %275, align 8, !tbaa !23
  %277 = call i32 @libmetis__rpqGetTop(ptr noundef %276) #6
  %278 = icmp eq i32 %277, -1
  br i1 %278, label %.loopexit561, label %279

279:                                              ; preds = %270
  %280 = sext i32 %277 to i64
  %281 = getelementptr inbounds i32, ptr %24, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !24
  %283 = getelementptr inbounds i32, ptr %22, i64 %280
  %284 = load i32, ptr %283, align 4, !tbaa !24
  %.neg = sub i32 %284, %282
  %285 = add i32 %.neg, %.0524611
  %286 = mul nsw i32 %277, %8
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds i32, ptr %12, i64 %287
  %289 = mul nsw i32 %267, %8
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i32, ptr %26, i64 %290
  %292 = call ptr @libmetis__iaxpy(i64 noundef %.pre-phi719, i32 noundef 1, ptr noundef %288, i64 noundef 1, ptr noundef %291, i64 noundef 1) #6
  %293 = load i32, ptr %4, align 4, !tbaa !24
  %294 = mul nsw i32 %293, %8
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds i32, ptr %26, i64 %295
  %297 = call ptr @libmetis__iaxpy(i64 noundef %.pre-phi719, i32 noundef -1, ptr noundef %288, i64 noundef 1, ptr noundef %296, i64 noundef 1) #6
  %298 = load ptr, ptr %185, align 8, !tbaa !32
  %299 = load ptr, ptr %187, align 8, !tbaa !36
  %300 = call float @libmetis__ComputeLoadImbalanceDiffVec(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %298, ptr noundef %299, ptr noundef %35) #6
  %301 = fcmp olt float %300, %.0514613
  br i1 %301, label %310, label %302

302:                                              ; preds = %279
  %303 = fcmp oeq float %300, %.0514613
  br i1 %303, label %304, label %312

304:                                              ; preds = %302
  %305 = icmp slt i32 %285, %.0525610
  br i1 %305, label %310, label %306

306:                                              ; preds = %304
  %307 = icmp eq i32 %285, %.0525610
  br i1 %307, label %308, label %312

308:                                              ; preds = %306
  %309 = call i32 @libmetis__BetterBalance2Way(i32 noundef %8, ptr noundef %36, ptr noundef %35) #6
  %.not547 = icmp eq i32 %309, 0
  br i1 %.not547, label %312, label %310

310:                                              ; preds = %308, %304, %279
  %311 = call ptr @libmetis__rcopy(i64 noundef %.pre-phi719, ptr noundef %35, ptr noundef %36) #6
  br label %322

312:                                              ; preds = %308, %306, %302
  %313 = sub nsw i32 %269, %.0522612
  %314 = icmp sgt i32 %313, %44
  br i1 %314, label %315, label %322

315:                                              ; preds = %312
  %316 = load i32, ptr %4, align 4, !tbaa !24
  %317 = mul nsw i32 %316, %8
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i32, ptr %26, i64 %318
  %320 = call ptr @libmetis__iaxpy(i64 noundef %.pre-phi719, i32 noundef 1, ptr noundef %288, i64 noundef 1, ptr noundef %319, i64 noundef 1) #6
  %321 = call ptr @libmetis__iaxpy(i64 noundef %.pre-phi719, i32 noundef -1, ptr noundef %288, i64 noundef 1, ptr noundef %291, i64 noundef 1) #6
  br label %.loopexit561

322:                                              ; preds = %312, %310
  %.1526 = phi i32 [ %285, %310 ], [ %.0525610, %312 ]
  %.1523 = phi i32 [ %269, %310 ], [ %.0522612, %312 ]
  %.1515 = phi float [ %300, %310 ], [ %.0514613, %312 ]
  %323 = getelementptr inbounds i32, ptr %20, i64 %280
  store i32 %267, ptr %323, align 4, !tbaa !24
  %324 = getelementptr inbounds i32, ptr %31, i64 %280
  store i32 %269, ptr %324, align 4, !tbaa !24
  %325 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv692
  store i32 %277, ptr %325, align 4, !tbaa !24
  %326 = load i32, ptr %197, align 8, !tbaa !38
  %327 = and i32 %326, 32
  %.not548 = icmp eq i32 %327, 0
  br i1 %.not548, label %342, label %328

328:                                              ; preds = %322
  %329 = load i32, ptr %4, align 4, !tbaa !24
  %330 = load i32, ptr %5, align 4, !tbaa !24
  %331 = load i32, ptr %281, align 4, !tbaa !24
  %332 = load i32, ptr %283, align 4, !tbaa !24
  %333 = sub nsw i32 %331, %332
  %334 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, i32 noundef %277, i32 noundef %329, i32 noundef %330, i32 noundef %333, i32 noundef %285)
  br i1 %48, label %.lr.ph598, label %._crit_edge599

.lr.ph598:                                        ; preds = %328, %.lr.ph598
  %indvars.iv684 = phi i64 [ %indvars.iv.next685, %.lr.ph598 ], [ 0, %328 ]
  %335 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv684
  %336 = load i32, ptr %335, align 4, !tbaa !24
  %gep735 = getelementptr inbounds i32, ptr %invariant.gep734, i64 %indvars.iv684
  %337 = load i32, ptr %gep735, align 4, !tbaa !24
  %338 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, i32 noundef %336, i32 noundef %337)
  %indvars.iv.next685 = add nuw nsw i64 %indvars.iv684, 1
  %exitcond688.not = icmp eq i64 %indvars.iv.next685, %242
  br i1 %exitcond688.not, label %._crit_edge599, label %.lr.ph598, !llvm.loop !42

._crit_edge599:                                   ; preds = %.lr.ph598, %328
  %339 = fpext float %.1515 to double
  %340 = fpext float %300 to double
  %341 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, double noundef %339, double noundef %340)
  br label %342

342:                                              ; preds = %322, %._crit_edge599
  %343 = load i32, ptr %283, align 4, !tbaa !24
  %344 = load i32, ptr %281, align 4, !tbaa !24
  store i32 %344, ptr %283, align 4, !tbaa !24
  store i32 %343, ptr %281, align 4, !tbaa !24
  %345 = icmp eq i32 %343, 0
  br i1 %345, label %346, label %thread-pre-split

346:                                              ; preds = %342
  %347 = getelementptr inbounds i32, ptr %28, i64 %280
  %348 = load i32, ptr %347, align 4, !tbaa !24
  %.not549 = icmp eq i32 %348, -1
  br i1 %.not549, label %thread-pre-split.thread, label %349

349:                                              ; preds = %346
  %350 = getelementptr inbounds i32, ptr %10, i64 %280
  %351 = load i32, ptr %350, align 4, !tbaa !24
  %352 = getelementptr i8, ptr %350, i64 4
  %353 = load i32, ptr %352, align 4, !tbaa !24
  %354 = icmp slt i32 %351, %353
  br i1 %354, label %355, label %thread-pre-split.thread

355:                                              ; preds = %349
  %356 = add nsw i32 %.0527608, -1
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds i32, ptr %30, i64 %357
  %359 = load i32, ptr %358, align 4, !tbaa !24
  %360 = sext i32 %348 to i64
  %361 = getelementptr inbounds i32, ptr %30, i64 %360
  store i32 %359, ptr %361, align 4, !tbaa !24
  %362 = load i32, ptr %347, align 4, !tbaa !24
  %363 = sext i32 %359 to i64
  %364 = getelementptr inbounds i32, ptr %28, i64 %363
  store i32 %362, ptr %364, align 4, !tbaa !24
  store i32 -1, ptr %347, align 4, !tbaa !24
  %.pr.pre = load i32, ptr %281, align 4, !tbaa !24
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %355, %342
  %365 = phi i32 [ %343, %342 ], [ %.pr.pre, %355 ]
  %.1528 = phi i32 [ %.0527608, %342 ], [ %356, %355 ]
  %366 = icmp sgt i32 %365, 0
  br i1 %366, label %367, label %thread-pre-split.thread

367:                                              ; preds = %thread-pre-split
  %368 = getelementptr inbounds i32, ptr %28, i64 %280
  %369 = load i32, ptr %368, align 4, !tbaa !24
  %370 = icmp eq i32 %369, -1
  br i1 %370, label %371, label %thread-pre-split.thread

371:                                              ; preds = %367
  %372 = sext i32 %.1528 to i64
  %373 = getelementptr inbounds i32, ptr %30, i64 %372
  store i32 %277, ptr %373, align 4, !tbaa !24
  %374 = add nsw i32 %.1528, 1
  store i32 %.1528, ptr %368, align 4, !tbaa !24
  br label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %349, %346, %371, %367, %thread-pre-split
  %.2529 = phi i32 [ %374, %371 ], [ %.1528, %367 ], [ %.1528, %thread-pre-split ], [ %.0527608, %346 ], [ %.0527608, %349 ]
  %375 = getelementptr inbounds i32, ptr %10, i64 %280
  %376 = load i32, ptr %375, align 4, !tbaa !24
  %377 = getelementptr i8, ptr %375, i64 4
  %378 = load i32, ptr %377, align 4, !tbaa !24
  %379 = icmp slt i32 %376, %378
  br i1 %379, label %.lr.ph603.preheader, label %._crit_edge604

.lr.ph603.preheader:                              ; preds = %thread-pre-split.thread
  %380 = sext i32 %376 to i64
  br label %.lr.ph603

.lr.ph603:                                        ; preds = %.lr.ph603.preheader, %.thread
  %indvars.iv689 = phi i64 [ %380, %.lr.ph603.preheader ], [ %indvars.iv.next690, %.thread ]
  %.3530600 = phi i32 [ %.2529, %.lr.ph603.preheader ], [ %.4, %.thread ]
  %381 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv689
  %382 = load i32, ptr %381, align 4, !tbaa !24
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds i32, ptr %20, i64 %383
  %385 = load i32, ptr %384, align 4, !tbaa !24
  %386 = icmp eq i32 %267, %385
  %387 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv689
  %388 = load i32, ptr %387, align 4, !tbaa !24
  %389 = sub nsw i32 0, %388
  %390 = select i1 %386, i32 %388, i32 %389
  %391 = getelementptr inbounds i32, ptr %22, i64 %383
  %392 = load i32, ptr %391, align 4, !tbaa !24
  %393 = add nsw i32 %392, %390
  store i32 %393, ptr %391, align 4, !tbaa !24
  %394 = getelementptr inbounds i32, ptr %24, i64 %383
  %395 = load i32, ptr %394, align 4, !tbaa !24
  %396 = sub nsw i32 %395, %390
  store i32 %396, ptr %394, align 4, !tbaa !24
  %397 = getelementptr inbounds i32, ptr %31, i64 %383
  %398 = load i32, ptr %397, align 4, !tbaa !24
  %399 = icmp eq i32 %398, -1
  br i1 %399, label %400, label %412

400:                                              ; preds = %.lr.ph603
  %401 = getelementptr inbounds i32, ptr %34, i64 %383
  %402 = load i32, ptr %401, align 4, !tbaa !24
  %403 = shl nsw i32 %402, 1
  %404 = load i32, ptr %384, align 4, !tbaa !24
  %405 = add nsw i32 %403, %404
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds ptr, ptr %47, i64 %406
  %408 = load ptr, ptr %407, align 8, !tbaa !23
  %409 = load i32, ptr %391, align 4, !tbaa !24
  %410 = sub nsw i32 %396, %409
  %411 = sitofp i32 %410 to float
  call void @libmetis__rpqUpdate(ptr noundef %408, i32 noundef %382, float noundef %411) #6
  %.pr556 = load i32, ptr %394, align 4, !tbaa !24
  br label %412

412:                                              ; preds = %400, %.lr.ph603
  %413 = phi i32 [ %.pr556, %400 ], [ %396, %.lr.ph603 ]
  %414 = icmp eq i32 %413, 0
  br i1 %414, label %415, label %428

415:                                              ; preds = %412
  %416 = getelementptr inbounds i32, ptr %28, i64 %383
  %417 = load i32, ptr %416, align 4, !tbaa !24
  %.not550 = icmp eq i32 %417, -1
  br i1 %.not550, label %.thread, label %418

418:                                              ; preds = %415
  %419 = add nsw i32 %.3530600, -1
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds i32, ptr %30, i64 %420
  %422 = load i32, ptr %421, align 4, !tbaa !24
  %423 = sext i32 %417 to i64
  %424 = getelementptr inbounds i32, ptr %30, i64 %423
  store i32 %422, ptr %424, align 4, !tbaa !24
  %425 = load i32, ptr %416, align 4, !tbaa !24
  %426 = sext i32 %422 to i64
  %427 = getelementptr inbounds i32, ptr %28, i64 %426
  store i32 %425, ptr %427, align 4, !tbaa !24
  store i32 -1, ptr %416, align 4, !tbaa !24
  br label %.thread

428:                                              ; preds = %412
  %429 = icmp sgt i32 %413, 0
  br i1 %429, label %430, label %.thread

430:                                              ; preds = %428
  %431 = getelementptr inbounds i32, ptr %28, i64 %383
  %432 = load i32, ptr %431, align 4, !tbaa !24
  %433 = icmp eq i32 %432, -1
  br i1 %433, label %434, label %.thread

434:                                              ; preds = %430
  %435 = sext i32 %.3530600 to i64
  %436 = getelementptr inbounds i32, ptr %30, i64 %435
  store i32 %382, ptr %436, align 4, !tbaa !24
  %437 = add nsw i32 %.3530600, 1
  store i32 %.3530600, ptr %431, align 4, !tbaa !24
  br label %.thread

.thread:                                          ; preds = %415, %418, %434, %430, %428
  %.4 = phi i32 [ %419, %418 ], [ %437, %434 ], [ %.3530600, %430 ], [ %.3530600, %428 ], [ %.3530600, %415 ]
  %indvars.iv.next690 = add nsw i64 %indvars.iv689, 1
  %438 = load i32, ptr %377, align 4, !tbaa !24
  %439 = sext i32 %438 to i64
  %440 = icmp slt i64 %indvars.iv.next690, %439
  br i1 %440, label %.lr.ph603, label %._crit_edge604, !llvm.loop !43

._crit_edge604:                                   ; preds = %.thread, %thread-pre-split.thread
  %.3530.lcssa = phi i32 [ %.2529, %thread-pre-split.thread ], [ %.4, %.thread ]
  %indvars.iv.next693 = add nuw nsw i64 %indvars.iv692, 1
  %441 = icmp slt i64 %indvars.iv.next693, %221
  %442 = fcmp ugt float %.1515, 0.000000e+00
  %or.cond = select i1 %441, i1 %442, i1 false
  br i1 %or.cond, label %262, label %.loopexit561.loopexit.split.loop.exit741, !llvm.loop !44

.loopexit561.loopexit.split.loop.exit741:         ; preds = %._crit_edge604
  %indvars.le = trunc i64 %indvars.iv.next693 to i32
  br label %.loopexit561

.loopexit561:                                     ; preds = %262, %270, %.loopexit561.loopexit.split.loop.exit741, %238, %.preheader, %315
  %.0531574 = phi i32 [ %269, %315 ], [ 0, %.preheader ], [ 0, %238 ], [ %indvars.le, %.loopexit561.loopexit.split.loop.exit741 ], [ %269, %270 ], [ %269, %262 ]
  %.0527572 = phi i32 [ %.0527608, %315 ], [ %240, %.preheader ], [ %240, %238 ], [ %.3530.lcssa, %.loopexit561.loopexit.split.loop.exit741 ], [ %.0527608, %270 ], [ %.0527608, %262 ]
  %.0525570 = phi i32 [ %.0525610, %315 ], [ %196, %.preheader ], [ %196, %238 ], [ %.1526, %.loopexit561.loopexit.split.loop.exit741 ], [ %.0525610, %270 ], [ %.0525610, %262 ]
  %.0522568 = phi i32 [ %.0522612, %315 ], [ -1, %.preheader ], [ -1, %238 ], [ %.1523, %.loopexit561.loopexit.split.loop.exit741 ], [ %.0522612, %270 ], [ %.0522612, %262 ]
  %.1532633 = add nsw i32 %.0531574, -1
  %443 = icmp sgt i32 %.1532633, %.0522568
  br i1 %443, label %.lr.ph637, label %._crit_edge638

.lr.ph637:                                        ; preds = %.loopexit561
  %444 = zext nneg i32 %.0531574 to i64
  %445 = add nsw i64 %444, -1
  %446 = sext i32 %.0522568 to i64
  br label %448

.loopexit:                                        ; preds = %546, %.thread557
  %.7.lcssa = phi i32 [ %.6, %.thread557 ], [ %.9, %546 ]
  %indvars.iv.next700 = add nsw i64 %indvars.iv699, -1
  %447 = icmp sgt i64 %indvars.iv.next700, %446
  br i1 %447, label %448, label %._crit_edge638, !llvm.loop !45

448:                                              ; preds = %.lr.ph637, %.loopexit
  %indvars.iv699 = phi i64 [ %445, %.lr.ph637 ], [ %indvars.iv.next700, %.loopexit ]
  %.5634 = phi i32 [ %.0527572, %.lr.ph637 ], [ %.7.lcssa, %.loopexit ]
  %449 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv699
  %450 = load i32, ptr %449, align 4, !tbaa !24
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i32, ptr %20, i64 %451
  %453 = load i32, ptr %452, align 4, !tbaa !24
  %454 = add nsw i32 %453, 1
  %455 = srem i32 %454, 2
  store i32 %455, ptr %452, align 4, !tbaa !24
  %456 = getelementptr inbounds i32, ptr %22, i64 %451
  %457 = load i32, ptr %456, align 4, !tbaa !24
  %458 = getelementptr inbounds i32, ptr %24, i64 %451
  %459 = load i32, ptr %458, align 4, !tbaa !24
  store i32 %459, ptr %456, align 4, !tbaa !24
  store i32 %457, ptr %458, align 4, !tbaa !24
  %460 = icmp eq i32 %457, 0
  br i1 %460, label %461, label %480

461:                                              ; preds = %448
  %462 = getelementptr inbounds i32, ptr %28, i64 %451
  %463 = load i32, ptr %462, align 4, !tbaa !24
  %.not552 = icmp eq i32 %463, -1
  br i1 %.not552, label %.thread557, label %464

464:                                              ; preds = %461
  %465 = getelementptr inbounds i32, ptr %10, i64 %451
  %466 = load i32, ptr %465, align 4, !tbaa !24
  %467 = getelementptr i8, ptr %465, i64 4
  %468 = load i32, ptr %467, align 4, !tbaa !24
  %469 = icmp slt i32 %466, %468
  br i1 %469, label %470, label %.thread557

470:                                              ; preds = %464
  %471 = add nsw i32 %.5634, -1
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i32, ptr %30, i64 %472
  %474 = load i32, ptr %473, align 4, !tbaa !24
  %475 = sext i32 %463 to i64
  %476 = getelementptr inbounds i32, ptr %30, i64 %475
  store i32 %474, ptr %476, align 4, !tbaa !24
  %477 = load i32, ptr %462, align 4, !tbaa !24
  %478 = sext i32 %474 to i64
  %479 = getelementptr inbounds i32, ptr %28, i64 %478
  store i32 %477, ptr %479, align 4, !tbaa !24
  store i32 -1, ptr %462, align 4, !tbaa !24
  br label %.thread557

480:                                              ; preds = %448
  %481 = icmp sgt i32 %457, 0
  br i1 %481, label %482, label %.thread557

482:                                              ; preds = %480
  %483 = getelementptr inbounds i32, ptr %28, i64 %451
  %484 = load i32, ptr %483, align 4, !tbaa !24
  %485 = icmp eq i32 %484, -1
  br i1 %485, label %486, label %.thread557

486:                                              ; preds = %482
  %487 = sext i32 %.5634 to i64
  %488 = getelementptr inbounds i32, ptr %30, i64 %487
  store i32 %450, ptr %488, align 4, !tbaa !24
  %489 = add nsw i32 %.5634, 1
  store i32 %.5634, ptr %483, align 4, !tbaa !24
  br label %.thread557

.thread557:                                       ; preds = %461, %464, %480, %482, %486, %470
  %.6 = phi i32 [ %471, %470 ], [ %489, %486 ], [ %.5634, %482 ], [ %.5634, %480 ], [ %.5634, %464 ], [ %.5634, %461 ]
  %490 = mul nsw i32 %450, %8
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %12, i64 %491
  %493 = mul nsw i32 %455, %8
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds i32, ptr %26, i64 %494
  %496 = call ptr @libmetis__iaxpy(i64 noundef %.pre-phi719, i32 noundef 1, ptr noundef %492, i64 noundef 1, ptr noundef %495, i64 noundef 1) #6
  %497 = and i32 %455, 1
  %498 = xor i32 %497, 1
  %499 = mul nuw nsw i32 %498, %8
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds i32, ptr %26, i64 %500
  %502 = call ptr @libmetis__iaxpy(i64 noundef %.pre-phi719, i32 noundef -1, ptr noundef %492, i64 noundef 1, ptr noundef %501, i64 noundef 1) #6
  %503 = getelementptr inbounds i32, ptr %10, i64 %451
  %504 = load i32, ptr %503, align 4, !tbaa !24
  %505 = getelementptr i8, ptr %503, i64 4
  %506 = load i32, ptr %505, align 4, !tbaa !24
  %507 = icmp slt i32 %504, %506
  br i1 %507, label %.lr.ph631.preheader, label %.loopexit

.lr.ph631.preheader:                              ; preds = %.thread557
  %508 = sext i32 %504 to i64
  br label %.lr.ph631

.lr.ph631:                                        ; preds = %.lr.ph631.preheader, %546
  %indvars.iv695 = phi i64 [ %508, %.lr.ph631.preheader ], [ %indvars.iv.next696, %546 ]
  %.7629 = phi i32 [ %.6, %.lr.ph631.preheader ], [ %.9, %546 ]
  %509 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv695
  %510 = load i32, ptr %509, align 4, !tbaa !24
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds i32, ptr %20, i64 %511
  %513 = load i32, ptr %512, align 4, !tbaa !24
  %514 = icmp eq i32 %455, %513
  %515 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv695
  %516 = load i32, ptr %515, align 4, !tbaa !24
  %517 = sub nsw i32 0, %516
  %518 = select i1 %514, i32 %516, i32 %517
  %519 = getelementptr inbounds i32, ptr %22, i64 %511
  %520 = load i32, ptr %519, align 4, !tbaa !24
  %521 = add nsw i32 %520, %518
  store i32 %521, ptr %519, align 4, !tbaa !24
  %522 = getelementptr inbounds i32, ptr %24, i64 %511
  %523 = load i32, ptr %522, align 4, !tbaa !24
  %524 = sub nsw i32 %523, %518
  store i32 %524, ptr %522, align 4, !tbaa !24
  %525 = getelementptr inbounds i32, ptr %28, i64 %511
  %526 = load i32, ptr %525, align 4, !tbaa !24
  %.not553 = icmp ne i32 %526, -1
  %527 = icmp eq i32 %523, %518
  %or.cond555 = select i1 %.not553, i1 %527, i1 false
  br i1 %or.cond555, label %.thread558, label %537

.thread558:                                       ; preds = %.lr.ph631
  %528 = add nsw i32 %.7629, -1
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %30, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !24
  %532 = sext i32 %526 to i64
  %533 = getelementptr inbounds i32, ptr %30, i64 %532
  store i32 %531, ptr %533, align 4, !tbaa !24
  %534 = load i32, ptr %525, align 4, !tbaa !24
  %535 = sext i32 %531 to i64
  %536 = getelementptr inbounds i32, ptr %28, i64 %535
  store i32 %534, ptr %536, align 4, !tbaa !24
  store i32 -1, ptr %525, align 4, !tbaa !24
  %.pre = load i32, ptr %522, align 4, !tbaa !24
  br label %539

537:                                              ; preds = %.lr.ph631
  %538 = icmp eq i32 %526, -1
  br i1 %538, label %539, label %546

539:                                              ; preds = %.thread558, %537
  %540 = phi i32 [ %.pre, %.thread558 ], [ %524, %537 ]
  %.8560 = phi i32 [ %528, %.thread558 ], [ %.7629, %537 ]
  %541 = icmp sgt i32 %540, 0
  br i1 %541, label %542, label %546

542:                                              ; preds = %539
  %543 = sext i32 %.8560 to i64
  %544 = getelementptr inbounds i32, ptr %30, i64 %543
  store i32 %510, ptr %544, align 4, !tbaa !24
  %545 = add nsw i32 %.8560, 1
  store i32 %.8560, ptr %525, align 4, !tbaa !24
  br label %546

546:                                              ; preds = %537, %539, %542
  %.9 = phi i32 [ %545, %542 ], [ %.8560, %539 ], [ %.7629, %537 ]
  %indvars.iv.next696 = add nsw i64 %indvars.iv695, 1
  %547 = load i32, ptr %505, align 4, !tbaa !24
  %548 = sext i32 %547 to i64
  %549 = icmp slt i64 %indvars.iv.next696, %548
  br i1 %549, label %.lr.ph631, label %.loopexit, !llvm.loop !46

._crit_edge638:                                   ; preds = %.loopexit, %.loopexit561
  %.5.lcssa = phi i32 [ %.0527572, %.loopexit561 ], [ %.7.lcssa, %.loopexit ]
  %550 = load i32, ptr %197, align 8, !tbaa !38
  %551 = and i32 %550, 8
  %.not551 = icmp eq i32 %551, 0
  br i1 %.not551, label %563, label %552

552:                                              ; preds = %._crit_edge638
  %553 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef %.0525570, i32 noundef %.0522568, i32 noundef %.5.lcssa)
  br i1 %48, label %.lr.ph642.preheader, label %._crit_edge643

.lr.ph642.preheader:                              ; preds = %552
  %554 = zext nneg i32 %8 to i64
  %invariant.gep746 = getelementptr inbounds i32, ptr %26, i64 %554
  br label %.lr.ph642

.lr.ph642:                                        ; preds = %.lr.ph642.preheader, %.lr.ph642
  %indvars.iv703 = phi i64 [ 0, %.lr.ph642.preheader ], [ %indvars.iv.next704, %.lr.ph642 ]
  %555 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv703
  %556 = load i32, ptr %555, align 4, !tbaa !24
  %gep747 = getelementptr inbounds i32, ptr %invariant.gep746, i64 %indvars.iv703
  %557 = load i32, ptr %gep747, align 4, !tbaa !24
  %558 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, i32 noundef %556, i32 noundef %557)
  %indvars.iv.next704 = add nuw nsw i64 %indvars.iv703, 1
  %exitcond708.not = icmp eq i64 %indvars.iv.next704, %554
  br i1 %exitcond708.not, label %._crit_edge643, label %.lr.ph642, !llvm.loop !47

._crit_edge643:                                   ; preds = %.lr.ph642, %552
  %559 = load ptr, ptr %185, align 8, !tbaa !32
  %560 = call float @libmetis__ComputeLoadImbalance(ptr noundef nonnull %1, i32 noundef 2, ptr noundef %559) #6
  %561 = fpext float %560 to double
  %562 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.29, double noundef %561)
  br label %563

563:                                              ; preds = %._crit_edge643, %._crit_edge638
  store i32 %.0525570, ptr %195, align 8, !tbaa !37
  store i32 %.5.lcssa, ptr %239, align 8, !tbaa !40
  br i1 %48, label %.lr.ph646.preheader, label %._crit_edge647

.lr.ph646.preheader:                              ; preds = %563
  %smax713 = call i32 @llvm.smax.i32(i32 %37, i32 1)
  %wide.trip.count714 = zext nneg i32 %smax713 to i64
  br label %.lr.ph646

.lr.ph646:                                        ; preds = %.lr.ph646.preheader, %.lr.ph646
  %indvars.iv709 = phi i64 [ 0, %.lr.ph646.preheader ], [ %indvars.iv.next710, %.lr.ph646 ]
  %564 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv709
  %565 = load ptr, ptr %564, align 8, !tbaa !23
  call void @libmetis__rpqDestroy(ptr noundef %565) #6
  %indvars.iv.next710 = add nuw nsw i64 %indvars.iv709, 1
  %exitcond715.not = icmp eq i64 %indvars.iv.next710, %wide.trip.count714
  br i1 %exitcond715.not, label %._crit_edge647, label %.lr.ph646, !llvm.loop !48

._crit_edge647:                                   ; preds = %.lr.ph646, %563
  call void @libmetis__wspacepop(ptr noundef %0) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  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 void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #2

declare ptr @libmetis__iset(i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare i32 @libmetis__CheckBnd(ptr noundef) local_unnamed_addr #2

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

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

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #2

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

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #2

declare void @libmetis__wspacepop(ptr 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

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

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

declare i32 @libmetis__iargmax_nrm(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @libmetis__iargmax2_nrm(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare void @libmetis__SelectQueue(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @libmetis__iaxpy(i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #5

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn 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 = !{!"graph_t", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 116, !10, i64 120, !10, i64 128, !7, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 8}
!12 = !{!6, !10, i64 16}
!13 = !{!6, !10, i64 24}
!14 = !{!6, !10, i64 40}
!15 = !{!6, !10, i64 48}
!16 = !{!6, !10, i64 64}
!17 = !{!6, !10, i64 120}
!18 = !{!6, !10, i64 160}
!19 = !{!6, !10, i64 168}
!20 = !{!6, !10, i64 128}
!21 = !{!6, !10, i64 144}
!22 = !{!6, !10, i64 152}
!23 = !{!10, !10, i64 0}
!24 = !{!7, !7, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!29, !29, i64 0}
!29 = !{!"float", !8, i64 0}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = !{!33, !10, i64 120}
!33 = !{!"ctrl_t", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !10, i64 80, !7, i64 88, !7, i64 92, !29, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !29, i64 128, !34, i64 136, !34, i64 144, !34, i64 152, !34, i64 160, !34, i64 168, !34, i64 176, !34, i64 184, !34, i64 192, !34, i64 200, !34, i64 208, !34, i64 216, !34, i64 224, !10, i64 232, !35, i64 240, !35, i64 248, !35, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320}
!34 = !{!"double", !8, i64 0}
!35 = !{!"long", !8, i64 0}
!36 = !{!33, !10, i64 104}
!37 = !{!6, !7, i64 112}
!38 = !{!33, !7, i64 8}
!39 = distinct !{!39, !26}
!40 = !{!6, !7, i64 136}
!41 = distinct !{!41, !26}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !26}
!47 = distinct !{!47, !26}
!48 = distinct !{!48, !26}


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