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

; 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.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 }
%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 }

@.str.3 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__CreateCoarseGraph = external hidden unnamed_addr constant [70 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1

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

declare double @gk_CPUSeconds() #1

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

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

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

declare void @libmetis__wspacepush(ptr noundef) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__CreateCoarseGraph(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr noundef %3) #3 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %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 i32, align 4
  %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 i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  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 4, 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
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.ctrl_t, ptr %39, i32 0, i32 1
  %41 = load i32, ptr %40, align 4, !tbaa !11
  %42 = icmp eq i32 %41, 1
  %43 = zext i1 %42 to i64
  %44 = select i1 %42, i32 1, i32 0
  store i32 %44, ptr %24, align 4, !tbaa !9
  store i32 2047, ptr %23, align 4, !tbaa !9
  %45 = load i32, ptr %7, align 4, !tbaa !9
  %46 = load i32, ptr %23, align 4, !tbaa !9
  %47 = mul nsw i32 2, %46
  %48 = icmp slt i32 %45, %47
  br i1 %48, label %60, label %49

49:                                               ; preds = %4
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %51, align 4, !tbaa !16
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graph_t, ptr %53, i32 0, i32 0
  %55 = load i32, ptr %54, align 8, !tbaa !18
  %56 = sdiv i32 %52, %55
  %57 = load i32, ptr %23, align 4, !tbaa !9
  %58 = sdiv i32 %57, 20
  %59 = icmp sgt i32 %56, %58
  br i1 %59, label %60, label %65

60:                                               ; preds = %49, %4
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = load i32, ptr %7, align 4, !tbaa !9
  %64 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libmetis__CreateCoarseGraphNoMask(ptr noundef %61, ptr noundef %62, i32 noundef %63, ptr noundef %64)
  store i32 1, ptr %38, align 4
  br label %785

65:                                               ; preds = %49
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.graph_t, ptr %66, i32 0, i32 0
  %68 = load i32, ptr %67, align 8, !tbaa !18
  store i32 %68, ptr %17, align 4, !tbaa !9
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.graph_t, ptr %69, i32 0, i32 3
  %71 = load ptr, ptr %70, align 8, !tbaa !19
  store ptr %71, ptr %25, align 8, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %72

72:                                               ; preds = %98, %65
  %73 = load i32, ptr %21, align 4, !tbaa !9
  %74 = load i32, ptr %17, align 4, !tbaa !9
  %75 = icmp slt i32 %73, %74
  br i1 %75, label %76, label %101

76:                                               ; preds = %72
  %77 = load ptr, ptr %25, align 8, !tbaa !5
  %78 = load i32, ptr %21, align 4, !tbaa !9
  %79 = add nsw i32 %78, 1
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds i32, ptr %77, i64 %80
  %82 = load i32, ptr %81, align 4, !tbaa !9
  %83 = load ptr, ptr %25, align 8, !tbaa !5
  %84 = load i32, ptr %21, align 4, !tbaa !9
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds i32, ptr %83, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !9
  %88 = sub nsw i32 %82, %87
  %89 = load i32, ptr %23, align 4, !tbaa !9
  %90 = ashr i32 %89, 3
  %91 = icmp sgt i32 %88, %90
  br i1 %91, label %92, label %97

92:                                               ; preds = %76
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = load i32, ptr %7, align 4, !tbaa !9
  %96 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libmetis__CreateCoarseGraphNoMask(ptr noundef %93, ptr noundef %94, i32 noundef %95, ptr noundef %96)
  store i32 1, ptr %38, align 4
  br label %785

97:                                               ; preds = %76
  br label %98

98:                                               ; preds = %97
  %99 = load i32, ptr %21, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %21, align 4, !tbaa !9
  br label %72, !llvm.loop !20

101:                                              ; preds = %72
  %102 = load ptr, ptr %5, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %102)
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.ctrl_t, ptr %103, i32 0, i32 2
  %105 = load i32, ptr %104, align 8, !tbaa !22
  %106 = and i32 %105, 2
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %108, label %114

108:                                              ; preds = %101
  %109 = call double @gk_CPUSeconds()
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.ctrl_t, ptr %110, i32 0, i32 30
  %112 = load double, ptr %111, align 8, !tbaa !23
  %113 = fsub double %112, %109
  store double %113, ptr %111, align 8, !tbaa !23
  br label %114

114:                                              ; preds = %108, %101
  %115 = load ptr, ptr %6, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.graph_t, ptr %115, i32 0, i32 2
  %117 = load i32, ptr %116, align 8, !tbaa !24
  store i32 %117, ptr %19, align 4, !tbaa !9
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.graph_t, ptr %118, i32 0, i32 4
  %120 = load ptr, ptr %119, align 8, !tbaa !25
  store ptr %120, ptr %26, align 8, !tbaa !5
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.graph_t, ptr %121, i32 0, i32 5
  %123 = load ptr, ptr %122, align 8, !tbaa !26
  store ptr %123, ptr %27, align 8, !tbaa !5
  %124 = load ptr, ptr %6, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.graph_t, ptr %124, i32 0, i32 6
  %126 = load ptr, ptr %125, align 8, !tbaa !27
  store ptr %126, ptr %28, align 8, !tbaa !5
  %127 = load ptr, ptr %6, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.graph_t, ptr %127, i32 0, i32 7
  %129 = load ptr, ptr %128, align 8, !tbaa !28
  store ptr %129, ptr %29, align 8, !tbaa !5
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.graph_t, ptr %130, i32 0, i32 16
  %132 = load ptr, ptr %131, align 8, !tbaa !29
  store ptr %132, ptr %30, align 8, !tbaa !5
  %133 = load ptr, ptr %6, align 8, !tbaa !5
  %134 = load i32, ptr %7, align 4, !tbaa !9
  %135 = load i32, ptr %24, align 4, !tbaa !9
  %136 = call ptr @libmetis__SetupCoarseGraph(ptr noundef %133, i32 noundef %134, i32 noundef %135)
  store ptr %136, ptr %37, align 8, !tbaa !5
  %137 = load ptr, ptr %37, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.graph_t, ptr %137, i32 0, i32 3
  %139 = load ptr, ptr %138, align 8, !tbaa !19
  store ptr %139, ptr %32, align 8, !tbaa !5
  %140 = load ptr, ptr %37, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.graph_t, ptr %140, i32 0, i32 4
  %142 = load ptr, ptr %141, align 8, !tbaa !25
  store ptr %142, ptr %33, align 8, !tbaa !5
  %143 = load ptr, ptr %37, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.graph_t, ptr %143, i32 0, i32 5
  %145 = load ptr, ptr %144, align 8, !tbaa !26
  store ptr %145, ptr %34, align 8, !tbaa !5
  %146 = load ptr, ptr %37, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.graph_t, ptr %146, i32 0, i32 6
  %148 = load ptr, ptr %147, align 8, !tbaa !27
  store ptr %148, ptr %35, align 8, !tbaa !5
  %149 = load ptr, ptr %37, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.graph_t, ptr %149, i32 0, i32 7
  %151 = load ptr, ptr %150, align 8, !tbaa !28
  store ptr %151, ptr %36, align 8, !tbaa !5
  %152 = load i32, ptr %7, align 4, !tbaa !9
  %153 = add nsw i32 %152, 1
  %154 = load i32, ptr %23, align 4, !tbaa !9
  %155 = add nsw i32 %154, 1
  %156 = icmp sge i32 %153, %155
  br i1 %156, label %157, label %160

157:                                              ; preds = %114
  %158 = load i32, ptr %23, align 4, !tbaa !9
  %159 = add nsw i32 %158, 1
  br label %163

160:                                              ; preds = %114
  %161 = load i32, ptr %7, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  br label %163

163:                                              ; preds = %160, %157
  %164 = phi i32 [ %159, %157 ], [ %162, %160 ]
  %165 = sext i32 %164 to i64
  %166 = load ptr, ptr %5, align 8, !tbaa !5
  %167 = load i32, ptr %23, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  %169 = call ptr @libmetis__iwspacemalloc(ptr noundef %166, i32 noundef %168)
  %170 = call ptr @libmetis__iset(i64 noundef %165, i32 noundef -1, ptr noundef %169)
  store ptr %170, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !9
  %171 = load ptr, ptr %32, align 8, !tbaa !5
  %172 = getelementptr inbounds i32, ptr %171, i64 0
  store i32 0, ptr %172, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %706, %163
  %174 = load i32, ptr %21, align 4, !tbaa !9
  %175 = load i32, ptr %17, align 4, !tbaa !9
  %176 = icmp slt i32 %174, %175
  br i1 %176, label %177, label %709

177:                                              ; preds = %173
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = load i32, ptr %21, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !9
  store i32 %182, ptr %22, align 4, !tbaa !9
  %183 = load i32, ptr %21, align 4, !tbaa !9
  %184 = icmp slt i32 %182, %183
  br i1 %184, label %185, label %186

185:                                              ; preds = %177
  br label %706

186:                                              ; preds = %177
  %187 = load ptr, ptr %30, align 8, !tbaa !5
  %188 = load i32, ptr %21, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds i32, ptr %187, i64 %189
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = load i32, ptr %7, align 4, !tbaa !9
  %193 = icmp eq i32 %191, %192
  br i1 %193, label %206, label %194

