; LLVM IR from siconos/siconos :: externals/lbl/metis4/mmatch.ll_ (MCMatch_SBHEM)

; 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.controldef = type { i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i32, i32, ptr, ptr, i32, ptr, ptr }
%struct.graphdef = type { ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr }

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

declare double @__seconds() #1

declare ptr @__idxset(i32 noundef, i32 noundef, ptr noundef) #1

declare ptr @__idxwspacemalloc(ptr noundef, i32 noundef) #1

declare void @__RandomPermute(i32 noundef, ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @__AreAllVwgtsBelowFast(i32 noundef, ptr noundef, ptr noundef, float noundef) #2

declare void @__CreateCoarseGraph(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #1

declare void @__idxwspacefree(ptr noundef, i32 noundef) #1

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

declare void @__BucketSortKeysInc(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local float @__BetterVBalance(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @__MCMatch_SBHEM(ptr noundef %0, ptr noundef %1, i32 noundef %2) #2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca float, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %27 = load ptr, ptr %4, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.controldef, ptr %27, i32 0, i32 1
  %29 = load i32, ptr %28, align 4, !tbaa !11
  %30 = and i32 %29, 1
  %31 = icmp ne i32 %30, 0
  br i1 %31, label %32, label %38

32:                                               ; preds = %3
  %33 = call double @__seconds()
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.controldef, ptr %34, i32 0, i32 14
  %36 = load double, ptr %35, align 8, !tbaa !16
  %37 = fsub double %36, %33
  store double %37, ptr %35, align 8, !tbaa !16
  br label %38

38:                                               ; preds = %32, %3
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.graphdef, ptr %39, i32 0, i32 2
  %41 = load i32, ptr %40, align 8, !tbaa !17
  store i32 %41, ptr %11, align 4, !tbaa !9
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.graphdef, ptr %42, i32 0, i32 24
  %44 = load i32, ptr %43, align 8, !tbaa !19
  store i32 %44, ptr %13, align 4, !tbaa !9
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.graphdef, ptr %45, i32 0, i32 4
  %47 = load ptr, ptr %46, align 8, !tbaa !20
  store ptr %47, ptr %17, align 8, !tbaa !5
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.graphdef, ptr %48, i32 0, i32 25
  %50 = load ptr, ptr %49, align 8, !tbaa !21
  store ptr %50, ptr %25, align 8, !tbaa !5
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.graphdef, ptr %51, i32 0, i32 7
  %53 = load ptr, ptr %52, align 8, !tbaa !22
  store ptr %53, ptr %18, align 8, !tbaa !5
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.graphdef, ptr %54, i32 0, i32 8
  %56 = load ptr, ptr %55, align 8, !tbaa !23
  store ptr %56, ptr %19, align 8, !tbaa !5
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.graphdef, ptr %57, i32 0, i32 11
  %59 = load ptr, ptr %58, align 8, !tbaa !24
  store ptr %59, ptr %21, align 8, !tbaa !5
  %60 = load i32, ptr %11, align 4, !tbaa !9
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = load i32, ptr %11, align 4, !tbaa !9
  %63 = call ptr @__idxwspacemalloc(ptr noundef %61, i32 noundef %62)
  %64 = call ptr @__idxset(i32 noundef %60, i32 noundef -1, ptr noundef %63)
  store ptr %64, ptr %20, align 8, !tbaa !5
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = load i32, ptr %11, align 4, !tbaa !9
  %67 = call ptr @__idxwspacemalloc(ptr noundef %65, i32 noundef %66)
  store ptr %67, ptr %23, align 8, !tbaa !5
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = load i32, ptr %11, align 4, !tbaa !9
  %70 = call ptr @__idxwspacemalloc(ptr noundef %68, i32 noundef %69)
  store ptr %70, ptr %24, align 8, !tbaa !5
  %71 = load ptr, ptr %4, align 8, !tbaa !5
  %72 = load i32, ptr %11, align 4, !tbaa !9
  %73 = call ptr @__idxwspacemalloc(ptr noundef %71, i32 noundef %72)
  store ptr %73, ptr %22, align 8, !tbaa !5
  %74 = load i32, ptr %11, align 4, !tbaa !9
  %75 = load ptr, ptr %24, align 8, !tbaa !5
  call void @__RandomPermute(i32 noundef %74, ptr noundef %75, i32 noundef 1)
  %76 = load ptr, ptr %17, align 8, !tbaa !5
  %77 = load i32, ptr %11, align 4, !tbaa !9
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds i32, ptr %76, i64 %78
  %80 = load i32, ptr %79, align 4, !tbaa !9
  %81 = load i32, ptr %11, align 4, !tbaa !9
  %82 = sdiv i32 %80, %81
  %83 = sitofp i32 %82 to double
  %84 = fmul double 0x3FE6666666666666, %83
  %85 = fptosi double %84 to i32
  store i32 %85, ptr %16, align 4, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %86

86:                                               ; preds = %126, %38
  %87 = load i32, ptr %7, align 4, !tbaa !9
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = icmp slt i32 %87, %88
  br i1 %89, label %90, label %129

90:                                               ; preds = %86
  %91 = load ptr, ptr %17, align 8, !tbaa !5
  %92 = load i32, ptr %7, align 4, !tbaa !9
  %93 = add nsw i32 %92, 1
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds i32, ptr %91, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !9
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  %98 = load i32, ptr %7, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds i32, ptr %97, i64 %99
  %101 = load i32, ptr %100, align 4, !tbaa !9
  %102 = sub nsw i32 %96, %101
  %103 = load i32, ptr %16, align 4, !tbaa !9
  %104 = icmp sgt i32 %102, %103
  br i1 %104, label %105, label %107

105:                                              ; preds = %90
  %106 = load i32, ptr %16, align 4, !tbaa !9
  br label %120

107:                                              ; preds = %90
  %108 = load ptr, ptr %17, align 8, !tbaa !5
  %109 = load i32, ptr %7, align 4, !tbaa !9
  %110 = add nsw i32 %109, 1
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds i32, ptr %108, i64 %111
  %113 = load i32, ptr %112, align 4, !tbaa !9
  %114 = load ptr, ptr %17, align 8, !tbaa !5
  %115 = load i32, ptr %7, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i32, ptr %114, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = sub nsw i32 %113, %118
  br label %120

120:                                              ; preds = %107, %105
  %121 = phi i32 [ %106, %105 ], [ %119, %107 ]
  %122 = load ptr, ptr %22, align 8, !tbaa !5
  %123 = load i32, ptr %7, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds i32, ptr %122, i64 %124
  store i32 %121, ptr %125, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %120
  %127 = load i32, ptr %7, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %7, align 4, !tbaa !9
  br label %86, !llvm.loop !25

129:                                              ; preds = %86
  %130 = load i32, ptr %11, align 4, !tbaa !9
  %131 = load i32, ptr %16, align 4, !tbaa !9
  %132 = load ptr, ptr %22, align 8, !tbaa !5
  %133 = load ptr, ptr %24, align 8, !tbaa !5
  %134 = load ptr, ptr %23, align 8, !tbaa !5
  call void @__BucketSortKeysInc(i32 noundef %130, i32 noundef %131, ptr noundef %132, ptr noundef %133, ptr noundef %134)
  store i32 0, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %135

135:                                              ; preds = %226, %129
  %136 = load i32, ptr %8, align 4, !tbaa !9
  %137 = load i32, ptr %11, align 4, !tbaa !9
  %138 = icmp slt i32 %136, %137
  br i1 %138, label %139, label %229

139:                                              ; preds = %135
  %140 = load ptr, ptr %23, align 8, !tbaa !5
  %141 = load i32, ptr %8, align 4, !tbaa !9
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i32, ptr %140, i64 %142
  %144 = load i32, ptr %143, align 4, !tbaa !9
  store i32 %144, ptr %7, align 4, !tbaa !9
  %145 = load ptr, ptr %20, align 8, !tbaa !5
  %146 = load i32, ptr %7, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds i32, ptr %145, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !9
  %150 = icmp eq i32 %149, -1
  br i1 %150, label %151, label %225

151:                                              ; preds = %139
  %152 = load ptr, ptr %17, align 8, !tbaa !5
  %153 = load i32, ptr %7, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds i32, ptr %152, i64 %154
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = load ptr, ptr %17, align 8, !tbaa !5
  %158 = load i32, ptr %7, align 4, !tbaa !9
  %159 = add nsw i32 %158, 1
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i32, ptr %157, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = icmp slt i32 %156, %162
  br i1 %163, label %164, label %165

164:                                              ; preds = %151
  br label %229

165:                                              ; preds = %151
  %166 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %166, ptr %14, align 4, !tbaa !9
  %167 = load i32, ptr %11, align 4, !tbaa !9
  %168 = sub nsw i32 %167, 1
  store i32 %168, ptr %9, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %201, %165
  %170 = load i32, ptr %9, align 4, !tbaa !9
  %171 = load i32, ptr %8, align 4, !tbaa !9
  %172 = icmp sgt i32 %170, %171
  br i1 %172, label %173, label %204

173:                                              ; preds = %169
  %174 = load ptr, ptr %23, align 8, !tbaa !5
  %175 = load i32, ptr %9, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i32, ptr %174, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !9
  store i32 %178, ptr %10, align 4, !tbaa !9
  %179 = load ptr, ptr %20, align 8, !tbaa !5
  %180 = load i32, ptr %10, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %179, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !9
  %184 = icmp eq i32 %183, -1
  br i1 %184, label %185, label %200

185:                                              ; preds = %173
  %186 = load ptr, ptr %17, align 8, !tbaa !5
  %187 = load i32, ptr %10, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %186, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = load ptr, ptr %17, align 8, !tbaa !5
  %192 = load i32, ptr %10, align 4, !tbaa !9
  %193 = add nsw i32 %192, 1
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds i32, ptr %191, i64 %194
  %196 = load i32, ptr %195, align 4, !tbaa !9
  %197 = icmp slt i32 %190, %196
  br i1 %197, label %198, label %200

198:                                              ; preds = %185
  %199 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %199, ptr %14, align 4, !tbaa !9
  br label %204

200:                                              ; preds = %185, %173
  br label %201

201:                                              ; preds = %200
  %202 = load i32, ptr %9, align 4, !tbaa !9
  %203 = add nsw i32 %202, -1
  store i32 %203, ptr %9, align 4, !tbaa !9
  br label %169, !llvm.loop !27

204:                                              ; preds = %198, %169
  %205 = load i32, ptr %12, align 4, !tbaa !9
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %12, align 4, !tbaa !9
  %207 = load ptr, ptr %21, align 8, !tbaa !5
  %208 = load i32, ptr %14, align 4, !tbaa !9
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i32, ptr %207, i64 %209
  store i32 %205, ptr %210, align 4, !tbaa !9
  %211 = load ptr, ptr %21, align 8, !tbaa !5
  %212 = load i32, ptr %7, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %211, i64 %213
  store i32 %205, ptr %214, align 4, !tbaa !9
  %215 = load i32, ptr %14, align 4, !tbaa !9
  %216 = load ptr, ptr %20, align 8, !tbaa !5
  %217 = load i32, ptr %7, align 4, !tbaa !9
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds i32, ptr %216, i64 %218
  store i32 %215, ptr %219, align 4, !tbaa !9
  %220 = load i32, ptr %7, align 4, !tbaa !9
  %221 = load ptr, ptr %20, align 8, !tbaa !5
  %222 = load i32, ptr %14, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %221, i64 %223
  store i32 %220, ptr %224, align 4, !tbaa !9
  br label %225

225:                                              ; preds = %204, %139
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %8, align 4, !tbaa !9
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %8, align 4, !tbaa !9
  br label %135, !llvm.loop !28

229:                                              ; preds = %164, %135
  br label %230

230:                                              ; preds = %368, %229
  %231 = load i32, ptr %8, align 4, !tbaa !9
  %232 = load i32, ptr %11, align 4, !tbaa !9
  %233 = icmp slt i32 %231, %232
  br i1 %233, label %234, label %371

234:                                              ; preds = %230
  %235 = load ptr, ptr %23, align 8, !tbaa !5
  %236 = load i32, ptr %8, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i32, ptr %235, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !9
  store i32 %239, ptr %7, align 4, !tbaa !9
  %240 = load ptr, ptr %20, align 8, !tbaa !5
  %241 = load i32, ptr %7, align 4, !tbaa !9
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds i32, ptr %240, i64 %242
  %244 = load i32, ptr %243, align 4, !tbaa !9
  %245 = icmp eq i32 %244, -1
  br i1 %245, label %246, label %367

246:                                              ; preds = %234
  %247 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %247, ptr %14, align 4, !tbaa !9
  store i32 -1, ptr %15, align 4, !tbaa !9
  store float 0.000000e+00, ptr %26, align 4, !tbaa !29
  %248 = load ptr, ptr %17, align 8, !tbaa !5
  %249 = load i32, ptr %7, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i32, ptr %248, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !9
  store i32 %252, ptr %9, align 4, !tbaa !9
  br label %253

253:                                              ; preds = %343, %246
  %254 = load i32, ptr %9, align 4, !tbaa !9
  %255 = load ptr, ptr %17, align 8, !tbaa !5
  %256 = load i32, ptr %7, align 4, !tbaa !9
  %257 = add nsw i32 %256, 1
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds i32, ptr %255, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !9
  %261 = icmp slt i32 %254, %260
  br i1 %261, label %262, label %346

262:                                              ; preds = %253
  %263 = load ptr, ptr %18, align 8, !tbaa !5
  %264 = load i32, ptr %9, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds i32, ptr %263, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !9
  store i32 %267, ptr %10, align 4, !tbaa !9
  %268 = load ptr, ptr %20, align 8, !tbaa !5
  %269 = load i32, ptr %10, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %268, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !9
  %273 = icmp eq i32 %272, -1
  br i1 %273, label %274, label %342

274:                                              ; preds = %262
  %275 = load i32, ptr %13, align 4, !tbaa !9
  %276 = load ptr, ptr %25, align 8, !tbaa !5
  %277 = load i32, ptr %7, align 4, !tbaa !9
  %278 = load i32, ptr %13, align 4, !tbaa !9
  %279 = mul nsw i32 %277, %278
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds float, ptr %276, i64 %280
  %282 = load ptr, ptr %25, align 8, !tbaa !5
  %283 = load i32, ptr %10, align 4, !tbaa !9
  %284 = load i32, ptr %13, align 4, !tbaa !9
  %285 = mul nsw i32 %283, %284
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds float, ptr %282, i64 %286
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.controldef, ptr %288, i32 0, i32 6
  %290 = load float, ptr %289, align 8, !tbaa !30
  %291 = call i32 @__AreAllVwgtsBelowFast(i32 noundef %275, ptr noundef %281, ptr noundef %287, float noundef %290)
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %293, label %342

293:                                              ; preds = %274
  %294 = load i32, ptr %14, align 4, !tbaa !9
  %295 = load i32, ptr %7, align 4, !tbaa !9
  %296 = icmp ne i32 %294, %295
  br i1 %296, label %297, label %319

297:                                              ; preds = %293
  %298 = load i32, ptr %13, align 4, !tbaa !9
  %299 = load i32, ptr %6, align 4, !tbaa !9
  %300 = load ptr, ptr %25, align 8, !tbaa !5
  %301 = load i32, ptr %7, align 4, !tbaa !9
  %302 = load i32, ptr %13, align 4, !tbaa !9
  %303 = mul nsw i32 %301, %302
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds float, ptr %300, i64 %304
  %306 = load ptr, ptr %25, align 8, !tbaa !5
  %307 = load i32, ptr %14, align 4, !tbaa !9
  %308 = load i32, ptr %13, align 4, !tbaa !9
  %309 = mul nsw i32 %307, %308
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds float, ptr %306, i64 %310
  %312 = load ptr, ptr %25, align 8, !tbaa !5
  %313 = load i32, ptr %10, align 4, !tbaa !9
  %314 = load i32, ptr %13, align 4, !tbaa !9
  %315 = mul nsw i32 %313, %314
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds float, ptr %312, i64 %316
  %318 = call float @__BetterVBalance(i32 noundef %298, i32 noundef %299, ptr noundef %305, ptr noundef %311, ptr noundef %317)
  store float %318, ptr %26, align 4, !tbaa !29
  br label %319

319:                                              ; preds = %297, %293
  %320 = load float, ptr %26, align 4, !tbaa !29
  %321 = fcmp ogt float %320, 0.000000e+00
  br i1 %321, label %334, label %322

322:                                              ; preds = %319
  %323 = load float, ptr %26, align 4, !tbaa !29
  %324 = fpext float %323 to double
  %325 = fcmp ogt double %324, -1.000000e-02
  br i1 %325, label %326, label %341

326:                                              ; preds = %322
  %327 = load i32, ptr %15, align 4, !tbaa !9
  %328 = load ptr, ptr %19, align 8, !tbaa !5
  %329 = load i32, ptr %9, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %328, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !9
  %333 = icmp slt i32 %327, %332
  br i1 %333, label %334, label %341

334:                                              ; preds = %326, %319
  %335 = load ptr, ptr %19, align 8, !tbaa !5
  %336 = load i32, ptr %9, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds i32, ptr %335, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !9
  store i32 %339, ptr %15, align 4, !tbaa !9
  %340 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %340, ptr %14, align 4, !tbaa !9
  br label %341

341:                                              ; preds = %334, %326, %322
  br label %342

342:                                              ; preds = %341, %274, %262
  br label %343

343:                                              ; preds = %342
  %344 = load i32, ptr %9, align 4, !tbaa !9
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %9, align 4, !tbaa !9
  br label %253, !llvm.loop !31

346:                                              ; preds = %253
  %347 = load i32, ptr %12, align 4, !tbaa !9
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %12, align 4, !tbaa !9
  %349 = load ptr, ptr %21, align 8, !tbaa !5
  %350 = load i32, ptr %14, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds i32, ptr %349, i64 %351
  store i32 %347, ptr %352, align 4, !tbaa !9
  %353 = load ptr, ptr %21, align 8, !tbaa !5
  %354 = load i32, ptr %7, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i32, ptr %353, i64 %355
  store i32 %347, ptr %356, align 4, !tbaa !9
  %357 = load i32, ptr %14, align 4, !tbaa !9
  %358 = load ptr, ptr %20, align 8, !tbaa !5
  %359 = load i32, ptr %7, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i32, ptr %358, i64 %360
  store i32 %357, ptr %361, align 4, !tbaa !9
  %362 = load i32, ptr %7, align 4, !tbaa !9
  %363 = load ptr, ptr %20, align 8, !tbaa !5
  %364 = load i32, ptr %14, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i32, ptr %363, i64 %365
  store i32 %362, ptr %366, align 4, !tbaa !9
  br label %367

367:                                              ; preds = %346, %234
  br label %368

368:                                              ; preds = %367
  %369 = load i32, ptr %8, align 4, !tbaa !9
  %370 = add nsw i32 %369, 1
  store i32 %370, ptr %8, align 4, !tbaa !9
  br label %230, !llvm.loop !32

371:                                              ; preds = %230
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.controldef, ptr %372, i32 0, i32 1
  %374 = load i32, ptr %373, align 4, !tbaa !11
  %375 = and i32 %374, 1
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %377, label %383

377:                                              ; preds = %371
  %378 = call double @__seconds()
  %379 = load ptr, ptr %4, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.controldef, ptr %379, i32 0, i32 14
  %381 = load double, ptr %380, align 8, !tbaa !16
  %382 = fadd double %381, %378
  store double %382, ptr %380, align 8, !tbaa !16
  br label %383

383:                                              ; preds = %377, %371
  %384 = load ptr, ptr %4, align 8, !tbaa !5
  %385 = load i32, ptr %11, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %384, i32 noundef %385)
  %386 = load ptr, ptr %4, align 8, !tbaa !5
  %387 = load i32, ptr %11, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %386, i32 noundef %387)
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  %389 = load ptr, ptr %5, align 8, !tbaa !5
  %390 = load i32, ptr %12, align 4, !tbaa !9
  %391 = load ptr, ptr %20, align 8, !tbaa !5
  %392 = load ptr, ptr %23, align 8, !tbaa !5
  call void @__CreateCoarseGraph(ptr noundef %388, ptr noundef %389, i32 noundef %390, ptr noundef %391, ptr noundef %392)
  %393 = load ptr, ptr %4, align 8, !tbaa !5
  %394 = load i32, ptr %11, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %393, i32 noundef %394)
  %395 = load ptr, ptr %4, align 8, !tbaa !5
  %396 = load i32, ptr %11, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %395, i32 noundef %396)
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  ret void
}

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

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

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


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

