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

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

@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @CheckGraph(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca [16 x float], align 16
  %15 = alloca [16 x float], align 16
  %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 [16 x float], align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  store i64 0, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %21) #4
  %22 = load ptr, ptr %2, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.graphdef, ptr %22, i32 0, i32 0
  %24 = load i64, ptr %23, align 8, !tbaa !11
  store i64 %24, ptr %7, align 8, !tbaa !9
  %25 = load ptr, ptr %2, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.graphdef, ptr %25, i32 0, i32 28
  %27 = load i64, ptr %26, align 8, !tbaa !14
  store i64 %27, ptr %8, align 8, !tbaa !9
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.graphdef, ptr %28, i32 0, i32 2
  %30 = load ptr, ptr %29, align 8, !tbaa !15
  store ptr %30, ptr %16, align 8, !tbaa !5
  %31 = load ptr, ptr %2, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.graphdef, ptr %31, i32 0, i32 29
  %33 = load ptr, ptr %32, align 8, !tbaa !16
  store ptr %33, ptr %20, align 8, !tbaa !5
  %34 = load ptr, ptr %2, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.graphdef, ptr %34, i32 0, i32 5
  %36 = load ptr, ptr %35, align 8, !tbaa !17
  store ptr %36, ptr %17, align 8, !tbaa !5
  %37 = load ptr, ptr %2, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.graphdef, ptr %37, i32 0, i32 6
  %39 = load ptr, ptr %38, align 8, !tbaa !18
  store ptr %39, ptr %18, align 8, !tbaa !5
  %40 = load i64, ptr %7, align 8, !tbaa !9
  %41 = call ptr @libmetis__idxsmalloc(i64 noundef %40, i64 noundef 0, ptr noundef @.str)
  store ptr %41, ptr %19, align 8, !tbaa !5
  %42 = load i64, ptr %8, align 8, !tbaa !9
  %43 = icmp sgt i64 %42, 1
  br i1 %43, label %44, label %64

44:                                               ; preds = %1
  store i64 0, ptr %4, align 8, !tbaa !9
  br label %45

45:                                               ; preds = %60, %44
  %46 = load i64, ptr %4, align 8, !tbaa !9
  %47 = load i64, ptr %8, align 8, !tbaa !9
  %48 = icmp slt i64 %46, %47
  br i1 %48, label %49, label %63

49:                                               ; preds = %45
  %50 = load ptr, ptr %20, align 8, !tbaa !5
  %51 = load i64, ptr %4, align 8, !tbaa !9
  %52 = getelementptr inbounds float, ptr %50, i64 %51
  %53 = load float, ptr %52, align 4, !tbaa !19
  %54 = load i64, ptr %4, align 8, !tbaa !9
  %55 = getelementptr inbounds [16 x float], ptr %15, i64 0, i64 %54
  store float %53, ptr %55, align 4, !tbaa !19
  %56 = load i64, ptr %4, align 8, !tbaa !9
  %57 = getelementptr inbounds [16 x float], ptr %14, i64 0, i64 %56
  store float %53, ptr %57, align 4, !tbaa !19
  %58 = load i64, ptr %4, align 8, !tbaa !9
  %59 = getelementptr inbounds [16 x float], ptr %21, i64 0, i64 %58
  store float 0.000000e+00, ptr %59, align 4, !tbaa !19
  br label %60

60:                                               ; preds = %49
  %61 = load i64, ptr %4, align 8, !tbaa !9
  %62 = add nsw i64 %61, 1
  store i64 %62, ptr %4, align 8, !tbaa !9
  br label %45, !llvm.loop !21

63:                                               ; preds = %45
  br label %64

64:                                               ; preds = %63, %1
  %65 = load ptr, ptr %17, align 8, !tbaa !5
  %66 = getelementptr inbounds i64, ptr %65, i64 0
  %67 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %67, ptr %11, align 8, !tbaa !9
  store i64 %67, ptr %10, align 8, !tbaa !9
  %68 = load ptr, ptr %18, align 8, !tbaa !5
  %69 = getelementptr inbounds i64, ptr %68, i64 0
  %70 = load i64, ptr %69, align 8, !tbaa !9
  store i64 %70, ptr %13, align 8, !tbaa !9
  store i64 %70, ptr %12, align 8, !tbaa !9
  store i64 0, ptr %3, align 8, !tbaa !9
  br label %71

71:                                               ; preds = %352, %64
  %72 = load i64, ptr %3, align 8, !tbaa !9
  %73 = load i64, ptr %7, align 8, !tbaa !9
  %74 = icmp slt i64 %72, %73
  br i1 %74, label %75, label %355

75:                                               ; preds = %71
  %76 = load i64, ptr %8, align 8, !tbaa !9
  %77 = icmp sgt i64 %76, 1
  br i1 %77, label %78, label %158

78:                                               ; preds = %75
  store i64 0, ptr %4, align 8, !tbaa !9
  br label %79

79:                                               ; preds = %154, %78
  %80 = load i64, ptr %4, align 8, !tbaa !9
  %81 = load i64, ptr %8, align 8, !tbaa !9
  %82 = icmp slt i64 %80, %81
  br i1 %82, label %83, label %157