194:                                              ; preds = %186
  %195 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 676, ptr noundef @.str.3)
  %196 = load ptr, ptr %30, align 8, !tbaa !5
  %197 = load i32, ptr %21, align 4, !tbaa !9
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %196, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = load i32, ptr %7, align 4, !tbaa !9
  %202 = icmp eq i32 %200, %201
  br i1 %202, label %203, label %204

203:                                              ; preds = %194
  br label %205

204:                                              ; preds = %194
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.3, i32 noundef 676, ptr noundef @__PRETTY_FUNCTION__.libmetis__CreateCoarseGraph) #5
  unreachable

205:                                              ; preds = %203
  br label %206

206:                                              ; preds = %205, %186
  %207 = load ptr, ptr %30, align 8, !tbaa !5
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = load i32, ptr %21, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %208, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %207, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = load i32, ptr %7, align 4, !tbaa !9
  %217 = icmp eq i32 %215, %216
  br i1 %217, label %234, label %218

218:                                              ; preds = %206
  %219 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 677, ptr noundef @.str.3)
  %220 = load ptr, ptr %30, align 8, !tbaa !5
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = load i32, ptr %21, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %221, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !9
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i32, ptr %220, i64 %226
  %228 = load i32, ptr %227, align 4, !tbaa !9
  %229 = load i32, ptr %7, align 4, !tbaa !9
  %230 = icmp eq i32 %228, %229
  br i1 %230, label %231, label %232

231:                                              ; preds = %218
  br label %233

232:                                              ; preds = %218
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.3, i32 noundef 677, ptr noundef @__PRETTY_FUNCTION__.libmetis__CreateCoarseGraph) #5
  unreachable

233:                                              ; preds = %231
  br label %234

234:                                              ; preds = %233, %206
  %235 = load i32, ptr %19, align 4, !tbaa !9
  %236 = icmp eq i32 %235, 1
  br i1 %236, label %237, label %247

237:                                              ; preds = %234
  %238 = load ptr, ptr %26, align 8, !tbaa !5
  %239 = load i32, ptr %21, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %238, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = load ptr, ptr %33, align 8, !tbaa !5
  %244 = load i32, ptr %7, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %243, i64 %245
  store i32 %242, ptr %246, align 4, !tbaa !9
  br label %263

247:                                              ; preds = %234
  %248 = load i32, ptr %19, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = load ptr, ptr %26, align 8, !tbaa !5
  %251 = load i32, ptr %21, align 4, !tbaa !9
  %252 = load i32, ptr %19, align 4, !tbaa !9
  %253 = mul nsw i32 %251, %252
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds i32, ptr %250, i64 %254
  %256 = load ptr, ptr %33, align 8, !tbaa !5
  %257 = load i32, ptr %7, align 4, !tbaa !9
  %258 = load i32, ptr %19, align 4, !tbaa !9
  %259 = mul nsw i32 %257, %258
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds i32, ptr %256, i64 %260
  %262 = call ptr @libmetis__icopy(i64 noundef %249, ptr noundef %255, ptr noundef %261)
  br label %263

263:                                              ; preds = %247, %237
  %264 = load i32, ptr %24, align 4, !tbaa !9
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %276

266:                                              ; preds = %263
  %267 = load ptr, ptr %27, align 8, !tbaa !5
  %268 = load i32, ptr %21, align 4, !tbaa !9
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds i32, ptr %267, i64 %269
  %271 = load i32, ptr %270, align 4, !tbaa !9
  %272 = load ptr, ptr %34, align 8, !tbaa !5
  %273 = load i32, ptr %7, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds i32, ptr %272, i64 %274
  store i32 %271, ptr %275, align 4, !tbaa !9
  br label %276

276:                                              ; preds = %266, %263
  store i32 0, ptr %18, align 4, !tbaa !9
  %277 = load ptr, ptr %25, align 8, !tbaa !5
  %278 = load i32, ptr %21, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i32, ptr %277, i64 %279
  %281 = load i32, ptr %280, align 4, !tbaa !9
  store i32 %281, ptr %15, align 4, !tbaa !9
  %282 = load ptr, ptr %25, align 8, !tbaa !5
  %283 = load i32, ptr %21, align 4, !tbaa !9
  %284 = add nsw i32 %283, 1
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds i32, ptr %282, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !9
  store i32 %287, ptr %16, align 4, !tbaa !9
  %288 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %288, ptr %9, align 4, !tbaa !9
  br label %289

289:                                              ; preds = %405, %276
  %290 = load i32, ptr %9, align 4, !tbaa !9
  %291 = load i32, ptr %16, align 4, !tbaa !9
  %292 = icmp slt i32 %290, %291
  br i1 %292, label %293, label %408

293:                                              ; preds = %289
  %294 = load ptr, ptr %30, align 8, !tbaa !5
  %295 = load ptr, ptr %28, align 8, !tbaa !5
  %296 = load i32, ptr %9, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds i32, ptr %295, i64 %297
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds i32, ptr %294, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !9
  store i32 %302, ptr %11, align 4, !tbaa !9
  %303 = load i32, ptr %11, align 4, !tbaa !9
  %304 = load i32, ptr %23, align 4, !tbaa !9
  %305 = and i32 %303, %304
  store i32 %305, ptr %12, align 4, !tbaa !9
  %306 = load ptr, ptr %31, align 8, !tbaa !5
  %307 = load i32, ptr %12, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds i32, ptr %306, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !9
  store i32 %310, ptr %14, align 4, !tbaa !9
  %311 = icmp eq i32 %310, -1
  br i1 %311, label %312, label %333

312:                                              ; preds = %293
  %313 = load i32, ptr %11, align 4, !tbaa !9
  %314 = load ptr, ptr %35, align 8, !tbaa !5
  %315 = load i32, ptr %18, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i32, ptr %314, i64 %316
  store i32 %313, ptr %317, align 4, !tbaa !9
  %318 = load ptr, ptr %29, align 8, !tbaa !5
  %319 = load i32, ptr %9, align 4, !tbaa !9
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds i32, ptr %318, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = load ptr, ptr %36, align 8, !tbaa !5
  %324 = load i32, ptr %18, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds i32, ptr %323, i64 %325
  store i32 %322, ptr %326, align 4, !tbaa !9
  %327 = load i32, ptr %18, align 4, !tbaa !9
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %18, align 4, !tbaa !9
  %329 = load ptr, ptr %31, align 8, !tbaa !5
  %330 = load i32, ptr %12, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds i32, ptr %329, i64 %331
  store i32 %327, ptr %332, align 4, !tbaa !9
  br label %404

333:                                              ; preds = %293
  %334 = load ptr, ptr %35, align 8, !tbaa !5
  %335 = load i32, ptr %14, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i32, ptr %334, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !9
  %339 = load i32, ptr %11, align 4, !tbaa !9
  %340 = icmp eq i32 %338, %339
  br i1 %340, label %341, label %353

341:                                              ; preds = %333
  %342 = load ptr, ptr %29, align 8, !tbaa !5
  %343 = load i32, ptr %9, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %342, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = load ptr, ptr %36, align 8, !tbaa !5
  %348 = load i32, ptr %14, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = add nsw i32 %351, %346
  store i32 %352, ptr %350, align 4, !tbaa !9
  br label %403

353:                                              ; preds = %333
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %354

354:                                              ; preds = %379, %353
  %355 = load i32, ptr %10, align 4, !tbaa !9
  %356 = load i32, ptr %18, align 4, !tbaa !9
  %357 = icmp slt i32 %355, %356
  br i1 %357, label %358, label %382

358:                                              ; preds = %354
  %359 = load ptr, ptr %35, align 8, !tbaa !5
  %360 = load i32, ptr %10, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %359, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = load i32, ptr %11, align 4, !tbaa !9
  %365 = icmp eq i32 %363, %364
  br i1 %365, label %366, label %378

366:                                              ; preds = %358
  %367 = load ptr, ptr %29, align 8, !tbaa !5
  %368 = load i32, ptr %9, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds i32, ptr %367, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !9
  %372 = load ptr, ptr %36, align 8, !tbaa !5
  %373 = load i32, ptr %10, align 4, !tbaa !9
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %372, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !9
  %377 = add nsw i32 %376, %371
  store i32 %377, ptr %375, align 4, !tbaa !9
  br label %382

378:                                              ; preds = %358
  br label %379

379:                                              ; preds = %378
  %380 = load i32, ptr %10, align 4, !tbaa !9
  %381 = add nsw i32 %380, 1
  store i32 %381, ptr %10, align 4, !tbaa !9
  br label %354, !llvm.loop !30

382:                                              ; preds = %366, %354
  %383 = load i32, ptr %10, align 4, !tbaa !9
  %384 = load i32, ptr %18, align 4, !tbaa !9
  %385 = icmp eq i32 %383, %384
  br i1 %385, label %386, label %402

386:                                              ; preds = %382
  %387 = load i32, ptr %11, align 4, !tbaa !9
  %388 = load ptr, ptr %35, align 8, !tbaa !5
  %389 = load i32, ptr %18, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %388, i64 %390
  store i32 %387, ptr %391, align 4, !tbaa !9
  %392 = load ptr, ptr %29, align 8, !tbaa !5
  %393 = load i32, ptr %9, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %392, i64 %394
  %396 = load i32, ptr %395, align 4, !tbaa !9
  %397 = load ptr, ptr %36, align 8, !tbaa !5
  %398 = load i32, ptr %18, align 4, !tbaa !9
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %18, align 4, !tbaa !9
  %400 = sext i32 %398 to i64
  %401 = getelementptr inbounds i32, ptr %397, i64 %400
  store i32 %396, ptr %401, align 4, !tbaa !9
  br label %402

