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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.graphdef = type { i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr }

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

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

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

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

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

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

91:                                               ; preds = %103, %5
  %92 = load i64, ptr %11, align 8, !tbaa !9
  %93 = load i64, ptr %17, align 8, !tbaa !9
  %94 = icmp slt i64 %92, %93
  br i1 %94, label %95, label %106

95:                                               ; preds = %91
  %96 = load i64, ptr %11, align 8, !tbaa !9
  %97 = load ptr, ptr %37, align 8, !tbaa !5
  %98 = load i64, ptr %11, align 8, !tbaa !9
  %99 = getelementptr inbounds i64, ptr %97, i64 %98
  store i64 %96, ptr %99, align 8, !tbaa !9
  %100 = load ptr, ptr %36, align 8, !tbaa !5
  %101 = load i64, ptr %11, align 8, !tbaa !9
  %102 = getelementptr inbounds i64, ptr %100, i64 %101
  store i64 %96, ptr %102, align 8, !tbaa !9
  br label %103

103:                                              ; preds = %95
  %104 = load i64, ptr %11, align 8, !tbaa !9
  %105 = add nsw i64 %104, 1
  store i64 %105, ptr %11, align 8, !tbaa !9
  br label %91, !llvm.loop !22

106:                                              ; preds = %91
  store i64 -1, ptr %22, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !9
  store i64 0, ptr %19, align 8, !tbaa !9
  %107 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %107, ptr %21, align 8, !tbaa !9
  br label %108

108:                                              ; preds = %205, %106
  %109 = load i64, ptr %21, align 8, !tbaa !9
  %110 = icmp sgt i64 %109, 0
  br i1 %110, label %111, label %206

111:                                              ; preds = %108
  %112 = load i64, ptr %19, align 8, !tbaa !9
  %113 = load i64, ptr %20, align 8, !tbaa !9
  %114 = icmp eq i64 %112, %113
  br i1 %114, label %115, label %141

115:                                              ; preds = %111
  %116 = load i64, ptr %19, align 8, !tbaa !9
  %117 = load ptr, ptr %39, align 8, !tbaa !5
  %118 = load i64, ptr %22, align 8, !tbaa !9
  %119 = add nsw i64 %118, 1
  store i64 %119, ptr %22, align 8, !tbaa !9
  %120 = getelementptr inbounds i64, ptr %117, i64 %119
  store i64 %116, ptr %120, align 8, !tbaa !9
  %121 = load ptr, ptr %37, align 8, !tbaa !5
  %122 = getelementptr inbounds i64, ptr %121, i64 0
  %123 = load i64, ptr %122, align 8, !tbaa !9
  store i64 %123, ptr %11, align 8, !tbaa !9
  %124 = load i64, ptr %11, align 8, !tbaa !9
  %125 = load ptr, ptr %38, align 8, !tbaa !5
  %126 = load i64, ptr %20, align 8, !tbaa !9
  %127 = add nsw i64 %126, 1
  store i64 %127, ptr %20, align 8, !tbaa !9
  %128 = getelementptr inbounds i64, ptr %125, i64 %126
  store i64 %124, ptr %128, align 8, !tbaa !9
  %129 = load ptr, ptr %35, align 8, !tbaa !5
  %130 = load i64, ptr %11, align 8, !tbaa !9
  %131 = getelementptr inbounds i64, ptr %129, i64 %130
  store i64 1, ptr %131, align 8, !tbaa !9
  %132 = load ptr, ptr %31, align 8, !tbaa !5
  %133 = load i64, ptr %11, align 8, !tbaa !9
  %134 = getelementptr inbounds i64, ptr %132, i64 %133
  %135 = load i64, ptr %134, align 8, !tbaa !9
  store i64 %135, ptr %16, align 8, !tbaa !9
  %136 = load ptr, ptr %40, align 8, !tbaa !5
  %137 = load i64, ptr %16, align 8, !tbaa !9
  %138 = getelementptr inbounds i64, ptr %136, i64 %137
  %139 = load i64, ptr %138, align 8, !tbaa !9
  %140 = add nsw i64 %139, 1
  store i64 %140, ptr %138, align 8, !tbaa !9
  br label %141

141:                                              ; preds = %115, %111
  %142 = load ptr, ptr %38, align 8, !tbaa !5
  %143 = load i64, ptr %19, align 8, !tbaa !9
  %144 = add nsw i64 %143, 1
  store i64 %144, ptr %19, align 8, !tbaa !9
  %145 = getelementptr inbounds i64, ptr %142, i64 %143
  %146 = load i64, ptr %145, align 8, !tbaa !9
  store i64 %146, ptr %11, align 8, !tbaa !9
  %147 = load ptr, ptr %36, align 8, !tbaa !5
  %148 = load i64, ptr %11, align 8, !tbaa !9
  %149 = getelementptr inbounds i64, ptr %147, i64 %148
  %150 = load i64, ptr %149, align 8, !tbaa !9
  store i64 %150, ptr %15, align 8, !tbaa !9
  %151 = load ptr, ptr %37, align 8, !tbaa !5
  %152 = load i64, ptr %21, align 8, !tbaa !9
  %153 = add nsw i64 %152, -1
  store i64 %153, ptr %21, align 8, !tbaa !9
  %154 = getelementptr inbounds i64, ptr %151, i64 %153
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = load ptr, ptr %37, align 8, !tbaa !5
  %157 = load i64, ptr %15, align 8, !tbaa !9
  %158 = getelementptr inbounds i64, ptr %156, i64 %157
  store i64 %155, ptr %158, align 8, !tbaa !9
  store i64 %155, ptr %13, align 8, !tbaa !9
  %159 = load i64, ptr %15, align 8, !tbaa !9
  %160 = load ptr, ptr %36, align 8, !tbaa !5
  %161 = load i64, ptr %13, align 8, !tbaa !9
  %162 = getelementptr inbounds i64, ptr %160, i64 %161
  store i64 %159, ptr %162, align 8, !tbaa !9
  %163 = load ptr, ptr %27, align 8, !tbaa !5
  %164 = load i64, ptr %11, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !9
  store i64 %166, ptr %13, align 8, !tbaa !9
  br label %167

167:                                              ; preds = %202, %141
  %168 = load i64, ptr %13, align 8, !tbaa !9
  %169 = load ptr, ptr %27, align 8, !tbaa !5
  %170 = load i64, ptr %11, align 8, !tbaa !9
  %171 = add nsw i64 %170, 1
  %172 = getelementptr inbounds i64, ptr %169, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = icmp slt i64 %168, %173
  br i1 %174, label %175, label %205

175:                                              ; preds = %167
  %176 = load ptr, ptr %28, align 8, !tbaa !5
  %177 = load i64, ptr %13, align 8, !tbaa !9
  %178 = getelementptr inbounds i64, ptr %176, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !9
  store i64 %179, ptr %15, align 8, !tbaa !9
  %180 = load ptr, ptr %31, align 8, !tbaa !5
  %181 = load i64, ptr %15, align 8, !tbaa !9
  %182 = getelementptr inbounds i64, ptr %180, i64 %181
  %183 = load i64, ptr %182, align 8, !tbaa !9
  %184 = load i64, ptr %16, align 8, !tbaa !9
  %185 = icmp eq i64 %183, %184
  br i1 %185, label %186, label %201

