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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__CreateCoarseGraphNoMask(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca 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 ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i64 %2, ptr %8, align 8, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, 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 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.controldef, ptr %42, i32 0, i32 7
  %44 = load i64, ptr %43, align 8, !tbaa !11
  %45 = icmp eq i64 %44, 6
  %46 = zext i1 %45 to i64
  %47 = select i1 %45, i32 1, i32 0
  %48 = sext i32 %47 to i64
  store i64 %48, ptr %23, align 8, !tbaa !9
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.controldef, ptr %49, i32 0, i32 1
  %51 = load i64, ptr %50, align 8, !tbaa !16
  %52 = and i64 %51, 1
  %53 = icmp ne i64 %52, 0
  br i1 %53, label %54, label %60

54:                                               ; preds = %5
  %55 = call double @gk_CPUSeconds()
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.controldef, ptr %56, i32 0, i32 15
  %58 = load double, ptr %57, align 8, !tbaa !17
  %59 = fsub double %58, %55
  store double %59, ptr %57, align 8, !tbaa !17
  br label %60

60:                                               ; preds = %54, %5
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.graphdef, ptr %61, i32 0, i32 0
  %63 = load i64, ptr %62, align 8, !tbaa !18
  store i64 %63, ptr %17, align 8, !tbaa !9
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.graphdef, ptr %64, i32 0, i32 28
  %66 = load i64, ptr %65, align 8, !tbaa !21
  store i64 %66, ptr %19, align 8, !tbaa !9
  %67 = load ptr, ptr %7, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.graphdef, ptr %67, i32 0, i32 2
  %69 = load ptr, ptr %68, align 8, !tbaa !22
  store ptr %69, ptr %24, align 8, !tbaa !5
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.graphdef, ptr %70, i32 0, i32 3
  %72 = load ptr, ptr %71, align 8, !tbaa !23
  store ptr %72, ptr %25, align 8, !tbaa !5
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.graphdef, ptr %73, i32 0, i32 4
  %75 = load ptr, ptr %74, align 8, !tbaa !24
  store ptr %75, ptr %26, align 8, !tbaa !5
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.graphdef, ptr %76, i32 0, i32 29
  %78 = load ptr, ptr %77, align 8, !tbaa !25
  store ptr %78, ptr %39, align 8, !tbaa !5
  %79 = load ptr, ptr %7, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.graphdef, ptr %79, i32 0, i32 5
  %81 = load ptr, ptr %80, align 8, !tbaa !26
  store ptr %81, ptr %27, align 8, !tbaa !5
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.graphdef, ptr %82, i32 0, i32 6
  %84 = load ptr, ptr %83, align 8, !tbaa !27
  store ptr %84, ptr %28, align 8, !tbaa !5
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.graphdef, ptr %85, i32 0, i32 13
  %87 = load ptr, ptr %86, align 8, !tbaa !28
  store ptr %87, ptr %29, align 8, !tbaa !5
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.graphdef, ptr %88, i32 0, i32 15
  %90 = load ptr, ptr %89, align 8, !tbaa !29
  store ptr %90, ptr %31, align 8, !tbaa !5
  %91 = load ptr, ptr %7, align 8, !tbaa !5
  %92 = load i64, ptr %8, align 8, !tbaa !9
  %93 = load i64, ptr %23, align 8, !tbaa !9
  %94 = call ptr @libmetis__SetUpCoarseGraph(ptr noundef %91, i64 noundef %92, i64 noundef %93)
  store ptr %94, ptr %41, align 8, !tbaa !5
  %95 = load ptr, ptr %41, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.graphdef, ptr %95, i32 0, i32 2
  %97 = load ptr, ptr %96, align 8, !tbaa !22
  store ptr %97, ptr %33, align 8, !tbaa !5
  %98 = load ptr, ptr %41, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.graphdef, ptr %98, i32 0, i32 3
  %100 = load ptr, ptr %99, align 8, !tbaa !23
  store ptr %100, ptr %34, align 8, !tbaa !5
  %101 = load ptr, ptr %41, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.graphdef, ptr %101, i32 0, i32 4
  %103 = load ptr, ptr %102, align 8, !tbaa !24
  store ptr %103, ptr %35, align 8, !tbaa !5
  %104 = load ptr, ptr %41, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.graphdef, ptr %104, i32 0, i32 29
  %106 = load ptr, ptr %105, align 8, !tbaa !25
  store ptr %106, ptr %40, align 8, !tbaa !5
  %107 = load ptr, ptr %41, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.graphdef, ptr %107, i32 0, i32 13
  %109 = load ptr, ptr %108, align 8, !tbaa !28
  store ptr %109, ptr %38, align 8, !tbaa !5
  %110 = load ptr, ptr %41, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.graphdef, ptr %110, i32 0, i32 5
  %112 = load ptr, ptr %111, align 8, !tbaa !26
  store ptr %112, ptr %36, align 8, !tbaa !5
  %113 = load ptr, ptr %41, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.graphdef, ptr %113, i32 0, i32 6
  %115 = load ptr, ptr %114, align 8, !tbaa !27
  store ptr %115, ptr %37, align 8, !tbaa !5
  %116 = load i64, ptr %8, align 8, !tbaa !9
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = load i64, ptr %8, align 8, !tbaa !9
  %119 = call ptr @libmetis__idxwspacemalloc(ptr noundef %117, i64 noundef %118)
  %120 = call ptr @libmetis__idxset(i64 noundef %116, i64 noundef -1, ptr noundef %119)
  store ptr %120, ptr %32, align 8, !tbaa !5
  %121 = load ptr, ptr %24, align 8, !tbaa !5
  %122 = load i64, ptr %17, align 8, !tbaa !9
  %123 = getelementptr inbounds i64, ptr %121, i64 %122
  %124 = load i64, ptr %123, align 8, !tbaa !9
  store i64 %124, ptr %16, align 8, !tbaa !9
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.controldef, ptr %125, i32 0, i32 11
  %127 = getelementptr inbounds %struct.workspacedef, ptr %126, i32 0, i32 6
  %128 = load ptr, ptr %127, align 8, !tbaa !30
  store ptr %128, ptr %30, align 8, !tbaa !5
  %129 = load ptr, ptr %30, align 8, !tbaa !5
  %130 = load ptr, ptr %27, align 8, !tbaa !5
  %131 = load i64, ptr %16, align 8, !tbaa !9
  %132 = mul i64 %131, 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %129, ptr align 8 %130, i64 %132, i1 false)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %133

133:                                              ; preds = %148, %60
  %134 = load i64, ptr %11, align 8, !tbaa !9
  %135 = load i64, ptr %16, align 8, !tbaa !9
  %136 = icmp slt i64 %134, %135
  br i1 %136, label %137, label %151

137:                                              ; preds = %133
  %138 = load ptr, ptr %31, align 8, !tbaa !5
  %139 = load ptr, ptr %30, align 8, !tbaa !5
  %140 = load i64, ptr %11, align 8, !tbaa !9
  %141 = getelementptr inbounds i64, ptr %139, i64 %140
  %142 = load i64, ptr %141, align 8, !tbaa !9
  %143 = getelementptr inbounds i64, ptr %138, i64 %142
  %144 = load i64, ptr %143, align 8, !tbaa !9
  %145 = load ptr, ptr %30, align 8, !tbaa !5
  %146 = load i64, ptr %11, align 8, !tbaa !9
  %147 = getelementptr inbounds i64, ptr %145, i64 %146
  store i64 %144, ptr %147, align 8, !tbaa !9
  br label %148

