; 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.51 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [31 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local i32 @libmetis__CheckParams(ptr noundef %0) #1 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca float, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  store i32 1, ptr %7, align 4, !tbaa !9
  %9 = load ptr, ptr %3, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.ctrl_t, ptr %9, i32 0, i32 0
  %11 = load i32, ptr %10, align 8, !tbaa !11
  switch i32 %11, label %775 [
    i32 0, label %12
    i32 1, label %268
    i32 2, label %558
  ]

12:                                               ; preds = %1
  %13 = load ptr, ptr %3, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.ctrl_t, ptr %13, i32 0, i32 1
  %15 = load i32, ptr %14, align 4, !tbaa !16
  %16 = icmp ne i32 %15, 0
  br i1 %16, label %17, label %24

17:                                               ; preds = %12
  %18 = load i32, ptr %7, align 4, !tbaa !9
  %19 = and i32 %18, 1
  %20 = icmp ne i32 %19, 0
  br i1 %20, label %21, label %23

21:                                               ; preds = %17
  %22 = call i32 (ptr, ...) @printf(ptr noundef @.str.51)
  br label %23

23:                                               ; preds = %21, %17
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

24:                                               ; preds = %12
  %25 = load ptr, ptr %3, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.ctrl_t, ptr %25, i32 0, i32 3
  %27 = load i32, ptr %26, align 4, !tbaa !17
  %28 = icmp ne i32 %27, 0
  br i1 %28, label %29, label %41

29:                                               ; preds = %24
  %30 = load ptr, ptr %3, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.ctrl_t, ptr %30, i32 0, i32 3
  %32 = load i32, ptr %31, align 4, !tbaa !17
  %33 = icmp ne i32 %32, 1
  br i1 %33, label %34, label %41

34:                                               ; preds = %29
  %35 = load i32, ptr %7, align 4, !tbaa !9
  %36 = and i32 %35, 1
  %37 = icmp ne i32 %36, 0
  br i1 %37, label %38, label %40

38:                                               ; preds = %34
  %39 = call i32 (ptr, ...) @printf(ptr noundef @.str.52)
  br label %40

40:                                               ; preds = %38, %34
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

41:                                               ; preds = %29, %24
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.ctrl_t, ptr %42, i32 0, i32 4
  %44 = load i32, ptr %43, align 8, !tbaa !18
  %45 = icmp ne i32 %44, 0
  br i1 %45, label %46, label %58

46:                                               ; preds = %41
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.ctrl_t, ptr %47, i32 0, i32 4
  %49 = load i32, ptr %48, align 8, !tbaa !18
  %50 = icmp ne i32 %49, 1
  br i1 %50, label %51, label %58

51:                                               ; preds = %46
  %52 = load i32, ptr %7, align 4, !tbaa !9
  %53 = and i32 %52, 1
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %55, label %57

55:                                               ; preds = %51
  %56 = call i32 (ptr, ...) @printf(ptr noundef @.str.53)
  br label %57

57:                                               ; preds = %55, %51
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

58:                                               ; preds = %46, %41
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.ctrl_t, ptr %59, i32 0, i32 5
  %61 = load i32, ptr %60, align 4, !tbaa !19
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %70

63:                                               ; preds = %58
  %64 = load i32, ptr %7, align 4, !tbaa !9
  %65 = and i32 %64, 1
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %69

67:                                               ; preds = %63
  %68 = call i32 (ptr, ...) @printf(ptr noundef @.str.54)
  br label %69

69:                                               ; preds = %67, %63
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

70:                                               ; preds = %58
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ctrl_t, ptr %71, i32 0, i32 16
  %73 = load i32, ptr %72, align 8, !tbaa !20
  %74 = icmp sle i32 %73, 0
  br i1 %74, label %75, label %82

75:                                               ; preds = %70
  %76 = load i32, ptr %7, align 4, !tbaa !9
  %77 = and i32 %76, 1
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %79, label %81

79:                                               ; preds = %75
  %80 = call i32 (ptr, ...) @printf(ptr noundef @.str.55)
  br label %81

81:                                               ; preds = %79, %75
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

82:                                               ; preds = %70
  %83 = load ptr, ptr %3, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.ctrl_t, ptr %83, i32 0, i32 17
  %85 = load i32, ptr %84, align 4, !tbaa !21
  %86 = icmp sle i32 %85, 0
  br i1 %86, label %87, label %94

87:                                               ; preds = %82
  %88 = load i32, ptr %7, align 4, !tbaa !9
  %89 = and i32 %88, 1
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %93

91:                                               ; preds = %87
  %92 = call i32 (ptr, ...) @printf(ptr noundef @.str.56)
  br label %93

93:                                               ; preds = %91, %87
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

94:                                               ; preds = %82
  %95 = load ptr, ptr %3, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.ctrl_t, ptr %95, i32 0, i32 12
  %97 = load i32, ptr %96, align 8, !tbaa !22
  %98 = icmp sle i32 %97, 0
  br i1 %98, label %99, label %106

99:                                               ; preds = %94
  %100 = load i32, ptr %7, align 4, !tbaa !9
  %101 = and i32 %100, 1
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %105

103:                                              ; preds = %99
  %104 = call i32 (ptr, ...) @printf(ptr noundef @.str.57)
  br label %105

105:                                              ; preds = %103, %99
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

106:                                              ; preds = %94
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.ctrl_t, ptr %107, i32 0, i32 18
  %109 = load i32, ptr %108, align 8, !tbaa !23
  %110 = icmp ne i32 %109, 0
  br i1 %110, label %111, label %123

111:                                              ; preds = %106
  %112 = load ptr, ptr %3, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.ctrl_t, ptr %112, i32 0, i32 18
  %114 = load i32, ptr %113, align 8, !tbaa !23
  %115 = icmp ne i32 %114, 1
  br i1 %115, label %116, label %123

116:                                              ; preds = %111
  %117 = load i32, ptr %7, align 4, !tbaa !9
  %118 = and i32 %117, 1
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %120, label %122

120:                                              ; preds = %116
  %121 = call i32 (ptr, ...) @printf(ptr noundef @.str.58)
  br label %122

122:                                              ; preds = %120, %116
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

123:                                              ; preds = %111, %106
  %124 = load ptr, ptr %3, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.ctrl_t, ptr %124, i32 0, i32 21
  %126 = load i32, ptr %125, align 4, !tbaa !24
  %127 = icmp sle i32 %126, 0
  br i1 %127, label %128, label %135

128:                                              ; preds = %123
  %129 = load i32, ptr %7, align 4, !tbaa !9
  %130 = and i32 %129, 1
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %132, label %134

132:                                              ; preds = %128
  %133 = call i32 (ptr, ...) @printf(ptr noundef @.str.59)
  br label %134

134:                                              ; preds = %132, %128
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

135:                                              ; preds = %123
  %136 = load ptr, ptr %3, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.ctrl_t, ptr %136, i32 0, i32 20
  %138 = load i32, ptr %137, align 8, !tbaa !25
  %139 = icmp sle i32 %138, 0
  br i1 %139, label %140, label %147

140:                                              ; preds = %135
  %141 = load i32, ptr %7, align 4, !tbaa !9
  %142 = and i32 %141, 1
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %146

144:                                              ; preds = %140
  %145 = call i32 (ptr, ...) @printf(ptr noundef @.str.60)
  br label %146

146:                                              ; preds = %144, %140
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

147:                                              ; preds = %135
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %188, %147
  %149 = load i32, ptr %4, align 4, !tbaa !9
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.ctrl_t, ptr %150, i32 0, i32 20
  %152 = load i32, ptr %151, align 8, !tbaa !25
  %153 = icmp slt i32 %149, %152
  br i1 %153, label %154, label %191

154:                                              ; preds = %148
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.ctrl_t, ptr %155, i32 0, i32 21
  %157 = load i32, ptr %156, align 4, !tbaa !24
  %158 = sext i32 %157 to i64
  %159 = load ptr, ptr %3, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.ctrl_t, ptr %159, i32 0, i32 24
  %161 = load ptr, ptr %160, align 8, !tbaa !26
  %162 = load i32, ptr %4, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds float, ptr %161, i64 %163
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.ctrl_t, ptr %165, i32 0, i32 20
  %167 = load i32, ptr %166, align 8, !tbaa !25
  %168 = sext i32 %167 to i64
  %169 = call float @libmetis__rsum(i64 noundef %158, ptr noundef %164, i64 noundef %168)
  store float %169, ptr %6, align 4, !tbaa !27
  %170 = load float, ptr %6, align 4, !tbaa !27
  %171 = fpext float %170 to double
  %172 = fcmp olt double %171, 0x3FEFAE147AE147AE
  br i1 %172, label %177, label %173

173:                                              ; preds = %154
  %174 = load float, ptr %6, align 4, !tbaa !27
  %175 = fpext float %174 to double
  %176 = fcmp ogt double %175, 1.010000e+00
  br i1 %176, label %177, label %187

177:                                              ; preds = %173, %154
  %178 = load i32, ptr %7, align 4, !tbaa !9
  %179 = and i32 %178, 1
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %186

181:                                              ; preds = %177
  %182 = load float, ptr %6, align 4, !tbaa !27
  %183 = fpext float %182 to double
  %184 = load i32, ptr %4, align 4, !tbaa !9
  %185 = call i32 (ptr, ...) @printf(ptr noundef @.str.61, double noundef %183, i32 noundef %184)
  br label %186

186:                                              ; preds = %181, %177
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

187:                                              ; preds = %173
  br label %188

188:                                              ; preds = %187
  %189 = load i32, ptr %4, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %4, align 4, !tbaa !9
  br label %148, !llvm.loop !28

191:                                              ; preds = %148
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %192

192:                                              ; preds = %235, %191
  %193 = load i32, ptr %4, align 4, !tbaa !9
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.ctrl_t, ptr %194, i32 0, i32 20
  %196 = load i32, ptr %195, align 8, !tbaa !25
  %197 = icmp slt i32 %193, %196
  br i1 %197, label %198, label %238

198:                                              ; preds = %192
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %199

199:                                              ; preds = %231, %198
  %200 = load i32, ptr %5, align 4, !tbaa !9
  %201 = load ptr, ptr %3, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.ctrl_t, ptr %201, i32 0, i32 21
  %203 = load i32, ptr %202, align 4, !tbaa !24
  %204 = icmp slt i32 %200, %203
  br i1 %204, label %205, label %234

205:                                              ; preds = %199
  %206 = load ptr, ptr %3, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ctrl_t, ptr %206, i32 0, i32 24
  %208 = load ptr, ptr %207, align 8, !tbaa !26
  %209 = load i32, ptr %5, align 4, !tbaa !9
  %210 = load ptr, ptr %3, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.ctrl_t, ptr %210, i32 0, i32 20
  %212 = load i32, ptr %211, align 8, !tbaa !25
  %213 = mul nsw i32 %209, %212
  %214 = load i32, ptr %4, align 4, !tbaa !9
  %215 = add nsw i32 %213, %214
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds float, ptr %208, i64 %216
  %218 = load float, ptr %217, align 4, !tbaa !27
  %219 = fpext float %218 to double
  %220 = fcmp ole double %219, 0.000000e+00
  br i1 %220, label %221, label %230

221:                                              ; preds = %205
  %222 = load i32, ptr %7, align 4, !tbaa !9
  %223 = and i32 %222, 1
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %229

225:                                              ; preds = %221
  %226 = load i32, ptr %5, align 4, !tbaa !9
  %227 = load i32, ptr %4, align 4, !tbaa !9
  %228 = call i32 (ptr, ...) @printf(ptr noundef @.str.62, i32 noundef %226, i32 noundef %227)
  br label %229

229:                                              ; preds = %225, %221
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

230:                                              ; preds = %205
  br label %231

231:                                              ; preds = %230
  %232 = load i32, ptr %5, align 4, !tbaa !9
  %233 = add nsw i32 %232, 1
  store i32 %233, ptr %5, align 4, !tbaa !9
  br label %199, !llvm.loop !30

234:                                              ; preds = %199
  br label %235

235:                                              ; preds = %234
  %236 = load i32, ptr %4, align 4, !tbaa !9
  %237 = add nsw i32 %236, 1
  store i32 %237, ptr %4, align 4, !tbaa !9
  br label %192, !llvm.loop !31

238:                                              ; preds = %192
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %239

239:                                              ; preds = %264, %238
  %240 = load i32, ptr %4, align 4, !tbaa !9
  %241 = load ptr, ptr %3, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.ctrl_t, ptr %241, i32 0, i32 20
  %243 = load i32, ptr %242, align 8, !tbaa !25
  %244 = icmp slt i32 %240, %243
  br i1 %244, label %245, label %267

245:                                              ; preds = %239
  %246 = load ptr, ptr %3, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.ctrl_t, ptr %246, i32 0, i32 23
  %248 = load ptr, ptr %247, align 8, !tbaa !32
  %249 = load i32, ptr %4, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds float, ptr %248, i64 %250
  %252 = load float, ptr %251, align 4, !tbaa !27
  %253 = fpext float %252 to double
  %254 = fcmp ole double %253, 1.000000e+00
  br i1 %254, label %255, label %263

255:                                              ; preds = %245
  %256 = load i32, ptr %7, align 4, !tbaa !9
  %257 = and i32 %256, 1
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %259, label %262

259:                                              ; preds = %255
  %260 = load i32, ptr %4, align 4, !tbaa !9
  %261 = call i32 (ptr, ...) @printf(ptr noundef @.str.63, i32 noundef %260)
  br label %262

262:                                              ; preds = %259, %255
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

263:                                              ; preds = %245
  br label %264

264:                                              ; preds = %263
  %265 = load i32, ptr %4, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %4, align 4, !tbaa !9
  br label %239, !llvm.loop !33

267:                                              ; preds = %239
  br label %782

268:                                              ; preds = %1
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.ctrl_t, ptr %269, i32 0, i32 1
  %271 = load i32, ptr %270, align 4, !tbaa !16
  %272 = icmp ne i32 %271, 0
  br i1 %272, label %273, label %285

273:                                              ; preds = %268
  %274 = load ptr, ptr %3, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.ctrl_t, ptr %274, i32 0, i32 1
  %276 = load i32, ptr %275, align 4, !tbaa !16
  %277 = icmp ne i32 %276, 1
  br i1 %277, label %278, label %285

278:                                              ; preds = %273
  %279 = load i32, ptr %7, align 4, !tbaa !9
  %280 = and i32 %279, 1
  %281 = icmp ne i32 %280, 0
  br i1 %281, label %282, label %284

282:                                              ; preds = %278
  %283 = call i32 (ptr, ...) @printf(ptr noundef @.str.51)
  br label %284

284:                                              ; preds = %282, %278
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

285:                                              ; preds = %273, %268
  %286 = load ptr, ptr %3, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.ctrl_t, ptr %286, i32 0, i32 3
  %288 = load i32, ptr %287, align 4, !tbaa !17
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %290, label %302

290:                                              ; preds = %285
  %291 = load ptr, ptr %3, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.ctrl_t, ptr %291, i32 0, i32 3
  %293 = load i32, ptr %292, align 4, !tbaa !17
  %294 = icmp ne i32 %293, 1
  br i1 %294, label %295, label %302

295:                                              ; preds = %290
  %296 = load i32, ptr %7, align 4, !tbaa !9
  %297 = and i32 %296, 1
  %298 = icmp ne i32 %297, 0
  br i1 %298, label %299, label %301

299:                                              ; preds = %295
  %300 = call i32 (ptr, ...) @printf(ptr noundef @.str.52)
  br label %301

301:                                              ; preds = %299, %295
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

302:                                              ; preds = %290, %285
  %303 = load ptr, ptr %3, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.ctrl_t, ptr %303, i32 0, i32 4
  %305 = load i32, ptr %304, align 8, !tbaa !18
  %306 = icmp ne i32 %305, 4
  br i1 %306, label %307, label %314

307:                                              ; preds = %302
  %308 = load i32, ptr %7, align 4, !tbaa !9
  %309 = and i32 %308, 1
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %313

311:                                              ; preds = %307
  %312 = call i32 (ptr, ...) @printf(ptr noundef @.str.53)
  br label %313

313:                                              ; preds = %311, %307
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

314:                                              ; preds = %302
  %315 = load ptr, ptr %3, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.ctrl_t, ptr %315, i32 0, i32 5
  %317 = load i32, ptr %316, align 4, !tbaa !19
  %318 = icmp ne i32 %317, 1
  br i1 %318, label %319, label %326

319:                                              ; preds = %314
  %320 = load i32, ptr %7, align 4, !tbaa !9
  %321 = and i32 %320, 1
  %322 = icmp ne i32 %321, 0
  br i1 %322, label %323, label %325

323:                                              ; preds = %319
  %324 = call i32 (ptr, ...) @printf(ptr noundef @.str.54)
  br label %325

325:                                              ; preds = %323, %319
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

326:                                              ; preds = %314
  %327 = load ptr, ptr %3, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.ctrl_t, ptr %327, i32 0, i32 16
  %329 = load i32, ptr %328, align 8, !tbaa !20
  %330 = icmp sle i32 %329, 0
  br i1 %330, label %331, label %338

331:                                              ; preds = %326
  %332 = load i32, ptr %7, align 4, !tbaa !9
  %333 = and i32 %332, 1
  %334 = icmp ne i32 %333, 0
  br i1 %334, label %335, label %337

335:                                              ; preds = %331
  %336 = call i32 (ptr, ...) @printf(ptr noundef @.str.55)
  br label %337

337:                                              ; preds = %335, %331
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

338:                                              ; preds = %326
  %339 = load ptr, ptr %3, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.ctrl_t, ptr %339, i32 0, i32 17
  %341 = load i32, ptr %340, align 4, !tbaa !21
  %342 = icmp sle i32 %341, 0
  br i1 %342, label %343, label %350

343:                                              ; preds = %338
  %344 = load i32, ptr %7, align 4, !tbaa !9
  %345 = and i32 %344, 1
  %346 = icmp ne i32 %345, 0
  br i1 %346, label %347, label %349

347:                                              ; preds = %343
  %348 = call i32 (ptr, ...) @printf(ptr noundef @.str.56)
  br label %349

349:                                              ; preds = %347, %343
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

350:                                              ; preds = %338
  %351 = load ptr, ptr %3, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.ctrl_t, ptr %351, i32 0, i32 12
  %353 = load i32, ptr %352, align 8, !tbaa !22
  %354 = icmp sle i32 %353, 0
  br i1 %354, label %355, label %362

355:                                              ; preds = %350
  %356 = load i32, ptr %7, align 4, !tbaa !9
  %357 = and i32 %356, 1
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %361

359:                                              ; preds = %355
  %360 = call i32 (ptr, ...) @printf(ptr noundef @.str.57)
  br label %361

361:                                              ; preds = %359, %355
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

362:                                              ; preds = %350
  %363 = load ptr, ptr %3, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.ctrl_t, ptr %363, i32 0, i32 18
  %365 = load i32, ptr %364, align 8, !tbaa !23
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %379

367:                                              ; preds = %362
  %368 = load ptr, ptr %3, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.ctrl_t, ptr %368, i32 0, i32 18
  %370 = load i32, ptr %369, align 8, !tbaa !23
  %371 = icmp ne i32 %370, 1
  br i1 %371, label %372, label %379

372:                                              ; preds = %367
  %373 = load i32, ptr %7, align 4, !tbaa !9
  %374 = and i32 %373, 1
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %378

376:                                              ; preds = %372
  %377 = call i32 (ptr, ...) @printf(ptr noundef @.str.58)
  br label %378

378:                                              ; preds = %376, %372
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

379:                                              ; preds = %367, %362
  %380 = load ptr, ptr %3, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.ctrl_t, ptr %380, i32 0, i32 21
  %382 = load i32, ptr %381, align 4, !tbaa !24
  %383 = icmp sle i32 %382, 0
  br i1 %383, label %384, label %391

384:                                              ; preds = %379
  %385 = load i32, ptr %7, align 4, !tbaa !9
  %386 = and i32 %385, 1
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %388, label %390

388:                                              ; preds = %384
  %389 = call i32 (ptr, ...) @printf(ptr noundef @.str.59)
  br label %390

390:                                              ; preds = %388, %384
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

391:                                              ; preds = %379
  %392 = load ptr, ptr %3, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.ctrl_t, ptr %392, i32 0, i32 20
  %394 = load i32, ptr %393, align 8, !tbaa !25
  %395 = icmp sle i32 %394, 0
  br i1 %395, label %396, label %403

396:                                              ; preds = %391
  %397 = load i32, ptr %7, align 4, !tbaa !9
  %398 = and i32 %397, 1
  %399 = icmp ne i32 %398, 0
  br i1 %399, label %400, label %402

400:                                              ; preds = %396
  %401 = call i32 (ptr, ...) @printf(ptr noundef @.str.60)
  br label %402

402:                                              ; preds = %400, %396
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

403:                                              ; preds = %391
  %404 = load ptr, ptr %3, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.ctrl_t, ptr %404, i32 0, i32 10
  %406 = load i32, ptr %405, align 8, !tbaa !34
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %408, label %420

408:                                              ; preds = %403
  %409 = load ptr, ptr %3, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.ctrl_t, ptr %409, i32 0, i32 10
  %411 = load i32, ptr %410, align 8, !tbaa !34
  %412 = icmp ne i32 %411, 1
  br i1 %412, label %413, label %420

413:                                              ; preds = %408
  %414 = load i32, ptr %7, align 4, !tbaa !9
  %415 = and i32 %414, 1
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %417, label %419

417:                                              ; preds = %413
  %418 = call i32 (ptr, ...) @printf(ptr noundef @.str.64)
  br label %419

419:                                              ; preds = %417, %413
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

420:                                              ; preds = %408, %403
  %421 = load ptr, ptr %3, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.ctrl_t, ptr %421, i32 0, i32 9
  %423 = load i32, ptr %422, align 4, !tbaa !35
  %424 = icmp ne i32 %423, 0
  br i1 %424, label %425, label %437

425:                                              ; preds = %420
  %426 = load ptr, ptr %3, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.ctrl_t, ptr %426, i32 0, i32 9
  %428 = load i32, ptr %427, align 4, !tbaa !35
  %429 = icmp ne i32 %428, 1
  br i1 %429, label %430, label %437

430:                                              ; preds = %425
  %431 = load i32, ptr %7, align 4, !tbaa !9
  %432 = and i32 %431, 1
  %433 = icmp ne i32 %432, 0
  br i1 %433, label %434, label %436

434:                                              ; preds = %430
  %435 = call i32 (ptr, ...) @printf(ptr noundef @.str.65)
  br label %436

436:                                              ; preds = %434, %430
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

437:                                              ; preds = %425, %420
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %438

438:                                              ; preds = %478, %437
  %439 = load i32, ptr %4, align 4, !tbaa !9
  %440 = load ptr, ptr %3, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.ctrl_t, ptr %440, i32 0, i32 20
  %442 = load i32, ptr %441, align 8, !tbaa !25
  %443 = icmp slt i32 %439, %442
  br i1 %443, label %444, label %481

444:                                              ; preds = %438
  %445 = load ptr, ptr %3, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.ctrl_t, ptr %445, i32 0, i32 21
  %447 = load i32, ptr %446, align 4, !tbaa !24
  %448 = sext i32 %447 to i64
  %449 = load ptr, ptr %3, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.ctrl_t, ptr %449, i32 0, i32 24
  %451 = load ptr, ptr %450, align 8, !tbaa !26
  %452 = load i32, ptr %4, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds float, ptr %451, i64 %453
  %455 = load ptr, ptr %3, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.ctrl_t, ptr %455, i32 0, i32 20
  %457 = load i32, ptr %456, align 8, !tbaa !25
  %458 = sext i32 %457 to i64
  %459 = call float @libmetis__rsum(i64 noundef %448, ptr noundef %454, i64 noundef %458)
  store float %459, ptr %6, align 4, !tbaa !27
  %460 = load float, ptr %6, align 4, !tbaa !27
  %461 = fpext float %460 to double
  %462 = fcmp olt double %461, 0x3FEFAE147AE147AE
  br i1 %462, label %467, label %463

463:                                              ; preds = %444
  %464 = load float, ptr %6, align 4, !tbaa !27
  %465 = fpext float %464 to double
  %466 = fcmp ogt double %465, 1.010000e+00
  br i1 %466, label %467, label %477

467:                                              ; preds = %463, %444
  %468 = load i32, ptr %7, align 4, !tbaa !9
  %469 = and i32 %468, 1
  %470 = icmp ne i32 %469, 0
  br i1 %470, label %471, label %476

471:                                              ; preds = %467
  %472 = load float, ptr %6, align 4, !tbaa !27
  %473 = fpext float %472 to double
  %474 = load i32, ptr %4, align 4, !tbaa !9
  %475 = call i32 (ptr, ...) @printf(ptr noundef @.str.61, double noundef %473, i32 noundef %474)
  br label %476

476:                                              ; preds = %471, %467
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

477:                                              ; preds = %463
  br label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %4, align 4, !tbaa !9
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %4, align 4, !tbaa !9
  br label %438, !llvm.loop !36

481:                                              ; preds = %438
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %482

482:                                              ; preds = %525, %481
  %483 = load i32, ptr %4, align 4, !tbaa !9
  %484 = load ptr, ptr %3, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.ctrl_t, ptr %484, i32 0, i32 20
  %486 = load i32, ptr %485, align 8, !tbaa !25
  %487 = icmp slt i32 %483, %486
  br i1 %487, label %488, label %528

488:                                              ; preds = %482
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %489

489:                                              ; preds = %521, %488
  %490 = load i32, ptr %5, align 4, !tbaa !9
  %491 = load ptr, ptr %3, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.ctrl_t, ptr %491, i32 0, i32 21
  %493 = load i32, ptr %492, align 4, !tbaa !24
  %494 = icmp slt i32 %490, %493
  br i1 %494, label %495, label %524

495:                                              ; preds = %489
  %496 = load ptr, ptr %3, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.ctrl_t, ptr %496, i32 0, i32 24
  %498 = load ptr, ptr %497, align 8, !tbaa !26
  %499 = load i32, ptr %5, align 4, !tbaa !9
  %500 = load ptr, ptr %3, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.ctrl_t, ptr %500, i32 0, i32 20
  %502 = load i32, ptr %501, align 8, !tbaa !25
  %503 = mul nsw i32 %499, %502
  %504 = load i32, ptr %4, align 4, !tbaa !9
  %505 = add nsw i32 %503, %504
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds float, ptr %498, i64 %506
  %508 = load float, ptr %507, align 4, !tbaa !27
  %509 = fpext float %508 to double
  %510 = fcmp ole double %509, 0.000000e+00
  br i1 %510, label %511, label %520

511:                                              ; preds = %495
  %512 = load i32, ptr %7, align 4, !tbaa !9
  %513 = and i32 %512, 1
  %514 = icmp ne i32 %513, 0
  br i1 %514, label %515, label %519

515:                                              ; preds = %511
  %516 = load i32, ptr %5, align 4, !tbaa !9
  %517 = load i32, ptr %4, align 4, !tbaa !9
  %518 = call i32 (ptr, ...) @printf(ptr noundef @.str.62, i32 noundef %516, i32 noundef %517)
  br label %519

519:                                              ; preds = %515, %511
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

520:                                              ; preds = %495
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %5, align 4, !tbaa !9
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %5, align 4, !tbaa !9
  br label %489, !llvm.loop !37

524:                                              ; preds = %489
  br label %525

525:                                              ; preds = %524
  %526 = load i32, ptr %4, align 4, !tbaa !9
  %527 = add nsw i32 %526, 1
  store i32 %527, ptr %4, align 4, !tbaa !9
  br label %482, !llvm.loop !38

528:                                              ; preds = %482
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %529

529:                                              ; preds = %554, %528
  %530 = load i32, ptr %4, align 4, !tbaa !9
  %531 = load ptr, ptr %3, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.ctrl_t, ptr %531, i32 0, i32 20
  %533 = load i32, ptr %532, align 8, !tbaa !25
  %534 = icmp slt i32 %530, %533
  br i1 %534, label %535, label %557

535:                                              ; preds = %529
  %536 = load ptr, ptr %3, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.ctrl_t, ptr %536, i32 0, i32 23
  %538 = load ptr, ptr %537, align 8, !tbaa !32
  %539 = load i32, ptr %4, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds float, ptr %538, i64 %540
  %542 = load float, ptr %541, align 4, !tbaa !27
  %543 = fpext float %542 to double
  %544 = fcmp ole double %543, 1.000000e+00
  br i1 %544, label %545, label %553

545:                                              ; preds = %535
  %546 = load i32, ptr %7, align 4, !tbaa !9
  %547 = and i32 %546, 1
  %548 = icmp ne i32 %547, 0
  br i1 %548, label %549, label %552

549:                                              ; preds = %545
  %550 = load i32, ptr %4, align 4, !tbaa !9
  %551 = call i32 (ptr, ...) @printf(ptr noundef @.str.63, i32 noundef %550)
  br label %552

552:                                              ; preds = %549, %545
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

553:                                              ; preds = %535
  br label %554

554:                                              ; preds = %553
  %555 = load i32, ptr %4, align 4, !tbaa !9
  %556 = add nsw i32 %555, 1
  store i32 %556, ptr %4, align 4, !tbaa !9
  br label %529, !llvm.loop !39

557:                                              ; preds = %529
  br label %782

558:                                              ; preds = %1
  %559 = load ptr, ptr %3, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.ctrl_t, ptr %559, i32 0, i32 1
  %561 = load i32, ptr %560, align 4, !tbaa !16
  %562 = icmp ne i32 %561, 2
  br i1 %562, label %563, label %570

563:                                              ; preds = %558
  %564 = load i32, ptr %7, align 4, !tbaa !9
  %565 = and i32 %564, 1
  %566 = icmp ne i32 %565, 0
  br i1 %566, label %567, label %569

567:                                              ; preds = %563
  %568 = call i32 (ptr, ...) @printf(ptr noundef @.str.51)
  br label %569

569:                                              ; preds = %567, %563
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

570:                                              ; preds = %558
  %571 = load ptr, ptr %3, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.ctrl_t, ptr %571, i32 0, i32 3
  %573 = load i32, ptr %572, align 4, !tbaa !17
  %574 = icmp ne i32 %573, 0
  br i1 %574, label %575, label %587

575:                                              ; preds = %570
  %576 = load ptr, ptr %3, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.ctrl_t, ptr %576, i32 0, i32 3
  %578 = load i32, ptr %577, align 4, !tbaa !17
  %579 = icmp ne i32 %578, 1
  br i1 %579, label %580, label %587

580:                                              ; preds = %575
  %581 = load i32, ptr %7, align 4, !tbaa !9
  %582 = and i32 %581, 1
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %584, label %586

584:                                              ; preds = %580
  %585 = call i32 (ptr, ...) @printf(ptr noundef @.str.52)
  br label %586

586:                                              ; preds = %584, %580
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

587:                                              ; preds = %575, %570
  %588 = load ptr, ptr %3, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.ctrl_t, ptr %588, i32 0, i32 4
  %590 = load i32, ptr %589, align 8, !tbaa !18
  %591 = icmp ne i32 %590, 2
  br i1 %591, label %592, label %604

592:                                              ; preds = %587
  %593 = load ptr, ptr %3, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.ctrl_t, ptr %593, i32 0, i32 4
  %595 = load i32, ptr %594, align 8, !tbaa !18
  %596 = icmp ne i32 %595, 3
  br i1 %596, label %597, label %604

597:                                              ; preds = %592
  %598 = load i32, ptr %7, align 4, !tbaa !9
  %599 = and i32 %598, 1
  %600 = icmp ne i32 %599, 0
  br i1 %600, label %601, label %603

601:                                              ; preds = %597
  %602 = call i32 (ptr, ...) @printf(ptr noundef @.str.53)
  br label %603

603:                                              ; preds = %601, %597
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

604:                                              ; preds = %592, %587
  %605 = load ptr, ptr %3, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.ctrl_t, ptr %605, i32 0, i32 5
  %607 = load i32, ptr %606, align 4, !tbaa !19
  %608 = icmp ne i32 %607, 3
  br i1 %608, label %609, label %621

609:                                              ; preds = %604
  %610 = load ptr, ptr %3, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.ctrl_t, ptr %610, i32 0, i32 5
  %612 = load i32, ptr %611, align 4, !tbaa !19
  %613 = icmp ne i32 %612, 2
  br i1 %613, label %614, label %621

614:                                              ; preds = %609
  %615 = load i32, ptr %7, align 4, !tbaa !9
  %616 = and i32 %615, 1
  %617 = icmp ne i32 %616, 0
  br i1 %617, label %618, label %620

618:                                              ; preds = %614
  %619 = call i32 (ptr, ...) @printf(ptr noundef @.str.54)
  br label %620

620:                                              ; preds = %618, %614
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

621:                                              ; preds = %609, %604
  %622 = load ptr, ptr %3, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.ctrl_t, ptr %622, i32 0, i32 11
  %624 = load i32, ptr %623, align 4, !tbaa !40
  %625 = icmp sle i32 %624, 0
  br i1 %625, label %626, label %633

626:                                              ; preds = %621
  %627 = load i32, ptr %7, align 4, !tbaa !9
  %628 = and i32 %627, 1
  %629 = icmp ne i32 %628, 0
  br i1 %629, label %630, label %632

630:                                              ; preds = %626
  %631 = call i32 (ptr, ...) @printf(ptr noundef @.str.66)
  br label %632

632:                                              ; preds = %630, %626
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

633:                                              ; preds = %621
  %634 = load ptr, ptr %3, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.ctrl_t, ptr %634, i32 0, i32 17
  %636 = load i32, ptr %635, align 4, !tbaa !21
  %637 = icmp sle i32 %636, 0
  br i1 %637, label %638, label %645

638:                                              ; preds = %633
  %639 = load i32, ptr %7, align 4, !tbaa !9
  %640 = and i32 %639, 1
  %641 = icmp ne i32 %640, 0
  br i1 %641, label %642, label %644

642:                                              ; preds = %638
  %643 = call i32 (ptr, ...) @printf(ptr noundef @.str.56)
  br label %644

644:                                              ; preds = %642, %638
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

645:                                              ; preds = %633
  %646 = load ptr, ptr %3, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.ctrl_t, ptr %646, i32 0, i32 12
  %648 = load i32, ptr %647, align 8, !tbaa !22
  %649 = icmp sle i32 %648, 0
  br i1 %649, label %650, label %657

650:                                              ; preds = %645
  %651 = load i32, ptr %7, align 4, !tbaa !9
  %652 = and i32 %651, 1
  %653 = icmp ne i32 %652, 0
  br i1 %653, label %654, label %656

654:                                              ; preds = %650
  %655 = call i32 (ptr, ...) @printf(ptr noundef @.str.57)
  br label %656

656:                                              ; preds = %654, %650
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

657:                                              ; preds = %645
  %658 = load ptr, ptr %3, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.ctrl_t, ptr %658, i32 0, i32 18
  %660 = load i32, ptr %659, align 8, !tbaa !23
  %661 = icmp ne i32 %660, 0
  br i1 %661, label %662, label %674

662:                                              ; preds = %657
  %663 = load ptr, ptr %3, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.ctrl_t, ptr %663, i32 0, i32 18
  %665 = load i32, ptr %664, align 8, !tbaa !23
  %666 = icmp ne i32 %665, 1
  br i1 %666, label %667, label %674

667:                                              ; preds = %662
  %668 = load i32, ptr %7, align 4, !tbaa !9
  %669 = and i32 %668, 1
  %670 = icmp ne i32 %669, 0
  br i1 %670, label %671, label %673

671:                                              ; preds = %667
  %672 = call i32 (ptr, ...) @printf(ptr noundef @.str.58)
  br label %673

673:                                              ; preds = %671, %667
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

674:                                              ; preds = %662, %657
  %675 = load ptr, ptr %3, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.ctrl_t, ptr %675, i32 0, i32 21
  %677 = load i32, ptr %676, align 4, !tbaa !24
  %678 = icmp ne i32 %677, 3
  br i1 %678, label %679, label %686

679:                                              ; preds = %674
  %680 = load i32, ptr %7, align 4, !tbaa !9
  %681 = and i32 %680, 1
  %682 = icmp ne i32 %681, 0
  br i1 %682, label %683, label %685

683:                                              ; preds = %679
  %684 = call i32 (ptr, ...) @printf(ptr noundef @.str.59)
  br label %685

685:                                              ; preds = %683, %679
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

686:                                              ; preds = %674
  %687 = load ptr, ptr %3, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.ctrl_t, ptr %687, i32 0, i32 20
  %689 = load i32, ptr %688, align 8, !tbaa !25
  %690 = icmp ne i32 %689, 1
  br i1 %690, label %691, label %698

691:                                              ; preds = %686
  %692 = load i32, ptr %7, align 4, !tbaa !9
  %693 = and i32 %692, 1
  %694 = icmp ne i32 %693, 0
  br i1 %694, label %695, label %697

695:                                              ; preds = %691
  %696 = call i32 (ptr, ...) @printf(ptr noundef @.str.60)
  br label %697

697:                                              ; preds = %695, %691
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

698:                                              ; preds = %686
  %699 = load ptr, ptr %3, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.ctrl_t, ptr %699, i32 0, i32 13
  %701 = load i32, ptr %700, align 4, !tbaa !41
  %702 = icmp ne i32 %701, 0
  br i1 %702, label %703, label %715

703:                                              ; preds = %698
  %704 = load ptr, ptr %3, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.ctrl_t, ptr %704, i32 0, i32 13
  %706 = load i32, ptr %705, align 4, !tbaa !41
  %707 = icmp ne i32 %706, 1
  br i1 %707, label %708, label %715

708:                                              ; preds = %703
  %709 = load i32, ptr %7, align 4, !tbaa !9
  %710 = and i32 %709, 1
  %711 = icmp ne i32 %710, 0
  br i1 %711, label %712, label %714

712:                                              ; preds = %708
  %713 = call i32 (ptr, ...) @printf(ptr noundef @.str.67)
  br label %714

714:                                              ; preds = %712, %708
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

715:                                              ; preds = %703, %698
  %716 = load ptr, ptr %3, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.ctrl_t, ptr %716, i32 0, i32 14
  %718 = load i32, ptr %717, align 8, !tbaa !42
  %719 = icmp ne i32 %718, 0
  br i1 %719, label %720, label %732

720:                                              ; preds = %715
  %721 = load ptr, ptr %3, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.ctrl_t, ptr %721, i32 0, i32 14
  %723 = load i32, ptr %722, align 8, !tbaa !42
  %724 = icmp ne i32 %723, 1
  br i1 %724, label %725, label %732

725:                                              ; preds = %720
  %726 = load i32, ptr %7, align 4, !tbaa !9
  %727 = and i32 %726, 1
  %728 = icmp ne i32 %727, 0
  br i1 %728, label %729, label %731

729:                                              ; preds = %725
  %730 = call i32 (ptr, ...) @printf(ptr noundef @.str.68)
  br label %731

731:                                              ; preds = %729, %725
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

732:                                              ; preds = %720, %715
  %733 = load ptr, ptr %3, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.ctrl_t, ptr %733, i32 0, i32 22
  %735 = load float, ptr %734, align 8, !tbaa !43
  %736 = fpext float %735 to double
  %737 = fcmp olt double %736, 0.000000e+00
  br i1 %737, label %738, label %745

738:                                              ; preds = %732
  %739 = load i32, ptr %7, align 4, !tbaa !9
  %740 = and i32 %739, 1
  %741 = icmp ne i32 %740, 0
  br i1 %741, label %742, label %744

742:                                              ; preds = %738
  %743 = call i32 (ptr, ...) @printf(ptr noundef @.str.69)
  br label %744

744:                                              ; preds = %742, %738
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

745:                                              ; preds = %732
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %746

746:                                              ; preds = %771, %745
  %747 = load i32, ptr %4, align 4, !tbaa !9
  %748 = load ptr, ptr %3, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.ctrl_t, ptr %748, i32 0, i32 20
  %750 = load i32, ptr %749, align 8, !tbaa !25
  %751 = icmp slt i32 %747, %750
  br i1 %751, label %752, label %774

752:                                              ; preds = %746
  %753 = load ptr, ptr %3, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.ctrl_t, ptr %753, i32 0, i32 23
  %755 = load ptr, ptr %754, align 8, !tbaa !32
  %756 = load i32, ptr %4, align 4, !tbaa !9
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds float, ptr %755, i64 %757
  %759 = load float, ptr %758, align 4, !tbaa !27
  %760 = fpext float %759 to double
  %761 = fcmp ole double %760, 1.000000e+00
  br i1 %761, label %762, label %770

762:                                              ; preds = %752
  %763 = load i32, ptr %7, align 4, !tbaa !9
  %764 = and i32 %763, 1
  %765 = icmp ne i32 %764, 0
  br i1 %765, label %766, label %769

766:                                              ; preds = %762
  %767 = load i32, ptr %4, align 4, !tbaa !9
  %768 = call i32 (ptr, ...) @printf(ptr noundef @.str.63, i32 noundef %767)
  br label %769

769:                                              ; preds = %766, %762
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

770:                                              ; preds = %752
  br label %771

771:                                              ; preds = %770
  %772 = load i32, ptr %4, align 4, !tbaa !9
  %773 = add nsw i32 %772, 1
  store i32 %773, ptr %4, align 4, !tbaa !9
  br label %746, !llvm.loop !44

774:                                              ; preds = %746
  br label %782

775:                                              ; preds = %1
  %776 = load i32, ptr %7, align 4, !tbaa !9
  %777 = and i32 %776, 1
  %778 = icmp ne i32 %777, 0
  br i1 %778, label %779, label %781

779:                                              ; preds = %775
  %780 = call i32 (ptr, ...) @printf(ptr noundef @.str.70)
  br label %781

781:                                              ; preds = %779, %775
  store i32 0, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

782:                                              ; preds = %774, %557, %267
  store i32 1, ptr %2, align 4
  store i32 1, ptr %8, align 4
  br label %783

783:                                              ; preds = %782, %781, %769, %744, %731, %714, %697, %685, %673, %656, %644, %632, %620, %603, %586, %569, %552, %519, %476, %436, %419, %402, %390, %378, %361, %349, %337, %325, %313, %301, %284, %262, %229, %186, %146, %134, %122, %105, %93, %81, %69, %57, %40, %23
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  %784 = load i32, ptr %2, align 4
  ret i32 %784
}

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"ctrl_t", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !13, i64 96, !6, i64 104, !6, i64 112, !6, 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, !6, i64 232, !15, i64 240, !15, i64 248, !15, 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}
!13 = !{!"float", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!12, !10, i64 4}
!17 = !{!12, !10, i64 12}
!18 = !{!12, !10, i64 16}
!19 = !{!12, !10, i64 20}
!20 = !{!12, !10, i64 64}
!21 = !{!12, !10, i64 68}
!22 = !{!12, !10, i64 48}
!23 = !{!12, !10, i64 72}
!24 = !{!12, !10, i64 92}
!25 = !{!12, !10, i64 88}
!26 = !{!12, !6, i64 112}
!27 = !{!13, !13, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = distinct !{!31, !29}
!32 = !{!12, !6, i64 104}
!33 = distinct !{!33, !29}
!34 = !{!12, !10, i64 40}
!35 = !{!12, !10, i64 36}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = distinct !{!38, !29}
!39 = distinct !{!39, !29}
!40 = !{!12, !10, i64 44}
!41 = !{!12, !10, i64 52}
!42 = !{!12, !10, i64 56}
!43 = !{!12, !13, i64 96}
!44 = distinct !{!44, !29}


; 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.51 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [31 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @libmetis__CheckParams(ptr nocapture noundef readonly %0) local_unnamed_addr #0 {
  %2 = load i32, ptr %0, align 8, !tbaa !5
  switch i32 %2, label %285 [
    i32 0, label %3
    i32 1, label %101
    i32 2, label %209
  ]

3:                                                ; preds = %1
  %4 = getelementptr inbounds i8, ptr %0, i64 4
  %5 = load i32, ptr %4, align 4, !tbaa !14
  %.not204 = icmp eq i32 %5, 0
  br i1 %.not204, label %8, label %6

6:                                                ; preds = %3
  %7 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.51)
  br label %.loopexit

8:                                                ; preds = %3
  %9 = getelementptr inbounds i8, ptr %0, i64 12
  %10 = load i32, ptr %9, align 4, !tbaa !15
  %switch = icmp ult i32 %10, 2
  br i1 %switch, label %13, label %11

11:                                               ; preds = %8
  %12 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52)
  br label %.loopexit