402:                                              ; preds = %386, %382
  br label %403

403:                                              ; preds = %402, %341
  br label %404

404:                                              ; preds = %403, %312
  br label %405

405:                                              ; preds = %404
  %406 = load i32, ptr %9, align 4, !tbaa !9
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %9, align 4, !tbaa !9
  br label %289, !llvm.loop !31

408:                                              ; preds = %289
  %409 = load i32, ptr %21, align 4, !tbaa !9
  %410 = load i32, ptr %22, align 4, !tbaa !9
  %411 = icmp ne i32 %409, %410
  br i1 %411, label %412, label %663

412:                                              ; preds = %408
  %413 = load i32, ptr %19, align 4, !tbaa !9
  %414 = icmp eq i32 %413, 1
  br i1 %414, label %415, label %427

415:                                              ; preds = %412
  %416 = load ptr, ptr %26, align 8, !tbaa !5
  %417 = load i32, ptr %22, align 4, !tbaa !9
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i32, ptr %416, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !9
  %421 = load ptr, ptr %33, align 8, !tbaa !5
  %422 = load i32, ptr %7, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i32, ptr %421, i64 %423
  %425 = load i32, ptr %424, align 4, !tbaa !9
  %426 = add nsw i32 %425, %420
  store i32 %426, ptr %424, align 4, !tbaa !9
  br label %443

427:                                              ; preds = %412
  %428 = load i32, ptr %19, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = load ptr, ptr %26, align 8, !tbaa !5
  %431 = load i32, ptr %22, align 4, !tbaa !9
  %432 = load i32, ptr %19, align 4, !tbaa !9
  %433 = mul nsw i32 %431, %432
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds i32, ptr %430, i64 %434
  %436 = load ptr, ptr %33, align 8, !tbaa !5
  %437 = load i32, ptr %7, align 4, !tbaa !9
  %438 = load i32, ptr %19, align 4, !tbaa !9
  %439 = mul nsw i32 %437, %438
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds i32, ptr %436, i64 %440
  %442 = call ptr @libmetis__iaxpy(i64 noundef %429, i32 noundef 1, ptr noundef %435, i64 noundef 1, ptr noundef %441, i64 noundef 1)
  br label %443

443:                                              ; preds = %427, %415
  %444 = load i32, ptr %24, align 4, !tbaa !9
  %445 = icmp ne i32 %444, 0
  br i1 %445, label %446, label %458

446:                                              ; preds = %443
  %447 = load ptr, ptr %27, align 8, !tbaa !5
  %448 = load i32, ptr %22, align 4, !tbaa !9
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %447, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !9
  %452 = load ptr, ptr %34, align 8, !tbaa !5
  %453 = load i32, ptr %7, align 4, !tbaa !9
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds i32, ptr %452, i64 %454
  %456 = load i32, ptr %455, align 4, !tbaa !9
  %457 = add nsw i32 %456, %451
  store i32 %457, ptr %455, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %446, %443
  %459 = load ptr, ptr %25, align 8, !tbaa !5
  %460 = load i32, ptr %22, align 4, !tbaa !9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i32, ptr %459, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !9
  store i32 %463, ptr %15, align 4, !tbaa !9
  %464 = load ptr, ptr %25, align 8, !tbaa !5
  %465 = load i32, ptr %22, align 4, !tbaa !9
  %466 = add nsw i32 %465, 1
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %464, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  store i32 %469, ptr %16, align 4, !tbaa !9
  %470 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %470, ptr %9, align 4, !tbaa !9
  br label %471

471:                                              ; preds = %587, %458
  %472 = load i32, ptr %9, align 4, !tbaa !9
  %473 = load i32, ptr %16, align 4, !tbaa !9
  %474 = icmp slt i32 %472, %473
  br i1 %474, label %475, label %590

475:                                              ; preds = %471
  %476 = load ptr, ptr %30, align 8, !tbaa !5
  %477 = load ptr, ptr %28, align 8, !tbaa !5
  %478 = load i32, ptr %9, align 4, !tbaa !9
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds i32, ptr %477, i64 %479
  %481 = load i32, ptr %480, align 4, !tbaa !9
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds i32, ptr %476, i64 %482
  %484 = load i32, ptr %483, align 4, !tbaa !9
  store i32 %484, ptr %11, align 4, !tbaa !9
  %485 = load i32, ptr %11, align 4, !tbaa !9
  %486 = load i32, ptr %23, align 4, !tbaa !9
  %487 = and i32 %485, %486
  store i32 %487, ptr %12, align 4, !tbaa !9
  %488 = load ptr, ptr %31, align 8, !tbaa !5
  %489 = load i32, ptr %12, align 4, !tbaa !9
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i32, ptr %488, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !9
  store i32 %492, ptr %14, align 4, !tbaa !9
  %493 = icmp eq i32 %492, -1
  br i1 %493, label %494, label %515

494:                                              ; preds = %475
  %495 = load i32, ptr %11, align 4, !tbaa !9
  %496 = load ptr, ptr %35, align 8, !tbaa !5
  %497 = load i32, ptr %18, align 4, !tbaa !9
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds i32, ptr %496, i64 %498
  store i32 %495, ptr %499, align 4, !tbaa !9
  %500 = load ptr, ptr %29, align 8, !tbaa !5
  %501 = load i32, ptr %9, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %500, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !9
  %505 = load ptr, ptr %36, align 8, !tbaa !5
  %506 = load i32, ptr %18, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i32, ptr %505, i64 %507
  store i32 %504, ptr %508, align 4, !tbaa !9
  %509 = load i32, ptr %18, align 4, !tbaa !9
  %510 = add nsw i32 %509, 1
  store i32 %510, ptr %18, align 4, !tbaa !9
  %511 = load ptr, ptr %31, align 8, !tbaa !5
  %512 = load i32, ptr %12, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  store i32 %509, ptr %514, align 4, !tbaa !9
  br label %586

515:                                              ; preds = %475
  %516 = load ptr, ptr %35, align 8, !tbaa !5
  %517 = load i32, ptr %14, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = load i32, ptr %11, align 4, !tbaa !9
  %522 = icmp eq i32 %520, %521
  br i1 %522, label %523, label %535

523:                                              ; preds = %515
  %524 = load ptr, ptr %29, align 8, !tbaa !5
  %525 = load i32, ptr %9, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i32, ptr %524, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = load ptr, ptr %36, align 8, !tbaa !5
  %530 = load i32, ptr %14, align 4, !tbaa !9
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds i32, ptr %529, i64 %531
  %533 = load i32, ptr %532, align 4, !tbaa !9
  %534 = add nsw i32 %533, %528
  store i32 %534, ptr %532, align 4, !tbaa !9
  br label %585

535:                                              ; preds = %515
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %561, %535
  %537 = load i32, ptr %10, align 4, !tbaa !9
  %538 = load i32, ptr %18, align 4, !tbaa !9
  %539 = icmp slt i32 %537, %538
  br i1 %539, label %540, label %564

540:                                              ; preds = %536
  %541 = load ptr, ptr %35, align 8, !tbaa !5
  %542 = load i32, ptr %10, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds i32, ptr %541, i64 %543
  %545 = load i32, ptr %544, align 4, !tbaa !9
  %546 = load i32, ptr %11, align 4, !tbaa !9
  %547 = icmp eq i32 %545, %546
  br i1 %547, label %548, label %560

548:                                              ; preds = %540
  %549 = load ptr, ptr %29, align 8, !tbaa !5
  %550 = load i32, ptr %9, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds i32, ptr %549, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load ptr, ptr %36, align 8, !tbaa !5
  %555 = load i32, ptr %10, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i32, ptr %554, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !9
  %559 = add nsw i32 %558, %553
  store i32 %559, ptr %557, align 4, !tbaa !9
  br label %564

560:                                              ; preds = %540
  br label %561

561:                                              ; preds = %560
  %562 = load i32, ptr %10, align 4, !tbaa !9
  %563 = add nsw i32 %562, 1
  store i32 %563, ptr %10, align 4, !tbaa !9
  br label %536, !llvm.loop !32

564:                                              ; preds = %548, %536
  %565 = load i32, ptr %10, align 4, !tbaa !9
  %566 = load i32, ptr %18, align 4, !tbaa !9
  %567 = icmp eq i32 %565, %566
  br i1 %567, label %568, label %584

568:                                              ; preds = %564
  %569 = load i32, ptr %11, align 4, !tbaa !9
  %570 = load ptr, ptr %35, align 8, !tbaa !5
  %571 = load i32, ptr %18, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  store i32 %569, ptr %573, align 4, !tbaa !9
  %574 = load ptr, ptr %29, align 8, !tbaa !5
  %575 = load i32, ptr %9, align 4, !tbaa !9
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds i32, ptr %574, i64 %576
  %578 = load i32, ptr %577, align 4, !tbaa !9
  %579 = load ptr, ptr %36, align 8, !tbaa !5
  %580 = load i32, ptr %18, align 4, !tbaa !9
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %18, align 4, !tbaa !9
  %582 = sext i32 %580 to i64
  %583 = getelementptr inbounds i32, ptr %579, i64 %582
  store i32 %578, ptr %583, align 4, !tbaa !9
  br label %584

584:                                              ; preds = %568, %564
  br label %585

585:                                              ; preds = %584, %523
  br label %586

586:                                              ; preds = %585, %494
  br label %587

