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

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

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

@.str.1 = external hidden unnamed_addr constant [143 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [35 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams = external hidden unnamed_addr constant [63 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [62 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

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

71:                                               ; preds = %2
  store i32 0, ptr %5, align 4, !tbaa !15
  br label %72

72:                                               ; preds = %126, %71
  %73 = load i32, ptr %5, align 4, !tbaa !15
  %74 = load i32, ptr %9, align 4, !tbaa !15
  %75 = icmp slt i32 %73, %74
  br i1 %75, label %76, label %129

76:                                               ; preds = %72
  %77 = load ptr, ptr %21, align 8, !tbaa !5
  %78 = load i32, ptr %5, align 4, !tbaa !15
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %77, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !15
  %82 = icmp sge i32 %81, 0
  br i1 %82, label %83, label %91

83:                                               ; preds = %76
  %84 = load ptr, ptr %21, align 8, !tbaa !5
  %85 = load i32, ptr %5, align 4, !tbaa !15
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i32, ptr %84, i64 %86
  %88 = load i32, ptr %87, align 4, !tbaa !15
  %89 = load i32, ptr %11, align 4, !tbaa !15
  %90 = icmp slt i32 %88, %89
  br i1 %90, label %110, label %91

91:                                               ; preds = %83, %76
  %92 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 173, ptr noundef @.str.1)
  %93 = load ptr, ptr %21, align 8, !tbaa !5
  %94 = load i32, ptr %5, align 4, !tbaa !15
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds i32, ptr %93, i64 %95
  %97 = load i32, ptr %96, align 4, !tbaa !15
  %98 = icmp sge i32 %97, 0
  br i1 %98, label %99, label %108

99:                                               ; preds = %91
  %100 = load ptr, ptr %21, align 8, !tbaa !5
  %101 = load i32, ptr %5, align 4, !tbaa !15
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds i32, ptr %100, i64 %102
  %104 = load i32, ptr %103, align 4, !tbaa !15
  %105 = load i32, ptr %11, align 4, !tbaa !15
  %106 = icmp slt i32 %104, %105
  br i1 %106, label %107, label %108

107:                                              ; preds = %99
  br label %109

108:                                              ; preds = %99, %91
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 173, ptr noundef @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

109:                                              ; preds = %107
  br label %110

110:                                              ; preds = %109, %83
  %111 = load ptr, ptr %17, align 8, !tbaa !5
  %112 = load i32, ptr %5, align 4, !tbaa !15
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds i32, ptr %111, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !15
  %116 = load ptr, ptr %20, align 8, !tbaa !5
  %117 = load ptr, ptr %21, align 8, !tbaa !5
  %118 = load i32, ptr %5, align 4, !tbaa !15
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds i32, ptr %117, i64 %119
  %121 = load i32, ptr %120, align 4, !tbaa !15
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i32, ptr %116, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !15
  %125 = add nsw i32 %124, %115
  store i32 %125, ptr %123, align 4, !tbaa !15
  br label %126

126:                                              ; preds = %110
  %127 = load i32, ptr %5, align 4, !tbaa !15
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %5, align 4, !tbaa !15
  br label %72, !llvm.loop !27

129:                                              ; preds = %72
  br label %173

130:                                              ; preds = %2
  store i32 0, ptr %5, align 4, !tbaa !15
  br label %131

131:                                              ; preds = %169, %130
  %132 = load i32, ptr %5, align 4, !tbaa !15
  %133 = load i32, ptr %9, align 4, !tbaa !15
  %134 = icmp slt i32 %132, %133
  br i1 %134, label %135, label %172

135:                                              ; preds = %131
  %136 = load ptr, ptr %21, align 8, !tbaa !5
  %137 = load i32, ptr %5, align 4, !tbaa !15
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds i32, ptr %136, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !15
  store i32 %140, ptr %14, align 4, !tbaa !15
  store i32 0, ptr %6, align 4, !tbaa !15
  br label %141

141:                                              ; preds = %165, %135
  %142 = load i32, ptr %6, align 4, !tbaa !15
  %143 = load i32, ptr %10, align 4, !tbaa !15
  %144 = icmp slt i32 %142, %143
  br i1 %144, label %145, label %168

145:                                              ; preds = %141
  %146 = load ptr, ptr %17, align 8, !tbaa !5
  %147 = load i32, ptr %5, align 4, !tbaa !15
  %148 = load i32, ptr %10, align 4, !tbaa !15
  %149 = mul nsw i32 %147, %148
  %150 = load i32, ptr %6, align 4, !tbaa !15
  %151 = add nsw i32 %149, %150
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %146, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !15
  %155 = load ptr, ptr %20, align 8, !tbaa !5
  %156 = load i32, ptr %14, align 4, !tbaa !15
  %157 = load i32, ptr %10, align 4, !tbaa !15
  %158 = mul nsw i32 %156, %157
  %159 = load i32, ptr %6, align 4, !tbaa !15
  %160 = add nsw i32 %158, %159
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds i32, ptr %155, i64 %161
  %163 = load i32, ptr %162, align 4, !tbaa !15
  %164 = add nsw i32 %163, %154
  store i32 %164, ptr %162, align 4, !tbaa !15
  br label %165

165:                                              ; preds = %145
  %166 = load i32, ptr %6, align 4, !tbaa !15
  %167 = add nsw i32 %166, 1
  store i32 %167, ptr %6, align 4, !tbaa !15
  br label %141, !llvm.loop !29

168:                                              ; preds = %141
  br label %169

169:                                              ; preds = %168
  %170 = load i32, ptr %5, align 4, !tbaa !15
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %5, align 4, !tbaa !15
  br label %131, !llvm.loop !30

172:                                              ; preds = %131
  br label %173

173:                                              ; preds = %172, %129
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.ctrl_t, ptr %174, i32 0, i32 1
  %176 = load i32, ptr %175, align 4, !tbaa !31
  switch i32 %176, label %751 [
    i32 0, label %177
    i32 1, label %487
  ]

177:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %178 = load ptr, ptr %4, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.graph_t, ptr %178, i32 0, i32 26
  %180 = load ptr, ptr %179, align 8, !tbaa !32
  %181 = load i32, ptr %9, align 4, !tbaa !15
  %182 = sext i32 %181 to i64
  %183 = mul i64 16, %182
  call void @llvm.memset.p0.i64(ptr align 4 %180, i8 0, i64 %183, i1 false)
  %184 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libmetis__cnbrpoolReset(ptr noundef %184)
  store i32 0, ptr %5, align 4, !tbaa !15
  br label %185

185:                                              ; preds = %464, %177
  %186 = load i32, ptr %5, align 4, !tbaa !15
  %187 = load i32, ptr %9, align 4, !tbaa !15
  %188 = icmp slt i32 %186, %187
  br i1 %188, label %189, label %467

189:                                              ; preds = %185
  %190 = load ptr, ptr %21, align 8, !tbaa !5
  %191 = load i32, ptr %5, align 4, !tbaa !15
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds i32, ptr %190, i64 %192
  %194 = load i32, ptr %193, align 4, !tbaa !15
  store i32 %194, ptr %14, align 4, !tbaa !15
  %195 = load ptr, ptr %4, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.graph_t, ptr %195, i32 0, i32 26
  %197 = load ptr, ptr %196, align 8, !tbaa !32
  %198 = load i32, ptr %5, align 4, !tbaa !15
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds %struct.ckrinfo_t, ptr %197, i64 %199
  store ptr %200, ptr %24, align 8, !tbaa !5
  %201 = load ptr, ptr %16, align 8, !tbaa !5
  %202 = load i32, ptr %5, align 4, !tbaa !15
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds i32, ptr %201, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !15
  store i32 %205, ptr %6, align 4, !tbaa !15
  br label %206

206:                                              ; preds = %248, %189
  %207 = load i32, ptr %6, align 4, !tbaa !15
  %208 = load ptr, ptr %16, align 8, !tbaa !5
  %209 = load i32, ptr %5, align 4, !tbaa !15
  %210 = add nsw i32 %209, 1
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i32, ptr %208, i64 %211
  %213 = load i32, ptr %212, align 4, !tbaa !15
  %214 = icmp slt i32 %207, %213
  br i1 %214, label %215, label %251

215:                                              ; preds = %206
  %216 = load i32, ptr %14, align 4, !tbaa !15
  %217 = load ptr, ptr %21, align 8, !tbaa !5
  %218 = load ptr, ptr %18, align 8, !tbaa !5
  %219 = load i32, ptr %6, align 4, !tbaa !15
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i32, ptr %218, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !15
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %217, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !15
  %226 = icmp eq i32 %216, %225
  br i1 %226, label %227, label %237

227:                                              ; preds = %215
  %228 = load ptr, ptr %19, align 8, !tbaa !5
  %229 = load i32, ptr %6, align 4, !tbaa !15
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i32, ptr %228, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !15
  %233 = load ptr, ptr %24, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.ckrinfo_t, ptr %233, i32 0, i32 0
  %235 = load i32, ptr %234, align 4, !tbaa !33
  %236 = add nsw i32 %235, %232
  store i32 %236, ptr %234, align 4, !tbaa !33
  br label %247

237:                                              ; preds = %215
  %238 = load ptr, ptr %19, align 8, !tbaa !5
  %239 = load i32, ptr %6, align 4, !tbaa !15
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %238, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !15
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.ckrinfo_t, ptr %243, i32 0, i32 1
  %245 = load i32, ptr %244, align 4, !tbaa !35
  %246 = add nsw i32 %245, %242
  store i32 %246, ptr %244, align 4, !tbaa !35
  br label %247

247:                                              ; preds = %237, %227
  br label %248

248:                                              ; preds = %247
  %249 = load i32, ptr %6, align 4, !tbaa !15
  %250 = add nsw i32 %249, 1
  store i32 %250, ptr %6, align 4, !tbaa !15
  br label %206, !llvm.loop !36

251:                                              ; preds = %206
  %252 = load ptr, ptr %24, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.ckrinfo_t, ptr %252, i32 0, i32 1
  %254 = load i32, ptr %253, align 4, !tbaa !35
  %255 = icmp sgt i32 %254, 0
  br i1 %255, label %256, label %460

256:                                              ; preds = %251
  %257 = load ptr, ptr %24, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.ckrinfo_t, ptr %257, i32 0, i32 1
  %259 = load i32, ptr %258, align 4, !tbaa !35
  %260 = load i32, ptr %13, align 4, !tbaa !15
  %261 = add nsw i32 %260, %259
  store i32 %261, ptr %13, align 4, !tbaa !15
  %262 = load ptr, ptr %3, align 8, !tbaa !5
  %263 = load ptr, ptr %16, align 8, !tbaa !5
  %264 = load i32, ptr %5, align 4, !tbaa !15
  %265 = add nsw i32 %264, 1
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds i32, ptr %263, i64 %266
  %268 = load i32, ptr %267, align 4, !tbaa !15
  %269 = load ptr, ptr %16, align 8, !tbaa !5
  %270 = load i32, ptr %5, align 4, !tbaa !15
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %269, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !15
  %274 = sub nsw i32 %268, %273
  %275 = add nsw i32 %274, 1
  %276 = call i32 @libmetis__cnbrpoolGetNext(ptr noundef %262, i32 noundef %275)
  %277 = load ptr, ptr %24, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.ckrinfo_t, ptr %277, i32 0, i32 3
  store i32 %276, ptr %278, align 4, !tbaa !37
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.ctrl_t, ptr %279, i32 0, i32 43
  %281 = load ptr, ptr %280, align 8, !tbaa !38
  %282 = load ptr, ptr %24, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.ckrinfo_t, ptr %282, i32 0, i32 3
  %284 = load i32, ptr %283, align 4, !tbaa !37
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds %struct.cnbr_t, ptr %281, i64 %285
  store ptr %286, ptr %25, align 8, !tbaa !5
  %287 = load ptr, ptr %16, align 8, !tbaa !5
  %288 = load i32, ptr %5, align 4, !tbaa !15
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i32, ptr %287, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !15
  store i32 %291, ptr %6, align 4, !tbaa !15
  br label %292

292:                                              ; preds = %376, %256
  %293 = load i32, ptr %6, align 4, !tbaa !15
  %294 = load ptr, ptr %16, align 8, !tbaa !5
  %295 = load i32, ptr %5, align 4, !tbaa !15
  %296 = add nsw i32 %295, 1
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds i32, ptr %294, i64 %297
  %299 = load i32, ptr %298, align 4, !tbaa !15
  %300 = icmp slt i32 %293, %299
  br i1 %300, label %301, label %379

301:                                              ; preds = %292
  %302 = load ptr, ptr %21, align 8, !tbaa !5
  %303 = load ptr, ptr %18, align 8, !tbaa !5
  %304 = load i32, ptr %6, align 4, !tbaa !15
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds i32, ptr %303, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !15
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds i32, ptr %302, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !15
  store i32 %310, ptr %15, align 4, !tbaa !15
  %311 = load i32, ptr %14, align 4, !tbaa !15
  %312 = load i32, ptr %15, align 4, !tbaa !15
  %313 = icmp ne i32 %311, %312
  br i1 %313, label %314, label %375

314:                                              ; preds = %301
  store i32 0, ptr %7, align 4, !tbaa !15
  br label %315

315:                                              ; preds = %344, %314
  %316 = load i32, ptr %7, align 4, !tbaa !15
  %317 = load ptr, ptr %24, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ckrinfo_t, ptr %317, i32 0, i32 2
  %319 = load i32, ptr %318, align 4, !tbaa !39
  %320 = icmp slt i32 %316, %319
  br i1 %320, label %321, label %347

321:                                              ; preds = %315
  %322 = load ptr, ptr %25, align 8, !tbaa !5
  %323 = load i32, ptr %7, align 4, !tbaa !15
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds %struct.cnbr_t, ptr %322, i64 %324
  %326 = getelementptr inbounds %struct.cnbr_t, ptr %325, i32 0, i32 0
  %327 = load i32, ptr %326, align 4, !tbaa !40
  %328 = load i32, ptr %15, align 4, !tbaa !15
  %329 = icmp eq i32 %327, %328
  br i1 %329, label %330, label %343

330:                                              ; preds = %321
  %331 = load ptr, ptr %19, align 8, !tbaa !5
  %332 = load i32, ptr %6, align 4, !tbaa !15
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds i32, ptr %331, i64 %333
  %335 = load i32, ptr %334, align 4, !tbaa !15
  %336 = load ptr, ptr %25, align 8, !tbaa !5
  %337 = load i32, ptr %7, align 4, !tbaa !15
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds %struct.cnbr_t, ptr %336, i64 %338
  %340 = getelementptr inbounds %struct.cnbr_t, ptr %339, i32 0, i32 1
  %341 = load i32, ptr %340, align 4, !tbaa !42
  %342 = add nsw i32 %341, %335
  store i32 %342, ptr %340, align 4, !tbaa !42
  br label %347

343:                                              ; preds = %321
  br label %344

344:                                              ; preds = %343
  %345 = load i32, ptr %7, align 4, !tbaa !15
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %7, align 4, !tbaa !15
  br label %315, !llvm.loop !43

347:                                              ; preds = %330, %315
  %348 = load i32, ptr %7, align 4, !tbaa !15
  %349 = load ptr, ptr %24, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.ckrinfo_t, ptr %349, i32 0, i32 2
  %351 = load i32, ptr %350, align 4, !tbaa !39
  %352 = icmp eq i32 %348, %351
  br i1 %352, label %353, label %374

353:                                              ; preds = %347
  %354 = load i32, ptr %15, align 4, !tbaa !15
  %355 = load ptr, ptr %25, align 8, !tbaa !5
  %356 = load i32, ptr %7, align 4, !tbaa !15
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds %struct.cnbr_t, ptr %355, i64 %357
  %359 = getelementptr inbounds %struct.cnbr_t, ptr %358, i32 0, i32 0
  store i32 %354, ptr %359, align 4, !tbaa !40
  %360 = load ptr, ptr %19, align 8, !tbaa !5
  %361 = load i32, ptr %6, align 4, !tbaa !15
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i32, ptr %360, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !15
  %365 = load ptr, ptr %25, align 8, !tbaa !5
  %366 = load i32, ptr %7, align 4, !tbaa !15
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds %struct.cnbr_t, ptr %365, i64 %367
  %369 = getelementptr inbounds %struct.cnbr_t, ptr %368, i32 0, i32 1
  store i32 %364, ptr %369, align 4, !tbaa !42
  %370 = load ptr, ptr %24, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.ckrinfo_t, ptr %370, i32 0, i32 2
  %372 = load i32, ptr %371, align 4, !tbaa !39
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %371, align 4, !tbaa !39
  br label %374

374:                                              ; preds = %353, %347
  br label %375

375:                                              ; preds = %374, %301
  br label %376

376:                                              ; preds = %375
  %377 = load i32, ptr %6, align 4, !tbaa !15
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %6, align 4, !tbaa !15
  br label %292, !llvm.loop !44

379:                                              ; preds = %292
  %380 = load ptr, ptr %24, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.ckrinfo_t, ptr %380, i32 0, i32 2
  %382 = load i32, ptr %381, align 4, !tbaa !39
  %383 = load ptr, ptr %16, align 8, !tbaa !5
  %384 = load i32, ptr %5, align 4, !tbaa !15
  %385 = add nsw i32 %384, 1
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %383, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !15
  %389 = load ptr, ptr %16, align 8, !tbaa !5
  %390 = load i32, ptr %5, align 4, !tbaa !15
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds i32, ptr %389, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !15
  %394 = sub nsw i32 %388, %393
  %395 = icmp sle i32 %382, %394
  br i1 %395, label %417, label %396

396:                                              ; preds = %379
  %397 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef 230, ptr noundef @.str.1)
  %398 = load ptr, ptr %24, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.ckrinfo_t, ptr %398, i32 0, i32 2
  %400 = load i32, ptr %399, align 4, !tbaa !39
  %401 = load ptr, ptr %16, align 8, !tbaa !5
  %402 = load i32, ptr %5, align 4, !tbaa !15
  %403 = add nsw i32 %402, 1
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds i32, ptr %401, i64 %404
  %406 = load i32, ptr %405, align 4, !tbaa !15
  %407 = load ptr, ptr %16, align 8, !tbaa !5
  %408 = load i32, ptr %5, align 4, !tbaa !15
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !15
  %412 = sub nsw i32 %406, %411
  %413 = icmp sle i32 %400, %412
  br i1 %413, label %414, label %415

414:                                              ; preds = %396
  br label %416

415:                                              ; preds = %396
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 230, ptr noundef @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

416:                                              ; preds = %414
  br label %417

417:                                              ; preds = %416, %379
  %418 = load ptr, ptr %24, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.ckrinfo_t, ptr %418, i32 0, i32 1
  %420 = load i32, ptr %419, align 4, !tbaa !35
  %421 = load ptr, ptr %24, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.ckrinfo_t, ptr %421, i32 0, i32 0
  %423 = load i32, ptr %422, align 4, !tbaa !33
  %424 = sub nsw i32 %420, %423
  %425 = icmp sge i32 %424, 0
  br i1 %425, label %426, label %459

426:                                              ; preds = %417
  br label %427

427:                                              ; preds = %426
  %428 = load ptr, ptr %23, align 8, !tbaa !5
  %429 = load i32, ptr %5, align 4, !tbaa !15
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i32, ptr %428, i64 %430
  %432 = load i32, ptr %431, align 4, !tbaa !15
  %433 = icmp eq i32 %432, -1
  br i1 %433, label %445, label %434

434:                                              ; preds = %427
  %435 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef 234, ptr noundef @.str.1)
  %436 = load ptr, ptr %23, align 8, !tbaa !5
  %437 = load i32, ptr %5, align 4, !tbaa !15
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds i32, ptr %436, i64 %438
  %440 = load i32, ptr %439, align 4, !tbaa !15
  %441 = icmp eq i32 %440, -1
  br i1 %441, label %442, label %443

442:                                              ; preds = %434
  br label %444

443:                                              ; preds = %434
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 234, ptr noundef @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

444:                                              ; preds = %442
  br label %445

445:                                              ; preds = %444, %427
  %446 = load i32, ptr %5, align 4, !tbaa !15
  %447 = load ptr, ptr %22, align 8, !tbaa !5
  %448 = load i32, ptr %12, align 4, !tbaa !15
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %447, i64 %449
  store i32 %446, ptr %450, align 4, !tbaa !15
  %451 = load i32, ptr %12, align 4, !tbaa !15
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %12, align 4, !tbaa !15
  %453 = load ptr, ptr %23, align 8, !tbaa !5
  %454 = load i32, ptr %5, align 4, !tbaa !15
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i32, ptr %453, i64 %455
  store i32 %451, ptr %456, align 4, !tbaa !15
  br label %457

457:                                              ; preds = %445
  br label %458

458:                                              ; preds = %457
  br label %459

459:                                              ; preds = %458, %417
  br label %463

460:                                              ; preds = %251
  %461 = load ptr, ptr %24, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.ckrinfo_t, ptr %461, i32 0, i32 3
  store i32 -1, ptr %462, align 4, !tbaa !37
  br label %463

463:                                              ; preds = %460, %459
  br label %464

464:                                              ; preds = %463
  %465 = load i32, ptr %5, align 4, !tbaa !15
  %466 = add nsw i32 %465, 1
  store i32 %466, ptr %5, align 4, !tbaa !15
  br label %185, !llvm.loop !45

467:                                              ; preds = %185
  %468 = load i32, ptr %13, align 4, !tbaa !15
  %469 = sdiv i32 %468, 2
  %470 = load ptr, ptr %4, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.graph_t, ptr %470, i32 0, i32 17
  store i32 %469, ptr %471, align 8, !tbaa !46
  %472 = load i32, ptr %12, align 4, !tbaa !15
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.graph_t, ptr %473, i32 0, i32 21
  store i32 %472, ptr %474, align 8, !tbaa !47
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  %475 = load ptr, ptr %4, align 8, !tbaa !5
  %476 = call i32 @libmetis__CheckBnd2(ptr noundef %475)
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %486, label %478

478:                                              ; preds = %467
  %479 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef 245, ptr noundef @.str.1)
  %480 = load ptr, ptr %4, align 8, !tbaa !5
  %481 = call i32 @libmetis__CheckBnd2(ptr noundef %480)
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %483, label %484