148:                                              ; preds = %137
  %149 = load i64, ptr %11, align 8, !tbaa !9
  %150 = add nsw i64 %149, 1
  store i64 %150, ptr %11, align 8, !tbaa !9
  br label %133, !llvm.loop !31

151:                                              ; preds = %133
  store i64 0, ptr %20, align 8, !tbaa !9
  store i64 0, ptr %8, align 8, !tbaa !9
  %152 = load ptr, ptr %33, align 8, !tbaa !5
  %153 = getelementptr inbounds i64, ptr %152, i64 0
  store i64 0, ptr %153, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %154

154:                                              ; preds = %445, %151
  %155 = load i64, ptr %11, align 8, !tbaa !9
  %156 = load i64, ptr %17, align 8, !tbaa !9
  %157 = icmp slt i64 %155, %156
  br i1 %157, label %158, label %448

158:                                              ; preds = %154
  %159 = load ptr, ptr %10, align 8, !tbaa !5
  %160 = load i64, ptr %11, align 8, !tbaa !9
  %161 = getelementptr inbounds i64, ptr %159, i64 %160
  %162 = load i64, ptr %161, align 8, !tbaa !9
  store i64 %162, ptr %21, align 8, !tbaa !9
  %163 = load ptr, ptr %31, align 8, !tbaa !5
  %164 = load i64, ptr %21, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = load i64, ptr %8, align 8, !tbaa !9
  %168 = icmp ne i64 %166, %167
  br i1 %168, label %169, label %170

169:                                              ; preds = %158
  br label %445

170:                                              ; preds = %158
  %171 = load ptr, ptr %9, align 8, !tbaa !5
  %172 = load i64, ptr %21, align 8, !tbaa !9
  %173 = getelementptr inbounds i64, ptr %171, i64 %172
  %174 = load i64, ptr %173, align 8, !tbaa !9
  store i64 %174, ptr %22, align 8, !tbaa !9
  %175 = load i64, ptr %19, align 8, !tbaa !9
  %176 = icmp eq i64 %175, 1
  br i1 %176, label %177, label %185

177:                                              ; preds = %170
  %178 = load ptr, ptr %25, align 8, !tbaa !5
  %179 = load i64, ptr %21, align 8, !tbaa !9
  %180 = getelementptr inbounds i64, ptr %178, i64 %179
  %181 = load i64, ptr %180, align 8, !tbaa !9
  %182 = load ptr, ptr %34, align 8, !tbaa !5
  %183 = load i64, ptr %8, align 8, !tbaa !9
  %184 = getelementptr inbounds i64, ptr %182, i64 %183
  store i64 %181, ptr %184, align 8, !tbaa !9
  br label %198

185:                                              ; preds = %170
  %186 = load ptr, ptr %40, align 8, !tbaa !5
  %187 = load i64, ptr %8, align 8, !tbaa !9
  %188 = load i64, ptr %19, align 8, !tbaa !9
  %189 = mul nsw i64 %187, %188
  %190 = getelementptr inbounds float, ptr %186, i64 %189
  %191 = load ptr, ptr %39, align 8, !tbaa !5
  %192 = load i64, ptr %21, align 8, !tbaa !9
  %193 = load i64, ptr %19, align 8, !tbaa !9
  %194 = mul nsw i64 %192, %193
  %195 = getelementptr inbounds float, ptr %191, i64 %194
  %196 = load i64, ptr %19, align 8, !tbaa !9
  %197 = mul i64 4, %196
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %190, ptr align 1 %195, i64 %197, i1 false)
  br label %198

198:                                              ; preds = %185, %177
  %199 = load i64, ptr %23, align 8, !tbaa !9
  %200 = icmp ne i64 %199, 0
  br i1 %200, label %201, label %209

201:                                              ; preds = %198
  %202 = load ptr, ptr %26, align 8, !tbaa !5
  %203 = load i64, ptr %21, align 8, !tbaa !9
  %204 = getelementptr inbounds i64, ptr %202, i64 %203
  %205 = load i64, ptr %204, align 8, !tbaa !9
  %206 = load ptr, ptr %35, align 8, !tbaa !5
  %207 = load i64, ptr %8, align 8, !tbaa !9
  %208 = getelementptr inbounds i64, ptr %206, i64 %207
  store i64 %205, ptr %208, align 8, !tbaa !9
  br label %209

209:                                              ; preds = %201, %198
  %210 = load ptr, ptr %29, align 8, !tbaa !5
  %211 = load i64, ptr %21, align 8, !tbaa !9
  %212 = getelementptr inbounds i64, ptr %210, i64 %211
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = load ptr, ptr %38, align 8, !tbaa !5
  %215 = load i64, ptr %8, align 8, !tbaa !9
  %216 = getelementptr inbounds i64, ptr %214, i64 %215
  store i64 %213, ptr %216, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  %217 = load ptr, ptr %24, align 8, !tbaa !5
  %218 = load i64, ptr %21, align 8, !tbaa !9
  %219 = getelementptr inbounds i64, ptr %217, i64 %218
  %220 = load i64, ptr %219, align 8, !tbaa !9
  store i64 %220, ptr %15, align 8, !tbaa !9
  %221 = load ptr, ptr %24, align 8, !tbaa !5
  %222 = load i64, ptr %21, align 8, !tbaa !9
  %223 = add nsw i64 %222, 1
  %224 = getelementptr inbounds i64, ptr %221, i64 %223
  %225 = load i64, ptr %224, align 8, !tbaa !9
  store i64 %225, ptr %16, align 8, !tbaa !9
  %226 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %226, ptr %12, align 8, !tbaa !9
  br label %227

227:                                              ; preds = %269, %209
  %228 = load i64, ptr %12, align 8, !tbaa !9
  %229 = load i64, ptr %16, align 8, !tbaa !9
  %230 = icmp slt i64 %228, %229
  br i1 %230, label %231, label %272

231:                                              ; preds = %227
  %232 = load ptr, ptr %30, align 8, !tbaa !5
  %233 = load i64, ptr %12, align 8, !tbaa !9
  %234 = getelementptr inbounds i64, ptr %232, i64 %233
  %235 = load i64, ptr %234, align 8, !tbaa !9
  store i64 %235, ptr %13, align 8, !tbaa !9
  %236 = load ptr, ptr %32, align 8, !tbaa !5
  %237 = load i64, ptr %13, align 8, !tbaa !9
  %238 = getelementptr inbounds i64, ptr %236, i64 %237
  %239 = load i64, ptr %238, align 8, !tbaa !9
  store i64 %239, ptr %14, align 8, !tbaa !9
  %240 = icmp eq i64 %239, -1
  br i1 %240, label %241, label %258

