; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis (kwayvolfm)

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

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

@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1

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

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

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

declare void @gk_free(ptr noundef, ...) #1

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

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

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

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

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

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

98:                                               ; preds = %110, %5
  %99 = load i64, ptr %11, align 8, !tbaa !9
  %100 = load i64, ptr %17, align 8, !tbaa !9
  %101 = icmp slt i64 %99, %100
  br i1 %101, label %102, label %113

102:                                              ; preds = %98
  %103 = load i64, ptr %11, align 8, !tbaa !9
  %104 = load ptr, ptr %38, align 8, !tbaa !5
  %105 = load i64, ptr %11, align 8, !tbaa !9
  %106 = getelementptr inbounds i64, ptr %104, i64 %105
  store i64 %103, ptr %106, align 8, !tbaa !9
  %107 = load ptr, ptr %37, align 8, !tbaa !5
  %108 = load i64, ptr %11, align 8, !tbaa !9
  %109 = getelementptr inbounds i64, ptr %107, i64 %108
  store i64 %103, ptr %109, align 8, !tbaa !9
  br label %110

110:                                              ; preds = %102
  %111 = load i64, ptr %11, align 8, !tbaa !9
  %112 = add nsw i64 %111, 1
  store i64 %112, ptr %11, align 8, !tbaa !9
  br label %98, !llvm.loop !22

113:                                              ; preds = %98
  store i64 -1, ptr %22, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !9
  store i64 0, ptr %19, align 8, !tbaa !9
  %114 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %114, ptr %21, align 8, !tbaa !9
  br label %115

115:                                              ; preds = %212, %113
  %116 = load i64, ptr %21, align 8, !tbaa !9
  %117 = icmp sgt i64 %116, 0
  br i1 %117, label %118, label %213

118:                                              ; preds = %115
  %119 = load i64, ptr %19, align 8, !tbaa !9
  %120 = load i64, ptr %20, align 8, !tbaa !9
  %121 = icmp eq i64 %119, %120
  br i1 %121, label %122, label %148

122:                                              ; preds = %118
  %123 = load i64, ptr %19, align 8, !tbaa !9
  %124 = load ptr, ptr %40, align 8, !tbaa !5
  %125 = load i64, ptr %22, align 8, !tbaa !9
  %126 = add nsw i64 %125, 1
  store i64 %126, ptr %22, align 8, !tbaa !9
  %127 = getelementptr inbounds i64, ptr %124, i64 %126
  store i64 %123, ptr %127, align 8, !tbaa !9
  %128 = load ptr, ptr %38, align 8, !tbaa !5
  %129 = getelementptr inbounds i64, ptr %128, i64 0
  %130 = load i64, ptr %129, align 8, !tbaa !9
  store i64 %130, ptr %11, align 8, !tbaa !9
  %131 = load i64, ptr %11, align 8, !tbaa !9
  %132 = load ptr, ptr %39, align 8, !tbaa !5
  %133 = load i64, ptr %20, align 8, !tbaa !9
  %134 = add nsw i64 %133, 1
  store i64 %134, ptr %20, align 8, !tbaa !9
  %135 = getelementptr inbounds i64, ptr %132, i64 %133
  store i64 %131, ptr %135, align 8, !tbaa !9
  %136 = load ptr, ptr %36, align 8, !tbaa !5
  %137 = load i64, ptr %11, align 8, !tbaa !9
  %138 = getelementptr inbounds i64, ptr %136, i64 %137
  store i64 1, ptr %138, align 8, !tbaa !9
  %139 = load ptr, ptr %32, align 8, !tbaa !5
  %140 = load i64, ptr %11, align 8, !tbaa !9
  %141 = getelementptr inbounds i64, ptr %139, i64 %140
  %142 = load i64, ptr %141, align 8, !tbaa !9
  store i64 %142, ptr %16, align 8, !tbaa !9
  %143 = load ptr, ptr %41, align 8, !tbaa !5
  %144 = load i64, ptr %16, align 8, !tbaa !9
  %145 = getelementptr inbounds i64, ptr %143, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = add nsw i64 %146, 1
  store i64 %147, ptr %145, align 8, !tbaa !9
  br label %148

148:                                              ; preds = %122, %118
  %149 = load ptr, ptr %39, align 8, !tbaa !5
  %150 = load i64, ptr %19, align 8, !tbaa !9
  %151 = add nsw i64 %150, 1
  store i64 %151, ptr %19, align 8, !tbaa !9
  %152 = getelementptr inbounds i64, ptr %149, i64 %150
  %153 = load i64, ptr %152, align 8, !tbaa !9
  store i64 %153, ptr %11, align 8, !tbaa !9
  %154 = load ptr, ptr %37, align 8, !tbaa !5
  %155 = load i64, ptr %11, align 8, !tbaa !9
  %156 = getelementptr inbounds i64, ptr %154, i64 %155
  %157 = load i64, ptr %156, align 8, !tbaa !9
  store i64 %157, ptr %15, align 8, !tbaa !9
  %158 = load ptr, ptr %38, align 8, !tbaa !5
  %159 = load i64, ptr %21, align 8, !tbaa !9
  %160 = add nsw i64 %159, -1
  store i64 %160, ptr %21, align 8, !tbaa !9
  %161 = getelementptr inbounds i64, ptr %158, i64 %160
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = load ptr, ptr %38, align 8, !tbaa !5
  %164 = load i64, ptr %15, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  store i64 %162, ptr %165, align 8, !tbaa !9
  store i64 %162, ptr %13, align 8, !tbaa !9
  %166 = load i64, ptr %15, align 8, !tbaa !9
  %167 = load ptr, ptr %37, align 8, !tbaa !5
  %168 = load i64, ptr %13, align 8, !tbaa !9
  %169 = getelementptr inbounds i64, ptr %167, i64 %168
  store i64 %166, ptr %169, align 8, !tbaa !9
  %170 = load ptr, ptr %28, align 8, !tbaa !5
  %171 = load i64, ptr %11, align 8, !tbaa !9
  %172 = getelementptr inbounds i64, ptr %170, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !9
  store i64 %173, ptr %13, align 8, !tbaa !9
  br label %174

174:                                              ; preds = %209, %148
  %175 = load i64, ptr %13, align 8, !tbaa !9
  %176 = load ptr, ptr %28, align 8, !tbaa !5
  %177 = load i64, ptr %11, align 8, !tbaa !9
  %178 = add nsw i64 %177, 1
  %179 = getelementptr inbounds i64, ptr %176, i64 %178
  %180 = load i64, ptr %179, align 8, !tbaa !9
  %181 = icmp slt i64 %175, %180
  br i1 %181, label %182, label %212

182:                                              ; preds = %174
  %183 = load ptr, ptr %29, align 8, !tbaa !5
  %184 = load i64, ptr %13, align 8, !tbaa !9
  %185 = getelementptr inbounds i64, ptr %183, i64 %184
  %186 = load i64, ptr %185, align 8, !tbaa !9
  store i64 %186, ptr %15, align 8, !tbaa !9
  %187 = load ptr, ptr %32, align 8, !tbaa !5
  %188 = load i64, ptr %15, align 8, !tbaa !9
  %189 = getelementptr inbounds i64, ptr %187, i64 %188
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = load i64, ptr %16, align 8, !tbaa !9
  %192 = icmp eq i64 %190, %191
  br i1 %192, label %193, label %208

193:                                              ; preds = %182
  %194 = load ptr, ptr %36, align 8, !tbaa !5
  %195 = load i64, ptr %15, align 8, !tbaa !9
  %196 = getelementptr inbounds i64, ptr %194, i64 %195
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = icmp ne i64 %197, 0
  br i1 %198, label %208, label %199

199:                                              ; preds = %193
  %200 = load i64, ptr %15, align 8, !tbaa !9
  %201 = load ptr, ptr %39, align 8, !tbaa !5
  %202 = load i64, ptr %20, align 8, !tbaa !9
  %203 = add nsw i64 %202, 1
  store i64 %203, ptr %20, align 8, !tbaa !9
  %204 = getelementptr inbounds i64, ptr %201, i64 %202
  store i64 %200, ptr %204, align 8, !tbaa !9
  %205 = load ptr, ptr %36, align 8, !tbaa !5
  %206 = load i64, ptr %15, align 8, !tbaa !9
  %207 = getelementptr inbounds i64, ptr %205, i64 %206
  store i64 1, ptr %207, align 8, !tbaa !9
  br label %208

208:                                              ; preds = %199, %193, %182
  br label %209

209:                                              ; preds = %208
  %210 = load i64, ptr %13, align 8, !tbaa !9
  %211 = add nsw i64 %210, 1
  store i64 %211, ptr %13, align 8, !tbaa !9
  br label %174, !llvm.loop !24