83:                                               ; preds = %79
  %84 = load ptr, ptr %20, align 8, !tbaa !5
  %85 = load i64, ptr %3, align 8, !tbaa !9
  %86 = load i64, ptr %8, align 8, !tbaa !9
  %87 = mul nsw i64 %85, %86
  %88 = load i64, ptr %4, align 8, !tbaa !9
  %89 = add nsw i64 %87, %88
  %90 = getelementptr inbounds float, ptr %84, i64 %89
  %91 = load float, ptr %90, align 4, !tbaa !19
  %92 = load i64, ptr %4, align 8, !tbaa !9
  %93 = getelementptr inbounds [16 x float], ptr %21, i64 0, i64 %92
  %94 = load float, ptr %93, align 4, !tbaa !19
  %95 = fadd float %94, %91
  store float %95, ptr %93, align 4, !tbaa !19
  %96 = load ptr, ptr %20, align 8, !tbaa !5
  %97 = load i64, ptr %3, align 8, !tbaa !9
  %98 = load i64, ptr %8, align 8, !tbaa !9
  %99 = mul nsw i64 %97, %98
  %100 = load i64, ptr %4, align 8, !tbaa !9
  %101 = add nsw i64 %99, %100
  %102 = getelementptr inbounds float, ptr %96, i64 %101
  %103 = load float, ptr %102, align 4, !tbaa !19
  %104 = load i64, ptr %4, align 8, !tbaa !9
  %105 = getelementptr inbounds [16 x float], ptr %14, i64 0, i64 %104
  %106 = load float, ptr %105, align 4, !tbaa !19
  %107 = fcmp olt float %103, %106
  br i1 %107, label %108, label %117

108:                                              ; preds = %83
  %109 = load ptr, ptr %20, align 8, !tbaa !5
  %110 = load i64, ptr %3, align 8, !tbaa !9
  %111 = load i64, ptr %8, align 8, !tbaa !9
  %112 = mul nsw i64 %110, %111
  %113 = load i64, ptr %4, align 8, !tbaa !9
  %114 = add nsw i64 %112, %113
  %115 = getelementptr inbounds float, ptr %109, i64 %114
  %116 = load float, ptr %115, align 4, !tbaa !19
  br label %121

117:                                              ; preds = %83
  %118 = load i64, ptr %4, align 8, !tbaa !9
  %119 = getelementptr inbounds [16 x float], ptr %14, i64 0, i64 %118
  %120 = load float, ptr %119, align 4, !tbaa !19
  br label %121

121:                                              ; preds = %117, %108
  %122 = phi float [ %116, %108 ], [ %120, %117 ]
  %123 = load i64, ptr %4, align 8, !tbaa !9
  %124 = getelementptr inbounds [16 x float], ptr %14, i64 0, i64 %123
  store float %122, ptr %124, align 4, !tbaa !19
  %125 = load ptr, ptr %20, align 8, !tbaa !5
  %126 = load i64, ptr %3, align 8, !tbaa !9
  %127 = load i64, ptr %8, align 8, !tbaa !9
  %128 = mul nsw i64 %126, %127
  %129 = load i64, ptr %4, align 8, !tbaa !9
  %130 = add nsw i64 %128, %129
  %131 = getelementptr inbounds float, ptr %125, i64 %130
  %132 = load float, ptr %131, align 4, !tbaa !19
  %133 = load i64, ptr %4, align 8, !tbaa !9
  %134 = getelementptr inbounds [16 x float], ptr %15, i64 0, i64 %133
  %135 = load float, ptr %134, align 4, !tbaa !19
  %136 = fcmp ogt float %132, %135
  br i1 %136, label %137, label %146

137:                                              ; preds = %121
  %138 = load ptr, ptr %20, align 8, !tbaa !5
  %139 = load i64, ptr %3, align 8, !tbaa !9
  %140 = load i64, ptr %8, align 8, !tbaa !9
  %141 = mul nsw i64 %139, %140
  %142 = load i64, ptr %4, align 8, !tbaa !9
  %143 = add nsw i64 %141, %142
  %144 = getelementptr inbounds float, ptr %138, i64 %143
  %145 = load float, ptr %144, align 4, !tbaa !19
  br label %150

146:                                              ; preds = %121
  %147 = load i64, ptr %4, align 8, !tbaa !9
  %148 = getelementptr inbounds [16 x float], ptr %15, i64 0, i64 %147
  %149 = load float, ptr %148, align 4, !tbaa !19
  br label %150

150:                                              ; preds = %146, %137
  %151 = phi float [ %145, %137 ], [ %149, %146 ]
  %152 = load i64, ptr %4, align 8, !tbaa !9
  %153 = getelementptr inbounds [16 x float], ptr %15, i64 0, i64 %152
  store float %151, ptr %153, align 4, !tbaa !19
  br label %154

154:                                              ; preds = %150
  %155 = load i64, ptr %4, align 8, !tbaa !9
  %156 = add nsw i64 %155, 1
  store i64 %156, ptr %4, align 8, !tbaa !9
  br label %79, !llvm.loop !23

157:                                              ; preds = %79
  br label %158