241:                                              ; preds = %231
  %242 = load i64, ptr %13, align 8, !tbaa !9
  %243 = load ptr, ptr %36, align 8, !tbaa !5
  %244 = load i64, ptr %18, align 8, !tbaa !9
  %245 = getelementptr inbounds i64, ptr %243, i64 %244
  store i64 %242, ptr %245, align 8, !tbaa !9
  %246 = load ptr, ptr %28, align 8, !tbaa !5
  %247 = load i64, ptr %12, align 8, !tbaa !9
  %248 = getelementptr inbounds i64, ptr %246, i64 %247
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = load ptr, ptr %37, align 8, !tbaa !5
  %251 = load i64, ptr %18, align 8, !tbaa !9
  %252 = getelementptr inbounds i64, ptr %250, i64 %251
  store i64 %249, ptr %252, align 8, !tbaa !9
  %253 = load i64, ptr %18, align 8, !tbaa !9
  %254 = add nsw i64 %253, 1
  store i64 %254, ptr %18, align 8, !tbaa !9
  %255 = load ptr, ptr %32, align 8, !tbaa !5
  %256 = load i64, ptr %13, align 8, !tbaa !9
  %257 = getelementptr inbounds i64, ptr %255, i64 %256
  store i64 %253, ptr %257, align 8, !tbaa !9
  br label %268

258:                                              ; preds = %231
  %259 = load ptr, ptr %28, align 8, !tbaa !5
  %260 = load i64, ptr %12, align 8, !tbaa !9
  %261 = getelementptr inbounds i64, ptr %259, i64 %260
  %262 = load i64, ptr %261, align 8, !tbaa !9
  %263 = load ptr, ptr %37, align 8, !tbaa !5
  %264 = load i64, ptr %14, align 8, !tbaa !9
  %265 = getelementptr inbounds i64, ptr %263, i64 %264
  %266 = load i64, ptr %265, align 8, !tbaa !9
  %267 = add nsw i64 %266, %262
  store i64 %267, ptr %265, align 8, !tbaa !9
  br label %268

268:                                              ; preds = %258, %241
  br label %269

269:                                              ; preds = %268
  %270 = load i64, ptr %12, align 8, !tbaa !9
  %271 = add nsw i64 %270, 1
  store i64 %271, ptr %12, align 8, !tbaa !9
  br label %227, !llvm.loop !33

272:                                              ; preds = %227
  %273 = load i64, ptr %21, align 8, !tbaa !9
  %274 = load i64, ptr %22, align 8, !tbaa !9
  %275 = icmp ne i64 %273, %274
  br i1 %275, label %276, label %415

276:                                              ; preds = %272
  %277 = load i64, ptr %19, align 8, !tbaa !9
  %278 = icmp eq i64 %277, 1
  br i1 %278, label %279, label %289

279:                                              ; preds = %276
  %280 = load ptr, ptr %25, align 8, !tbaa !5
  %281 = load i64, ptr %22, align 8, !tbaa !9
  %282 = getelementptr inbounds i64, ptr %280, i64 %281
  %283 = load i64, ptr %282, align 8, !tbaa !9
  %284 = load ptr, ptr %34, align 8, !tbaa !5
  %285 = load i64, ptr %8, align 8, !tbaa !9
  %286 = getelementptr inbounds i64, ptr %284, i64 %285
  %287 = load i64, ptr %286, align 8, !tbaa !9
  %288 = add nsw i64 %287, %283
  store i64 %288, ptr %286, align 8, !tbaa !9
  br label %302

289:                                              ; preds = %276
  %290 = load i64, ptr %19, align 8, !tbaa !9
  %291 = load ptr, ptr %39, align 8, !tbaa !5
  %292 = load i64, ptr %22, align 8, !tbaa !9
  %293 = load i64, ptr %19, align 8, !tbaa !9
  %294 = mul nsw i64 %292, %293
  %295 = getelementptr inbounds float, ptr %291, i64 %294
  %296 = load ptr, ptr %40, align 8, !tbaa !5
  %297 = load i64, ptr %8, align 8, !tbaa !9
  %298 = load i64, ptr %19, align 8, !tbaa !9
  %299 = mul nsw i64 %297, %298
  %300 = getelementptr inbounds float, ptr %296, i64 %299
  %301 = call ptr @gk_faxpy(i64 noundef %290, float noundef 1.000000e+00, ptr noundef %295, i64 noundef 1, ptr noundef %300, i64 noundef 1)
  br label %302

302:                                              ; preds = %289, %279
  %303 = load i64, ptr %23, align 8, !tbaa !9
  %304 = icmp ne i64 %303, 0
  br i1 %304, label %305, label %315

305:                                              ; preds = %302
  %306 = load ptr, ptr %26, align 8, !tbaa !5
  %307 = load i64, ptr %22, align 8, !tbaa !9
  %308 = getelementptr inbounds i64, ptr %306, i64 %307
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = load ptr, ptr %35, align 8, !tbaa !5
  %311 = load i64, ptr %8, align 8, !tbaa !9
  %312 = getelementptr inbounds i64, ptr %310, i64 %311
  %313 = load i64, ptr %312, align 8, !tbaa !9
  %314 = add nsw i64 %313, %309
  store i64 %314, ptr %312, align 8, !tbaa !9
  br label %315

315:                                              ; preds = %305, %302
  %316 = load ptr, ptr %29, align 8, !tbaa !5
  %317 = load i64, ptr %22, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !9
  %320 = load ptr, ptr %38, align 8, !tbaa !5
  %321 = load i64, ptr %8, align 8, !tbaa !9
  %322 = getelementptr inbounds i64, ptr %320, i64 %321
  %323 = load i64, ptr %322, align 8, !tbaa !9
  %324 = add nsw i64 %323, %319
  store i64 %324, ptr %322, align 8, !tbaa !9
  %325 = load ptr, ptr %24, align 8, !tbaa !5
  %326 = load i64, ptr %22, align 8, !tbaa !9
  %327 = getelementptr inbounds i64, ptr %325, i64 %326
  %328 = load i64, ptr %327, align 8, !tbaa !9
  store i64 %328, ptr %15, align 8, !tbaa !9
  %329 = load ptr, ptr %24, align 8, !tbaa !5
  %330 = load i64, ptr %22, align 8, !tbaa !9
  %331 = add nsw i64 %330, 1
  %332 = getelementptr inbounds i64, ptr %329, i64 %331
  %333 = load i64, ptr %332, align 8, !tbaa !9
  store i64 %333, ptr %16, align 8, !tbaa !9
  %334 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %334, ptr %12, align 8, !tbaa !9
  br label %335

335:                                              ; preds = %377, %315
  %336 = load i64, ptr %12, align 8, !tbaa !9
  %337 = load i64, ptr %16, align 8, !tbaa !9
  %338 = icmp slt i64 %336, %337
  br i1 %338, label %339, label %380

339:                                              ; preds = %335
  %340 = load ptr, ptr %30, align 8, !tbaa !5
  %341 = load i64, ptr %12, align 8, !tbaa !9
  %342 = getelementptr inbounds i64, ptr %340, i64 %341
  %343 = load i64, ptr %342, align 8, !tbaa !9
  store i64 %343, ptr %13, align 8, !tbaa !9
  %344 = load ptr, ptr %32, align 8, !tbaa !5
  %345 = load i64, ptr %13, align 8, !tbaa !9
  %346 = getelementptr inbounds i64, ptr %344, i64 %345
  %347 = load i64, ptr %346, align 8, !tbaa !9
  store i64 %347, ptr %14, align 8, !tbaa !9
  %348 = icmp eq i64 %347, -1
  br i1 %348, label %349, label %366