212:                                              ; preds = %174
  br label %115, !llvm.loop !25

213:                                              ; preds = %115
  %214 = load i64, ptr %19, align 8, !tbaa !9
  %215 = load ptr, ptr %40, align 8, !tbaa !5
  %216 = load i64, ptr %22, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %22, align 8, !tbaa !9
  %218 = getelementptr inbounds i64, ptr %215, i64 %217
  store i64 %214, ptr %218, align 8, !tbaa !9
  %219 = load i64, ptr %22, align 8, !tbaa !9
  %220 = load i64, ptr %8, align 8, !tbaa !9
  %221 = icmp sgt i64 %219, %220
  br i1 %221, label %222, label %503

222:                                              ; preds = %213
  %223 = load i64, ptr %8, align 8, !tbaa !9
  %224 = mul i64 %223, 16
  %225 = call ptr @gk_malloc(i64 noundef %224, ptr noundef @.str.11)
  store ptr %225, ptr %42, align 8, !tbaa !5
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %226

226:                                              ; preds = %243, %222
  %227 = load i64, ptr %11, align 8, !tbaa !9
  %228 = load i64, ptr %17, align 8, !tbaa !9
  %229 = icmp slt i64 %227, %228
  br i1 %229, label %230, label %246

230:                                              ; preds = %226
  %231 = load ptr, ptr %30, align 8, !tbaa !5
  %232 = load i64, ptr %11, align 8, !tbaa !9
  %233 = getelementptr inbounds i64, ptr %231, i64 %232
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = load ptr, ptr %33, align 8, !tbaa !5
  %236 = load ptr, ptr %32, align 8, !tbaa !5
  %237 = load i64, ptr %11, align 8, !tbaa !9
  %238 = getelementptr inbounds i64, ptr %236, i64 %237
  %239 = load i64, ptr %238, align 8, !tbaa !9
  %240 = getelementptr inbounds i64, ptr %235, i64 %239
  %241 = load i64, ptr %240, align 8, !tbaa !9
  %242 = add nsw i64 %241, %234
  store i64 %242, ptr %240, align 8, !tbaa !9
  br label %243

243:                                              ; preds = %230
  %244 = load i64, ptr %11, align 8, !tbaa !9
  %245 = add nsw i64 %244, 1
  store i64 %245, ptr %11, align 8, !tbaa !9
  br label %226, !llvm.loop !26

246:                                              ; preds = %226
  %247 = load i64, ptr %8, align 8, !tbaa !9
  %248 = load ptr, ptr %33, align 8, !tbaa !5
  %249 = call i64 @libmetis__idxsum(i64 noundef %247, ptr noundef %248, i64 noundef 1)
  store i64 %249, ptr %18, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %250

250:                                              ; preds = %268, %246
  %251 = load i64, ptr %11, align 8, !tbaa !9
  %252 = load i64, ptr %8, align 8, !tbaa !9
  %253 = icmp slt i64 %251, %252
  br i1 %253, label %254, label %271

254:                                              ; preds = %250
  %255 = load float, ptr %10, align 4, !tbaa !11
  %256 = load ptr, ptr %9, align 8, !tbaa !5
  %257 = load i64, ptr %11, align 8, !tbaa !9
  %258 = getelementptr inbounds float, ptr %256, i64 %257
  %259 = load float, ptr %258, align 4, !tbaa !11
  %260 = fmul float %255, %259
  %261 = load i64, ptr %18, align 8, !tbaa !9
  %262 = sitofp i64 %261 to float
  %263 = fmul float %260, %262
  %264 = fptosi float %263 to i64
  %265 = load ptr, ptr %34, align 8, !tbaa !5
  %266 = load i64, ptr %11, align 8, !tbaa !9
  %267 = getelementptr inbounds i64, ptr %265, i64 %266
  store i64 %264, ptr %267, align 8, !tbaa !9
  br label %268

268:                                              ; preds = %254
  %269 = load i64, ptr %11, align 8, !tbaa !9
  %270 = add nsw i64 %269, 1
  store i64 %270, ptr %11, align 8, !tbaa !9
  br label %250, !llvm.loop !27

271:                                              ; preds = %250
  %272 = load i64, ptr %18, align 8, !tbaa !9
  %273 = load i64, ptr %8, align 8, !tbaa !9
  %274 = mul nsw i64 100, %273
  %275 = sdiv i64 %272, %274
  store i64 %275, ptr %27, align 8, !tbaa !9
  store i64 5, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %276

276:                                              ; preds = %499, %271
  %277 = load i64, ptr %11, align 8, !tbaa !9
  %278 = load i64, ptr %22, align 8, !tbaa !9
  %279 = icmp slt i64 %277, %278
  br i1 %279, label %280, label %502

280:                                              ; preds = %276
  %281 = load ptr, ptr %32, align 8, !tbaa !5
  %282 = load ptr, ptr %39, align 8, !tbaa !5
  %283 = load ptr, ptr %40, align 8, !tbaa !5
  %284 = load i64, ptr %11, align 8, !tbaa !9
  %285 = getelementptr inbounds i64, ptr %283, i64 %284
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = getelementptr inbounds i64, ptr %282, i64 %286
  %288 = load i64, ptr %287, align 8, !tbaa !9
  %289 = getelementptr inbounds i64, ptr %281, i64 %288
  %290 = load i64, ptr %289, align 8, !tbaa !9
  store i64 %290, ptr %16, align 8, !tbaa !9
  %291 = load ptr, ptr %41, align 8, !tbaa !5
  %292 = load i64, ptr %16, align 8, !tbaa !9
  %293 = getelementptr inbounds i64, ptr %291, i64 %292
  %294 = load i64, ptr %293, align 8, !tbaa !9
  %295 = icmp eq i64 %294, 1
  br i1 %295, label %296, label %297

296:                                              ; preds = %280
  br label %499

297:                                              ; preds = %280
  %298 = load i64, ptr %8, align 8, !tbaa !9
  %299 = load ptr, ptr %35, align 8, !tbaa !5
  %300 = call ptr @libmetis__idxset(i64 noundef %298, i64 noundef 0, ptr noundef %299)
  store i64 0, ptr %23, align 8, !tbaa !9
  %301 = load ptr, ptr %40, align 8, !tbaa !5
  %302 = load i64, ptr %11, align 8, !tbaa !9
  %303 = getelementptr inbounds i64, ptr %301, i64 %302
  %304 = load i64, ptr %303, align 8, !tbaa !9
  store i64 %304, ptr %13, align 8, !tbaa !9
  br label %305

305:                                              ; preds = %362, %297
  %306 = load i64, ptr %13, align 8, !tbaa !9
  %307 = load ptr, ptr %40, align 8, !tbaa !5
  %308 = load i64, ptr %11, align 8, !tbaa !9
  %309 = add nsw i64 %308, 1
  %310 = getelementptr inbounds i64, ptr %307, i64 %309
  %311 = load i64, ptr %310, align 8, !tbaa !9
  %312 = icmp slt i64 %306, %311
  br i1 %312, label %313, label %365

313:                                              ; preds = %305
  %314 = load ptr, ptr %39, align 8, !tbaa !5
  %315 = load i64, ptr %13, align 8, !tbaa !9
  %316 = getelementptr inbounds i64, ptr %314, i64 %315
  %317 = load i64, ptr %316, align 8, !tbaa !9
  store i64 %317, ptr %12, align 8, !tbaa !9
  %318 = load ptr, ptr %30, align 8, !tbaa !5
  %319 = load i64, ptr %12, align 8, !tbaa !9
  %320 = getelementptr inbounds i64, ptr %318, i64 %319
  %321 = load i64, ptr %320, align 8, !tbaa !9
  %322 = load i64, ptr %23, align 8, !tbaa !9
  %323 = add nsw i64 %322, %321
  store i64 %323, ptr %23, align 8, !tbaa !9
  %324 = load ptr, ptr %28, align 8, !tbaa !5
  %325 = load i64, ptr %12, align 8, !tbaa !9
  %326 = getelementptr inbounds i64, ptr %324, i64 %325
  %327 = load i64, ptr %326, align 8, !tbaa !9
  store i64 %327, ptr %14, align 8, !tbaa !9
  br label %328

328:                                              ; preds = %358, %313
  %329 = load i64, ptr %14, align 8, !tbaa !9
  %330 = load ptr, ptr %28, align 8, !tbaa !5
  %331 = load i64, ptr %12, align 8, !tbaa !9
  %332 = add nsw i64 %331, 1
  %333 = getelementptr inbounds i64, ptr %330, i64 %332
  %334 = load i64, ptr %333, align 8, !tbaa !9
  %335 = icmp slt i64 %329, %334
  br i1 %335, label %336, label %361