186:                                              ; preds = %175
  %187 = load ptr, ptr %35, align 8, !tbaa !5
  %188 = load i64, ptr %15, align 8, !tbaa !9
  %189 = getelementptr inbounds i64, ptr %187, i64 %188
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = icmp ne i64 %190, 0
  br i1 %191, label %201, label %192

192:                                              ; preds = %186
  %193 = load i64, ptr %15, align 8, !tbaa !9
  %194 = load ptr, ptr %38, align 8, !tbaa !5
  %195 = load i64, ptr %20, align 8, !tbaa !9
  %196 = add nsw i64 %195, 1
  store i64 %196, ptr %20, align 8, !tbaa !9
  %197 = getelementptr inbounds i64, ptr %194, i64 %195
  store i64 %193, ptr %197, align 8, !tbaa !9
  %198 = load ptr, ptr %35, align 8, !tbaa !5
  %199 = load i64, ptr %15, align 8, !tbaa !9
  %200 = getelementptr inbounds i64, ptr %198, i64 %199
  store i64 1, ptr %200, align 8, !tbaa !9
  br label %201

201:                                              ; preds = %192, %186, %175
  br label %202

202:                                              ; preds = %201
  %203 = load i64, ptr %13, align 8, !tbaa !9
  %204 = add nsw i64 %203, 1
  store i64 %204, ptr %13, align 8, !tbaa !9
  br label %167, !llvm.loop !24

205:                                              ; preds = %167
  br label %108, !llvm.loop !25

206:                                              ; preds = %108
  %207 = load i64, ptr %19, align 8, !tbaa !9
  %208 = load ptr, ptr %39, align 8, !tbaa !5
  %209 = load i64, ptr %22, align 8, !tbaa !9
  %210 = add nsw i64 %209, 1
  store i64 %210, ptr %22, align 8, !tbaa !9
  %211 = getelementptr inbounds i64, ptr %208, i64 %210
  store i64 %207, ptr %211, align 8, !tbaa !9
  %212 = load i64, ptr %22, align 8, !tbaa !9
  %213 = load i64, ptr %8, align 8, !tbaa !9
  %214 = icmp sgt i64 %212, %213
  br i1 %214, label %215, label %441

215:                                              ; preds = %206
  %216 = load i64, ptr %8, align 8, !tbaa !9
  %217 = load ptr, ptr %32, align 8, !tbaa !5
  %218 = call i64 @libmetis__idxsum(i64 noundef %216, ptr noundef %217, i64 noundef 1)
  store i64 %218, ptr %18, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %219

219:                                              ; preds = %237, %215
  %220 = load i64, ptr %11, align 8, !tbaa !9
  %221 = load i64, ptr %8, align 8, !tbaa !9
  %222 = icmp slt i64 %220, %221
  br i1 %222, label %223, label %240

223:                                              ; preds = %219
  %224 = load float, ptr %10, align 4, !tbaa !11
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = load i64, ptr %11, align 8, !tbaa !9
  %227 = getelementptr inbounds float, ptr %225, i64 %226
  %228 = load float, ptr %227, align 4, !tbaa !11
  %229 = fmul float %224, %228
  %230 = load i64, ptr %18, align 8, !tbaa !9
  %231 = sitofp i64 %230 to float
  %232 = fmul float %229, %231
  %233 = fptosi float %232 to i64
  %234 = load ptr, ptr %33, align 8, !tbaa !5
  %235 = load i64, ptr %11, align 8, !tbaa !9
  %236 = getelementptr inbounds i64, ptr %234, i64 %235
  store i64 %233, ptr %236, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %223
  %238 = load i64, ptr %11, align 8, !tbaa !9
  %239 = add nsw i64 %238, 1
  store i64 %239, ptr %11, align 8, !tbaa !9
  br label %219, !llvm.loop !26

240:                                              ; preds = %219
  store i64 5, ptr %26, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %241

241:                                              ; preds = %437, %240
  %242 = load i64, ptr %11, align 8, !tbaa !9
  %243 = load i64, ptr %22, align 8, !tbaa !9
  %244 = icmp slt i64 %242, %243
  br i1 %244, label %245, label %440

245:                                              ; preds = %241
  %246 = load ptr, ptr %31, align 8, !tbaa !5
  %247 = load ptr, ptr %38, align 8, !tbaa !5
  %248 = load ptr, ptr %39, align 8, !tbaa !5
  %249 = load i64, ptr %11, align 8, !tbaa !9
  %250 = getelementptr inbounds i64, ptr %248, i64 %249
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = getelementptr inbounds i64, ptr %247, i64 %251
  %253 = load i64, ptr %252, align 8, !tbaa !9
  %254 = getelementptr inbounds i64, ptr %246, i64 %253
  %255 = load i64, ptr %254, align 8, !tbaa !9
  store i64 %255, ptr %16, align 8, !tbaa !9
  %256 = load ptr, ptr %40, align 8, !tbaa !5
  %257 = load i64, ptr %16, align 8, !tbaa !9
  %258 = getelementptr inbounds i64, ptr %256, i64 %257
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = icmp eq i64 %259, 1
  br i1 %260, label %261, label %262

261:                                              ; preds = %245
  br label %437

262:                                              ; preds = %245
  store i64 0, ptr %23, align 8, !tbaa !9
  %263 = load ptr, ptr %39, align 8, !tbaa !5
  %264 = load i64, ptr %11, align 8, !tbaa !9
  %265 = getelementptr inbounds i64, ptr %263, i64 %264
  %266 = load i64, ptr %265, align 8, !tbaa !9
  store i64 %266, ptr %13, align 8, !tbaa !9
  br label %267

267:                                              ; preds = %285, %262
  %268 = load i64, ptr %13, align 8, !tbaa !9
  %269 = load ptr, ptr %39, align 8, !tbaa !5
  %270 = load i64, ptr %11, align 8, !tbaa !9
  %271 = add nsw i64 %270, 1
  %272 = getelementptr inbounds i64, ptr %269, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !9
  %274 = icmp slt i64 %268, %273
  br i1 %274, label %275, label %288

275:                                              ; preds = %267
  %276 = load ptr, ptr %29, align 8, !tbaa !5
  %277 = load ptr, ptr %38, align 8, !tbaa !5
  %278 = load i64, ptr %13, align 8, !tbaa !9
  %279 = getelementptr inbounds i64, ptr %277, i64 %278
  %280 = load i64, ptr %279, align 8, !tbaa !9
  %281 = getelementptr inbounds i64, ptr %276, i64 %280
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = load i64, ptr %23, align 8, !tbaa !9
  %284 = add nsw i64 %283, %282
  store i64 %284, ptr %23, align 8, !tbaa !9
  br label %285

285:                                              ; preds = %275
  %286 = load i64, ptr %13, align 8, !tbaa !9
  %287 = add nsw i64 %286, 1
  store i64 %287, ptr %13, align 8, !tbaa !9
  br label %267, !llvm.loop !27

288:                                              ; preds = %267
  %289 = load i64, ptr %23, align 8, !tbaa !9
  %290 = sitofp i64 %289 to double
  %291 = load ptr, ptr %32, align 8, !tbaa !5
  %292 = load i64, ptr %16, align 8, !tbaa !9
  %293 = getelementptr inbounds i64, ptr %291, i64 %292
  %294 = load i64, ptr %293, align 8, !tbaa !9
  %295 = sitofp i64 %294 to double
  %296 = fmul double 3.000000e-01, %295
  %297 = fcmp ogt double %290, %296
  br i1 %297, label %298, label %299

298:                                              ; preds = %288
  br label %437