483:                                              ; preds = %478
  br label %485

484:                                              ; preds = %478
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.1, i32 noundef 245, ptr noundef @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

485:                                              ; preds = %483
  br label %486

486:                                              ; preds = %485, %467
  br label %755

487:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.graph_t, ptr %488, i32 0, i32 27
  %490 = load ptr, ptr %489, align 8, !tbaa !48
  %491 = load i32, ptr %9, align 4, !tbaa !15
  %492 = sext i32 %491 to i64
  %493 = mul i64 20, %492
  call void @llvm.memset.p0.i64(ptr align 4 %490, i8 0, i64 %493, i1 false)
  %494 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libmetis__vnbrpoolReset(ptr noundef %494)
  store i32 0, ptr %5, align 4, !tbaa !15
  br label %495

495:                                              ; preds = %717, %487
  %496 = load i32, ptr %5, align 4, !tbaa !15
  %497 = load i32, ptr %9, align 4, !tbaa !15
  %498 = icmp slt i32 %496, %497
  br i1 %498, label %499, label %720

499:                                              ; preds = %495
  %500 = load ptr, ptr %21, align 8, !tbaa !5
  %501 = load i32, ptr %5, align 4, !tbaa !15
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %500, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !15
  store i32 %504, ptr %14, align 4, !tbaa !15
  %505 = load ptr, ptr %4, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.graph_t, ptr %505, i32 0, i32 27
  %507 = load ptr, ptr %506, align 8, !tbaa !48
  %508 = load i32, ptr %5, align 4, !tbaa !15
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds %struct.vkrinfo_t, ptr %507, i64 %509
  store ptr %510, ptr %26, align 8, !tbaa !5
  %511 = load ptr, ptr %16, align 8, !tbaa !5
  %512 = load i32, ptr %5, align 4, !tbaa !15
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !15
  store i32 %515, ptr %6, align 4, !tbaa !15
  br label %516