336:                                              ; preds = %328
  %337 = load ptr, ptr %32, align 8, !tbaa !5
  %338 = load ptr, ptr %29, align 8, !tbaa !5
  %339 = load i64, ptr %14, align 8, !tbaa !9
  %340 = getelementptr inbounds i64, ptr %338, i64 %339
  %341 = load i64, ptr %340, align 8, !tbaa !9
  %342 = getelementptr inbounds i64, ptr %337, i64 %341
  %343 = load i64, ptr %342, align 8, !tbaa !9
  store i64 %343, ptr %25, align 8, !tbaa !9
  %344 = load i64, ptr %16, align 8, !tbaa !9
  %345 = load i64, ptr %25, align 8, !tbaa !9
  %346 = icmp ne i64 %344, %345
  br i1 %346, label %347, label %357

347:                                              ; preds = %336
  %348 = load ptr, ptr %31, align 8, !tbaa !5
  %349 = load i64, ptr %14, align 8, !tbaa !9
  %350 = getelementptr inbounds i64, ptr %348, i64 %349
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = load ptr, ptr %35, align 8, !tbaa !5
  %353 = load i64, ptr %25, align 8, !tbaa !9
  %354 = getelementptr inbounds i64, ptr %352, i64 %353
  %355 = load i64, ptr %354, align 8, !tbaa !9
  %356 = add nsw i64 %355, %351
  store i64 %356, ptr %354, align 8, !tbaa !9
  br label %357

357:                                              ; preds = %347, %336
  br label %358

358:                                              ; preds = %357
  %359 = load i64, ptr %14, align 8, !tbaa !9
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %14, align 8, !tbaa !9
  br label %328, !llvm.loop !28

361:                                              ; preds = %328
  br label %362

362:                                              ; preds = %361
  %363 = load i64, ptr %13, align 8, !tbaa !9
  %364 = add nsw i64 %363, 1
  store i64 %364, ptr %13, align 8, !tbaa !9
  br label %305, !llvm.loop !29

365:                                              ; preds = %305
  %366 = load i64, ptr %23, align 8, !tbaa !9
  %367 = sitofp i64 %366 to double
  %368 = load ptr, ptr %33, align 8, !tbaa !5
  %369 = load i64, ptr %16, align 8, !tbaa !9
  %370 = getelementptr inbounds i64, ptr %368, i64 %369
  %371 = load i64, ptr %370, align 8, !tbaa !9
  %372 = sitofp i64 %371 to double
  %373 = fmul double 3.000000e-01, %372
  %374 = fcmp ogt double %367, %373
  br i1 %374, label %375, label %376

375:                                              ; preds = %365
  br label %499

376:                                              ; preds = %365
  store i64 0, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %377

377:                                              ; preds = %404, %376
  %378 = load i64, ptr %13, align 8, !tbaa !9
  %379 = load i64, ptr %8, align 8, !tbaa !9
  %380 = icmp slt i64 %378, %379
  br i1 %380, label %381, label %407

381:                                              ; preds = %377
  %382 = load ptr, ptr %35, align 8, !tbaa !5
  %383 = load i64, ptr %13, align 8, !tbaa !9
  %384 = getelementptr inbounds i64, ptr %382, i64 %383
  %385 = load i64, ptr %384, align 8, !tbaa !9
  %386 = icmp sgt i64 %385, 0
  br i1 %386, label %387, label %403

387:                                              ; preds = %381
  %388 = load ptr, ptr %35, align 8, !tbaa !5
  %389 = load i64, ptr %13, align 8, !tbaa !9
  %390 = getelementptr inbounds i64, ptr %388, i64 %389
  %391 = load i64, ptr %390, align 8, !tbaa !9
  %392 = sub nsw i64 0, %391
  %393 = load ptr, ptr %42, align 8, !tbaa !5
  %394 = load i64, ptr %24, align 8, !tbaa !9
  %395 = getelementptr inbounds %struct.KeyValueType, ptr %393, i64 %394
  %396 = getelementptr inbounds %struct.KeyValueType, ptr %395, i32 0, i32 0
  store i64 %392, ptr %396, align 8, !tbaa !30
  %397 = load i64, ptr %13, align 8, !tbaa !9
  %398 = load ptr, ptr %42, align 8, !tbaa !5
  %399 = load i64, ptr %24, align 8, !tbaa !9
  %400 = add nsw i64 %399, 1
  store i64 %400, ptr %24, align 8, !tbaa !9
  %401 = getelementptr inbounds %struct.KeyValueType, ptr %398, i64 %399
  %402 = getelementptr inbounds %struct.KeyValueType, ptr %401, i32 0, i32 1
  store i64 %397, ptr %402, align 8, !tbaa !32
  br label %403

403:                                              ; preds = %387, %381
  br label %404

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

407:                                              ; preds = %377
  %408 = load i64, ptr %24, align 8, !tbaa !9
  %409 = icmp eq i64 %408, 0
  br i1 %409, label %410, label %411

410:                                              ; preds = %407
  br label %499

411:                                              ; preds = %407
  %412 = load i64, ptr %24, align 8, !tbaa !9
  %413 = load ptr, ptr %42, align 8, !tbaa !5
  call void @libmetis__ikeysort(i64 noundef %412, ptr noundef %413)
  store i64 -1, ptr %26, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %442, %411
  %415 = load i64, ptr %13, align 8, !tbaa !9
  %416 = load i64, ptr %24, align 8, !tbaa !9
  %417 = icmp slt i64 %415, %416
  br i1 %417, label %418, label %445

418:                                              ; preds = %414
  %419 = load ptr, ptr %42, align 8, !tbaa !5
  %420 = load i64, ptr %13, align 8, !tbaa !9
  %421 = getelementptr inbounds %struct.KeyValueType, ptr %419, i64 %420
  %422 = getelementptr inbounds %struct.KeyValueType, ptr %421, i32 0, i32 1
  %423 = load i64, ptr %422, align 8, !tbaa !32
  store i64 %423, ptr %15, align 8, !tbaa !9
  %424 = load i64, ptr %23, align 8, !tbaa !9
  %425 = load i64, ptr %27, align 8, !tbaa !9
  %426 = icmp slt i64 %424, %425
  br i1 %426, label %439, label %427

427:                                              ; preds = %418
  %428 = load ptr, ptr %33, align 8, !tbaa !5
  %429 = load i64, ptr %15, align 8, !tbaa !9
  %430 = getelementptr inbounds i64, ptr %428, i64 %429
  %431 = load i64, ptr %430, align 8, !tbaa !9
  %432 = load i64, ptr %23, align 8, !tbaa !9
  %433 = add nsw i64 %431, %432
  %434 = load ptr, ptr %34, align 8, !tbaa !5
  %435 = load i64, ptr %15, align 8, !tbaa !9
  %436 = getelementptr inbounds i64, ptr %434, i64 %435
  %437 = load i64, ptr %436, align 8, !tbaa !9
  %438 = icmp slt i64 %433, %437
  br i1 %438, label %439, label %441

439:                                              ; preds = %427, %418
  %440 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %440, ptr %26, align 8, !tbaa !9
  br label %445

441:                                              ; preds = %427
  br label %442

442:                                              ; preds = %441
  %443 = load i64, ptr %13, align 8, !tbaa !9
  %444 = add nsw i64 %443, 1
  store i64 %444, ptr %13, align 8, !tbaa !9
  br label %414, !llvm.loop !34

445:                                              ; preds = %439, %414
  %446 = load i64, ptr %26, align 8, !tbaa !9
  %447 = icmp ne i64 %446, -1
  br i1 %447, label %448, label %498

448:                                              ; preds = %445
  %449 = load i64, ptr %23, align 8, !tbaa !9
  %450 = load ptr, ptr %33, align 8, !tbaa !5
  %451 = load i64, ptr %16, align 8, !tbaa !9
  %452 = getelementptr inbounds i64, ptr %450, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = sub nsw i64 %453, %449
  store i64 %454, ptr %452, align 8, !tbaa !9
  %455 = load i64, ptr %23, align 8, !tbaa !9
  %456 = load ptr, ptr %33, align 8, !tbaa !5
  %457 = load i64, ptr %26, align 8, !tbaa !9
  %458 = getelementptr inbounds i64, ptr %456, i64 %457
  %459 = load i64, ptr %458, align 8, !tbaa !9
  %460 = add nsw i64 %459, %455
  store i64 %460, ptr %458, align 8, !tbaa !9
  %461 = load ptr, ptr %41, align 8, !tbaa !5
  %462 = load i64, ptr %16, align 8, !tbaa !9
  %463 = getelementptr inbounds i64, ptr %461, i64 %462
  %464 = load i64, ptr %463, align 8, !tbaa !9
  %465 = add nsw i64 %464, -1
  store i64 %465, ptr %463, align 8, !tbaa !9
  %466 = load ptr, ptr %40, align 8, !tbaa !5
  %467 = load i64, ptr %11, align 8, !tbaa !9
  %468 = getelementptr inbounds i64, ptr %466, i64 %467
  %469 = load i64, ptr %468, align 8, !tbaa !9
  store i64 %469, ptr %13, align 8, !tbaa !9
  br label %470