299:                                              ; preds = %288
  %300 = load i64, ptr %8, align 8, !tbaa !9
  %301 = load ptr, ptr %34, align 8, !tbaa !5
  %302 = call ptr @libmetis__idxset(i64 noundef %300, i64 noundef 0, ptr noundef %301)
  %303 = load ptr, ptr %39, align 8, !tbaa !5
  %304 = load i64, ptr %11, align 8, !tbaa !9
  %305 = getelementptr inbounds i64, ptr %303, i64 %304
  %306 = load i64, ptr %305, align 8, !tbaa !9
  store i64 %306, ptr %13, align 8, !tbaa !9
  br label %307

307:                                              ; preds = %352, %299
  %308 = load i64, ptr %13, align 8, !tbaa !9
  %309 = load ptr, ptr %39, align 8, !tbaa !5
  %310 = load i64, ptr %11, align 8, !tbaa !9
  %311 = add nsw i64 %310, 1
  %312 = getelementptr inbounds i64, ptr %309, i64 %311
  %313 = load i64, ptr %312, align 8, !tbaa !9
  %314 = icmp slt i64 %308, %313
  br i1 %314, label %315, label %355

315:                                              ; preds = %307
  %316 = load ptr, ptr %38, align 8, !tbaa !5
  %317 = load i64, ptr %13, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !9
  store i64 %319, ptr %12, align 8, !tbaa !9
  %320 = load ptr, ptr %27, align 8, !tbaa !5
  %321 = load i64, ptr %12, align 8, !tbaa !9
  %322 = getelementptr inbounds i64, ptr %320, i64 %321
  %323 = load i64, ptr %322, align 8, !tbaa !9
  store i64 %323, ptr %14, align 8, !tbaa !9
  br label %324

324:                                              ; preds = %348, %315
  %325 = load i64, ptr %14, align 8, !tbaa !9
  %326 = load ptr, ptr %27, align 8, !tbaa !5
  %327 = load i64, ptr %12, align 8, !tbaa !9
  %328 = add nsw i64 %327, 1
  %329 = getelementptr inbounds i64, ptr %326, i64 %328
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = icmp slt i64 %325, %330
  br i1 %331, label %332, label %351

332:                                              ; preds = %324
  %333 = load ptr, ptr %30, align 8, !tbaa !5
  %334 = load i64, ptr %14, align 8, !tbaa !9
  %335 = getelementptr inbounds i64, ptr %333, i64 %334
  %336 = load i64, ptr %335, align 8, !tbaa !9
  %337 = load ptr, ptr %34, align 8, !tbaa !5
  %338 = load ptr, ptr %31, align 8, !tbaa !5
  %339 = load ptr, ptr %28, align 8, !tbaa !5
  %340 = load i64, ptr %14, align 8, !tbaa !9
  %341 = getelementptr inbounds i64, ptr %339, i64 %340
  %342 = load i64, ptr %341, align 8, !tbaa !9
  %343 = getelementptr inbounds i64, ptr %338, i64 %342
  %344 = load i64, ptr %343, align 8, !tbaa !9
  %345 = getelementptr inbounds i64, ptr %337, i64 %344
  %346 = load i64, ptr %345, align 8, !tbaa !9
  %347 = add nsw i64 %346, %336
  store i64 %347, ptr %345, align 8, !tbaa !9
  br label %348

348:                                              ; preds = %332
  %349 = load i64, ptr %14, align 8, !tbaa !9
  %350 = add nsw i64 %349, 1
  store i64 %350, ptr %14, align 8, !tbaa !9
  br label %324, !llvm.loop !28

351:                                              ; preds = %324
  br label %352

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

355:                                              ; preds = %307
  %356 = load ptr, ptr %34, align 8, !tbaa !5
  %357 = load i64, ptr %16, align 8, !tbaa !9
  %358 = getelementptr inbounds i64, ptr %356, i64 %357
  store i64 0, ptr %358, align 8, !tbaa !9
  store i64 -1, ptr %25, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %359

359:                                              ; preds = %402, %355
  %360 = load i64, ptr %13, align 8, !tbaa !9
  %361 = load i64, ptr %8, align 8, !tbaa !9
  %362 = icmp slt i64 %360, %361
  br i1 %362, label %363, label %405

363:                                              ; preds = %359
  %364 = load ptr, ptr %34, align 8, !tbaa !5
  %365 = load i64, ptr %13, align 8, !tbaa !9
  %366 = getelementptr inbounds i64, ptr %364, i64 %365
  %367 = load i64, ptr %366, align 8, !tbaa !9
  %368 = icmp sgt i64 %367, 0
  br i1 %368, label %369, label %401

369:                                              ; preds = %363
  %370 = load i64, ptr %23, align 8, !tbaa !9
  %371 = load i64, ptr %26, align 8, !tbaa !9
  %372 = icmp slt i64 %370, %371
  br i1 %372, label %385, label %373

373:                                              ; preds = %369
  %374 = load ptr, ptr %32, align 8, !tbaa !5
  %375 = load i64, ptr %13, align 8, !tbaa !9
  %376 = getelementptr inbounds i64, ptr %374, i64 %375
  %377 = load i64, ptr %376, align 8, !tbaa !9
  %378 = load i64, ptr %23, align 8, !tbaa !9
  %379 = add nsw i64 %377, %378
  %380 = load ptr, ptr %33, align 8, !tbaa !5
  %381 = load i64, ptr %13, align 8, !tbaa !9
  %382 = getelementptr inbounds i64, ptr %380, i64 %381
  %383 = load i64, ptr %382, align 8, !tbaa !9
  %384 = icmp slt i64 %379, %383
  br i1 %384, label %385, label %401

385:                                              ; preds = %373, %369
  %386 = load i64, ptr %25, align 8, !tbaa !9
  %387 = icmp eq i64 %386, -1
  br i1 %387, label %398, label %388

388:                                              ; preds = %385
  %389 = load ptr, ptr %34, align 8, !tbaa !5
  %390 = load i64, ptr %25, align 8, !tbaa !9
  %391 = getelementptr inbounds i64, ptr %389, i64 %390
  %392 = load i64, ptr %391, align 8, !tbaa !9
  %393 = load ptr, ptr %34, align 8, !tbaa !5
  %394 = load i64, ptr %13, align 8, !tbaa !9
  %395 = getelementptr inbounds i64, ptr %393, i64 %394
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = icmp slt i64 %392, %396
  br i1 %397, label %398, label %400

398:                                              ; preds = %388, %385
  %399 = load i64, ptr %13, align 8, !tbaa !9
  store i64 %399, ptr %25, align 8, !tbaa !9
  br label %400

400:                                              ; preds = %398, %388
  br label %401

401:                                              ; preds = %400, %373, %363
  br label %402

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

405:                                              ; preds = %359
  %406 = load i64, ptr %25, align 8, !tbaa !9
  %407 = icmp ne i64 %406, -1
  br i1 %407, label %408, label %436

408:                                              ; preds = %405
  br label %409