13:                                               ; preds = %8
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  %15 = load i32, ptr %14, align 8, !tbaa !16
  %switch213 = icmp ult i32 %15, 2
  br i1 %switch213, label %18, label %16

16:                                               ; preds = %13
  %17 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53)
  br label %.loopexit

18:                                               ; preds = %13
  %19 = getelementptr inbounds i8, ptr %0, i64 20
  %20 = load i32, ptr %19, align 4, !tbaa !17
  %.not209 = icmp eq i32 %20, 0
  br i1 %.not209, label %23, label %21

21:                                               ; preds = %18
  %22 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54)
  br label %.loopexit

23:                                               ; preds = %18
  %24 = getelementptr inbounds i8, ptr %0, i64 64
  %25 = load i32, ptr %24, align 8, !tbaa !18
  %26 = icmp slt i32 %25, 1
  br i1 %26, label %27, label %29

27:                                               ; preds = %23
  %28 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.55)
  br label %.loopexit

29:                                               ; preds = %23
  %30 = getelementptr inbounds i8, ptr %0, i64 68
  %31 = load i32, ptr %30, align 4, !tbaa !19
  %32 = icmp slt i32 %31, 1
  br i1 %32, label %33, label %35

33:                                               ; preds = %29
  %34 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.56)
  br label %.loopexit

