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

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

%struct.graph_t = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.ckrinfo_t = type { i32, i32, i32, i32 }
%struct.ctrl_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, float, ptr, ptr, ptr, float, double, double, double, double, double, double, double, double, double, double, double, double, ptr, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.cnbr_t = type { i32, i32 }

@.str.7 = external hidden unnamed_addr constant [139 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [16 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut = external hidden unnamed_addr constant [90 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MoveGroupContigForCut(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5) #3 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %34 = load ptr, ptr %8, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.graph_t, ptr %34, i32 0, i32 0
  %36 = load i32, ptr %35, align 8, !tbaa !11
  store i32 %36, ptr %20, align 4, !tbaa !9
  %37 = load ptr, ptr %8, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.graph_t, ptr %37, i32 0, i32 3
  %39 = load ptr, ptr %38, align 8, !tbaa !13
  store ptr %39, ptr %24, align 8, !tbaa !5
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.graph_t, ptr %40, i32 0, i32 6
  %42 = load ptr, ptr %41, align 8, !tbaa !14
  store ptr %42, ptr %25, align 8, !tbaa !5
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.graph_t, ptr %43, i32 0, i32 7
  %45 = load ptr, ptr %44, align 8, !tbaa !15
  store ptr %45, ptr %26, align 8, !tbaa !5
  %46 = load ptr, ptr %8, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.graph_t, ptr %46, i32 0, i32 19
  %48 = load ptr, ptr %47, align 8, !tbaa !16
  store ptr %48, ptr %27, align 8, !tbaa !5
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.graph_t, ptr %49, i32 0, i32 22
  %51 = load ptr, ptr %50, align 8, !tbaa !17
  store ptr %51, ptr %28, align 8, !tbaa !5
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.graph_t, ptr %52, i32 0, i32 23
  %54 = load ptr, ptr %53, align 8, !tbaa !18
  store ptr %54, ptr %29, align 8, !tbaa !5
  %55 = load ptr, ptr %8, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.graph_t, ptr %55, i32 0, i32 21
  %57 = load i32, ptr %56, align 8, !tbaa !19
  store i32 %57, ptr %21, align 4, !tbaa !9
  %58 = load ptr, ptr %11, align 8, !tbaa !5
  %59 = load i32, ptr %10, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds i32, ptr %58, i64 %60
  %62 = load i32, ptr %61, align 4, !tbaa !9
  store i32 %62, ptr %15, align 4, !tbaa !9
  br label %63

63:                                               ; preds = %839, %6
  %64 = load i32, ptr %15, align 4, !tbaa !9
  %65 = load ptr, ptr %11, align 8, !tbaa !5
  %66 = load i32, ptr %10, align 4, !tbaa !9
  %67 = add nsw i32 %66, 1
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds i32, ptr %65, i64 %68
  %70 = load i32, ptr %69, align 4, !tbaa !9
  %71 = icmp slt i32 %64, %70
  br i1 %71, label %72, label %842

72:                                               ; preds = %63
  %73 = load ptr, ptr %12, align 8, !tbaa !5
  %74 = load i32, ptr %15, align 4, !tbaa !9
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds i32, ptr %73, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !9
  store i32 %77, ptr %13, align 4, !tbaa !9
  %78 = load ptr, ptr %27, align 8, !tbaa !5
  %79 = load i32, ptr %13, align 4, !tbaa !9
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds i32, ptr %78, i64 %80
  %82 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %82, ptr %22, align 4, !tbaa !9
  %83 = load ptr, ptr %8, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.graph_t, ptr %83, i32 0, i32 26
  %85 = load ptr, ptr %84, align 8, !tbaa !20
  %86 = load i32, ptr %13, align 4, !tbaa !9
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds %struct.ckrinfo_t, ptr %85, i64 %87
  store ptr %88, ptr %30, align 8, !tbaa !5
  %89 = load ptr, ptr %30, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.ckrinfo_t, ptr %89, i32 0, i32 3
  %91 = load i32, ptr %90, align 4, !tbaa !21
  %92 = icmp eq i32 %91, -1
  br i1 %92, label %93, label %113

93:                                               ; preds = %72
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = load ptr, ptr %24, align 8, !tbaa !5
  %96 = load i32, ptr %13, align 4, !tbaa !9
  %97 = add nsw i32 %96, 1
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds i32, ptr %95, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !9
  %101 = load ptr, ptr %24, align 8, !tbaa !5
  %102 = load i32, ptr %13, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %101, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !9
  %106 = sub nsw i32 %100, %105
  %107 = add nsw i32 %106, 1
  %108 = call i32 @libmetis__cnbrpoolGetNext(ptr noundef %94, i32 noundef %107)
  %109 = load ptr, ptr %30, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.ckrinfo_t, ptr %109, i32 0, i32 3
  store i32 %108, ptr %110, align 4, !tbaa !21
  %111 = load ptr, ptr %30, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.ckrinfo_t, ptr %111, i32 0, i32 2
  store i32 0, ptr %112, align 4, !tbaa !23
  br label %113

113:                                              ; preds = %93, %72
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.ctrl_t, ptr %114, i32 0, i32 43
  %116 = load ptr, ptr %115, align 8, !tbaa !24
  %117 = load ptr, ptr %30, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.ckrinfo_t, ptr %117, i32 0, i32 3
  %119 = load i32, ptr %118, align 4, !tbaa !21
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds %struct.cnbr_t, ptr %116, i64 %120
  store ptr %121, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %122

122:                                              ; preds = %139, %113
  %123 = load i32, ptr %18, align 4, !tbaa !9
  %124 = load ptr, ptr %30, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.ckrinfo_t, ptr %124, i32 0, i32 2
  %126 = load i32, ptr %125, align 4, !tbaa !23
  %127 = icmp slt i32 %123, %126
  br i1 %127, label %128, label %142

128:                                              ; preds = %122
  %129 = load ptr, ptr %31, align 8, !tbaa !5
  %130 = load i32, ptr %18, align 4, !tbaa !9
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds %struct.cnbr_t, ptr %129, i64 %131
  %133 = getelementptr inbounds %struct.cnbr_t, ptr %132, i32 0, i32 0
  %134 = load i32, ptr %133, align 4, !tbaa !29
  %135 = load i32, ptr %9, align 4, !tbaa !9
  %136 = icmp eq i32 %134, %135
  br i1 %136, label %137, label %138

137:                                              ; preds = %128
  br label %142

138:                                              ; preds = %128
  br label %139

139:                                              ; preds = %138
  %140 = load i32, ptr %18, align 4, !tbaa !9
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %18, align 4, !tbaa !9
  br label %122, !llvm.loop !31

142:                                              ; preds = %137, %122
  %143 = load i32, ptr %18, align 4, !tbaa !9
  %144 = load ptr, ptr %30, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.ckrinfo_t, ptr %144, i32 0, i32 2
  %146 = load i32, ptr %145, align 4, !tbaa !23
  %147 = icmp eq i32 %143, %146
  br i1 %147, label %148, label %164

148:                                              ; preds = %142
  %149 = load i32, ptr %9, align 4, !tbaa !9
  %150 = load ptr, ptr %31, align 8, !tbaa !5
  %151 = load i32, ptr %18, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds %struct.cnbr_t, ptr %150, i64 %152
  %154 = getelementptr inbounds %struct.cnbr_t, ptr %153, i32 0, i32 0
  store i32 %149, ptr %154, align 4, !tbaa !29
  %155 = load ptr, ptr %31, align 8, !tbaa !5
  %156 = load i32, ptr %18, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds %struct.cnbr_t, ptr %155, i64 %157
  %159 = getelementptr inbounds %struct.cnbr_t, ptr %158, i32 0, i32 1
  store i32 0, ptr %159, align 4, !tbaa !33
  %160 = load ptr, ptr %30, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.ckrinfo_t, ptr %160, i32 0, i32 2
  %162 = load i32, ptr %161, align 4, !tbaa !23
  %163 = add nsw i32 %162, 1
  store i32 %163, ptr %161, align 4, !tbaa !23
  br label %164

164:                                              ; preds = %148, %142
  %165 = load ptr, ptr %31, align 8, !tbaa !5
  %166 = load i32, ptr %18, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds %struct.cnbr_t, ptr %165, i64 %167
  %169 = getelementptr inbounds %struct.cnbr_t, ptr %168, i32 0, i32 1
  %170 = load i32, ptr %169, align 4, !tbaa !33
  %171 = load ptr, ptr %30, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.ckrinfo_t, ptr %171, i32 0, i32 0
  %173 = load i32, ptr %172, align 4, !tbaa !34
  %174 = sub nsw i32 %170, %173
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.graph_t, ptr %175, i32 0, i32 17
  %177 = load i32, ptr %176, align 8, !tbaa !35
  %178 = sub nsw i32 %177, %174
  store i32 %178, ptr %176, align 8, !tbaa !35
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.graph_t, ptr %179, i32 0, i32 2
  %181 = load i32, ptr %180, align 8, !tbaa !36
  %182 = sext i32 %181 to i64
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.graph_t, ptr %183, i32 0, i32 4
  %185 = load ptr, ptr %184, align 8, !tbaa !37
  %186 = load i32, ptr %13, align 4, !tbaa !9
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.graph_t, ptr %187, i32 0, i32 2
  %189 = load i32, ptr %188, align 8, !tbaa !36
  %190 = mul nsw i32 %186, %189
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %185, i64 %191
  %193 = load ptr, ptr %8, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.graph_t, ptr %193, i32 0, i32 20
  %195 = load ptr, ptr %194, align 8, !tbaa !38
  %196 = load i32, ptr %9, align 4, !tbaa !9
  %197 = load ptr, ptr %8, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.graph_t, ptr %197, i32 0, i32 2
  %199 = load i32, ptr %198, align 8, !tbaa !36
  %200 = mul nsw i32 %196, %199
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i32, ptr %195, i64 %201
  %203 = call ptr @libmetis__iaxpy(i64 noundef %182, i32 noundef 1, ptr noundef %192, i64 noundef 1, ptr noundef %202, i64 noundef 1)
  %204 = load ptr, ptr %8, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.graph_t, ptr %204, i32 0, i32 2
  %206 = load i32, ptr %205, align 8, !tbaa !36
  %207 = sext i32 %206 to i64
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.graph_t, ptr %208, i32 0, i32 4
  %210 = load ptr, ptr %209, align 8, !tbaa !37
  %211 = load i32, ptr %13, align 4, !tbaa !9
  %212 = load ptr, ptr %8, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.graph_t, ptr %212, i32 0, i32 2
  %214 = load i32, ptr %213, align 8, !tbaa !36
  %215 = mul nsw i32 %211, %214
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i32, ptr %210, i64 %216
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.graph_t, ptr %218, i32 0, i32 20
  %220 = load ptr, ptr %219, align 8, !tbaa !38
  %221 = load i32, ptr %22, align 4, !tbaa !9
  %222 = load ptr, ptr %8, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.graph_t, ptr %222, i32 0, i32 2
  %224 = load i32, ptr %223, align 8, !tbaa !36
  %225 = mul nsw i32 %221, %224
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i32, ptr %220, i64 %226
  %228 = call ptr @libmetis__iaxpy(i64 noundef %207, i32 noundef -1, ptr noundef %217, i64 noundef 1, ptr noundef %227, i64 noundef 1)
  br label %229

229:                                              ; preds = %164
  %230 = load i32, ptr %9, align 4, !tbaa !9
  %231 = load ptr, ptr %27, align 8, !tbaa !5
  %232 = load i32, ptr %13, align 4, !tbaa !9
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds i32, ptr %231, i64 %233
  store i32 %230, ptr %234, align 4, !tbaa !9
  %235 = load ptr, ptr %30, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.ckrinfo_t, ptr %235, i32 0, i32 0
  %237 = load i32, ptr %236, align 4, !tbaa !34
  %238 = load ptr, ptr %31, align 8, !tbaa !5
  %239 = load i32, ptr %18, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds %struct.cnbr_t, ptr %238, i64 %240
  %242 = getelementptr inbounds %struct.cnbr_t, ptr %241, i32 0, i32 1
  %243 = load i32, ptr %242, align 4, !tbaa !33
  %244 = sub nsw i32 %237, %243
  %245 = load ptr, ptr %30, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.ckrinfo_t, ptr %245, i32 0, i32 1
  %247 = load i32, ptr %246, align 4, !tbaa !39
  %248 = add nsw i32 %247, %244
  store i32 %248, ptr %246, align 4, !tbaa !39
  br label %249

249:                                              ; preds = %229
  %250 = load ptr, ptr %30, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.ckrinfo_t, ptr %250, i32 0, i32 0
  %252 = load i32, ptr %251, align 4, !tbaa !34
  store i32 %252, ptr %16, align 4, !tbaa !9
  %253 = load ptr, ptr %31, align 8, !tbaa !5
  %254 = load i32, ptr %18, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds %struct.cnbr_t, ptr %253, i64 %255
  %257 = getelementptr inbounds %struct.cnbr_t, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 4, !tbaa !33
  %259 = load ptr, ptr %30, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.ckrinfo_t, ptr %259, i32 0, i32 0
  store i32 %258, ptr %260, align 4, !tbaa !34
  %261 = load i32, ptr %16, align 4, !tbaa !9
  %262 = load ptr, ptr %31, align 8, !tbaa !5
  %263 = load i32, ptr %18, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds %struct.cnbr_t, ptr %262, i64 %264
  %266 = getelementptr inbounds %struct.cnbr_t, ptr %265, i32 0, i32 1
  store i32 %261, ptr %266, align 4, !tbaa !33
  br label %267

267:                                              ; preds = %249
  br label %268

268:                                              ; preds = %267
  %269 = load ptr, ptr %31, align 8, !tbaa !5
  %270 = load i32, ptr %18, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds %struct.cnbr_t, ptr %269, i64 %271
  %273 = getelementptr inbounds %struct.cnbr_t, ptr %272, i32 0, i32 1
  %274 = load i32, ptr %273, align 4, !tbaa !33
  %275 = icmp eq i32 %274, 0
  br i1 %275, label %276, label %288

276:                                              ; preds = %268
  %277 = load ptr, ptr %31, align 8, !tbaa !5
  %278 = load i32, ptr %18, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds %struct.cnbr_t, ptr %277, i64 %279
  %281 = load ptr, ptr %31, align 8, !tbaa !5
  %282 = load ptr, ptr %30, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.ckrinfo_t, ptr %282, i32 0, i32 2
  %284 = load i32, ptr %283, align 4, !tbaa !23
  %285 = add nsw i32 %284, -1
  store i32 %285, ptr %283, align 4, !tbaa !23
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds %struct.cnbr_t, ptr %281, i64 %286
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %280, ptr align 4 %287, i64 8, i1 false), !tbaa.struct !40
  br label %295

288:                                              ; preds = %268
  %289 = load i32, ptr %22, align 4, !tbaa !9
  %290 = load ptr, ptr %31, align 8, !tbaa !5
  %291 = load i32, ptr %18, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds %struct.cnbr_t, ptr %290, i64 %292
  %294 = getelementptr inbounds %struct.cnbr_t, ptr %293, i32 0, i32 0
  store i32 %289, ptr %294, align 4, !tbaa !29
  br label %295

295:                                              ; preds = %288, %276
  %296 = load ptr, ptr %28, align 8, !tbaa !5
  %297 = load i32, ptr %13, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %296, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !9
  %301 = icmp ne i32 %300, -1
  br i1 %301, label %302, label %364

302:                                              ; preds = %295
  %303 = load ptr, ptr %30, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.ckrinfo_t, ptr %303, i32 0, i32 1
  %305 = load i32, ptr %304, align 4, !tbaa !39
  %306 = load ptr, ptr %30, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.ckrinfo_t, ptr %306, i32 0, i32 0
  %308 = load i32, ptr %307, align 4, !tbaa !34
  %309 = sub nsw i32 %305, %308
  %310 = icmp slt i32 %309, 0
  br i1 %310, label %311, label %364

311:                                              ; preds = %302
  br label %312

312:                                              ; preds = %311
  %313 = load ptr, ptr %28, align 8, !tbaa !5
  %314 = load i32, ptr %13, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %313, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = icmp ne i32 %317, -1
  br i1 %318, label %330, label %319

319:                                              ; preds = %312
  %320 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, i32 noundef 578, ptr noundef @.str.7)
  %321 = load ptr, ptr %28, align 8, !tbaa !5
  %322 = load i32, ptr %13, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds i32, ptr %321, i64 %323
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = icmp ne i32 %325, -1
  br i1 %326, label %327, label %328

327:                                              ; preds = %319
  br label %329

328:                                              ; preds = %319
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.7, i32 noundef 578, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

329:                                              ; preds = %327
  br label %330

330:                                              ; preds = %329, %312
  %331 = load ptr, ptr %29, align 8, !tbaa !5
  %332 = load i32, ptr %21, align 4, !tbaa !9
  %333 = add nsw i32 %332, -1
  store i32 %333, ptr %21, align 4, !tbaa !9
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds i32, ptr %331, i64 %334
  %336 = load i32, ptr %335, align 4, !tbaa !9
  %337 = load ptr, ptr %29, align 8, !tbaa !5
  %338 = load ptr, ptr %28, align 8, !tbaa !5
  %339 = load i32, ptr %13, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i32, ptr %338, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds i32, ptr %337, i64 %343
  store i32 %336, ptr %344, align 4, !tbaa !9
  %345 = load ptr, ptr %28, align 8, !tbaa !5
  %346 = load i32, ptr %13, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %345, i64 %347
  %349 = load i32, ptr %348, align 4, !tbaa !9
  %350 = load ptr, ptr %28, align 8, !tbaa !5
  %351 = load ptr, ptr %29, align 8, !tbaa !5
  %352 = load i32, ptr %21, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds i32, ptr %351, i64 %353
  %355 = load i32, ptr %354, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %350, i64 %356
  store i32 %349, ptr %357, align 4, !tbaa !9
  %358 = load ptr, ptr %28, align 8, !tbaa !5
  %359 = load i32, ptr %13, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i32, ptr %358, i64 %360
  store i32 -1, ptr %361, align 4, !tbaa !9
  br label %362

362:                                              ; preds = %330
  br label %363

363:                                              ; preds = %362
  br label %364

364:                                              ; preds = %363, %302, %295
  %365 = load ptr, ptr %28, align 8, !tbaa !5
  %366 = load i32, ptr %13, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !9
  %370 = icmp eq i32 %369, -1
  br i1 %370, label %371, label %413

371:                                              ; preds = %364
  %372 = load ptr, ptr %30, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.ckrinfo_t, ptr %372, i32 0, i32 1
  %374 = load i32, ptr %373, align 4, !tbaa !39
  %375 = load ptr, ptr %30, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.ckrinfo_t, ptr %375, i32 0, i32 0
  %377 = load i32, ptr %376, align 4, !tbaa !34
  %378 = sub nsw i32 %374, %377
  %379 = icmp sge i32 %378, 0
  br i1 %379, label %380, label %413

380:                                              ; preds = %371
  br label %381

381:                                              ; preds = %380
  %382 = load ptr, ptr %28, align 8, !tbaa !5
  %383 = load i32, ptr %13, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %382, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  %387 = icmp eq i32 %386, -1
  br i1 %387, label %399, label %388

388:                                              ; preds = %381
  %389 = call i32 (ptr, ...) @printf(ptr noundef @.str.29, i32 noundef 578, ptr noundef @.str.7)
  %390 = load ptr, ptr %28, align 8, !tbaa !5
  %391 = load i32, ptr %13, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %390, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = icmp eq i32 %394, -1
  br i1 %395, label %396, label %397

396:                                              ; preds = %388
  br label %398

397:                                              ; preds = %388
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.7, i32 noundef 578, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

398:                                              ; preds = %396
  br label %399

399:                                              ; preds = %398, %381
  %400 = load i32, ptr %13, align 4, !tbaa !9
  %401 = load ptr, ptr %29, align 8, !tbaa !5
  %402 = load i32, ptr %21, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds i32, ptr %401, i64 %403
  store i32 %400, ptr %404, align 4, !tbaa !9
  %405 = load i32, ptr %21, align 4, !tbaa !9
  %406 = add nsw i32 %405, 1
  store i32 %406, ptr %21, align 4, !tbaa !9
  %407 = load ptr, ptr %28, align 8, !tbaa !5
  %408 = load i32, ptr %13, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  store i32 %405, ptr %410, align 4, !tbaa !9
  br label %411

411:                                              ; preds = %399
  br label %412

412:                                              ; preds = %411
  br label %413

413:                                              ; preds = %412, %371, %364
  br label %414

414:                                              ; preds = %413
  br label %415

415:                                              ; preds = %414
  %416 = load ptr, ptr %24, align 8, !tbaa !5
  %417 = load i32, ptr %13, align 4, !tbaa !9
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i32, ptr %416, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !9
  store i32 %420, ptr %16, align 4, !tbaa !9
  br label %421

421:                                              ; preds = %811, %415
  %422 = load i32, ptr %16, align 4, !tbaa !9
  %423 = load ptr, ptr %24, align 8, !tbaa !5
  %424 = load i32, ptr %13, align 4, !tbaa !9
  %425 = add nsw i32 %424, 1
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds i32, ptr %423, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !9
  %429 = icmp slt i32 %422, %428
  br i1 %429, label %430, label %814

430:                                              ; preds = %421
  %431 = load ptr, ptr %25, align 8, !tbaa !5
  %432 = load i32, ptr %16, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i32, ptr %431, i64 %433
  %435 = load i32, ptr %434, align 4, !tbaa !9
  store i32 %435, ptr %14, align 4, !tbaa !9
  %436 = load ptr, ptr %27, align 8, !tbaa !5
  %437 = load i32, ptr %14, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds i32, ptr %436, i64 %438
  %440 = load i32, ptr %439, align 4, !tbaa !9
  store i32 %440, ptr %23, align 4, !tbaa !9
  %441 = load ptr, ptr %8, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.graph_t, ptr %441, i32 0, i32 26
  %443 = load ptr, ptr %442, align 8, !tbaa !20
  %444 = load i32, ptr %14, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds %struct.ckrinfo_t, ptr %443, i64 %445
  store ptr %446, ptr %30, align 8, !tbaa !5
  br label %447

447:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %448 = load ptr, ptr %30, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.ckrinfo_t, ptr %448, i32 0, i32 3
  %450 = load i32, ptr %449, align 4, !tbaa !21
  %451 = icmp eq i32 %450, -1
  br i1 %451, label %452, label %472

452:                                              ; preds = %447
  %453 = load ptr, ptr %7, align 8, !tbaa !5
  %454 = load ptr, ptr %24, align 8, !tbaa !5
  %455 = load i32, ptr %14, align 4, !tbaa !9
  %456 = add nsw i32 %455, 1
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds i32, ptr %454, i64 %457
  %459 = load i32, ptr %458, align 4, !tbaa !9
  %460 = load ptr, ptr %24, align 8, !tbaa !5
  %461 = load i32, ptr %14, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %460, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !9
  %465 = sub nsw i32 %459, %464
  %466 = add nsw i32 %465, 1
  %467 = call i32 @libmetis__cnbrpoolGetNext(ptr noundef %453, i32 noundef %466)
  %468 = load ptr, ptr %30, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.ckrinfo_t, ptr %468, i32 0, i32 3
  store i32 %467, ptr %469, align 4, !tbaa !21
  %470 = load ptr, ptr %30, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.ckrinfo_t, ptr %470, i32 0, i32 2
  store i32 0, ptr %471, align 4, !tbaa !23
  br label %472

472:                                              ; preds = %452, %447
  %473 = load ptr, ptr %7, align 8, !tbaa !5
  %474 = load ptr, ptr %30, align 8, !tbaa !5
  %475 = call i32 @libmetis__CheckRInfo(ptr noundef %473, ptr noundef %474)
  %476 = icmp ne i32 %475, 0
  br i1 %476, label %486, label %477

477:                                              ; preds = %472
  %478 = call i32 (ptr, ...) @printf(ptr noundef @.str.31, i32 noundef 587, ptr noundef @.str.7)
  %479 = load ptr, ptr %7, align 8, !tbaa !5
  %480 = load ptr, ptr %30, align 8, !tbaa !5
  %481 = call i32 @libmetis__CheckRInfo(ptr noundef %479, ptr noundef %480)
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %483, label %484

483:                                              ; preds = %477
  br label %485

484:                                              ; preds = %477
  call void @__assert_fail(ptr noundef @.str.32, ptr noundef @.str.7, i32 noundef 587, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

485:                                              ; preds = %483
  br label %486

486:                                              ; preds = %485, %472
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.ctrl_t, ptr %487, i32 0, i32 43
  %489 = load ptr, ptr %488, align 8, !tbaa !24
  %490 = load ptr, ptr %30, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.ckrinfo_t, ptr %490, i32 0, i32 3
  %492 = load i32, ptr %491, align 4, !tbaa !21
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds %struct.cnbr_t, ptr %489, i64 %493
  store ptr %494, ptr %33, align 8, !tbaa !5
  %495 = load i32, ptr %23, align 4, !tbaa !9
  %496 = load i32, ptr %22, align 4, !tbaa !9
  %497 = icmp eq i32 %495, %496
  br i1 %497, label %498, label %569

498:                                              ; preds = %486
  br label %499

499:                                              ; preds = %498
  %500 = load ptr, ptr %26, align 8, !tbaa !5
  %501 = load i32, ptr %16, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %500, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !9
  %505 = load ptr, ptr %30, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.ckrinfo_t, ptr %505, i32 0, i32 1
  %507 = load i32, ptr %506, align 4, !tbaa !39
  %508 = add nsw i32 %507, %504
  store i32 %508, ptr %506, align 4, !tbaa !39
  %509 = load ptr, ptr %26, align 8, !tbaa !5
  %510 = load i32, ptr %16, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds i32, ptr %509, i64 %511
  %513 = load i32, ptr %512, align 4, !tbaa !9
  %514 = load ptr, ptr %30, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.ckrinfo_t, ptr %514, i32 0, i32 0
  %516 = load i32, ptr %515, align 4, !tbaa !34
  %517 = sub nsw i32 %516, %513
  store i32 %517, ptr %515, align 4, !tbaa !34
  br label %518

518:                                              ; preds = %499
  br label %519

519:                                              ; preds = %518
  %520 = load ptr, ptr %30, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.ckrinfo_t, ptr %520, i32 0, i32 1
  %522 = load i32, ptr %521, align 4, !tbaa !39
  %523 = load ptr, ptr %30, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.ckrinfo_t, ptr %523, i32 0, i32 0
  %525 = load i32, ptr %524, align 4, !tbaa !34
  %526 = sub nsw i32 %522, %525
  %527 = icmp sge i32 %526, 0
  br i1 %527, label %528, label %568

528:                                              ; preds = %519
  %529 = load ptr, ptr %28, align 8, !tbaa !5
  %530 = load i32, ptr %14, align 4, !tbaa !9
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds i32, ptr %529, i64 %531
  %533 = load i32, ptr %532, align 4, !tbaa !9
  %534 = icmp eq i32 %533, -1
  br i1 %534, label %535, label %568

535:                                              ; preds = %528
  br label %536

536:                                              ; preds = %535
  %537 = load ptr, ptr %28, align 8, !tbaa !5
  %538 = load i32, ptr %14, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds i32, ptr %537, i64 %539
  %541 = load i32, ptr %540, align 4, !tbaa !9
  %542 = icmp eq i32 %541, -1
  br i1 %542, label %554, label %543

543:                                              ; preds = %536
  %544 = call i32 (ptr, ...) @printf(ptr noundef @.str.33, i32 noundef 587, ptr noundef @.str.7)
  %545 = load ptr, ptr %28, align 8, !tbaa !5
  %546 = load i32, ptr %14, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds i32, ptr %545, i64 %547
  %549 = load i32, ptr %548, align 4, !tbaa !9
  %550 = icmp eq i32 %549, -1
  br i1 %550, label %551, label %552

551:                                              ; preds = %543
  br label %553

552:                                              ; preds = %543
  call void @__assert_fail(ptr noundef @.str.34, ptr noundef @.str.7, i32 noundef 587, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

553:                                              ; preds = %551
  br label %554

554:                                              ; preds = %553, %536
  %555 = load i32, ptr %14, align 4, !tbaa !9
  %556 = load ptr, ptr %29, align 8, !tbaa !5
  %557 = load i32, ptr %21, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i32, ptr %556, i64 %558
  store i32 %555, ptr %559, align 4, !tbaa !9
  %560 = load i32, ptr %21, align 4, !tbaa !9
  %561 = add nsw i32 %560, 1
  store i32 %561, ptr %21, align 4, !tbaa !9
  %562 = load ptr, ptr %28, align 8, !tbaa !5
  %563 = load i32, ptr %14, align 4, !tbaa !9
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds i32, ptr %562, i64 %564
  store i32 %560, ptr %565, align 4, !tbaa !9
  br label %566

566:                                              ; preds = %554
  br label %567

567:                                              ; preds = %566
  br label %568

568:                                              ; preds = %567, %528, %519
  br label %665

569:                                              ; preds = %486
  %570 = load i32, ptr %23, align 4, !tbaa !9
  %571 = load i32, ptr %9, align 4, !tbaa !9
  %572 = icmp eq i32 %570, %571
  br i1 %572, label %573, label %664

573:                                              ; preds = %569
  br label %574

574:                                              ; preds = %573
  %575 = load ptr, ptr %26, align 8, !tbaa !5
  %576 = load i32, ptr %16, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i32, ptr %575, i64 %577
  %579 = load i32, ptr %578, align 4, !tbaa !9
  %580 = load ptr, ptr %30, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.ckrinfo_t, ptr %580, i32 0, i32 0
  %582 = load i32, ptr %581, align 4, !tbaa !34
  %583 = add nsw i32 %582, %579
  store i32 %583, ptr %581, align 4, !tbaa !34
  %584 = load ptr, ptr %26, align 8, !tbaa !5
  %585 = load i32, ptr %16, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %584, i64 %586
  %588 = load i32, ptr %587, align 4, !tbaa !9
  %589 = load ptr, ptr %30, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.ckrinfo_t, ptr %589, i32 0, i32 1
  %591 = load i32, ptr %590, align 4, !tbaa !39
  %592 = sub nsw i32 %591, %588
  store i32 %592, ptr %590, align 4, !tbaa !39
  br label %593

593:                                              ; preds = %574
  br label %594

594:                                              ; preds = %593
  %595 = load ptr, ptr %30, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.ckrinfo_t, ptr %595, i32 0, i32 1
  %597 = load i32, ptr %596, align 4, !tbaa !39
  %598 = load ptr, ptr %30, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.ckrinfo_t, ptr %598, i32 0, i32 0
  %600 = load i32, ptr %599, align 4, !tbaa !34
  %601 = sub nsw i32 %597, %600
  %602 = icmp slt i32 %601, 0
  br i1 %602, label %603, label %663

603:                                              ; preds = %594
  %604 = load ptr, ptr %28, align 8, !tbaa !5
  %605 = load i32, ptr %14, align 4, !tbaa !9
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds i32, ptr %604, i64 %606
  %608 = load i32, ptr %607, align 4, !tbaa !9
  %609 = icmp ne i32 %608, -1
  br i1 %609, label %610, label %663

610:                                              ; preds = %603
  br label %611

611:                                              ; preds = %610
  %612 = load ptr, ptr %28, align 8, !tbaa !5
  %613 = load i32, ptr %14, align 4, !tbaa !9
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds i32, ptr %612, i64 %614
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = icmp ne i32 %616, -1
  br i1 %617, label %629, label %618

618:                                              ; preds = %611
  %619 = call i32 (ptr, ...) @printf(ptr noundef @.str.35, i32 noundef 587, ptr noundef @.str.7)
  %620 = load ptr, ptr %28, align 8, !tbaa !5
  %621 = load i32, ptr %14, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %620, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !9
  %625 = icmp ne i32 %624, -1
  br i1 %625, label %626, label %627

626:                                              ; preds = %618
  br label %628

627:                                              ; preds = %618
  call void @__assert_fail(ptr noundef @.str.36, ptr noundef @.str.7, i32 noundef 587, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

628:                                              ; preds = %626
  br label %629

629:                                              ; preds = %628, %611
  %630 = load ptr, ptr %29, align 8, !tbaa !5
  %631 = load i32, ptr %21, align 4, !tbaa !9
  %632 = add nsw i32 %631, -1
  store i32 %632, ptr %21, align 4, !tbaa !9
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds i32, ptr %630, i64 %633
  %635 = load i32, ptr %634, align 4, !tbaa !9
  %636 = load ptr, ptr %29, align 8, !tbaa !5
  %637 = load ptr, ptr %28, align 8, !tbaa !5
  %638 = load i32, ptr %14, align 4, !tbaa !9
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds i32, ptr %637, i64 %639
  %641 = load i32, ptr %640, align 4, !tbaa !9
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds i32, ptr %636, i64 %642
  store i32 %635, ptr %643, align 4, !tbaa !9
  %644 = load ptr, ptr %28, align 8, !tbaa !5
  %645 = load i32, ptr %14, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %644, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !9
  %649 = load ptr, ptr %28, align 8, !tbaa !5
  %650 = load ptr, ptr %29, align 8, !tbaa !5
  %651 = load i32, ptr %21, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds i32, ptr %650, i64 %652
  %654 = load i32, ptr %653, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %649, i64 %655
  store i32 %648, ptr %656, align 4, !tbaa !9
  %657 = load ptr, ptr %28, align 8, !tbaa !5
  %658 = load i32, ptr %14, align 4, !tbaa !9
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds i32, ptr %657, i64 %659
  store i32 -1, ptr %660, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %629
  br label %662

662:                                              ; preds = %661
  br label %663

663:                                              ; preds = %662, %603, %594
  br label %664

664:                                              ; preds = %663, %569
  br label %665

665:                                              ; preds = %664, %568
  %666 = load i32, ptr %23, align 4, !tbaa !9
  %667 = load i32, ptr %22, align 4, !tbaa !9
  %668 = icmp ne i32 %666, %667
  br i1 %668, label %669, label %729

669:                                              ; preds = %665
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %670

670:                                              ; preds = %725, %669
  %671 = load i32, ptr %32, align 4, !tbaa !9
  %672 = load ptr, ptr %30, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.ckrinfo_t, ptr %672, i32 0, i32 2
  %674 = load i32, ptr %673, align 4, !tbaa !23
  %675 = icmp slt i32 %671, %674
  br i1 %675, label %676, label %728

676:                                              ; preds = %670
  %677 = load ptr, ptr %33, align 8, !tbaa !5
  %678 = load i32, ptr %32, align 4, !tbaa !9
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds %struct.cnbr_t, ptr %677, i64 %679
  %681 = getelementptr inbounds %struct.cnbr_t, ptr %680, i32 0, i32 0
  %682 = load i32, ptr %681, align 4, !tbaa !29
  %683 = load i32, ptr %22, align 4, !tbaa !9
  %684 = icmp eq i32 %682, %683
  br i1 %684, label %685, label %724

685:                                              ; preds = %676
  %686 = load ptr, ptr %33, align 8, !tbaa !5
  %687 = load i32, ptr %32, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds %struct.cnbr_t, ptr %686, i64 %688
  %690 = getelementptr inbounds %struct.cnbr_t, ptr %689, i32 0, i32 1
  %691 = load i32, ptr %690, align 4, !tbaa !33
  %692 = load ptr, ptr %26, align 8, !tbaa !5
  %693 = load i32, ptr %16, align 4, !tbaa !9
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds i32, ptr %692, i64 %694
  %696 = load i32, ptr %695, align 4, !tbaa !9
  %697 = icmp eq i32 %691, %696
  br i1 %697, label %698, label %710

698:                                              ; preds = %685
  %699 = load ptr, ptr %33, align 8, !tbaa !5
  %700 = load i32, ptr %32, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds %struct.cnbr_t, ptr %699, i64 %701
  %703 = load ptr, ptr %33, align 8, !tbaa !5
  %704 = load ptr, ptr %30, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.ckrinfo_t, ptr %704, i32 0, i32 2
  %706 = load i32, ptr %705, align 4, !tbaa !23
  %707 = add nsw i32 %706, -1
  store i32 %707, ptr %705, align 4, !tbaa !23
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds %struct.cnbr_t, ptr %703, i64 %708
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %702, ptr align 4 %709, i64 8, i1 false), !tbaa.struct !40
  br label %723

710:                                              ; preds = %685
  %711 = load ptr, ptr %26, align 8, !tbaa !5
  %712 = load i32, ptr %16, align 4, !tbaa !9
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds i32, ptr %711, i64 %713
  %715 = load i32, ptr %714, align 4, !tbaa !9
  %716 = load ptr, ptr %33, align 8, !tbaa !5
  %717 = load i32, ptr %32, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds %struct.cnbr_t, ptr %716, i64 %718
  %720 = getelementptr inbounds %struct.cnbr_t, ptr %719, i32 0, i32 1
  %721 = load i32, ptr %720, align 4, !tbaa !33
  %722 = sub nsw i32 %721, %715
  store i32 %722, ptr %720, align 4, !tbaa !33
  br label %723

723:                                              ; preds = %710, %698
  br label %728

724:                                              ; preds = %676
  br label %725

725:                                              ; preds = %724
  %726 = load i32, ptr %32, align 4, !tbaa !9
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %32, align 4, !tbaa !9
  br label %670, !llvm.loop !41

728:                                              ; preds = %723, %670
  br label %729

729:                                              ; preds = %728, %665
  %730 = load i32, ptr %23, align 4, !tbaa !9
  %731 = load i32, ptr %9, align 4, !tbaa !9
  %732 = icmp ne i32 %730, %731
  br i1 %732, label %733, label %794

733:                                              ; preds = %729
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %734

734:                                              ; preds = %763, %733
  %735 = load i32, ptr %32, align 4, !tbaa !9
  %736 = load ptr, ptr %30, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.ckrinfo_t, ptr %736, i32 0, i32 2
  %738 = load i32, ptr %737, align 4, !tbaa !23
  %739 = icmp slt i32 %735, %738
  br i1 %739, label %740, label %766

740:                                              ; preds = %734
  %741 = load ptr, ptr %33, align 8, !tbaa !5
  %742 = load i32, ptr %32, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds %struct.cnbr_t, ptr %741, i64 %743
  %745 = getelementptr inbounds %struct.cnbr_t, ptr %744, i32 0, i32 0
  %746 = load i32, ptr %745, align 4, !tbaa !29
  %747 = load i32, ptr %9, align 4, !tbaa !9
  %748 = icmp eq i32 %746, %747
  br i1 %748, label %749, label %762

749:                                              ; preds = %740
  %750 = load ptr, ptr %26, align 8, !tbaa !5
  %751 = load i32, ptr %16, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds i32, ptr %750, i64 %752
  %754 = load i32, ptr %753, align 4, !tbaa !9
  %755 = load ptr, ptr %33, align 8, !tbaa !5
  %756 = load i32, ptr %32, align 4, !tbaa !9
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds %struct.cnbr_t, ptr %755, i64 %757
  %759 = getelementptr inbounds %struct.cnbr_t, ptr %758, i32 0, i32 1
  %760 = load i32, ptr %759, align 4, !tbaa !33
  %761 = add nsw i32 %760, %754
  store i32 %761, ptr %759, align 4, !tbaa !33
  br label %766

762:                                              ; preds = %740
  br label %763

763:                                              ; preds = %762
  %764 = load i32, ptr %32, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %32, align 4, !tbaa !9
  br label %734, !llvm.loop !42

766:                                              ; preds = %749, %734
  %767 = load i32, ptr %32, align 4, !tbaa !9
  %768 = load ptr, ptr %30, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.ckrinfo_t, ptr %768, i32 0, i32 2
  %770 = load i32, ptr %769, align 4, !tbaa !23
  %771 = icmp eq i32 %767, %770
  br i1 %771, label %772, label %793

772:                                              ; preds = %766
  %773 = load i32, ptr %9, align 4, !tbaa !9
  %774 = load ptr, ptr %33, align 8, !tbaa !5
  %775 = load i32, ptr %32, align 4, !tbaa !9
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds %struct.cnbr_t, ptr %774, i64 %776
  %778 = getelementptr inbounds %struct.cnbr_t, ptr %777, i32 0, i32 0
  store i32 %773, ptr %778, align 4, !tbaa !29
  %779 = load ptr, ptr %26, align 8, !tbaa !5
  %780 = load i32, ptr %16, align 4, !tbaa !9
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds i32, ptr %779, i64 %781
  %783 = load i32, ptr %782, align 4, !tbaa !9
  %784 = load ptr, ptr %33, align 8, !tbaa !5
  %785 = load i32, ptr %32, align 4, !tbaa !9
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds %struct.cnbr_t, ptr %784, i64 %786
  %788 = getelementptr inbounds %struct.cnbr_t, ptr %787, i32 0, i32 1
  store i32 %783, ptr %788, align 4, !tbaa !33
  %789 = load ptr, ptr %30, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.ckrinfo_t, ptr %789, i32 0, i32 2
  %791 = load i32, ptr %790, align 4, !tbaa !23
  %792 = add nsw i32 %791, 1
  store i32 %792, ptr %790, align 4, !tbaa !23
  br label %793

793:                                              ; preds = %772, %766
  br label %794

794:                                              ; preds = %793, %729
  %795 = load ptr, ptr %7, align 8, !tbaa !5
  %796 = load ptr, ptr %30, align 8, !tbaa !5
  %797 = call i32 @libmetis__CheckRInfo(ptr noundef %795, ptr noundef %796)
  %798 = icmp ne i32 %797, 0
  br i1 %798, label %808, label %799

799:                                              ; preds = %794
  %800 = call i32 (ptr, ...) @printf(ptr noundef @.str.31, i32 noundef 587, ptr noundef @.str.7)
  %801 = load ptr, ptr %7, align 8, !tbaa !5
  %802 = load ptr, ptr %30, align 8, !tbaa !5
  %803 = call i32 @libmetis__CheckRInfo(ptr noundef %801, ptr noundef %802)
  %804 = icmp ne i32 %803, 0
  br i1 %804, label %805, label %806

805:                                              ; preds = %799
  br label %807

806:                                              ; preds = %799
  call void @__assert_fail(ptr noundef @.str.32, ptr noundef @.str.7, i32 noundef 587, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

807:                                              ; preds = %805
  br label %808

808:                                              ; preds = %807, %794
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %809

809:                                              ; preds = %808
  br label %810

810:                                              ; preds = %809
  br label %811

811:                                              ; preds = %810
  %812 = load i32, ptr %16, align 4, !tbaa !9
  %813 = add nsw i32 %812, 1
  store i32 %813, ptr %16, align 4, !tbaa !9
  br label %421, !llvm.loop !43

814:                                              ; preds = %421
  %815 = load ptr, ptr %7, align 8, !tbaa !5
  %816 = load ptr, ptr %8, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.graph_t, ptr %816, i32 0, i32 26
  %818 = load ptr, ptr %817, align 8, !tbaa !20
  %819 = load i32, ptr %13, align 4, !tbaa !9
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds %struct.ckrinfo_t, ptr %818, i64 %820
  %822 = call i32 @libmetis__CheckRInfo(ptr noundef %815, ptr noundef %821)
  %823 = icmp ne i32 %822, 0
  br i1 %823, label %838, label %824

824:                                              ; preds = %814
  %825 = call i32 (ptr, ...) @printf(ptr noundef @.str.37, i32 noundef 590, ptr noundef @.str.7)
  %826 = load ptr, ptr %7, align 8, !tbaa !5
  %827 = load ptr, ptr %8, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.graph_t, ptr %827, i32 0, i32 26
  %829 = load ptr, ptr %828, align 8, !tbaa !20
  %830 = load i32, ptr %13, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds %struct.ckrinfo_t, ptr %829, i64 %831
  %833 = call i32 @libmetis__CheckRInfo(ptr noundef %826, ptr noundef %832)
  %834 = icmp ne i32 %833, 0
  br i1 %834, label %835, label %836

835:                                              ; preds = %824
  br label %837

836:                                              ; preds = %824
  call void @__assert_fail(ptr noundef @.str.38, ptr noundef @.str.7, i32 noundef 590, ptr noundef @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #6
  unreachable

837:                                              ; preds = %835
  br label %838

838:                                              ; preds = %837, %814
  br label %839

839:                                              ; preds = %838
  %840 = load i32, ptr %15, align 4, !tbaa !9
  %841 = add nsw i32 %840, 1
  store i32 %841, ptr %15, align 4, !tbaa !9
  br label %63, !llvm.loop !44

842:                                              ; preds = %63
  %843 = load i32, ptr %21, align 4, !tbaa !9
  %844 = load ptr, ptr %8, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.graph_t, ptr %844, i32 0, i32 21
  store i32 %843, ptr %845, align 8, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  ret void
}

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind }
attributes #6 = { noreturn nounwind }

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

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


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

%struct.ckrinfo_t = type { i32, i32, i32, i32 }
%struct.cnbr_t = type { i32, i32 }

@.str.7 = external hidden unnamed_addr constant [139 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut = external hidden unnamed_addr constant [90 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MoveGroupContigForCut(ptr noundef %0, ptr nocapture noundef %1, i32 noundef %2, i32 noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5) local_unnamed_addr #3 {
  %7 = getelementptr inbounds i8, ptr %1, i64 16
  %8 = load ptr, ptr %7, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 40
  %10 = load ptr, ptr %9, align 8, !tbaa !11
  %11 = getelementptr inbounds i8, ptr %1, i64 48
  %12 = load ptr, ptr %11, align 8, !tbaa !12
  %13 = getelementptr inbounds i8, ptr %1, i64 120
  %14 = load ptr, ptr %13, align 8, !tbaa !13
  %15 = getelementptr inbounds i8, ptr %1, i64 144
  %16 = load ptr, ptr %15, align 8, !tbaa !14
  %17 = getelementptr inbounds i8, ptr %1, i64 152
  %18 = load ptr, ptr %17, align 8, !tbaa !15
  %19 = getelementptr inbounds i8, ptr %1, i64 136
  %20 = load i32, ptr %19, align 8, !tbaa !16
  %21 = sext i32 %3 to i64
  %22 = getelementptr inbounds i32, ptr %4, i64 %21
  %23 = load i32, ptr %22, align 4, !tbaa !17
  %24 = getelementptr i8, ptr %22, i64 4
  %25 = load i32, ptr %24, align 4, !tbaa !17
  %26 = icmp slt i32 %23, %25
  br i1 %26, label %.lr.ph321, label %._crit_edge322

.lr.ph321:                                        ; preds = %6
  %27 = getelementptr inbounds i8, ptr %1, i64 176
  %28 = getelementptr inbounds i8, ptr %0, i64 264
  %29 = getelementptr inbounds i8, ptr %1, i64 112
  %30 = getelementptr inbounds i8, ptr %1, i64 8
  %31 = getelementptr inbounds i8, ptr %1, i64 24
  %32 = getelementptr inbounds i8, ptr %1, i64 128
  %33 = sext i32 %23 to i64
  br label %34

34:                                               ; preds = %.lr.ph321, %285
  %indvars.iv345 = phi i64 [ %33, %.lr.ph321 ], [ %indvars.iv.next346, %285 ]
  %.0251318 = phi i32 [ %20, %.lr.ph321 ], [ %.3.lcssa, %285 ]
  %35 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv345
  %36 = load i32, ptr %35, align 4, !tbaa !17
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds i32, ptr %14, i64 %37
  %39 = load i32, ptr %38, align 4, !tbaa !17
  %40 = load ptr, ptr %27, align 8, !tbaa !18
  %41 = getelementptr inbounds %struct.ckrinfo_t, ptr %40, i64 %37
  %42 = getelementptr inbounds i8, ptr %41, i64 12
  %43 = load i32, ptr %42, align 4, !tbaa !19
  %44 = icmp eq i32 %43, -1
  br i1 %44, label %.thread355, label %57

.thread355:                                       ; preds = %34
  %45 = getelementptr i32, ptr %8, i64 %37
  %46 = getelementptr i8, ptr %45, i64 4
  %47 = load i32, ptr %46, align 4, !tbaa !17
  %48 = load i32, ptr %45, align 4, !tbaa !17
  %49 = add i32 %47, 1
  %50 = sub i32 %49, %48
  %51 = tail call i32 @libmetis__cnbrpoolGetNext(ptr noundef %0, i32 noundef %50) #4
  store i32 %51, ptr %42, align 4, !tbaa !19
  %52 = getelementptr inbounds i8, ptr %41, i64 8
  store i32 0, ptr %52, align 4, !tbaa !21
  %53 = load ptr, ptr %28, align 8, !tbaa !22
  %54 = sext i32 %51 to i64
  %55 = getelementptr inbounds %struct.cnbr_t, ptr %53, i64 %54
  %56 = getelementptr inbounds i8, ptr %41, i64 8
  br label %._crit_edge.thread

57:                                               ; preds = %34
  %.phi.trans.insert = getelementptr inbounds i8, ptr %41, i64 8
  %.pre = load i32, ptr %.phi.trans.insert, align 4, !tbaa !21
  %58 = load ptr, ptr %28, align 8, !tbaa !22
  %59 = sext i32 %43 to i64
  %60 = getelementptr inbounds %struct.cnbr_t, ptr %58, i64 %59
  %61 = getelementptr inbounds i8, ptr %41, i64 8
  %62 = icmp sgt i32 %.pre, 0
  br i1 %62, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %57
  %wide.trip.count = zext nneg i32 %.pre to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %66
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %66 ]
  %63 = getelementptr inbounds %struct.cnbr_t, ptr %60, i64 %indvars.iv
  %64 = load i32, ptr %63, align 4, !tbaa !27
  %65 = icmp eq i32 %64, %2
  br i1 %65, label %._crit_edge.loopexit, label %66

66:                                               ; preds = %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.thread, label %.lr.ph, !llvm.loop !29

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %67 = trunc nuw nsw i64 %indvars.iv to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %57
  %.0250.lcssa = phi i32 [ 0, %57 ], [ %67, %._crit_edge.loopexit ]
  %68 = icmp eq i32 %.0250.lcssa, %.pre
  br i1 %68, label %._crit_edge.thread, label %76

._crit_edge.thread:                               ; preds = %66, %.thread355, %._crit_edge
  %.0250.lcssa360 = phi i32 [ %.0250.lcssa, %._crit_edge ], [ 0, %.thread355 ], [ %.pre, %66 ]
  %69 = phi i32 [ %.pre, %._crit_edge ], [ 0, %.thread355 ], [ %.pre, %66 ]
  %70 = phi ptr [ %60, %._crit_edge ], [ %55, %.thread355 ], [ %60, %66 ]
  %71 = phi ptr [ %61, %._crit_edge ], [ %56, %.thread355 ], [ %61, %66 ]
  %72 = zext nneg i32 %69 to i64
  %73 = getelementptr inbounds %struct.cnbr_t, ptr %70, i64 %72
  store i32 %2, ptr %73, align 4, !tbaa !27
  %74 = getelementptr inbounds i8, ptr %73, i64 4
  store i32 0, ptr %74, align 4, !tbaa !31
  %75 = add nsw i32 %69, 1
  store i32 %75, ptr %71, align 4, !tbaa !21
  br label %76

76:                                               ; preds = %._crit_edge.thread, %._crit_edge
  %.0250.lcssa359 = phi i32 [ %.0250.lcssa360, %._crit_edge.thread ], [ %.0250.lcssa, %._crit_edge ]
  %77 = phi ptr [ %70, %._crit_edge.thread ], [ %60, %._crit_edge ]
  %78 = phi ptr [ %71, %._crit_edge.thread ], [ %61, %._crit_edge ]
  %79 = zext nneg i32 %.0250.lcssa359 to i64
  %80 = getelementptr inbounds %struct.cnbr_t, ptr %77, i64 %79
  %81 = getelementptr inbounds i8, ptr %80, i64 4
  %82 = load i32, ptr %81, align 4, !tbaa !31
  %83 = load i32, ptr %41, align 4, !tbaa !32
  %.neg = sub i32 %83, %82
  %84 = load i32, ptr %29, align 8, !tbaa !33
  %85 = add i32 %.neg, %84
  store i32 %85, ptr %29, align 8, !tbaa !33
  %86 = load i32, ptr %30, align 8, !tbaa !34
  %87 = sext i32 %86 to i64
  %88 = load ptr, ptr %31, align 8, !tbaa !35
  %89 = mul nsw i32 %86, %36
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i32, ptr %88, i64 %90
  %92 = load ptr, ptr %32, align 8, !tbaa !36
  %93 = mul nsw i32 %86, %2
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds i32, ptr %92, i64 %94
  %96 = tail call ptr @libmetis__iaxpy(i64 noundef %87, i32 noundef 1, ptr noundef %91, i64 noundef 1, ptr noundef %95, i64 noundef 1) #4
  %97 = load i32, ptr %30, align 8, !tbaa !34
  %98 = sext i32 %97 to i64
  %99 = load ptr, ptr %31, align 8, !tbaa !35
  %100 = mul nsw i32 %97, %36
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds i32, ptr %99, i64 %101
  %103 = load ptr, ptr %32, align 8, !tbaa !36
  %104 = mul nsw i32 %97, %39
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds i32, ptr %103, i64 %105
  %107 = tail call ptr @libmetis__iaxpy(i64 noundef %98, i32 noundef -1, ptr noundef %102, i64 noundef 1, ptr noundef %106, i64 noundef 1) #4
  store i32 %2, ptr %38, align 4, !tbaa !17
  %108 = load i32, ptr %41, align 4, !tbaa !32
  %109 = load i32, ptr %81, align 4, !tbaa !31
  %110 = sub i32 %108, %109
  %111 = getelementptr inbounds i8, ptr %41, i64 4
  %112 = load i32, ptr %111, align 4, !tbaa !37
  %113 = add nsw i32 %110, %112
  store i32 %113, ptr %111, align 4, !tbaa !37
  store i32 %109, ptr %41, align 4, !tbaa !32
  store i32 %108, ptr %81, align 4, !tbaa !31
  %114 = icmp eq i32 %108, 0
  br i1 %114, label %115, label %121

115:                                              ; preds = %76
  %116 = load i32, ptr %78, align 4, !tbaa !21
  %117 = add nsw i32 %116, -1
  store i32 %117, ptr %78, align 4, !tbaa !21
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds %struct.cnbr_t, ptr %77, i64 %118
  %120 = load i64, ptr %119, align 4
  store i64 %120, ptr %80, align 4
  %.pre350.pre = load i32, ptr %111, align 4, !tbaa !37
  %.pre352.pre = load i32, ptr %41, align 4, !tbaa !32
  br label %122

121:                                              ; preds = %76
  store i32 %39, ptr %80, align 4, !tbaa !27
  br label %122

122:                                              ; preds = %121, %115
  %.pre352 = phi i32 [ %109, %121 ], [ %.pre352.pre, %115 ]
  %.pre350 = phi i32 [ %113, %121 ], [ %.pre350.pre, %115 ]
  %123 = getelementptr inbounds i32, ptr %16, i64 %37
  %124 = load i32, ptr %123, align 4, !tbaa !17
  %.not = icmp eq i32 %124, -1
  br i1 %.not, label %.thread, label %125

125:                                              ; preds = %122
  %126 = icmp slt i32 %.pre350, %.pre352
  br i1 %126, label %127, label %143

127:                                              ; preds = %125
  %128 = add nsw i32 %.0251318, -1
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i32, ptr %18, i64 %129
  %131 = load i32, ptr %130, align 4, !tbaa !17
  %132 = sext i32 %124 to i64
  %133 = getelementptr inbounds i32, ptr %18, i64 %132
  store i32 %131, ptr %133, align 4, !tbaa !17
  %134 = load i32, ptr %123, align 4, !tbaa !17
  %135 = sext i32 %131 to i64
  %136 = getelementptr inbounds i32, ptr %16, i64 %135
  store i32 %134, ptr %136, align 4, !tbaa !17
  store i32 -1, ptr %123, align 4, !tbaa !17
  %.pre349 = load i32, ptr %111, align 4, !tbaa !37
  %.pre351 = load i32, ptr %41, align 4, !tbaa !32
  br label %.thread

.thread:                                          ; preds = %122, %127
  %137 = phi i32 [ %.pre352, %122 ], [ %.pre351, %127 ]
  %138 = phi i32 [ %.pre350, %122 ], [ %.pre349, %127 ]
  %.1252271 = phi i32 [ %.0251318, %122 ], [ %128, %127 ]
  %.not259 = icmp slt i32 %138, %137
  br i1 %.not259, label %143, label %139

139:                                              ; preds = %.thread
  %140 = sext i32 %.1252271 to i64
  %141 = getelementptr inbounds i32, ptr %18, i64 %140
  store i32 %36, ptr %141, align 4, !tbaa !17
  %142 = add nsw i32 %.1252271, 1
  store i32 %.1252271, ptr %123, align 4, !tbaa !17
  br label %143

143:                                              ; preds = %125, %139, %.thread
  %.2 = phi i32 [ %142, %139 ], [ %.1252271, %.thread ], [ %.0251318, %125 ]
  %144 = getelementptr inbounds i32, ptr %8, i64 %37
  %145 = load i32, ptr %144, align 4, !tbaa !17
  %146 = getelementptr i8, ptr %144, i64 4
  %147 = load i32, ptr %146, align 4, !tbaa !17
  %148 = icmp slt i32 %145, %147
  br i1 %148, label %.lr.ph315.preheader, label %._crit_edge316

.lr.ph315.preheader:                              ; preds = %143
  %149 = sext i32 %145 to i64
  br label %.lr.ph315

.lr.ph315:                                        ; preds = %.lr.ph315.preheader, %272
  %indvars.iv342 = phi i64 [ %149, %.lr.ph315.preheader ], [ %indvars.iv.next343, %272 ]
  %.3312 = phi i32 [ %.2, %.lr.ph315.preheader ], [ %.4275, %272 ]
  %150 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv342
  %151 = load i32, ptr %150, align 4, !tbaa !17
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %14, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !17
  %155 = load ptr, ptr %27, align 8, !tbaa !18
  %156 = getelementptr inbounds %struct.ckrinfo_t, ptr %155, i64 %152
  %157 = getelementptr inbounds i8, ptr %156, i64 12
  %158 = load i32, ptr %157, align 4, !tbaa !19
  %159 = icmp eq i32 %158, -1
  br i1 %159, label %160, label %169

160:                                              ; preds = %.lr.ph315
  %161 = getelementptr i32, ptr %8, i64 %152
  %162 = getelementptr i8, ptr %161, i64 4
  %163 = load i32, ptr %162, align 4, !tbaa !17
  %164 = load i32, ptr %161, align 4, !tbaa !17
  %165 = add i32 %163, 1
  %166 = sub i32 %165, %164
  %167 = tail call i32 @libmetis__cnbrpoolGetNext(ptr noundef %0, i32 noundef %166) #4
  store i32 %167, ptr %157, align 4, !tbaa !19
  %168 = getelementptr inbounds i8, ptr %156, i64 8
  store i32 0, ptr %168, align 4, !tbaa !21
  br label %169

169:                                              ; preds = %160, %.lr.ph315
  %170 = tail call i32 @libmetis__CheckRInfo(ptr noundef %0, ptr noundef nonnull %156) #4
  %.not262 = icmp eq i32 %170, 0
  br i1 %.not262, label %171, label %175

171:                                              ; preds = %169
  %172 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, i32 noundef 587, ptr noundef nonnull @.str.7)
  %173 = tail call i32 @libmetis__CheckRInfo(ptr noundef %0, ptr noundef nonnull %156) #4
  %.not263 = icmp eq i32 %173, 0
  br i1 %.not263, label %174, label %175

174:                                              ; preds = %171
  tail call void @__assert_fail(ptr noundef nonnull @.str.32, ptr noundef nonnull @.str.7, i32 noundef 587, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #5
  unreachable

175:                                              ; preds = %171, %169
  %176 = load ptr, ptr %28, align 8, !tbaa !22
  %177 = load i32, ptr %157, align 4, !tbaa !19
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds %struct.cnbr_t, ptr %176, i64 %178
  %180 = icmp eq i32 %154, %39
  br i1 %180, label %181, label %198

181:                                              ; preds = %175
  %182 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv342
  %183 = load i32, ptr %182, align 4, !tbaa !17
  %184 = getelementptr inbounds i8, ptr %156, i64 4
  %185 = load i32, ptr %184, align 4, !tbaa !37
  %186 = add nsw i32 %185, %183
  store i32 %186, ptr %184, align 4, !tbaa !37
  %187 = load i32, ptr %182, align 4, !tbaa !17
  %188 = load i32, ptr %156, align 4, !tbaa !32
  %189 = sub nsw i32 %188, %187
  store i32 %189, ptr %156, align 4, !tbaa !32
  %.not265 = icmp slt i32 %186, %189
  br i1 %.not265, label %.thread273, label %190

190:                                              ; preds = %181
  %191 = getelementptr inbounds i32, ptr %16, i64 %152
  %192 = load i32, ptr %191, align 4, !tbaa !17
  %193 = icmp eq i32 %192, -1
  br i1 %193, label %194, label %.thread273

194:                                              ; preds = %190
  %195 = sext i32 %.3312 to i64
  %196 = getelementptr inbounds i32, ptr %18, i64 %195
  store i32 %151, ptr %196, align 4, !tbaa !17
  %197 = add nsw i32 %.3312, 1
  store i32 %.3312, ptr %191, align 4, !tbaa !17
  br label %.thread273

198:                                              ; preds = %175
  %199 = icmp eq i32 %154, %2
  br i1 %199, label %200, label %223

200:                                              ; preds = %198
  %201 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv342
  %202 = load i32, ptr %201, align 4, !tbaa !17
  %203 = load i32, ptr %156, align 4, !tbaa !32
  %204 = add nsw i32 %203, %202
  store i32 %204, ptr %156, align 4, !tbaa !32
  %205 = load i32, ptr %201, align 4, !tbaa !17
  %206 = getelementptr inbounds i8, ptr %156, i64 4
  %207 = load i32, ptr %206, align 4, !tbaa !37
  %208 = sub nsw i32 %207, %205
  store i32 %208, ptr %206, align 4, !tbaa !37
  %209 = icmp slt i32 %208, %204
  br i1 %209, label %210, label %223

210:                                              ; preds = %200
  %211 = getelementptr inbounds i32, ptr %16, i64 %152
  %212 = load i32, ptr %211, align 4, !tbaa !17
  %.not264 = icmp eq i32 %212, -1
  br i1 %.not264, label %223, label %213

213:                                              ; preds = %210
  %214 = add nsw i32 %.3312, -1
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds i32, ptr %18, i64 %215
  %217 = load i32, ptr %216, align 4, !tbaa !17
  %218 = sext i32 %212 to i64
  %219 = getelementptr inbounds i32, ptr %18, i64 %218
  store i32 %217, ptr %219, align 4, !tbaa !17
  %220 = load i32, ptr %211, align 4, !tbaa !17
  %221 = sext i32 %217 to i64
  %222 = getelementptr inbounds i32, ptr %16, i64 %221
  store i32 %220, ptr %222, align 4, !tbaa !17
  store i32 -1, ptr %211, align 4, !tbaa !17
  br label %223

223:                                              ; preds = %198, %213, %210, %200
  %.4 = phi i32 [ %214, %213 ], [ %.3312, %210 ], [ %.3312, %200 ], [ %.3312, %198 ]
  %224 = getelementptr inbounds i8, ptr %156, i64 8
  %225 = load i32, ptr %224, align 4, !tbaa !21
  %226 = icmp sgt i32 %225, 0
  br i1 %226, label %.lr.ph306.preheader, label %.thread273

.lr.ph306.preheader:                              ; preds = %223
  %wide.trip.count335 = zext nneg i32 %225 to i64
  br label %.lr.ph306

227:                                              ; preds = %.lr.ph306
  %indvars.iv.next333 = add nuw nsw i64 %indvars.iv332, 1
  %exitcond336.not = icmp eq i64 %indvars.iv.next333, %wide.trip.count335
  br i1 %exitcond336.not, label %.thread273, label %.lr.ph306, !llvm.loop !38

.lr.ph306:                                        ; preds = %.lr.ph306.preheader, %227
  %indvars.iv332 = phi i64 [ 0, %.lr.ph306.preheader ], [ %indvars.iv.next333, %227 ]
  %228 = getelementptr inbounds %struct.cnbr_t, ptr %179, i64 %indvars.iv332
  %229 = load i32, ptr %228, align 4, !tbaa !27
  %230 = icmp eq i32 %229, %39
  br i1 %230, label %231, label %227

231:                                              ; preds = %.lr.ph306
  %232 = getelementptr inbounds %struct.cnbr_t, ptr %179, i64 %indvars.iv332
  %233 = getelementptr inbounds i8, ptr %232, i64 4
  %234 = load i32, ptr %233, align 4, !tbaa !31
  %235 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv342
  %236 = load i32, ptr %235, align 4, !tbaa !17
  %237 = icmp eq i32 %234, %236
  br i1 %237, label %238, label %243

238:                                              ; preds = %231
  %239 = add nsw i32 %225, -1
  store i32 %239, ptr %224, align 4, !tbaa !21
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds %struct.cnbr_t, ptr %179, i64 %240
  %242 = load i64, ptr %241, align 4
  store i64 %242, ptr %232, align 4
  br label %.thread273

243:                                              ; preds = %231
  %244 = sub nsw i32 %234, %236
  store i32 %244, ptr %233, align 4, !tbaa !31
  br label %.thread273

.thread273:                                       ; preds = %227, %223, %194, %190, %181, %243, %238
  %.4275 = phi i32 [ %.4, %243 ], [ %.4, %238 ], [ %.3312, %181 ], [ %.3312, %190 ], [ %197, %194 ], [ %.4, %223 ], [ %.4, %227 ]
  %.not267 = icmp eq i32 %154, %2
  br i1 %.not267, label %266, label %.preheader

.preheader:                                       ; preds = %.thread273
  %245 = getelementptr inbounds i8, ptr %156, i64 8
  %246 = load i32, ptr %245, align 4, !tbaa !21
  %247 = icmp sgt i32 %246, 0
  br i1 %247, label %.lr.ph309.preheader, label %.loopexit

.lr.ph309.preheader:                              ; preds = %.preheader
  %wide.trip.count340 = zext nneg i32 %246 to i64
  br label %.lr.ph309

.lr.ph309:                                        ; preds = %.lr.ph309.preheader, %258
  %indvars.iv337 = phi i64 [ 0, %.lr.ph309.preheader ], [ %indvars.iv.next338, %258 ]
  %248 = getelementptr inbounds %struct.cnbr_t, ptr %179, i64 %indvars.iv337
  %249 = load i32, ptr %248, align 4, !tbaa !27
  %250 = icmp eq i32 %249, %2
  br i1 %250, label %251, label %258

251:                                              ; preds = %.lr.ph309
  %252 = trunc nuw nsw i64 %indvars.iv337 to i32
  %253 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv342
  %254 = load i32, ptr %253, align 4, !tbaa !17
  %255 = getelementptr inbounds %struct.cnbr_t, ptr %179, i64 %indvars.iv337, i32 1
  %256 = load i32, ptr %255, align 4, !tbaa !31
  %257 = add nsw i32 %256, %254
  store i32 %257, ptr %255, align 4, !tbaa !31
  br label %.loopexit

258:                                              ; preds = %.lr.ph309
  %indvars.iv.next338 = add nuw nsw i64 %indvars.iv337, 1
  %exitcond341.not = icmp eq i64 %indvars.iv.next338, %wide.trip.count340
  br i1 %exitcond341.not, label %.loopexit.thread, label %.lr.ph309, !llvm.loop !39

.loopexit:                                        ; preds = %.preheader, %251
  %.1291 = phi i32 [ %252, %251 ], [ 0, %.preheader ]
  %259 = icmp eq i32 %.1291, %246
  br i1 %259, label %.loopexit.thread, label %266

.loopexit.thread:                                 ; preds = %258, %.loopexit
  %260 = zext nneg i32 %246 to i64
  %261 = getelementptr inbounds %struct.cnbr_t, ptr %179, i64 %260
  store i32 %2, ptr %261, align 4, !tbaa !27
  %262 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv342
  %263 = load i32, ptr %262, align 4, !tbaa !17
  %264 = getelementptr inbounds i8, ptr %261, i64 4
  store i32 %263, ptr %264, align 4, !tbaa !31
  %265 = add nsw i32 %246, 1
  store i32 %265, ptr %245, align 4, !tbaa !21
  br label %266

266:                                              ; preds = %.loopexit, %.loopexit.thread, %.thread273
  %267 = tail call i32 @libmetis__CheckRInfo(ptr noundef %0, ptr noundef %156) #4
  %.not268 = icmp eq i32 %267, 0
  br i1 %.not268, label %268, label %272

268:                                              ; preds = %266
  %269 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, i32 noundef 587, ptr noundef nonnull @.str.7)
  %270 = tail call i32 @libmetis__CheckRInfo(ptr noundef %0, ptr noundef %156) #4
  %.not269 = icmp eq i32 %270, 0
  br i1 %.not269, label %271, label %272

271:                                              ; preds = %268
  tail call void @__assert_fail(ptr noundef nonnull @.str.32, ptr noundef nonnull @.str.7, i32 noundef 587, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #5
  unreachable

272:                                              ; preds = %268, %266
  %indvars.iv.next343 = add nsw i64 %indvars.iv342, 1
  %273 = load i32, ptr %146, align 4, !tbaa !17
  %274 = sext i32 %273 to i64
  %275 = icmp slt i64 %indvars.iv.next343, %274
  br i1 %275, label %.lr.ph315, label %._crit_edge316, !llvm.loop !40

._crit_edge316:                                   ; preds = %272, %143
  %.3.lcssa = phi i32 [ %.2, %143 ], [ %.4275, %272 ]
  %276 = load ptr, ptr %27, align 8, !tbaa !18
  %277 = getelementptr inbounds %struct.ckrinfo_t, ptr %276, i64 %37
  %278 = tail call i32 @libmetis__CheckRInfo(ptr noundef %0, ptr noundef %277) #4
  %.not260 = icmp eq i32 %278, 0
  br i1 %.not260, label %279, label %285

279:                                              ; preds = %._crit_edge316
  %280 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.37, i32 noundef 590, ptr noundef nonnull @.str.7)
  %281 = load ptr, ptr %27, align 8, !tbaa !18
  %282 = getelementptr inbounds %struct.ckrinfo_t, ptr %281, i64 %37
  %283 = tail call i32 @libmetis__CheckRInfo(ptr noundef %0, ptr noundef %282) #4
  %.not261 = icmp eq i32 %283, 0
  br i1 %.not261, label %284, label %285

284:                                              ; preds = %279
  tail call void @__assert_fail(ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.7, i32 noundef 590, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__MoveGroupContigForCut) #5
  unreachable

285:                                              ; preds = %._crit_edge316, %279
  %indvars.iv.next346 = add nsw i64 %indvars.iv345, 1
  %286 = load i32, ptr %24, align 4, !tbaa !17
  %287 = sext i32 %286 to i64
  %288 = icmp slt i64 %indvars.iv.next346, %287
  br i1 %288, label %34, label %._crit_edge322, !llvm.loop !41

._crit_edge322:                                   ; preds = %285, %6
  %.0251.lcssa = phi i32 [ %20, %6 ], [ %.3.lcssa, %285 ]
  store i32 %.0251.lcssa, ptr %19, align 8, !tbaa !16
  ret void
}

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

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

attributes #0 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

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


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