409:                                              ; preds = %408
  %410 = load i64, ptr %23, align 8, !tbaa !9
  %411 = load ptr, ptr %32, align 8, !tbaa !5
  %412 = load i64, ptr %25, align 8, !tbaa !9
  %413 = getelementptr inbounds i64, ptr %411, i64 %412
  %414 = load i64, ptr %413, align 8, !tbaa !9
  %415 = add nsw i64 %414, %410
  store i64 %415, ptr %413, align 8, !tbaa !9
  %416 = load i64, ptr %23, align 8, !tbaa !9
  %417 = load ptr, ptr %32, align 8, !tbaa !5
  %418 = load i64, ptr %16, align 8, !tbaa !9
  %419 = getelementptr inbounds i64, ptr %417, i64 %418
  %420 = load i64, ptr %419, align 8, !tbaa !9
  %421 = sub nsw i64 %420, %416
  store i64 %421, ptr %419, align 8, !tbaa !9
  br label %422

422:                                              ; preds = %409
  br label %423

423:                                              ; preds = %422
  %424 = load ptr, ptr %40, align 8, !tbaa !5
  %425 = load i64, ptr %16, align 8, !tbaa !9
  %426 = getelementptr inbounds i64, ptr %424, i64 %425
  %427 = load i64, ptr %426, align 8, !tbaa !9
  %428 = add nsw i64 %427, -1
  store i64 %428, ptr %426, align 8, !tbaa !9
  %429 = load ptr, ptr %6, align 8, !tbaa !5
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = load i64, ptr %8, align 8, !tbaa !9
  %432 = load i64, ptr %25, align 8, !tbaa !9
  %433 = load i64, ptr %11, align 8, !tbaa !9
  %434 = load ptr, ptr %39, align 8, !tbaa !5
  %435 = load ptr, ptr %38, align 8, !tbaa !5
  call void @libmetis__MoveGroup(ptr noundef %429, ptr noundef %430, i64 noundef %431, i64 noundef %432, i64 noundef %433, ptr noundef %434, ptr noundef %435)
  br label %436

436:                                              ; preds = %423, %405
  br label %437

437:                                              ; preds = %436, %298, %261
  %438 = load i64, ptr %11, align 8, !tbaa !9
  %439 = add nsw i64 %438, 1
  store i64 %439, ptr %11, align 8, !tbaa !9
  br label %241, !llvm.loop !31

440:                                              ; preds = %241
  br label %441

441:                                              ; preds = %440, %206
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %442, i64 noundef %443)
  %444 = load ptr, ptr %6, align 8, !tbaa !5
  %445 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %444, i64 noundef %445)
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %446, i64 noundef %447)
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %448, i64 noundef %449)
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %450, i64 noundef %451)
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %452, i64 noundef %453)
  %454 = load ptr, ptr %6, align 8, !tbaa !5
  %455 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %454, i64 noundef %455)
  %456 = load ptr, ptr %6, align 8, !tbaa !5
  %457 = load i64, ptr %17, align 8, !tbaa !9
  %458 = add nsw i64 %457, 1
  call void @libmetis__idxwspacefree(ptr noundef %456, i64 noundef %458)
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  ret void
}

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

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 = { 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, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !15, i64 56, !15, i64 60, !15, i64 64, !15, i64 68, !15, 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}
!15 = !{!"int", !7, i64 0}
!16 = !{!14, !6, i64 16}
!17 = !{!14, !6, i64 40}
!18 = !{!14, !6, i64 24}
!19 = !{!14, !6, i64 48}
!20 = !{!14, !6, i64 128}
!21 = !{!14, !6, i64 136}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !23}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}


; 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 ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__EliminateComponents(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr nocapture noundef readonly %3, float noundef %4) local_unnamed_addr #1 {
  %6 = load i64, ptr %1, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 16
  %8 = load ptr, ptr %7, align 8, !tbaa !12
  %9 = getelementptr inbounds i8, ptr %1, i64 40
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %1, i64 24
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %1, i64 48
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %1, i64 128
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %1, i64 136
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #2
  %20 = tail call ptr @libmetis__idxset(i64 noundef %6, i64 noundef 0, ptr noundef %19) #2
  %21 = add nsw i64 %6, 1
  %22 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %21) #2
  %23 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #2
  %24 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #2
  %25 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #2
  %26 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #2
  %27 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #2
  %28 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #2
  %29 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef 0, ptr noundef %28) #2
  %30 = icmp sgt i64 %6, 0
  br i1 %30, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %5
  %31 = ptrtoint ptr %25 to i64
  %32 = ptrtoint ptr %24 to i64
  %min.iters.check = icmp ult i64 %6, 6
  %33 = sub i64 %32, %31
  %diff.check = icmp ult i64 %33, 32
  %or.cond = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond, label %.lr.ph.preheader282, label %vector.ph

.lr.ph.preheader282:                              ; preds = %middle.block, %.lr.ph.preheader
  %.0216.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %6, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader282, %.lr.ph.prol
  %.0216.prol = phi i64 [ %36, %.lr.ph.prol ], [ %.0216.ph, %.lr.ph.preheader282 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader282 ]
  %34 = getelementptr inbounds i64, ptr %25, i64 %.0216.prol
  store i64 %.0216.prol, ptr %34, align 8, !tbaa !18
  %35 = getelementptr inbounds i64, ptr %24, i64 %.0216.prol
  store i64 %.0216.prol, ptr %35, align 8, !tbaa !18
  %36 = add nuw nsw i64 %.0216.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !19

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader282
  %.0216.unr = phi i64 [ %.0216.ph, %.lr.ph.preheader282 ], [ %36, %.lr.ph.prol ]
  %37 = sub nsw i64 %.0216.ph, %6
  %38 = icmp ugt i64 %37, -4
  br i1 %38, label %.preheader215, label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %6, 9223372036854775804
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <2 x i64> %vec.ind, <i64 2, i64 2>
  %39 = getelementptr inbounds i64, ptr %25, i64 %index
  %40 = getelementptr inbounds i8, ptr %39, i64 16
  store <2 x i64> %vec.ind, ptr %39, align 8, !tbaa !18
  store <2 x i64> %step.add, ptr %40, align 8, !tbaa !18
  %41 = getelementptr inbounds i64, ptr %24, i64 %index
  %42 = getelementptr inbounds i8, ptr %41, i64 16
  store <2 x i64> %vec.ind, ptr %41, align 8, !tbaa !18
  store <2 x i64> %step.add, ptr %42, align 8, !tbaa !18
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <2 x i64> %vec.ind, <i64 4, i64 4>
  %43 = icmp eq i64 %index.next, %n.vec
  br i1 %43, label %middle.block, label %vector.body, !llvm.loop !21

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %6, %n.vec
  br i1 %cmp.n, label %.preheader215, label %.lr.ph.preheader282

.preheader215:                                    ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block
  br i1 %30, label %.lr.ph225, label %._crit_edge

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.0216 = phi i64 [ %55, %.lr.ph ], [ %.0216.unr, %.lr.ph.prol.loopexit ]
  %44 = getelementptr inbounds i64, ptr %25, i64 %.0216
  store i64 %.0216, ptr %44, align 8, !tbaa !18
  %45 = getelementptr inbounds i64, ptr %24, i64 %.0216
  store i64 %.0216, ptr %45, align 8, !tbaa !18
  %46 = add nuw nsw i64 %.0216, 1
  %47 = getelementptr inbounds i64, ptr %25, i64 %46
  store i64 %46, ptr %47, align 8, !tbaa !18
  %48 = getelementptr inbounds i64, ptr %24, i64 %46
  store i64 %46, ptr %48, align 8, !tbaa !18
  %49 = add nuw nsw i64 %.0216, 2
  %50 = getelementptr inbounds i64, ptr %25, i64 %49
  store i64 %49, ptr %50, align 8, !tbaa !18
  %51 = getelementptr inbounds i64, ptr %24, i64 %49
  store i64 %49, ptr %51, align 8, !tbaa !18
  %52 = add nuw nsw i64 %.0216, 3
  %53 = getelementptr inbounds i64, ptr %25, i64 %52
  store i64 %52, ptr %53, align 8, !tbaa !18
  %54 = getelementptr inbounds i64, ptr %24, i64 %52
  store i64 %52, ptr %54, align 8, !tbaa !18
  %55 = add nuw nsw i64 %.0216, 4
  %exitcond.not.3 = icmp eq i64 %55, %6
  br i1 %exitcond.not.3, label %.preheader215, label %.lr.ph, !llvm.loop !25