516:                                              ; preds = %548, %499
  %517 = load i32, ptr %6, align 4, !tbaa !15
  %518 = load ptr, ptr %16, align 8, !tbaa !5
  %519 = load i32, ptr %5, align 4, !tbaa !15
  %520 = add nsw i32 %519, 1
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i32, ptr %518, i64 %521
  %523 = load i32, ptr %522, align 4, !tbaa !15
  %524 = icmp slt i32 %517, %523
  br i1 %524, label %525, label %551

525:                                              ; preds = %516
  %526 = load i32, ptr %14, align 4, !tbaa !15
  %527 = load ptr, ptr %21, align 8, !tbaa !5
  %528 = load ptr, ptr %18, align 8, !tbaa !5
  %529 = load i32, ptr %6, align 4, !tbaa !15
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds i32, ptr %528, i64 %530
  %532 = load i32, ptr %531, align 4, !tbaa !15
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds i32, ptr %527, i64 %533
  %535 = load i32, ptr %534, align 4, !tbaa !15
  %536 = icmp eq i32 %526, %535
  br i1 %536, label %537, label %542

537:                                              ; preds = %525
  %538 = load ptr, ptr %26, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.vkrinfo_t, ptr %538, i32 0, i32 0
  %540 = load i32, ptr %539, align 4, !tbaa !49
  %541 = add nsw i32 %540, 1
  store i32 %541, ptr %539, align 4, !tbaa !49
  br label %547

542:                                              ; preds = %525
  %543 = load ptr, ptr %26, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.vkrinfo_t, ptr %543, i32 0, i32 1
  %545 = load i32, ptr %544, align 4, !tbaa !51
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %544, align 4, !tbaa !51
  br label %547

547:                                              ; preds = %542, %537
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %6, align 4, !tbaa !15
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %6, align 4, !tbaa !15
  br label %516, !llvm.loop !52

551:                                              ; preds = %516
  %552 = load ptr, ptr %26, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.vkrinfo_t, ptr %552, i32 0, i32 1
  %554 = load i32, ptr %553, align 4, !tbaa !51
  %555 = icmp sgt i32 %554, 0
  br i1 %555, label %556, label %713

556:                                              ; preds = %551
  %557 = load ptr, ptr %26, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.vkrinfo_t, ptr %557, i32 0, i32 1
  %559 = load i32, ptr %558, align 4, !tbaa !51
  %560 = load i32, ptr %13, align 4, !tbaa !15
  %561 = add nsw i32 %560, %559
  store i32 %561, ptr %13, align 4, !tbaa !15
  %562 = load ptr, ptr %3, align 8, !tbaa !5
  %563 = load ptr, ptr %16, align 8, !tbaa !5
  %564 = load i32, ptr %5, align 4, !tbaa !15
  %565 = add nsw i32 %564, 1
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i32, ptr %563, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !15
  %569 = load ptr, ptr %16, align 8, !tbaa !5
  %570 = load i32, ptr %5, align 4, !tbaa !15
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds i32, ptr %569, i64 %571
  %573 = load i32, ptr %572, align 4, !tbaa !15
  %574 = sub nsw i32 %568, %573
  %575 = add nsw i32 %574, 1
  %576 = call i32 @libmetis__vnbrpoolGetNext(ptr noundef %562, i32 noundef %575)
  %577 = load ptr, ptr %26, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.vkrinfo_t, ptr %577, i32 0, i32 4
  store i32 %576, ptr %578, align 4, !tbaa !53
  %579 = load ptr, ptr %3, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.ctrl_t, ptr %579, i32 0, i32 44
  %581 = load ptr, ptr %580, align 8, !tbaa !54
  %582 = load ptr, ptr %26, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.vkrinfo_t, ptr %582, i32 0, i32 4
  %584 = load i32, ptr %583, align 4, !tbaa !53
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds %struct.vnbr_t, ptr %581, i64 %585
  store ptr %586, ptr %27, align 8, !tbaa !5
  %587 = load ptr, ptr %16, align 8, !tbaa !5
  %588 = load i32, ptr %5, align 4, !tbaa !15
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds i32, ptr %587, i64 %589
  %591 = load i32, ptr %590, align 4, !tbaa !15
  store i32 %591, ptr %6, align 4, !tbaa !15
  br label %592