35:                                               ; preds = %29
  %36 = getelementptr inbounds i8, ptr %0, i64 48
  %37 = load i32, ptr %36, align 8, !tbaa !20
  %38 = icmp slt i32 %37, 1
  br i1 %38, label %39, label %41

39:                                               ; preds = %35
  %40 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.57)
  br label %.loopexit

41:                                               ; preds = %35
  %42 = getelementptr inbounds i8, ptr %0, i64 72
  %43 = load i32, ptr %42, align 8, !tbaa !21
  %switch214 = icmp ult i32 %43, 2
  br i1 %switch214, label %46, label %44

44:                                               ; preds = %41
  %45 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.58)
  br label %.loopexit

46:                                               ; preds = %41
  %47 = getelementptr inbounds i8, ptr %0, i64 92
  %48 = load i32, ptr %47, align 4, !tbaa !22
  %49 = icmp slt i32 %48, 1
  br i1 %49, label %50, label %52

50:                                               ; preds = %46
  %51 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.59)
  br label %.loopexit

52:                                               ; preds = %46
  %53 = getelementptr inbounds i8, ptr %0, i64 88
  %54 = load i32, ptr %53, align 8, !tbaa !23
  %55 = icmp slt i32 %54, 1
  br i1 %55, label %57, label %.lr.ph261

