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

; 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

declare double @gk_CPUSeconds() #1

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__CreateCoarseGraph_NVW(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4) #2 {
  %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 i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, 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
  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
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.controldef, ptr %41, i32 0, i32 1
  %43 = load i64, ptr %42, align 8, !tbaa !11
  %44 = and i64 %43, 1
  %45 = icmp ne i64 %44, 0
  br i1 %45, label %46, label %52

46:                                               ; preds = %5
  %47 = call double @gk_CPUSeconds()
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.controldef, ptr %48, i32 0, i32 15
  %50 = load double, ptr %49, align 8, !tbaa !16
  %51 = fsub double %50, %47
  store double %51, ptr %49, align 8, !tbaa !16
  br label %52

52:                                               ; preds = %46, %5
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graphdef, ptr %53, i32 0, i32 0
  %55 = load i64, ptr %54, align 8, !tbaa !17
  store i64 %55, ptr %20, align 8, !tbaa !9
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graphdef, ptr %56, i32 0, i32 28
  %58 = load i64, ptr %57, align 8, !tbaa !20
  store i64 %58, ptr %22, align 8, !tbaa !9
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graphdef, ptr %59, i32 0, i32 2
  %61 = load ptr, ptr %60, align 8, !tbaa !21
  store ptr %61, ptr %27, align 8, !tbaa !5
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graphdef, ptr %62, i32 0, i32 29
  %64 = load ptr, ptr %63, align 8, !tbaa !22
  store ptr %64, ptr %38, align 8, !tbaa !5
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.graphdef, ptr %65, i32 0, i32 5
  %67 = load ptr, ptr %66, align 8, !tbaa !23
  store ptr %67, ptr %28, align 8, !tbaa !5
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.graphdef, ptr %68, i32 0, i32 13
  %70 = load ptr, ptr %69, align 8, !tbaa !24
  store ptr %70, ptr %29, align 8, !tbaa !5
  %71 = load ptr, ptr %7, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.graphdef, ptr %71, i32 0, i32 15
  %73 = load ptr, ptr %72, align 8, !tbaa !25
  store ptr %73, ptr %31, align 8, !tbaa !5
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = load i64, ptr %8, align 8, !tbaa !9
  %76 = call ptr @libmetis__SetUpCoarseGraph(ptr noundef %74, i64 noundef %75, i64 noundef 0)
  store ptr %76, ptr %40, align 8, !tbaa !5
  %77 = load ptr, ptr %40, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.graphdef, ptr %77, i32 0, i32 2
  %79 = load ptr, ptr %78, align 8, !tbaa !21
  store ptr %79, ptr %33, align 8, !tbaa !5
  %80 = load ptr, ptr %40, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.graphdef, ptr %80, i32 0, i32 3
  %82 = load ptr, ptr %81, align 8, !tbaa !26
  store ptr %82, ptr %34, align 8, !tbaa !5
  %83 = load ptr, ptr %40, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.graphdef, ptr %83, i32 0, i32 29
  %85 = load ptr, ptr %84, align 8, !tbaa !22
  store ptr %85, ptr %39, align 8, !tbaa !5
  %86 = load ptr, ptr %40, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.graphdef, ptr %86, i32 0, i32 13
  %88 = load ptr, ptr %87, align 8, !tbaa !24
  store ptr %88, ptr %37, align 8, !tbaa !5
  %89 = load ptr, ptr %40, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.graphdef, ptr %89, i32 0, i32 5
  %91 = load ptr, ptr %90, align 8, !tbaa !23
  store ptr %91, ptr %35, align 8, !tbaa !5
  %92 = load ptr, ptr %40, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.graphdef, ptr %92, i32 0, i32 6
  %94 = load ptr, ptr %93, align 8, !tbaa !27
  store ptr %94, ptr %36, align 8, !tbaa !5
  %95 = load ptr, ptr %27, align 8, !tbaa !5
  %96 = load i64, ptr %20, align 8, !tbaa !9
  %97 = getelementptr inbounds i64, ptr %95, i64 %96
  %98 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %98, ptr %19, align 8, !tbaa !9
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.controldef, ptr %99, i32 0, i32 11
  %101 = getelementptr inbounds %struct.workspacedef, ptr %100, i32 0, i32 6
  %102 = load ptr, ptr %101, align 8, !tbaa !28
  store ptr %102, ptr %30, align 8, !tbaa !5
  %103 = load ptr, ptr %30, align 8, !tbaa !5
  %104 = load ptr, ptr %28, align 8, !tbaa !5
  %105 = load i64, ptr %19, align 8, !tbaa !9
  %106 = mul i64 %105, 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %103, ptr align 8 %104, i64 %106, i1 false)
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %107

107:                                              ; preds = %122, %52
  %108 = load i64, ptr %11, align 8, !tbaa !9
  %109 = load i64, ptr %19, align 8, !tbaa !9
  %110 = icmp slt i64 %108, %109
  br i1 %110, label %111, label %125

111:                                              ; preds = %107
  %112 = load ptr, ptr %31, align 8, !tbaa !5
  %113 = load ptr, ptr %30, align 8, !tbaa !5
  %114 = load i64, ptr %11, align 8, !tbaa !9
  %115 = getelementptr inbounds i64, ptr %113, i64 %114
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = getelementptr inbounds i64, ptr %112, i64 %116
  %118 = load i64, ptr %117, align 8, !tbaa !9
  %119 = load ptr, ptr %30, align 8, !tbaa !5
  %120 = load i64, ptr %11, align 8, !tbaa !9
  %121 = getelementptr inbounds i64, ptr %119, i64 %120
  store i64 %118, ptr %121, align 8, !tbaa !9
  br label %122

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

125:                                              ; preds = %107
  store i64 2047, ptr %26, align 8, !tbaa !9
  %126 = load i64, ptr %26, align 8, !tbaa !9
  %127 = add nsw i64 %126, 1
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  %129 = load i64, ptr %26, align 8, !tbaa !9
  %130 = add nsw i64 %129, 1
  %131 = call ptr @libmetis__idxwspacemalloc(ptr noundef %128, i64 noundef %130)
  %132 = call ptr @libmetis__idxset(i64 noundef %127, i64 noundef -1, ptr noundef %131)
  store ptr %132, ptr %32, align 8, !tbaa !5
  store i64 0, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %8, align 8, !tbaa !9
  %133 = load ptr, ptr %33, align 8, !tbaa !5
  %134 = getelementptr inbounds i64, ptr %133, i64 0
  store i64 0, ptr %134, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %135

135:                                              ; preds = %480, %125
  %136 = load i64, ptr %11, align 8, !tbaa !9
  %137 = load i64, ptr %20, align 8, !tbaa !9
  %138 = icmp slt i64 %136, %137
  br i1 %138, label %139, label %483

139:                                              ; preds = %135
  %140 = load ptr, ptr %10, align 8, !tbaa !5
  %141 = load i64, ptr %11, align 8, !tbaa !9
  %142 = getelementptr inbounds i64, ptr %140, i64 %141
  %143 = load i64, ptr %142, align 8, !tbaa !9
  store i64 %143, ptr %24, align 8, !tbaa !9
  %144 = load ptr, ptr %31, align 8, !tbaa !5
  %145 = load i64, ptr %24, align 8, !tbaa !9
  %146 = getelementptr inbounds i64, ptr %144, i64 %145
  %147 = load i64, ptr %146, align 8, !tbaa !9
  %148 = load i64, ptr %8, align 8, !tbaa !9
  %149 = icmp ne i64 %147, %148
  br i1 %149, label %150, label %151

150:                                              ; preds = %139
  br label %480