592:                                              ; preds = %671, %556
  %593 = load i32, ptr %6, align 4, !tbaa !15
  %594 = load ptr, ptr %16, align 8, !tbaa !5
  %595 = load i32, ptr %5, align 4, !tbaa !15
  %596 = add nsw i32 %595, 1
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds i32, ptr %594, i64 %597
  %599 = load i32, ptr %598, align 4, !tbaa !15
  %600 = icmp slt i32 %593, %599
  br i1 %600, label %601, label %674

601:                                              ; preds = %592
  %602 = load ptr, ptr %21, align 8, !tbaa !5
  %603 = load ptr, ptr %18, align 8, !tbaa !5
  %604 = load i32, ptr %6, align 4, !tbaa !15
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds i32, ptr %603, i64 %605
  %607 = load i32, ptr %606, align 4, !tbaa !15
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds i32, ptr %602, i64 %608
  %610 = load i32, ptr %609, align 4, !tbaa !15
  store i32 %610, ptr %15, align 4, !tbaa !15
  %611 = load i32, ptr %14, align 4, !tbaa !15
  %612 = load i32, ptr %15, align 4, !tbaa !15
  %613 = icmp ne i32 %611, %612
  br i1 %613, label %614, label %670

614:                                              ; preds = %601
  store i32 0, ptr %7, align 4, !tbaa !15
  br label %615

615:                                              ; preds = %639, %614
  %616 = load i32, ptr %7, align 4, !tbaa !15
  %617 = load ptr, ptr %26, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.vkrinfo_t, ptr %617, i32 0, i32 3
  %619 = load i32, ptr %618, align 4, !tbaa !55
  %620 = icmp slt i32 %616, %619
  br i1 %620, label %621, label %642

621:                                              ; preds = %615
  %622 = load ptr, ptr %27, align 8, !tbaa !5
  %623 = load i32, ptr %7, align 4, !tbaa !15
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds %struct.vnbr_t, ptr %622, i64 %624
  %626 = getelementptr inbounds %struct.vnbr_t, ptr %625, i32 0, i32 0
  %627 = load i32, ptr %626, align 4, !tbaa !56
  %628 = load i32, ptr %15, align 4, !tbaa !15
  %629 = icmp eq i32 %627, %628
  br i1 %629, label %630, label %638

630:                                              ; preds = %621
  %631 = load ptr, ptr %27, align 8, !tbaa !5
  %632 = load i32, ptr %7, align 4, !tbaa !15
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds %struct.vnbr_t, ptr %631, i64 %633
  %635 = getelementptr inbounds %struct.vnbr_t, ptr %634, i32 0, i32 1
  %636 = load i32, ptr %635, align 4, !tbaa !58
  %637 = add nsw i32 %636, 1
  store i32 %637, ptr %635, align 4, !tbaa !58
  br label %642

638:                                              ; preds = %621
  br label %639

639:                                              ; preds = %638
  %640 = load i32, ptr %7, align 4, !tbaa !15
  %641 = add nsw i32 %640, 1
  store i32 %641, ptr %7, align 4, !tbaa !15
  br label %615, !llvm.loop !59

642:                                              ; preds = %630, %615
  %643 = load i32, ptr %7, align 4, !tbaa !15
  %644 = load ptr, ptr %26, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.vkrinfo_t, ptr %644, i32 0, i32 3
  %646 = load i32, ptr %645, align 4, !tbaa !55
  %647 = icmp eq i32 %643, %646
  br i1 %647, label %648, label %669

648:                                              ; preds = %642
  %649 = load ptr, ptr %27, align 8, !tbaa !5
  %650 = load i32, ptr %7, align 4, !tbaa !15
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds %struct.vnbr_t, ptr %649, i64 %651
  %653 = getelementptr inbounds %struct.vnbr_t, ptr %652, i32 0, i32 2
  store i32 0, ptr %653, align 4, !tbaa !60
  %654 = load i32, ptr %15, align 4, !tbaa !15
  %655 = load ptr, ptr %27, align 8, !tbaa !5
  %656 = load i32, ptr %7, align 4, !tbaa !15
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds %struct.vnbr_t, ptr %655, i64 %657
  %659 = getelementptr inbounds %struct.vnbr_t, ptr %658, i32 0, i32 0
  store i32 %654, ptr %659, align 4, !tbaa !56
  %660 = load ptr, ptr %27, align 8, !tbaa !5
  %661 = load i32, ptr %7, align 4, !tbaa !15
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds %struct.vnbr_t, ptr %660, i64 %662
  %664 = getelementptr inbounds %struct.vnbr_t, ptr %663, i32 0, i32 1
  store i32 1, ptr %664, align 4, !tbaa !58
  %665 = load ptr, ptr %26, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.vkrinfo_t, ptr %665, i32 0, i32 3
  %667 = load i32, ptr %666, align 4, !tbaa !55
  %668 = add nsw i32 %667, 1
  store i32 %668, ptr %666, align 4, !tbaa !55
  br label %669

669:                                              ; preds = %648, %642
  br label %670

670:                                              ; preds = %669, %601
  br label %671

671:                                              ; preds = %670
  %672 = load i32, ptr %6, align 4, !tbaa !15
  %673 = add nsw i32 %672, 1
  store i32 %673, ptr %6, align 4, !tbaa !15
  br label %592, !llvm.loop !61

674:                                              ; preds = %592
  %675 = load ptr, ptr %26, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.vkrinfo_t, ptr %675, i32 0, i32 3
  %677 = load i32, ptr %676, align 4, !tbaa !55
  %678 = load ptr, ptr %16, align 8, !tbaa !5
  %679 = load i32, ptr %5, align 4, !tbaa !15
  %680 = add nsw i32 %679, 1
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds i32, ptr %678, i64 %681
  %683 = load i32, ptr %682, align 4, !tbaa !15
  %684 = load ptr, ptr %16, align 8, !tbaa !5
  %685 = load i32, ptr %5, align 4, !tbaa !15
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds i32, ptr %684, i64 %686
  %688 = load i32, ptr %687, align 4, !tbaa !15
  %689 = sub nsw i32 %683, %688
  %690 = icmp sle i32 %677, %689
  br i1 %690, label %712, label %691

691:                                              ; preds = %674
  %692 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef 292, ptr noundef @.str.1)
  %693 = load ptr, ptr %26, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.vkrinfo_t, ptr %693, i32 0, i32 3
  %695 = load i32, ptr %694, align 4, !tbaa !55
  %696 = load ptr, ptr %16, align 8, !tbaa !5
  %697 = load i32, ptr %5, align 4, !tbaa !15
  %698 = add nsw i32 %697, 1
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds i32, ptr %696, i64 %699
  %701 = load i32, ptr %700, align 4, !tbaa !15
  %702 = load ptr, ptr %16, align 8, !tbaa !5
  %703 = load i32, ptr %5, align 4, !tbaa !15
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i32, ptr %702, i64 %704
  %706 = load i32, ptr %705, align 4, !tbaa !15
  %707 = sub nsw i32 %701, %706
  %708 = icmp sle i32 %695, %707
  br i1 %708, label %709, label %710

709:                                              ; preds = %691
  br label %711

710:                                              ; preds = %691
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 292, ptr noundef @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

711:                                              ; preds = %709
  br label %712

712:                                              ; preds = %711, %674
  br label %716

713:                                              ; preds = %551
  %714 = load ptr, ptr %26, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.vkrinfo_t, ptr %714, i32 0, i32 4
  store i32 -1, ptr %715, align 4, !tbaa !53
  br label %716

716:                                              ; preds = %713, %712
  br label %717

717:                                              ; preds = %716
  %718 = load i32, ptr %5, align 4, !tbaa !15
  %719 = add nsw i32 %718, 1
  store i32 %719, ptr %5, align 4, !tbaa !15
  br label %495, !llvm.loop !62

720:                                              ; preds = %495
  %721 = load i32, ptr %13, align 4, !tbaa !15
  %722 = sdiv i32 %721, 2
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.graph_t, ptr %723, i32 0, i32 17
  store i32 %722, ptr %724, align 8, !tbaa !46
  %725 = load ptr, ptr %3, align 8, !tbaa !5
  %726 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__ComputeKWayVolGains(ptr noundef %725, ptr noundef %726)
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %727 = load ptr, ptr %4, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.graph_t, ptr %727, i32 0, i32 18
  %729 = load i32, ptr %728, align 4, !tbaa !63
  %730 = load ptr, ptr %4, align 8, !tbaa !5
  %731 = load ptr, ptr %4, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.graph_t, ptr %731, i32 0, i32 19
  %733 = load ptr, ptr %732, align 8, !tbaa !23
  %734 = call i32 @libmetis__ComputeVolume(ptr noundef %730, ptr noundef %733)
  %735 = icmp eq i32 %729, %734
  br i1 %735, label %750, label %736