587:                                              ; preds = %586
  %588 = load i32, ptr %9, align 4, !tbaa !9
  %589 = add nsw i32 %588, 1
  store i32 %589, ptr %9, align 4, !tbaa !9
  br label %471, !llvm.loop !33

590:                                              ; preds = %471
  %591 = load ptr, ptr %31, align 8, !tbaa !5
  %592 = load i32, ptr %7, align 4, !tbaa !9
  %593 = load i32, ptr %23, align 4, !tbaa !9
  %594 = and i32 %592, %593
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds i32, ptr %591, i64 %595
  %597 = load i32, ptr %596, align 4, !tbaa !9
  store i32 %597, ptr %10, align 4, !tbaa !9
  %598 = load i32, ptr %10, align 4, !tbaa !9
  %599 = icmp sge i32 %598, 0
  br i1 %599, label %600, label %627

600:                                              ; preds = %590
  %601 = load ptr, ptr %35, align 8, !tbaa !5
  %602 = load i32, ptr %10, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds i32, ptr %601, i64 %603
  %605 = load i32, ptr %604, align 4, !tbaa !9
  %606 = load i32, ptr %7, align 4, !tbaa !9
  %607 = icmp ne i32 %605, %606
  br i1 %607, label %608, label %627

608:                                              ; preds = %600
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %609

609:                                              ; preds = %623, %608
  %610 = load i32, ptr %10, align 4, !tbaa !9
  %611 = load i32, ptr %18, align 4, !tbaa !9
  %612 = icmp slt i32 %610, %611
  br i1 %612, label %613, label %626

613:                                              ; preds = %609
  %614 = load ptr, ptr %35, align 8, !tbaa !5
  %615 = load i32, ptr %10, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds i32, ptr %614, i64 %616
  %618 = load i32, ptr %617, align 4, !tbaa !9
  %619 = load i32, ptr %7, align 4, !tbaa !9
  %620 = icmp eq i32 %618, %619
  br i1 %620, label %621, label %622

621:                                              ; preds = %613
  br label %626

622:                                              ; preds = %613
  br label %623

623:                                              ; preds = %622
  %624 = load i32, ptr %10, align 4, !tbaa !9
  %625 = add nsw i32 %624, 1
  store i32 %625, ptr %10, align 4, !tbaa !9
  br label %609, !llvm.loop !34

626:                                              ; preds = %621, %609
  br label %627

627:                                              ; preds = %626, %600, %590
  %628 = load i32, ptr %10, align 4, !tbaa !9
  %629 = icmp sge i32 %628, 0
  br i1 %629, label %630, label %662

630:                                              ; preds = %627
  %631 = load i32, ptr %10, align 4, !tbaa !9
  %632 = load i32, ptr %18, align 4, !tbaa !9
  %633 = icmp slt i32 %631, %632
  br i1 %633, label %634, label %662

634:                                              ; preds = %630
  %635 = load ptr, ptr %35, align 8, !tbaa !5
  %636 = load i32, ptr %10, align 4, !tbaa !9
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds i32, ptr %635, i64 %637
  %639 = load i32, ptr %638, align 4, !tbaa !9
  %640 = load i32, ptr %7, align 4, !tbaa !9
  %641 = icmp eq i32 %639, %640
  br i1 %641, label %642, label %662

642:                                              ; preds = %634
  %643 = load ptr, ptr %35, align 8, !tbaa !5
  %644 = load i32, ptr %18, align 4, !tbaa !9
  %645 = add nsw i32 %644, -1
  store i32 %645, ptr %18, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %643, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !9
  %649 = load ptr, ptr %35, align 8, !tbaa !5
  %650 = load i32, ptr %10, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds i32, ptr %649, i64 %651
  store i32 %648, ptr %652, align 4, !tbaa !9
  %653 = load ptr, ptr %36, align 8, !tbaa !5
  %654 = load i32, ptr %18, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !9
  %658 = load ptr, ptr %36, align 8, !tbaa !5
  %659 = load i32, ptr %10, align 4, !tbaa !9
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds i32, ptr %658, i64 %660
  store i32 %657, ptr %661, align 4, !tbaa !9
  br label %662

662:                                              ; preds = %642, %634, %630, %627
  br label %663

663:                                              ; preds = %662, %408
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %664

664:                                              ; preds = %679, %663
  %665 = load i32, ptr %9, align 4, !tbaa !9
  %666 = load i32, ptr %18, align 4, !tbaa !9
  %667 = icmp slt i32 %665, %666
  br i1 %667, label %668, label %682

668:                                              ; preds = %664
  %669 = load ptr, ptr %31, align 8, !tbaa !5
  %670 = load ptr, ptr %35, align 8, !tbaa !5
  %671 = load i32, ptr %9, align 4, !tbaa !9
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds i32, ptr %670, i64 %672
  %674 = load i32, ptr %673, align 4, !tbaa !9
  %675 = load i32, ptr %23, align 4, !tbaa !9
  %676 = and i32 %674, %675
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %669, i64 %677
  store i32 -1, ptr %678, align 4, !tbaa !9
  br label %679

679:                                              ; preds = %668
  %680 = load i32, ptr %9, align 4, !tbaa !9
  %681 = add nsw i32 %680, 1
  store i32 %681, ptr %9, align 4, !tbaa !9
  br label %664, !llvm.loop !35

682:                                              ; preds = %664
  %683 = load ptr, ptr %31, align 8, !tbaa !5
  %684 = load i32, ptr %7, align 4, !tbaa !9
  %685 = load i32, ptr %23, align 4, !tbaa !9
  %686 = and i32 %684, %685
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds i32, ptr %683, i64 %687
  store i32 -1, ptr %688, align 4, !tbaa !9
  %689 = load i32, ptr %18, align 4, !tbaa !9
  %690 = load i32, ptr %20, align 4, !tbaa !9
  %691 = add nsw i32 %690, %689
  store i32 %691, ptr %20, align 4, !tbaa !9
  %692 = load i32, ptr %20, align 4, !tbaa !9
  %693 = load ptr, ptr %32, align 8, !tbaa !5
  %694 = load i32, ptr %7, align 4, !tbaa !9
  %695 = add nsw i32 %694, 1
  store i32 %695, ptr %7, align 4, !tbaa !9
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds i32, ptr %693, i64 %696
  store i32 %692, ptr %697, align 4, !tbaa !9
  %698 = load i32, ptr %18, align 4, !tbaa !9
  %699 = load ptr, ptr %35, align 8, !tbaa !5
  %700 = sext i32 %698 to i64
  %701 = getelementptr inbounds i32, ptr %699, i64 %700
  store ptr %701, ptr %35, align 8, !tbaa !5
  %702 = load i32, ptr %18, align 4, !tbaa !9
  %703 = load ptr, ptr %36, align 8, !tbaa !5
  %704 = sext i32 %702 to i64
  %705 = getelementptr inbounds i32, ptr %703, i64 %704
  store ptr %705, ptr %36, align 8, !tbaa !5
  br label %706

706:                                              ; preds = %682, %185
  %707 = load i32, ptr %21, align 4, !tbaa !9
  %708 = add nsw i32 %707, 1
  store i32 %708, ptr %21, align 4, !tbaa !9
  br label %173, !llvm.loop !36

709:                                              ; preds = %173
  %710 = load i32, ptr %20, align 4, !tbaa !9
  %711 = load ptr, ptr %37, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.graph_t, ptr %711, i32 0, i32 1
  store i32 %710, ptr %712, align 4, !tbaa !16
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %713

713:                                              ; preds = %765, %709
  %714 = load i32, ptr %9, align 4, !tbaa !9
  %715 = load i32, ptr %19, align 4, !tbaa !9
  %716 = icmp slt i32 %714, %715
  br i1 %716, label %717, label %768

717:                                              ; preds = %713
  %718 = load ptr, ptr %37, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.graph_t, ptr %718, i32 0, i32 0
  %720 = load i32, ptr %719, align 8, !tbaa !18
  %721 = sext i32 %720 to i64
  %722 = load ptr, ptr %37, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.graph_t, ptr %722, i32 0, i32 4
  %724 = load ptr, ptr %723, align 8, !tbaa !25
  %725 = load i32, ptr %9, align 4, !tbaa !9
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds i32, ptr %724, i64 %726
  %728 = load i32, ptr %19, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = call i32 @libmetis__isum(i64 noundef %721, ptr noundef %727, i64 noundef %729)
  %731 = load ptr, ptr %37, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.graph_t, ptr %731, i32 0, i32 8
  %733 = load ptr, ptr %732, align 8, !tbaa !37
  %734 = load i32, ptr %9, align 4, !tbaa !9
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds i32, ptr %733, i64 %735
  store i32 %730, ptr %736, align 4, !tbaa !9
  %737 = load ptr, ptr %37, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.graph_t, ptr %737, i32 0, i32 8
  %739 = load ptr, ptr %738, align 8, !tbaa !37
  %740 = load i32, ptr %9, align 4, !tbaa !9
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds i32, ptr %739, i64 %741
  %743 = load i32, ptr %742, align 4, !tbaa !9
  %744 = icmp sgt i32 %743, 0
  br i1 %744, label %745, label %753

745:                                              ; preds = %717
  %746 = load ptr, ptr %37, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.graph_t, ptr %746, i32 0, i32 8
  %748 = load ptr, ptr %747, align 8, !tbaa !37
  %749 = load i32, ptr %9, align 4, !tbaa !9
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds i32, ptr %748, i64 %750
  %752 = load i32, ptr %751, align 4, !tbaa !9
  br label %754