158:                                              ; preds = %157, %75
  %159 = load ptr, ptr %16, align 8, !tbaa !5
  %160 = load i64, ptr %3, align 8, !tbaa !9
  %161 = getelementptr inbounds i64, ptr %159, i64 %160
  %162 = load i64, ptr %161, align 8, !tbaa !9
  store i64 %162, ptr %4, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %325, %158
  %164 = load i64, ptr %4, align 8, !tbaa !9
  %165 = load ptr, ptr %16, align 8, !tbaa !5
  %166 = load i64, ptr %3, align 8, !tbaa !9
  %167 = add nsw i64 %166, 1
  %168 = getelementptr inbounds i64, ptr %165, i64 %167
  %169 = load i64, ptr %168, align 8, !tbaa !9
  %170 = icmp slt i64 %164, %169
  br i1 %170, label %171, label %328

171:                                              ; preds = %163
  %172 = load ptr, ptr %17, align 8, !tbaa !5
  %173 = load i64, ptr %4, align 8, !tbaa !9
  %174 = getelementptr inbounds i64, ptr %172, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !9
  store i64 %175, ptr %5, align 8, !tbaa !9
  %176 = load i64, ptr %5, align 8, !tbaa !9
  %177 = load i64, ptr %10, align 8, !tbaa !9
  %178 = icmp slt i64 %176, %177
  br i1 %178, label %179, label %181

179:                                              ; preds = %171
  %180 = load i64, ptr %5, align 8, !tbaa !9
  br label %183

181:                                              ; preds = %171
  %182 = load i64, ptr %10, align 8, !tbaa !9
  br label %183

183:                                              ; preds = %181, %179
  %184 = phi i64 [ %180, %179 ], [ %182, %181 ]
  store i64 %184, ptr %10, align 8, !tbaa !9
  %185 = load i64, ptr %5, align 8, !tbaa !9
  %186 = load i64, ptr %11, align 8, !tbaa !9
  %187 = icmp sgt i64 %185, %186
  br i1 %187, label %188, label %190

188:                                              ; preds = %183
  %189 = load i64, ptr %5, align 8, !tbaa !9
  br label %192

190:                                              ; preds = %183
  %191 = load i64, ptr %11, align 8, !tbaa !9
  br label %192

192:                                              ; preds = %190, %188
  %193 = phi i64 [ %189, %188 ], [ %191, %190 ]
  store i64 %193, ptr %11, align 8, !tbaa !9
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = load i64, ptr %4, align 8, !tbaa !9
  %196 = getelementptr inbounds i64, ptr %194, i64 %195
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = load i64, ptr %12, align 8, !tbaa !9
  %199 = icmp slt i64 %197, %198
  br i1 %199, label %200, label %205

200:                                              ; preds = %192
  %201 = load ptr, ptr %18, align 8, !tbaa !5
  %202 = load i64, ptr %4, align 8, !tbaa !9
  %203 = getelementptr inbounds i64, ptr %201, i64 %202
  %204 = load i64, ptr %203, align 8, !tbaa !9
  br label %207

205:                                              ; preds = %192
  %206 = load i64, ptr %12, align 8, !tbaa !9
  br label %207

207:                                              ; preds = %205, %200
  %208 = phi i64 [ %204, %200 ], [ %206, %205 ]
  store i64 %208, ptr %12, align 8, !tbaa !9
  %209 = load ptr, ptr %18, align 8, !tbaa !5
  %210 = load i64, ptr %4, align 8, !tbaa !9
  %211 = getelementptr inbounds i64, ptr %209, i64 %210
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = load i64, ptr %13, align 8, !tbaa !9
  %214 = icmp sgt i64 %212, %213
  br i1 %214, label %215, label %220

215:                                              ; preds = %207
  %216 = load ptr, ptr %18, align 8, !tbaa !5
  %217 = load i64, ptr %4, align 8, !tbaa !9
  %218 = getelementptr inbounds i64, ptr %216, i64 %217
  %219 = load i64, ptr %218, align 8, !tbaa !9
  br label %222

220:                                              ; preds = %207
  %221 = load i64, ptr %13, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %220, %215
  %223 = phi i64 [ %219, %215 ], [ %221, %220 ]
  store i64 %223, ptr %13, align 8, !tbaa !9
  %224 = load i64, ptr %3, align 8, !tbaa !9
  %225 = load i64, ptr %5, align 8, !tbaa !9
  %226 = icmp eq i64 %224, %225
  br i1 %226, label %227, label %232

227:                                              ; preds = %222
  %228 = load i64, ptr %3, align 8, !tbaa !9
  %229 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %228)
  %230 = load i64, ptr %9, align 8, !tbaa !9
  %231 = add nsw i64 %230, 1
  store i64 %231, ptr %9, align 8, !tbaa !9
  br label %301