470:                                              ; preds = %486, %448
  %471 = load i64, ptr %13, align 8, !tbaa !9
  %472 = load ptr, ptr %40, align 8, !tbaa !5
  %473 = load i64, ptr %11, align 8, !tbaa !9
  %474 = add nsw i64 %473, 1
  %475 = getelementptr inbounds i64, ptr %472, i64 %474
  %476 = load i64, ptr %475, align 8, !tbaa !9
  %477 = icmp slt i64 %471, %476
  br i1 %477, label %478, label %489

478:                                              ; preds = %470
  %479 = load i64, ptr %26, align 8, !tbaa !9
  %480 = load ptr, ptr %32, align 8, !tbaa !5
  %481 = load ptr, ptr %39, align 8, !tbaa !5
  %482 = load i64, ptr %13, align 8, !tbaa !9
  %483 = getelementptr inbounds i64, ptr %481, i64 %482
  %484 = load i64, ptr %483, align 8, !tbaa !9
  %485 = getelementptr inbounds i64, ptr %480, i64 %484
  store i64 %479, ptr %485, align 8, !tbaa !9
  br label %486

486:                                              ; preds = %478
  %487 = load i64, ptr %13, align 8, !tbaa !9
  %488 = add nsw i64 %487, 1
  store i64 %488, ptr %13, align 8, !tbaa !9
  br label %470, !llvm.loop !35

489:                                              ; preds = %470
  %490 = load ptr, ptr %35, align 8, !tbaa !5
  %491 = load i64, ptr %26, align 8, !tbaa !9
  %492 = getelementptr inbounds i64, ptr %490, i64 %491
  %493 = load i64, ptr %492, align 8, !tbaa !9
  %494 = load ptr, ptr %7, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.graphdef, ptr %494, i32 0, i32 16
  %496 = load i64, ptr %495, align 8, !tbaa !36
  %497 = sub nsw i64 %496, %493
  store i64 %497, ptr %495, align 8, !tbaa !36
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %498

498:                                              ; preds = %489, %445
  br label %499

499:                                              ; preds = %498, %410, %375, %296
  %500 = load i64, ptr %11, align 8, !tbaa !9
  %501 = add nsw i64 %500, 1
  store i64 %501, ptr %11, align 8, !tbaa !9
  br label %276, !llvm.loop !37

502:                                              ; preds = %276
  call void (ptr, ...) @gk_free(ptr noundef %42, ptr noundef null)
  br label %503

503:                                              ; preds = %502, %213
  %504 = load i64, ptr %43, align 8, !tbaa !9
  %505 = icmp ne i64 %504, 0
  br i1 %505, label %506, label %578

506:                                              ; preds = %503
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  %507 = load i64, ptr %8, align 8, !tbaa !9
  %508 = load ptr, ptr %35, align 8, !tbaa !5
  %509 = call ptr @libmetis__idxset(i64 noundef %507, i64 noundef -1, ptr noundef %508)
  store ptr %509, ptr %45, align 8, !tbaa !5
  store i64 0, ptr %44, align 8, !tbaa !9
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %510

510:                                              ; preds = %571, %506
  %511 = load i64, ptr %11, align 8, !tbaa !9
  %512 = load i64, ptr %17, align 8, !tbaa !9
  %513 = icmp slt i64 %511, %512
  br i1 %513, label %514, label %574

514:                                              ; preds = %510
  %515 = load i64, ptr %11, align 8, !tbaa !9
  %516 = load ptr, ptr %45, align 8, !tbaa !5
  %517 = load ptr, ptr %32, align 8, !tbaa !5
  %518 = load i64, ptr %11, align 8, !tbaa !9
  %519 = getelementptr inbounds i64, ptr %517, i64 %518
  %520 = load i64, ptr %519, align 8, !tbaa !9
  %521 = getelementptr inbounds i64, ptr %516, i64 %520
  store i64 %515, ptr %521, align 8, !tbaa !9
  %522 = load ptr, ptr %28, align 8, !tbaa !5
  %523 = load i64, ptr %11, align 8, !tbaa !9
  %524 = getelementptr inbounds i64, ptr %522, i64 %523
  %525 = load i64, ptr %524, align 8, !tbaa !9
  store i64 %525, ptr %13, align 8, !tbaa !9
  br label %526

526:                                              ; preds = %567, %514
  %527 = load i64, ptr %13, align 8, !tbaa !9
  %528 = load ptr, ptr %28, align 8, !tbaa !5
  %529 = load i64, ptr %11, align 8, !tbaa !9
  %530 = add nsw i64 %529, 1
  %531 = getelementptr inbounds i64, ptr %528, i64 %530
  %532 = load i64, ptr %531, align 8, !tbaa !9
  %533 = icmp slt i64 %527, %532
  br i1 %533, label %534, label %570

534:                                              ; preds = %526
  %535 = load ptr, ptr %45, align 8, !tbaa !5
  %536 = load ptr, ptr %32, align 8, !tbaa !5
  %537 = load ptr, ptr %29, align 8, !tbaa !5
  %538 = load i64, ptr %13, align 8, !tbaa !9
  %539 = getelementptr inbounds i64, ptr %537, i64 %538
  %540 = load i64, ptr %539, align 8, !tbaa !9
  %541 = getelementptr inbounds i64, ptr %536, i64 %540
  %542 = load i64, ptr %541, align 8, !tbaa !9
  %543 = getelementptr inbounds i64, ptr %535, i64 %542
  %544 = load i64, ptr %543, align 8, !tbaa !9
  %545 = load i64, ptr %11, align 8, !tbaa !9
  %546 = icmp ne i64 %544, %545
  br i1 %546, label %547, label %566

547:                                              ; preds = %534
  %548 = load ptr, ptr %7, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.graphdef, ptr %548, i32 0, i32 4
  %550 = load ptr, ptr %549, align 8, !tbaa !38
  %551 = load i64, ptr %11, align 8, !tbaa !9
  %552 = getelementptr inbounds i64, ptr %550, i64 %551
  %553 = load i64, ptr %552, align 8, !tbaa !9
  %554 = load i64, ptr %44, align 8, !tbaa !9
  %555 = add nsw i64 %554, %553
  store i64 %555, ptr %44, align 8, !tbaa !9
  %556 = load i64, ptr %11, align 8, !tbaa !9
  %557 = load ptr, ptr %45, align 8, !tbaa !5
  %558 = load ptr, ptr %32, align 8, !tbaa !5
  %559 = load ptr, ptr %29, align 8, !tbaa !5
  %560 = load i64, ptr %13, align 8, !tbaa !9
  %561 = getelementptr inbounds i64, ptr %559, i64 %560
  %562 = load i64, ptr %561, align 8, !tbaa !9
  %563 = getelementptr inbounds i64, ptr %558, i64 %562
  %564 = load i64, ptr %563, align 8, !tbaa !9
  %565 = getelementptr inbounds i64, ptr %557, i64 %564
  store i64 %556, ptr %565, align 8, !tbaa !9
  br label %566

566:                                              ; preds = %547, %534
  br label %567

567:                                              ; preds = %566
  %568 = load i64, ptr %13, align 8, !tbaa !9
  %569 = add nsw i64 %568, 1
  store i64 %569, ptr %13, align 8, !tbaa !9
  br label %526, !llvm.loop !39

570:                                              ; preds = %526
  br label %571

571:                                              ; preds = %570
  %572 = load i64, ptr %11, align 8, !tbaa !9
  %573 = add nsw i64 %572, 1
  store i64 %573, ptr %11, align 8, !tbaa !9
  br label %510, !llvm.loop !40

574:                                              ; preds = %510
  %575 = load i64, ptr %44, align 8, !tbaa !9
  %576 = load ptr, ptr %7, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.graphdef, ptr %576, i32 0, i32 17
  store i64 %575, ptr %577, align 8, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  br label %578