736:                                              ; preds = %720
  %737 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef 302, ptr noundef @.str.1)
  %738 = load ptr, ptr %4, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.graph_t, ptr %738, i32 0, i32 18
  %740 = load i32, ptr %739, align 4, !tbaa !63
  %741 = load ptr, ptr %4, align 8, !tbaa !5
  %742 = load ptr, ptr %4, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.graph_t, ptr %742, i32 0, i32 19
  %744 = load ptr, ptr %743, align 8, !tbaa !23
  %745 = call i32 @libmetis__ComputeVolume(ptr noundef %741, ptr noundef %744)
  %746 = icmp eq i32 %740, %745
  br i1 %746, label %747, label %748

747:                                              ; preds = %736
  br label %749

748:                                              ; preds = %736
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.1, i32 noundef 302, ptr noundef @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

749:                                              ; preds = %747
  br label %750

750:                                              ; preds = %749, %720
  br label %755

751:                                              ; preds = %173
  %752 = load ptr, ptr %3, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.ctrl_t, ptr %752, i32 0, i32 1
  %754 = load i32, ptr %753, align 4, !tbaa !31
  call void (i32, ptr, ...) @gk_errexit(i32 noundef 15, ptr noundef @.str.11, i32 noundef %754)
  br label %755

755:                                              ; preds = %751, %750, %486
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  ret void
}

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

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

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

declare void @gk_errexit(i32 noundef, ptr noundef, ...) #2

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

declare void @libmetis__cnbrpoolReset(ptr noundef) #2

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

declare i32 @libmetis__CheckBnd2(ptr noundef) #2

declare void @libmetis__vnbrpoolReset(ptr noundef) #2

declare i32 @libmetis__vnbrpoolGetNext(ptr noundef, i32 noundef) #2

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

declare i32 @libmetis__ComputeVolume(ptr noundef, ptr noundef) #2

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