232:                                              ; preds = %222
  %233 = load ptr, ptr %16, align 8, !tbaa !5
  %234 = load i64, ptr %5, align 8, !tbaa !9
  %235 = getelementptr inbounds i64, ptr %233, i64 %234
  %236 = load i64, ptr %235, align 8, !tbaa !9
  store i64 %236, ptr %6, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %283, %232
  %238 = load i64, ptr %6, align 8, !tbaa !9
  %239 = load ptr, ptr %16, align 8, !tbaa !5
  %240 = load i64, ptr %5, align 8, !tbaa !9
  %241 = add nsw i64 %240, 1
  %242 = getelementptr inbounds i64, ptr %239, i64 %241
  %243 = load i64, ptr %242, align 8, !tbaa !9
  %244 = icmp slt i64 %238, %243
  br i1 %244, label %245, label %286

245:                                              ; preds = %237
  %246 = load ptr, ptr %17, align 8, !tbaa !5
  %247 = load i64, ptr %6, align 8, !tbaa !9
  %248 = getelementptr inbounds i64, ptr %246, i64 %247
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = load i64, ptr %3, align 8, !tbaa !9
  %251 = icmp eq i64 %249, %250
  br i1 %251, label %252, label %282

252:                                              ; preds = %245
  %253 = load ptr, ptr %18, align 8, !tbaa !5
  %254 = icmp ne ptr %253, null
  br i1 %254, label %255, label %281

255:                                              ; preds = %252
  %256 = load ptr, ptr %18, align 8, !tbaa !5
  %257 = load i64, ptr %6, align 8, !tbaa !9
  %258 = getelementptr inbounds i64, ptr %256, i64 %257
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = load ptr, ptr %18, align 8, !tbaa !5
  %261 = load i64, ptr %4, align 8, !tbaa !9
  %262 = getelementptr inbounds i64, ptr %260, i64 %261
  %263 = load i64, ptr %262, align 8, !tbaa !9
  %264 = icmp ne i64 %259, %263
  br i1 %264, label %265, label %281

265:                                              ; preds = %255
  %266 = load i64, ptr %3, align 8, !tbaa !9
  %267 = load i64, ptr %5, align 8, !tbaa !9
  %268 = load i64, ptr %5, align 8, !tbaa !9
  %269 = load i64, ptr %3, align 8, !tbaa !9
  %270 = load ptr, ptr %18, align 8, !tbaa !5
  %271 = load i64, ptr %6, align 8, !tbaa !9
  %272 = getelementptr inbounds i64, ptr %270, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !9
  %274 = load ptr, ptr %18, align 8, !tbaa !5
  %275 = load i64, ptr %4, align 8, !tbaa !9
  %276 = getelementptr inbounds i64, ptr %274, i64 %275
  %277 = load i64, ptr %276, align 8, !tbaa !9
  %278 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %266, i64 noundef %267, i64 noundef %268, i64 noundef %269, i64 noundef %273, i64 noundef %277)
  %279 = load i64, ptr %9, align 8, !tbaa !9
  %280 = add nsw i64 %279, 1
  store i64 %280, ptr %9, align 8, !tbaa !9
  br label %281

281:                                              ; preds = %265, %255, %252
  br label %286

282:                                              ; preds = %245
  br label %283

283:                                              ; preds = %282
  %284 = load i64, ptr %6, align 8, !tbaa !9
  %285 = add nsw i64 %284, 1
  store i64 %285, ptr %6, align 8, !tbaa !9
  br label %237, !llvm.loop !24

286:                                              ; preds = %281, %237
  %287 = load i64, ptr %6, align 8, !tbaa !9
  %288 = load ptr, ptr %16, align 8, !tbaa !5
  %289 = load i64, ptr %5, align 8, !tbaa !9
  %290 = add nsw i64 %289, 1
  %291 = getelementptr inbounds i64, ptr %288, i64 %290
  %292 = load i64, ptr %291, align 8, !tbaa !9
  %293 = icmp eq i64 %287, %292
  br i1 %293, label %294, label %300

294:                                              ; preds = %286
  %295 = load i64, ptr %5, align 8, !tbaa !9
  %296 = load i64, ptr %3, align 8, !tbaa !9
  %297 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.3, i64 noundef %295, i64 noundef %296)
  %298 = load i64, ptr %9, align 8, !tbaa !9
  %299 = add nsw i64 %298, 1
  store i64 %299, ptr %9, align 8, !tbaa !9
  br label %300

300:                                              ; preds = %294, %286
  br label %301

301:                                              ; preds = %300, %227
  %302 = load ptr, ptr %19, align 8, !tbaa !5
  %303 = load i64, ptr %5, align 8, !tbaa !9
  %304 = getelementptr inbounds i64, ptr %302, i64 %303
  %305 = load i64, ptr %304, align 8, !tbaa !9
  %306 = icmp eq i64 %305, 0
  br i1 %306, label %307, label %313

307:                                              ; preds = %301
  %308 = load ptr, ptr %19, align 8, !tbaa !5
  %309 = load i64, ptr %5, align 8, !tbaa !9
  %310 = getelementptr inbounds i64, ptr %308, i64 %309
  %311 = load i64, ptr %310, align 8, !tbaa !9
  %312 = add nsw i64 %311, 1
  store i64 %312, ptr %310, align 8, !tbaa !9
  br label %324