349:                                              ; preds = %339
  %350 = load i64, ptr %13, align 8, !tbaa !9
  %351 = load ptr, ptr %36, align 8, !tbaa !5
  %352 = load i64, ptr %18, align 8, !tbaa !9
  %353 = getelementptr inbounds i64, ptr %351, i64 %352
  store i64 %350, ptr %353, align 8, !tbaa !9
  %354 = load ptr, ptr %28, align 8, !tbaa !5
  %355 = load i64, ptr %12, align 8, !tbaa !9
  %356 = getelementptr inbounds i64, ptr %354, i64 %355
  %357 = load i64, ptr %356, align 8, !tbaa !9
  %358 = load ptr, ptr %37, align 8, !tbaa !5
  %359 = load i64, ptr %18, align 8, !tbaa !9
  %360 = getelementptr inbounds i64, ptr %358, i64 %359
  store i64 %357, ptr %360, align 8, !tbaa !9
  %361 = load i64, ptr %18, align 8, !tbaa !9
  %362 = add nsw i64 %361, 1
  store i64 %362, ptr %18, align 8, !tbaa !9
  %363 = load ptr, ptr %32, align 8, !tbaa !5
  %364 = load i64, ptr %13, align 8, !tbaa !9
  %365 = getelementptr inbounds i64, ptr %363, i64 %364
  store i64 %361, ptr %365, align 8, !tbaa !9
  br label %376

366:                                              ; preds = %339
  %367 = load ptr, ptr %28, align 8, !tbaa !5
  %368 = load i64, ptr %12, align 8, !tbaa !9
  %369 = getelementptr inbounds i64, ptr %367, i64 %368
  %370 = load i64, ptr %369, align 8, !tbaa !9
  %371 = load ptr, ptr %37, align 8, !tbaa !5
  %372 = load i64, ptr %14, align 8, !tbaa !9
  %373 = getelementptr inbounds i64, ptr %371, i64 %372
  %374 = load i64, ptr %373, align 8, !tbaa !9
  %375 = add nsw i64 %374, %370
  store i64 %375, ptr %373, align 8, !tbaa !9
  br label %376

376:                                              ; preds = %366, %349
  br label %377

377:                                              ; preds = %376
  %378 = load i64, ptr %12, align 8, !tbaa !9
  %379 = add nsw i64 %378, 1
  store i64 %379, ptr %12, align 8, !tbaa !9
  br label %335, !llvm.loop !34

380:                                              ; preds = %335
  %381 = load ptr, ptr %32, align 8, !tbaa !5
  %382 = load i64, ptr %8, align 8, !tbaa !9
  %383 = getelementptr inbounds i64, ptr %381, i64 %382
  %384 = load i64, ptr %383, align 8, !tbaa !9
  store i64 %384, ptr %12, align 8, !tbaa !9
  %385 = icmp ne i64 %384, -1
  br i1 %385, label %386, label %414

386:                                              ; preds = %380
  %387 = load ptr, ptr %37, align 8, !tbaa !5
  %388 = load i64, ptr %12, align 8, !tbaa !9
  %389 = getelementptr inbounds i64, ptr %387, i64 %388
  %390 = load i64, ptr %389, align 8, !tbaa !9
  %391 = load ptr, ptr %38, align 8, !tbaa !5
  %392 = load i64, ptr %8, align 8, !tbaa !9
  %393 = getelementptr inbounds i64, ptr %391, i64 %392
  %394 = load i64, ptr %393, align 8, !tbaa !9
  %395 = sub nsw i64 %394, %390
  store i64 %395, ptr %393, align 8, !tbaa !9
  %396 = load ptr, ptr %36, align 8, !tbaa !5
  %397 = load i64, ptr %18, align 8, !tbaa !9
  %398 = add nsw i64 %397, -1
  store i64 %398, ptr %18, align 8, !tbaa !9
  %399 = getelementptr inbounds i64, ptr %396, i64 %398
  %400 = load i64, ptr %399, align 8, !tbaa !9
  %401 = load ptr, ptr %36, align 8, !tbaa !5
  %402 = load i64, ptr %12, align 8, !tbaa !9
  %403 = getelementptr inbounds i64, ptr %401, i64 %402
  store i64 %400, ptr %403, align 8, !tbaa !9
  %404 = load ptr, ptr %37, align 8, !tbaa !5
  %405 = load i64, ptr %18, align 8, !tbaa !9
  %406 = getelementptr inbounds i64, ptr %404, i64 %405
  %407 = load i64, ptr %406, align 8, !tbaa !9
  %408 = load ptr, ptr %37, align 8, !tbaa !5
  %409 = load i64, ptr %12, align 8, !tbaa !9
  %410 = getelementptr inbounds i64, ptr %408, i64 %409
  store i64 %407, ptr %410, align 8, !tbaa !9
  %411 = load ptr, ptr %32, align 8, !tbaa !5
  %412 = load i64, ptr %8, align 8, !tbaa !9
  %413 = getelementptr inbounds i64, ptr %411, i64 %412
  store i64 -1, ptr %413, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %386, %380
  br label %415

415:                                              ; preds = %414, %272
  store i64 0, ptr %12, align 8, !tbaa !9
  br label %416

416:                                              ; preds = %427, %415
  %417 = load i64, ptr %12, align 8, !tbaa !9
  %418 = load i64, ptr %18, align 8, !tbaa !9
  %419 = icmp slt i64 %417, %418
  br i1 %419, label %420, label %430

420:                                              ; preds = %416
  %421 = load ptr, ptr %32, align 8, !tbaa !5
  %422 = load ptr, ptr %36, align 8, !tbaa !5
  %423 = load i64, ptr %12, align 8, !tbaa !9
  %424 = getelementptr inbounds i64, ptr %422, i64 %423
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = getelementptr inbounds i64, ptr %421, i64 %425
  store i64 -1, ptr %426, align 8, !tbaa !9
  br label %427

427:                                              ; preds = %420
  %428 = load i64, ptr %12, align 8, !tbaa !9
  %429 = add nsw i64 %428, 1
  store i64 %429, ptr %12, align 8, !tbaa !9
  br label %416, !llvm.loop !35

430:                                              ; preds = %416
  %431 = load i64, ptr %18, align 8, !tbaa !9
  %432 = load i64, ptr %20, align 8, !tbaa !9
  %433 = add nsw i64 %432, %431
  store i64 %433, ptr %20, align 8, !tbaa !9
  %434 = load i64, ptr %20, align 8, !tbaa !9
  %435 = load ptr, ptr %33, align 8, !tbaa !5
  %436 = load i64, ptr %8, align 8, !tbaa !9
  %437 = add nsw i64 %436, 1
  store i64 %437, ptr %8, align 8, !tbaa !9
  %438 = getelementptr inbounds i64, ptr %435, i64 %437
  store i64 %434, ptr %438, align 8, !tbaa !9
  %439 = load i64, ptr %18, align 8, !tbaa !9
  %440 = load ptr, ptr %36, align 8, !tbaa !5
  %441 = getelementptr inbounds i64, ptr %440, i64 %439
  store ptr %441, ptr %36, align 8, !tbaa !5
  %442 = load i64, ptr %18, align 8, !tbaa !9
  %443 = load ptr, ptr %37, align 8, !tbaa !5
  %444 = getelementptr inbounds i64, ptr %443, i64 %442
  store ptr %444, ptr %37, align 8, !tbaa !5
  br label %445