753:                                              ; preds = %717
  br label %754

754:                                              ; preds = %753, %745
  %755 = phi i32 [ %752, %745 ], [ 1, %753 ]
  %756 = sitofp i32 %755 to double
  %757 = fdiv double 1.000000e+00, %756
  %758 = fptrunc double %757 to float
  %759 = load ptr, ptr %37, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.graph_t, ptr %759, i32 0, i32 9
  %761 = load ptr, ptr %760, align 8, !tbaa !38
  %762 = load i32, ptr %9, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds float, ptr %761, i64 %763
  store float %758, ptr %764, align 4, !tbaa !39
  br label %765

765:                                              ; preds = %754
  %766 = load i32, ptr %9, align 4, !tbaa !9
  %767 = add nsw i32 %766, 1
  store i32 %767, ptr %9, align 4, !tbaa !9
  br label %713, !llvm.loop !40

768:                                              ; preds = %713
  %769 = load ptr, ptr %5, align 8, !tbaa !5
  %770 = load ptr, ptr %6, align 8, !tbaa !5
  %771 = load ptr, ptr %37, align 8, !tbaa !5
  call void @libmetis__ReAdjustMemory(ptr noundef %769, ptr noundef %770, ptr noundef %771)
  %772 = load ptr, ptr %5, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.ctrl_t, ptr %772, i32 0, i32 2
  %774 = load i32, ptr %773, align 8, !tbaa !22
  %775 = and i32 %774, 2
  %776 = icmp ne i32 %775, 0
  br i1 %776, label %777, label %783

777:                                              ; preds = %768
  %778 = call double @gk_CPUSeconds()
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.ctrl_t, ptr %779, i32 0, i32 30
  %781 = load double, ptr %780, align 8, !tbaa !23
  %782 = fadd double %781, %778
  store double %782, ptr %780, align 8, !tbaa !23
  br label %783

783:                                              ; preds = %777, %768
  %784 = load ptr, ptr %5, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %784)
  store i32 0, ptr %38, align 4
  br label %785

785:                                              ; preds = %783, %92, %60
  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 4, 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
  %786 = load i32, ptr %38, align 4
  switch i32 %786, label %788 [
    i32 0, label %787
    i32 1, label %787
  ]

787:                                              ; preds = %785, %785
  ret void

788:                                              ; preds = %785
  unreachable
}

declare void @libmetis__wspacepop(ptr noundef) #1

declare i32 @libmetis__isum(i64 noundef, ptr noundef, i64 noundef) #1

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @libmetis__ReAdjustMemory(ptr noundef, ptr noundef, ptr noundef) #3

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


; 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.3 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__CreateCoarseGraph = external hidden unnamed_addr constant [70 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1

declare double @gk_CPUSeconds() local_unnamed_addr #0

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

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__CreateCoarseGraph(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr noundef %3) local_unnamed_addr #3 {
  %5 = getelementptr inbounds i8, ptr %0, i64 4
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = icmp eq i32 %6, 1
  %8 = zext i1 %7 to i32
  %9 = icmp slt i32 %2, 4094
  br i1 %9, label %16, label %10

10:                                               ; preds = %4
  %11 = getelementptr inbounds i8, ptr %1, i64 4
  %12 = load i32, ptr %11, align 4, !tbaa !14
  %13 = load i32, ptr %1, align 8, !tbaa !16
  %14 = sdiv i32 %12, %13
  %15 = icmp sgt i32 %14, 102
  br i1 %15, label %16, label %17

16:                                               ; preds = %10, %4
  tail call void @libmetis__CreateCoarseGraphNoMask(ptr noundef nonnull %0, ptr noundef %1, i32 noundef %2, ptr noundef %3)
  br label %341

17:                                               ; preds = %10
  %18 = getelementptr inbounds i8, ptr %1, i64 16
  %19 = load ptr, ptr %18, align 8, !tbaa !17
  %smax = tail call i32 @llvm.smax.i32(i32 %13, i32 0)
  %wide.trip.count = zext nneg i32 %smax to i64
  br label %20

20:                                               ; preds = %21, %17
  %indvars.iv = phi i64 [ %indvars.iv.next, %21 ], [ 0, %17 ]
  %exitcond.not = icmp eq i64 %indvars.iv, %wide.trip.count
  br i1 %exitcond.not, label %29, label %21

21:                                               ; preds = %20
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %22 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv.next
  %23 = load i32, ptr %22, align 4, !tbaa !18
  %24 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv
  %25 = load i32, ptr %24, align 4, !tbaa !18
  %26 = sub nsw i32 %23, %25
  %27 = icmp sgt i32 %26, 255
  br i1 %27, label %28, label %20, !llvm.loop !19

28:                                               ; preds = %21
  tail call void @libmetis__CreateCoarseGraphNoMask(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %2, ptr noundef %3)
  br label %341

29:                                               ; preds = %20
  tail call void @libmetis__wspacepush(ptr noundef %0) #5
  %30 = getelementptr inbounds i8, ptr %0, i64 8
  %31 = load i32, ptr %30, align 8, !tbaa !21
  %32 = and i32 %31, 2
  %.not = icmp eq i32 %32, 0
  br i1 %.not, label %38, label %33

33:                                               ; preds = %29
  %34 = tail call double @gk_CPUSeconds() #5
  %35 = getelementptr inbounds i8, ptr %0, i64 160
  %36 = load double, ptr %35, align 8, !tbaa !22
  %37 = fsub double %36, %34
  store double %37, ptr %35, align 8, !tbaa !22
  br label %38

38:                                               ; preds = %33, %29
  %39 = getelementptr inbounds i8, ptr %1, i64 8
  %40 = load i32, ptr %39, align 8, !tbaa !23
  %41 = getelementptr inbounds i8, ptr %1, i64 24
  %42 = load ptr, ptr %41, align 8, !tbaa !24
  %43 = getelementptr inbounds i8, ptr %1, i64 32
  %44 = load ptr, ptr %43, align 8, !tbaa !25
  %45 = getelementptr inbounds i8, ptr %1, i64 40
  %46 = load ptr, ptr %45, align 8, !tbaa !26
  %47 = getelementptr inbounds i8, ptr %1, i64 48
  %48 = load ptr, ptr %47, align 8, !tbaa !27
  %49 = getelementptr inbounds i8, ptr %1, i64 104
  %50 = load ptr, ptr %49, align 8, !tbaa !28
  %51 = tail call ptr @libmetis__SetupCoarseGraph(ptr noundef nonnull %1, i32 noundef %2, i32 noundef %8)
  %52 = getelementptr inbounds i8, ptr %51, i64 16
  %53 = load ptr, ptr %52, align 8, !tbaa !17
  %54 = getelementptr inbounds i8, ptr %51, i64 24
  %55 = load ptr, ptr %54, align 8, !tbaa !24
  %56 = getelementptr inbounds i8, ptr %51, i64 32
  %57 = load ptr, ptr %56, align 8, !tbaa !25
  %58 = getelementptr inbounds i8, ptr %51, i64 40
  %59 = load ptr, ptr %58, align 8, !tbaa !26
  %60 = getelementptr inbounds i8, ptr %51, i64 48
  %61 = load ptr, ptr %60, align 8, !tbaa !27
  %62 = tail call ptr @libmetis__iwspacemalloc(ptr noundef nonnull %0, i32 noundef 2048) #5
  %63 = tail call ptr @libmetis__iset(i64 noundef 2048, i32 noundef -1, ptr noundef %62) #5
  store i32 0, ptr %53, align 4, !tbaa !18
  %64 = icmp sgt i32 %13, 0
  br i1 %64, label %.lr.ph351, label %._crit_edge352

.lr.ph351:                                        ; preds = %38
  %65 = icmp eq i32 %40, 1
  %66 = sext i32 %40 to i64
  %wide.trip.count399 = zext nneg i32 %13 to i64
  br label %67

67:                                               ; preds = %.lr.ph351, %314
  %indvars.iv396 = phi i64 [ 0, %.lr.ph351 ], [ %indvars.iv.next397, %314 ]
  %.0347 = phi i32 [ 0, %.lr.ph351 ], [ %.1, %314 ]
  %.0274346 = phi ptr [ %61, %.lr.ph351 ], [ %.1275, %314 ]
  %.0276345 = phi ptr [ %59, %.lr.ph351 ], [ %.1277, %314 ]
  %.0288344 = phi i32 [ 0, %.lr.ph351 ], [ %.1289, %314 ]
  %68 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv396
  %69 = load i32, ptr %68, align 4, !tbaa !18
  %70 = sext i32 %69 to i64
  %71 = icmp sgt i64 %indvars.iv396, %70
  br i1 %71, label %314, label %72

72:                                               ; preds = %67
  %73 = getelementptr inbounds i32, ptr %50, i64 %indvars.iv396
  %74 = load i32, ptr %73, align 4, !tbaa !18
  %75 = icmp eq i32 %74, %.0347
  br i1 %75, label %81, label %76

76:                                               ; preds = %72
  %77 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 676, ptr noundef nonnull @.str.3)
  %78 = load i32, ptr %73, align 4, !tbaa !18
  %79 = icmp eq i32 %78, %.0347
  br i1 %79, label %._crit_edge406, label %80

._crit_edge406:                                   ; preds = %76
  %.pre = load i32, ptr %68, align 4, !tbaa !18
  %.pre407 = sext i32 %.pre to i64
  br label %81