313:                                              ; preds = %301
  %314 = load i64, ptr %5, align 8, !tbaa !9
  %315 = load i64, ptr %3, align 8, !tbaa !9
  %316 = load ptr, ptr %19, align 8, !tbaa !5
  %317 = load i64, ptr %5, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !9
  %320 = add nsw i64 %319, 1
  store i64 %320, ptr %318, align 8, !tbaa !9
  %321 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, i64 noundef %314, i64 noundef %315, i64 noundef %319)
  %322 = load i64, ptr %9, align 8, !tbaa !9
  %323 = add nsw i64 %322, 1
  store i64 %323, ptr %9, align 8, !tbaa !9
  br label %324

324:                                              ; preds = %313, %307
  br label %325

325:                                              ; preds = %324
  %326 = load i64, ptr %4, align 8, !tbaa !9
  %327 = add nsw i64 %326, 1
  store i64 %327, ptr %4, align 8, !tbaa !9
  br label %163, !llvm.loop !25

328:                                              ; preds = %163
  %329 = load ptr, ptr %16, align 8, !tbaa !5
  %330 = load i64, ptr %3, align 8, !tbaa !9
  %331 = getelementptr inbounds i64, ptr %329, i64 %330
  %332 = load i64, ptr %331, align 8, !tbaa !9
  store i64 %332, ptr %4, align 8, !tbaa !9
  br label %333

333:                                              ; preds = %348, %328
  %334 = load i64, ptr %4, align 8, !tbaa !9
  %335 = load ptr, ptr %16, align 8, !tbaa !5
  %336 = load i64, ptr %3, align 8, !tbaa !9
  %337 = add nsw i64 %336, 1
  %338 = getelementptr inbounds i64, ptr %335, i64 %337
  %339 = load i64, ptr %338, align 8, !tbaa !9
  %340 = icmp slt i64 %334, %339
  br i1 %340, label %341, label %351

341:                                              ; preds = %333
  %342 = load ptr, ptr %19, align 8, !tbaa !5
  %343 = load ptr, ptr %17, align 8, !tbaa !5
  %344 = load i64, ptr %4, align 8, !tbaa !9
  %345 = getelementptr inbounds i64, ptr %343, i64 %344
  %346 = load i64, ptr %345, align 8, !tbaa !9
  %347 = getelementptr inbounds i64, ptr %342, i64 %346
  store i64 0, ptr %347, align 8, !tbaa !9
  br label %348

348:                                              ; preds = %341
  %349 = load i64, ptr %4, align 8, !tbaa !9
  %350 = add nsw i64 %349, 1
  store i64 %350, ptr %4, align 8, !tbaa !9
  br label %333, !llvm.loop !26

351:                                              ; preds = %333
  br label %352

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

355:                                              ; preds = %71
  %356 = load i64, ptr %8, align 8, !tbaa !9
  %357 = icmp sgt i64 %356, 1
  br i1 %357, label %358, label %385

358:                                              ; preds = %355
  store i64 0, ptr %4, align 8, !tbaa !9
  br label %359

359:                                              ; preds = %381, %358
  %360 = load i64, ptr %4, align 8, !tbaa !9
  %361 = load i64, ptr %8, align 8, !tbaa !9
  %362 = icmp slt i64 %360, %361
  br i1 %362, label %363, label %384

363:                                              ; preds = %359
  %364 = load i64, ptr %4, align 8, !tbaa !9
  %365 = getelementptr inbounds [16 x float], ptr %21, i64 0, i64 %364
  %366 = load float, ptr %365, align 4, !tbaa !19
  %367 = fpext float %366 to double
  %368 = fsub double %367, 1.000000e+00
  %369 = call double @llvm.fabs.f64(double %368)
  %370 = fcmp ogt double %369, 1.000000e-04
  br i1 %370, label %371, label %380

371:                                              ; preds = %363
  %372 = load i64, ptr %4, align 8, !tbaa !9
  %373 = load i64, ptr %4, align 8, !tbaa !9
  %374 = getelementptr inbounds [16 x float], ptr %21, i64 0, i64 %373
  %375 = load float, ptr %374, align 4, !tbaa !19
  %376 = fpext float %375 to double
  %377 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %372, double noundef %376)
  %378 = load i64, ptr %9, align 8, !tbaa !9
  %379 = add nsw i64 %378, 1
  store i64 %379, ptr %9, align 8, !tbaa !9
  br label %380

380:                                              ; preds = %371, %363
  br label %381

381:                                              ; preds = %380
  %382 = load i64, ptr %4, align 8, !tbaa !9
  %383 = add nsw i64 %382, 1
  store i64 %383, ptr %4, align 8, !tbaa !9
  br label %359, !llvm.loop !28

384:                                              ; preds = %359
  br label %385

385:                                              ; preds = %384, %355
  %386 = load i64, ptr %9, align 8, !tbaa !9
  %387 = icmp sgt i64 %386, 0
  br i1 %387, label %388, label %391

388:                                              ; preds = %385
  %389 = load i64, ptr %9, align 8, !tbaa !9
  %390 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6, i64 noundef %389)
  br label %391