151:                                              ; preds = %139
  %152 = load ptr, ptr %9, align 8, !tbaa !5
  %153 = load i64, ptr %24, align 8, !tbaa !9
  %154 = getelementptr inbounds i64, ptr %152, i64 %153
  %155 = load i64, ptr %154, align 8, !tbaa !9
  store i64 %155, ptr %25, align 8, !tbaa !9
  %156 = load ptr, ptr %34, align 8, !tbaa !5
  %157 = load i64, ptr %8, align 8, !tbaa !9
  %158 = getelementptr inbounds i64, ptr %156, i64 %157
  store i64 1, ptr %158, align 8, !tbaa !9
  %159 = load ptr, ptr %29, align 8, !tbaa !5
  %160 = load i64, ptr %24, align 8, !tbaa !9
  %161 = getelementptr inbounds i64, ptr %159, i64 %160
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = load ptr, ptr %37, align 8, !tbaa !5
  %164 = load i64, ptr %8, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  store i64 %162, ptr %165, align 8, !tbaa !9
  store i64 0, ptr %21, align 8, !tbaa !9
  %166 = load ptr, ptr %27, align 8, !tbaa !5
  %167 = load i64, ptr %24, align 8, !tbaa !9
  %168 = getelementptr inbounds i64, ptr %166, i64 %167
  %169 = load i64, ptr %168, align 8, !tbaa !9
  store i64 %169, ptr %18, align 8, !tbaa !9
  %170 = load ptr, ptr %27, align 8, !tbaa !5
  %171 = load i64, ptr %24, align 8, !tbaa !9
  %172 = add nsw i64 %171, 1
  %173 = getelementptr inbounds i64, ptr %170, i64 %172
  %174 = load i64, ptr %173, align 8, !tbaa !9
  store i64 %174, ptr %19, align 8, !tbaa !9
  %175 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %175, ptr %12, align 8, !tbaa !9
  br label %176

176:                                              ; preds = %257, %151
  %177 = load i64, ptr %12, align 8, !tbaa !9
  %178 = load i64, ptr %19, align 8, !tbaa !9
  %179 = icmp slt i64 %177, %178
  br i1 %179, label %180, label %260

180:                                              ; preds = %176
  %181 = load ptr, ptr %30, align 8, !tbaa !5
  %182 = load i64, ptr %12, align 8, !tbaa !9
  %183 = getelementptr inbounds i64, ptr %181, i64 %182
  %184 = load i64, ptr %183, align 8, !tbaa !9
  store i64 %184, ptr %14, align 8, !tbaa !9
  %185 = load i64, ptr %14, align 8, !tbaa !9
  %186 = load i64, ptr %26, align 8, !tbaa !9
  %187 = and i64 %185, %186
  store i64 %187, ptr %15, align 8, !tbaa !9
  %188 = load ptr, ptr %32, align 8, !tbaa !5
  %189 = load i64, ptr %15, align 8, !tbaa !9
  %190 = getelementptr inbounds i64, ptr %188, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !9
  store i64 %191, ptr %17, align 8, !tbaa !9
  %192 = icmp eq i64 %191, -1
  br i1 %192, label %193, label %206

193:                                              ; preds = %180
  %194 = load i64, ptr %14, align 8, !tbaa !9
  %195 = load ptr, ptr %35, align 8, !tbaa !5
  %196 = load i64, ptr %21, align 8, !tbaa !9
  %197 = getelementptr inbounds i64, ptr %195, i64 %196
  store i64 %194, ptr %197, align 8, !tbaa !9
  %198 = load ptr, ptr %36, align 8, !tbaa !5
  %199 = load i64, ptr %21, align 8, !tbaa !9
  %200 = getelementptr inbounds i64, ptr %198, i64 %199
  store i64 1, ptr %200, align 8, !tbaa !9
  %201 = load i64, ptr %21, align 8, !tbaa !9
  %202 = add nsw i64 %201, 1
  store i64 %202, ptr %21, align 8, !tbaa !9
  %203 = load ptr, ptr %32, align 8, !tbaa !5
  %204 = load i64, ptr %15, align 8, !tbaa !9
  %205 = getelementptr inbounds i64, ptr %203, i64 %204
  store i64 %201, ptr %205, align 8, !tbaa !9
  br label %256

206:                                              ; preds = %180
  %207 = load ptr, ptr %35, align 8, !tbaa !5
  %208 = load i64, ptr %17, align 8, !tbaa !9
  %209 = getelementptr inbounds i64, ptr %207, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !9
  %211 = load i64, ptr %14, align 8, !tbaa !9
  %212 = icmp eq i64 %210, %211
  br i1 %212, label %213, label %219

213:                                              ; preds = %206
  %214 = load ptr, ptr %36, align 8, !tbaa !5
  %215 = load i64, ptr %17, align 8, !tbaa !9
  %216 = getelementptr inbounds i64, ptr %214, i64 %215
  %217 = load i64, ptr %216, align 8, !tbaa !9
  %218 = add nsw i64 %217, 1
  store i64 %218, ptr %216, align 8, !tbaa !9
  br label %255

219:                                              ; preds = %206
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %220

220:                                              ; preds = %238, %219
  %221 = load i64, ptr %13, align 8, !tbaa !9
  %222 = load i64, ptr %21, align 8, !tbaa !9
  %223 = icmp slt i64 %221, %222
  br i1 %223, label %224, label %241

224:                                              ; preds = %220
  %225 = load ptr, ptr %35, align 8, !tbaa !5
  %226 = load i64, ptr %13, align 8, !tbaa !9
  %227 = getelementptr inbounds i64, ptr %225, i64 %226
  %228 = load i64, ptr %227, align 8, !tbaa !9
  %229 = load i64, ptr %14, align 8, !tbaa !9
  %230 = icmp eq i64 %228, %229
  br i1 %230, label %231, label %237

231:                                              ; preds = %224
  %232 = load ptr, ptr %36, align 8, !tbaa !5
  %233 = load i64, ptr %13, align 8, !tbaa !9
  %234 = getelementptr inbounds i64, ptr %232, i64 %233
  %235 = load i64, ptr %234, align 8, !tbaa !9
  %236 = add nsw i64 %235, 1
  store i64 %236, ptr %234, align 8, !tbaa !9
  br label %241

237:                                              ; preds = %224
  br label %238

238:                                              ; preds = %237
  %239 = load i64, ptr %13, align 8, !tbaa !9
  %240 = add nsw i64 %239, 1
  store i64 %240, ptr %13, align 8, !tbaa !9
  br label %220, !llvm.loop !31

241:                                              ; preds = %231, %220
  %242 = load i64, ptr %13, align 8, !tbaa !9
  %243 = load i64, ptr %21, align 8, !tbaa !9
  %244 = icmp eq i64 %242, %243
  br i1 %244, label %245, label %254

245:                                              ; preds = %241
  %246 = load i64, ptr %14, align 8, !tbaa !9
  %247 = load ptr, ptr %35, align 8, !tbaa !5
  %248 = load i64, ptr %21, align 8, !tbaa !9
  %249 = getelementptr inbounds i64, ptr %247, i64 %248
  store i64 %246, ptr %249, align 8, !tbaa !9
  %250 = load ptr, ptr %36, align 8, !tbaa !5
  %251 = load i64, ptr %21, align 8, !tbaa !9
  %252 = add nsw i64 %251, 1
  store i64 %252, ptr %21, align 8, !tbaa !9
  %253 = getelementptr inbounds i64, ptr %250, i64 %251
  store i64 1, ptr %253, align 8, !tbaa !9
  br label %254

