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

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

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

@.str = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @libmetis__SetupCtrl(i32 noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  store i32 %0, ptr %8, align 4, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !9
  store i32 %2, ptr %10, align 4, !tbaa !5
  store i32 %3, ptr %11, align 4, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !9
  store ptr %5, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %18 = call ptr @gk_malloc(i64 noundef 328, ptr noundef @.str)
  store ptr %18, ptr %16, align 8, !tbaa !9
  %19 = load ptr, ptr %16, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 1 %19, i8 0, i64 328, i1 false)
  %20 = load i32, ptr %8, align 4, !tbaa !5
  switch i32 %20, label %396 [
    i32 0, label %21
    i32 1, label %145
    i32 2, label %246
  ]

21:                                               ; preds = %6
  %22 = load ptr, ptr %9, align 8, !tbaa !9
  %23 = icmp eq ptr %22, null
  br i1 %23, label %29, label %24

24:                                               ; preds = %21
  %25 = load ptr, ptr %9, align 8, !tbaa !9
  %26 = getelementptr inbounds i32, ptr %25, i64 1
  %27 = load i32, ptr %26, align 4, !tbaa !5
  %28 = icmp eq i32 %27, -1
  br i1 %28, label %29, label %30

29:                                               ; preds = %24, %21
  br label %34

30:                                               ; preds = %24
  %31 = load ptr, ptr %9, align 8, !tbaa !9
  %32 = getelementptr inbounds i32, ptr %31, i64 1
  %33 = load i32, ptr %32, align 4, !tbaa !5
  br label %34

34:                                               ; preds = %30, %29
  %35 = phi i32 [ 0, %29 ], [ %33, %30 ]
  %36 = load ptr, ptr %16, align 8, !tbaa !9
  %37 = getelementptr inbounds %struct.ctrl_t, ptr %36, i32 0, i32 1
  store i32 %35, ptr %37, align 4, !tbaa !11
  %38 = load ptr, ptr %16, align 8, !tbaa !9
  %39 = getelementptr inbounds %struct.ctrl_t, ptr %38, i32 0, i32 5
  store i32 0, ptr %39, align 4, !tbaa !16
  %40 = load ptr, ptr %9, align 8, !tbaa !9
  %41 = icmp eq ptr %40, null
  br i1 %41, label %47, label %42

42:                                               ; preds = %34
  %43 = load ptr, ptr %9, align 8, !tbaa !9
  %44 = getelementptr inbounds i32, ptr %43, i64 7
  %45 = load i32, ptr %44, align 4, !tbaa !5
  %46 = icmp eq i32 %45, -1
  br i1 %46, label %47, label %48

47:                                               ; preds = %42, %34
  br label %52

48:                                               ; preds = %42
  %49 = load ptr, ptr %9, align 8, !tbaa !9
  %50 = getelementptr inbounds i32, ptr %49, i64 7
  %51 = load i32, ptr %50, align 4, !tbaa !5
  br label %52

52:                                               ; preds = %48, %47
  %53 = phi i32 [ 1, %47 ], [ %51, %48 ]
  %54 = load ptr, ptr %16, align 8, !tbaa !9
  %55 = getelementptr inbounds %struct.ctrl_t, ptr %54, i32 0, i32 16
  store i32 %53, ptr %55, align 8, !tbaa !17
  %56 = load ptr, ptr %9, align 8, !tbaa !9
  %57 = icmp eq ptr %56, null
  br i1 %57, label %63, label %58

58:                                               ; preds = %52
  %59 = load ptr, ptr %9, align 8, !tbaa !9
  %60 = getelementptr inbounds i32, ptr %59, i64 6
  %61 = load i32, ptr %60, align 4, !tbaa !5
  %62 = icmp eq i32 %61, -1
  br i1 %62, label %63, label %64

63:                                               ; preds = %58, %52
  br label %68

64:                                               ; preds = %58
  %65 = load ptr, ptr %9, align 8, !tbaa !9
  %66 = getelementptr inbounds i32, ptr %65, i64 6
  %67 = load i32, ptr %66, align 4, !tbaa !5
  br label %68

68:                                               ; preds = %64, %63
  %69 = phi i32 [ 10, %63 ], [ %67, %64 ]
  %70 = load ptr, ptr %16, align 8, !tbaa !9
  %71 = getelementptr inbounds %struct.ctrl_t, ptr %70, i32 0, i32 17
  store i32 %69, ptr %71, align 4, !tbaa !18
  %72 = load i32, ptr %10, align 4, !tbaa !5
  %73 = icmp eq i32 %72, 1
  br i1 %73, label %74, label %109

74:                                               ; preds = %68
  %75 = load ptr, ptr %9, align 8, !tbaa !9
  %76 = icmp eq ptr %75, null
  br i1 %76, label %82, label %77

77:                                               ; preds = %74
  %78 = load ptr, ptr %9, align 8, !tbaa !9
  %79 = getelementptr inbounds i32, ptr %78, i64 3
  %80 = load i32, ptr %79, align 4, !tbaa !5
  %81 = icmp eq i32 %80, -1
  br i1 %81, label %82, label %83

82:                                               ; preds = %77, %74
  br label %87

83:                                               ; preds = %77
  %84 = load ptr, ptr %9, align 8, !tbaa !9
  %85 = getelementptr inbounds i32, ptr %84, i64 3
  %86 = load i32, ptr %85, align 4, !tbaa !5
  br label %87

87:                                               ; preds = %83, %82
  %88 = phi i32 [ 0, %82 ], [ %86, %83 ]
  %89 = load ptr, ptr %16, align 8, !tbaa !9
  %90 = getelementptr inbounds %struct.ctrl_t, ptr %89, i32 0, i32 4
  store i32 %88, ptr %90, align 8, !tbaa !19
  %91 = load ptr, ptr %9, align 8, !tbaa !9
  %92 = icmp eq ptr %91, null
  br i1 %92, label %98, label %93

93:                                               ; preds = %87
  %94 = load ptr, ptr %9, align 8, !tbaa !9
  %95 = getelementptr inbounds i32, ptr %94, i64 16
  %96 = load i32, ptr %95, align 4, !tbaa !5
  %97 = icmp eq i32 %96, -1
  br i1 %97, label %98, label %99

98:                                               ; preds = %93, %87
  br label %103

99:                                               ; preds = %93
  %100 = load ptr, ptr %9, align 8, !tbaa !9
  %101 = getelementptr inbounds i32, ptr %100, i64 16
  %102 = load i32, ptr %101, align 4, !tbaa !5
  br label %103

103:                                              ; preds = %99, %98
  %104 = phi i32 [ 1, %98 ], [ %102, %99 ]
  %105 = load ptr, ptr %16, align 8, !tbaa !9
  %106 = getelementptr inbounds %struct.ctrl_t, ptr %105, i32 0, i32 12
  store i32 %104, ptr %106, align 8, !tbaa !20
  %107 = load ptr, ptr %16, align 8, !tbaa !9
  %108 = getelementptr inbounds %struct.ctrl_t, ptr %107, i32 0, i32 6
  store i32 20, ptr %108, align 8, !tbaa !21
  br label %144

109:                                              ; preds = %68
  %110 = load ptr, ptr %9, align 8, !tbaa !9
  %111 = icmp eq ptr %110, null
  br i1 %111, label %117, label %112

112:                                              ; preds = %109
  %113 = load ptr, ptr %9, align 8, !tbaa !9
  %114 = getelementptr inbounds i32, ptr %113, i64 3
  %115 = load i32, ptr %114, align 4, !tbaa !5
  %116 = icmp eq i32 %115, -1
  br i1 %116, label %117, label %118

117:                                              ; preds = %112, %109
  br label %122

118:                                              ; preds = %112
  %119 = load ptr, ptr %9, align 8, !tbaa !9
  %120 = getelementptr inbounds i32, ptr %119, i64 3
  %121 = load i32, ptr %120, align 4, !tbaa !5
  br label %122

122:                                              ; preds = %118, %117
  %123 = phi i32 [ 1, %117 ], [ %121, %118 ]
  %124 = load ptr, ptr %16, align 8, !tbaa !9
  %125 = getelementptr inbounds %struct.ctrl_t, ptr %124, i32 0, i32 4
  store i32 %123, ptr %125, align 8, !tbaa !19
  %126 = load ptr, ptr %9, align 8, !tbaa !9
  %127 = icmp eq ptr %126, null
  br i1 %127, label %133, label %128

128:                                              ; preds = %122
  %129 = load ptr, ptr %9, align 8, !tbaa !9
  %130 = getelementptr inbounds i32, ptr %129, i64 16
  %131 = load i32, ptr %130, align 4, !tbaa !5
  %132 = icmp eq i32 %131, -1
  br i1 %132, label %133, label %134

133:                                              ; preds = %128, %122
  br label %138

134:                                              ; preds = %128
  %135 = load ptr, ptr %9, align 8, !tbaa !9
  %136 = getelementptr inbounds i32, ptr %135, i64 16
  %137 = load i32, ptr %136, align 4, !tbaa !5
  br label %138