; 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 }
%struct.vkrinfo_t = type { i32, i32, i32, i32, i32 }
%struct.vnbr_t = type { i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [143 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [35 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams = external hidden unnamed_addr constant [63 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [62 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__ComputeKWayPartitionParams(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 92
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %5 = load i32, ptr %1, align 8, !tbaa !14
  %6 = getelementptr inbounds i8, ptr %1, i64 8
  %7 = load i32, ptr %6, align 8, !tbaa !16
  %8 = getelementptr inbounds i8, ptr %1, i64 16
  %9 = load ptr, ptr %8, align 8, !tbaa !17
  %10 = getelementptr inbounds i8, ptr %1, i64 24
  %11 = load ptr, ptr %10, align 8, !tbaa !18
  %12 = getelementptr inbounds i8, ptr %1, i64 40
  %13 = load ptr, ptr %12, align 8, !tbaa !19
  %14 = getelementptr inbounds i8, ptr %1, i64 48
  %15 = load ptr, ptr %14, align 8, !tbaa !20
  %16 = getelementptr inbounds i8, ptr %1, i64 120
  %17 = load ptr, ptr %16, align 8, !tbaa !21
  %18 = mul nsw i32 %7, %4
  %19 = sext i32 %18 to i64
  %20 = getelementptr inbounds i8, ptr %1, i64 128
  %21 = load ptr, ptr %20, align 8, !tbaa !22
  %22 = tail call ptr @libmetis__iset(i64 noundef %19, i32 noundef 0, ptr noundef %21) #5
  %23 = getelementptr inbounds i8, ptr %1, i64 152
  %24 = load ptr, ptr %23, align 8, !tbaa !23
  %25 = sext i32 %5 to i64
  %26 = getelementptr inbounds i8, ptr %1, i64 144
  %27 = load ptr, ptr %26, align 8, !tbaa !24
  %28 = tail call ptr @libmetis__iset(i64 noundef %25, i32 noundef -1, ptr noundef %27) #5
  %29 = icmp eq i32 %7, 1
  %30 = icmp sgt i32 %5, 0
  br i1 %29, label %.preheader265, label %.preheader267

.preheader267:                                    ; preds = %2
  %31 = icmp sgt i32 %7, 0
  %or.cond417 = and i1 %30, %31
  br i1 %or.cond417, label %.lr.ph.us.preheader, label %.loopexit266

.lr.ph.us.preheader:                              ; preds = %.preheader267
  %32 = zext nneg i32 %7 to i64
  %wide.trip.count362 = zext nneg i32 %5 to i64
  %wide.trip.count = zext nneg i32 %7 to i64
  %33 = shl nuw nsw i64 %wide.trip.count, 2
  %scevgep = getelementptr i8, ptr %22, i64 %33
  %34 = mul nuw nsw i64 %wide.trip.count362, %wide.trip.count
  %35 = shl nuw i64 %34, 2
  %scevgep435 = getelementptr i8, ptr %11, i64 %35
  %min.iters.check = icmp ult i32 %7, 8
  %n.vec = and i64 %wide.trip.count, 2147483640
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %._crit_edge.us
  %indvars.iv359 = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next360, %._crit_edge.us ]
  %36 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv359
  %37 = load i32, ptr %36, align 4, !tbaa !25
  %38 = mul nuw nsw i64 %indvars.iv359, %32
  %39 = mul nsw i32 %37, %7
  %40 = sext i32 %39 to i64
  %invariant.gep413 = getelementptr inbounds i32, ptr %11, i64 %38
  %invariant.gep415 = getelementptr i32, ptr %22, i64 %40
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.us
  %41 = shl nsw i64 %40, 2
  %scevgep434 = getelementptr i8, ptr %scevgep, i64 %41
  %bound0 = icmp ult ptr %invariant.gep415, %scevgep435
  %bound1 = icmp ult ptr %11, %scevgep434
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %42 = getelementptr inbounds i32, ptr %invariant.gep413, i64 %index
  %43 = getelementptr inbounds i8, ptr %42, i64 16
  %wide.load = load <4 x i32>, ptr %42, align 4, !tbaa !25, !alias.scope !26
  %wide.load436 = load <4 x i32>, ptr %43, align 4, !tbaa !25, !alias.scope !26
  %44 = getelementptr i32, ptr %invariant.gep415, i64 %index
  %45 = getelementptr i8, ptr %44, i64 16
  %wide.load437 = load <4 x i32>, ptr %44, align 4, !tbaa !25, !alias.scope !29, !noalias !26
  %wide.load438 = load <4 x i32>, ptr %45, align 4, !tbaa !25, !alias.scope !29, !noalias !26
  %46 = add nsw <4 x i32> %wide.load437, %wide.load
  %47 = add nsw <4 x i32> %wide.load438, %wide.load436
  store <4 x i32> %46, ptr %44, align 4, !tbaa !25, !alias.scope !29, !noalias !26
  store <4 x i32> %47, ptr %45, align 4, !tbaa !25, !alias.scope !29, !noalias !26
  %index.next = add nuw i64 %index, 8
  %48 = icmp eq i64 %index.next, %n.vec
  br i1 %48, label %middle.block, label %vector.body, !llvm.loop !31

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph.us
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %scalar.ph.prol ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %gep414.prol = getelementptr inbounds i32, ptr %invariant.gep413, i64 %indvars.iv.prol
  %49 = load i32, ptr %gep414.prol, align 4, !tbaa !25
  %gep416.prol = getelementptr i32, ptr %invariant.gep415, i64 %indvars.iv.prol
  %50 = load i32, ptr %gep416.prol, align 4, !tbaa !25
  %51 = add nsw i32 %50, %49
  store i32 %51, ptr %gep416.prol, align 4, !tbaa !25
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.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 %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !35

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %52 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %53 = icmp ugt i64 %52, -4
  br i1 %53, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %gep414 = getelementptr inbounds i32, ptr %invariant.gep413, i64 %indvars.iv
  %54 = load i32, ptr %gep414, align 4, !tbaa !25
  %gep416 = getelementptr i32, ptr %invariant.gep415, i64 %indvars.iv
  %55 = load i32, ptr %gep416, align 4, !tbaa !25
  %56 = add nsw i32 %55, %54
  store i32 %56, ptr %gep416, align 4, !tbaa !25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %gep414.1 = getelementptr inbounds i32, ptr %invariant.gep413, i64 %indvars.iv.next
  %57 = load i32, ptr %gep414.1, align 4, !tbaa !25
  %gep416.1 = getelementptr i32, ptr %invariant.gep415, i64 %indvars.iv.next
  %58 = load i32, ptr %gep416.1, align 4, !tbaa !25
  %59 = add nsw i32 %58, %57
  store i32 %59, ptr %gep416.1, align 4, !tbaa !25
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %gep414.2 = getelementptr inbounds i32, ptr %invariant.gep413, i64 %indvars.iv.next.1
  %60 = load i32, ptr %gep414.2, align 4, !tbaa !25
  %gep416.2 = getelementptr i32, ptr %invariant.gep415, i64 %indvars.iv.next.1
  %61 = load i32, ptr %gep416.2, align 4, !tbaa !25
  %62 = add nsw i32 %61, %60
  store i32 %62, ptr %gep416.2, align 4, !tbaa !25
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %gep414.3 = getelementptr inbounds i32, ptr %invariant.gep413, i64 %indvars.iv.next.2
  %63 = load i32, ptr %gep414.3, align 4, !tbaa !25
  %gep416.3 = getelementptr i32, ptr %invariant.gep415, i64 %indvars.iv.next.2
  %64 = load i32, ptr %gep416.3, align 4, !tbaa !25
  %65 = add nsw i32 %64, %63
  store i32 %65, ptr %gep416.3, align 4, !tbaa !25
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge.us, label %scalar.ph, !llvm.loop !37

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next360 = add nuw nsw i64 %indvars.iv359, 1
  %exitcond363.not = icmp eq i64 %indvars.iv.next360, %wide.trip.count362
  br i1 %exitcond363.not, label %.loopexit266, label %.lr.ph.us, !llvm.loop !38

.preheader265:                                    ; preds = %2
  br i1 %30, label %.lr.ph.preheader, label %.loopexit266

.lr.ph.preheader:                                 ; preds = %.preheader265
  %wide.trip.count367 = zext nneg i32 %5 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %76
  %indvars.iv364 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next365, %76 ]
  %66 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv364
  %67 = load i32, ptr %66, align 4, !tbaa !25
  %68 = icmp sgt i32 %67, -1
  %69 = icmp slt i32 %67, %4
  %or.cond = and i1 %68, %69
  br i1 %or.cond, label %76, label %70

70:                                               ; preds = %.lr.ph
  %71 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef 173, ptr noundef nonnull @.str.1)
  %72 = load i32, ptr %66, align 4, !tbaa !25
  %73 = icmp sgt i32 %72, -1
  %74 = icmp slt i32 %72, %4
  %or.cond261 = and i1 %73, %74
  br i1 %or.cond261, label %76, label %75

75:                                               ; preds = %70
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.1, i32 noundef 173, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

76:                                               ; preds = %70, %.lr.ph
  %77 = phi i32 [ %72, %70 ], [ %67, %.lr.ph ]
  %78 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv364
  %79 = load i32, ptr %78, align 4, !tbaa !25
  %80 = zext nneg i32 %77 to i64
  %81 = getelementptr inbounds i32, ptr %22, i64 %80
  %82 = load i32, ptr %81, align 4, !tbaa !25
  %83 = add nsw i32 %82, %79
  store i32 %83, ptr %81, align 4, !tbaa !25
  %indvars.iv.next365 = add nuw nsw i64 %indvars.iv364, 1
  %exitcond368.not = icmp eq i64 %indvars.iv.next365, %wide.trip.count367
  br i1 %exitcond368.not, label %.loopexit266, label %.lr.ph, !llvm.loop !39

.loopexit266:                                     ; preds = %._crit_edge.us, %76, %.preheader267, %.preheader265
  %84 = getelementptr inbounds i8, ptr %0, i64 4
  %85 = load i32, ptr %84, align 4, !tbaa !40
  switch i32 %85, label %305 [
    i32 0, label %86
    i32 1, label %203
  ]

86:                                               ; preds = %.loopexit266
  %87 = getelementptr inbounds i8, ptr %1, i64 176
  %88 = load ptr, ptr %87, align 8, !tbaa !41
  %89 = shl nsw i64 %25, 4
  tail call void @llvm.memset.p0.i64(ptr align 4 %88, i8 0, i64 %89, i1 false)
  tail call void @libmetis__cnbrpoolReset(ptr noundef nonnull %0) #5
  %90 = icmp sgt i32 %5, 0
  br i1 %90, label %.lr.ph340, label %._crit_edge341

.lr.ph340:                                        ; preds = %86
  %91 = getelementptr inbounds i8, ptr %0, i64 264
  %wide.trip.count399 = zext nneg i32 %5 to i64
  br label %92

92:                                               ; preds = %.lr.ph340, %194
  %indvars.iv396 = phi i64 [ 0, %.lr.ph340 ], [ %indvars.iv.next397, %194 ]
  %.0236337 = phi i32 [ 0, %.lr.ph340 ], [ %.1237, %194 ]
  %.0238336 = phi i32 [ 0, %.lr.ph340 ], [ %.1239, %194 ]
  %93 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv396
  %94 = load i32, ptr %93, align 4, !tbaa !25
  %95 = load ptr, ptr %87, align 8, !tbaa !41
  %96 = getelementptr inbounds %struct.ckrinfo_t, ptr %95, i64 %indvars.iv396
  %97 = getelementptr inbounds i32, ptr %9, i64 %indvars.iv396
  %98 = load i32, ptr %97, align 4, !tbaa !25
  %indvars.iv.next397 = add nuw nsw i64 %indvars.iv396, 1
  %99 = getelementptr inbounds i32, ptr %9, i64 %indvars.iv.next397
  %100 = load i32, ptr %99, align 4, !tbaa !25
  %101 = icmp slt i32 %98, %100
  br i1 %101, label %.lr.ph321, label %._crit_edge322

.lr.ph321:                                        ; preds = %92
  %102 = sext i32 %98 to i64
  br label %103

103:                                              ; preds = %.lr.ph321, %103
  %indvars.iv385 = phi i64 [ %102, %.lr.ph321 ], [ %indvars.iv.next386, %103 ]
  %104 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv385
  %105 = load i32, ptr %104, align 4, !tbaa !25
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds i32, ptr %17, i64 %106
  %108 = load i32, ptr %107, align 4, !tbaa !25
  %109 = icmp eq i32 %94, %108
  %110 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv385
  %111 = load i32, ptr %110, align 4, !tbaa !25
  %..idx = select i1 %109, i64 0, i64 4
  %. = getelementptr inbounds i8, ptr %96, i64 %..idx
  %112 = load i32, ptr %., align 4, !tbaa !25
  %113 = add nsw i32 %112, %111
  store i32 %113, ptr %., align 4, !tbaa !25
  %indvars.iv.next386 = add nsw i64 %indvars.iv385, 1
  %114 = load i32, ptr %99, align 4, !tbaa !25
  %115 = sext i32 %114 to i64
  %116 = icmp slt i64 %indvars.iv.next386, %115
  br i1 %116, label %103, label %._crit_edge322, !llvm.loop !42

._crit_edge322:                                   ; preds = %103, %92
  %.lcssa = phi i32 [ %100, %92 ], [ %114, %103 ]
  %117 = getelementptr inbounds i8, ptr %96, i64 4
  %118 = load i32, ptr %117, align 4, !tbaa !43
  %119 = icmp sgt i32 %118, 0
  br i1 %119, label %120, label %192

120:                                              ; preds = %._crit_edge322
  %121 = add nuw nsw i32 %118, %.0238336
  %122 = load i32, ptr %97, align 4, !tbaa !25
  %123 = add i32 %.lcssa, 1
  %124 = sub i32 %123, %122
  %125 = tail call i32 @libmetis__cnbrpoolGetNext(ptr noundef %0, i32 noundef %124) #5
  %126 = getelementptr inbounds i8, ptr %96, i64 12
  store i32 %125, ptr %126, align 4, !tbaa !45
  %127 = load ptr, ptr %91, align 8, !tbaa !46
  %128 = sext i32 %125 to i64
  %129 = getelementptr inbounds %struct.cnbr_t, ptr %127, i64 %128
  %130 = load i32, ptr %97, align 4, !tbaa !25
  %invariant.gep = getelementptr inbounds i8, ptr %129, i64 4
  %131 = load i32, ptr %99, align 4, !tbaa !25
  %132 = icmp slt i32 %130, %131
  br i1 %132, label %.lr.ph333, label %._crit_edge334

.lr.ph333:                                        ; preds = %120
  %133 = getelementptr inbounds i8, ptr %96, i64 8
  %134 = sext i32 %130 to i64
  br label %135

135:                                              ; preds = %.lr.ph333, %160
  %indvars.iv393 = phi i64 [ %134, %.lr.ph333 ], [ %indvars.iv.next394, %160 ]
  %136 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv393
  %137 = load i32, ptr %136, align 4, !tbaa !25
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds i32, ptr %17, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !25
  %.not260 = icmp eq i32 %94, %140
  br i1 %.not260, label %160, label %.preheader

.preheader:                                       ; preds = %135
  %141 = load i32, ptr %133, align 4, !tbaa !47
  %142 = icmp sgt i32 %141, 0
  br i1 %142, label %.lr.ph328.preheader, label %.loopexit

.lr.ph328.preheader:                              ; preds = %.preheader
  %wide.trip.count391 = zext nneg i32 %141 to i64
  br label %.lr.ph328

.lr.ph328:                                        ; preds = %.lr.ph328.preheader, %152
  %indvars.iv388 = phi i64 [ 0, %.lr.ph328.preheader ], [ %indvars.iv.next389, %152 ]
  %143 = getelementptr inbounds %struct.cnbr_t, ptr %129, i64 %indvars.iv388
  %144 = load i32, ptr %143, align 4, !tbaa !48
  %145 = icmp eq i32 %144, %140
  br i1 %145, label %146, label %152

146:                                              ; preds = %.lr.ph328
  %147 = trunc nuw nsw i64 %indvars.iv388 to i32
  %148 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv393
  %149 = load i32, ptr %148, align 4, !tbaa !25
  %gep = getelementptr inbounds %struct.cnbr_t, ptr %invariant.gep, i64 %indvars.iv388
  %150 = load i32, ptr %gep, align 4, !tbaa !50
  %151 = add nsw i32 %150, %149
  store i32 %151, ptr %gep, align 4, !tbaa !50
  br label %.loopexit

152:                                              ; preds = %.lr.ph328
  %indvars.iv.next389 = add nuw nsw i64 %indvars.iv388, 1
  %exitcond392.not = icmp eq i64 %indvars.iv.next389, %wide.trip.count391
  br i1 %exitcond392.not, label %.loopexit.thread, label %.lr.ph328, !llvm.loop !51

.loopexit:                                        ; preds = %.preheader, %146
  %.0234276 = phi i32 [ %147, %146 ], [ 0, %.preheader ]
  %153 = icmp eq i32 %.0234276, %141
  br i1 %153, label %.loopexit.thread, label %160

.loopexit.thread:                                 ; preds = %152, %.loopexit
  %154 = zext nneg i32 %141 to i64
  %155 = getelementptr inbounds %struct.cnbr_t, ptr %129, i64 %154
  store i32 %140, ptr %155, align 4, !tbaa !48
  %156 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv393
  %157 = load i32, ptr %156, align 4, !tbaa !25
  %158 = getelementptr inbounds i8, ptr %155, i64 4
  store i32 %157, ptr %158, align 4, !tbaa !50
  %159 = add nsw i32 %141, 1
  store i32 %159, ptr %133, align 4, !tbaa !47
  br label %160

160:                                              ; preds = %135, %.loopexit.thread, %.loopexit
  %indvars.iv.next394 = add nsw i64 %indvars.iv393, 1
  %161 = load i32, ptr %99, align 4, !tbaa !25
  %162 = sext i32 %161 to i64
  %163 = icmp slt i64 %indvars.iv.next394, %162
  br i1 %163, label %135, label %._crit_edge334.loopexit, !llvm.loop !52

._crit_edge334.loopexit:                          ; preds = %160
  %.pre401 = load i32, ptr %97, align 4, !tbaa !25
  br label %._crit_edge334

._crit_edge334:                                   ; preds = %._crit_edge334.loopexit, %120
  %164 = phi i32 [ %130, %120 ], [ %.pre401, %._crit_edge334.loopexit ]
  %.lcssa278 = phi i32 [ %131, %120 ], [ %161, %._crit_edge334.loopexit ]
  %165 = getelementptr inbounds i8, ptr %96, i64 8
  %166 = load i32, ptr %165, align 4, !tbaa !47
  %167 = sub nsw i32 %.lcssa278, %164
  %.not257 = icmp sgt i32 %166, %167
  br i1 %.not257, label %168, label %175

168:                                              ; preds = %._crit_edge334
  %169 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef 230, ptr noundef nonnull @.str.1)
  %170 = load i32, ptr %165, align 4, !tbaa !47
  %171 = load i32, ptr %99, align 4, !tbaa !25
  %172 = load i32, ptr %97, align 4, !tbaa !25
  %173 = sub nsw i32 %171, %172
  %.not258 = icmp sgt i32 %170, %173
  br i1 %.not258, label %174, label %175

174:                                              ; preds = %168
  tail call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 230, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

175:                                              ; preds = %168, %._crit_edge334
  %176 = load i32, ptr %117, align 4, !tbaa !43
  %177 = load i32, ptr %96, align 4, !tbaa !53
  %.not259 = icmp slt i32 %176, %177
  br i1 %.not259, label %194, label %178

178:                                              ; preds = %175
  %179 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv396
  %180 = load i32, ptr %179, align 4, !tbaa !25
  %181 = icmp eq i32 %180, -1
  br i1 %181, label %187, label %182

182:                                              ; preds = %178
  %183 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef 234, ptr noundef nonnull @.str.1)
  %184 = load i32, ptr %179, align 4, !tbaa !25
  %185 = icmp eq i32 %184, -1
  br i1 %185, label %187, label %186

186:                                              ; preds = %182
  tail call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.1, i32 noundef 234, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

187:                                              ; preds = %182, %178
  %188 = sext i32 %.0236337 to i64
  %189 = getelementptr inbounds i32, ptr %24, i64 %188
  %190 = trunc nuw nsw i64 %indvars.iv396 to i32
  store i32 %190, ptr %189, align 4, !tbaa !25
  %191 = add nsw i32 %.0236337, 1
  store i32 %.0236337, ptr %179, align 4, !tbaa !25
  br label %194

192:                                              ; preds = %._crit_edge322
  %193 = getelementptr inbounds i8, ptr %96, i64 12
  store i32 -1, ptr %193, align 4, !tbaa !45
  br label %194

194:                                              ; preds = %192, %187, %175
  %.1239 = phi i32 [ %121, %187 ], [ %121, %175 ], [ %.0238336, %192 ]
  %.1237 = phi i32 [ %191, %187 ], [ %.0236337, %175 ], [ %.0236337, %192 ]
  %exitcond400.not = icmp eq i64 %indvars.iv.next397, %wide.trip.count399
  br i1 %exitcond400.not, label %._crit_edge341.loopexit, label %92, !llvm.loop !54

._crit_edge341.loopexit:                          ; preds = %194
  %195 = lshr i32 %.1239, 1
  br label %._crit_edge341

._crit_edge341:                                   ; preds = %._crit_edge341.loopexit, %86
  %.0238.lcssa = phi i32 [ 0, %86 ], [ %195, %._crit_edge341.loopexit ]
  %.0236.lcssa = phi i32 [ 0, %86 ], [ %.1237, %._crit_edge341.loopexit ]
  %196 = getelementptr inbounds i8, ptr %1, i64 112
  store i32 %.0238.lcssa, ptr %196, align 8, !tbaa !55
  %197 = getelementptr inbounds i8, ptr %1, i64 136
  store i32 %.0236.lcssa, ptr %197, align 8, !tbaa !56
  %198 = tail call i32 @libmetis__CheckBnd2(ptr noundef nonnull %1) #5
  %.not255 = icmp eq i32 %198, 0
  br i1 %.not255, label %199, label %306

199:                                              ; preds = %._crit_edge341
  %200 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef 245, ptr noundef nonnull @.str.1)
  %201 = tail call i32 @libmetis__CheckBnd2(ptr noundef nonnull %1) #5
  %.not256 = icmp eq i32 %201, 0
  br i1 %.not256, label %202, label %306