.loopexit214:                                     ; preds = %96, %69
  %.2199.lcssa = phi i64 [ %.1198, %69 ], [ %.3200, %96 ]
  %exitcond255.not = icmp eq i64 %.pre-phi, %6
  br i1 %exitcond255.not, label %._crit_edge, label %.lr.ph225, !llvm.loop !26

.lr.ph225:                                        ; preds = %.preheader215, %.loopexit214
  %.0194224 = phi i64 [ %.1195, %.loopexit214 ], [ undef, %.preheader215 ]
  %.0196223 = phi i64 [ %.pre-phi, %.loopexit214 ], [ 0, %.preheader215 ]
  %.0197222 = phi i64 [ %.2199.lcssa, %.loopexit214 ], [ 0, %.preheader215 ]
  %.0201221 = phi i64 [ %74, %.loopexit214 ], [ %6, %.preheader215 ]
  %.0202220 = phi i64 [ %.1203, %.loopexit214 ], [ -1, %.preheader215 ]
  %56 = icmp eq i64 %.0196223, %.0197222
  br i1 %56, label %57, label %.lr.ph225._crit_edge

.lr.ph225._crit_edge:                             ; preds = %.lr.ph225
  %.pre262 = add nuw nsw i64 %.0196223, 1
  br label %69

57:                                               ; preds = %.lr.ph225
  %58 = add nsw i64 %.0202220, 1
  %59 = getelementptr inbounds i64, ptr %22, i64 %58
  store i64 %.0196223, ptr %59, align 8, !tbaa !18
  %60 = load i64, ptr %25, align 8, !tbaa !18
  %61 = add nsw i64 %.0196223, 1
  %62 = getelementptr inbounds i64, ptr %23, i64 %.0196223
  store i64 %60, ptr %62, align 8, !tbaa !18
  %63 = getelementptr inbounds i64, ptr %20, i64 %60
  store i64 1, ptr %63, align 8, !tbaa !18
  %64 = getelementptr inbounds i64, ptr %16, i64 %60
  %65 = load i64, ptr %64, align 8, !tbaa !18
  %66 = getelementptr inbounds i64, ptr %29, i64 %65
  %67 = load i64, ptr %66, align 8, !tbaa !18
  %68 = add nsw i64 %67, 1
  store i64 %68, ptr %66, align 8, !tbaa !18
  br label %69

69:                                               ; preds = %.lr.ph225._crit_edge, %57
  %.pre-phi = phi i64 [ %.pre262, %.lr.ph225._crit_edge ], [ %61, %57 ]
  %.1203 = phi i64 [ %.0202220, %.lr.ph225._crit_edge ], [ %58, %57 ]
  %.1198 = phi i64 [ %.0197222, %.lr.ph225._crit_edge ], [ %61, %57 ]
  %.1195 = phi i64 [ %.0194224, %.lr.ph225._crit_edge ], [ %65, %57 ]
  %70 = getelementptr inbounds i64, ptr %23, i64 %.0196223
  %71 = load i64, ptr %70, align 8, !tbaa !18
  %72 = getelementptr inbounds i64, ptr %24, i64 %71
  %73 = load i64, ptr %72, align 8, !tbaa !18
  %74 = add nsw i64 %.0201221, -1
  %75 = getelementptr inbounds i64, ptr %25, i64 %74
  %76 = load i64, ptr %75, align 8, !tbaa !18
  %77 = getelementptr inbounds i64, ptr %25, i64 %73
  store i64 %76, ptr %77, align 8, !tbaa !18
  %78 = getelementptr inbounds i64, ptr %24, i64 %76
  store i64 %73, ptr %78, align 8, !tbaa !18
  %79 = getelementptr inbounds i64, ptr %8, i64 %71
  %80 = load i64, ptr %79, align 8, !tbaa !18
  %81 = getelementptr i8, ptr %79, i64 8
  %82 = load i64, ptr %81, align 8, !tbaa !18
  %83 = icmp slt i64 %80, %82
  br i1 %83, label %.lr.ph219, label %.loopexit214

.lr.ph219:                                        ; preds = %69, %96
  %84 = phi i64 [ %97, %96 ], [ %82, %69 ]
  %.0190218 = phi i64 [ %98, %96 ], [ %80, %69 ]
  %.2199217 = phi i64 [ %.3200, %96 ], [ %.1198, %69 ]
  %85 = getelementptr inbounds i64, ptr %10, i64 %.0190218
  %86 = load i64, ptr %85, align 8, !tbaa !18
  %87 = getelementptr inbounds i64, ptr %16, i64 %86
  %88 = load i64, ptr %87, align 8, !tbaa !18
  %89 = icmp eq i64 %88, %.1195
  br i1 %89, label %90, label %96

90:                                               ; preds = %.lr.ph219
  %91 = getelementptr inbounds i64, ptr %20, i64 %86
  %92 = load i64, ptr %91, align 8, !tbaa !18
  %.not212 = icmp eq i64 %92, 0
  br i1 %.not212, label %93, label %96

93:                                               ; preds = %90
  %94 = add nsw i64 %.2199217, 1
  %95 = getelementptr inbounds i64, ptr %23, i64 %.2199217
  store i64 %86, ptr %95, align 8, !tbaa !18
  store i64 1, ptr %91, align 8, !tbaa !18
  %.pre = load i64, ptr %81, align 8, !tbaa !18
  br label %96

96:                                               ; preds = %.lr.ph219, %90, %93
  %97 = phi i64 [ %84, %90 ], [ %.pre, %93 ], [ %84, %.lr.ph219 ]
  %.3200 = phi i64 [ %.2199217, %90 ], [ %94, %93 ], [ %.2199217, %.lr.ph219 ]
  %98 = add nsw i64 %.0190218, 1
  %99 = icmp slt i64 %98, %97
  br i1 %99, label %.lr.ph219, label %.loopexit214, !llvm.loop !27

._crit_edge:                                      ; preds = %.loopexit214, %5, %.preheader215
  %.0202.lcssa = phi i64 [ -1, %.preheader215 ], [ -1, %5 ], [ %.1203, %.loopexit214 ]
  %.0196.lcssa = phi i64 [ 0, %.preheader215 ], [ 0, %5 ], [ %6, %.loopexit214 ]
  %100 = getelementptr i64, ptr %22, i64 %.0202.lcssa
  %101 = getelementptr i8, ptr %100, i64 8
  store i64 %.0196.lcssa, ptr %101, align 8, !tbaa !18
  %.not = icmp slt i64 %.0202.lcssa, %2
  br i1 %.not, label %.loopexit, label %102

102:                                              ; preds = %._crit_edge
  %103 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %18, i64 noundef 1) #2
  %104 = icmp sgt i64 %2, 0
  br i1 %104, label %.lr.ph230, label %.preheader213