578:                                              ; preds = %574, %503
  %579 = load ptr, ptr %6, align 8, !tbaa !5
  %580 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %579, i64 noundef %580)
  %581 = load ptr, ptr %6, align 8, !tbaa !5
  %582 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %581, i64 noundef %582)
  %583 = load ptr, ptr %6, align 8, !tbaa !5
  %584 = load i64, ptr %8, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %583, i64 noundef %584)
  %585 = load ptr, ptr %6, align 8, !tbaa !5
  %586 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %585, i64 noundef %586)
  %587 = load ptr, ptr %6, align 8, !tbaa !5
  %588 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %587, i64 noundef %588)
  %589 = load ptr, ptr %6, align 8, !tbaa !5
  %590 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %589, i64 noundef %590)
  %591 = load ptr, ptr %6, align 8, !tbaa !5
  %592 = load i64, ptr %17, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %591, i64 noundef %592)
  %593 = load ptr, ptr %6, align 8, !tbaa !5
  %594 = load i64, ptr %17, align 8, !tbaa !9
  %595 = add nsw i64 %594, 1
  call void @libmetis__idxwspacefree(ptr noundef %593, i64 noundef %595)
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  ret void
}

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

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

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


; 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.KeyValueType = type { i64, i64 }

@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1

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

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

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

declare void @gk_free(ptr noundef, ...) local_unnamed_addr #1

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

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

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

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

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

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

.lr.ph.preheader:                                 ; preds = %5
  %33 = ptrtoint ptr %27 to i64
  %34 = ptrtoint ptr %26 to i64
  %min.iters.check = icmp ult i64 %7, 6
  %35 = sub i64 %34, %33
  %diff.check = icmp ult i64 %35, 32
  %or.cond = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond, label %.lr.ph.preheader379, label %vector.ph

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

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader379, %.lr.ph.prol
  %.0283.prol = phi i64 [ %38, %.lr.ph.prol ], [ %.0283.ph, %.lr.ph.preheader379 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader379 ]
  %36 = getelementptr inbounds i64, ptr %27, i64 %.0283.prol
  store i64 %.0283.prol, ptr %36, align 8, !tbaa !18
  %37 = getelementptr inbounds i64, ptr %26, i64 %.0283.prol
  store i64 %.0283.prol, ptr %37, align 8, !tbaa !18
  %38 = add nuw nsw i64 %.0283.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !19

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader379
  %.0283.unr = phi i64 [ %.0283.ph, %.lr.ph.preheader379 ], [ %38, %.lr.ph.prol ]
  %39 = sub nsw i64 %.0283.ph, %7
  %40 = icmp ugt i64 %39, -4
  br i1 %40, label %.preheader280, label %.lr.ph

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

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %7, %n.vec
  br i1 %cmp.n, label %.preheader280, label %.lr.ph.preheader379

.preheader280:                                    ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block
  br i1 %32, label %.lr.ph292, label %._crit_edge

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

.loopexit279:                                     ; preds = %98, %71
  %.2256.lcssa = phi i64 [ %.1255, %71 ], [ %.3257, %98 ]
  %exitcond345.not = icmp eq i64 %.pre-phi, %7
  br i1 %exitcond345.not, label %._crit_edge, label %.lr.ph292, !llvm.loop !26

.lr.ph292:                                        ; preds = %.preheader280, %.loopexit279
  %.0251291 = phi i64 [ %.1252, %.loopexit279 ], [ undef, %.preheader280 ]
  %.0253290 = phi i64 [ %.pre-phi, %.loopexit279 ], [ 0, %.preheader280 ]
  %.0254289 = phi i64 [ %.2256.lcssa, %.loopexit279 ], [ 0, %.preheader280 ]
  %.0258288 = phi i64 [ %76, %.loopexit279 ], [ %7, %.preheader280 ]
  %.0259287 = phi i64 [ %.1260, %.loopexit279 ], [ -1, %.preheader280 ]
  %58 = icmp eq i64 %.0253290, %.0254289
  br i1 %58, label %59, label %.lr.ph292._crit_edge

.lr.ph292._crit_edge:                             ; preds = %.lr.ph292
  %.pre355 = add nuw nsw i64 %.0253290, 1
  br label %71

59:                                               ; preds = %.lr.ph292
  %60 = add nsw i64 %.0259287, 1
  %61 = getelementptr inbounds i64, ptr %24, i64 %60
  store i64 %.0253290, ptr %61, align 8, !tbaa !18
  %62 = load i64, ptr %27, align 8, !tbaa !18
  %63 = add nsw i64 %.0253290, 1
  %64 = getelementptr inbounds i64, ptr %25, i64 %.0253290
  store i64 %62, ptr %64, align 8, !tbaa !18
  %65 = getelementptr inbounds i64, ptr %22, i64 %62
  store i64 1, ptr %65, align 8, !tbaa !18
  %66 = getelementptr inbounds i64, ptr %17, i64 %62
  %67 = load i64, ptr %66, align 8, !tbaa !18
  %68 = getelementptr inbounds i64, ptr %31, i64 %67
  %69 = load i64, ptr %68, align 8, !tbaa !18
  %70 = add nsw i64 %69, 1
  store i64 %70, ptr %68, align 8, !tbaa !18
  br label %71

71:                                               ; preds = %.lr.ph292._crit_edge, %59
  %.pre-phi = phi i64 [ %.pre355, %.lr.ph292._crit_edge ], [ %63, %59 ]
  %.1260 = phi i64 [ %.0259287, %.lr.ph292._crit_edge ], [ %60, %59 ]
  %.1255 = phi i64 [ %.0254289, %.lr.ph292._crit_edge ], [ %63, %59 ]
  %.1252 = phi i64 [ %.0251291, %.lr.ph292._crit_edge ], [ %67, %59 ]
  %72 = getelementptr inbounds i64, ptr %25, i64 %.0253290
  %73 = load i64, ptr %72, align 8, !tbaa !18
  %74 = getelementptr inbounds i64, ptr %26, i64 %73
  %75 = load i64, ptr %74, align 8, !tbaa !18
  %76 = add nsw i64 %.0258288, -1
  %77 = getelementptr inbounds i64, ptr %27, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !18
  %79 = getelementptr inbounds i64, ptr %27, i64 %75
  store i64 %78, ptr %79, align 8, !tbaa !18
  %80 = getelementptr inbounds i64, ptr %26, i64 %78
  store i64 %75, ptr %80, align 8, !tbaa !18
  %81 = getelementptr inbounds i64, ptr %9, i64 %73
  %82 = load i64, ptr %81, align 8, !tbaa !18
  %83 = getelementptr i8, ptr %81, i64 8
  %84 = load i64, ptr %83, align 8, !tbaa !18
  %85 = icmp slt i64 %82, %84
  br i1 %85, label %.lr.ph286, label %.loopexit279

.lr.ph286:                                        ; preds = %71, %98
  %86 = phi i64 [ %99, %98 ], [ %84, %71 ]
  %.0245285 = phi i64 [ %100, %98 ], [ %82, %71 ]
  %.2256284 = phi i64 [ %.3257, %98 ], [ %.1255, %71 ]
  %87 = getelementptr inbounds i64, ptr %11, i64 %.0245285
  %88 = load i64, ptr %87, align 8, !tbaa !18
  %89 = getelementptr inbounds i64, ptr %17, i64 %88
  %90 = load i64, ptr %89, align 8, !tbaa !18
  %91 = icmp eq i64 %90, %.1252
  br i1 %91, label %92, label %98

92:                                               ; preds = %.lr.ph286
  %93 = getelementptr inbounds i64, ptr %22, i64 %88
  %94 = load i64, ptr %93, align 8, !tbaa !18
  %.not275 = icmp eq i64 %94, 0
  br i1 %.not275, label %95, label %98

95:                                               ; preds = %92
  %96 = add nsw i64 %.2256284, 1
  %97 = getelementptr inbounds i64, ptr %25, i64 %.2256284
  store i64 %88, ptr %97, align 8, !tbaa !18
  store i64 1, ptr %93, align 8, !tbaa !18
  %.pre = load i64, ptr %83, align 8, !tbaa !18
  br label %98

98:                                               ; preds = %.lr.ph286, %92, %95
  %99 = phi i64 [ %86, %92 ], [ %.pre, %95 ], [ %86, %.lr.ph286 ]
  %.3257 = phi i64 [ %.2256284, %92 ], [ %96, %95 ], [ %.2256284, %.lr.ph286 ]
  %100 = add nsw i64 %.0245285, 1
  %101 = icmp slt i64 %100, %99
  br i1 %101, label %.lr.ph286, label %.loopexit279, !llvm.loop !27

._crit_edge:                                      ; preds = %.loopexit279, %5, %.preheader280
  %.0259.lcssa = phi i64 [ -1, %.preheader280 ], [ -1, %5 ], [ %.1260, %.loopexit279 ]
  %.0253.lcssa = phi i64 [ 0, %.preheader280 ], [ 0, %5 ], [ %7, %.loopexit279 ]
  %102 = getelementptr i64, ptr %24, i64 %.0259.lcssa
  %103 = getelementptr i8, ptr %102, i64 8
  store i64 %.0253.lcssa, ptr %103, align 8, !tbaa !18
  %.not = icmp slt i64 %.0259.lcssa, %2
  br i1 %.not, label %.critedge, label %104