80:                                               ; preds = %76
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.3, i32 noundef 676, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__CreateCoarseGraph) #6
  unreachable

81:                                               ; preds = %._crit_edge406, %72
  %.pre-phi = phi i64 [ %.pre407, %._crit_edge406 ], [ %70, %72 ]
  %82 = getelementptr inbounds i32, ptr %50, i64 %.pre-phi
  %83 = load i32, ptr %82, align 4, !tbaa !18
  %84 = icmp eq i32 %83, %.0347
  br i1 %84, label %93, label %85

85:                                               ; preds = %81
  %86 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef 677, ptr noundef nonnull @.str.3)
  %87 = load i32, ptr %68, align 4, !tbaa !18
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds i32, ptr %50, i64 %88
  %90 = load i32, ptr %89, align 4, !tbaa !18
  %91 = icmp eq i32 %90, %.0347
  br i1 %91, label %93, label %92

92:                                               ; preds = %85
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.3, i32 noundef 677, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__CreateCoarseGraph) #6
  unreachable

93:                                               ; preds = %85, %81
  br i1 %65, label %94, label %99

94:                                               ; preds = %93
  %95 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv396
  %96 = load i32, ptr %95, align 4, !tbaa !18
  %97 = sext i32 %.0347 to i64
  %98 = getelementptr inbounds i32, ptr %55, i64 %97
  store i32 %96, ptr %98, align 4, !tbaa !18
  br label %106

99:                                               ; preds = %93
  %100 = mul nsw i64 %indvars.iv396, %66
  %101 = getelementptr inbounds i32, ptr %42, i64 %100
  %102 = mul nsw i32 %.0347, %40
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %55, i64 %103
  %105 = tail call ptr @libmetis__icopy(i64 noundef %66, ptr noundef %101, ptr noundef %104) #5
  br label %106

106:                                              ; preds = %99, %94
  br i1 %7, label %107, label %112

107:                                              ; preds = %106
  %108 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv396
  %109 = load i32, ptr %108, align 4, !tbaa !18
  %110 = sext i32 %.0347 to i64
  %111 = getelementptr inbounds i32, ptr %57, i64 %110
  store i32 %109, ptr %111, align 4, !tbaa !18
  br label %112

112:                                              ; preds = %107, %106
  %113 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv396
  %114 = load i32, ptr %113, align 4, !tbaa !18
  %115 = getelementptr inbounds i8, ptr %113, i64 4
  %116 = load i32, ptr %115, align 4, !tbaa !18
  %117 = icmp slt i32 %114, %116
  br i1 %117, label %.lr.ph324.preheader, label %._crit_edge

.lr.ph324.preheader:                              ; preds = %112
  %118 = sext i32 %114 to i64
  %wide.trip.count374 = sext i32 %116 to i64
  br label %.lr.ph324

.lr.ph324:                                        ; preds = %.lr.ph324.preheader, %166
  %indvars.iv371 = phi i64 [ %118, %.lr.ph324.preheader ], [ %indvars.iv.next372, %166 ]
  %.0284322 = phi i32 [ 0, %.lr.ph324.preheader ], [ %.1285, %166 ]
  %119 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv371
  %120 = load i32, ptr %119, align 4, !tbaa !18
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds i32, ptr %50, i64 %121
  %123 = load i32, ptr %122, align 4, !tbaa !18
  %124 = and i32 %123, 2047
  %125 = zext nneg i32 %124 to i64
  %126 = getelementptr inbounds i32, ptr %63, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !18
  %128 = icmp eq i32 %127, -1
  br i1 %128, label %129, label %136

129:                                              ; preds = %.lr.ph324
  %130 = sext i32 %.0284322 to i64
  %131 = getelementptr inbounds i32, ptr %.0276345, i64 %130
  store i32 %123, ptr %131, align 4, !tbaa !18
  %132 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv371
  %133 = load i32, ptr %132, align 4, !tbaa !18
  %134 = getelementptr inbounds i32, ptr %.0274346, i64 %130
  store i32 %133, ptr %134, align 4, !tbaa !18
  %135 = add nsw i32 %.0284322, 1
  store i32 %.0284322, ptr %126, align 4, !tbaa !18
  br label %166

136:                                              ; preds = %.lr.ph324
  %137 = sext i32 %127 to i64
  %138 = getelementptr inbounds i32, ptr %.0276345, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !18
  %140 = icmp eq i32 %139, %123
  br i1 %140, label %142, label %.preheader310

.preheader310:                                    ; preds = %136
  %141 = icmp sgt i32 %.0284322, 0
  br i1 %141, label %.lr.ph.preheader, label %.loopexit311

.lr.ph.preheader:                                 ; preds = %.preheader310
  %wide.trip.count369 = zext nneg i32 %.0284322 to i64
  br label %.lr.ph

142:                                              ; preds = %136
  %143 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv371
  %144 = load i32, ptr %143, align 4, !tbaa !18
  %145 = getelementptr inbounds i32, ptr %.0274346, i64 %137
  %146 = load i32, ptr %145, align 4, !tbaa !18
  %147 = add nsw i32 %146, %144
  store i32 %147, ptr %145, align 4, !tbaa !18
  br label %166

.lr.ph:                                           ; preds = %.lr.ph.preheader, %158
  %indvars.iv366 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next367, %158 ]
  %148 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv366
  %149 = load i32, ptr %148, align 4, !tbaa !18
  %150 = icmp eq i32 %149, %123
  br i1 %150, label %151, label %158

151:                                              ; preds = %.lr.ph
  %152 = trunc nuw nsw i64 %indvars.iv366 to i32
  %153 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv371
  %154 = load i32, ptr %153, align 4, !tbaa !18
  %155 = getelementptr inbounds i32, ptr %.0274346, i64 %indvars.iv366
  %156 = load i32, ptr %155, align 4, !tbaa !18
  %157 = add nsw i32 %156, %154
  store i32 %157, ptr %155, align 4, !tbaa !18
  br label %.loopexit311

158:                                              ; preds = %.lr.ph
  %indvars.iv.next367 = add nuw nsw i64 %indvars.iv366, 1
  %exitcond370.not = icmp eq i64 %indvars.iv.next367, %wide.trip.count369
  br i1 %exitcond370.not, label %.loopexit311.thread, label %.lr.ph, !llvm.loop !29

.loopexit311:                                     ; preds = %.preheader310, %151
  %.0280315 = phi i32 [ %152, %151 ], [ 0, %.preheader310 ]
  %159 = icmp eq i32 %.0280315, %.0284322
  br i1 %159, label %.loopexit311.thread, label %166

.loopexit311.thread:                              ; preds = %158, %.loopexit311
  %160 = sext i32 %.0284322 to i64
  %161 = getelementptr inbounds i32, ptr %.0276345, i64 %160
  store i32 %123, ptr %161, align 4, !tbaa !18
  %162 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv371
  %163 = load i32, ptr %162, align 4, !tbaa !18
  %164 = add nsw i32 %.0284322, 1
  %165 = getelementptr inbounds i32, ptr %.0274346, i64 %160
  store i32 %163, ptr %165, align 4, !tbaa !18
  br label %166

166:                                              ; preds = %129, %.loopexit311, %.loopexit311.thread, %142
  %.1285 = phi i32 [ %135, %129 ], [ %.0284322, %142 ], [ %164, %.loopexit311.thread ], [ %.0284322, %.loopexit311 ]
  %indvars.iv.next372 = add nsw i64 %indvars.iv371, 1
  %exitcond375.not = icmp eq i64 %indvars.iv.next372, %wide.trip.count374
  br i1 %exitcond375.not, label %._crit_edge, label %.lr.ph324, !llvm.loop !30

._crit_edge:                                      ; preds = %166, %112
  %.0284.lcssa = phi i32 [ 0, %112 ], [ %.1285, %166 ]
  %167 = zext i32 %69 to i64
  %.not306 = icmp eq i64 %indvars.iv396, %167
  br i1 %.not306, label %.thread, label %168

168:                                              ; preds = %._crit_edge
  br i1 %65, label %169, label %176

169:                                              ; preds = %168
  %170 = getelementptr inbounds i32, ptr %42, i64 %70
  %171 = load i32, ptr %170, align 4, !tbaa !18
  %172 = sext i32 %.0347 to i64
  %173 = getelementptr inbounds i32, ptr %55, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !18
  %175 = add nsw i32 %174, %171
  store i32 %175, ptr %173, align 4, !tbaa !18
  br label %184

176:                                              ; preds = %168
  %177 = mul nsw i32 %69, %40
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i32, ptr %42, i64 %178
  %180 = mul nsw i32 %.0347, %40
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %55, i64 %181
  %183 = tail call ptr @libmetis__iaxpy(i64 noundef %66, i32 noundef 1, ptr noundef %179, i64 noundef 1, ptr noundef %182, i64 noundef 1) #5
  br label %184

184:                                              ; preds = %176, %169
  br i1 %7, label %185, label %192

185:                                              ; preds = %184
  %186 = getelementptr inbounds i32, ptr %44, i64 %70
  %187 = load i32, ptr %186, align 4, !tbaa !18
  %188 = sext i32 %.0347 to i64
  %189 = getelementptr inbounds i32, ptr %57, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !18
  %191 = add nsw i32 %190, %187
  store i32 %191, ptr %189, align 4, !tbaa !18
  br label %192