254:                                              ; preds = %245, %241
  br label %255

255:                                              ; preds = %254, %213
  br label %256

256:                                              ; preds = %255, %193
  br label %257

257:                                              ; preds = %256
  %258 = load i64, ptr %12, align 8, !tbaa !9
  %259 = add nsw i64 %258, 1
  store i64 %259, ptr %12, align 8, !tbaa !9
  br label %176, !llvm.loop !32

260:                                              ; preds = %176
  %261 = load i64, ptr %24, align 8, !tbaa !9
  %262 = load i64, ptr %25, align 8, !tbaa !9
  %263 = icmp ne i64 %261, %262
  br i1 %263, label %264, label %443

264:                                              ; preds = %260
  %265 = load ptr, ptr %34, align 8, !tbaa !5
  %266 = load i64, ptr %8, align 8, !tbaa !9
  %267 = getelementptr inbounds i64, ptr %265, i64 %266
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = add nsw i64 %268, 1
  store i64 %269, ptr %267, align 8, !tbaa !9
  %270 = load ptr, ptr %29, align 8, !tbaa !5
  %271 = load i64, ptr %25, align 8, !tbaa !9
  %272 = getelementptr inbounds i64, ptr %270, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !9
  %274 = load ptr, ptr %37, align 8, !tbaa !5
  %275 = load i64, ptr %8, align 8, !tbaa !9
  %276 = getelementptr inbounds i64, ptr %274, i64 %275
  %277 = load i64, ptr %276, align 8, !tbaa !9
  %278 = add nsw i64 %277, %273
  store i64 %278, ptr %276, align 8, !tbaa !9
  %279 = load ptr, ptr %27, align 8, !tbaa !5
  %280 = load i64, ptr %25, align 8, !tbaa !9
  %281 = getelementptr inbounds i64, ptr %279, i64 %280
  %282 = load i64, ptr %281, align 8, !tbaa !9
  store i64 %282, ptr %18, align 8, !tbaa !9
  %283 = load ptr, ptr %27, align 8, !tbaa !5
  %284 = load i64, ptr %25, align 8, !tbaa !9
  %285 = add nsw i64 %284, 1
  %286 = getelementptr inbounds i64, ptr %283, i64 %285
  %287 = load i64, ptr %286, align 8, !tbaa !9
  store i64 %287, ptr %19, align 8, !tbaa !9
  %288 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %288, ptr %12, align 8, !tbaa !9
  br label %289

289:                                              ; preds = %370, %264
  %290 = load i64, ptr %12, align 8, !tbaa !9
  %291 = load i64, ptr %19, align 8, !tbaa !9
  %292 = icmp slt i64 %290, %291
  br i1 %292, label %293, label %373

293:                                              ; preds = %289
  %294 = load ptr, ptr %30, align 8, !tbaa !5
  %295 = load i64, ptr %12, align 8, !tbaa !9
  %296 = getelementptr inbounds i64, ptr %294, i64 %295
  %297 = load i64, ptr %296, align 8, !tbaa !9
  store i64 %297, ptr %14, align 8, !tbaa !9
  %298 = load i64, ptr %14, align 8, !tbaa !9
  %299 = load i64, ptr %26, align 8, !tbaa !9
  %300 = and i64 %298, %299
  store i64 %300, ptr %15, align 8, !tbaa !9
  %301 = load ptr, ptr %32, align 8, !tbaa !5
  %302 = load i64, ptr %15, align 8, !tbaa !9
  %303 = getelementptr inbounds i64, ptr %301, i64 %302
  %304 = load i64, ptr %303, align 8, !tbaa !9
  store i64 %304, ptr %17, align 8, !tbaa !9
  %305 = icmp eq i64 %304, -1
  br i1 %305, label %306, label %319

306:                                              ; preds = %293
  %307 = load i64, ptr %14, align 8, !tbaa !9
  %308 = load ptr, ptr %35, align 8, !tbaa !5
  %309 = load i64, ptr %21, align 8, !tbaa !9
  %310 = getelementptr inbounds i64, ptr %308, i64 %309
  store i64 %307, ptr %310, align 8, !tbaa !9
  %311 = load ptr, ptr %36, align 8, !tbaa !5
  %312 = load i64, ptr %21, align 8, !tbaa !9
  %313 = getelementptr inbounds i64, ptr %311, i64 %312
  store i64 1, ptr %313, align 8, !tbaa !9
  %314 = load i64, ptr %21, align 8, !tbaa !9
  %315 = add nsw i64 %314, 1
  store i64 %315, ptr %21, align 8, !tbaa !9
  %316 = load ptr, ptr %32, align 8, !tbaa !5
  %317 = load i64, ptr %15, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  store i64 %314, ptr %318, align 8, !tbaa !9
  br label %369

319:                                              ; preds = %293
  %320 = load ptr, ptr %35, align 8, !tbaa !5
  %321 = load i64, ptr %17, align 8, !tbaa !9
  %322 = getelementptr inbounds i64, ptr %320, i64 %321
  %323 = load i64, ptr %322, align 8, !tbaa !9
  %324 = load i64, ptr %14, align 8, !tbaa !9
  %325 = icmp eq i64 %323, %324
  br i1 %325, label %326, label %332

326:                                              ; preds = %319
  %327 = load ptr, ptr %36, align 8, !tbaa !5
  %328 = load i64, ptr %17, align 8, !tbaa !9
  %329 = getelementptr inbounds i64, ptr %327, i64 %328
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = add nsw i64 %330, 1
  store i64 %331, ptr %329, align 8, !tbaa !9
  br label %368

332:                                              ; preds = %319
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %333

333:                                              ; preds = %351, %332
  %334 = load i64, ptr %13, align 8, !tbaa !9
  %335 = load i64, ptr %21, align 8, !tbaa !9
  %336 = icmp slt i64 %334, %335
  br i1 %336, label %337, label %354

337:                                              ; preds = %333
  %338 = load ptr, ptr %35, align 8, !tbaa !5
  %339 = load i64, ptr %13, align 8, !tbaa !9
  %340 = getelementptr inbounds i64, ptr %338, i64 %339
  %341 = load i64, ptr %340, align 8, !tbaa !9
  %342 = load i64, ptr %14, align 8, !tbaa !9
  %343 = icmp eq i64 %341, %342
  br i1 %343, label %344, label %350

344:                                              ; preds = %337
  %345 = load ptr, ptr %36, align 8, !tbaa !5
  %346 = load i64, ptr %13, align 8, !tbaa !9
  %347 = getelementptr inbounds i64, ptr %345, i64 %346
  %348 = load i64, ptr %347, align 8, !tbaa !9
  %349 = add nsw i64 %348, 1
  store i64 %349, ptr %347, align 8, !tbaa !9
  br label %354

350:                                              ; preds = %337
  br label %351

351:                                              ; preds = %350
  %352 = load i64, ptr %13, align 8, !tbaa !9
  %353 = add nsw i64 %352, 1
  store i64 %353, ptr %13, align 8, !tbaa !9
  br label %333, !llvm.loop !33

354:                                              ; preds = %344, %333
  %355 = load i64, ptr %13, align 8, !tbaa !9
  %356 = load i64, ptr %21, align 8, !tbaa !9
  %357 = icmp eq i64 %355, %356
  br i1 %357, label %358, label %367