.lr.ph230:                                        ; preds = %102
  %105 = sitofp i64 %103 to float
  %min.iters.check270 = icmp eq i64 %2, 1
  br i1 %min.iters.check270, label %scalar.ph269.preheader, label %vector.ph271

scalar.ph269.preheader:                           ; preds = %middle.block268, %.lr.ph230
  %.1228.ph = phi i64 [ 0, %.lr.ph230 ], [ %n.vec273, %middle.block268 ]
  br label %scalar.ph269

vector.ph271:                                     ; preds = %.lr.ph230
  %n.vec273 = and i64 %2, 9223372036854775806
  %broadcast.splatinsert = insertelement <2 x float> poison, float %4, i64 0
  %broadcast.splat = shufflevector <2 x float> %broadcast.splatinsert, <2 x float> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert277 = insertelement <2 x float> poison, float %105, i64 0
  %broadcast.splat278 = shufflevector <2 x float> %broadcast.splatinsert277, <2 x float> poison, <2 x i32> zeroinitializer
  br label %vector.body275

vector.body275:                                   ; preds = %vector.body275, %vector.ph271
  %index276 = phi i64 [ 0, %vector.ph271 ], [ %index.next279, %vector.body275 ]
  %106 = getelementptr inbounds float, ptr %3, i64 %index276
  %wide.load = load <2 x float>, ptr %106, align 4, !tbaa !28
  %107 = fmul <2 x float> %wide.load, %broadcast.splat
  %108 = fmul <2 x float> %107, %broadcast.splat278
  %109 = fptosi <2 x float> %108 to <2 x i64>
  %110 = getelementptr inbounds i64, ptr %26, i64 %index276
  store <2 x i64> %109, ptr %110, align 8, !tbaa !18
  %index.next279 = add nuw i64 %index276, 2
  %111 = icmp eq i64 %index.next279, %n.vec273
  br i1 %111, label %middle.block268, label %vector.body275, !llvm.loop !30

middle.block268:                                  ; preds = %vector.body275
  %cmp.n280 = icmp eq i64 %n.vec273, %2
  br i1 %cmp.n280, label %.preheader213, label %scalar.ph269.preheader

.preheader213:                                    ; preds = %scalar.ph269, %middle.block268, %102
  %.not210250 = icmp slt i64 %.0202.lcssa, 0
  br i1 %.not210250, label %.loopexit, label %.lr.ph252.preheader

.lr.ph252.preheader:                              ; preds = %.preheader213
  %invariant.gep = getelementptr i8, ptr %23, i64 8
  %invariant.gep297 = getelementptr i8, ptr %23, i64 16
  %invariant.gep299 = getelementptr i8, ptr %23, i64 24
  %xtraiter286 = and i64 %2, 1
  %112 = icmp eq i64 %2, 1
  %unroll_iter290 = and i64 %2, 9223372036854775806
  %lcmp.mod288.not = icmp eq i64 %xtraiter286, 0
  br label %.lr.ph252

scalar.ph269:                                     ; preds = %scalar.ph269.preheader, %scalar.ph269
  %.1228 = phi i64 [ %119, %scalar.ph269 ], [ %.1228.ph, %scalar.ph269.preheader ]
  %113 = getelementptr inbounds float, ptr %3, i64 %.1228
  %114 = load float, ptr %113, align 4, !tbaa !28
  %115 = fmul float %114, %4
  %116 = fmul float %115, %105
  %117 = fptosi float %116 to i64
  %118 = getelementptr inbounds i64, ptr %26, i64 %.1228
  store i64 %117, ptr %118, align 8, !tbaa !18
  %119 = add nuw nsw i64 %.1228, 1
  %exitcond256.not = icmp eq i64 %119, %2
  br i1 %exitcond256.not, label %.preheader213, label %scalar.ph269, !llvm.loop !31

.lr.ph252:                                        ; preds = %.lr.ph252.preheader, %._crit_edge248.thread
  %.2251 = phi i64 [ %255, %._crit_edge248.thread ], [ 0, %.lr.ph252.preheader ]
  %120 = getelementptr inbounds i64, ptr %22, i64 %.2251
  %121 = load i64, ptr %120, align 8, !tbaa !18
  %122 = getelementptr inbounds i64, ptr %23, i64 %121
  %123 = load i64, ptr %122, align 8, !tbaa !18
  %124 = getelementptr inbounds i64, ptr %16, i64 %123
  %125 = load i64, ptr %124, align 8, !tbaa !18
  %126 = getelementptr inbounds i64, ptr %29, i64 %125
  %127 = load i64, ptr %126, align 8, !tbaa !18
  %128 = icmp eq i64 %127, 1
  br i1 %128, label %._crit_edge248.thread, label %.preheader

.preheader:                                       ; preds = %.lr.ph252
  %129 = getelementptr inbounds i8, ptr %120, i64 8
  %130 = load i64, ptr %129, align 8, !tbaa !18
  %131 = icmp slt i64 %121, %130
  br i1 %131, label %.lr.ph233.preheader, label %._crit_edge234

.lr.ph233.preheader:                              ; preds = %.preheader
  %132 = sub i64 %130, %121
  %xtraiter283 = and i64 %132, 3
  %133 = sub i64 %121, %130
  %134 = icmp ugt i64 %133, -4
  br i1 %134, label %._crit_edge234.loopexit.unr-lcssa, label %.lr.ph233.preheader.new

.lr.ph233.preheader.new:                          ; preds = %.lr.ph233.preheader
  %unroll_iter = and i64 %132, -4
  br label %.lr.ph233

.lr.ph233:                                        ; preds = %.lr.ph233, %.lr.ph233.preheader.new
  %.1191232 = phi i64 [ %121, %.lr.ph233.preheader.new ], [ %152, %.lr.ph233 ]
  %.0204231 = phi i64 [ 0, %.lr.ph233.preheader.new ], [ %151, %.lr.ph233 ]
  %niter = phi i64 [ 0, %.lr.ph233.preheader.new ], [ %niter.next.3, %.lr.ph233 ]
  %135 = getelementptr inbounds i64, ptr %23, i64 %.1191232
  %136 = load i64, ptr %135, align 8, !tbaa !18
  %137 = getelementptr inbounds i64, ptr %12, i64 %136
  %138 = load i64, ptr %137, align 8, !tbaa !18
  %139 = add nsw i64 %138, %.0204231
  %gep = getelementptr i64, ptr %invariant.gep, i64 %.1191232
  %140 = load i64, ptr %gep, align 8, !tbaa !18
  %141 = getelementptr inbounds i64, ptr %12, i64 %140
  %142 = load i64, ptr %141, align 8, !tbaa !18
  %143 = add nsw i64 %142, %139
  %gep298 = getelementptr i64, ptr %invariant.gep297, i64 %.1191232
  %144 = load i64, ptr %gep298, align 8, !tbaa !18
  %145 = getelementptr inbounds i64, ptr %12, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !18
  %147 = add nsw i64 %146, %143
  %gep300 = getelementptr i64, ptr %invariant.gep299, i64 %.1191232
  %148 = load i64, ptr %gep300, align 8, !tbaa !18
  %149 = getelementptr inbounds i64, ptr %12, i64 %148
  %150 = load i64, ptr %149, align 8, !tbaa !18
  %151 = add nsw i64 %150, %147
  %152 = add nsw i64 %.1191232, 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_edge234.loopexit.unr-lcssa, label %.lr.ph233, !llvm.loop !32