192:                                              ; preds = %185, %184
  %193 = getelementptr inbounds i32, ptr %19, i64 %70
  %194 = load i32, ptr %193, align 4, !tbaa !18
  %195 = getelementptr i8, ptr %193, i64 4
  %196 = load i32, ptr %195, align 4, !tbaa !18
  %197 = icmp slt i32 %194, %196
  br i1 %197, label %.lr.ph332.preheader, label %._crit_edge333

.lr.ph332.preheader:                              ; preds = %192
  %198 = sext i32 %194 to i64
  %wide.trip.count384 = sext i32 %196 to i64
  br label %.lr.ph332

.lr.ph332:                                        ; preds = %.lr.ph332.preheader, %246
  %indvars.iv381 = phi i64 [ %198, %.lr.ph332.preheader ], [ %indvars.iv.next382, %246 ]
  %.2286329 = phi i32 [ %.0284.lcssa, %.lr.ph332.preheader ], [ %.3287, %246 ]
  %199 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv381
  %200 = load i32, ptr %199, align 4, !tbaa !18
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i32, ptr %50, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !18
  %204 = and i32 %203, 2047
  %205 = zext nneg i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %63, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !18
  %208 = icmp eq i32 %207, -1
  br i1 %208, label %209, label %216

209:                                              ; preds = %.lr.ph332
  %210 = sext i32 %.2286329 to i64
  %211 = getelementptr inbounds i32, ptr %.0276345, i64 %210
  store i32 %203, ptr %211, align 4, !tbaa !18
  %212 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv381
  %213 = load i32, ptr %212, align 4, !tbaa !18
  %214 = getelementptr inbounds i32, ptr %.0274346, i64 %210
  store i32 %213, ptr %214, align 4, !tbaa !18
  %215 = add nsw i32 %.2286329, 1
  store i32 %.2286329, ptr %206, align 4, !tbaa !18
  br label %246

216:                                              ; preds = %.lr.ph332
  %217 = sext i32 %207 to i64
  %218 = getelementptr inbounds i32, ptr %.0276345, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !18
  %220 = icmp eq i32 %219, %203
  br i1 %220, label %222, label %.preheader

.preheader:                                       ; preds = %216
  %221 = icmp sgt i32 %.2286329, 0
  br i1 %221, label %.lr.ph327.preheader, label %.loopexit

.lr.ph327.preheader:                              ; preds = %.preheader
  %wide.trip.count379 = zext nneg i32 %.2286329 to i64
  br label %.lr.ph327

222:                                              ; preds = %216
  %223 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv381
  %224 = load i32, ptr %223, align 4, !tbaa !18
  %225 = getelementptr inbounds i32, ptr %.0274346, i64 %217
  %226 = load i32, ptr %225, align 4, !tbaa !18
  %227 = add nsw i32 %226, %224
  store i32 %227, ptr %225, align 4, !tbaa !18
  br label %246

.lr.ph327:                                        ; preds = %.lr.ph327.preheader, %238
  %indvars.iv376 = phi i64 [ 0, %.lr.ph327.preheader ], [ %indvars.iv.next377, %238 ]
  %228 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv376
  %229 = load i32, ptr %228, align 4, !tbaa !18
  %230 = icmp eq i32 %229, %203
  br i1 %230, label %231, label %238

231:                                              ; preds = %.lr.ph327
  %232 = trunc nuw nsw i64 %indvars.iv376 to i32
  %233 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv381
  %234 = load i32, ptr %233, align 4, !tbaa !18
  %235 = getelementptr inbounds i32, ptr %.0274346, i64 %indvars.iv376
  %236 = load i32, ptr %235, align 4, !tbaa !18
  %237 = add nsw i32 %236, %234
  store i32 %237, ptr %235, align 4, !tbaa !18
  br label %.loopexit

238:                                              ; preds = %.lr.ph327
  %indvars.iv.next377 = add nuw nsw i64 %indvars.iv376, 1
  %exitcond380.not = icmp eq i64 %indvars.iv.next377, %wide.trip.count379
  br i1 %exitcond380.not, label %.loopexit.thread, label %.lr.ph327, !llvm.loop !31

.loopexit:                                        ; preds = %.preheader, %231
  %.1281317 = phi i32 [ %232, %231 ], [ 0, %.preheader ]
  %239 = icmp eq i32 %.1281317, %.2286329
  br i1 %239, label %.loopexit.thread, label %246

.loopexit.thread:                                 ; preds = %238, %.loopexit
  %240 = sext i32 %.2286329 to i64
  %241 = getelementptr inbounds i32, ptr %.0276345, i64 %240
  store i32 %203, ptr %241, align 4, !tbaa !18
  %242 = getelementptr inbounds i32, ptr %48, i64 %indvars.iv381
  %243 = load i32, ptr %242, align 4, !tbaa !18
  %244 = add nsw i32 %.2286329, 1
  %245 = getelementptr inbounds i32, ptr %.0274346, i64 %240
  store i32 %243, ptr %245, align 4, !tbaa !18
  br label %246

246:                                              ; preds = %209, %.loopexit, %.loopexit.thread, %222
  %.3287 = phi i32 [ %215, %209 ], [ %.2286329, %222 ], [ %244, %.loopexit.thread ], [ %.2286329, %.loopexit ]
  %indvars.iv.next382 = add nsw i64 %indvars.iv381, 1
  %exitcond385.not = icmp eq i64 %indvars.iv.next382, %wide.trip.count384
  br i1 %exitcond385.not, label %._crit_edge333, label %.lr.ph332, !llvm.loop !32

._crit_edge333:                                   ; preds = %246, %192
  %.2286.lcssa = phi i32 [ %.0284.lcssa, %192 ], [ %.3287, %246 ]
  %247 = and i32 %.0347, 2047
  %248 = zext nneg i32 %247 to i64
  %249 = getelementptr inbounds i32, ptr %63, i64 %248
  %250 = load i32, ptr %249, align 4, !tbaa !18
  %251 = icmp sgt i32 %250, -1
  br i1 %251, label %252, label %.thread

252:                                              ; preds = %._crit_edge333
  %253 = zext nneg i32 %250 to i64
  %254 = getelementptr inbounds i32, ptr %.0276345, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !18
  %.not307 = icmp eq i32 %255, %.0347
  br i1 %.not307, label %.loopexit313, label %.preheader312

.preheader312:                                    ; preds = %252
  %256 = icmp sgt i32 %.2286.lcssa, 0
  br i1 %256, label %.lr.ph336.preheader, label %.loopexit313

.lr.ph336.preheader:                              ; preds = %.preheader312
  %wide.trip.count389 = zext nneg i32 %.2286.lcssa to i64
  br label %.lr.ph336

.lr.ph336:                                        ; preds = %.lr.ph336.preheader, %260
  %indvars.iv386 = phi i64 [ 0, %.lr.ph336.preheader ], [ %indvars.iv.next387, %260 ]
  %257 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv386
  %258 = load i32, ptr %257, align 4, !tbaa !18
  %259 = icmp eq i32 %258, %.0347
  br i1 %259, label %.loopexit313.loopexit, label %260

260:                                              ; preds = %.lr.ph336
  %indvars.iv.next387 = add nuw nsw i64 %indvars.iv386, 1
  %exitcond390.not = icmp eq i64 %indvars.iv.next387, %wide.trip.count389
  br i1 %exitcond390.not, label %.thread, label %.lr.ph336, !llvm.loop !33

.loopexit313.loopexit:                            ; preds = %.lr.ph336
  %261 = trunc nuw nsw i64 %indvars.iv386 to i32
  br label %.loopexit313

.loopexit313:                                     ; preds = %.loopexit313.loopexit, %.preheader312, %252
  %.3283 = phi i32 [ %250, %252 ], [ 0, %.preheader312 ], [ %261, %.loopexit313.loopexit ]
  %262 = icmp sgt i32 %.3283, -1
  %263 = icmp slt i32 %.3283, %.2286.lcssa
  %or.cond = select i1 %262, i1 %263, i1 false
  br i1 %or.cond, label %264, label %.thread

264:                                              ; preds = %.loopexit313
  %265 = zext nneg i32 %.3283 to i64
  %266 = getelementptr inbounds i32, ptr %.0276345, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !18
  %268 = icmp eq i32 %267, %.0347
  br i1 %268, label %269, label %.thread

269:                                              ; preds = %264
  %270 = add nsw i32 %.2286.lcssa, -1
  %271 = zext nneg i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %.0276345, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !18
  store i32 %273, ptr %266, align 4, !tbaa !18
  %274 = getelementptr inbounds i32, ptr %.0274346, i64 %271
  %275 = load i32, ptr %274, align 4, !tbaa !18
  %276 = getelementptr inbounds i32, ptr %.0274346, i64 %265
  store i32 %275, ptr %276, align 4, !tbaa !18
  br label %.thread

.thread:                                          ; preds = %260, %._crit_edge333, %.loopexit313, %264, %269, %._crit_edge
  %.4 = phi i32 [ %270, %269 ], [ %.2286.lcssa, %264 ], [ %.2286.lcssa, %.loopexit313 ], [ %.0284.lcssa, %._crit_edge ], [ %.2286.lcssa, %._crit_edge333 ], [ %.2286.lcssa, %260 ]
  %277 = icmp sgt i32 %.4, 0
  br i1 %277, label %.lr.ph341.preheader, label %._crit_edge342