138:                                              ; preds = %134, %133
  %139 = phi i32 [ 10, %133 ], [ %137, %134 ]
  %140 = load ptr, ptr %16, align 8, !tbaa !9
  %141 = getelementptr inbounds %struct.ctrl_t, ptr %140, i32 0, i32 12
  store i32 %139, ptr %141, align 8, !tbaa !20
  %142 = load ptr, ptr %16, align 8, !tbaa !9
  %143 = getelementptr inbounds %struct.ctrl_t, ptr %142, i32 0, i32 6
  store i32 100, ptr %143, align 8, !tbaa !21
  br label %144

144:                                              ; preds = %138, %103
  br label %398

145:                                              ; preds = %6
  %146 = load ptr, ptr %9, align 8, !tbaa !9
  %147 = icmp eq ptr %146, null
  br i1 %147, label %153, label %148

148:                                              ; preds = %145
  %149 = load ptr, ptr %9, align 8, !tbaa !9
  %150 = getelementptr inbounds i32, ptr %149, i64 1
  %151 = load i32, ptr %150, align 4, !tbaa !5
  %152 = icmp eq i32 %151, -1
  br i1 %152, label %153, label %154

153:                                              ; preds = %148, %145
  br label %158

154:                                              ; preds = %148
  %155 = load ptr, ptr %9, align 8, !tbaa !9
  %156 = getelementptr inbounds i32, ptr %155, i64 1
  %157 = load i32, ptr %156, align 4, !tbaa !5
  br label %158

158:                                              ; preds = %154, %153
  %159 = phi i32 [ 0, %153 ], [ %157, %154 ]
  %160 = load ptr, ptr %16, align 8, !tbaa !9
  %161 = getelementptr inbounds %struct.ctrl_t, ptr %160, i32 0, i32 1
  store i32 %159, ptr %161, align 4, !tbaa !11
  %162 = load ptr, ptr %16, align 8, !tbaa !9
  %163 = getelementptr inbounds %struct.ctrl_t, ptr %162, i32 0, i32 4
  store i32 4, ptr %163, align 8, !tbaa !19
  %164 = load ptr, ptr %16, align 8, !tbaa !9
  %165 = getelementptr inbounds %struct.ctrl_t, ptr %164, i32 0, i32 5
  store i32 1, ptr %165, align 4, !tbaa !16
  %166 = load ptr, ptr %9, align 8, !tbaa !9
  %167 = icmp eq ptr %166, null
  br i1 %167, label %173, label %168

168:                                              ; preds = %158
  %169 = load ptr, ptr %9, align 8, !tbaa !9
  %170 = getelementptr inbounds i32, ptr %169, i64 7
  %171 = load i32, ptr %170, align 4, !tbaa !5
  %172 = icmp eq i32 %171, -1
  br i1 %172, label %173, label %174

173:                                              ; preds = %168, %158
  br label %178

174:                                              ; preds = %168
  %175 = load ptr, ptr %9, align 8, !tbaa !9
  %176 = getelementptr inbounds i32, ptr %175, i64 7
  %177 = load i32, ptr %176, align 4, !tbaa !5
  br label %178

178:                                              ; preds = %174, %173
  %179 = phi i32 [ 1, %173 ], [ %177, %174 ]
  %180 = load ptr, ptr %16, align 8, !tbaa !9
  %181 = getelementptr inbounds %struct.ctrl_t, ptr %180, i32 0, i32 16
  store i32 %179, ptr %181, align 8, !tbaa !17
  %182 = load ptr, ptr %9, align 8, !tbaa !9
  %183 = icmp eq ptr %182, null
  br i1 %183, label %189, label %184

184:                                              ; preds = %178
  %185 = load ptr, ptr %9, align 8, !tbaa !9
  %186 = getelementptr inbounds i32, ptr %185, i64 6
  %187 = load i32, ptr %186, align 4, !tbaa !5
  %188 = icmp eq i32 %187, -1
  br i1 %188, label %189, label %190

189:                                              ; preds = %184, %178
  br label %194

190:                                              ; preds = %184
  %191 = load ptr, ptr %9, align 8, !tbaa !9
  %192 = getelementptr inbounds i32, ptr %191, i64 6
  %193 = load i32, ptr %192, align 4, !tbaa !5
  br label %194

194:                                              ; preds = %190, %189
  %195 = phi i32 [ 10, %189 ], [ %193, %190 ]
  %196 = load ptr, ptr %16, align 8, !tbaa !9
  %197 = getelementptr inbounds %struct.ctrl_t, ptr %196, i32 0, i32 17
  store i32 %195, ptr %197, align 4, !tbaa !18
  %198 = load ptr, ptr %9, align 8, !tbaa !9
  %199 = icmp eq ptr %198, null
  br i1 %199, label %205, label %200

200:                                              ; preds = %194
  %201 = load ptr, ptr %9, align 8, !tbaa !9
  %202 = getelementptr inbounds i32, ptr %201, i64 16
  %203 = load i32, ptr %202, align 4, !tbaa !5
  %204 = icmp eq i32 %203, -1
  br i1 %204, label %205, label %206

205:                                              ; preds = %200, %194
  br label %210

206:                                              ; preds = %200
  %207 = load ptr, ptr %9, align 8, !tbaa !9
  %208 = getelementptr inbounds i32, ptr %207, i64 16
  %209 = load i32, ptr %208, align 4, !tbaa !5
  br label %210

210:                                              ; preds = %206, %205
  %211 = phi i32 [ 30, %205 ], [ %209, %206 ]
  %212 = load ptr, ptr %16, align 8, !tbaa !9
  %213 = getelementptr inbounds %struct.ctrl_t, ptr %212, i32 0, i32 12
  store i32 %211, ptr %213, align 8, !tbaa !20
  %214 = load ptr, ptr %9, align 8, !tbaa !9
  %215 = icmp eq ptr %214, null
  br i1 %215, label %221, label %216

216:                                              ; preds = %210
  %217 = load ptr, ptr %9, align 8, !tbaa !9
  %218 = getelementptr inbounds i32, ptr %217, i64 10
  %219 = load i32, ptr %218, align 4, !tbaa !5
  %220 = icmp eq i32 %219, -1
  br i1 %220, label %221, label %222

221:                                              ; preds = %216, %210
  br label %226

222:                                              ; preds = %216
  %223 = load ptr, ptr %9, align 8, !tbaa !9
  %224 = getelementptr inbounds i32, ptr %223, i64 10
  %225 = load i32, ptr %224, align 4, !tbaa !5
  br label %226

226:                                              ; preds = %222, %221
  %227 = phi i32 [ 0, %221 ], [ %225, %222 ]
  %228 = load ptr, ptr %16, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct.ctrl_t, ptr %228, i32 0, i32 9
  store i32 %227, ptr %229, align 4, !tbaa !22
  %230 = load ptr, ptr %9, align 8, !tbaa !9
  %231 = icmp eq ptr %230, null
  br i1 %231, label %237, label %232

232:                                              ; preds = %226
  %233 = load ptr, ptr %9, align 8, !tbaa !9
  %234 = getelementptr inbounds i32, ptr %233, i64 11
  %235 = load i32, ptr %234, align 4, !tbaa !5
  %236 = icmp eq i32 %235, -1
  br i1 %236, label %237, label %238

237:                                              ; preds = %232, %226
  br label %242

238:                                              ; preds = %232
  %239 = load ptr, ptr %9, align 8, !tbaa !9
  %240 = getelementptr inbounds i32, ptr %239, i64 11
  %241 = load i32, ptr %240, align 4, !tbaa !5
  br label %242

242:                                              ; preds = %238, %237
  %243 = phi i32 [ 0, %237 ], [ %241, %238 ]
  %244 = load ptr, ptr %16, align 8, !tbaa !9
  %245 = getelementptr inbounds %struct.ctrl_t, ptr %244, i32 0, i32 10
  store i32 %243, ptr %245, align 8, !tbaa !23
  br label %398

246:                                              ; preds = %6
  %247 = load ptr, ptr %9, align 8, !tbaa !9
  %248 = icmp eq ptr %247, null
  br i1 %248, label %254, label %249

249:                                              ; preds = %246
  %250 = load ptr, ptr %9, align 8, !tbaa !9
  %251 = getelementptr inbounds i32, ptr %250, i64 1
  %252 = load i32, ptr %251, align 4, !tbaa !5
  %253 = icmp eq i32 %252, -1
  br i1 %253, label %254, label %255

254:                                              ; preds = %249, %246
  br label %259

255:                                              ; preds = %249
  %256 = load ptr, ptr %9, align 8, !tbaa !9
  %257 = getelementptr inbounds i32, ptr %256, i64 1
  %258 = load i32, ptr %257, align 4, !tbaa !5
  br label %259