202:                                              ; preds = %199
  tail call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.1, i32 noundef 245, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

203:                                              ; preds = %.loopexit266
  %204 = getelementptr inbounds i8, ptr %1, i64 184
  %205 = load ptr, ptr %204, align 8, !tbaa !57
  %206 = mul nsw i64 %25, 20
  tail call void @llvm.memset.p0.i64(ptr align 4 %205, i8 0, i64 %206, i1 false)
  tail call void @libmetis__vnbrpoolReset(ptr noundef nonnull %0) #5
  %207 = icmp sgt i32 %5, 0
  br i1 %207, label %.lr.ph316, label %._crit_edge317

.lr.ph316:                                        ; preds = %203
  %208 = getelementptr inbounds i8, ptr %0, i64 272
  %wide.trip.count383 = zext nneg i32 %5 to i64
  br label %209

209:                                              ; preds = %.lr.ph316, %290
  %indvars.iv380 = phi i64 [ 0, %.lr.ph316 ], [ %indvars.iv.next381, %290 ]
  %.2240313 = phi i32 [ 0, %.lr.ph316 ], [ %.3241, %290 ]
  %210 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv380
  %211 = load i32, ptr %210, align 4, !tbaa !25
  %212 = load ptr, ptr %204, align 8, !tbaa !57
  %213 = getelementptr inbounds %struct.vkrinfo_t, ptr %212, i64 %indvars.iv380
  %214 = getelementptr inbounds i32, ptr %9, i64 %indvars.iv380
  %215 = load i32, ptr %214, align 4, !tbaa !25
  %indvars.iv.next381 = add nuw nsw i64 %indvars.iv380, 1
  %216 = getelementptr inbounds i32, ptr %9, i64 %indvars.iv.next381
  %217 = load i32, ptr %216, align 4, !tbaa !25
  %218 = icmp slt i32 %215, %217
  br i1 %218, label %.lr.ph301, label %._crit_edge

.lr.ph301:                                        ; preds = %209
  %219 = sext i32 %215 to i64
  br label %220

220:                                              ; preds = %.lr.ph301, %220
  %indvars.iv369 = phi i64 [ %219, %.lr.ph301 ], [ %indvars.iv.next370, %220 ]
  %221 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv369
  %222 = load i32, ptr %221, align 4, !tbaa !25
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %17, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !25
  %226 = icmp eq i32 %211, %225
  %.424.idx = select i1 %226, i64 0, i64 4
  %.424 = getelementptr inbounds i8, ptr %213, i64 %.424.idx
  %227 = load i32, ptr %.424, align 4, !tbaa !25
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %.424, align 4, !tbaa !25
  %indvars.iv.next370 = add nsw i64 %indvars.iv369, 1
  %229 = load i32, ptr %216, align 4, !tbaa !25
  %230 = sext i32 %229 to i64
  %231 = icmp slt i64 %indvars.iv.next370, %230
  br i1 %231, label %220, label %._crit_edge, !llvm.loop !58