104:                                              ; preds = %._crit_edge
  %105 = shl i64 %2, 4
  %106 = tail call ptr @gk_malloc(i64 noundef %105, ptr noundef nonnull @.str.11) #3
  store ptr %106, ptr %6, align 8, !tbaa !28
  br i1 %32, label %.lr.ph297.preheader, label %._crit_edge298

.lr.ph297.preheader:                              ; preds = %104
  %xtraiter380 = and i64 %7, 1
  %107 = icmp eq i64 %7, 1
  br i1 %107, label %._crit_edge298.loopexit.unr-lcssa, label %.lr.ph297.preheader.new

.lr.ph297.preheader.new:                          ; preds = %.lr.ph297.preheader
  %unroll_iter = and i64 %7, 9223372036854775806
  br label %.lr.ph297

.lr.ph297:                                        ; preds = %.lr.ph297, %.lr.ph297.preheader.new
  %.1295 = phi i64 [ 0, %.lr.ph297.preheader.new ], [ %123, %.lr.ph297 ]
  %niter = phi i64 [ 0, %.lr.ph297.preheader.new ], [ %niter.next.1, %.lr.ph297 ]
  %108 = getelementptr inbounds i64, ptr %13, i64 %.1295
  %109 = load i64, ptr %108, align 8, !tbaa !18
  %110 = getelementptr inbounds i64, ptr %17, i64 %.1295
  %111 = load i64, ptr %110, align 8, !tbaa !18
  %112 = getelementptr inbounds i64, ptr %20, i64 %111
  %113 = load i64, ptr %112, align 8, !tbaa !18
  %114 = add nsw i64 %113, %109
  store i64 %114, ptr %112, align 8, !tbaa !18
  %115 = or disjoint i64 %.1295, 1
  %116 = getelementptr inbounds i64, ptr %13, i64 %115
  %117 = load i64, ptr %116, align 8, !tbaa !18
  %118 = getelementptr inbounds i64, ptr %17, i64 %115
  %119 = load i64, ptr %118, align 8, !tbaa !18
  %120 = getelementptr inbounds i64, ptr %20, i64 %119
  %121 = load i64, ptr %120, align 8, !tbaa !18
  %122 = add nsw i64 %121, %117
  store i64 %122, ptr %120, align 8, !tbaa !18
  %123 = add nuw nsw i64 %.1295, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge298.loopexit.unr-lcssa, label %.lr.ph297, !llvm.loop !29

._crit_edge298.loopexit.unr-lcssa:                ; preds = %.lr.ph297, %.lr.ph297.preheader
  %.1295.unr = phi i64 [ 0, %.lr.ph297.preheader ], [ %123, %.lr.ph297 ]
  %lcmp.mod381.not = icmp eq i64 %xtraiter380, 0
  br i1 %lcmp.mod381.not, label %._crit_edge298, label %.lr.ph297.epil

.lr.ph297.epil:                                   ; preds = %._crit_edge298.loopexit.unr-lcssa
  %124 = getelementptr inbounds i64, ptr %13, i64 %.1295.unr
  %125 = load i64, ptr %124, align 8, !tbaa !18
  %126 = getelementptr inbounds i64, ptr %17, i64 %.1295.unr
  %127 = load i64, ptr %126, align 8, !tbaa !18
  %128 = getelementptr inbounds i64, ptr %20, i64 %127
  %129 = load i64, ptr %128, align 8, !tbaa !18
  %130 = add nsw i64 %129, %125
  store i64 %130, ptr %128, align 8, !tbaa !18
  br label %._crit_edge298

._crit_edge298:                                   ; preds = %.lr.ph297.epil, %._crit_edge298.loopexit.unr-lcssa, %104
  %131 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %20, i64 noundef 1) #3
  %132 = icmp slt i64 %2, 1
  br i1 %132, label %.preheader278, label %.lr.ph301

.lr.ph301:                                        ; preds = %._crit_edge298
  %133 = sitofp i64 %131 to float
  %min.iters.check366 = icmp eq i64 %2, 1
  br i1 %min.iters.check366, label %scalar.ph365.preheader, label %vector.ph367

scalar.ph365.preheader:                           ; preds = %middle.block364, %.lr.ph301
  %.2299.ph = phi i64 [ 0, %.lr.ph301 ], [ %n.vec369, %middle.block364 ]
  br label %scalar.ph365

vector.ph367:                                     ; preds = %.lr.ph301
  %n.vec369 = and i64 %2, 9223372036854775806
  %broadcast.splatinsert = insertelement <2 x float> poison, float %4, i64 0
  %broadcast.splat = shufflevector <2 x float> %broadcast.splatinsert, <2 x float> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert373 = insertelement <2 x float> poison, float %133, i64 0
  %broadcast.splat374 = shufflevector <2 x float> %broadcast.splatinsert373, <2 x float> poison, <2 x i32> zeroinitializer
  br label %vector.body371

vector.body371:                                   ; preds = %vector.body371, %vector.ph367
  %index372 = phi i64 [ 0, %vector.ph367 ], [ %index.next375, %vector.body371 ]
  %134 = getelementptr inbounds float, ptr %3, i64 %index372
  %wide.load = load <2 x float>, ptr %134, align 4, !tbaa !30
  %135 = fmul <2 x float> %wide.load, %broadcast.splat
  %136 = fmul <2 x float> %135, %broadcast.splat374
  %137 = fptosi <2 x float> %136 to <2 x i64>
  %138 = getelementptr inbounds i64, ptr %28, i64 %index372
  store <2 x i64> %137, ptr %138, align 8, !tbaa !18
  %index.next375 = add nuw i64 %index372, 2
  %139 = icmp eq i64 %index.next375, %n.vec369
  br i1 %139, label %middle.block364, label %vector.body371, !llvm.loop !32

middle.block364:                                  ; preds = %vector.body371
  %cmp.n376 = icmp eq i64 %n.vec369, %2
  br i1 %cmp.n376, label %.preheader278, label %scalar.ph365.preheader

.preheader278:                                    ; preds = %scalar.ph365, %middle.block364, %._crit_edge298
  %.not270324 = icmp slt i64 %.0259.lcssa, 0
  br i1 %.not270324, label %._crit_edge328.thread, label %.lr.ph327

._crit_edge328.thread:                            ; preds = %.preheader278
  call void (ptr, ...) @gk_free(ptr noundef nonnull %6, ptr noundef null) #3
  br label %.critedge

.lr.ph327:                                        ; preds = %.preheader278
  %140 = getelementptr inbounds i8, ptr %106, i64 8
  %141 = getelementptr inbounds i8, ptr %1, i64 112
  %xtraiter382 = and i64 %2, 1
  %142 = icmp eq i64 %2, 1
  %unroll_iter385 = and i64 %2, 9223372036854775806
  %lcmp.mod383.not = icmp eq i64 %xtraiter382, 0
  br label %150

scalar.ph365:                                     ; preds = %scalar.ph365.preheader, %scalar.ph365
  %.2299 = phi i64 [ %149, %scalar.ph365 ], [ %.2299.ph, %scalar.ph365.preheader ]
  %143 = getelementptr inbounds float, ptr %3, i64 %.2299
  %144 = load float, ptr %143, align 4, !tbaa !30
  %145 = fmul float %144, %4
  %146 = fmul float %145, %133
  %147 = fptosi float %146 to i64
  %148 = getelementptr inbounds i64, ptr %28, i64 %.2299
  store i64 %147, ptr %148, align 8, !tbaa !18
  %149 = add nuw nsw i64 %.2299, 1
  %exitcond347.not = icmp eq i64 %149, %2
  br i1 %exitcond347.not, label %.preheader278, label %scalar.ph365, !llvm.loop !33

150:                                              ; preds = %.lr.ph327, %.thread
  %.3326 = phi i64 [ 0, %.lr.ph327 ], [ %264, %.thread ]
  %.0242325 = phi i64 [ 0, %.lr.ph327 ], [ %.1243, %.thread ]
  %151 = getelementptr inbounds i64, ptr %24, i64 %.3326
  %152 = load i64, ptr %151, align 8, !tbaa !18
  %153 = getelementptr inbounds i64, ptr %25, i64 %152
  %154 = load i64, ptr %153, align 8, !tbaa !18
  %155 = getelementptr inbounds i64, ptr %17, i64 %154
  %156 = load i64, ptr %155, align 8, !tbaa !18
  %157 = getelementptr inbounds i64, ptr %31, i64 %156
  %158 = load i64, ptr %157, align 8, !tbaa !18
  %159 = icmp eq i64 %158, 1
  br i1 %159, label %.thread, label %160