.lr.ph261:                                        ; preds = %52
  %56 = getelementptr inbounds i8, ptr %0, i64 112
  br label %70

57:                                               ; preds = %52
  %58 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.60)
  br label %.loopexit

.preheader228:                                    ; preds = %84
  %59 = icmp sgt i32 %85, 0
  br i1 %59, label %.preheader227.lr.ph, label %.loopexit

.preheader227.lr.ph:                              ; preds = %.preheader228
  %60 = load i32, ptr %47, align 4, !tbaa !22
  %61 = icmp sgt i32 %60, 0
  br i1 %61, label %.preheader227.lr.ph.split.us, label %.lr.ph270

.preheader227.lr.ph.split.us:                     ; preds = %.preheader227.lr.ph
  %62 = getelementptr inbounds i8, ptr %0, i64 112
  %63 = load ptr, ptr %62, align 8, !tbaa !24
  %64 = zext nneg i32 %85 to i64
  %wide.trip.count311 = zext nneg i32 %60 to i64
  br label %.preheader227.us

.preheader227.us:                                 ; preds = %._crit_edge.us266, %.preheader227.lr.ph.split.us
  %indvars.iv313 = phi i64 [ %indvars.iv.next314, %._crit_edge.us266 ], [ 0, %.preheader227.lr.ph.split.us ]
  %invariant.gep339 = getelementptr inbounds float, ptr %63, i64 %indvars.iv313
  br label %65