358:                                              ; preds = %354
  %359 = load i64, ptr %14, align 8, !tbaa !9
  %360 = load ptr, ptr %35, align 8, !tbaa !5
  %361 = load i64, ptr %21, align 8, !tbaa !9
  %362 = getelementptr inbounds i64, ptr %360, i64 %361
  store i64 %359, ptr %362, align 8, !tbaa !9
  %363 = load ptr, ptr %36, align 8, !tbaa !5
  %364 = load i64, ptr %21, align 8, !tbaa !9
  %365 = add nsw i64 %364, 1
  store i64 %365, ptr %21, align 8, !tbaa !9
  %366 = getelementptr inbounds i64, ptr %363, i64 %364
  store i64 1, ptr %366, align 8, !tbaa !9
  br label %367

367:                                              ; preds = %358, %354
  br label %368

368:                                              ; preds = %367, %326
  br label %369

369:                                              ; preds = %368, %306
  br label %370

370:                                              ; preds = %369
  %371 = load i64, ptr %12, align 8, !tbaa !9
  %372 = add nsw i64 %371, 1
  store i64 %372, ptr %12, align 8, !tbaa !9
  br label %289, !llvm.loop !34

373:                                              ; preds = %289
  %374 = load ptr, ptr %32, align 8, !tbaa !5
  %375 = load i64, ptr %8, align 8, !tbaa !9
  %376 = load i64, ptr %26, align 8, !tbaa !9
  %377 = and i64 %375, %376
  %378 = getelementptr inbounds i64, ptr %374, i64 %377
  %379 = load i64, ptr %378, align 8, !tbaa !9
  store i64 %379, ptr %13, align 8, !tbaa !9
  %380 = load i64, ptr %13, align 8, !tbaa !9
  %381 = icmp sge i64 %380, 0
  br i1 %381, label %382, label %407

382:                                              ; preds = %373
  %383 = load ptr, ptr %35, align 8, !tbaa !5
  %384 = load i64, ptr %13, align 8, !tbaa !9
  %385 = getelementptr inbounds i64, ptr %383, i64 %384
  %386 = load i64, ptr %385, align 8, !tbaa !9
  %387 = load i64, ptr %8, align 8, !tbaa !9
  %388 = icmp ne i64 %386, %387
  br i1 %388, label %389, label %407

389:                                              ; preds = %382
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %390

390:                                              ; preds = %403, %389
  %391 = load i64, ptr %13, align 8, !tbaa !9
  %392 = load i64, ptr %21, align 8, !tbaa !9
  %393 = icmp slt i64 %391, %392
  br i1 %393, label %394, label %406

394:                                              ; preds = %390
  %395 = load ptr, ptr %35, align 8, !tbaa !5
  %396 = load i64, ptr %13, align 8, !tbaa !9
  %397 = getelementptr inbounds i64, ptr %395, i64 %396
  %398 = load i64, ptr %397, align 8, !tbaa !9
  %399 = load i64, ptr %8, align 8, !tbaa !9
  %400 = icmp eq i64 %398, %399
  br i1 %400, label %401, label %402

401:                                              ; preds = %394
  br label %406

402:                                              ; preds = %394
  br label %403

403:                                              ; preds = %402
  %404 = load i64, ptr %13, align 8, !tbaa !9
  %405 = add nsw i64 %404, 1
  store i64 %405, ptr %13, align 8, !tbaa !9
  br label %390, !llvm.loop !35

406:                                              ; preds = %401, %390
  br label %407

407:                                              ; preds = %406, %382, %373
  %408 = load i64, ptr %13, align 8, !tbaa !9
  %409 = icmp sge i64 %408, 0
  br i1 %409, label %410, label %442

410:                                              ; preds = %407
  %411 = load ptr, ptr %35, align 8, !tbaa !5
  %412 = load i64, ptr %13, align 8, !tbaa !9
  %413 = getelementptr inbounds i64, ptr %411, i64 %412
  %414 = load i64, ptr %413, align 8, !tbaa !9
  %415 = load i64, ptr %8, align 8, !tbaa !9
  %416 = icmp eq i64 %414, %415
  br i1 %416, label %417, label %442

417:                                              ; preds = %410
  %418 = load ptr, ptr %36, align 8, !tbaa !5
  %419 = load i64, ptr %13, align 8, !tbaa !9
  %420 = getelementptr inbounds i64, ptr %418, i64 %419
  %421 = load i64, ptr %420, align 8, !tbaa !9
  %422 = load ptr, ptr %37, align 8, !tbaa !5
  %423 = load i64, ptr %8, align 8, !tbaa !9
  %424 = getelementptr inbounds i64, ptr %422, i64 %423
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = sub nsw i64 %425, %421
  store i64 %426, ptr %424, align 8, !tbaa !9
  %427 = load ptr, ptr %35, align 8, !tbaa !5
  %428 = load i64, ptr %21, align 8, !tbaa !9
  %429 = add nsw i64 %428, -1
  store i64 %429, ptr %21, align 8, !tbaa !9
  %430 = getelementptr inbounds i64, ptr %427, i64 %429
  %431 = load i64, ptr %430, align 8, !tbaa !9
  %432 = load ptr, ptr %35, align 8, !tbaa !5
  %433 = load i64, ptr %13, align 8, !tbaa !9
  %434 = getelementptr inbounds i64, ptr %432, i64 %433
  store i64 %431, ptr %434, align 8, !tbaa !9
  %435 = load ptr, ptr %36, align 8, !tbaa !5
  %436 = load i64, ptr %21, align 8, !tbaa !9
  %437 = getelementptr inbounds i64, ptr %435, i64 %436
  %438 = load i64, ptr %437, align 8, !tbaa !9
  %439 = load ptr, ptr %36, align 8, !tbaa !5
  %440 = load i64, ptr %13, align 8, !tbaa !9
  %441 = getelementptr inbounds i64, ptr %439, i64 %440
  store i64 %438, ptr %441, align 8, !tbaa !9
  br label %442

442:                                              ; preds = %417, %410, %407
  br label %443

443:                                              ; preds = %442, %260
  store i64 0, ptr %12, align 8, !tbaa !9
  br label %444

444:                                              ; preds = %457, %443
  %445 = load i64, ptr %12, align 8, !tbaa !9
  %446 = load i64, ptr %21, align 8, !tbaa !9
  %447 = icmp slt i64 %445, %446
  br i1 %447, label %448, label %460

448:                                              ; preds = %444
  %449 = load ptr, ptr %32, align 8, !tbaa !5
  %450 = load ptr, ptr %35, align 8, !tbaa !5
  %451 = load i64, ptr %12, align 8, !tbaa !9
  %452 = getelementptr inbounds i64, ptr %450, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = load i64, ptr %26, align 8, !tbaa !9
  %455 = and i64 %453, %454
  %456 = getelementptr inbounds i64, ptr %449, i64 %455
  store i64 -1, ptr %456, align 8, !tbaa !9
  br label %457

457:                                              ; preds = %448
  %458 = load i64, ptr %12, align 8, !tbaa !9
  %459 = add nsw i64 %458, 1
  store i64 %459, ptr %12, align 8, !tbaa !9
  br label %444, !llvm.loop !36