259:                                              ; preds = %255, %254
  %260 = phi i32 [ 2, %254 ], [ %258, %255 ]
  %261 = load ptr, ptr %16, align 8, !tbaa !9
  %262 = getelementptr inbounds %struct.ctrl_t, ptr %261, i32 0, i32 1
  store i32 %260, ptr %262, align 4, !tbaa !11
  %263 = load ptr, ptr %9, align 8, !tbaa !9
  %264 = icmp eq ptr %263, null
  br i1 %264, label %270, label %265

265:                                              ; preds = %259
  %266 = load ptr, ptr %9, align 8, !tbaa !9
  %267 = getelementptr inbounds i32, ptr %266, i64 4
  %268 = load i32, ptr %267, align 4, !tbaa !5
  %269 = icmp eq i32 %268, -1
  br i1 %269, label %270, label %271

270:                                              ; preds = %265, %259
  br label %275

271:                                              ; preds = %265
  %272 = load ptr, ptr %9, align 8, !tbaa !9
  %273 = getelementptr inbounds i32, ptr %272, i64 4
  %274 = load i32, ptr %273, align 4, !tbaa !5
  br label %275

275:                                              ; preds = %271, %270
  %276 = phi i32 [ 3, %270 ], [ %274, %271 ]
  %277 = load ptr, ptr %16, align 8, !tbaa !9
  %278 = getelementptr inbounds %struct.ctrl_t, ptr %277, i32 0, i32 5
  store i32 %276, ptr %278, align 4, !tbaa !16
  %279 = load ptr, ptr %9, align 8, !tbaa !9
  %280 = icmp eq ptr %279, null
  br i1 %280, label %286, label %281

281:                                              ; preds = %275
  %282 = load ptr, ptr %9, align 8, !tbaa !9
  %283 = getelementptr inbounds i32, ptr %282, i64 3
  %284 = load i32, ptr %283, align 4, !tbaa !5
  %285 = icmp eq i32 %284, -1
  br i1 %285, label %286, label %287

286:                                              ; preds = %281, %275
  br label %291

287:                                              ; preds = %281
  %288 = load ptr, ptr %9, align 8, !tbaa !9
  %289 = getelementptr inbounds i32, ptr %288, i64 3
  %290 = load i32, ptr %289, align 4, !tbaa !5
  br label %291

291:                                              ; preds = %287, %286
  %292 = phi i32 [ 2, %286 ], [ %290, %287 ]
  %293 = load ptr, ptr %16, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.ctrl_t, ptr %293, i32 0, i32 4
  store i32 %292, ptr %294, align 8, !tbaa !19
  %295 = load ptr, ptr %9, align 8, !tbaa !9
  %296 = icmp eq ptr %295, null
  br i1 %296, label %302, label %297

297:                                              ; preds = %291
  %298 = load ptr, ptr %9, align 8, !tbaa !9
  %299 = getelementptr inbounds i32, ptr %298, i64 15
  %300 = load i32, ptr %299, align 4, !tbaa !5
  %301 = icmp eq i32 %300, -1
  br i1 %301, label %302, label %303

302:                                              ; preds = %297, %291
  br label %307

303:                                              ; preds = %297
  %304 = load ptr, ptr %9, align 8, !tbaa !9
  %305 = getelementptr inbounds i32, ptr %304, i64 15
  %306 = load i32, ptr %305, align 4, !tbaa !5
  br label %307

307:                                              ; preds = %303, %302
  %308 = phi i32 [ 1, %302 ], [ %306, %303 ]
  %309 = load ptr, ptr %16, align 8, !tbaa !9
  %310 = getelementptr inbounds %struct.ctrl_t, ptr %309, i32 0, i32 11
  store i32 %308, ptr %310, align 4, !tbaa !24
  %311 = load ptr, ptr %9, align 8, !tbaa !9
  %312 = icmp eq ptr %311, null
  br i1 %312, label %318, label %313

313:                                              ; preds = %307
  %314 = load ptr, ptr %9, align 8, !tbaa !9
  %315 = getelementptr inbounds i32, ptr %314, i64 6
  %316 = load i32, ptr %315, align 4, !tbaa !5
  %317 = icmp eq i32 %316, -1
  br i1 %317, label %318, label %319

318:                                              ; preds = %313, %307
  br label %323

319:                                              ; preds = %313
  %320 = load ptr, ptr %9, align 8, !tbaa !9
  %321 = getelementptr inbounds i32, ptr %320, i64 6
  %322 = load i32, ptr %321, align 4, !tbaa !5
  br label %323

323:                                              ; preds = %319, %318
  %324 = phi i32 [ 10, %318 ], [ %322, %319 ]
  %325 = load ptr, ptr %16, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.ctrl_t, ptr %325, i32 0, i32 17
  store i32 %324, ptr %326, align 4, !tbaa !18
  %327 = load ptr, ptr %9, align 8, !tbaa !9
  %328 = icmp eq ptr %327, null
  br i1 %328, label %334, label %329

329:                                              ; preds = %323
  %330 = load ptr, ptr %9, align 8, !tbaa !9
  %331 = getelementptr inbounds i32, ptr %330, i64 16
  %332 = load i32, ptr %331, align 4, !tbaa !5
  %333 = icmp eq i32 %332, -1
  br i1 %333, label %334, label %335

334:                                              ; preds = %329, %323
  br label %339

335:                                              ; preds = %329
  %336 = load ptr, ptr %9, align 8, !tbaa !9
  %337 = getelementptr inbounds i32, ptr %336, i64 16
  %338 = load i32, ptr %337, align 4, !tbaa !5
  br label %339

339:                                              ; preds = %335, %334
  %340 = phi i32 [ 200, %334 ], [ %338, %335 ]
  %341 = load ptr, ptr %16, align 8, !tbaa !9
  %342 = getelementptr inbounds %struct.ctrl_t, ptr %341, i32 0, i32 12
  store i32 %340, ptr %342, align 8, !tbaa !20
  %343 = load ptr, ptr %9, align 8, !tbaa !9
  %344 = icmp eq ptr %343, null
  br i1 %344, label %350, label %345

345:                                              ; preds = %339
  %346 = load ptr, ptr %9, align 8, !tbaa !9
  %347 = getelementptr inbounds i32, ptr %346, i64 12
  %348 = load i32, ptr %347, align 4, !tbaa !5
  %349 = icmp eq i32 %348, -1
  br i1 %349, label %350, label %351

350:                                              ; preds = %345, %339
  br label %355

351:                                              ; preds = %345
  %352 = load ptr, ptr %9, align 8, !tbaa !9
  %353 = getelementptr inbounds i32, ptr %352, i64 12
  %354 = load i32, ptr %353, align 4, !tbaa !5
  br label %355

355:                                              ; preds = %351, %350
  %356 = phi i32 [ 1, %350 ], [ %354, %351 ]
  %357 = load ptr, ptr %16, align 8, !tbaa !9
  %358 = getelementptr inbounds %struct.ctrl_t, ptr %357, i32 0, i32 13
  store i32 %356, ptr %358, align 4, !tbaa !25
  %359 = load ptr, ptr %9, align 8, !tbaa !9
  %360 = icmp eq ptr %359, null
  br i1 %360, label %366, label %361

361:                                              ; preds = %355
  %362 = load ptr, ptr %9, align 8, !tbaa !9
  %363 = getelementptr inbounds i32, ptr %362, i64 13
  %364 = load i32, ptr %363, align 4, !tbaa !5
  %365 = icmp eq i32 %364, -1
  br i1 %365, label %366, label %367

366:                                              ; preds = %361, %355
  br label %371

367:                                              ; preds = %361
  %368 = load ptr, ptr %9, align 8, !tbaa !9
  %369 = getelementptr inbounds i32, ptr %368, i64 13
  %370 = load i32, ptr %369, align 4, !tbaa !5
  br label %371

371:                                              ; preds = %367, %366
  %372 = phi i32 [ 0, %366 ], [ %370, %367 ]
  %373 = load ptr, ptr %16, align 8, !tbaa !9
  %374 = getelementptr inbounds %struct.ctrl_t, ptr %373, i32 0, i32 14
  store i32 %372, ptr %374, align 8, !tbaa !26
  %375 = load ptr, ptr %9, align 8, !tbaa !9
  %376 = icmp eq ptr %375, null
  br i1 %376, label %382, label %377

377:                                              ; preds = %371
  %378 = load ptr, ptr %9, align 8, !tbaa !9
  %379 = getelementptr inbounds i32, ptr %378, i64 14
  %380 = load i32, ptr %379, align 4, !tbaa !5
  %381 = icmp eq i32 %380, -1
  br i1 %381, label %382, label %383

382:                                              ; preds = %377, %371
  br label %387

383:                                              ; preds = %377
  %384 = load ptr, ptr %9, align 8, !tbaa !9
  %385 = getelementptr inbounds i32, ptr %384, i64 14
  %386 = load i32, ptr %385, align 4, !tbaa !5
  br label %387