65:                                               ; preds = %.preheader227.us, %69
  %indvars.iv308 = phi i64 [ 0, %.preheader227.us ], [ %indvars.iv.next309, %69 ]
  %66 = mul nuw nsw i64 %indvars.iv308, %64
  %gep340 = getelementptr inbounds float, ptr %invariant.gep339, i64 %66
  %67 = load float, ptr %gep340, align 4, !tbaa !25
  %68 = fcmp ugt float %67, 0.000000e+00
  br i1 %68, label %69, label %.split.us267

69:                                               ; preds = %65
  %indvars.iv.next309 = add nuw nsw i64 %indvars.iv308, 1
  %exitcond312.not = icmp eq i64 %indvars.iv.next309, %wide.trip.count311
  br i1 %exitcond312.not, label %._crit_edge.us266, label %65, !llvm.loop !26

._crit_edge.us266:                                ; preds = %69
  %indvars.iv.next314 = add nuw nsw i64 %indvars.iv313, 1
  %exitcond317.not = icmp eq i64 %indvars.iv.next314, %64
  br i1 %exitcond317.not, label %.preheader, label %.preheader227.us, !llvm.loop !28

70:                                               ; preds = %.lr.ph261, %84
  %indvars.iv305 = phi i64 [ 0, %.lr.ph261 ], [ %indvars.iv.next306, %84 ]
  %71 = phi i32 [ %54, %.lr.ph261 ], [ %85, %84 ]
  %72 = load i32, ptr %47, align 4, !tbaa !22
  %73 = sext i32 %72 to i64
  %74 = load ptr, ptr %56, align 8, !tbaa !24
  %75 = getelementptr inbounds float, ptr %74, i64 %indvars.iv305
  %76 = sext i32 %71 to i64
  %77 = tail call float @libmetis__rsum(i64 noundef %73, ptr noundef %75, i64 noundef %76) #3
  %78 = fpext float %77 to double
  %79 = fcmp olt double %78, 0x3FEFAE147AE147AE
  %80 = fcmp ogt double %78, 1.010000e+00
  %or.cond = or i1 %79, %80
  br i1 %or.cond, label %81, label %84