460:                                              ; preds = %444
  %461 = load ptr, ptr %32, align 8, !tbaa !5
  %462 = load i64, ptr %8, align 8, !tbaa !9
  %463 = load i64, ptr %26, align 8, !tbaa !9
  %464 = and i64 %462, %463
  %465 = getelementptr inbounds i64, ptr %461, i64 %464
  store i64 -1, ptr %465, align 8, !tbaa !9
  %466 = load i64, ptr %21, align 8, !tbaa !9
  %467 = load i64, ptr %23, align 8, !tbaa !9
  %468 = add nsw i64 %467, %466
  store i64 %468, ptr %23, align 8, !tbaa !9
  %469 = load i64, ptr %23, align 8, !tbaa !9
  %470 = load ptr, ptr %33, align 8, !tbaa !5
  %471 = load i64, ptr %8, align 8, !tbaa !9
  %472 = add nsw i64 %471, 1
  store i64 %472, ptr %8, align 8, !tbaa !9
  %473 = getelementptr inbounds i64, ptr %470, i64 %472
  store i64 %469, ptr %473, align 8, !tbaa !9
  %474 = load i64, ptr %21, align 8, !tbaa !9
  %475 = load ptr, ptr %35, align 8, !tbaa !5
  %476 = getelementptr inbounds i64, ptr %475, i64 %474
  store ptr %476, ptr %35, align 8, !tbaa !5
  %477 = load i64, ptr %21, align 8, !tbaa !9
  %478 = load ptr, ptr %36, align 8, !tbaa !5
  %479 = getelementptr inbounds i64, ptr %478, i64 %477
  store ptr %479, ptr %36, align 8, !tbaa !5
  br label %480

480:                                              ; preds = %460, %150
  %481 = load i64, ptr %11, align 8, !tbaa !9
  %482 = add nsw i64 %481, 1
  store i64 %482, ptr %11, align 8, !tbaa !9
  br label %135, !llvm.loop !37

483:                                              ; preds = %135
  %484 = load i64, ptr %23, align 8, !tbaa !9
  %485 = load ptr, ptr %40, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.graphdef, ptr %485, i32 0, i32 1
  store i64 %484, ptr %486, align 8, !tbaa !38
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = load ptr, ptr %40, align 8, !tbaa !5
  call void @libmetis__ReAdjustMemory(ptr noundef %487, ptr noundef %488, i64 noundef 0)
  %489 = load ptr, ptr %6, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.controldef, ptr %489, i32 0, i32 1
  %491 = load i64, ptr %490, align 8, !tbaa !11
  %492 = and i64 %491, 1
  %493 = icmp ne i64 %492, 0
  br i1 %493, label %494, label %500

494:                                              ; preds = %483
  %495 = call double @gk_CPUSeconds()
  %496 = load ptr, ptr %6, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.controldef, ptr %496, i32 0, i32 15
  %498 = load double, ptr %497, align 8, !tbaa !16
  %499 = fadd double %498, %495
  store double %499, ptr %497, align 8, !tbaa !16
  br label %500