387:                                              ; preds = %383, %382
  %388 = phi i32 [ 0, %382 ], [ %386, %383 ]
  %389 = sitofp i32 %388 to double
  %390 = fmul double 1.000000e-01, %389
  %391 = fptrunc double %390 to float
  %392 = load ptr, ptr %16, align 8, !tbaa !9
  %393 = getelementptr inbounds %struct.ctrl_t, ptr %392, i32 0, i32 22
  store float %391, ptr %393, align 8, !tbaa !27
  %394 = load ptr, ptr %16, align 8, !tbaa !9
  %395 = getelementptr inbounds %struct.ctrl_t, ptr %394, i32 0, i32 6
  store i32 100, ptr %395, align 8, !tbaa !21
  br label %398

396:                                              ; preds = %6
  %397 = load i32, ptr %8, align 4, !tbaa !5
  call void (i32, ptr, ...) @gk_errexit(i32 noundef 15, ptr noundef @.str.1, i32 noundef %397)
  br label %398

398:                                              ; preds = %396, %387, %242, %144
  %399 = load ptr, ptr %9, align 8, !tbaa !9
  %400 = icmp eq ptr %399, null
  br i1 %400, label %406, label %401

401:                                              ; preds = %398
  %402 = load ptr, ptr %9, align 8, !tbaa !9
  %403 = getelementptr inbounds i32, ptr %402, i64 2
  %404 = load i32, ptr %403, align 4, !tbaa !5
  %405 = icmp eq i32 %404, -1
  br i1 %405, label %406, label %407

406:                                              ; preds = %401, %398
  br label %411

407:                                              ; preds = %401
  %408 = load ptr, ptr %9, align 8, !tbaa !9
  %409 = getelementptr inbounds i32, ptr %408, i64 2
  %410 = load i32, ptr %409, align 4, !tbaa !5
  br label %411

411:                                              ; preds = %407, %406
  %412 = phi i32 [ 1, %406 ], [ %410, %407 ]
  %413 = load ptr, ptr %16, align 8, !tbaa !9
  %414 = getelementptr inbounds %struct.ctrl_t, ptr %413, i32 0, i32 3
  store i32 %412, ptr %414, align 4, !tbaa !28
  %415 = load ptr, ptr %9, align 8, !tbaa !9
  %416 = icmp eq ptr %415, null
  br i1 %416, label %422, label %417

417:                                              ; preds = %411
  %418 = load ptr, ptr %9, align 8, !tbaa !9
  %419 = getelementptr inbounds i32, ptr %418, i64 9
  %420 = load i32, ptr %419, align 4, !tbaa !5
  %421 = icmp eq i32 %420, -1
  br i1 %421, label %422, label %423

422:                                              ; preds = %417, %411
  br label %427

423:                                              ; preds = %417
  %424 = load ptr, ptr %9, align 8, !tbaa !9
  %425 = getelementptr inbounds i32, ptr %424, i64 9
  %426 = load i32, ptr %425, align 4, !tbaa !5
  br label %427

427:                                              ; preds = %423, %422
  %428 = phi i32 [ 0, %422 ], [ %426, %423 ]
  %429 = load ptr, ptr %16, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.ctrl_t, ptr %429, i32 0, i32 8
  store i32 %428, ptr %430, align 8, !tbaa !29
  %431 = load ptr, ptr %9, align 8, !tbaa !9
  %432 = icmp eq ptr %431, null
  br i1 %432, label %438, label %433

433:                                              ; preds = %427
  %434 = load ptr, ptr %9, align 8, !tbaa !9
  %435 = getelementptr inbounds i32, ptr %434, i64 8
  %436 = load i32, ptr %435, align 4, !tbaa !5
  %437 = icmp eq i32 %436, -1
  br i1 %437, label %438, label %439

438:                                              ; preds = %433, %427
  br label %443

439:                                              ; preds = %433
  %440 = load ptr, ptr %9, align 8, !tbaa !9
  %441 = getelementptr inbounds i32, ptr %440, i64 8
  %442 = load i32, ptr %441, align 4, !tbaa !5
  br label %443

443:                                              ; preds = %439, %438
  %444 = phi i32 [ -1, %438 ], [ %442, %439 ]
  %445 = load ptr, ptr %16, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct.ctrl_t, ptr %445, i32 0, i32 15
  store i32 %444, ptr %446, align 4, !tbaa !30
  %447 = load ptr, ptr %9, align 8, !tbaa !9
  %448 = icmp eq ptr %447, null
  br i1 %448, label %454, label %449

449:                                              ; preds = %443
  %450 = load ptr, ptr %9, align 8, !tbaa !9
  %451 = getelementptr inbounds i32, ptr %450, i64 5
  %452 = load i32, ptr %451, align 4, !tbaa !5
  %453 = icmp eq i32 %452, -1
  br i1 %453, label %454, label %455

454:                                              ; preds = %449, %443
  br label %459

455:                                              ; preds = %449
  %456 = load ptr, ptr %9, align 8, !tbaa !9
  %457 = getelementptr inbounds i32, ptr %456, i64 5
  %458 = load i32, ptr %457, align 4, !tbaa !5
  br label %459

459:                                              ; preds = %455, %454
  %460 = phi i32 [ 0, %454 ], [ %458, %455 ]
  %461 = load ptr, ptr %16, align 8, !tbaa !9
  %462 = getelementptr inbounds %struct.ctrl_t, ptr %461, i32 0, i32 2
  store i32 %460, ptr %462, align 8, !tbaa !31
  %463 = load ptr, ptr %9, align 8, !tbaa !9
  %464 = icmp eq ptr %463, null
  br i1 %464, label %470, label %465

465:                                              ; preds = %459
  %466 = load ptr, ptr %9, align 8, !tbaa !9
  %467 = getelementptr inbounds i32, ptr %466, i64 17
  %468 = load i32, ptr %467, align 4, !tbaa !5
  %469 = icmp eq i32 %468, -1
  br i1 %469, label %470, label %471

470:                                              ; preds = %465, %459
  br label %475

471:                                              ; preds = %465
  %472 = load ptr, ptr %9, align 8, !tbaa !9
  %473 = getelementptr inbounds i32, ptr %472, i64 17
  %474 = load i32, ptr %473, align 4, !tbaa !5
  br label %475

475:                                              ; preds = %471, %470
  %476 = phi i32 [ 0, %470 ], [ %474, %471 ]
  %477 = load ptr, ptr %16, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct.ctrl_t, ptr %477, i32 0, i32 18
  store i32 %476, ptr %478, align 8, !tbaa !32
  %479 = load i32, ptr %8, align 4, !tbaa !5
  %480 = load ptr, ptr %16, align 8, !tbaa !9
  %481 = getelementptr inbounds %struct.ctrl_t, ptr %480, i32 0, i32 0
  store i32 %479, ptr %481, align 8, !tbaa !33
  %482 = load i32, ptr %10, align 4, !tbaa !5
  %483 = load ptr, ptr %16, align 8, !tbaa !9
  %484 = getelementptr inbounds %struct.ctrl_t, ptr %483, i32 0, i32 20
  store i32 %482, ptr %484, align 8, !tbaa !34
  %485 = load i32, ptr %11, align 4, !tbaa !5
  %486 = load ptr, ptr %16, align 8, !tbaa !9
  %487 = getelementptr inbounds %struct.ctrl_t, ptr %486, i32 0, i32 21
  store i32 %485, ptr %487, align 4, !tbaa !35
  %488 = load i32, ptr %10, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = call ptr @libmetis__ismalloc(i64 noundef %489, i32 noundef 0, ptr noundef @.str.2)
  %491 = load ptr, ptr %16, align 8, !tbaa !9
  %492 = getelementptr inbounds %struct.ctrl_t, ptr %491, i32 0, i32 19
  store ptr %490, ptr %492, align 8, !tbaa !36
  %493 = load ptr, ptr %16, align 8, !tbaa !9
  %494 = getelementptr inbounds %struct.ctrl_t, ptr %493, i32 0, i32 0
  %495 = load i32, ptr %494, align 8, !tbaa !33
  %496 = icmp ne i32 %495, 2
  br i1 %496, label %497, label %551

497:                                              ; preds = %475
  %498 = load i32, ptr %11, align 4, !tbaa !5
  %499 = load i32, ptr %10, align 4, !tbaa !5
  %500 = mul nsw i32 %498, %499
  %501 = sext i32 %500 to i64
  %502 = call ptr @libmetis__rmalloc(i64 noundef %501, ptr noundef @.str.3)
  %503 = load ptr, ptr %16, align 8, !tbaa !9
  %504 = getelementptr inbounds %struct.ctrl_t, ptr %503, i32 0, i32 24
  store ptr %502, ptr %504, align 8, !tbaa !37
  %505 = load ptr, ptr %12, align 8, !tbaa !9
  %506 = icmp ne ptr %505, null
  br i1 %506, label %507, label %517