160:                                              ; preds = %150
  %161 = tail call ptr @libmetis__idxset(i64 noundef %2, i64 noundef 0, ptr noundef %29) #3
  %162 = load i64, ptr %151, align 8, !tbaa !18
  %163 = getelementptr inbounds i8, ptr %151, i64 8
  %164 = load i64, ptr %163, align 8, !tbaa !18
  %165 = icmp slt i64 %162, %164
  br i1 %165, label %.lr.ph309, label %._crit_edge310

.lr.ph309:                                        ; preds = %160, %._crit_edge305
  %166 = phi i64 [ %192, %._crit_edge305 ], [ %164, %160 ]
  %.1246307 = phi i64 [ %193, %._crit_edge305 ], [ %162, %160 ]
  %.0261306 = phi i64 [ %171, %._crit_edge305 ], [ 0, %160 ]
  %167 = getelementptr inbounds i64, ptr %25, i64 %.1246307
  %168 = load i64, ptr %167, align 8, !tbaa !18
  %169 = getelementptr inbounds i64, ptr %13, i64 %168
  %170 = load i64, ptr %169, align 8, !tbaa !18
  %171 = add nsw i64 %170, %.0261306
  %172 = getelementptr inbounds i64, ptr %9, i64 %168
  %173 = load i64, ptr %172, align 8, !tbaa !18
  %174 = getelementptr i8, ptr %172, i64 8
  %175 = load i64, ptr %174, align 8, !tbaa !18
  %176 = icmp slt i64 %173, %175
  br i1 %176, label %.lr.ph304, label %._crit_edge305

.lr.ph304:                                        ; preds = %.lr.ph309, %188
  %177 = phi i64 [ %189, %188 ], [ %175, %.lr.ph309 ]
  %.0250302 = phi i64 [ %190, %188 ], [ %173, %.lr.ph309 ]
  %178 = getelementptr inbounds i64, ptr %11, i64 %.0250302
  %179 = load i64, ptr %178, align 8, !tbaa !18
  %180 = getelementptr inbounds i64, ptr %17, i64 %179
  %181 = load i64, ptr %180, align 8, !tbaa !18
  %.not274 = icmp eq i64 %156, %181
  br i1 %.not274, label %188, label %182

182:                                              ; preds = %.lr.ph304
  %183 = getelementptr inbounds i64, ptr %15, i64 %.0250302
  %184 = load i64, ptr %183, align 8, !tbaa !18
  %185 = getelementptr inbounds i64, ptr %29, i64 %181
  %186 = load i64, ptr %185, align 8, !tbaa !18
  %187 = add nsw i64 %186, %184
  store i64 %187, ptr %185, align 8, !tbaa !18
  %.pre352 = load i64, ptr %174, align 8, !tbaa !18
  br label %188

188:                                              ; preds = %.lr.ph304, %182
  %189 = phi i64 [ %177, %.lr.ph304 ], [ %.pre352, %182 ]
  %190 = add nsw i64 %.0250302, 1
  %191 = icmp slt i64 %190, %189
  br i1 %191, label %.lr.ph304, label %._crit_edge305.loopexit, !llvm.loop !34

._crit_edge305.loopexit:                          ; preds = %188
  %.pre353 = load i64, ptr %163, align 8, !tbaa !18
  br label %._crit_edge305

._crit_edge305:                                   ; preds = %._crit_edge305.loopexit, %.lr.ph309
  %192 = phi i64 [ %.pre353, %._crit_edge305.loopexit ], [ %166, %.lr.ph309 ]
  %193 = add nsw i64 %.1246307, 1
  %194 = icmp slt i64 %193, %192
  br i1 %194, label %.lr.ph309, label %._crit_edge310, !llvm.loop !35

._crit_edge310:                                   ; preds = %._crit_edge305, %160
  %.0261.lcssa = phi i64 [ 0, %160 ], [ %171, %._crit_edge305 ]
  %195 = sitofp i64 %.0261.lcssa to double
  %196 = getelementptr inbounds i64, ptr %20, i64 %156
  %197 = load i64, ptr %196, align 8, !tbaa !18
  %198 = sitofp i64 %197 to double
  %199 = fmul double %198, 3.000000e-01
  %200 = fcmp olt double %199, %195
  %brmerge = or i1 %200, %132
  br i1 %brmerge, label %.thread, label %.lr.ph314.preheader

.lr.ph314.preheader:                              ; preds = %._crit_edge310
  br i1 %142, label %._crit_edge315.unr-lcssa, label %.lr.ph314

.lr.ph314:                                        ; preds = %.lr.ph314.preheader, %218
  %.2247313 = phi i64 [ %219, %218 ], [ 0, %.lr.ph314.preheader ]
  %.0262312 = phi i64 [ %.1263.1, %218 ], [ 0, %.lr.ph314.preheader ]
  %niter386 = phi i64 [ %niter386.next.1, %218 ], [ 0, %.lr.ph314.preheader ]
  %201 = getelementptr inbounds i64, ptr %29, i64 %.2247313
  %202 = load i64, ptr %201, align 8, !tbaa !18
  %203 = icmp sgt i64 %202, 0
  br i1 %203, label %204, label %.lr.ph314.1

204:                                              ; preds = %.lr.ph314
  %205 = sub nsw i64 0, %202
  %206 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.0262312
  store i64 %205, ptr %206, align 8, !tbaa !36
  %207 = add nsw i64 %.0262312, 1
  %208 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.0262312, i32 1
  store i64 %.2247313, ptr %208, align 8, !tbaa !38
  br label %.lr.ph314.1

.lr.ph314.1:                                      ; preds = %.lr.ph314, %204
  %.1263 = phi i64 [ %207, %204 ], [ %.0262312, %.lr.ph314 ]
  %209 = or disjoint i64 %.2247313, 1
  %210 = getelementptr inbounds i64, ptr %29, i64 %209
  %211 = load i64, ptr %210, align 8, !tbaa !18
  %212 = icmp sgt i64 %211, 0
  br i1 %212, label %213, label %218

213:                                              ; preds = %.lr.ph314.1
  %214 = sub nsw i64 0, %211
  %215 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.1263
  store i64 %214, ptr %215, align 8, !tbaa !36
  %216 = add nsw i64 %.1263, 1
  %217 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.1263, i32 1
  store i64 %209, ptr %217, align 8, !tbaa !38
  br label %218

218:                                              ; preds = %213, %.lr.ph314.1
  %.1263.1 = phi i64 [ %216, %213 ], [ %.1263, %.lr.ph314.1 ]
  %219 = add nuw nsw i64 %.2247313, 2
  %niter386.next.1 = add i64 %niter386, 2
  %niter386.ncmp.1 = icmp eq i64 %niter386.next.1, %unroll_iter385
  br i1 %niter386.ncmp.1, label %._crit_edge315.unr-lcssa, label %.lr.ph314, !llvm.loop !39

._crit_edge315.unr-lcssa:                         ; preds = %218, %.lr.ph314.preheader
  %.1263.lcssa.ph = phi i64 [ poison, %.lr.ph314.preheader ], [ %.1263.1, %218 ]
  %.2247313.unr = phi i64 [ 0, %.lr.ph314.preheader ], [ %219, %218 ]
  %.0262312.unr = phi i64 [ 0, %.lr.ph314.preheader ], [ %.1263.1, %218 ]
  br i1 %lcmp.mod383.not, label %._crit_edge315, label %.lr.ph314.epil

.lr.ph314.epil:                                   ; preds = %._crit_edge315.unr-lcssa
  %220 = getelementptr inbounds i64, ptr %29, i64 %.2247313.unr
  %221 = load i64, ptr %220, align 8, !tbaa !18
  %222 = icmp sgt i64 %221, 0
  br i1 %222, label %223, label %._crit_edge315

223:                                              ; preds = %.lr.ph314.epil
  %224 = sub nsw i64 0, %221
  %225 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.0262312.unr
  store i64 %224, ptr %225, align 8, !tbaa !36
  %226 = add nsw i64 %.0262312.unr, 1
  %227 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.0262312.unr, i32 1
  store i64 %.2247313.unr, ptr %227, align 8, !tbaa !38
  br label %._crit_edge315

._crit_edge315:                                   ; preds = %.lr.ph314.epil, %223, %._crit_edge315.unr-lcssa
  %.1263.lcssa = phi i64 [ %.1263.lcssa.ph, %._crit_edge315.unr-lcssa ], [ %226, %223 ], [ %.0262312.unr, %.lr.ph314.epil ]
  %228 = icmp eq i64 %.1263.lcssa, 0
  br i1 %228, label %.thread, label %229

229:                                              ; preds = %._crit_edge315
  tail call void @libmetis__ikeysort(i64 noundef %.1263.lcssa, ptr noundef %106) #3
  %230 = icmp sgt i64 %.1263.lcssa, 0
  br i1 %230, label %.lr.ph319, label %.thread