500:                                              ; preds = %494, %483
  %501 = load ptr, ptr %6, align 8, !tbaa !5
  %502 = load i64, ptr %26, align 8, !tbaa !9
  %503 = add nsw i64 %502, 1
  call void @libmetis__idxwspacefree(ptr noundef %501, i64 noundef %503)
  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
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 8}
!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, !15, i64 176}
!17 = !{!18, !10, i64 0}
!18 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !19, i64 56, !19, i64 60, !19, i64 64, !19, i64 68, !19, 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}
!19 = !{!"int", !7, i64 0}
!20 = !{!18, !10, i64 208}
!21 = !{!18, !6, i64 16}
!22 = !{!18, !6, i64 216}
!23 = !{!18, !6, i64 40}
!24 = !{!18, !6, i64 88}
!25 = !{!18, !6, i64 104}
!26 = !{!18, !6, i64 24}
!27 = !{!18, !6, i64 48}
!28 = !{!12, !6, i64 136}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !30}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = !{!18, !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"

declare double @gk_CPUSeconds() local_unnamed_addr #0

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

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

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

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

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

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

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

14:                                               ; preds = %9, %5
  %15 = load i64, ptr %1, align 8, !tbaa !15
  %16 = getelementptr inbounds i8, ptr %1, i64 16
  %17 = load ptr, ptr %16, align 8, !tbaa !18
  %18 = getelementptr inbounds i8, ptr %1, i64 40
  %19 = load ptr, ptr %18, align 8, !tbaa !19
  %20 = getelementptr inbounds i8, ptr %1, i64 88
  %21 = load ptr, ptr %20, align 8, !tbaa !20
  %22 = getelementptr inbounds i8, ptr %1, i64 104
  %23 = load ptr, ptr %22, align 8, !tbaa !21
  %24 = tail call ptr @libmetis__SetUpCoarseGraph(ptr noundef nonnull %1, i64 noundef %2, i64 noundef 0)
  %25 = getelementptr inbounds i8, ptr %24, i64 16
  %26 = load ptr, ptr %25, align 8, !tbaa !18
  %27 = getelementptr inbounds i8, ptr %24, i64 24
  %28 = load ptr, ptr %27, align 8, !tbaa !22
  %29 = getelementptr inbounds i8, ptr %24, i64 88
  %30 = load ptr, ptr %29, align 8, !tbaa !20
  %31 = getelementptr inbounds i8, ptr %24, i64 40
  %32 = load ptr, ptr %31, align 8, !tbaa !19
  %33 = getelementptr inbounds i8, ptr %24, i64 48
  %34 = load ptr, ptr %33, align 8, !tbaa !23
  %35 = getelementptr inbounds i64, ptr %17, i64 %15
  %36 = load i64, ptr %35, align 8, !tbaa !24
  %37 = getelementptr inbounds i8, ptr %0, i64 136
  %38 = load ptr, ptr %37, align 8, !tbaa !25
  %39 = shl i64 %36, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %38, ptr align 8 %19, i64 %39, i1 false)
  %40 = icmp sgt i64 %36, 0
  br i1 %40, label %.lr.ph.preheader, label %._crit_edge

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

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0198237 = phi i64 [ 0, %.lr.ph.preheader.new ], [ %61, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %42 = getelementptr inbounds i64, ptr %38, i64 %.0198237
  %43 = load i64, ptr %42, align 8, !tbaa !24
  %44 = getelementptr inbounds i64, ptr %23, i64 %43
  %45 = load i64, ptr %44, align 8, !tbaa !24
  store i64 %45, ptr %42, align 8, !tbaa !24
  %46 = or disjoint i64 %.0198237, 1
  %47 = getelementptr inbounds i64, ptr %38, i64 %46
  %48 = load i64, ptr %47, align 8, !tbaa !24
  %49 = getelementptr inbounds i64, ptr %23, i64 %48
  %50 = load i64, ptr %49, align 8, !tbaa !24
  store i64 %50, ptr %47, align 8, !tbaa !24
  %51 = or disjoint i64 %.0198237, 2
  %52 = getelementptr inbounds i64, ptr %38, i64 %51
  %53 = load i64, ptr %52, align 8, !tbaa !24
  %54 = getelementptr inbounds i64, ptr %23, i64 %53
  %55 = load i64, ptr %54, align 8, !tbaa !24
  store i64 %55, ptr %52, align 8, !tbaa !24
  %56 = or disjoint i64 %.0198237, 3
  %57 = getelementptr inbounds i64, ptr %38, i64 %56
  %58 = load i64, ptr %57, align 8, !tbaa !24
  %59 = getelementptr inbounds i64, ptr %23, i64 %58
  %60 = load i64, ptr %59, align 8, !tbaa !24
  store i64 %60, ptr %57, align 8, !tbaa !24
  %61 = add nuw nsw i64 %.0198237, 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 !26

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %.0198237.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %61, %.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
  %.0198237.epil = phi i64 [ %66, %.lr.ph.epil ], [ %.0198237.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %62 = getelementptr inbounds i64, ptr %38, i64 %.0198237.epil
  %63 = load i64, ptr %62, align 8, !tbaa !24
  %64 = getelementptr inbounds i64, ptr %23, i64 %63
  %65 = load i64, ptr %64, align 8, !tbaa !24
  store i64 %65, ptr %62, align 8, !tbaa !24
  %66 = add nuw nsw i64 %.0198237.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 !28

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %14
  %67 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef 2048) #3
  %68 = tail call ptr @libmetis__idxset(i64 noundef 2048, i64 noundef -1, ptr noundef %67) #3
  store i64 0, ptr %26, align 8, !tbaa !24
  %69 = icmp sgt i64 %15, 0
  br i1 %69, label %.lr.ph271, label %._crit_edge272

.lr.ph271:                                        ; preds = %._crit_edge, %226
  %.0267 = phi i64 [ %.1, %226 ], [ 0, %._crit_edge ]
  %.1199266 = phi i64 [ %227, %226 ], [ 0, %._crit_edge ]
  %.0205265 = phi ptr [ %.1206, %226 ], [ %34, %._crit_edge ]
  %.0207264 = phi ptr [ %.1208, %226 ], [ %32, %._crit_edge ]
  %.0213263 = phi i64 [ %.1214, %226 ], [ 0, %._crit_edge ]
  %70 = getelementptr inbounds i64, ptr %4, i64 %.1199266
  %71 = load i64, ptr %70, align 8, !tbaa !24
  %72 = getelementptr inbounds i64, ptr %23, i64 %71
  %73 = load i64, ptr %72, align 8, !tbaa !24
  %.not223 = icmp eq i64 %73, %.0267
  br i1 %.not223, label %74, label %226

74:                                               ; preds = %.lr.ph271
  %75 = getelementptr inbounds i64, ptr %3, i64 %71
  %76 = load i64, ptr %75, align 8, !tbaa !24
  %77 = getelementptr inbounds i64, ptr %28, i64 %.0267
  store i64 1, ptr %77, align 8, !tbaa !24
  %78 = getelementptr inbounds i64, ptr %21, i64 %71
  %79 = load i64, ptr %78, align 8, !tbaa !24
  %80 = getelementptr inbounds i64, ptr %30, i64 %.0267
  store i64 %79, ptr %80, align 8, !tbaa !24
  %81 = getelementptr inbounds i64, ptr %17, i64 %71
  %82 = load i64, ptr %81, align 8, !tbaa !24
  %83 = getelementptr i8, ptr %81, i64 8
  %84 = load i64, ptr %83, align 8, !tbaa !24
  %85 = icmp slt i64 %82, %84
  br i1 %85, label %.lr.ph243, label %._crit_edge244

.lr.ph243:                                        ; preds = %74, %118
  %.0200241 = phi i64 [ %119, %118 ], [ %82, %74 ]
  %.0209240 = phi i64 [ %.1210, %118 ], [ 0, %74 ]
  %86 = getelementptr inbounds i64, ptr %38, i64 %.0200241
  %87 = load i64, ptr %86, align 8, !tbaa !24
  %88 = and i64 %87, 2047
  %89 = getelementptr inbounds i64, ptr %68, i64 %88
  %90 = load i64, ptr %89, align 8, !tbaa !24
  %91 = icmp eq i64 %90, -1
  br i1 %91, label %92, label %96

92:                                               ; preds = %.lr.ph243
  %93 = getelementptr inbounds i64, ptr %.0207264, i64 %.0209240
  store i64 %87, ptr %93, align 8, !tbaa !24
  %94 = getelementptr inbounds i64, ptr %.0205265, i64 %.0209240
  store i64 1, ptr %94, align 8, !tbaa !24
  %95 = add nsw i64 %.0209240, 1
  store i64 %.0209240, ptr %89, align 8, !tbaa !24
  br label %118

96:                                               ; preds = %.lr.ph243
  %97 = getelementptr inbounds i64, ptr %.0207264, i64 %90
  %98 = load i64, ptr %97, align 8, !tbaa !24
  %99 = icmp eq i64 %98, %87
  br i1 %99, label %101, label %.preheader230

.preheader230:                                    ; preds = %96
  %100 = icmp sgt i64 %.0209240, 0
  br i1 %100, label %.lr.ph239, label %.loopexit231

101:                                              ; preds = %96
  %102 = getelementptr inbounds i64, ptr %.0205265, i64 %90
  %103 = load i64, ptr %102, align 8, !tbaa !24
  %104 = add nsw i64 %103, 1
  store i64 %104, ptr %102, align 8, !tbaa !24
  br label %118

.lr.ph239:                                        ; preds = %.preheader230, %112
  %.0202238 = phi i64 [ %113, %112 ], [ 0, %.preheader230 ]
  %105 = getelementptr inbounds i64, ptr %.0207264, i64 %.0202238
  %106 = load i64, ptr %105, align 8, !tbaa !24
  %107 = icmp eq i64 %106, %87
  br i1 %107, label %108, label %112

108:                                              ; preds = %.lr.ph239
  %109 = getelementptr inbounds i64, ptr %.0205265, i64 %.0202238
  %110 = load i64, ptr %109, align 8, !tbaa !24
  %111 = add nsw i64 %110, 1
  store i64 %111, ptr %109, align 8, !tbaa !24
  br label %.loopexit231

112:                                              ; preds = %.lr.ph239
  %113 = add nuw nsw i64 %.0202238, 1
  %exitcond277.not = icmp eq i64 %113, %.0209240
  br i1 %exitcond277.not, label %.loopexit231.thread, label %.lr.ph239, !llvm.loop !30

.loopexit231:                                     ; preds = %.preheader230, %108
  %.0202234 = phi i64 [ %.0202238, %108 ], [ 0, %.preheader230 ]
  %114 = icmp eq i64 %.0202234, %.0209240
  br i1 %114, label %.loopexit231.thread, label %118

.loopexit231.thread:                              ; preds = %112, %.loopexit231
  %115 = getelementptr inbounds i64, ptr %.0207264, i64 %.0209240
  store i64 %87, ptr %115, align 8, !tbaa !24
  %116 = add nsw i64 %.0209240, 1
  %117 = getelementptr inbounds i64, ptr %.0205265, i64 %.0209240
  store i64 1, ptr %117, align 8, !tbaa !24
  br label %118

118:                                              ; preds = %92, %.loopexit231, %.loopexit231.thread, %101
  %.1210 = phi i64 [ %95, %92 ], [ %.0209240, %101 ], [ %116, %.loopexit231.thread ], [ %.0209240, %.loopexit231 ]
  %119 = add nsw i64 %.0200241, 1
  %exitcond278.not = icmp eq i64 %119, %84
  br i1 %exitcond278.not, label %._crit_edge244, label %.lr.ph243, !llvm.loop !31

._crit_edge244:                                   ; preds = %118, %74
  %.0209.lcssa = phi i64 [ 0, %74 ], [ %.1210, %118 ]
  %.not224 = icmp eq i64 %71, %76
  br i1 %.not224, label %.thread228, label %120

120:                                              ; preds = %._crit_edge244
  %121 = load i64, ptr %77, align 8, !tbaa !24
  %122 = add nsw i64 %121, 1
  store i64 %122, ptr %77, align 8, !tbaa !24
  %123 = getelementptr inbounds i64, ptr %21, i64 %76
  %124 = load i64, ptr %123, align 8, !tbaa !24
  %125 = load i64, ptr %80, align 8, !tbaa !24
  %126 = add nsw i64 %125, %124
  store i64 %126, ptr %80, align 8, !tbaa !24
  %127 = getelementptr inbounds i64, ptr %17, i64 %76
  %128 = load i64, ptr %127, align 8, !tbaa !24
  %129 = getelementptr i8, ptr %127, i64 8
  %130 = load i64, ptr %129, align 8, !tbaa !24
  %131 = icmp slt i64 %128, %130
  br i1 %131, label %.lr.ph252, label %._crit_edge253

.lr.ph252:                                        ; preds = %120, %164
  %.1201250 = phi i64 [ %165, %164 ], [ %128, %120 ]
  %.2211249 = phi i64 [ %.3212, %164 ], [ %.0209.lcssa, %120 ]
  %132 = getelementptr inbounds i64, ptr %38, i64 %.1201250
  %133 = load i64, ptr %132, align 8, !tbaa !24
  %134 = and i64 %133, 2047
  %135 = getelementptr inbounds i64, ptr %68, i64 %134
  %136 = load i64, ptr %135, align 8, !tbaa !24
  %137 = icmp eq i64 %136, -1
  br i1 %137, label %138, label %142

138:                                              ; preds = %.lr.ph252
  %139 = getelementptr inbounds i64, ptr %.0207264, i64 %.2211249
  store i64 %133, ptr %139, align 8, !tbaa !24
  %140 = getelementptr inbounds i64, ptr %.0205265, i64 %.2211249
  store i64 1, ptr %140, align 8, !tbaa !24
  %141 = add nsw i64 %.2211249, 1
  store i64 %.2211249, ptr %135, align 8, !tbaa !24
  br label %164

142:                                              ; preds = %.lr.ph252
  %143 = getelementptr inbounds i64, ptr %.0207264, i64 %136
  %144 = load i64, ptr %143, align 8, !tbaa !24
  %145 = icmp eq i64 %144, %133
  br i1 %145, label %147, label %.preheader

.preheader:                                       ; preds = %142
  %146 = icmp sgt i64 %.2211249, 0
  br i1 %146, label %.lr.ph247, label %.loopexit

147:                                              ; preds = %142
  %148 = getelementptr inbounds i64, ptr %.0205265, i64 %136
  %149 = load i64, ptr %148, align 8, !tbaa !24
  %150 = add nsw i64 %149, 1
  store i64 %150, ptr %148, align 8, !tbaa !24
  br label %164

.lr.ph247:                                        ; preds = %.preheader, %158
  %.1203246 = phi i64 [ %159, %158 ], [ 0, %.preheader ]
  %151 = getelementptr inbounds i64, ptr %.0207264, i64 %.1203246
  %152 = load i64, ptr %151, align 8, !tbaa !24
  %153 = icmp eq i64 %152, %133
  br i1 %153, label %154, label %158

154:                                              ; preds = %.lr.ph247
  %155 = getelementptr inbounds i64, ptr %.0205265, i64 %.1203246
  %156 = load i64, ptr %155, align 8, !tbaa !24
  %157 = add nsw i64 %156, 1
  store i64 %157, ptr %155, align 8, !tbaa !24
  br label %.loopexit

158:                                              ; preds = %.lr.ph247
  %159 = add nuw nsw i64 %.1203246, 1
  %exitcond279.not = icmp eq i64 %159, %.2211249
  br i1 %exitcond279.not, label %.loopexit.thread, label %.lr.ph247, !llvm.loop !32

.loopexit:                                        ; preds = %.preheader, %154
  %.1203236 = phi i64 [ %.1203246, %154 ], [ 0, %.preheader ]
  %160 = icmp eq i64 %.1203236, %.2211249
  br i1 %160, label %.loopexit.thread, label %164

.loopexit.thread:                                 ; preds = %158, %.loopexit
  %161 = getelementptr inbounds i64, ptr %.0207264, i64 %.2211249
  store i64 %133, ptr %161, align 8, !tbaa !24
  %162 = add nsw i64 %.2211249, 1
  %163 = getelementptr inbounds i64, ptr %.0205265, i64 %.2211249
  store i64 1, ptr %163, align 8, !tbaa !24
  br label %164

164:                                              ; preds = %138, %.loopexit, %.loopexit.thread, %147
  %.3212 = phi i64 [ %141, %138 ], [ %.2211249, %147 ], [ %162, %.loopexit.thread ], [ %.2211249, %.loopexit ]
  %165 = add nsw i64 %.1201250, 1
  %exitcond280.not = icmp eq i64 %165, %130
  br i1 %exitcond280.not, label %._crit_edge253, label %.lr.ph252, !llvm.loop !33

._crit_edge253:                                   ; preds = %164, %120
  %.2211.lcssa = phi i64 [ %.0209.lcssa, %120 ], [ %.3212, %164 ]
  %166 = and i64 %.0267, 2047
  %167 = getelementptr inbounds i64, ptr %68, i64 %166
  %168 = load i64, ptr %167, align 8, !tbaa !24
  %169 = icmp sgt i64 %168, -1
  br i1 %169, label %170, label %.thread228

170:                                              ; preds = %._crit_edge253
  %171 = getelementptr inbounds i64, ptr %.0207264, i64 %168
  %172 = load i64, ptr %171, align 8, !tbaa !24
  %.not225 = icmp eq i64 %172, %.0267
  br i1 %.not225, label %.thread, label %.preheader232

.preheader232:                                    ; preds = %170
  %173 = icmp sgt i64 %.2211.lcssa, 0
  br i1 %173, label %.lr.ph256, label %.thread

.lr.ph256:                                        ; preds = %.preheader232, %177
  %.2204255 = phi i64 [ %178, %177 ], [ 0, %.preheader232 ]
  %174 = getelementptr inbounds i64, ptr %.0207264, i64 %.2204255
  %175 = load i64, ptr %174, align 8, !tbaa !24
  %176 = icmp eq i64 %175, %.0267
  br i1 %176, label %.thread, label %177

177:                                              ; preds = %.lr.ph256
  %178 = add nuw nsw i64 %.2204255, 1
  %exitcond281.not = icmp eq i64 %178, %.2211.lcssa
  br i1 %exitcond281.not, label %.thread, label %.lr.ph256, !llvm.loop !34

.thread:                                          ; preds = %177, %.lr.ph256, %.preheader232, %170
  %.3227 = phi i64 [ %168, %170 ], [ 0, %.preheader232 ], [ %.2211.lcssa, %177 ], [ %.2204255, %.lr.ph256 ]
  %179 = getelementptr inbounds i64, ptr %.0207264, i64 %.3227
  %180 = load i64, ptr %179, align 8, !tbaa !24
  %181 = icmp eq i64 %180, %.0267
  br i1 %181, label %182, label %.thread228

182:                                              ; preds = %.thread
  %183 = getelementptr inbounds i64, ptr %.0205265, i64 %.3227
  %184 = load i64, ptr %183, align 8, !tbaa !24
  %185 = load i64, ptr %80, align 8, !tbaa !24
  %186 = sub nsw i64 %185, %184
  store i64 %186, ptr %80, align 8, !tbaa !24
  %187 = add nsw i64 %.2211.lcssa, -1
  %188 = getelementptr inbounds i64, ptr %.0207264, i64 %187
  %189 = load i64, ptr %188, align 8, !tbaa !24
  store i64 %189, ptr %179, align 8, !tbaa !24
  %190 = getelementptr inbounds i64, ptr %.0205265, i64 %187
  %191 = load i64, ptr %190, align 8, !tbaa !24
  store i64 %191, ptr %183, align 8, !tbaa !24
  br label %.thread228

.thread228:                                       ; preds = %._crit_edge253, %.thread, %182, %._crit_edge244
  %.4 = phi i64 [ %187, %182 ], [ %.2211.lcssa, %.thread ], [ %.0209.lcssa, %._crit_edge244 ], [ %.2211.lcssa, %._crit_edge253 ]
  %192 = icmp sgt i64 %.4, 0
  br i1 %192, label %.lr.ph261.preheader, label %._crit_edge262

.lr.ph261.preheader:                              ; preds = %.thread228
  %xtraiter292 = and i64 %.4, 3
  %193 = icmp ult i64 %.4, 4
  br i1 %193, label %._crit_edge262.loopexit.unr-lcssa, label %.lr.ph261.preheader.new

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

.lr.ph261:                                        ; preds = %.lr.ph261, %.lr.ph261.preheader.new
  %.2260 = phi i64 [ 0, %.lr.ph261.preheader.new ], [ %213, %.lr.ph261 ]
  %niter296 = phi i64 [ 0, %.lr.ph261.preheader.new ], [ %niter296.next.3, %.lr.ph261 ]
  %194 = getelementptr inbounds i64, ptr %.0207264, i64 %.2260
  %195 = load i64, ptr %194, align 8, !tbaa !24
  %196 = and i64 %195, 2047
  %197 = getelementptr inbounds i64, ptr %68, i64 %196
  store i64 -1, ptr %197, align 8, !tbaa !24
  %198 = or disjoint i64 %.2260, 1
  %199 = getelementptr inbounds i64, ptr %.0207264, i64 %198
  %200 = load i64, ptr %199, align 8, !tbaa !24
  %201 = and i64 %200, 2047
  %202 = getelementptr inbounds i64, ptr %68, i64 %201
  store i64 -1, ptr %202, align 8, !tbaa !24
  %203 = or disjoint i64 %.2260, 2
  %204 = getelementptr inbounds i64, ptr %.0207264, i64 %203
  %205 = load i64, ptr %204, align 8, !tbaa !24
  %206 = and i64 %205, 2047
  %207 = getelementptr inbounds i64, ptr %68, i64 %206
  store i64 -1, ptr %207, align 8, !tbaa !24
  %208 = or disjoint i64 %.2260, 3
  %209 = getelementptr inbounds i64, ptr %.0207264, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !24
  %211 = and i64 %210, 2047
  %212 = getelementptr inbounds i64, ptr %68, i64 %211
  store i64 -1, ptr %212, align 8, !tbaa !24
  %213 = add nuw nsw i64 %.2260, 4
  %niter296.next.3 = add i64 %niter296, 4
  %niter296.ncmp.3 = icmp eq i64 %niter296.next.3, %unroll_iter295
  br i1 %niter296.ncmp.3, label %._crit_edge262.loopexit.unr-lcssa, label %.lr.ph261, !llvm.loop !35

._crit_edge262.loopexit.unr-lcssa:                ; preds = %.lr.ph261, %.lr.ph261.preheader
  %.2260.unr = phi i64 [ 0, %.lr.ph261.preheader ], [ %213, %.lr.ph261 ]
  %lcmp.mod294.not = icmp eq i64 %xtraiter292, 0
  br i1 %lcmp.mod294.not, label %._crit_edge262, label %.lr.ph261.epil

.lr.ph261.epil:                                   ; preds = %._crit_edge262.loopexit.unr-lcssa, %.lr.ph261.epil
  %.2260.epil = phi i64 [ %218, %.lr.ph261.epil ], [ %.2260.unr, %._crit_edge262.loopexit.unr-lcssa ]
  %epil.iter293 = phi i64 [ %epil.iter293.next, %.lr.ph261.epil ], [ 0, %._crit_edge262.loopexit.unr-lcssa ]
  %214 = getelementptr inbounds i64, ptr %.0207264, i64 %.2260.epil
  %215 = load i64, ptr %214, align 8, !tbaa !24
  %216 = and i64 %215, 2047
  %217 = getelementptr inbounds i64, ptr %68, i64 %216
  store i64 -1, ptr %217, align 8, !tbaa !24
  %218 = add nuw nsw i64 %.2260.epil, 1
  %epil.iter293.next = add i64 %epil.iter293, 1
  %epil.iter293.cmp.not = icmp eq i64 %epil.iter293.next, %xtraiter292
  br i1 %epil.iter293.cmp.not, label %._crit_edge262, label %.lr.ph261.epil, !llvm.loop !36

._crit_edge262:                                   ; preds = %._crit_edge262.loopexit.unr-lcssa, %.lr.ph261.epil, %.thread228
  %219 = and i64 %.0267, 2047
  %220 = getelementptr inbounds i64, ptr %68, i64 %219
  store i64 -1, ptr %220, align 8, !tbaa !24
  %221 = add nsw i64 %.4, %.0213263
  %222 = add nsw i64 %.0267, 1
  %223 = getelementptr inbounds i64, ptr %26, i64 %222
  store i64 %221, ptr %223, align 8, !tbaa !24
  %224 = getelementptr inbounds i64, ptr %.0207264, i64 %.4
  %225 = getelementptr inbounds i64, ptr %.0205265, i64 %.4
  br label %226

226:                                              ; preds = %.lr.ph271, %._crit_edge262
  %.1214 = phi i64 [ %.0213263, %.lr.ph271 ], [ %221, %._crit_edge262 ]
  %.1208 = phi ptr [ %.0207264, %.lr.ph271 ], [ %224, %._crit_edge262 ]
  %.1206 = phi ptr [ %.0205265, %.lr.ph271 ], [ %225, %._crit_edge262 ]
  %.1 = phi i64 [ %.0267, %.lr.ph271 ], [ %222, %._crit_edge262 ]
  %227 = add nuw nsw i64 %.1199266, 1
  %exitcond283.not = icmp eq i64 %227, %15
  br i1 %exitcond283.not, label %._crit_edge272, label %.lr.ph271, !llvm.loop !37

._crit_edge272:                                   ; preds = %226, %._crit_edge
  %.0213.lcssa = phi i64 [ 0, %._crit_edge ], [ %.1214, %226 ]
  %228 = getelementptr inbounds i8, ptr %24, i64 8
  store i64 %.0213.lcssa, ptr %228, align 8, !tbaa !38
  tail call void @libmetis__ReAdjustMemory(ptr noundef nonnull %1, ptr noundef %24, i64 noundef 0)
  %229 = load i64, ptr %6, align 8, !tbaa !5
  %230 = and i64 %229, 1
  %.not222 = icmp eq i64 %230, 0
  br i1 %.not222, label %236, label %231

231:                                              ; preds = %._crit_edge272
  %232 = tail call double @gk_CPUSeconds() #3
  %233 = getelementptr inbounds i8, ptr %0, i64 176
  %234 = load double, ptr %233, align 8, !tbaa !14
  %235 = fadd double %232, %234
  store double %235, ptr %233, align 8, !tbaa !14
  br label %236

236:                                              ; preds = %231, %._crit_edge272
  tail call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef 2048) #3
  ret void
}

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 = { 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 = { 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 8}
!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, !13, i64 176}
!15 = !{!16, !7, i64 0}
!16 = !{!"graphdef", !7, i64 0, !7, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !17, i64 56, !17, i64 60, !17, i64 64, !17, i64 68, !17, 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}
!17 = !{!"int", !8, i64 0}
!18 = !{!16, !12, i64 16}
!19 = !{!16, !12, i64 40}
!20 = !{!16, !12, i64 88}
!21 = !{!16, !12, i64 104}
!22 = !{!16, !12, i64 24}
!23 = !{!16, !12, i64 48}
!24 = !{!7, !7, i64 0}
!25 = !{!6, !12, i64 136}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.unroll.disable"}
!30 = distinct !{!30, !27}
!31 = distinct !{!31, !27}
!32 = distinct !{!32, !27}
!33 = distinct !{!33, !27}
!34 = distinct !{!34, !27}
!35 = distinct !{!35, !27}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !27}
!38 = !{!16, !7, i64 8}


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