507:                                              ; preds = %497
  %508 = load i32, ptr %11, align 4, !tbaa !5
  %509 = load i32, ptr %10, align 4, !tbaa !5
  %510 = mul nsw i32 %508, %509
  %511 = sext i32 %510 to i64
  %512 = load ptr, ptr %12, align 8, !tbaa !9
  %513 = load ptr, ptr %16, align 8, !tbaa !9
  %514 = getelementptr inbounds %struct.ctrl_t, ptr %513, i32 0, i32 24
  %515 = load ptr, ptr %514, align 8, !tbaa !37
  %516 = call ptr @libmetis__rcopy(i64 noundef %511, ptr noundef %512, ptr noundef %515)
  br label %550

517:                                              ; preds = %497
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %518

518:                                              ; preds = %546, %517
  %519 = load i32, ptr %14, align 4, !tbaa !5
  %520 = load i32, ptr %11, align 4, !tbaa !5
  %521 = icmp slt i32 %519, %520
  br i1 %521, label %522, label %549

522:                                              ; preds = %518
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %523

523:                                              ; preds = %542, %522
  %524 = load i32, ptr %15, align 4, !tbaa !5
  %525 = load i32, ptr %10, align 4, !tbaa !5
  %526 = icmp slt i32 %524, %525
  br i1 %526, label %527, label %545

527:                                              ; preds = %523
  %528 = load i32, ptr %11, align 4, !tbaa !5
  %529 = sitofp i32 %528 to double
  %530 = fdiv double 1.000000e+00, %529
  %531 = fptrunc double %530 to float
  %532 = load ptr, ptr %16, align 8, !tbaa !9
  %533 = getelementptr inbounds %struct.ctrl_t, ptr %532, i32 0, i32 24
  %534 = load ptr, ptr %533, align 8, !tbaa !37
  %535 = load i32, ptr %14, align 4, !tbaa !5
  %536 = load i32, ptr %10, align 4, !tbaa !5
  %537 = mul nsw i32 %535, %536
  %538 = load i32, ptr %15, align 4, !tbaa !5
  %539 = add nsw i32 %537, %538
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds float, ptr %534, i64 %540
  store float %531, ptr %541, align 4, !tbaa !38
  br label %542

542:                                              ; preds = %527
  %543 = load i32, ptr %15, align 4, !tbaa !5
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %15, align 4, !tbaa !5
  br label %523, !llvm.loop !39

545:                                              ; preds = %523
  br label %546

546:                                              ; preds = %545
  %547 = load i32, ptr %14, align 4, !tbaa !5
  %548 = add nsw i32 %547, 1
  store i32 %548, ptr %14, align 4, !tbaa !5
  br label %518, !llvm.loop !41

549:                                              ; preds = %518
  br label %550

550:                                              ; preds = %549, %507
  br label %555

551:                                              ; preds = %475
  %552 = call ptr @libmetis__rsmalloc(i64 noundef 2, float noundef 5.000000e-01, ptr noundef @.str.3)
  %553 = load ptr, ptr %16, align 8, !tbaa !9
  %554 = getelementptr inbounds %struct.ctrl_t, ptr %553, i32 0, i32 24
  store ptr %552, ptr %554, align 8, !tbaa !37
  br label %555

555:                                              ; preds = %551, %550
  %556 = load ptr, ptr %16, align 8, !tbaa !9
  %557 = getelementptr inbounds %struct.ctrl_t, ptr %556, i32 0, i32 20
  %558 = load i32, ptr %557, align 8, !tbaa !34
  %559 = sext i32 %558 to i64
  %560 = load ptr, ptr %16, align 8, !tbaa !9
  %561 = getelementptr inbounds %struct.ctrl_t, ptr %560, i32 0, i32 12
  %562 = load i32, ptr %561, align 8, !tbaa !20
  %563 = sitofp i32 %562 to double
  %564 = call double @llvm.fmuladd.f64(double 1.000000e-03, double %563, double 1.000000e+00)
  %565 = fptrunc double %564 to float
  %566 = call ptr @libmetis__rsmalloc(i64 noundef %559, float noundef %565, ptr noundef @.str.4)
  %567 = load ptr, ptr %16, align 8, !tbaa !9
  %568 = getelementptr inbounds %struct.ctrl_t, ptr %567, i32 0, i32 23
  store ptr %566, ptr %568, align 8, !tbaa !42
  %569 = load ptr, ptr %13, align 8, !tbaa !9
  %570 = icmp ne ptr %569, null
  br i1 %570, label %571, label %581

571:                                              ; preds = %555
  %572 = load ptr, ptr %16, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct.ctrl_t, ptr %572, i32 0, i32 20
  %574 = load i32, ptr %573, align 8, !tbaa !34
  %575 = sext i32 %574 to i64
  %576 = load ptr, ptr %13, align 8, !tbaa !9
  %577 = load ptr, ptr %16, align 8, !tbaa !9
  %578 = getelementptr inbounds %struct.ctrl_t, ptr %577, i32 0, i32 23
  %579 = load ptr, ptr %578, align 8, !tbaa !42
  %580 = call ptr @libmetis__rcopy(i64 noundef %575, ptr noundef %576, ptr noundef %579)
  br label %581

581:                                              ; preds = %571, %555
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %582

582:                                              ; preds = %599, %581
  %583 = load i32, ptr %14, align 4, !tbaa !5
  %584 = load ptr, ptr %16, align 8, !tbaa !9
  %585 = getelementptr inbounds %struct.ctrl_t, ptr %584, i32 0, i32 20
  %586 = load i32, ptr %585, align 8, !tbaa !34
  %587 = icmp slt i32 %583, %586
  br i1 %587, label %588, label %602

588:                                              ; preds = %582
  %589 = load ptr, ptr %16, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.ctrl_t, ptr %589, i32 0, i32 23
  %591 = load ptr, ptr %590, align 8, !tbaa !42
  %592 = load i32, ptr %14, align 4, !tbaa !5
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds float, ptr %591, i64 %593
  %595 = load float, ptr %594, align 4, !tbaa !38
  %596 = fpext float %595 to double
  %597 = fadd double %596, 4.990000e-05
  %598 = fptrunc double %597 to float
  store float %598, ptr %594, align 4, !tbaa !38
  br label %599

599:                                              ; preds = %588
  %600 = load i32, ptr %14, align 4, !tbaa !5
  %601 = add nsw i32 %600, 1
  store i32 %601, ptr %14, align 4, !tbaa !5
  br label %582, !llvm.loop !43

602:                                              ; preds = %582
  %603 = load i32, ptr %11, align 4, !tbaa !5
  %604 = load i32, ptr %10, align 4, !tbaa !5
  %605 = mul nsw i32 %603, %604
  %606 = sext i32 %605 to i64
  %607 = call ptr @libmetis__rmalloc(i64 noundef %606, ptr noundef @.str.5)
  %608 = load ptr, ptr %16, align 8, !tbaa !9
  %609 = getelementptr inbounds %struct.ctrl_t, ptr %608, i32 0, i32 25
  store ptr %607, ptr %609, align 8, !tbaa !44
  %610 = load ptr, ptr %16, align 8, !tbaa !9
  %611 = getelementptr inbounds %struct.ctrl_t, ptr %610, i32 0, i32 15
  %612 = load i32, ptr %611, align 4, !tbaa !30
  call void @libmetis__InitRandom(i32 noundef %612)
  %613 = load ptr, ptr %16, align 8, !tbaa !9
  %614 = getelementptr inbounds %struct.ctrl_t, ptr %613, i32 0, i32 2
  %615 = load i32, ptr %614, align 8, !tbaa !31
  %616 = and i32 %615, 1
  %617 = icmp ne i32 %616, 0
  br i1 %617, label %618, label %620

618:                                              ; preds = %602
  %619 = load ptr, ptr %16, align 8, !tbaa !9
  call void @libmetis__PrintCtrl(ptr noundef %619)
  br label %620

620:                                              ; preds = %618, %602
  %621 = load ptr, ptr %16, align 8, !tbaa !9
  %622 = call i32 @libmetis__CheckParams(ptr noundef %621)
  %623 = icmp ne i32 %622, 0
  br i1 %623, label %625, label %624

624:                                              ; preds = %620
  call void @libmetis__FreeCtrl(ptr noundef %16)
  store ptr null, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %627

625:                                              ; preds = %620
  %626 = load ptr, ptr %16, align 8, !tbaa !9
  store ptr %626, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %627

627:                                              ; preds = %625, %624
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  %628 = load ptr, ptr %7, align 8
  ret ptr %628
}

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

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

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

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

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

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

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

declare ptr @libmetis__rsmalloc(i64 noundef, float noundef, ptr noundef) #2

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