81:                                               ; preds = %70
  %82 = trunc nuw nsw i64 %indvars.iv305 to i32
  %83 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.61, double noundef %78, i32 noundef %82)
  br label %.loopexit

84:                                               ; preds = %70
  %indvars.iv.next306 = add nuw nsw i64 %indvars.iv305, 1
  %85 = load i32, ptr %53, align 8, !tbaa !23
  %86 = sext i32 %85 to i64
  %87 = icmp slt i64 %indvars.iv.next306, %86
  br i1 %87, label %70, label %.preheader228, !llvm.loop !29

.preheader:                                       ; preds = %._crit_edge.us266
  br i1 %59, label %.lr.ph270, label %.loopexit

.lr.ph270:                                        ; preds = %.preheader227.lr.ph, %.preheader
  %88 = getelementptr inbounds i8, ptr %0, i64 104
  %89 = load ptr, ptr %88, align 8, !tbaa !30
  %wide.trip.count321 = zext nneg i32 %85 to i64
  br label %93

.split.us267:                                     ; preds = %65
  %90 = trunc nuw nsw i64 %indvars.iv313 to i32
  %91 = trunc nuw nsw i64 %indvars.iv308 to i32
  %92 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.62, i32 noundef %91, i32 noundef %90)
  br label %.loopexit