391:                                              ; preds = %388, %385
  call void (ptr, ...) @gk_free(ptr noundef %19, ptr noundef null)
  %392 = load i64, ptr %9, align 8, !tbaa !9
  %393 = icmp eq i64 %392, 0
  %394 = zext i1 %393 to i64
  %395 = select i1 %393, i32 1, i32 0
  %396 = sext i32 %395 to i64
  call void @llvm.lifetime.end.p0(i64 64, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  ret i64 %396
}

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

declare ptr @libmetis__idxsmalloc(i64 noundef, i64 noundef, ptr noundef) #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #3

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

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

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, 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}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !10, i64 208}
!15 = !{!12, !6, i64 16}
!16 = !{!12, !6, i64 216}
!17 = !{!12, !6, i64 40}
!18 = !{!12, !6, i64 48}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}


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

@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i64 0, 2) i64 @CheckGraph(ptr nocapture noundef readonly %0) local_unnamed_addr #0 {
  %2 = alloca [16 x float], align 16
  %3 = alloca [16 x float], align 16
  %4 = alloca ptr, align 8
  %5 = alloca [16 x float], align 16
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #6
  %6 = load i64, ptr %0, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 208
  %8 = load i64, ptr %7, align 8, !tbaa !12
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %0, i64 216
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 40
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %0, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %17 = tail call ptr @libmetis__idxsmalloc(i64 noundef %6, i64 noundef 0, ptr noundef nonnull @.str) #6
  store ptr %17, ptr %4, align 8, !tbaa !17
  %18 = icmp sgt i64 %8, 1
  br i1 %18, label %.preheader170.preheader, label %.loopexit171

.preheader170.preheader:                          ; preds = %1
  %19 = shl nuw i64 %8, 2
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %5, i8 0, i64 %19, i1 false), !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %3, ptr align 4 %12, i64 %19, i1 false), !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %2, ptr align 4 %12, i64 %19, i1 false), !tbaa !18
  br label %.loopexit171

.loopexit171:                                     ; preds = %.preheader170.preheader, %1
  %20 = icmp sgt i64 %6, 0
  br i1 %20, label %.lr.ph204.preheader, label %._crit_edge205

.lr.ph204.preheader:                              ; preds = %.loopexit171
  %min.iters.check = icmp ult i64 %8, 4
  %n.vec = and i64 %8, 9223372036854775804
  %cmp.n = icmp eq i64 %8, %n.vec
  br label %.lr.ph204

.loopexit167:                                     ; preds = %.lr.ph196, %._crit_edge
  %exitcond214.not = icmp eq i64 %48, %6
  br i1 %exitcond214.not, label %._crit_edge205, label %.lr.ph204, !llvm.loop !20

.lr.ph204:                                        ; preds = %.lr.ph204.preheader, %.loopexit167
  %.0202 = phi i64 [ %48, %.loopexit167 ], [ 0, %.lr.ph204.preheader ]
  %.0139201 = phi i64 [ %.1140.lcssa, %.loopexit167 ], [ 0, %.lr.ph204.preheader ]
  br i1 %18, label %.preheader168, label %.loopexit169

.preheader168:                                    ; preds = %.lr.ph204
  %21 = mul nuw nsw i64 %.0202, %8
  %22 = getelementptr inbounds float, ptr %12, i64 %21
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader168, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader168 ]
  %23 = getelementptr inbounds float, ptr %22, i64 %index
  %wide.load = load <4 x float>, ptr %23, align 4, !tbaa !18
  %24 = getelementptr inbounds [16 x float], ptr %5, i64 0, i64 %index
  %wide.load222 = load <4 x float>, ptr %24, align 16, !tbaa !18
  %25 = fadd <4 x float> %wide.load, %wide.load222
  store <4 x float> %25, ptr %24, align 16, !tbaa !18
  %26 = getelementptr inbounds [16 x float], ptr %2, i64 0, i64 %index
  %wide.load223 = load <4 x float>, ptr %26, align 16, !tbaa !18
  %27 = fcmp olt <4 x float> %wide.load, %wide.load223
  %28 = select <4 x i1> %27, <4 x float> %wide.load, <4 x float> %wide.load223
  store <4 x float> %28, ptr %26, align 16, !tbaa !18
  %29 = getelementptr inbounds [16 x float], ptr %3, i64 0, i64 %index
  %wide.load224 = load <4 x float>, ptr %29, align 16, !tbaa !18
  %30 = fcmp ogt <4 x float> %wide.load, %wide.load224
  %31 = select <4 x i1> %30, <4 x float> %wide.load, <4 x float> %wide.load224
  store <4 x float> %31, ptr %29, align 16, !tbaa !18
  %index.next = add nuw i64 %index, 4
  %32 = icmp eq i64 %index.next, %n.vec
  br i1 %32, label %middle.block, label %vector.body, !llvm.loop !22

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