declare void @libmetis__InitRandom(i32 noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libmetis__CheckParams(ptr noundef) #0

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

; 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 nounwind willreturn memory(argmem: write) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 4}
!12 = !{!"ctrl_t", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !10, i64 80, !6, i64 88, !6, i64 92, !13, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !13, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !14, i64 224, !10, i64 232, !15, i64 240, !15, i64 248, !15, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320}
!13 = !{!"float", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!12, !6, i64 20}
!17 = !{!12, !6, i64 64}
!18 = !{!12, !6, i64 68}
!19 = !{!12, !6, i64 16}
!20 = !{!12, !6, i64 48}
!21 = !{!12, !6, i64 24}
!22 = !{!12, !6, i64 36}
!23 = !{!12, !6, i64 40}
!24 = !{!12, !6, i64 44}
!25 = !{!12, !6, i64 52}
!26 = !{!12, !6, i64 56}
!27 = !{!12, !13, i64 96}
!28 = !{!12, !6, i64 12}
!29 = !{!12, !6, i64 32}
!30 = !{!12, !6, i64 60}
!31 = !{!12, !6, i64 8}
!32 = !{!12, !6, i64 72}
!33 = !{!12, !6, i64 0}
!34 = !{!12, !6, i64 88}
!35 = !{!12, !6, i64 92}
!36 = !{!12, !10, i64 80}
!37 = !{!12, !10, i64 112}
!38 = !{!13, !13, i64 0}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = !{!12, !10, i64 104}
!43 = distinct !{!43, !40}
!44 = !{!12, !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"

@.str = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef ptr @libmetis__SetupCtrl(i32 noundef %0, ptr noundef readonly %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #0 {
  %7 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  %8 = tail call ptr @gk_malloc(i64 noundef 328, ptr noundef nonnull @.str) #5
  store ptr %8, ptr %7, align 8, !tbaa !5
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(328) %8, i8 0, i64 328, i1 false)
  switch i32 %0, label %134 [
    i32 0, label %9
    i32 1, label %47
    i32 2, label %84
  ]

9:                                                ; preds = %6
  %10 = icmp eq ptr %1, null
  br i1 %10, label %11, label %.thread216

11:                                               ; preds = %9
  %12 = getelementptr inbounds i8, ptr %8, i64 64
  store i32 1, ptr %12, align 8, !tbaa !9
  %13 = getelementptr inbounds i8, ptr %8, i64 68
  store i32 10, ptr %13, align 4, !tbaa !15
  %14 = icmp eq i32 %2, 1
  %15 = getelementptr inbounds i8, ptr %8, i64 16
  br i1 %14, label %.critedge156, label %.critedge160

.thread216:                                       ; preds = %9
  %16 = getelementptr inbounds i8, ptr %1, i64 4
  %17 = load i32, ptr %16, align 4, !tbaa !16
  %18 = icmp eq i32 %17, -1
  %spec.select = select i1 %18, i32 0, i32 %17
  %19 = getelementptr inbounds i8, ptr %8, i64 4
  store i32 %spec.select, ptr %19, align 4, !tbaa !17
  %20 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 0, ptr %20, align 4, !tbaa !18
  %21 = getelementptr inbounds i8, ptr %1, i64 28
  %22 = load i32, ptr %21, align 4, !tbaa !16
  %23 = icmp eq i32 %22, -1
  %spec.select150 = select i1 %23, i32 1, i32 %22
  %24 = getelementptr inbounds i8, ptr %8, i64 64
  store i32 %spec.select150, ptr %24, align 8, !tbaa !9
  %25 = getelementptr inbounds i8, ptr %1, i64 24
  %26 = load i32, ptr %25, align 4, !tbaa !16
  %27 = icmp eq i32 %26, -1
  %spec.select153 = select i1 %27, i32 10, i32 %26
  %28 = getelementptr inbounds i8, ptr %8, i64 68
  store i32 %spec.select153, ptr %28, align 4, !tbaa !15
  %29 = icmp eq i32 %2, 1
  %30 = getelementptr inbounds i8, ptr %1, i64 12
  %31 = load i32, ptr %30, align 4, !tbaa !16
  %32 = icmp eq i32 %31, -1
  %33 = getelementptr inbounds i8, ptr %8, i64 16
  %34 = getelementptr inbounds i8, ptr %1, i64 64
  br i1 %29, label %.thread217, label %.thread218

.thread217:                                       ; preds = %.thread216
  %spec.select154 = select i1 %32, i32 0, i32 %31
  store i32 %spec.select154, ptr %33, align 8, !tbaa !19
  %35 = load i32, ptr %34, align 4, !tbaa !16
  %36 = icmp eq i32 %35, -1
  %spec.select157 = select i1 %36, i32 1, i32 %35
  br label %37

.critedge156:                                     ; preds = %11
  store i32 0, ptr %15, align 8, !tbaa !19
  br label %37

37:                                               ; preds = %.thread217, %.critedge156
  %38 = phi i32 [ 1, %.critedge156 ], [ %spec.select157, %.thread217 ]
  %39 = getelementptr inbounds i8, ptr %8, i64 48
  store i32 %38, ptr %39, align 8, !tbaa !20
  %40 = getelementptr inbounds i8, ptr %8, i64 24
  store i32 20, ptr %40, align 8, !tbaa !21
  br label %135

.thread218:                                       ; preds = %.thread216
  %spec.select158 = select i1 %32, i32 1, i32 %31
  store i32 %spec.select158, ptr %33, align 8, !tbaa !19
  %41 = load i32, ptr %34, align 4, !tbaa !16
  %42 = icmp eq i32 %41, -1
  %spec.select161 = select i1 %42, i32 10, i32 %41
  br label %43

.critedge160:                                     ; preds = %11
  store i32 1, ptr %15, align 8, !tbaa !19
  br label %43

43:                                               ; preds = %.thread218, %.critedge160
  %44 = phi i32 [ 10, %.critedge160 ], [ %spec.select161, %.thread218 ]
  %45 = getelementptr inbounds i8, ptr %8, i64 48
  store i32 %44, ptr %45, align 8, !tbaa !20
  %46 = getelementptr inbounds i8, ptr %8, i64 24
  store i32 100, ptr %46, align 8, !tbaa !21
  br label %135

47:                                               ; preds = %6
  %48 = icmp eq ptr %1, null
  br i1 %48, label %.critedge176, label %49

49:                                               ; preds = %47
  %50 = getelementptr inbounds i8, ptr %1, i64 4
  %51 = load i32, ptr %50, align 4, !tbaa !16
  %52 = icmp eq i32 %51, -1
  %spec.select162 = select i1 %52, i32 0, i32 %51
  %53 = getelementptr inbounds i8, ptr %8, i64 4
  store i32 %spec.select162, ptr %53, align 4, !tbaa !17
  %54 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 4, ptr %54, align 8, !tbaa !19
  %55 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 1, ptr %55, align 4, !tbaa !18
  %56 = getelementptr inbounds i8, ptr %1, i64 28
  %57 = load i32, ptr %56, align 4, !tbaa !16
  %58 = icmp eq i32 %57, -1
  %spec.select165 = select i1 %58, i32 1, i32 %57
  %59 = getelementptr inbounds i8, ptr %8, i64 64
  store i32 %spec.select165, ptr %59, align 8, !tbaa !9
  %60 = getelementptr inbounds i8, ptr %1, i64 24
  %61 = load i32, ptr %60, align 4, !tbaa !16
  %62 = icmp eq i32 %61, -1
  %spec.select168 = select i1 %62, i32 10, i32 %61
  %63 = getelementptr inbounds i8, ptr %8, i64 68
  store i32 %spec.select168, ptr %63, align 4, !tbaa !15
  %64 = getelementptr inbounds i8, ptr %1, i64 64
  %65 = load i32, ptr %64, align 4, !tbaa !16
  %66 = icmp eq i32 %65, -1
  %spec.select171 = select i1 %66, i32 30, i32 %65
  %67 = getelementptr inbounds i8, ptr %8, i64 48
  store i32 %spec.select171, ptr %67, align 8, !tbaa !20
  %68 = getelementptr inbounds i8, ptr %1, i64 40
  %69 = load i32, ptr %68, align 4, !tbaa !16
  %70 = icmp eq i32 %69, -1
  %spec.select174 = select i1 %70, i32 0, i32 %69
  %71 = getelementptr inbounds i8, ptr %8, i64 36
  store i32 %spec.select174, ptr %71, align 4, !tbaa !22
  %72 = getelementptr inbounds i8, ptr %1, i64 44
  %73 = load i32, ptr %72, align 4, !tbaa !16
  %74 = icmp eq i32 %73, -1
  %spec.select177 = select i1 %74, i32 0, i32 %73
  br label %81

.critedge176:                                     ; preds = %47
  %75 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 4, ptr %75, align 8, !tbaa !19
  %76 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 1, ptr %76, align 4, !tbaa !18
  %77 = getelementptr inbounds i8, ptr %8, i64 64
  store i32 1, ptr %77, align 8, !tbaa !9
  %78 = getelementptr inbounds i8, ptr %8, i64 68
  store i32 10, ptr %78, align 4, !tbaa !15
  %79 = getelementptr inbounds i8, ptr %8, i64 48
  store i32 30, ptr %79, align 8, !tbaa !20
  %80 = getelementptr inbounds i8, ptr %8, i64 36
  store i32 0, ptr %80, align 4, !tbaa !22
  br label %81

81:                                               ; preds = %49, %.critedge176
  %82 = phi i32 [ 0, %.critedge176 ], [ %spec.select177, %49 ]
  %83 = getelementptr inbounds i8, ptr %8, i64 40
  store i32 %82, ptr %83, align 8, !tbaa !23
  br label %135

84:                                               ; preds = %6
  %85 = icmp eq ptr %1, null
  br i1 %85, label %.thread224, label %91

.thread224:                                       ; preds = %84
  %86 = getelementptr inbounds i8, ptr %8, i64 4
  store i32 2, ptr %86, align 4, !tbaa !17
  %87 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 3, ptr %87, align 4, !tbaa !18
  %88 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 2, ptr %88, align 8, !tbaa !19
  %89 = getelementptr inbounds i8, ptr %8, i64 44
  %90 = getelementptr inbounds i8, ptr %8, i64 68
  store i32 10, ptr %90, align 4, !tbaa !15
  store <4 x i32> <i32 1, i32 200, i32 1, i32 0>, ptr %89, align 4, !tbaa !16
  br label %130

91:                                               ; preds = %84
  %92 = getelementptr inbounds i8, ptr %1, i64 4
  %93 = load i32, ptr %92, align 4, !tbaa !16
  %94 = icmp eq i32 %93, -1
  %spec.select178 = select i1 %94, i32 2, i32 %93
  %95 = getelementptr inbounds i8, ptr %8, i64 4
  store i32 %spec.select178, ptr %95, align 4, !tbaa !17
  %96 = getelementptr inbounds i8, ptr %1, i64 16
  %97 = load i32, ptr %96, align 4, !tbaa !16
  %98 = icmp eq i32 %97, -1
  %spec.select181 = select i1 %98, i32 3, i32 %97
  %99 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 %spec.select181, ptr %99, align 4, !tbaa !18
  %100 = getelementptr inbounds i8, ptr %1, i64 12
  %101 = load i32, ptr %100, align 4, !tbaa !16
  %102 = icmp eq i32 %101, -1
  %spec.select184 = select i1 %102, i32 2, i32 %101
  %103 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 %spec.select184, ptr %103, align 8, !tbaa !19
  %104 = getelementptr inbounds i8, ptr %1, i64 60
  %105 = load i32, ptr %104, align 4, !tbaa !16
  %106 = icmp eq i32 %105, -1
  %spec.select187 = select i1 %106, i32 1, i32 %105
  %107 = getelementptr inbounds i8, ptr %8, i64 44
  store i32 %spec.select187, ptr %107, align 4, !tbaa !24
  %108 = getelementptr inbounds i8, ptr %1, i64 24
  %109 = load i32, ptr %108, align 4, !tbaa !16
  %110 = icmp eq i32 %109, -1
  %spec.select190 = select i1 %110, i32 10, i32 %109
  %111 = getelementptr inbounds i8, ptr %8, i64 68
  store i32 %spec.select190, ptr %111, align 4, !tbaa !15
  %112 = getelementptr inbounds i8, ptr %1, i64 64
  %113 = load i32, ptr %112, align 4, !tbaa !16
  %114 = icmp eq i32 %113, -1
  %spec.select193 = select i1 %114, i32 200, i32 %113
  %115 = getelementptr inbounds i8, ptr %8, i64 48
  store i32 %spec.select193, ptr %115, align 8, !tbaa !20
  %116 = getelementptr inbounds i8, ptr %1, i64 48
  %117 = load i32, ptr %116, align 4, !tbaa !16
  %118 = icmp eq i32 %117, -1
  %spec.select196 = select i1 %118, i32 1, i32 %117
  %119 = getelementptr inbounds i8, ptr %8, i64 52
  store i32 %spec.select196, ptr %119, align 4, !tbaa !25
  %120 = getelementptr inbounds i8, ptr %1, i64 52
  %121 = load i32, ptr %120, align 4, !tbaa !16
  %122 = icmp eq i32 %121, -1
  %spec.select199 = select i1 %122, i32 0, i32 %121
  %123 = getelementptr inbounds i8, ptr %8, i64 56
  store i32 %spec.select199, ptr %123, align 8, !tbaa !26
  %124 = getelementptr inbounds i8, ptr %1, i64 56
  %125 = load i32, ptr %124, align 4, !tbaa !16
  %126 = icmp eq i32 %125, -1
  %spec.select202 = select i1 %126, i32 0, i32 %125
  %127 = sitofp i32 %spec.select202 to double
  %128 = fmul double %127, 1.000000e-01
  %129 = fptrunc double %128 to float
  br label %130

130:                                              ; preds = %.thread224, %91
  %131 = phi float [ %129, %91 ], [ 0.000000e+00, %.thread224 ]
  %132 = getelementptr inbounds i8, ptr %8, i64 96
  store float %131, ptr %132, align 8, !tbaa !27
  %133 = getelementptr inbounds i8, ptr %8, i64 24
  store i32 100, ptr %133, align 8, !tbaa !21
  br label %135

134:                                              ; preds = %6
  tail call void (i32, ptr, ...) @gk_errexit(i32 noundef 15, ptr noundef nonnull @.str.1, i32 noundef %0) #5
  br label %135

135:                                              ; preds = %37, %43, %134, %130, %81
  %136 = icmp eq ptr %1, null
  br i1 %136, label %.thread226, label %141

.thread226:                                       ; preds = %135
  %137 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 1, ptr %137, align 4, !tbaa !28
  %138 = getelementptr inbounds i8, ptr %8, i64 32
  store i32 0, ptr %138, align 8, !tbaa !29
  %139 = getelementptr inbounds i8, ptr %8, i64 60
  store i32 -1, ptr %139, align 4, !tbaa !30
  %140 = getelementptr inbounds i8, ptr %8, i64 8
  store i32 0, ptr %140, align 8, !tbaa !31
  br label %160

141:                                              ; preds = %135
  %142 = getelementptr inbounds i8, ptr %1, i64 8
  %143 = load i32, ptr %142, align 4, !tbaa !16
  %144 = icmp eq i32 %143, -1
  %spec.select203 = select i1 %144, i32 1, i32 %143
  %145 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %spec.select203, ptr %145, align 4, !tbaa !28
  %146 = getelementptr inbounds i8, ptr %1, i64 36
  %147 = load i32, ptr %146, align 4, !tbaa !16
  %148 = icmp eq i32 %147, -1
  %spec.select206 = select i1 %148, i32 0, i32 %147
  %149 = getelementptr inbounds i8, ptr %8, i64 32
  store i32 %spec.select206, ptr %149, align 8, !tbaa !29
  %150 = getelementptr inbounds i8, ptr %1, i64 32
  %151 = load i32, ptr %150, align 4, !tbaa !16
  %152 = getelementptr inbounds i8, ptr %8, i64 60
  store i32 %151, ptr %152, align 4, !tbaa !30
  %153 = getelementptr inbounds i8, ptr %1, i64 20
  %154 = load i32, ptr %153, align 4, !tbaa !16
  %155 = icmp eq i32 %154, -1
  %spec.select212 = select i1 %155, i32 0, i32 %154
  %156 = getelementptr inbounds i8, ptr %8, i64 8
  store i32 %spec.select212, ptr %156, align 8, !tbaa !31
  %157 = getelementptr inbounds i8, ptr %1, i64 68
  %158 = load i32, ptr %157, align 4, !tbaa !16
  %159 = icmp eq i32 %158, -1
  %spec.select215 = select i1 %159, i32 0, i32 %158
  br label %160

160:                                              ; preds = %.thread226, %141
  %161 = phi i32 [ %spec.select215, %141 ], [ 0, %.thread226 ]
  %162 = getelementptr inbounds i8, ptr %8, i64 72
  store i32 %161, ptr %162, align 8, !tbaa !32
  store i32 %0, ptr %8, align 8, !tbaa !33
  %163 = getelementptr inbounds i8, ptr %8, i64 88
  store i32 %2, ptr %163, align 8, !tbaa !34
  %164 = getelementptr inbounds i8, ptr %8, i64 92
  store i32 %3, ptr %164, align 4, !tbaa !35
  %165 = sext i32 %2 to i64
  %166 = tail call ptr @libmetis__ismalloc(i64 noundef %165, i32 noundef 0, ptr noundef nonnull @.str.2) #5
  %167 = getelementptr inbounds i8, ptr %8, i64 80
  store ptr %166, ptr %167, align 8, !tbaa !36
  %168 = load i32, ptr %8, align 8, !tbaa !33
  %.not = icmp eq i32 %168, 2
  br i1 %.not, label %186, label %169

169:                                              ; preds = %160
  %170 = mul nsw i32 %3, %2
  %171 = sext i32 %170 to i64
  %172 = tail call ptr @libmetis__rmalloc(i64 noundef %171, ptr noundef nonnull @.str.3) #5
  %173 = getelementptr inbounds i8, ptr %8, i64 112
  store ptr %172, ptr %173, align 8, !tbaa !37
  %.not146 = icmp eq ptr %4, null
  br i1 %.not146, label %.preheader227, label %184

.preheader227:                                    ; preds = %169
  %174 = icmp sgt i32 %3, 0
  br i1 %174, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.preheader227
  %175 = icmp sgt i32 %2, 0
  %176 = uitofp nneg i32 %3 to double
  %177 = fdiv double 1.000000e+00, %176
  %178 = fptrunc double %177 to float
  br i1 %175, label %.preheader.us.preheader, label %.loopexit

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %179 = zext nneg i32 %2 to i64
  %wide.trip.count236 = zext nneg i32 %3 to i64
  %min.iters.check = icmp ult i32 %2, 8
  %n.vec = and i64 %179, 2147483640
  %broadcast.splatinsert = insertelement <4 x float> poison, float %178, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %n.vec, %179
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us
  %indvars.iv233 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next234, %._crit_edge.us ]
  %180 = mul nuw nsw i64 %indvars.iv233, %179
  %invariant.gep = getelementptr inbounds float, ptr %172, i64 %180
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader.us ]
  %181 = getelementptr inbounds float, ptr %invariant.gep, i64 %index
  %182 = getelementptr inbounds i8, ptr %181, i64 16
  store <4 x float> %broadcast.splat, ptr %181, align 4, !tbaa !38
  store <4 x float> %broadcast.splat, ptr %182, align 4, !tbaa !38
  %index.next = add nuw i64 %index, 8
  %183 = icmp eq i64 %index.next, %n.vec
  br i1 %183, label %middle.block, label %vector.body, !llvm.loop !39

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

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv
  store float %178, ptr %gep, align 4, !tbaa !38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %179
  br i1 %exitcond.not, label %._crit_edge.us, label %scalar.ph, !llvm.loop !43