._crit_edge:                                      ; preds = %220, %209
  %.lcssa283 = phi i32 [ %217, %209 ], [ %229, %220 ]
  %232 = getelementptr inbounds i8, ptr %213, i64 4
  %233 = load i32, ptr %232, align 4, !tbaa !59
  %234 = icmp sgt i32 %233, 0
  br i1 %234, label %235, label %288

235:                                              ; preds = %._crit_edge
  %236 = add nuw nsw i32 %233, %.2240313
  %237 = load i32, ptr %214, align 4, !tbaa !25
  %238 = add i32 %.lcssa283, 1
  %239 = sub i32 %238, %237
  %240 = tail call i32 @libmetis__vnbrpoolGetNext(ptr noundef %0, i32 noundef %239) #5
  %241 = getelementptr inbounds i8, ptr %213, i64 16
  store i32 %240, ptr %241, align 4, !tbaa !61
  %242 = load ptr, ptr %208, align 8, !tbaa !62
  %243 = sext i32 %240 to i64
  %244 = getelementptr inbounds %struct.vnbr_t, ptr %242, i64 %243
  %245 = load i32, ptr %214, align 4, !tbaa !25
  %246 = load i32, ptr %216, align 4, !tbaa !25
  %247 = icmp slt i32 %245, %246
  br i1 %247, label %.lr.ph310, label %._crit_edge311

.lr.ph310:                                        ; preds = %235
  %248 = getelementptr inbounds i8, ptr %213, i64 12
  %249 = sext i32 %245 to i64
  br label %250

250:                                              ; preds = %.lr.ph310, %273
  %indvars.iv377 = phi i64 [ %249, %.lr.ph310 ], [ %indvars.iv.next378, %273 ]
  %251 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv377
  %252 = load i32, ptr %251, align 4, !tbaa !25
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i32, ptr %17, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !25
  %.not254 = icmp eq i32 %211, %255
  br i1 %.not254, label %273, label %.preheader263

.preheader263:                                    ; preds = %250
  %256 = load i32, ptr %248, align 4, !tbaa !63
  %257 = icmp sgt i32 %256, 0
  br i1 %257, label %.lr.ph305.preheader, label %.loopexit264

.lr.ph305.preheader:                              ; preds = %.preheader263
  %wide.trip.count375 = zext nneg i32 %256 to i64
  br label %.lr.ph305

.lr.ph305:                                        ; preds = %.lr.ph305.preheader, %266
  %indvars.iv372 = phi i64 [ 0, %.lr.ph305.preheader ], [ %indvars.iv.next373, %266 ]
  %258 = getelementptr inbounds %struct.vnbr_t, ptr %244, i64 %indvars.iv372
  %259 = load i32, ptr %258, align 4, !tbaa !64
  %260 = icmp eq i32 %259, %255
  br i1 %260, label %261, label %266

261:                                              ; preds = %.lr.ph305
  %262 = trunc nuw nsw i64 %indvars.iv372 to i32
  %263 = getelementptr inbounds i8, ptr %258, i64 4
  %264 = load i32, ptr %263, align 4, !tbaa !66
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %263, align 4, !tbaa !66
  br label %.loopexit264

266:                                              ; preds = %.lr.ph305
  %indvars.iv.next373 = add nuw nsw i64 %indvars.iv372, 1
  %exitcond376.not = icmp eq i64 %indvars.iv.next373, %wide.trip.count375
  br i1 %exitcond376.not, label %.loopexit264.thread, label %.lr.ph305, !llvm.loop !67

.loopexit264:                                     ; preds = %.preheader263, %261
  %.1235291 = phi i32 [ %262, %261 ], [ 0, %.preheader263 ]
  %267 = icmp eq i32 %.1235291, %256
  br i1 %267, label %.loopexit264.thread, label %273

.loopexit264.thread:                              ; preds = %266, %.loopexit264
  %268 = zext nneg i32 %256 to i64
  %269 = getelementptr inbounds %struct.vnbr_t, ptr %244, i64 %268
  %270 = getelementptr inbounds i8, ptr %269, i64 8
  store i32 0, ptr %270, align 4, !tbaa !68
  store i32 %255, ptr %269, align 4, !tbaa !64
  %271 = getelementptr inbounds i8, ptr %269, i64 4
  store i32 1, ptr %271, align 4, !tbaa !66
  %272 = add nsw i32 %256, 1
  store i32 %272, ptr %248, align 4, !tbaa !63
  br label %273

273:                                              ; preds = %250, %.loopexit264.thread, %.loopexit264
  %indvars.iv.next378 = add nsw i64 %indvars.iv377, 1
  %274 = load i32, ptr %216, align 4, !tbaa !25
  %275 = sext i32 %274 to i64
  %276 = icmp slt i64 %indvars.iv.next378, %275
  br i1 %276, label %250, label %._crit_edge311.loopexit, !llvm.loop !69

._crit_edge311.loopexit:                          ; preds = %273
  %.pre = load i32, ptr %214, align 4, !tbaa !25
  br label %._crit_edge311

._crit_edge311:                                   ; preds = %._crit_edge311.loopexit, %235
  %277 = phi i32 [ %245, %235 ], [ %.pre, %._crit_edge311.loopexit ]
  %.lcssa293 = phi i32 [ %246, %235 ], [ %274, %._crit_edge311.loopexit ]
  %278 = getelementptr inbounds i8, ptr %213, i64 12
  %279 = load i32, ptr %278, align 4, !tbaa !63
  %280 = sub nsw i32 %.lcssa293, %277
  %.not = icmp sgt i32 %279, %280
  br i1 %.not, label %281, label %290

281:                                              ; preds = %._crit_edge311
  %282 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef 292, ptr noundef nonnull @.str.1)
  %283 = load i32, ptr %278, align 4, !tbaa !63
  %284 = load i32, ptr %216, align 4, !tbaa !25
  %285 = load i32, ptr %214, align 4, !tbaa !25
  %286 = sub nsw i32 %284, %285
  %.not253 = icmp sgt i32 %283, %286
  br i1 %.not253, label %287, label %290

287:                                              ; preds = %281
  tail call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 292, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

288:                                              ; preds = %._crit_edge
  %289 = getelementptr inbounds i8, ptr %213, i64 16
  store i32 -1, ptr %289, align 4, !tbaa !61
  br label %290

290:                                              ; preds = %288, %281, %._crit_edge311
  %.3241 = phi i32 [ %236, %._crit_edge311 ], [ %236, %281 ], [ %.2240313, %288 ]
  %exitcond384.not = icmp eq i64 %indvars.iv.next381, %wide.trip.count383
  br i1 %exitcond384.not, label %._crit_edge317.loopexit, label %209, !llvm.loop !70

._crit_edge317.loopexit:                          ; preds = %290
  %291 = lshr i32 %.3241, 1
  br label %._crit_edge317

._crit_edge317:                                   ; preds = %._crit_edge317.loopexit, %203
  %.2240.lcssa = phi i32 [ 0, %203 ], [ %291, %._crit_edge317.loopexit ]
  %292 = getelementptr inbounds i8, ptr %1, i64 112
  store i32 %.2240.lcssa, ptr %292, align 8, !tbaa !55
  tail call void @libmetis__ComputeKWayVolGains(ptr noundef %0, ptr noundef nonnull %1)
  %293 = getelementptr inbounds i8, ptr %1, i64 116
  %294 = load i32, ptr %293, align 4, !tbaa !71
  %295 = load ptr, ptr %16, align 8, !tbaa !21
  %296 = tail call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %295) #5
  %297 = icmp eq i32 %294, %296
  br i1 %297, label %306, label %298

298:                                              ; preds = %._crit_edge317
  %299 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef 302, ptr noundef nonnull @.str.1)
  %300 = load i32, ptr %293, align 4, !tbaa !71
  %301 = load ptr, ptr %16, align 8, !tbaa !21
  %302 = tail call i32 @libmetis__ComputeVolume(ptr noundef nonnull %1, ptr noundef %301) #5
  %303 = icmp eq i32 %300, %302
  br i1 %303, label %306, label %304

304:                                              ; preds = %298
  tail call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.1, i32 noundef 302, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__ComputeKWayPartitionParams) #6
  unreachable

305:                                              ; preds = %.loopexit266
  tail call void (i32, ptr, ...) @gk_errexit(i32 noundef 15, ptr noundef nonnull @.str.11, i32 noundef %85) #5
  br label %306

306:                                              ; preds = %._crit_edge317, %298, %._crit_edge341, %199, %305
  ret void
}

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

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

declare void @gk_errexit(i32 noundef, ptr noundef, ...) local_unnamed_addr #3

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

declare void @libmetis__cnbrpoolReset(ptr noundef) local_unnamed_addr #3

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

declare i32 @libmetis__CheckBnd2(ptr noundef) local_unnamed_addr #3

declare void @libmetis__vnbrpoolReset(ptr noundef) local_unnamed_addr #3

declare i32 @libmetis__vnbrpoolGetNext(ptr noundef, i32 noundef) local_unnamed_addr #3

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

declare i32 @libmetis__ComputeVolume(ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

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


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