scalar.ph.preheader:                              ; preds = %middle.block, %.preheader168
  %.1178.ph = phi i64 [ 0, %.preheader168 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.1178 = phi i64 [ %45, %scalar.ph ], [ %.1178.ph, %scalar.ph.preheader ]
  %33 = getelementptr inbounds float, ptr %22, i64 %.1178
  %34 = load float, ptr %33, align 4, !tbaa !18
  %35 = getelementptr inbounds [16 x float], ptr %5, i64 0, i64 %.1178
  %36 = load float, ptr %35, align 4, !tbaa !18
  %37 = fadd float %34, %36
  store float %37, ptr %35, align 4, !tbaa !18
  %38 = getelementptr inbounds [16 x float], ptr %2, i64 0, i64 %.1178
  %39 = load float, ptr %38, align 4, !tbaa !18
  %40 = fcmp olt float %34, %39
  %. = select i1 %40, float %34, float %39
  store float %., ptr %38, align 4, !tbaa !18
  %41 = getelementptr inbounds [16 x float], ptr %3, i64 0, i64 %.1178
  %42 = load float, ptr %41, align 4, !tbaa !18
  %43 = fcmp ogt float %34, %42
  %44 = select i1 %43, float %34, float %42
  store float %44, ptr %41, align 4, !tbaa !18
  %45 = add nuw nsw i64 %.1178, 1
  %exitcond.not = icmp eq i64 %45, %8
  br i1 %exitcond.not, label %.loopexit169, label %scalar.ph, !llvm.loop !25

.loopexit169:                                     ; preds = %scalar.ph, %middle.block, %.lr.ph204
  %46 = getelementptr inbounds i64, ptr %10, i64 %.0202
  %47 = load i64, ptr %46, align 8, !tbaa !26
  %48 = add nuw nsw i64 %.0202, 1
  %49 = getelementptr inbounds i64, ptr %10, i64 %48
  %50 = load i64, ptr %49, align 8, !tbaa !26
  %51 = icmp slt i64 %47, %50
  br i1 %51, label %.lr.ph186, label %._crit_edge

.lr.ph186:                                        ; preds = %.loopexit169, %90
  %.2185 = phi i64 [ %91, %90 ], [ %47, %.loopexit169 ]
  %.1140184 = phi i64 [ %.4143, %90 ], [ %.0139201, %.loopexit169 ]
  %52 = getelementptr inbounds i64, ptr %14, i64 %.2185
  %53 = load i64, ptr %52, align 8, !tbaa !26
  %54 = getelementptr inbounds i64, ptr %16, i64 %.2185
  %55 = load i64, ptr %54, align 8, !tbaa !26
  %56 = icmp eq i64 %.0202, %53
  br i1 %56, label %57, label %60

57:                                               ; preds = %.lr.ph186
  %58 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %.0202) #6
  %59 = add nsw i64 %.1140184, 1
  br label %81

60:                                               ; preds = %.lr.ph186
  %61 = getelementptr inbounds i64, ptr %10, i64 %53
  %62 = load i64, ptr %61, align 8, !tbaa !26
  %63 = getelementptr i8, ptr %61, i64 8
  %64 = load i64, ptr %63, align 8, !tbaa !26
  %65 = icmp slt i64 %62, %64
  br i1 %65, label %.lr.ph, label %.loopexit166

.lr.ph:                                           ; preds = %60, %75
  %.0138179 = phi i64 [ %76, %75 ], [ %62, %60 ]
  %66 = getelementptr inbounds i64, ptr %14, i64 %.0138179
  %67 = load i64, ptr %66, align 8, !tbaa !26
  %68 = icmp eq i64 %67, %.0202
  br i1 %68, label %69, label %75

69:                                               ; preds = %.lr.ph
  %70 = getelementptr inbounds i64, ptr %16, i64 %.0138179
  %71 = load i64, ptr %70, align 8, !tbaa !26
  %.not = icmp eq i64 %71, %55
  br i1 %.not, label %.loopexit166, label %72

72:                                               ; preds = %69
  %73 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %.0202, i64 noundef %53, i64 noundef %53, i64 noundef %.0202, i64 noundef %71, i64 noundef %55) #6
  %74 = add nsw i64 %.1140184, 1
  %.pre = load i64, ptr %63, align 8, !tbaa !26
  br label %.loopexit166

75:                                               ; preds = %.lr.ph
  %76 = add i64 %.0138179, 1
  %exitcond213.not = icmp eq i64 %76, %64
  br i1 %exitcond213.not, label %.loopexit166.thread, label %.lr.ph, !llvm.loop !27

.loopexit166:                                     ; preds = %60, %69, %72
  %77 = phi i64 [ %.pre, %72 ], [ %64, %69 ], [ %64, %60 ]
  %.0138174 = phi i64 [ %.0138179, %72 ], [ %.0138179, %69 ], [ %62, %60 ]
  %.2141 = phi i64 [ %74, %72 ], [ %.1140184, %69 ], [ %.1140184, %60 ]
  %78 = icmp eq i64 %.0138174, %77
  br i1 %78, label %.loopexit166.thread, label %81

.loopexit166.thread:                              ; preds = %75, %.loopexit166
  %.2141219 = phi i64 [ %.2141, %.loopexit166 ], [ %.1140184, %75 ]
  %79 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.3, i64 noundef %53, i64 noundef %.0202) #6
  %80 = add nsw i64 %.2141219, 1
  br label %81