.lr.ph319:                                        ; preds = %229
  %231 = icmp slt i64 %.0261.lcssa, 5
  br i1 %231, label %.lr.ph319.split.us, label %.lr.ph319.split

.lr.ph319.split.us:                               ; preds = %.lr.ph319
  %232 = load i64, ptr %140, align 8, !tbaa !38
  br label %.split

233:                                              ; preds = %.lr.ph319.split
  %234 = add nuw nsw i64 %.3248317, 1
  %exitcond349.not = icmp eq i64 %234, %.1263.lcssa
  br i1 %exitcond349.not, label %.thread, label %.lr.ph319.split, !llvm.loop !40

.lr.ph319.split:                                  ; preds = %.lr.ph319, %233
  %.3248317 = phi i64 [ %234, %233 ], [ 0, %.lr.ph319 ]
  %235 = getelementptr inbounds %struct.KeyValueType, ptr %106, i64 %.3248317, i32 1
  %236 = load i64, ptr %235, align 8, !tbaa !38
  %237 = getelementptr inbounds i64, ptr %20, i64 %236
  %238 = load i64, ptr %237, align 8, !tbaa !18
  %239 = add nsw i64 %238, %.0261.lcssa
  %240 = getelementptr inbounds i64, ptr %28, i64 %236
  %241 = load i64, ptr %240, align 8, !tbaa !18
  %242 = icmp slt i64 %239, %241
  br i1 %242, label %.split, label %233

.split:                                           ; preds = %.lr.ph319.split, %.lr.ph319.split.us
  %.us-phi = phi i64 [ %232, %.lr.ph319.split.us ], [ %236, %.lr.ph319.split ]
  %.not273 = icmp eq i64 %.us-phi, -1
  br i1 %.not273, label %.thread, label %243

243:                                              ; preds = %.split
  %244 = load i64, ptr %196, align 8, !tbaa !18
  %245 = sub nsw i64 %244, %.0261.lcssa
  store i64 %245, ptr %196, align 8, !tbaa !18
  %246 = getelementptr inbounds i64, ptr %20, i64 %.us-phi
  %247 = load i64, ptr %246, align 8, !tbaa !18
  %248 = add nsw i64 %247, %.0261.lcssa
  store i64 %248, ptr %246, align 8, !tbaa !18
  %249 = load i64, ptr %157, align 8, !tbaa !18
  %250 = add nsw i64 %249, -1
  store i64 %250, ptr %157, align 8, !tbaa !18
  %251 = load i64, ptr %151, align 8, !tbaa !18
  %252 = load i64, ptr %163, align 8, !tbaa !18
  %253 = icmp slt i64 %251, %252
  br i1 %253, label %.lr.ph322, label %._crit_edge323

.lr.ph322:                                        ; preds = %243, %.lr.ph322
  %.4249320 = phi i64 [ %257, %.lr.ph322 ], [ %251, %243 ]
  %254 = getelementptr inbounds i64, ptr %25, i64 %.4249320
  %255 = load i64, ptr %254, align 8, !tbaa !18
  %256 = getelementptr inbounds i64, ptr %17, i64 %255
  store i64 %.us-phi, ptr %256, align 8, !tbaa !18
  %257 = add nsw i64 %.4249320, 1
  %258 = load i64, ptr %163, align 8, !tbaa !18
  %259 = icmp slt i64 %257, %258
  br i1 %259, label %.lr.ph322, label %._crit_edge323, !llvm.loop !41

._crit_edge323:                                   ; preds = %.lr.ph322, %243
  %260 = getelementptr inbounds i64, ptr %29, i64 %.us-phi
  %261 = load i64, ptr %260, align 8, !tbaa !18
  %262 = load i64, ptr %141, align 8, !tbaa !42
  %263 = sub nsw i64 %262, %261
  store i64 %263, ptr %141, align 8, !tbaa !42
  br label %.thread

.thread:                                          ; preds = %233, %._crit_edge310, %229, %.split, %._crit_edge323, %._crit_edge315, %150
  %.1243 = phi i64 [ %.0242325, %150 ], [ %.0242325, %._crit_edge310 ], [ %.0242325, %._crit_edge315 ], [ 1, %._crit_edge323 ], [ %.0242325, %.split ], [ %.0242325, %229 ], [ %.0242325, %233 ]
  %264 = add nuw i64 %.3326, 1
  %exitcond350.not = icmp eq i64 %.3326, %.0259.lcssa
  br i1 %exitcond350.not, label %._crit_edge328, label %150, !llvm.loop !43

._crit_edge328:                                   ; preds = %.thread
  %265 = icmp eq i64 %.1243, 0
  call void (ptr, ...) @gk_free(ptr noundef nonnull %6, ptr noundef null) #3
  br i1 %265, label %.critedge, label %266

266:                                              ; preds = %._crit_edge328
  %267 = call ptr @libmetis__idxset(i64 noundef %2, i64 noundef -1, ptr noundef %29) #3
  br i1 %32, label %.lr.ph339, label %._crit_edge340

.lr.ph339:                                        ; preds = %266
  %268 = getelementptr inbounds i8, ptr %1, i64 32
  br label %269

.loopexit:                                        ; preds = %291, %269
  %.1240.lcssa = phi i64 [ %.0239336, %269 ], [ %.2241, %291 ]
  %exitcond351.not = icmp eq i64 %275, %7
  br i1 %exitcond351.not, label %._crit_edge340, label %269, !llvm.loop !44

269:                                              ; preds = %.lr.ph339, %.loopexit
  %.4337 = phi i64 [ 0, %.lr.ph339 ], [ %275, %.loopexit ]
  %.0239336 = phi i64 [ 0, %.lr.ph339 ], [ %.1240.lcssa, %.loopexit ]
  %270 = getelementptr inbounds i64, ptr %17, i64 %.4337
  %271 = load i64, ptr %270, align 8, !tbaa !18
  %272 = getelementptr inbounds i64, ptr %267, i64 %271
  store i64 %.4337, ptr %272, align 8, !tbaa !18
  %273 = getelementptr inbounds i64, ptr %9, i64 %.4337
  %274 = load i64, ptr %273, align 8, !tbaa !18
  %275 = add nuw nsw i64 %.4337, 1
  %276 = getelementptr inbounds i64, ptr %9, i64 %275
  %277 = load i64, ptr %276, align 8, !tbaa !18
  %278 = icmp slt i64 %274, %277
  br i1 %278, label %.lr.ph333, label %.loopexit

.lr.ph333:                                        ; preds = %269, %291
  %279 = phi i64 [ %292, %291 ], [ %277, %269 ]
  %.1240331 = phi i64 [ %.2241, %291 ], [ %.0239336, %269 ]
  %.5330 = phi i64 [ %293, %291 ], [ %274, %269 ]
  %280 = getelementptr inbounds i64, ptr %11, i64 %.5330
  %281 = load i64, ptr %280, align 8, !tbaa !18
  %282 = getelementptr inbounds i64, ptr %17, i64 %281
  %283 = load i64, ptr %282, align 8, !tbaa !18
  %284 = getelementptr inbounds i64, ptr %267, i64 %283
  %285 = load i64, ptr %284, align 8, !tbaa !18
  %.not272 = icmp eq i64 %285, %.4337
  br i1 %.not272, label %291, label %286

286:                                              ; preds = %.lr.ph333
  %287 = load ptr, ptr %268, align 8, !tbaa !45
  %288 = getelementptr inbounds i64, ptr %287, i64 %.4337
  %289 = load i64, ptr %288, align 8, !tbaa !18
  %290 = add nsw i64 %289, %.1240331
  store i64 %.4337, ptr %284, align 8, !tbaa !18
  %.pre354 = load i64, ptr %276, align 8, !tbaa !18
  br label %291

291:                                              ; preds = %.lr.ph333, %286
  %292 = phi i64 [ %.pre354, %286 ], [ %279, %.lr.ph333 ]
  %.2241 = phi i64 [ %290, %286 ], [ %.1240331, %.lr.ph333 ]
  %293 = add nsw i64 %.5330, 1
  %294 = icmp slt i64 %293, %292
  br i1 %294, label %.lr.ph333, label %.loopexit, !llvm.loop !46

._crit_edge340:                                   ; preds = %.loopexit, %266
  %.0239.lcssa = phi i64 [ 0, %266 ], [ %.1240.lcssa, %.loopexit ]
  %295 = getelementptr inbounds i8, ptr %1, i64 120
  store i64 %.0239.lcssa, ptr %295, align 8, !tbaa !47
  br label %.critedge

.critedge:                                        ; preds = %._crit_edge328.thread, %._crit_edge, %._crit_edge340, %._crit_edge328
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %7) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %7) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %7) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %7) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  ret void
}

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

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

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


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