._crit_edge234.loopexit.unr-lcssa:                ; preds = %.lr.ph233, %.lr.ph233.preheader
  %.lcssa.ph = phi i64 [ poison, %.lr.ph233.preheader ], [ %151, %.lr.ph233 ]
  %.1191232.unr = phi i64 [ %121, %.lr.ph233.preheader ], [ %152, %.lr.ph233 ]
  %.0204231.unr = phi i64 [ 0, %.lr.ph233.preheader ], [ %151, %.lr.ph233 ]
  %lcmp.mod284.not = icmp eq i64 %xtraiter283, 0
  br i1 %lcmp.mod284.not, label %._crit_edge234, label %.lr.ph233.epil

.lr.ph233.epil:                                   ; preds = %._crit_edge234.loopexit.unr-lcssa, %.lr.ph233.epil
  %.1191232.epil = phi i64 [ %158, %.lr.ph233.epil ], [ %.1191232.unr, %._crit_edge234.loopexit.unr-lcssa ]
  %.0204231.epil = phi i64 [ %157, %.lr.ph233.epil ], [ %.0204231.unr, %._crit_edge234.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph233.epil ], [ 0, %._crit_edge234.loopexit.unr-lcssa ]
  %153 = getelementptr inbounds i64, ptr %23, i64 %.1191232.epil
  %154 = load i64, ptr %153, align 8, !tbaa !18
  %155 = getelementptr inbounds i64, ptr %12, i64 %154
  %156 = load i64, ptr %155, align 8, !tbaa !18
  %157 = add nsw i64 %156, %.0204231.epil
  %158 = add nsw i64 %.1191232.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter283
  br i1 %epil.iter.cmp.not, label %._crit_edge234, label %.lr.ph233.epil, !llvm.loop !33

._crit_edge234:                                   ; preds = %._crit_edge234.loopexit.unr-lcssa, %.lr.ph233.epil, %.preheader
  %.0204.lcssa = phi i64 [ 0, %.preheader ], [ %.lcssa.ph, %._crit_edge234.loopexit.unr-lcssa ], [ %157, %.lr.ph233.epil ]
  %.0204.lcssa.fr = freeze i64 %.0204.lcssa
  %159 = sitofp i64 %.0204.lcssa.fr to double
  %160 = getelementptr inbounds i64, ptr %18, i64 %125
  %161 = load i64, ptr %160, align 8, !tbaa !18
  %162 = sitofp i64 %161 to double
  %163 = fmul double %162, 3.000000e-01
  %164 = fcmp olt double %163, %159
  br i1 %164, label %._crit_edge248.thread, label %165

165:                                              ; preds = %._crit_edge234
  %166 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef 0, ptr noundef %27) #2
  %167 = load i64, ptr %120, align 8, !tbaa !18
  %168 = load i64, ptr %129, align 8, !tbaa !18
  %169 = icmp slt i64 %167, %168
  br i1 %169, label %.lr.ph242, label %._crit_edge243

.lr.ph242:                                        ; preds = %165, %._crit_edge239
  %170 = phi i64 [ %190, %._crit_edge239 ], [ %168, %165 ]
  %.2192240 = phi i64 [ %191, %._crit_edge239 ], [ %167, %165 ]
  %171 = getelementptr inbounds i64, ptr %23, i64 %.2192240
  %172 = load i64, ptr %171, align 8, !tbaa !18
  %173 = getelementptr inbounds i64, ptr %8, i64 %172
  %174 = load i64, ptr %173, align 8, !tbaa !18
  %175 = getelementptr i8, ptr %173, i64 8
  %176 = load i64, ptr %175, align 8, !tbaa !18
  %177 = icmp slt i64 %174, %176
  br i1 %177, label %.lr.ph238, label %._crit_edge239

.lr.ph238:                                        ; preds = %.lr.ph242, %.lr.ph238
  %.0193236 = phi i64 [ %187, %.lr.ph238 ], [ %174, %.lr.ph242 ]
  %178 = getelementptr inbounds i64, ptr %14, i64 %.0193236
  %179 = load i64, ptr %178, align 8, !tbaa !18
  %180 = getelementptr inbounds i64, ptr %10, i64 %.0193236
  %181 = load i64, ptr %180, align 8, !tbaa !18
  %182 = getelementptr inbounds i64, ptr %16, i64 %181
  %183 = load i64, ptr %182, align 8, !tbaa !18
  %184 = getelementptr inbounds i64, ptr %27, i64 %183
  %185 = load i64, ptr %184, align 8, !tbaa !18
  %186 = add nsw i64 %185, %179
  store i64 %186, ptr %184, align 8, !tbaa !18
  %187 = add nsw i64 %.0193236, 1
  %188 = load i64, ptr %175, align 8, !tbaa !18
  %189 = icmp slt i64 %187, %188
  br i1 %189, label %.lr.ph238, label %._crit_edge239.loopexit, !llvm.loop !34

._crit_edge239.loopexit:                          ; preds = %.lr.ph238
  %.pre261 = load i64, ptr %129, align 8, !tbaa !18
  br label %._crit_edge239

._crit_edge239:                                   ; preds = %._crit_edge239.loopexit, %.lr.ph242
  %190 = phi i64 [ %.pre261, %._crit_edge239.loopexit ], [ %170, %.lr.ph242 ]
  %191 = add nsw i64 %.2192240, 1
  %192 = icmp slt i64 %191, %190
  br i1 %192, label %.lr.ph242, label %._crit_edge243, !llvm.loop !35

._crit_edge243:                                   ; preds = %._crit_edge239, %165
  %193 = getelementptr inbounds i64, ptr %27, i64 %125
  store i64 0, ptr %193, align 8, !tbaa !18
  br i1 %104, label %.lr.ph247, label %._crit_edge248.thread

.lr.ph247:                                        ; preds = %._crit_edge243
  %194 = icmp slt i64 %.0204.lcssa.fr, 5
  br i1 %194, label %.lr.ph247.split.us.preheader, label %.lr.ph247.split

.lr.ph247.split.us.preheader:                     ; preds = %.lr.ph247
  br i1 %112, label %._crit_edge248.loopexit.unr-lcssa, label %.lr.ph247.split.us

.lr.ph247.split.us:                               ; preds = %.lr.ph247.split.us.preheader, %216
  %.3245.us = phi i64 [ %217, %216 ], [ 0, %.lr.ph247.split.us.preheader ]
  %.0205244.us = phi i64 [ %.1206.us.1, %216 ], [ -1, %.lr.ph247.split.us.preheader ]
  %niter291 = phi i64 [ %niter291.next.1, %216 ], [ 0, %.lr.ph247.split.us.preheader ]
  %195 = getelementptr inbounds i64, ptr %27, i64 %.3245.us
  %196 = load i64, ptr %195, align 8, !tbaa !18
  %197 = icmp sgt i64 %196, 0
  br i1 %197, label %198, label %.lr.ph247.split.us.1

198:                                              ; preds = %.lr.ph247.split.us
  %199 = icmp eq i64 %.0205244.us, -1
  br i1 %199, label %204, label %200

200:                                              ; preds = %198
  %201 = getelementptr inbounds i64, ptr %27, i64 %.0205244.us
  %202 = load i64, ptr %201, align 8, !tbaa !18
  %203 = icmp slt i64 %202, %196
  br i1 %203, label %204, label %.lr.ph247.split.us.1