81:                                               ; preds = %.loopexit166, %.loopexit166.thread, %57
  %.3142 = phi i64 [ %59, %57 ], [ %80, %.loopexit166.thread ], [ %.2141, %.loopexit166 ]
  %82 = getelementptr inbounds i64, ptr %17, i64 %53
  %83 = load i64, ptr %82, align 8, !tbaa !26
  %84 = icmp eq i64 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %81
  store i64 1, ptr %82, align 8, !tbaa !26
  br label %90

86:                                               ; preds = %81
  %87 = add nsw i64 %83, 1
  store i64 %87, ptr %82, align 8, !tbaa !26
  %88 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, i64 noundef %53, i64 noundef %.0202, i64 noundef %83) #6
  %89 = add nsw i64 %.3142, 1
  br label %90

90:                                               ; preds = %85, %86
  %.4143 = phi i64 [ %.3142, %85 ], [ %89, %86 ]
  %91 = add nsw i64 %.2185, 1
  %92 = load i64, ptr %49, align 8, !tbaa !26
  %93 = icmp slt i64 %91, %92
  br i1 %93, label %.lr.ph186, label %._crit_edge.loopexit, !llvm.loop !28

._crit_edge.loopexit:                             ; preds = %90
  %.pre216 = load i64, ptr %46, align 8, !tbaa !26
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.loopexit169
  %94 = phi i64 [ %50, %.loopexit169 ], [ %92, %._crit_edge.loopexit ]
  %95 = phi i64 [ %47, %.loopexit169 ], [ %.pre216, %._crit_edge.loopexit ]
  %.1140.lcssa = phi i64 [ %.0139201, %.loopexit169 ], [ %.4143, %._crit_edge.loopexit ]
  %96 = icmp slt i64 %95, %94
  br i1 %96, label %.lr.ph196, label %.loopexit167

.lr.ph196:                                        ; preds = %._crit_edge, %.lr.ph196
  %.3194 = phi i64 [ %100, %.lr.ph196 ], [ %95, %._crit_edge ]
  %97 = getelementptr inbounds i64, ptr %14, i64 %.3194
  %98 = load i64, ptr %97, align 8, !tbaa !26
  %99 = getelementptr inbounds i64, ptr %17, i64 %98
  store i64 0, ptr %99, align 8, !tbaa !26
  %100 = add nsw i64 %.3194, 1
  %101 = load i64, ptr %49, align 8, !tbaa !26
  %102 = icmp slt i64 %100, %101
  br i1 %102, label %.lr.ph196, label %.loopexit167, !llvm.loop !29

._crit_edge205:                                   ; preds = %.loopexit167, %.loopexit171
  %.0139.lcssa = phi i64 [ 0, %.loopexit171 ], [ %.1140.lcssa, %.loopexit167 ]
  br i1 %18, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %._crit_edge205, %112
  %.4208 = phi i64 [ %113, %112 ], [ 0, %._crit_edge205 ]
  %.5207 = phi i64 [ %.6, %112 ], [ %.0139.lcssa, %._crit_edge205 ]
  %103 = getelementptr inbounds [16 x float], ptr %5, i64 0, i64 %.4208
  %104 = load float, ptr %103, align 4, !tbaa !18
  %105 = fpext float %104 to double
  %106 = fadd double %105, -1.000000e+00
  %107 = tail call double @llvm.fabs.f64(double %106)
  %108 = fcmp ogt double %107, 1.000000e-04
  br i1 %108, label %109, label %112

109:                                              ; preds = %.preheader
  %110 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %.4208, double noundef %105) #6
  %111 = add nsw i64 %.5207, 1
  br label %112

112:                                              ; preds = %.preheader, %109
  %.6 = phi i64 [ %111, %109 ], [ %.5207, %.preheader ]
  %113 = add nuw nsw i64 %.4208, 1
  %exitcond215.not = icmp eq i64 %113, %8
  br i1 %exitcond215.not, label %.loopexit, label %.preheader, !llvm.loop !30

.loopexit:                                        ; preds = %112, %._crit_edge205
  %.7 = phi i64 [ %.0139.lcssa, %._crit_edge205 ], [ %.6, %112 ]
  %114 = icmp sgt i64 %.7, 0
  br i1 %114, label %115, label %117

115:                                              ; preds = %.loopexit
  %116 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6, i64 noundef %.7) #6
  br label %117

117:                                              ; preds = %115, %.loopexit
  call void (ptr, ...) @gk_free(ptr noundef nonnull %4, ptr noundef null) #6
  %118 = icmp eq i64 %.7, 0
  %119 = zext i1 %118 to i64
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2) #6
  ret i64 %119
}

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

declare ptr @libmetis__idxsmalloc(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @mprintf(ptr noundef, ...) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #3

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

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

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

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

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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, !7, i64 208}
!13 = !{!6, !10, i64 16}
!14 = !{!6, !10, i64 216}
!15 = !{!6, !10, i64 40}
!16 = !{!6, !10, i64 48}
!17 = !{!10, !10, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"float", !8, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21, !23, !24}
!23 = !{!"llvm.loop.isvectorized", i32 1}
!24 = !{!"llvm.loop.unroll.runtime.disable"}
!25 = distinct !{!25, !21, !24, !23}
!26 = !{!7, !7, i64 0}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}


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