declare double @__seconds() local_unnamed_addr #0

declare ptr @__idxset(i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

declare ptr @__idxwspacemalloc(ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @__RandomPermute(i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @__AreAllVwgtsBelowFast(i32 noundef, ptr noundef, ptr noundef, float noundef) local_unnamed_addr #1

declare void @__CreateCoarseGraph(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @__idxwspacefree(ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @__BucketSortKeysInc(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @__BetterVBalance(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @__MCMatch_SBHEM(ptr noundef %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #1 {
  %4 = getelementptr inbounds i8, ptr %0, i64 4
  %5 = load i32, ptr %4, align 4, !tbaa !5
  %6 = and i32 %5, 1
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %12, label %7

7:                                                ; preds = %3
  %8 = tail call double @__seconds() #3
  %9 = getelementptr inbounds i8, ptr %0, i64 120
  %10 = load double, ptr %9, align 8, !tbaa !14
  %11 = fsub double %10, %8
  store double %11, ptr %9, align 8, !tbaa !14
  br label %12

12:                                               ; preds = %7, %3
  %13 = getelementptr inbounds i8, ptr %1, i64 16
  %14 = load i32, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %1, i64 176
  %16 = load i32, ptr %15, align 8, !tbaa !17
  %17 = getelementptr inbounds i8, ptr %1, i64 24
  %18 = load ptr, ptr %17, align 8, !tbaa !18
  %19 = getelementptr inbounds i8, ptr %1, i64 184
  %20 = load ptr, ptr %19, align 8, !tbaa !19
  %21 = getelementptr inbounds i8, ptr %1, i64 48
  %22 = load ptr, ptr %21, align 8, !tbaa !20
  %23 = getelementptr inbounds i8, ptr %1, i64 56
  %24 = load ptr, ptr %23, align 8, !tbaa !21
  %25 = getelementptr inbounds i8, ptr %1, i64 80
  %26 = load ptr, ptr %25, align 8, !tbaa !22
  %27 = tail call ptr @__idxwspacemalloc(ptr noundef nonnull %0, i32 noundef %14) #3
  %28 = tail call ptr @__idxset(i32 noundef %14, i32 noundef -1, ptr noundef %27) #3
  %29 = tail call ptr @__idxwspacemalloc(ptr noundef nonnull %0, i32 noundef %14) #3
  %30 = tail call ptr @__idxwspacemalloc(ptr noundef nonnull %0, i32 noundef %14) #3
  %31 = tail call ptr @__idxwspacemalloc(ptr noundef nonnull %0, i32 noundef %14) #3
  tail call void @__RandomPermute(i32 noundef %14, ptr noundef %30, i32 noundef 1) #3
  %32 = sext i32 %14 to i64
  %33 = getelementptr inbounds i32, ptr %18, i64 %32
  %34 = load i32, ptr %33, align 4, !tbaa !23
  %35 = sdiv i32 %34, %14
  %36 = sitofp i32 %35 to double
  %37 = fmul double %36, 0x3FE6666666666666
  %38 = fptosi double %37 to i32
  %39 = icmp sgt i32 %14, 0
  br i1 %39, label %.lr.ph.preheader, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %12
  tail call void @__BucketSortKeysInc(i32 noundef %14, i32 noundef %38, ptr noundef %31, ptr noundef %30, ptr noundef %29) #3
  br label %._crit_edge182

.lr.ph.preheader:                                 ; preds = %12
  %wide.trip.count = zext nneg i32 %14 to i64
  %min.iters.check = icmp ult i32 %14, 8
  br i1 %min.iters.check, label %.lr.ph.preheader236, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %40 = shl nuw nsw i64 %wide.trip.count, 2
  %scevgep = getelementptr i8, ptr %31, i64 %40
  %41 = getelementptr i8, ptr %18, i64 %40
  %scevgep229 = getelementptr i8, ptr %41, i64 4
  %bound0 = icmp ult ptr %31, %scevgep229
  %bound1 = icmp ult ptr %18, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph.preheader236, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483640
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %38, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %42 = or disjoint i64 %index, 1
  %43 = getelementptr inbounds i32, ptr %18, i64 %42
  %44 = getelementptr inbounds i8, ptr %43, i64 16
  %wide.load = load <4 x i32>, ptr %43, align 4, !tbaa !23, !alias.scope !24
  %wide.load230 = load <4 x i32>, ptr %44, align 4, !tbaa !23, !alias.scope !24
  %45 = getelementptr inbounds i32, ptr %18, i64 %index
  %46 = getelementptr inbounds i8, ptr %45, i64 16
  %wide.load231 = load <4 x i32>, ptr %45, align 4, !tbaa !23, !alias.scope !24
  %wide.load232 = load <4 x i32>, ptr %46, align 4, !tbaa !23, !alias.scope !24
  %47 = sub nsw <4 x i32> %wide.load, %wide.load231
  %48 = sub nsw <4 x i32> %wide.load230, %wide.load232
  %49 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %47, <4 x i32> %broadcast.splat)
  %50 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %48, <4 x i32> %broadcast.splat)
  %51 = getelementptr inbounds i32, ptr %31, i64 %index
  %52 = getelementptr inbounds i8, ptr %51, i64 16
  store <4 x i32> %49, ptr %51, align 4, !tbaa !23, !alias.scope !27, !noalias !24
  store <4 x i32> %50, ptr %52, align 4, !tbaa !23, !alias.scope !27, !noalias !24
  %index.next = add nuw i64 %index, 8
  %53 = icmp eq i64 %index.next, %n.vec
  br i1 %53, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader236

.lr.ph.preheader236:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader236
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  %54 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next.prol
  %55 = load i32, ptr %54, align 4, !tbaa !23
  %56 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.ph
  %57 = load i32, ptr %56, align 4, !tbaa !23
  %58 = sub nsw i32 %55, %57
  %..prol = tail call i32 @llvm.smin.i32(i32 %58, i32 %38)
  %59 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.ph
  store i32 %..prol, ptr %59, align 4, !tbaa !23
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader236
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader236 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %60 = add nsw i64 %wide.trip.count, -1
  %61 = icmp eq i64 %indvars.iv.ph, %60
  br i1 %61, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %62 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next
  %63 = load i32, ptr %62, align 4, !tbaa !23
  %64 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv
  %65 = load i32, ptr %64, align 4, !tbaa !23
  %66 = sub nsw i32 %63, %65
  %. = tail call i32 @llvm.smin.i32(i32 %66, i32 %38)
  %67 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv
  store i32 %., ptr %67, align 4, !tbaa !23
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %68 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next.1
  %69 = load i32, ptr %68, align 4, !tbaa !23
  %70 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next
  %71 = load i32, ptr %70, align 4, !tbaa !23
  %72 = sub nsw i32 %69, %71
  %..1 = tail call i32 @llvm.smin.i32(i32 %72, i32 %38)
  %73 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next
  store i32 %..1, ptr %73, align 4, !tbaa !23
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !33

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block
  tail call void @__BucketSortKeysInc(i32 noundef %14, i32 noundef %38, ptr noundef nonnull %31, ptr noundef %30, ptr noundef %29) #3
  br i1 %39, label %.lr.ph181, label %._crit_edge182

.lr.ph181:                                        ; preds = %._crit_edge
  %.0154171 = add nsw i32 %14, -1
  %74 = add nsw i64 %32, -1
  %75 = zext nneg i32 %.0154171 to i64
  %wide.trip.count209 = zext nneg i32 %14 to i64
  br label %76

76:                                               ; preds = %.lr.ph181, %108
  %indvars.iv206 = phi i64 [ 0, %.lr.ph181 ], [ %indvars.iv.next207, %108 ]
  %.0156177 = phi i32 [ 0, %.lr.ph181 ], [ %.1157, %108 ]
  %77 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv206
  %78 = load i32, ptr %77, align 4, !tbaa !23
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %28, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !23
  %82 = icmp eq i32 %81, -1
  br i1 %82, label %83, label %108

83:                                               ; preds = %76
  %84 = getelementptr inbounds i32, ptr %18, i64 %79
  %85 = load i32, ptr %84, align 4, !tbaa !23
  %86 = getelementptr i8, ptr %84, i64 4
  %87 = load i32, ptr %86, align 4, !tbaa !23
  %88 = icmp slt i32 %85, %87
  br i1 %88, label %._crit_edge182.loopexit, label %.preheader

.preheader:                                       ; preds = %83
  %89 = icmp ult i64 %indvars.iv206, %75
  br i1 %89, label %.lr.ph173, label %._crit_edge174

.lr.ph173:                                        ; preds = %.preheader, %102
  %indvars.iv203 = phi i64 [ %indvars.iv.next204, %102 ], [ %74, %.preheader ]
  %90 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv203
  %91 = load i32, ptr %90, align 4, !tbaa !23
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i32, ptr %28, i64 %92
  %94 = load i32, ptr %93, align 4, !tbaa !23
  %95 = icmp eq i32 %94, -1
  br i1 %95, label %96, label %102

96:                                               ; preds = %.lr.ph173
  %97 = getelementptr inbounds i32, ptr %18, i64 %92
  %98 = load i32, ptr %97, align 4, !tbaa !23
  %99 = getelementptr i8, ptr %97, i64 4
  %100 = load i32, ptr %99, align 4, !tbaa !23
  %101 = icmp slt i32 %98, %100
  br i1 %101, label %._crit_edge174, label %102

102:                                              ; preds = %.lr.ph173, %96
  %indvars.iv.next204 = add nsw i64 %indvars.iv203, -1
  %103 = icmp sgt i64 %indvars.iv.next204, %indvars.iv206
  br i1 %103, label %.lr.ph173, label %._crit_edge174, !llvm.loop !34

._crit_edge174:                                   ; preds = %102, %96, %.preheader
  %.pre-phi220 = phi i64 [ %79, %.preheader ], [ %79, %102 ], [ %92, %96 ]
  %.0159 = phi i32 [ %78, %.preheader ], [ %78, %102 ], [ %91, %96 ]
  %104 = add nsw i32 %.0156177, 1
  %105 = getelementptr inbounds i32, ptr %26, i64 %.pre-phi220
  store i32 %.0156177, ptr %105, align 4, !tbaa !23
  %106 = getelementptr inbounds i32, ptr %26, i64 %79
  store i32 %.0156177, ptr %106, align 4, !tbaa !23
  store i32 %.0159, ptr %80, align 4, !tbaa !23
  %107 = getelementptr inbounds i32, ptr %28, i64 %.pre-phi220
  store i32 %78, ptr %107, align 4, !tbaa !23
  br label %108

108:                                              ; preds = %76, %._crit_edge174
  %.1157 = phi i32 [ %104, %._crit_edge174 ], [ %.0156177, %76 ]
  %indvars.iv.next207 = add nuw nsw i64 %indvars.iv206, 1
  %exitcond210.not = icmp eq i64 %indvars.iv.next207, %wide.trip.count209
  br i1 %exitcond210.not, label %._crit_edge200, label %76, !llvm.loop !35

._crit_edge182.loopexit:                          ; preds = %83
  %109 = trunc nuw nsw i64 %indvars.iv206 to i32
  br label %._crit_edge182

._crit_edge182:                                   ; preds = %._crit_edge182.loopexit, %._crit_edge.thread, %._crit_edge
  %.0156.lcssa = phi i32 [ 0, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.0156177, %._crit_edge182.loopexit ]
  %.0152.lcssa = phi i32 [ 0, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %109, %._crit_edge182.loopexit ]
  %110 = icmp slt i32 %.0152.lcssa, %14
  br i1 %110, label %.lr.ph199, label %._crit_edge200

.lr.ph199:                                        ; preds = %._crit_edge182
  %111 = getelementptr inbounds i8, ptr %0, i64 24
  %112 = zext i32 %.0152.lcssa to i64
  br label %113

113:                                              ; preds = %.lr.ph199, %166
  %indvars.iv214 = phi i64 [ %112, %.lr.ph199 ], [ %indvars.iv.next215, %166 ]
  %.2158196 = phi i32 [ %.0156.lcssa, %.lr.ph199 ], [ %.3, %166 ]
  %114 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv214
  %115 = load i32, ptr %114, align 4, !tbaa !23
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i32, ptr %28, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !23
  %119 = icmp eq i32 %118, -1
  br i1 %119, label %120, label %166

120:                                              ; preds = %113
  %121 = getelementptr inbounds i32, ptr %18, i64 %116
  %122 = load i32, ptr %121, align 4, !tbaa !23
  %123 = getelementptr i8, ptr %121, i64 4
  %124 = load i32, ptr %123, align 4, !tbaa !23
  %125 = icmp slt i32 %122, %124
  br i1 %125, label %.lr.ph193, label %._crit_edge194

.lr.ph193:                                        ; preds = %120
  %126 = mul nsw i32 %115, %16
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds float, ptr %20, i64 %127
  %129 = sext i32 %122 to i64
  br label %130

130:                                              ; preds = %.lr.ph193, %158
  %indvars.iv211 = phi i64 [ %129, %.lr.ph193 ], [ %indvars.iv.next212, %158 ]
  %.0191 = phi float [ 0.000000e+00, %.lr.ph193 ], [ %.2, %158 ]
  %.1160189 = phi i32 [ %115, %.lr.ph193 ], [ %.2161, %158 ]
  %.0162188 = phi i32 [ -1, %.lr.ph193 ], [ %.1163, %158 ]
  %131 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv211
  %132 = load i32, ptr %131, align 4, !tbaa !23
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds i32, ptr %28, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !23
  %136 = icmp eq i32 %135, -1
  br i1 %136, label %137, label %158

137:                                              ; preds = %130
  %138 = mul nsw i32 %132, %16
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds float, ptr %20, i64 %139
  %141 = load float, ptr %111, align 8, !tbaa !36
  %142 = tail call i32 @__AreAllVwgtsBelowFast(i32 noundef %16, ptr noundef %128, ptr noundef %140, float noundef %141)
  %.not168 = icmp eq i32 %142, 0
  br i1 %.not168, label %158, label %143

143:                                              ; preds = %137
  %.not169 = icmp eq i32 %.1160189, %115
  br i1 %.not169, label %149, label %144

144:                                              ; preds = %143
  %145 = mul nsw i32 %.1160189, %16
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds float, ptr %20, i64 %146
  %148 = tail call float @__BetterVBalance(i32 noundef %16, i32 noundef %2, ptr noundef %128, ptr noundef %147, ptr noundef %140)
  br label %149

149:                                              ; preds = %144, %143
  %.1 = phi float [ %148, %144 ], [ %.0191, %143 ]
  %150 = fcmp ogt float %.1, 0.000000e+00
  br i1 %150, label %._crit_edge217, label %151

._crit_edge217:                                   ; preds = %149
  %.phi.trans.insert = getelementptr inbounds i32, ptr %24, i64 %indvars.iv211
  %.pre = load i32, ptr %.phi.trans.insert, align 4, !tbaa !23
  br label %158

151:                                              ; preds = %149
  %152 = fpext float %.1 to double
  %153 = fcmp ogt double %152, -1.000000e-02
  br i1 %153, label %154, label %158

154:                                              ; preds = %151
  %155 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv211
  %156 = load i32, ptr %155, align 4, !tbaa !23
  %157 = icmp slt i32 %.0162188, %156
  %spec.select = tail call i32 @llvm.smax.i32(i32 %.0162188, i32 %156)
  %spec.select225 = select i1 %157, i32 %132, i32 %.1160189
  br label %158

158:                                              ; preds = %154, %._crit_edge217, %130, %137, %151
  %.1163 = phi i32 [ %.0162188, %151 ], [ %.0162188, %137 ], [ %.0162188, %130 ], [ %.pre, %._crit_edge217 ], [ %spec.select, %154 ]
  %.2161 = phi i32 [ %.1160189, %151 ], [ %.1160189, %137 ], [ %.1160189, %130 ], [ %132, %._crit_edge217 ], [ %spec.select225, %154 ]
  %.2 = phi float [ %.1, %151 ], [ %.0191, %137 ], [ %.0191, %130 ], [ %.1, %._crit_edge217 ], [ %.1, %154 ]
  %indvars.iv.next212 = add nsw i64 %indvars.iv211, 1
  %159 = load i32, ptr %123, align 4, !tbaa !23
  %160 = sext i32 %159 to i64
  %161 = icmp slt i64 %indvars.iv.next212, %160
  br i1 %161, label %130, label %._crit_edge194.loopexit, !llvm.loop !37

._crit_edge194.loopexit:                          ; preds = %158
  %.pre218 = sext i32 %.2161 to i64
  br label %._crit_edge194

._crit_edge194:                                   ; preds = %._crit_edge194.loopexit, %120
  %.pre-phi = phi i64 [ %.pre218, %._crit_edge194.loopexit ], [ %116, %120 ]
  %.1160.lcssa = phi i32 [ %.2161, %._crit_edge194.loopexit ], [ %115, %120 ]
  %162 = add nsw i32 %.2158196, 1
  %163 = getelementptr inbounds i32, ptr %26, i64 %.pre-phi
  store i32 %.2158196, ptr %163, align 4, !tbaa !23
  %164 = getelementptr inbounds i32, ptr %26, i64 %116
  store i32 %.2158196, ptr %164, align 4, !tbaa !23
  store i32 %.1160.lcssa, ptr %117, align 4, !tbaa !23
  %165 = getelementptr inbounds i32, ptr %28, i64 %.pre-phi
  store i32 %115, ptr %165, align 4, !tbaa !23
  br label %166

166:                                              ; preds = %113, %._crit_edge194
  %.3 = phi i32 [ %162, %._crit_edge194 ], [ %.2158196, %113 ]
  %indvars.iv.next215 = add nuw nsw i64 %indvars.iv214, 1
  %167 = trunc nuw i64 %indvars.iv.next215 to i32
  %168 = icmp sgt i32 %14, %167
  br i1 %168, label %113, label %._crit_edge200, !llvm.loop !38

._crit_edge200:                                   ; preds = %108, %166, %._crit_edge182
  %.2158.lcssa = phi i32 [ %.0156.lcssa, %._crit_edge182 ], [ %.3, %166 ], [ %.1157, %108 ]
  %169 = load i32, ptr %4, align 4, !tbaa !5
  %170 = and i32 %169, 1
  %.not167 = icmp eq i32 %170, 0
  br i1 %.not167, label %176, label %171

171:                                              ; preds = %._crit_edge200
  %172 = tail call double @__seconds() #3
  %173 = getelementptr inbounds i8, ptr %0, i64 120
  %174 = load double, ptr %173, align 8, !tbaa !14
  %175 = fadd double %172, %174
  store double %175, ptr %173, align 8, !tbaa !14
  br label %176

176:                                              ; preds = %171, %._crit_edge200
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %14) #3
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %14) #3
  tail call void @__CreateCoarseGraph(ptr noundef nonnull %0, ptr noundef %1, i32 noundef %.2158.lcssa, ptr noundef %28, ptr noundef %29) #3
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %14) #3
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %14) #3
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>) #2

attributes #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 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 4}
!6 = !{!"controldef", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !10, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !11, i64 48, !13, i64 104, !13, i64 112, !13, i64 120, !13, 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}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"workspacedef", !12, i64 0, !7, i64 8, !7, i64 12, !12, i64 16, !12, i64 24, !7, i64 32, !12, i64 40, !12, i64 48}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"double", !8, i64 0}
!14 = !{!6, !13, i64 120}
!15 = !{!16, !7, i64 16}
!16 = !{!"graphdef", !12, i64 0, !12, i64 8, !7, i64 16, !7, i64 20, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !7, i64 88, !7, i64 92, !12, i64 96, !12, i64 104, !7, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !7, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208}
!17 = !{!16, !7, i64 176}
!18 = !{!16, !12, i64 24}
!19 = !{!16, !12, i64 184}
!20 = !{!16, !12, i64 48}
!21 = !{!16, !12, i64 56}
!22 = !{!16, !12, i64 80}
!23 = !{!7, !7, i64 0}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = !{!28}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !30, !31, !32}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.isvectorized", i32 1}
!32 = !{!"llvm.loop.unroll.runtime.disable"}
!33 = distinct !{!33, !30, !31}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = !{!6, !10, i64 24}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}


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