93:                                               ; preds = %.lr.ph270, %100
  %indvars.iv318 = phi i64 [ 0, %.lr.ph270 ], [ %indvars.iv.next319, %100 ]
  %94 = getelementptr inbounds float, ptr %89, i64 %indvars.iv318
  %95 = load float, ptr %94, align 4, !tbaa !25
  %96 = fcmp ugt float %95, 1.000000e+00
  br i1 %96, label %100, label %97

97:                                               ; preds = %93
  %98 = trunc nuw nsw i64 %indvars.iv318 to i32
  %99 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.63, i32 noundef %98)
  br label %.loopexit

100:                                              ; preds = %93
  %indvars.iv.next319 = add nuw nsw i64 %indvars.iv318, 1
  %exitcond322.not = icmp eq i64 %indvars.iv.next319, %wide.trip.count321
  br i1 %exitcond322.not, label %.loopexit, label %93, !llvm.loop !31

101:                                              ; preds = %1
  %102 = getelementptr inbounds i8, ptr %0, i64 4
  %103 = load i32, ptr %102, align 4, !tbaa !14
  %switch215 = icmp ult i32 %103, 2
  br i1 %switch215, label %106, label %104

104:                                              ; preds = %101
  %105 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.51)
  br label %.loopexit

106:                                              ; preds = %101
  %107 = getelementptr inbounds i8, ptr %0, i64 12
  %108 = load i32, ptr %107, align 4, !tbaa !15
  %switch216 = icmp ult i32 %108, 2
  br i1 %switch216, label %111, label %109

109:                                              ; preds = %106
  %110 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52)
  br label %.loopexit

111:                                              ; preds = %106
  %112 = getelementptr inbounds i8, ptr %0, i64 16
  %113 = load i32, ptr %112, align 8, !tbaa !16
  %.not196 = icmp eq i32 %113, 4
  br i1 %.not196, label %116, label %114

114:                                              ; preds = %111
  %115 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53)
  br label %.loopexit

116:                                              ; preds = %111
  %117 = getelementptr inbounds i8, ptr %0, i64 20
  %118 = load i32, ptr %117, align 4, !tbaa !17
  %.not197 = icmp eq i32 %118, 1
  br i1 %.not197, label %121, label %119

119:                                              ; preds = %116
  %120 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54)
  br label %.loopexit

121:                                              ; preds = %116
  %122 = getelementptr inbounds i8, ptr %0, i64 64
  %123 = load i32, ptr %122, align 8, !tbaa !18
  %124 = icmp slt i32 %123, 1
  br i1 %124, label %125, label %127

125:                                              ; preds = %121
  %126 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.55)
  br label %.loopexit

127:                                              ; preds = %121
  %128 = getelementptr inbounds i8, ptr %0, i64 68
  %129 = load i32, ptr %128, align 4, !tbaa !19
  %130 = icmp slt i32 %129, 1
  br i1 %130, label %131, label %133

131:                                              ; preds = %127
  %132 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.56)
  br label %.loopexit

133:                                              ; preds = %127
  %134 = getelementptr inbounds i8, ptr %0, i64 48
  %135 = load i32, ptr %134, align 8, !tbaa !20
  %136 = icmp slt i32 %135, 1
  br i1 %136, label %137, label %139

137:                                              ; preds = %133
  %138 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.57)
  br label %.loopexit

139:                                              ; preds = %133
  %140 = getelementptr inbounds i8, ptr %0, i64 72
  %141 = load i32, ptr %140, align 8, !tbaa !21
  %switch217 = icmp ult i32 %141, 2
  br i1 %switch217, label %144, label %142

142:                                              ; preds = %139
  %143 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.58)
  br label %.loopexit

144:                                              ; preds = %139
  %145 = getelementptr inbounds i8, ptr %0, i64 92
  %146 = load i32, ptr %145, align 4, !tbaa !22
  %147 = icmp slt i32 %146, 1
  br i1 %147, label %148, label %150

148:                                              ; preds = %144
  %149 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.59)
  br label %.loopexit

150:                                              ; preds = %144
  %151 = getelementptr inbounds i8, ptr %0, i64 88
  %152 = load i32, ptr %151, align 8, !tbaa !23
  %153 = icmp slt i32 %152, 1
  br i1 %153, label %154, label %156

154:                                              ; preds = %150
  %155 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.60)
  br label %.loopexit

156:                                              ; preds = %150
  %157 = getelementptr inbounds i8, ptr %0, i64 40
  %158 = load i32, ptr %157, align 8, !tbaa !32
  %switch218 = icmp ult i32 %158, 2
  br i1 %switch218, label %161, label %159

159:                                              ; preds = %156
  %160 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.64)
  br label %.loopexit

161:                                              ; preds = %156
  %162 = getelementptr inbounds i8, ptr %0, i64 36
  %163 = load i32, ptr %162, align 4, !tbaa !33
  %switch219 = icmp ult i32 %163, 2
  br i1 %switch219, label %.lr.ph253, label %165

.lr.ph253:                                        ; preds = %161
  %164 = getelementptr inbounds i8, ptr %0, i64 112
  br label %178

165:                                              ; preds = %161
  %166 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.65)
  br label %.loopexit

.preheader233:                                    ; preds = %192
  %167 = icmp sgt i32 %193, 0
  br i1 %167, label %.preheader232.lr.ph, label %.loopexit

.preheader232.lr.ph:                              ; preds = %.preheader233
  %168 = load i32, ptr %145, align 4, !tbaa !22
  %169 = icmp sgt i32 %168, 0
  br i1 %169, label %.preheader232.lr.ph.split.us, label %.lr.ph259

.preheader232.lr.ph.split.us:                     ; preds = %.preheader232.lr.ph
  %170 = getelementptr inbounds i8, ptr %0, i64 112
  %171 = load ptr, ptr %170, align 8, !tbaa !24
  %172 = zext nneg i32 %193 to i64
  %wide.trip.count = zext nneg i32 %168 to i64
  br label %.preheader232.us

.preheader232.us:                                 ; preds = %._crit_edge.us, %.preheader232.lr.ph.split.us
  %indvars.iv295 = phi i64 [ %indvars.iv.next296, %._crit_edge.us ], [ 0, %.preheader232.lr.ph.split.us ]
  %invariant.gep = getelementptr inbounds float, ptr %171, i64 %indvars.iv295
  br label %173

173:                                              ; preds = %.preheader232.us, %177
  %indvars.iv292 = phi i64 [ 0, %.preheader232.us ], [ %indvars.iv.next293, %177 ]
  %174 = mul nuw nsw i64 %indvars.iv292, %172
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %174
  %175 = load float, ptr %gep, align 4, !tbaa !25
  %176 = fcmp ugt float %175, 0.000000e+00
  br i1 %176, label %177, label %.split.us

177:                                              ; preds = %173
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next293, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %173, !llvm.loop !34

._crit_edge.us:                                   ; preds = %177
  %indvars.iv.next296 = add nuw nsw i64 %indvars.iv295, 1
  %exitcond299.not = icmp eq i64 %indvars.iv.next296, %172
  br i1 %exitcond299.not, label %.preheader230, label %.preheader232.us, !llvm.loop !35

178:                                              ; preds = %.lr.ph253, %192
  %indvars.iv = phi i64 [ 0, %.lr.ph253 ], [ %indvars.iv.next, %192 ]
  %179 = phi i32 [ %152, %.lr.ph253 ], [ %193, %192 ]
  %180 = load i32, ptr %145, align 4, !tbaa !22
  %181 = sext i32 %180 to i64
  %182 = load ptr, ptr %164, align 8, !tbaa !24
  %183 = getelementptr inbounds float, ptr %182, i64 %indvars.iv
  %184 = sext i32 %179 to i64
  %185 = tail call float @libmetis__rsum(i64 noundef %181, ptr noundef %183, i64 noundef %184) #3
  %186 = fpext float %185 to double
  %187 = fcmp olt double %186, 0x3FEFAE147AE147AE
  %188 = fcmp ogt double %186, 1.010000e+00
  %or.cond212 = or i1 %187, %188
  br i1 %or.cond212, label %189, label %192

189:                                              ; preds = %178
  %190 = trunc nuw nsw i64 %indvars.iv to i32
  %191 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.61, double noundef %186, i32 noundef %190)
  br label %.loopexit