445:                                              ; preds = %430, %169
  %446 = load i64, ptr %11, align 8, !tbaa !9
  %447 = add nsw i64 %446, 1
  store i64 %447, ptr %11, align 8, !tbaa !9
  br label %154, !llvm.loop !36

448:                                              ; preds = %154
  %449 = load i64, ptr %20, align 8, !tbaa !9
  %450 = load ptr, ptr %41, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.graphdef, ptr %450, i32 0, i32 1
  store i64 %449, ptr %451, align 8, !tbaa !37
  %452 = load ptr, ptr %7, align 8, !tbaa !5
  %453 = load ptr, ptr %41, align 8, !tbaa !5
  %454 = load i64, ptr %23, align 8, !tbaa !9
  call void @libmetis__ReAdjustMemory(ptr noundef %452, ptr noundef %453, i64 noundef %454)
  %455 = load ptr, ptr %6, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.controldef, ptr %455, i32 0, i32 1
  %457 = load i64, ptr %456, align 8, !tbaa !16
  %458 = and i64 %457, 1
  %459 = icmp ne i64 %458, 0
  br i1 %459, label %460, label %466

460:                                              ; preds = %448
  %461 = call double @gk_CPUSeconds()
  %462 = load ptr, ptr %6, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.controldef, ptr %462, i32 0, i32 15
  %464 = load double, ptr %463, align 8, !tbaa !17
  %465 = fadd double %464, %461
  store double %465, ptr %463, align 8, !tbaa !17
  br label %466

466:                                              ; preds = %460, %448
  %467 = load ptr, ptr %6, align 8, !tbaa !5
  %468 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %467, i64 noundef %468)
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  ret void
}