.lr.ph341.preheader:                              ; preds = %.thread
  %wide.trip.count394 = zext nneg i32 %.4 to i64
  %xtraiter = and i64 %wide.trip.count394, 3
  %278 = icmp ult i32 %.4, 4
  br i1 %278, label %._crit_edge342.loopexit.unr-lcssa, label %.lr.ph341.preheader.new

.lr.ph341.preheader.new:                          ; preds = %.lr.ph341.preheader
  %unroll_iter = and i64 %wide.trip.count394, 2147483644
  br label %.lr.ph341

.lr.ph341:                                        ; preds = %.lr.ph341, %.lr.ph341.preheader.new
  %indvars.iv391 = phi i64 [ 0, %.lr.ph341.preheader.new ], [ %indvars.iv.next392.3, %.lr.ph341 ]
  %niter = phi i64 [ 0, %.lr.ph341.preheader.new ], [ %niter.next.3, %.lr.ph341 ]
  %279 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv391
  %280 = load i32, ptr %279, align 4, !tbaa !18
  %281 = and i32 %280, 2047
  %282 = zext nneg i32 %281 to i64
  %283 = getelementptr inbounds i32, ptr %63, i64 %282
  store i32 -1, ptr %283, align 4, !tbaa !18
  %indvars.iv.next392 = or disjoint i64 %indvars.iv391, 1
  %284 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv.next392
  %285 = load i32, ptr %284, align 4, !tbaa !18
  %286 = and i32 %285, 2047
  %287 = zext nneg i32 %286 to i64
  %288 = getelementptr inbounds i32, ptr %63, i64 %287
  store i32 -1, ptr %288, align 4, !tbaa !18
  %indvars.iv.next392.1 = or disjoint i64 %indvars.iv391, 2
  %289 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv.next392.1
  %290 = load i32, ptr %289, align 4, !tbaa !18
  %291 = and i32 %290, 2047
  %292 = zext nneg i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %63, i64 %292
  store i32 -1, ptr %293, align 4, !tbaa !18
  %indvars.iv.next392.2 = or disjoint i64 %indvars.iv391, 3
  %294 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv.next392.2
  %295 = load i32, ptr %294, align 4, !tbaa !18
  %296 = and i32 %295, 2047
  %297 = zext nneg i32 %296 to i64
  %298 = getelementptr inbounds i32, ptr %63, i64 %297
  store i32 -1, ptr %298, align 4, !tbaa !18
  %indvars.iv.next392.3 = add nuw nsw i64 %indvars.iv391, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge342.loopexit.unr-lcssa, label %.lr.ph341, !llvm.loop !34

._crit_edge342.loopexit.unr-lcssa:                ; preds = %.lr.ph341, %.lr.ph341.preheader
  %indvars.iv391.unr = phi i64 [ 0, %.lr.ph341.preheader ], [ %indvars.iv.next392.3, %.lr.ph341 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge342, label %.lr.ph341.epil

.lr.ph341.epil:                                   ; preds = %._crit_edge342.loopexit.unr-lcssa, %.lr.ph341.epil
  %indvars.iv391.epil = phi i64 [ %indvars.iv.next392.epil, %.lr.ph341.epil ], [ %indvars.iv391.unr, %._crit_edge342.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph341.epil ], [ 0, %._crit_edge342.loopexit.unr-lcssa ]
  %299 = getelementptr inbounds i32, ptr %.0276345, i64 %indvars.iv391.epil
  %300 = load i32, ptr %299, align 4, !tbaa !18
  %301 = and i32 %300, 2047
  %302 = zext nneg i32 %301 to i64
  %303 = getelementptr inbounds i32, ptr %63, i64 %302
  store i32 -1, ptr %303, align 4, !tbaa !18
  %indvars.iv.next392.epil = add nuw nsw i64 %indvars.iv391.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge342, label %.lr.ph341.epil, !llvm.loop !35

._crit_edge342:                                   ; preds = %._crit_edge342.loopexit.unr-lcssa, %.lr.ph341.epil, %.thread
  %304 = and i32 %.0347, 2047
  %305 = zext nneg i32 %304 to i64
  %306 = getelementptr inbounds i32, ptr %63, i64 %305
  store i32 -1, ptr %306, align 4, !tbaa !18
  %307 = add nsw i32 %.4, %.0288344
  %308 = add nsw i32 %.0347, 1
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %53, i64 %309
  store i32 %307, ptr %310, align 4, !tbaa !18
  %311 = sext i32 %.4 to i64
  %312 = getelementptr inbounds i32, ptr %.0276345, i64 %311
  %313 = getelementptr inbounds i32, ptr %.0274346, i64 %311
  br label %314

314:                                              ; preds = %67, %._crit_edge342
  %.1289 = phi i32 [ %.0288344, %67 ], [ %307, %._crit_edge342 ]
  %.1277 = phi ptr [ %.0276345, %67 ], [ %312, %._crit_edge342 ]
  %.1275 = phi ptr [ %.0274346, %67 ], [ %313, %._crit_edge342 ]
  %.1 = phi i32 [ %.0347, %67 ], [ %308, %._crit_edge342 ]
  %indvars.iv.next397 = add nuw nsw i64 %indvars.iv396, 1
  %exitcond400.not = icmp eq i64 %indvars.iv.next397, %wide.trip.count399
  br i1 %exitcond400.not, label %._crit_edge352, label %67, !llvm.loop !37

._crit_edge352:                                   ; preds = %314, %38
  %.0288.lcssa = phi i32 [ 0, %38 ], [ %.1289, %314 ]
  %315 = getelementptr inbounds i8, ptr %51, i64 4
  store i32 %.0288.lcssa, ptr %315, align 4, !tbaa !14
  %316 = icmp sgt i32 %40, 0
  br i1 %316, label %.lr.ph356, label %._crit_edge357

.lr.ph356:                                        ; preds = %._crit_edge352
  %317 = zext nneg i32 %40 to i64
  %318 = getelementptr inbounds i8, ptr %51, i64 56
  %319 = getelementptr inbounds i8, ptr %51, i64 64
  br label %320

320:                                              ; preds = %.lr.ph356, %320
  %indvars.iv401 = phi i64 [ 0, %.lr.ph356 ], [ %indvars.iv.next402, %320 ]
  %321 = load i32, ptr %51, align 8, !tbaa !16
  %322 = sext i32 %321 to i64
  %323 = load ptr, ptr %54, align 8, !tbaa !24
  %324 = getelementptr inbounds i32, ptr %323, i64 %indvars.iv401
  %325 = tail call i32 @libmetis__isum(i64 noundef %322, ptr noundef %324, i64 noundef %317) #5
  %326 = load ptr, ptr %318, align 8, !tbaa !38
  %327 = getelementptr inbounds i32, ptr %326, i64 %indvars.iv401
  store i32 %325, ptr %327, align 4, !tbaa !18
  %spec.select = tail call i32 @llvm.smax.i32(i32 %325, i32 1)
  %328 = uitofp nneg i32 %spec.select to double
  %329 = fdiv double 1.000000e+00, %328
  %330 = fptrunc double %329 to float
  %331 = load ptr, ptr %319, align 8, !tbaa !39
  %332 = getelementptr inbounds float, ptr %331, i64 %indvars.iv401
  store float %330, ptr %332, align 4, !tbaa !40
  %indvars.iv.next402 = add nuw nsw i64 %indvars.iv401, 1
  %exitcond405.not = icmp eq i64 %indvars.iv.next402, %317
  br i1 %exitcond405.not, label %._crit_edge357, label %320, !llvm.loop !41

._crit_edge357:                                   ; preds = %320, %._crit_edge352
  tail call void @libmetis__ReAdjustMemory(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %51)
  %333 = load i32, ptr %30, align 8, !tbaa !21
  %334 = and i32 %333, 2
  %.not305 = icmp eq i32 %334, 0
  br i1 %.not305, label %340, label %335

335:                                              ; preds = %._crit_edge357
  %336 = tail call double @gk_CPUSeconds() #5
  %337 = getelementptr inbounds i8, ptr %0, i64 160
  %338 = load double, ptr %337, align 8, !tbaa !22
  %339 = fadd double %336, %338
  store double %339, ptr %337, align 8, !tbaa !22
  br label %340

340:                                              ; preds = %335, %._crit_edge357
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #5
  br label %341

341:                                              ; preds = %340, %28, %16
  ret void
}

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #0

declare i32 @libmetis__isum(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

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

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

declare ptr @libmetis__icopy(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare dso_local void @libmetis__ReAdjustMemory(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

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

attributes #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 = { 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 #2 = { 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 #3 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }
attributes #6 = { 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 4}
!6 = !{!"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, !11, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !11, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !10, i64 232, !13, i64 240, !13, i64 248, !13, 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}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!"double", !8, i64 0}
!13 = !{!"long", !8, i64 0}
!14 = !{!15, !7, i64 4}
!15 = !{!"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}
!16 = !{!15, !7, i64 0}
!17 = !{!15, !10, i64 16}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!6, !7, i64 8}
!22 = !{!6, !12, i64 160}
!23 = !{!15, !7, i64 8}
!24 = !{!15, !10, i64 24}
!25 = !{!15, !10, i64 32}
!26 = !{!15, !10, i64 40}
!27 = !{!15, !10, i64 48}
!28 = !{!15, !10, i64 104}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.unroll.disable"}
!37 = distinct !{!37, !20}
!38 = !{!15, !10, i64 56}
!39 = !{!15, !10, i64 64}
!40 = !{!11, !11, i64 0}
!41 = distinct !{!41, !20}


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