192:                                              ; preds = %178
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %193 = load i32, ptr %151, align 8, !tbaa !23
  %194 = sext i32 %193 to i64
  %195 = icmp slt i64 %indvars.iv.next, %194
  br i1 %195, label %178, label %.preheader233, !llvm.loop !36

.preheader230:                                    ; preds = %._crit_edge.us
  br i1 %167, label %.lr.ph259, label %.loopexit

.lr.ph259:                                        ; preds = %.preheader232.lr.ph, %.preheader230
  %196 = getelementptr inbounds i8, ptr %0, i64 104
  %197 = load ptr, ptr %196, align 8, !tbaa !30
  %wide.trip.count303 = zext nneg i32 %193 to i64
  br label %201

.split.us:                                        ; preds = %173
  %198 = trunc nuw nsw i64 %indvars.iv295 to i32
  %199 = trunc nuw nsw i64 %indvars.iv292 to i32
  %200 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.62, i32 noundef %199, i32 noundef %198)
  br label %.loopexit

201:                                              ; preds = %.lr.ph259, %208
  %indvars.iv300 = phi i64 [ 0, %.lr.ph259 ], [ %indvars.iv.next301, %208 ]
  %202 = getelementptr inbounds float, ptr %197, i64 %indvars.iv300
  %203 = load float, ptr %202, align 4, !tbaa !25
  %204 = fcmp ugt float %203, 1.000000e+00
  br i1 %204, label %208, label %205

205:                                              ; preds = %201
  %206 = trunc nuw nsw i64 %indvars.iv300 to i32
  %207 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.63, i32 noundef %206)
  br label %.loopexit

208:                                              ; preds = %201
  %indvars.iv.next301 = add nuw nsw i64 %indvars.iv300, 1
  %exitcond304.not = icmp eq i64 %indvars.iv.next301, %wide.trip.count303
  br i1 %exitcond304.not, label %.loopexit, label %201, !llvm.loop !37

209:                                              ; preds = %1
  %210 = getelementptr inbounds i8, ptr %0, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !14
  %.not = icmp eq i32 %211, 2
  br i1 %.not, label %214, label %212

212:                                              ; preds = %209
  %213 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.51)
  br label %.loopexit

214:                                              ; preds = %209
  %215 = getelementptr inbounds i8, ptr %0, i64 12
  %216 = load i32, ptr %215, align 4, !tbaa !15
  %switch220 = icmp ult i32 %216, 2
  br i1 %switch220, label %219, label %217

217:                                              ; preds = %214
  %218 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52)
  br label %.loopexit

219:                                              ; preds = %214
  %220 = getelementptr inbounds i8, ptr %0, i64 16
  %221 = load i32, ptr %220, align 8, !tbaa !16
  %222 = and i32 %221, -2
  %switch221 = icmp eq i32 %222, 2
  br i1 %switch221, label %225, label %223

223:                                              ; preds = %219
  %224 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53)
  br label %.loopexit

225:                                              ; preds = %219
  %226 = getelementptr inbounds i8, ptr %0, i64 20
  %227 = load i32, ptr %226, align 4, !tbaa !17
  %228 = and i32 %227, -2
  %switch223 = icmp eq i32 %228, 2
  br i1 %switch223, label %231, label %229

229:                                              ; preds = %225
  %230 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54)
  br label %.loopexit

231:                                              ; preds = %225
  %232 = getelementptr inbounds i8, ptr %0, i64 44
  %233 = load i32, ptr %232, align 4, !tbaa !38
  %234 = icmp slt i32 %233, 1
  br i1 %234, label %235, label %237

235:                                              ; preds = %231
  %236 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.66)
  br label %.loopexit

237:                                              ; preds = %231
  %238 = getelementptr inbounds i8, ptr %0, i64 68
  %239 = load i32, ptr %238, align 4, !tbaa !19
  %240 = icmp slt i32 %239, 1
  br i1 %240, label %241, label %243

241:                                              ; preds = %237
  %242 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.56)
  br label %.loopexit

243:                                              ; preds = %237
  %244 = getelementptr inbounds i8, ptr %0, i64 48
  %245 = load i32, ptr %244, align 8, !tbaa !20
  %246 = icmp slt i32 %245, 1
  br i1 %246, label %247, label %249

247:                                              ; preds = %243
  %248 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.57)
  br label %.loopexit

249:                                              ; preds = %243
  %250 = getelementptr inbounds i8, ptr %0, i64 72
  %251 = load i32, ptr %250, align 8, !tbaa !21
  %switch224 = icmp ult i32 %251, 2
  br i1 %switch224, label %254, label %252

252:                                              ; preds = %249
  %253 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.58)
  br label %.loopexit

254:                                              ; preds = %249
  %255 = getelementptr inbounds i8, ptr %0, i64 92
  %256 = load i32, ptr %255, align 4, !tbaa !22
  %.not186 = icmp eq i32 %256, 3
  br i1 %.not186, label %259, label %257

257:                                              ; preds = %254
  %258 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.59)
  br label %.loopexit

259:                                              ; preds = %254
  %260 = getelementptr inbounds i8, ptr %0, i64 88
  %261 = load i32, ptr %260, align 8, !tbaa !23
  %.not187 = icmp eq i32 %261, 1
  br i1 %.not187, label %264, label %262

262:                                              ; preds = %259
  %263 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.60)
  br label %.loopexit

264:                                              ; preds = %259
  %265 = getelementptr inbounds i8, ptr %0, i64 52
  %266 = load i32, ptr %265, align 4, !tbaa !39
  %switch225 = icmp ult i32 %266, 2
  br i1 %switch225, label %269, label %267

267:                                              ; preds = %264
  %268 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.67)
  br label %.loopexit

269:                                              ; preds = %264
  %270 = getelementptr inbounds i8, ptr %0, i64 56
  %271 = load i32, ptr %270, align 8, !tbaa !40
  %switch226 = icmp ult i32 %271, 2
  br i1 %switch226, label %274, label %272

272:                                              ; preds = %269
  %273 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.68)
  br label %.loopexit

274:                                              ; preds = %269
  %275 = getelementptr inbounds i8, ptr %0, i64 96
  %276 = load float, ptr %275, align 8, !tbaa !41
  %277 = fcmp olt float %276, 0.000000e+00
  br i1 %277, label %278, label %.lr.ph

278:                                              ; preds = %274
  %279 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.69)
  br label %.loopexit

.lr.ph:                                           ; preds = %274
  %280 = getelementptr inbounds i8, ptr %0, i64 104
  %281 = load ptr, ptr %280, align 8, !tbaa !30
  %.pre = load float, ptr %281, align 4, !tbaa !25
  %282 = fcmp ugt float %.pre, 1.000000e+00
  br i1 %282, label %.loopexit, label %283

283:                                              ; preds = %.lr.ph
  %284 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.63, i32 noundef 0)
  br label %.loopexit

285:                                              ; preds = %1
  %286 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.70)
  br label %.loopexit

.loopexit:                                        ; preds = %208, %100, %.preheader233, %.preheader228, %.lr.ph, %.preheader230, %.preheader, %285, %283, %278, %272, %267, %262, %257, %252, %247, %241, %235, %229, %223, %217, %212, %205, %.split.us, %189, %165, %159, %154, %148, %142, %137, %131, %125, %119, %114, %109, %104, %97, %.split.us267, %81, %57, %50, %44, %39, %33, %27, %21, %16, %11, %6
  %.0 = phi i32 [ 0, %285 ], [ 0, %212 ], [ 0, %217 ], [ 0, %223 ], [ 0, %229 ], [ 0, %235 ], [ 0, %241 ], [ 0, %247 ], [ 0, %252 ], [ 0, %257 ], [ 0, %262 ], [ 0, %267 ], [ 0, %272 ], [ 0, %278 ], [ 0, %283 ], [ 0, %104 ], [ 0, %109 ], [ 0, %114 ], [ 0, %119 ], [ 0, %125 ], [ 0, %131 ], [ 0, %137 ], [ 0, %142 ], [ 0, %148 ], [ 0, %154 ], [ 0, %159 ], [ 0, %165 ], [ 0, %189 ], [ 0, %.split.us ], [ 0, %205 ], [ 0, %6 ], [ 0, %11 ], [ 0, %16 ], [ 0, %21 ], [ 0, %27 ], [ 0, %33 ], [ 0, %39 ], [ 0, %44 ], [ 0, %50 ], [ 0, %57 ], [ 0, %81 ], [ 0, %.split.us267 ], [ 0, %97 ], [ 1, %.preheader ], [ 1, %.preheader230 ], [ 1, %.lr.ph ], [ 1, %.preheader228 ], [ 1, %.preheader233 ], [ 1, %100 ], [ 1, %208 ]
  ret i32 %.0
}

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

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

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

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

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


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