declare double @gk_CPUSeconds() #2

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 56}
!12 = !{!"controldef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !13, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !14, i64 88, !15, i64 152, !15, i64 160, !15, i64 168, !15, i64 176, !15, i64 184, !15, i64 192, !15, i64 200, !15, i64 208, !15, i64 216, !15, i64 224, !15, i64 232, !15, i64 240, !15, i64 248, !15, i64 256, !15, i64 264, !15, i64 272}
!13 = !{!"float", !7, i64 0}
!14 = !{!"workspacedef", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56}
!15 = !{!"double", !7, i64 0}
!16 = !{!12, !10, i64 8}
!17 = !{!12, !15, i64 176}
!18 = !{!19, !10, i64 0}
!19 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !20, i64 56, !20, i64 60, !20, i64 64, !20, i64 68, !20, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !10, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!20 = !{!"int", !7, i64 0}
!21 = !{!19, !10, i64 208}
!22 = !{!19, !6, i64 16}
!23 = !{!19, !6, i64 24}
!24 = !{!19, !6, i64 32}
!25 = !{!19, !6, i64 216}
!26 = !{!19, !6, i64 40}
!27 = !{!19, !6, i64 48}
!28 = !{!19, !6, i64 88}
!29 = !{!19, !6, i64 104}
!30 = !{!12, !6, i64 136}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = !{!19, !10, i64 8}


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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__CreateCoarseGraphNoMask(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4) local_unnamed_addr #0 {
  %6 = getelementptr inbounds i8, ptr %0, i64 56
  %7 = load i64, ptr %6, align 8, !tbaa !5
  %8 = icmp eq i64 %7, 6
  %9 = zext i1 %8 to i64
  %10 = getelementptr inbounds i8, ptr %0, i64 8
  %11 = load i64, ptr %10, align 8, !tbaa !14
  %12 = and i64 %11, 1
  %.not = icmp eq i64 %12, 0
  br i1 %.not, label %18, label %13

13:                                               ; preds = %5
  %14 = tail call double @gk_CPUSeconds() #3
  %15 = getelementptr inbounds i8, ptr %0, i64 176
  %16 = load double, ptr %15, align 8, !tbaa !15
  %17 = fsub double %16, %14
  store double %17, ptr %15, align 8, !tbaa !15
  br label %18

18:                                               ; preds = %13, %5
  %19 = load i64, ptr %1, align 8, !tbaa !16
  %20 = getelementptr inbounds i8, ptr %1, i64 208
  %21 = load i64, ptr %20, align 8, !tbaa !19
  %22 = getelementptr inbounds i8, ptr %1, i64 16
  %23 = load ptr, ptr %22, align 8, !tbaa !20
  %24 = getelementptr inbounds i8, ptr %1, i64 24
  %25 = load ptr, ptr %24, align 8, !tbaa !21
  %26 = getelementptr inbounds i8, ptr %1, i64 32
  %27 = load ptr, ptr %26, align 8, !tbaa !22
  %28 = getelementptr inbounds i8, ptr %1, i64 216
  %29 = load ptr, ptr %28, align 8, !tbaa !23
  %30 = getelementptr inbounds i8, ptr %1, i64 40
  %31 = load ptr, ptr %30, align 8, !tbaa !24
  %32 = getelementptr inbounds i8, ptr %1, i64 48
  %33 = load ptr, ptr %32, align 8, !tbaa !25
  %34 = getelementptr inbounds i8, ptr %1, i64 88
  %35 = load ptr, ptr %34, align 8, !tbaa !26
  %36 = getelementptr inbounds i8, ptr %1, i64 104
  %37 = load ptr, ptr %36, align 8, !tbaa !27
  %38 = tail call ptr @libmetis__SetUpCoarseGraph(ptr noundef nonnull %1, i64 noundef %2, i64 noundef %9)
  %39 = getelementptr inbounds i8, ptr %38, i64 16
  %40 = load ptr, ptr %39, align 8, !tbaa !20
  %41 = getelementptr inbounds i8, ptr %38, i64 24
  %42 = load ptr, ptr %41, align 8, !tbaa !21
  %43 = getelementptr inbounds i8, ptr %38, i64 32
  %44 = load ptr, ptr %43, align 8, !tbaa !22
  %45 = getelementptr inbounds i8, ptr %38, i64 216
  %46 = load ptr, ptr %45, align 8, !tbaa !23
  %47 = getelementptr inbounds i8, ptr %38, i64 88
  %48 = load ptr, ptr %47, align 8, !tbaa !26
  %49 = getelementptr inbounds i8, ptr %38, i64 40
  %50 = load ptr, ptr %49, align 8, !tbaa !24
  %51 = getelementptr inbounds i8, ptr %38, i64 48
  %52 = load ptr, ptr %51, align 8, !tbaa !25
  %53 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef nonnull %0, i64 noundef %2) #3
  %54 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef -1, ptr noundef %53) #3
  %55 = getelementptr inbounds i64, ptr %23, i64 %19
  %56 = load i64, ptr %55, align 8, !tbaa !28
  %57 = getelementptr inbounds i8, ptr %0, i64 136
  %58 = load ptr, ptr %57, align 8, !tbaa !29
  %59 = shl i64 %56, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %58, ptr align 8 %31, i64 %59, i1 false)
  %60 = icmp sgt i64 %56, 0
  br i1 %60, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %18
  %xtraiter = and i64 %56, 3
  %61 = icmp ult i64 %56, 4
  br i1 %61, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0186209 = phi i64 [ 0, %.lr.ph.preheader.new ], [ %81, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %62 = getelementptr inbounds i64, ptr %58, i64 %.0186209
  %63 = load i64, ptr %62, align 8, !tbaa !28
  %64 = getelementptr inbounds i64, ptr %37, i64 %63
  %65 = load i64, ptr %64, align 8, !tbaa !28
  store i64 %65, ptr %62, align 8, !tbaa !28
  %66 = or disjoint i64 %.0186209, 1
  %67 = getelementptr inbounds i64, ptr %58, i64 %66
  %68 = load i64, ptr %67, align 8, !tbaa !28
  %69 = getelementptr inbounds i64, ptr %37, i64 %68
  %70 = load i64, ptr %69, align 8, !tbaa !28
  store i64 %70, ptr %67, align 8, !tbaa !28
  %71 = or disjoint i64 %.0186209, 2
  %72 = getelementptr inbounds i64, ptr %58, i64 %71
  %73 = load i64, ptr %72, align 8, !tbaa !28
  %74 = getelementptr inbounds i64, ptr %37, i64 %73
  %75 = load i64, ptr %74, align 8, !tbaa !28
  store i64 %75, ptr %72, align 8, !tbaa !28
  %76 = or disjoint i64 %.0186209, 3
  %77 = getelementptr inbounds i64, ptr %58, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !28
  %79 = getelementptr inbounds i64, ptr %37, i64 %78
  %80 = load i64, ptr %79, align 8, !tbaa !28
  store i64 %80, ptr %77, align 8, !tbaa !28
  %81 = add nuw nsw i64 %.0186209, 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_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !30

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %.0186209.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %81, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %.0186209.epil = phi i64 [ %86, %.lr.ph.epil ], [ %.0186209.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %82 = getelementptr inbounds i64, ptr %58, i64 %.0186209.epil
  %83 = load i64, ptr %82, align 8, !tbaa !28
  %84 = getelementptr inbounds i64, ptr %37, i64 %83
  %85 = load i64, ptr %84, align 8, !tbaa !28
  store i64 %85, ptr %82, align 8, !tbaa !28
  %86 = add nuw nsw i64 %.0186209.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_edge, label %.lr.ph.epil, !llvm.loop !32

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %18
  store i64 0, ptr %40, align 8, !tbaa !28
  %87 = icmp sgt i64 %19, 0
  br i1 %87, label %.lr.ph231, label %._crit_edge232

.lr.ph231:                                        ; preds = %._crit_edge
  %88 = icmp eq i64 %21, 1
  %89 = shl i64 %21, 2
  br label %90

90:                                               ; preds = %.lr.ph231, %230
  %.0229 = phi i64 [ 0, %.lr.ph231 ], [ %.1, %230 ]
  %.1187228 = phi i64 [ 0, %.lr.ph231 ], [ %231, %230 ]
  %.0190227 = phi ptr [ %52, %.lr.ph231 ], [ %.1191, %230 ]
  %.0192226 = phi ptr [ %50, %.lr.ph231 ], [ %.1193, %230 ]
  %.0197225 = phi i64 [ 0, %.lr.ph231 ], [ %.1198, %230 ]
  %91 = getelementptr inbounds i64, ptr %4, i64 %.1187228
  %92 = load i64, ptr %91, align 8, !tbaa !28
  %93 = getelementptr inbounds i64, ptr %37, i64 %92
  %94 = load i64, ptr %93, align 8, !tbaa !28
  %.not206 = icmp eq i64 %94, %.0229
  br i1 %.not206, label %95, label %230

95:                                               ; preds = %90
  %96 = getelementptr inbounds i64, ptr %3, i64 %92
  %97 = load i64, ptr %96, align 8, !tbaa !28
  br i1 %88, label %98, label %102

98:                                               ; preds = %95
  %99 = getelementptr inbounds i64, ptr %25, i64 %92
  %100 = load i64, ptr %99, align 8, !tbaa !28
  %101 = getelementptr inbounds i64, ptr %42, i64 %.0229
  store i64 %100, ptr %101, align 8, !tbaa !28
  br label %107

102:                                              ; preds = %95
  %103 = mul nsw i64 %.0229, %21
  %104 = getelementptr inbounds float, ptr %46, i64 %103
  %105 = mul nsw i64 %92, %21
  %106 = getelementptr inbounds float, ptr %29, i64 %105
  tail call void @llvm.memmove.p0.p0.i64(ptr align 1 %104, ptr align 1 %106, i64 %89, i1 false)
  br label %107

107:                                              ; preds = %102, %98
  br i1 %8, label %108, label %112

108:                                              ; preds = %107
  %109 = getelementptr inbounds i64, ptr %27, i64 %92
  %110 = load i64, ptr %109, align 8, !tbaa !28
  %111 = getelementptr inbounds i64, ptr %44, i64 %.0229
  store i64 %110, ptr %111, align 8, !tbaa !28
  br label %112

112:                                              ; preds = %108, %107
  %113 = getelementptr inbounds i64, ptr %35, i64 %92
  %114 = load i64, ptr %113, align 8, !tbaa !28
  %115 = getelementptr inbounds i64, ptr %48, i64 %.0229
  store i64 %114, ptr %115, align 8, !tbaa !28
  %116 = getelementptr inbounds i64, ptr %23, i64 %92
  %117 = load i64, ptr %116, align 8, !tbaa !28
  %118 = getelementptr i8, ptr %116, i64 8
  %119 = load i64, ptr %118, align 8, !tbaa !28
  %120 = icmp slt i64 %117, %119
  br i1 %120, label %.lr.ph213, label %._crit_edge214

.lr.ph213:                                        ; preds = %112, %138
  %.0188211 = phi i64 [ %139, %138 ], [ %117, %112 ]
  %.0194210 = phi i64 [ %.1195, %138 ], [ 0, %112 ]
  %121 = getelementptr inbounds i64, ptr %58, i64 %.0188211
  %122 = load i64, ptr %121, align 8, !tbaa !28
  %123 = getelementptr inbounds i64, ptr %54, i64 %122
  %124 = load i64, ptr %123, align 8, !tbaa !28
  %125 = icmp eq i64 %124, -1
  br i1 %125, label %126, label %132

126:                                              ; preds = %.lr.ph213
  %127 = getelementptr inbounds i64, ptr %.0192226, i64 %.0194210
  store i64 %122, ptr %127, align 8, !tbaa !28
  %128 = getelementptr inbounds i64, ptr %33, i64 %.0188211
  %129 = load i64, ptr %128, align 8, !tbaa !28
  %130 = getelementptr inbounds i64, ptr %.0190227, i64 %.0194210
  store i64 %129, ptr %130, align 8, !tbaa !28
  %131 = add nsw i64 %.0194210, 1
  store i64 %.0194210, ptr %123, align 8, !tbaa !28
  br label %138

132:                                              ; preds = %.lr.ph213
  %133 = getelementptr inbounds i64, ptr %33, i64 %.0188211
  %134 = load i64, ptr %133, align 8, !tbaa !28
  %135 = getelementptr inbounds i64, ptr %.0190227, i64 %124
  %136 = load i64, ptr %135, align 8, !tbaa !28
  %137 = add nsw i64 %136, %134
  store i64 %137, ptr %135, align 8, !tbaa !28
  br label %138

138:                                              ; preds = %126, %132
  %.1195 = phi i64 [ %131, %126 ], [ %.0194210, %132 ]
  %139 = add nsw i64 %.0188211, 1
  %exitcond235.not = icmp eq i64 %139, %119
  br i1 %exitcond235.not, label %._crit_edge214, label %.lr.ph213, !llvm.loop !34

._crit_edge214:                                   ; preds = %138, %112
  %.0194.lcssa = phi i64 [ 0, %112 ], [ %.1195, %138 ]
  %.not207 = icmp eq i64 %92, %97
  br i1 %.not207, label %202, label %140

140:                                              ; preds = %._crit_edge214
  br i1 %88, label %141, label %147

141:                                              ; preds = %140
  %142 = getelementptr inbounds i64, ptr %25, i64 %97
  %143 = load i64, ptr %142, align 8, !tbaa !28
  %144 = getelementptr inbounds i64, ptr %42, i64 %.0229
  %145 = load i64, ptr %144, align 8, !tbaa !28
  %146 = add nsw i64 %145, %143
  store i64 %146, ptr %144, align 8, !tbaa !28
  br label %153

147:                                              ; preds = %140
  %148 = mul nsw i64 %97, %21
  %149 = getelementptr inbounds float, ptr %29, i64 %148
  %150 = mul nsw i64 %.0229, %21
  %151 = getelementptr inbounds float, ptr %46, i64 %150
  %152 = tail call ptr @gk_faxpy(i64 noundef %21, float noundef 1.000000e+00, ptr noundef %149, i64 noundef 1, ptr noundef %151, i64 noundef 1) #3
  br label %153

153:                                              ; preds = %147, %141
  br i1 %8, label %154, label %160

154:                                              ; preds = %153
  %155 = getelementptr inbounds i64, ptr %27, i64 %97
  %156 = load i64, ptr %155, align 8, !tbaa !28
  %157 = getelementptr inbounds i64, ptr %44, i64 %.0229
  %158 = load i64, ptr %157, align 8, !tbaa !28
  %159 = add nsw i64 %158, %156
  store i64 %159, ptr %157, align 8, !tbaa !28
  br label %160

160:                                              ; preds = %154, %153
  %161 = getelementptr inbounds i64, ptr %35, i64 %97
  %162 = load i64, ptr %161, align 8, !tbaa !28
  %163 = load i64, ptr %115, align 8, !tbaa !28
  %164 = add nsw i64 %163, %162
  store i64 %164, ptr %115, align 8, !tbaa !28
  %165 = getelementptr inbounds i64, ptr %23, i64 %97
  %166 = load i64, ptr %165, align 8, !tbaa !28
  %167 = getelementptr i8, ptr %165, i64 8
  %168 = load i64, ptr %167, align 8, !tbaa !28
  %169 = icmp slt i64 %166, %168
  br i1 %169, label %.lr.ph218, label %._crit_edge219

.lr.ph218:                                        ; preds = %160, %187
  %.1189216 = phi i64 [ %188, %187 ], [ %166, %160 ]
  %.2196215 = phi i64 [ %.3, %187 ], [ %.0194.lcssa, %160 ]
  %170 = getelementptr inbounds i64, ptr %58, i64 %.1189216
  %171 = load i64, ptr %170, align 8, !tbaa !28
  %172 = getelementptr inbounds i64, ptr %54, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !28
  %174 = icmp eq i64 %173, -1
  br i1 %174, label %175, label %181

175:                                              ; preds = %.lr.ph218
  %176 = getelementptr inbounds i64, ptr %.0192226, i64 %.2196215
  store i64 %171, ptr %176, align 8, !tbaa !28
  %177 = getelementptr inbounds i64, ptr %33, i64 %.1189216
  %178 = load i64, ptr %177, align 8, !tbaa !28
  %179 = getelementptr inbounds i64, ptr %.0190227, i64 %.2196215
  store i64 %178, ptr %179, align 8, !tbaa !28
  %180 = add nsw i64 %.2196215, 1
  store i64 %.2196215, ptr %172, align 8, !tbaa !28
  br label %187

181:                                              ; preds = %.lr.ph218
  %182 = getelementptr inbounds i64, ptr %33, i64 %.1189216
  %183 = load i64, ptr %182, align 8, !tbaa !28
  %184 = getelementptr inbounds i64, ptr %.0190227, i64 %173
  %185 = load i64, ptr %184, align 8, !tbaa !28
  %186 = add nsw i64 %185, %183
  store i64 %186, ptr %184, align 8, !tbaa !28
  br label %187

187:                                              ; preds = %175, %181
  %.3 = phi i64 [ %180, %175 ], [ %.2196215, %181 ]
  %188 = add nsw i64 %.1189216, 1
  %exitcond236.not = icmp eq i64 %188, %168
  br i1 %exitcond236.not, label %._crit_edge219, label %.lr.ph218, !llvm.loop !35

._crit_edge219:                                   ; preds = %187, %160
  %.2196.lcssa = phi i64 [ %.0194.lcssa, %160 ], [ %.3, %187 ]
  %189 = getelementptr inbounds i64, ptr %54, i64 %.0229
  %190 = load i64, ptr %189, align 8, !tbaa !28
  %.not208 = icmp eq i64 %190, -1
  br i1 %.not208, label %202, label %191

191:                                              ; preds = %._crit_edge219
  %192 = getelementptr inbounds i64, ptr %.0190227, i64 %190
  %193 = load i64, ptr %192, align 8, !tbaa !28
  %194 = load i64, ptr %115, align 8, !tbaa !28
  %195 = sub nsw i64 %194, %193
  store i64 %195, ptr %115, align 8, !tbaa !28
  %196 = add nsw i64 %.2196.lcssa, -1
  %197 = getelementptr inbounds i64, ptr %.0192226, i64 %196
  %198 = load i64, ptr %197, align 8, !tbaa !28
  %199 = getelementptr inbounds i64, ptr %.0192226, i64 %190
  store i64 %198, ptr %199, align 8, !tbaa !28
  %200 = getelementptr inbounds i64, ptr %.0190227, i64 %196
  %201 = load i64, ptr %200, align 8, !tbaa !28
  store i64 %201, ptr %192, align 8, !tbaa !28
  store i64 -1, ptr %189, align 8, !tbaa !28
  br label %202

202:                                              ; preds = %._crit_edge219, %191, %._crit_edge214
  %.4 = phi i64 [ %196, %191 ], [ %.2196.lcssa, %._crit_edge219 ], [ %.0194.lcssa, %._crit_edge214 ]
  %203 = icmp sgt i64 %.4, 0
  br i1 %203, label %.lr.ph223.preheader, label %._crit_edge224

.lr.ph223.preheader:                              ; preds = %202
  %xtraiter239 = and i64 %.4, 3
  %204 = icmp ult i64 %.4, 4
  br i1 %204, label %._crit_edge224.loopexit.unr-lcssa, label %.lr.ph223.preheader.new

.lr.ph223.preheader.new:                          ; preds = %.lr.ph223.preheader
  %unroll_iter242 = and i64 %.4, 9223372036854775804
  br label %.lr.ph223

.lr.ph223:                                        ; preds = %.lr.ph223, %.lr.ph223.preheader.new
  %.2221 = phi i64 [ 0, %.lr.ph223.preheader.new ], [ %220, %.lr.ph223 ]
  %niter243 = phi i64 [ 0, %.lr.ph223.preheader.new ], [ %niter243.next.3, %.lr.ph223 ]
  %205 = getelementptr inbounds i64, ptr %.0192226, i64 %.2221
  %206 = load i64, ptr %205, align 8, !tbaa !28
  %207 = getelementptr inbounds i64, ptr %54, i64 %206
  store i64 -1, ptr %207, align 8, !tbaa !28
  %208 = or disjoint i64 %.2221, 1
  %209 = getelementptr inbounds i64, ptr %.0192226, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !28
  %211 = getelementptr inbounds i64, ptr %54, i64 %210
  store i64 -1, ptr %211, align 8, !tbaa !28
  %212 = or disjoint i64 %.2221, 2
  %213 = getelementptr inbounds i64, ptr %.0192226, i64 %212
  %214 = load i64, ptr %213, align 8, !tbaa !28
  %215 = getelementptr inbounds i64, ptr %54, i64 %214
  store i64 -1, ptr %215, align 8, !tbaa !28
  %216 = or disjoint i64 %.2221, 3
  %217 = getelementptr inbounds i64, ptr %.0192226, i64 %216
  %218 = load i64, ptr %217, align 8, !tbaa !28
  %219 = getelementptr inbounds i64, ptr %54, i64 %218
  store i64 -1, ptr %219, align 8, !tbaa !28
  %220 = add nuw nsw i64 %.2221, 4
  %niter243.next.3 = add i64 %niter243, 4
  %niter243.ncmp.3 = icmp eq i64 %niter243.next.3, %unroll_iter242
  br i1 %niter243.ncmp.3, label %._crit_edge224.loopexit.unr-lcssa, label %.lr.ph223, !llvm.loop !36

._crit_edge224.loopexit.unr-lcssa:                ; preds = %.lr.ph223, %.lr.ph223.preheader
  %.2221.unr = phi i64 [ 0, %.lr.ph223.preheader ], [ %220, %.lr.ph223 ]
  %lcmp.mod241.not = icmp eq i64 %xtraiter239, 0
  br i1 %lcmp.mod241.not, label %._crit_edge224, label %.lr.ph223.epil

.lr.ph223.epil:                                   ; preds = %._crit_edge224.loopexit.unr-lcssa, %.lr.ph223.epil
  %.2221.epil = phi i64 [ %224, %.lr.ph223.epil ], [ %.2221.unr, %._crit_edge224.loopexit.unr-lcssa ]
  %epil.iter240 = phi i64 [ %epil.iter240.next, %.lr.ph223.epil ], [ 0, %._crit_edge224.loopexit.unr-lcssa ]
  %221 = getelementptr inbounds i64, ptr %.0192226, i64 %.2221.epil
  %222 = load i64, ptr %221, align 8, !tbaa !28
  %223 = getelementptr inbounds i64, ptr %54, i64 %222
  store i64 -1, ptr %223, align 8, !tbaa !28
  %224 = add nuw nsw i64 %.2221.epil, 1
  %epil.iter240.next = add i64 %epil.iter240, 1
  %epil.iter240.cmp.not = icmp eq i64 %epil.iter240.next, %xtraiter239
  br i1 %epil.iter240.cmp.not, label %._crit_edge224, label %.lr.ph223.epil, !llvm.loop !37

._crit_edge224:                                   ; preds = %._crit_edge224.loopexit.unr-lcssa, %.lr.ph223.epil, %202
  %225 = add nsw i64 %.4, %.0197225
  %226 = add nsw i64 %.0229, 1
  %227 = getelementptr inbounds i64, ptr %40, i64 %226
  store i64 %225, ptr %227, align 8, !tbaa !28
  %228 = getelementptr inbounds i64, ptr %.0192226, i64 %.4
  %229 = getelementptr inbounds i64, ptr %.0190227, i64 %.4
  br label %230

230:                                              ; preds = %90, %._crit_edge224
  %.1198 = phi i64 [ %.0197225, %90 ], [ %225, %._crit_edge224 ]
  %.1193 = phi ptr [ %.0192226, %90 ], [ %228, %._crit_edge224 ]
  %.1191 = phi ptr [ %.0190227, %90 ], [ %229, %._crit_edge224 ]
  %.1 = phi i64 [ %.0229, %90 ], [ %226, %._crit_edge224 ]
  %231 = add nuw nsw i64 %.1187228, 1
  %exitcond238.not = icmp eq i64 %231, %19
  br i1 %exitcond238.not, label %._crit_edge232, label %90, !llvm.loop !38

._crit_edge232:                                   ; preds = %230, %._crit_edge
  %.0197.lcssa = phi i64 [ 0, %._crit_edge ], [ %.1198, %230 ]
  %.0.lcssa = phi i64 [ 0, %._crit_edge ], [ %.1, %230 ]
  %232 = getelementptr inbounds i8, ptr %38, i64 8
  store i64 %.0197.lcssa, ptr %232, align 8, !tbaa !39
  tail call void @libmetis__ReAdjustMemory(ptr noundef nonnull %1, ptr noundef %38, i64 noundef %9)
  %233 = load i64, ptr %10, align 8, !tbaa !14
  %234 = and i64 %233, 1
  %.not205 = icmp eq i64 %234, 0
  br i1 %.not205, label %240, label %235

235:                                              ; preds = %._crit_edge232
  %236 = tail call double @gk_CPUSeconds() #3
  %237 = getelementptr inbounds i8, ptr %0, i64 176
  %238 = load double, ptr %237, align 8, !tbaa !15
  %239 = fadd double %236, %238
  store double %239, ptr %237, align 8, !tbaa !15
  br label %240

240:                                              ; preds = %235, %._crit_edge232
  tail call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %.0.lcssa) #3
  ret void
}