204:                                              ; preds = %200, %198
  br label %.lr.ph247.split.us.1

.lr.ph247.split.us.1:                             ; preds = %204, %200, %.lr.ph247.split.us
  %.1206.us = phi i64 [ %.3245.us, %204 ], [ %.0205244.us, %200 ], [ %.0205244.us, %.lr.ph247.split.us ]
  %205 = or disjoint i64 %.3245.us, 1
  %206 = getelementptr inbounds i64, ptr %27, i64 %205
  %207 = load i64, ptr %206, align 8, !tbaa !18
  %208 = icmp sgt i64 %207, 0
  br i1 %208, label %209, label %216

209:                                              ; preds = %.lr.ph247.split.us.1
  %210 = icmp eq i64 %.1206.us, -1
  br i1 %210, label %215, label %211

211:                                              ; preds = %209
  %212 = getelementptr inbounds i64, ptr %27, i64 %.1206.us
  %213 = load i64, ptr %212, align 8, !tbaa !18
  %214 = icmp slt i64 %213, %207
  br i1 %214, label %215, label %216

215:                                              ; preds = %211, %209
  br label %216

216:                                              ; preds = %215, %211, %.lr.ph247.split.us.1
  %.1206.us.1 = phi i64 [ %205, %215 ], [ %.1206.us, %211 ], [ %.1206.us, %.lr.ph247.split.us.1 ]
  %217 = add nuw nsw i64 %.3245.us, 2
  %niter291.next.1 = add i64 %niter291, 2
  %niter291.ncmp.1 = icmp eq i64 %niter291.next.1, %unroll_iter290
  br i1 %niter291.ncmp.1, label %._crit_edge248.loopexit.unr-lcssa, label %.lr.ph247.split.us, !llvm.loop !36

.lr.ph247.split:                                  ; preds = %.lr.ph247, %235
  %.3245 = phi i64 [ %236, %235 ], [ 0, %.lr.ph247 ]
  %.0205244 = phi i64 [ %.1206, %235 ], [ -1, %.lr.ph247 ]
  %218 = getelementptr inbounds i64, ptr %27, i64 %.3245
  %219 = load i64, ptr %218, align 8, !tbaa !18
  %220 = icmp sgt i64 %219, 0
  br i1 %220, label %221, label %235

221:                                              ; preds = %.lr.ph247.split
  %222 = getelementptr inbounds i64, ptr %18, i64 %.3245
  %223 = load i64, ptr %222, align 8, !tbaa !18
  %224 = add nsw i64 %223, %.0204.lcssa.fr
  %225 = getelementptr inbounds i64, ptr %26, i64 %.3245
  %226 = load i64, ptr %225, align 8, !tbaa !18
  %227 = icmp slt i64 %224, %226
  br i1 %227, label %228, label %235

228:                                              ; preds = %221
  %229 = icmp eq i64 %.0205244, -1
  br i1 %229, label %234, label %230

230:                                              ; preds = %228
  %231 = getelementptr inbounds i64, ptr %27, i64 %.0205244
  %232 = load i64, ptr %231, align 8, !tbaa !18
  %233 = icmp slt i64 %232, %219
  br i1 %233, label %234, label %235

234:                                              ; preds = %230, %228
  br label %235

235:                                              ; preds = %.lr.ph247.split, %221, %234, %230
  %.1206 = phi i64 [ %.3245, %234 ], [ %.0205244, %230 ], [ %.0205244, %221 ], [ %.0205244, %.lr.ph247.split ]
  %236 = add nuw nsw i64 %.3245, 1
  %exitcond258.not = icmp eq i64 %236, %2
  br i1 %exitcond258.not, label %._crit_edge248, label %.lr.ph247.split, !llvm.loop !36

._crit_edge248.loopexit.unr-lcssa:                ; preds = %216, %.lr.ph247.split.us.preheader
  %.1206.us.lcssa.ph = phi i64 [ poison, %.lr.ph247.split.us.preheader ], [ %.1206.us.1, %216 ]
  %.3245.us.unr = phi i64 [ 0, %.lr.ph247.split.us.preheader ], [ %217, %216 ]
  %.0205244.us.unr = phi i64 [ -1, %.lr.ph247.split.us.preheader ], [ %.1206.us.1, %216 ]
  br i1 %lcmp.mod288.not, label %._crit_edge248, label %.lr.ph247.split.us.epil

.lr.ph247.split.us.epil:                          ; preds = %._crit_edge248.loopexit.unr-lcssa
  %237 = getelementptr inbounds i64, ptr %27, i64 %.3245.us.unr
  %238 = load i64, ptr %237, align 8, !tbaa !18
  %239 = icmp sgt i64 %238, 0
  br i1 %239, label %240, label %._crit_edge248

240:                                              ; preds = %.lr.ph247.split.us.epil
  %241 = icmp eq i64 %.0205244.us.unr, -1
  br i1 %241, label %246, label %242

242:                                              ; preds = %240
  %243 = getelementptr inbounds i64, ptr %27, i64 %.0205244.us.unr
  %244 = load i64, ptr %243, align 8, !tbaa !18
  %245 = icmp slt i64 %244, %238
  br i1 %245, label %246, label %._crit_edge248

246:                                              ; preds = %242, %240
  br label %._crit_edge248

._crit_edge248:                                   ; preds = %235, %._crit_edge248.loopexit.unr-lcssa, %246, %242, %.lr.ph247.split.us.epil
  %.0205.lcssa = phi i64 [ %.1206.us.lcssa.ph, %._crit_edge248.loopexit.unr-lcssa ], [ %.3245.us.unr, %246 ], [ %.0205244.us.unr, %242 ], [ %.0205244.us.unr, %.lr.ph247.split.us.epil ], [ %.1206, %235 ]
  %.not211 = icmp eq i64 %.0205.lcssa, -1
  br i1 %.not211, label %._crit_edge248.thread, label %247

247:                                              ; preds = %._crit_edge248
  %248 = getelementptr inbounds i64, ptr %18, i64 %.0205.lcssa
  %249 = load i64, ptr %248, align 8, !tbaa !18
  %250 = add nsw i64 %249, %.0204.lcssa.fr
  store i64 %250, ptr %248, align 8, !tbaa !18
  %251 = load i64, ptr %160, align 8, !tbaa !18
  %252 = sub nsw i64 %251, %.0204.lcssa.fr
  store i64 %252, ptr %160, align 8, !tbaa !18
  %253 = load i64, ptr %126, align 8, !tbaa !18
  %254 = add nsw i64 %253, -1
  store i64 %254, ptr %126, align 8, !tbaa !18
  tail call void @libmetis__MoveGroup(ptr noundef %0, ptr noundef nonnull %1, i64 noundef %2, i64 noundef %.0205.lcssa, i64 noundef %.2251, ptr noundef %22, ptr noundef %23)
  br label %._crit_edge248.thread

._crit_edge248.thread:                            ; preds = %._crit_edge243, %._crit_edge248, %247, %._crit_edge234, %.lr.ph252
  %255 = add nuw i64 %.2251, 1
  %exitcond260.not = icmp eq i64 %.2251, %.0202.lcssa
  br i1 %exitcond260.not, label %.loopexit, label %.lr.ph252, !llvm.loop !37

.loopexit:                                        ; preds = %._crit_edge248.thread, %.preheader213, %._crit_edge
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %6) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %6) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %6) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %6) #2
  tail call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %21) #2
  ret void
}

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

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 = { nounwind }

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

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


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