._crit_edge.us:                                   ; preds = %scalar.ph, %middle.block
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %exitcond237.not = icmp eq i64 %indvars.iv.next234, %wide.trip.count236
  br i1 %exitcond237.not, label %.loopexit, label %.preheader.us, !llvm.loop !44

184:                                              ; preds = %169
  %185 = tail call ptr @libmetis__rcopy(i64 noundef %171, ptr noundef nonnull %4, ptr noundef %172) #5
  br label %.loopexit

186:                                              ; preds = %160
  %187 = tail call ptr @libmetis__rsmalloc(i64 noundef 2, float noundef 5.000000e-01, ptr noundef nonnull @.str.3) #5
  %188 = getelementptr inbounds i8, ptr %8, i64 112
  store ptr %187, ptr %188, align 8, !tbaa !37
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge.us, %.preheader.lr.ph, %.preheader227, %184, %186
  %189 = load i32, ptr %163, align 8, !tbaa !34
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i8, ptr %8, i64 48
  %192 = load i32, ptr %191, align 8, !tbaa !20
  %193 = sitofp i32 %192 to double
  %194 = tail call double @llvm.fmuladd.f64(double %193, double 1.000000e-03, double 1.000000e+00)
  %195 = fptrunc double %194 to float
  %196 = tail call ptr @libmetis__rsmalloc(i64 noundef %190, float noundef %195, ptr noundef nonnull @.str.4) #5
  %197 = getelementptr inbounds i8, ptr %8, i64 104
  store ptr %196, ptr %197, align 8, !tbaa !45
  %.not147 = icmp eq ptr %5, null
  br i1 %.not147, label %202, label %198