declare double @gk_CPUSeconds() local_unnamed_addr #1

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

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

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 56}
!6 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !11, i64 88, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !13, i64 208, !13, i64 216, !13, i64 224, !13, i64 232, !13, i64 240, !13, i64 248, !13, i64 256, !13, i64 264, !13, i64 272}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"workspacedef", !12, i64 0, !7, i64 8, !7, i64 16, !12, i64 24, !12, i64 32, !7, i64 40, !12, i64 48, !12, i64 56}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"double", !8, i64 0}
!14 = !{!6, !7, i64 8}
!15 = !{!6, !13, i64 176}
!16 = !{!17, !7, i64 0}
!17 = !{!"graphdef", !7, i64 0, !7, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !18, i64 56, !18, i64 60, !18, i64 64, !18, i64 68, !18, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !7, i64 112, !7, i64 120, !12, i64 128, !12, i64 136, !7, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !7, i64 208, !12, i64 216, !12, i64 224, !12, i64 232, !12, i64 240}
!18 = !{!"int", !8, i64 0}
!19 = !{!17, !7, i64 208}
!20 = !{!17, !12, i64 16}
!21 = !{!17, !12, i64 24}
!22 = !{!17, !12, i64 32}
!23 = !{!17, !12, i64 216}
!24 = !{!17, !12, i64 40}
!25 = !{!17, !12, i64 48}
!26 = !{!17, !12, i64 88}
!27 = !{!17, !12, i64 104}
!28 = !{!7, !7, i64 0}
!29 = !{!6, !12, i64 136}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.unroll.disable"}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !33}
!38 = distinct !{!38, !31}
!39 = !{!17, !7, i64 8}


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