198:                                              ; preds = %.loopexit
  %199 = load i32, ptr %163, align 8, !tbaa !34
  %200 = sext i32 %199 to i64
  %201 = tail call ptr @libmetis__rcopy(i64 noundef %200, ptr noundef nonnull %5, ptr noundef %196) #5
  br label %202

202:                                              ; preds = %198, %.loopexit
  %203 = load i32, ptr %163, align 8, !tbaa !34
  %204 = icmp sgt i32 %203, 0
  br i1 %204, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %202
  %205 = load ptr, ptr %197, align 8, !tbaa !45
  %wide.trip.count241 = zext nneg i32 %203 to i64
  %min.iters.check245 = icmp ult i32 %203, 8
  br i1 %min.iters.check245, label %scalar.ph244.preheader, label %vector.ph246

vector.ph246:                                     ; preds = %.lr.ph
  %n.vec248 = and i64 %wide.trip.count241, 2147483640
  br label %vector.body250

vector.body250:                                   ; preds = %vector.body250, %vector.ph246
  %index251 = phi i64 [ 0, %vector.ph246 ], [ %index.next253, %vector.body250 ]
  %206 = getelementptr inbounds float, ptr %205, i64 %index251
  %207 = getelementptr inbounds i8, ptr %206, i64 16
  %wide.load = load <4 x float>, ptr %206, align 4, !tbaa !38
  %wide.load252 = load <4 x float>, ptr %207, align 4, !tbaa !38
  %208 = fpext <4 x float> %wide.load to <4 x double>
  %209 = fpext <4 x float> %wide.load252 to <4 x double>
  %210 = fadd <4 x double> %208, <double 4.990000e-05, double 4.990000e-05, double 4.990000e-05, double 4.990000e-05>
  %211 = fadd <4 x double> %209, <double 4.990000e-05, double 4.990000e-05, double 4.990000e-05, double 4.990000e-05>
  %212 = fptrunc <4 x double> %210 to <4 x float>
  %213 = fptrunc <4 x double> %211 to <4 x float>
  store <4 x float> %212, ptr %206, align 4, !tbaa !38
  store <4 x float> %213, ptr %207, align 4, !tbaa !38
  %index.next253 = add nuw i64 %index251, 8
  %214 = icmp eq i64 %index.next253, %n.vec248
  br i1 %214, label %middle.block243, label %vector.body250, !llvm.loop !46

middle.block243:                                  ; preds = %vector.body250
  %cmp.n254 = icmp eq i64 %n.vec248, %wide.trip.count241
  br i1 %cmp.n254, label %._crit_edge, label %scalar.ph244.preheader

scalar.ph244.preheader:                           ; preds = %middle.block243, %.lr.ph
  %indvars.iv238.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec248, %middle.block243 ]
  br label %scalar.ph244

scalar.ph244:                                     ; preds = %scalar.ph244.preheader, %scalar.ph244
  %indvars.iv238 = phi i64 [ %indvars.iv.next239, %scalar.ph244 ], [ %indvars.iv238.ph, %scalar.ph244.preheader ]
  %215 = getelementptr inbounds float, ptr %205, i64 %indvars.iv238
  %216 = load float, ptr %215, align 4, !tbaa !38
  %217 = fpext float %216 to double
  %218 = fadd double %217, 4.990000e-05
  %219 = fptrunc double %218 to float
  store float %219, ptr %215, align 4, !tbaa !38
  %indvars.iv.next239 = add nuw nsw i64 %indvars.iv238, 1
  %exitcond242.not = icmp eq i64 %indvars.iv.next239, %wide.trip.count241
  br i1 %exitcond242.not, label %._crit_edge, label %scalar.ph244, !llvm.loop !47

._crit_edge:                                      ; preds = %scalar.ph244, %middle.block243, %202
  %220 = mul nsw i32 %3, %2
  %221 = sext i32 %220 to i64
  %222 = tail call ptr @libmetis__rmalloc(i64 noundef %221, ptr noundef nonnull @.str.5) #5
  %223 = getelementptr inbounds i8, ptr %8, i64 120
  store ptr %222, ptr %223, align 8, !tbaa !48
  %224 = getelementptr inbounds i8, ptr %8, i64 60
  %225 = load i32, ptr %224, align 4, !tbaa !30
  tail call void @libmetis__InitRandom(i32 noundef %225) #5
  %226 = getelementptr inbounds i8, ptr %8, i64 8
  %227 = load i32, ptr %226, align 8, !tbaa !31
  %228 = and i32 %227, 1
  %.not148 = icmp eq i32 %228, 0
  br i1 %.not148, label %230, label %229

229:                                              ; preds = %._crit_edge
  tail call void @libmetis__PrintCtrl(ptr noundef nonnull %8)
  br label %230

230:                                              ; preds = %229, %._crit_edge
  %231 = tail call i32 @libmetis__CheckParams(ptr noundef nonnull %8)
  %.not149 = icmp eq i32 %231, 0
  br i1 %.not149, label %232, label %233

232:                                              ; preds = %230
  call void @libmetis__FreeCtrl(ptr noundef nonnull %7)
  br label %233

233:                                              ; preds = %230, %232
  %.0112 = phi ptr [ null, %232 ], [ %8, %230 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  ret ptr %.0112
}

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

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

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

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

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

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

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

declare ptr @libmetis__rsmalloc(i64 noundef, float noundef, ptr noundef) local_unnamed_addr #2

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

declare void @libmetis__InitRandom(i32 noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libmetis__CheckParams(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress 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 = { 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 nounwind willreturn memory(argmem: write) }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

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


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