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

; 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

; Function Attrs: nounwind uwtable
define dso_local void @__MCMatch_SHEM(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %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 ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  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
  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 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.controldef, ptr %24, i32 0, i32 1
  %26 = load i32, ptr %25, align 4, !tbaa !9
  %27 = and i32 %26, 1
  %28 = icmp ne i32 %27, 0
  br i1 %28, label %29, label %35

29:                                               ; preds = %2
  %30 = call double @__seconds()
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.controldef, ptr %31, i32 0, i32 14
  %33 = load double, ptr %32, align 8, !tbaa !15
  %34 = fsub double %33, %30
  store double %34, ptr %32, align 8, !tbaa !15
  br label %35

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

83:                                               ; preds = %123, %35
  %84 = load i32, ptr %5, align 4, !tbaa !18
  %85 = load i32, ptr %9, align 4, !tbaa !18
  %86 = icmp slt i32 %84, %85
  br i1 %86, label %87, label %126

87:                                               ; preds = %83
  %88 = load ptr, ptr %15, align 8, !tbaa !5
  %89 = load i32, ptr %5, align 4, !tbaa !18
  %90 = add nsw i32 %89, 1
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %88, i64 %91
  %93 = load i32, ptr %92, align 4, !tbaa !18
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = load i32, ptr %5, align 4, !tbaa !18
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i32, ptr %94, i64 %96
  %98 = load i32, ptr %97, align 4, !tbaa !18
  %99 = sub nsw i32 %93, %98
  %100 = load i32, ptr %14, align 4, !tbaa !18
  %101 = icmp sgt i32 %99, %100
  br i1 %101, label %102, label %104

102:                                              ; preds = %87
  %103 = load i32, ptr %14, align 4, !tbaa !18
  br label %117

104:                                              ; preds = %87
  %105 = load ptr, ptr %15, align 8, !tbaa !5
  %106 = load i32, ptr %5, align 4, !tbaa !18
  %107 = add nsw i32 %106, 1
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %105, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !18
  %111 = load ptr, ptr %15, align 8, !tbaa !5
  %112 = load i32, ptr %5, align 4, !tbaa !18
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds i32, ptr %111, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !18
  %116 = sub nsw i32 %110, %115
  br label %117

117:                                              ; preds = %104, %102
  %118 = phi i32 [ %103, %102 ], [ %116, %104 ]
  %119 = load ptr, ptr %20, align 8, !tbaa !5
  %120 = load i32, ptr %5, align 4, !tbaa !18
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds i32, ptr %119, i64 %121
  store i32 %118, ptr %122, align 4, !tbaa !18
  br label %123

123:                                              ; preds = %117
  %124 = load i32, ptr %5, align 4, !tbaa !18
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %5, align 4, !tbaa !18
  br label %83, !llvm.loop !25

126:                                              ; preds = %83
  %127 = load i32, ptr %9, align 4, !tbaa !18
  %128 = load i32, ptr %14, align 4, !tbaa !18
  %129 = load ptr, ptr %20, align 8, !tbaa !5
  %130 = load ptr, ptr %22, align 8, !tbaa !5
  %131 = load ptr, ptr %21, align 8, !tbaa !5
  call void @__BucketSortKeysInc(i32 noundef %127, i32 noundef %128, ptr noundef %129, ptr noundef %130, ptr noundef %131)
  store i32 0, ptr %10, align 4, !tbaa !18
  store i32 0, ptr %6, align 4, !tbaa !18
  br label %132

132:                                              ; preds = %223, %126
  %133 = load i32, ptr %6, align 4, !tbaa !18
  %134 = load i32, ptr %9, align 4, !tbaa !18
  %135 = icmp slt i32 %133, %134
  br i1 %135, label %136, label %226

136:                                              ; preds = %132
  %137 = load ptr, ptr %21, align 8, !tbaa !5
  %138 = load i32, ptr %6, align 4, !tbaa !18
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds i32, ptr %137, i64 %139
  %141 = load i32, ptr %140, align 4, !tbaa !18
  store i32 %141, ptr %5, align 4, !tbaa !18
  %142 = load ptr, ptr %18, align 8, !tbaa !5
  %143 = load i32, ptr %5, align 4, !tbaa !18
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds i32, ptr %142, i64 %144
  %146 = load i32, ptr %145, align 4, !tbaa !18
  %147 = icmp eq i32 %146, -1
  br i1 %147, label %148, label %222

148:                                              ; preds = %136
  %149 = load ptr, ptr %15, align 8, !tbaa !5
  %150 = load i32, ptr %5, align 4, !tbaa !18
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds i32, ptr %149, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !18
  %154 = load ptr, ptr %15, align 8, !tbaa !5
  %155 = load i32, ptr %5, align 4, !tbaa !18
  %156 = add nsw i32 %155, 1
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds i32, ptr %154, i64 %157
  %159 = load i32, ptr %158, align 4, !tbaa !18
  %160 = icmp slt i32 %153, %159
  br i1 %160, label %161, label %162

161:                                              ; preds = %148
  br label %226

162:                                              ; preds = %148
  %163 = load i32, ptr %5, align 4, !tbaa !18
  store i32 %163, ptr %12, align 4, !tbaa !18
  %164 = load i32, ptr %9, align 4, !tbaa !18
  %165 = sub nsw i32 %164, 1
  store i32 %165, ptr %7, align 4, !tbaa !18
  br label %166

166:                                              ; preds = %198, %162
  %167 = load i32, ptr %7, align 4, !tbaa !18
  %168 = load i32, ptr %6, align 4, !tbaa !18
  %169 = icmp sgt i32 %167, %168
  br i1 %169, label %170, label %201

170:                                              ; preds = %166
  %171 = load ptr, ptr %21, align 8, !tbaa !5
  %172 = load i32, ptr %7, align 4, !tbaa !18
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %171, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !18
  store i32 %175, ptr %8, align 4, !tbaa !18
  %176 = load ptr, ptr %18, align 8, !tbaa !5
  %177 = load i32, ptr %8, align 4, !tbaa !18
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i32, ptr %176, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !18
  %181 = icmp eq i32 %180, -1
  br i1 %181, label %182, label %197

182:                                              ; preds = %170
  %183 = load ptr, ptr %15, align 8, !tbaa !5
  %184 = load i32, ptr %8, align 4, !tbaa !18
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i32, ptr %183, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !18
  %188 = load ptr, ptr %15, align 8, !tbaa !5
  %189 = load i32, ptr %8, align 4, !tbaa !18
  %190 = add nsw i32 %189, 1
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %188, i64 %191
  %193 = load i32, ptr %192, align 4, !tbaa !18
  %194 = icmp slt i32 %187, %193
  br i1 %194, label %195, label %197

195:                                              ; preds = %182
  %196 = load i32, ptr %8, align 4, !tbaa !18
  store i32 %196, ptr %12, align 4, !tbaa !18
  br label %201

197:                                              ; preds = %182, %170
  br label %198

198:                                              ; preds = %197
  %199 = load i32, ptr %7, align 4, !tbaa !18
  %200 = add nsw i32 %199, -1
  store i32 %200, ptr %7, align 4, !tbaa !18
  br label %166, !llvm.loop !27

201:                                              ; preds = %195, %166
  %202 = load i32, ptr %10, align 4, !tbaa !18
  %203 = add nsw i32 %202, 1
  store i32 %203, ptr %10, align 4, !tbaa !18
  %204 = load ptr, ptr %19, align 8, !tbaa !5
  %205 = load i32, ptr %12, align 4, !tbaa !18
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds i32, ptr %204, i64 %206
  store i32 %202, ptr %207, align 4, !tbaa !18
  %208 = load ptr, ptr %19, align 8, !tbaa !5
  %209 = load i32, ptr %5, align 4, !tbaa !18
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %208, i64 %210
  store i32 %202, ptr %211, align 4, !tbaa !18
  %212 = load i32, ptr %12, align 4, !tbaa !18
  %213 = load ptr, ptr %18, align 8, !tbaa !5
  %214 = load i32, ptr %5, align 4, !tbaa !18
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds i32, ptr %213, i64 %215
  store i32 %212, ptr %216, align 4, !tbaa !18
  %217 = load i32, ptr %5, align 4, !tbaa !18
  %218 = load ptr, ptr %18, align 8, !tbaa !5
  %219 = load i32, ptr %12, align 4, !tbaa !18
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i32, ptr %218, i64 %220
  store i32 %217, ptr %221, align 4, !tbaa !18
  br label %222

222:                                              ; preds = %201, %136
  br label %223

223:                                              ; preds = %222
  %224 = load i32, ptr %6, align 4, !tbaa !18
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr %6, align 4, !tbaa !18
  br label %132, !llvm.loop !28

226:                                              ; preds = %161, %132
  br label %227

227:                                              ; preds = %335, %226
  %228 = load i32, ptr %6, align 4, !tbaa !18
  %229 = load i32, ptr %9, align 4, !tbaa !18
  %230 = icmp slt i32 %228, %229
  br i1 %230, label %231, label %338

231:                                              ; preds = %227
  %232 = load ptr, ptr %21, align 8, !tbaa !5
  %233 = load i32, ptr %6, align 4, !tbaa !18
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds i32, ptr %232, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !18
  store i32 %236, ptr %5, align 4, !tbaa !18
  %237 = load ptr, ptr %18, align 8, !tbaa !5
  %238 = load i32, ptr %5, align 4, !tbaa !18
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds i32, ptr %237, i64 %239
  %241 = load i32, ptr %240, align 4, !tbaa !18
  %242 = icmp eq i32 %241, -1
  br i1 %242, label %243, label %334

243:                                              ; preds = %231
  %244 = load i32, ptr %5, align 4, !tbaa !18
  store i32 %244, ptr %12, align 4, !tbaa !18
  store i32 0, ptr %13, align 4, !tbaa !18
  %245 = load ptr, ptr %15, align 8, !tbaa !5
  %246 = load i32, ptr %5, align 4, !tbaa !18
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %245, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !18
  store i32 %249, ptr %7, align 4, !tbaa !18
  br label %250

250:                                              ; preds = %310, %243
  %251 = load i32, ptr %7, align 4, !tbaa !18
  %252 = load ptr, ptr %15, align 8, !tbaa !5
  %253 = load i32, ptr %5, align 4, !tbaa !18
  %254 = add nsw i32 %253, 1
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %252, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !18
  %258 = icmp slt i32 %251, %257
  br i1 %258, label %259, label %313

259:                                              ; preds = %250
  %260 = load ptr, ptr %16, align 8, !tbaa !5
  %261 = load i32, ptr %7, align 4, !tbaa !18
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %260, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !18
  store i32 %264, ptr %8, align 4, !tbaa !18
  %265 = load ptr, ptr %18, align 8, !tbaa !5
  %266 = load i32, ptr %8, align 4, !tbaa !18
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %265, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !18
  %270 = icmp eq i32 %269, -1
  br i1 %270, label %271, label %309

271:                                              ; preds = %259
  %272 = load i32, ptr %13, align 4, !tbaa !18
  %273 = load ptr, ptr %17, align 8, !tbaa !5
  %274 = load i32, ptr %7, align 4, !tbaa !18
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds i32, ptr %273, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !18
  %278 = icmp sle i32 %272, %277
  br i1 %278, label %279, label %309

279:                                              ; preds = %271
  %280 = load i32, ptr %11, align 4, !tbaa !18
  %281 = load ptr, ptr %23, align 8, !tbaa !5
  %282 = load i32, ptr %5, align 4, !tbaa !18
  %283 = load i32, ptr %11, align 4, !tbaa !18
  %284 = mul nsw i32 %282, %283
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds float, ptr %281, i64 %285
  %287 = load ptr, ptr %23, align 8, !tbaa !5
  %288 = load i32, ptr %8, align 4, !tbaa !18
  %289 = load i32, ptr %11, align 4, !tbaa !18
  %290 = mul nsw i32 %288, %289
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds float, ptr %287, i64 %291
  %293 = load ptr, ptr %3, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.controldef, ptr %293, i32 0, i32 6
  %295 = load float, ptr %294, align 8, !tbaa !29
  %296 = call i32 @__AreAllVwgtsBelowFast(i32 noundef %280, ptr noundef %286, ptr noundef %292, float noundef %295)
  %297 = icmp ne i32 %296, 0
  br i1 %297, label %298, label %309

298:                                              ; preds = %279
  %299 = load ptr, ptr %17, align 8, !tbaa !5
  %300 = load i32, ptr %7, align 4, !tbaa !18
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %299, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !18
  store i32 %303, ptr %13, align 4, !tbaa !18
  %304 = load ptr, ptr %16, align 8, !tbaa !5
  %305 = load i32, ptr %7, align 4, !tbaa !18
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i32, ptr %304, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !18
  store i32 %308, ptr %12, align 4, !tbaa !18
  br label %309

309:                                              ; preds = %298, %279, %271, %259
  br label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %7, align 4, !tbaa !18
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %7, align 4, !tbaa !18
  br label %250, !llvm.loop !30

313:                                              ; preds = %250
  %314 = load i32, ptr %10, align 4, !tbaa !18
  %315 = add nsw i32 %314, 1
  store i32 %315, ptr %10, align 4, !tbaa !18
  %316 = load ptr, ptr %19, align 8, !tbaa !5
  %317 = load i32, ptr %12, align 4, !tbaa !18
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i32, ptr %316, i64 %318
  store i32 %314, ptr %319, align 4, !tbaa !18
  %320 = load ptr, ptr %19, align 8, !tbaa !5
  %321 = load i32, ptr %5, align 4, !tbaa !18
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i32, ptr %320, i64 %322
  store i32 %314, ptr %323, align 4, !tbaa !18
  %324 = load i32, ptr %12, align 4, !tbaa !18
  %325 = load ptr, ptr %18, align 8, !tbaa !5
  %326 = load i32, ptr %5, align 4, !tbaa !18
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %325, i64 %327
  store i32 %324, ptr %328, align 4, !tbaa !18
  %329 = load i32, ptr %5, align 4, !tbaa !18
  %330 = load ptr, ptr %18, align 8, !tbaa !5
  %331 = load i32, ptr %12, align 4, !tbaa !18
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds i32, ptr %330, i64 %332
  store i32 %329, ptr %333, align 4, !tbaa !18
  br label %334

334:                                              ; preds = %313, %231
  br label %335

335:                                              ; preds = %334
  %336 = load i32, ptr %6, align 4, !tbaa !18
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %6, align 4, !tbaa !18
  br label %227, !llvm.loop !31

338:                                              ; preds = %227
  %339 = load ptr, ptr %3, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.controldef, ptr %339, i32 0, i32 1
  %341 = load i32, ptr %340, align 4, !tbaa !9
  %342 = and i32 %341, 1
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %344, label %350

344:                                              ; preds = %338
  %345 = call double @__seconds()
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.controldef, ptr %346, i32 0, i32 14
  %348 = load double, ptr %347, align 8, !tbaa !15
  %349 = fadd double %348, %345
  store double %349, ptr %347, align 8, !tbaa !15
  br label %350

350:                                              ; preds = %344, %338
  %351 = load ptr, ptr %3, align 8, !tbaa !5
  %352 = load i32, ptr %9, align 4, !tbaa !18
  call void @__idxwspacefree(ptr noundef %351, i32 noundef %352)
  %353 = load ptr, ptr %3, align 8, !tbaa !5
  %354 = load i32, ptr %9, align 4, !tbaa !18
  call void @__idxwspacefree(ptr noundef %353, i32 noundef %354)
  %355 = load ptr, ptr %3, align 8, !tbaa !5
  %356 = load ptr, ptr %4, align 8, !tbaa !5
  %357 = load i32, ptr %10, align 4, !tbaa !18
  %358 = load ptr, ptr %18, align 8, !tbaa !5
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  call void @__CreateCoarseGraph(ptr noundef %355, ptr noundef %356, i32 noundef %357, ptr noundef %358, ptr noundef %359)
  %360 = load ptr, ptr %3, align 8, !tbaa !5
  %361 = load i32, ptr %9, align 4, !tbaa !18
  call void @__idxwspacefree(ptr noundef %360, i32 noundef %361)
  %362 = load ptr, ptr %3, align 8, !tbaa !5
  %363 = load i32, ptr %9, align 4, !tbaa !18
  call void @__idxwspacefree(ptr noundef %362, i32 noundef %363)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  ret void
}

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

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, !11, i64 4}
!10 = !{!"controldef", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !12, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !13, i64 48, !14, i64 104, !14, i64 112, !14, i64 120, !14, 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}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!"workspacedef", !6, i64 0, !11, i64 8, !11, i64 12, !6, i64 16, !6, i64 24, !11, i64 32, !6, i64 40, !6, i64 48}
!14 = !{!"double", !7, i64 0}
!15 = !{!10, !14, i64 120}
!16 = !{!17, !11, i64 16}
!17 = !{!"graphdef", !6, i64 0, !6, i64 8, !11, i64 16, !11, 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, !11, i64 88, !11, i64 92, !6, i64 96, !6, i64 104, !11, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !11, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208}
!18 = !{!11, !11, i64 0}
!19 = !{!17, !11, i64 176}
!20 = !{!17, !6, i64 24}
!21 = !{!17, !6, i64 184}
!22 = !{!17, !6, i64 48}
!23 = !{!17, !6, i64 56}
!24 = !{!17, !6, i64 80}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}
!29 = !{!10, !12, i64 24}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !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

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

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

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

._crit_edge.thread:                               ; preds = %11
  tail call void @__BucketSortKeysInc(i32 noundef %13, i32 noundef %37, ptr noundef %30, ptr noundef %29, ptr noundef %28) #3
  br label %._crit_edge165

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

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %39 = shl nuw nsw i64 %wide.trip.count, 2
  %scevgep = getelementptr i8, ptr %30, i64 %39
  %40 = getelementptr i8, ptr %17, i64 %39
  %scevgep208 = getelementptr i8, ptr %40, i64 4
  %bound0 = icmp ult ptr %30, %scevgep208
  %bound1 = icmp ult ptr %17, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph.preheader215, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483640
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %37, 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 ]
  %41 = or disjoint i64 %index, 1
  %42 = getelementptr inbounds i32, ptr %17, i64 %41
  %43 = getelementptr inbounds i8, ptr %42, i64 16
  %wide.load = load <4 x i32>, ptr %42, align 4, !tbaa !23, !alias.scope !24
  %wide.load209 = load <4 x i32>, ptr %43, align 4, !tbaa !23, !alias.scope !24
  %44 = getelementptr inbounds i32, ptr %17, i64 %index
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  %wide.load210 = load <4 x i32>, ptr %44, align 4, !tbaa !23, !alias.scope !24
  %wide.load211 = load <4 x i32>, ptr %45, align 4, !tbaa !23, !alias.scope !24
  %46 = sub nsw <4 x i32> %wide.load, %wide.load210
  %47 = sub nsw <4 x i32> %wide.load209, %wide.load211
  %48 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %46, <4 x i32> %broadcast.splat)
  %49 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %47, <4 x i32> %broadcast.splat)
  %50 = getelementptr inbounds i32, ptr %30, i64 %index
  %51 = getelementptr inbounds i8, ptr %50, i64 16
  store <4 x i32> %48, ptr %50, align 4, !tbaa !23, !alias.scope !27, !noalias !24
  store <4 x i32> %49, ptr %51, align 4, !tbaa !23, !alias.scope !27, !noalias !24
  %index.next = add nuw i64 %index, 8
  %52 = icmp eq i64 %index.next, %n.vec
  br i1 %52, 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.preheader215

.lr.ph.preheader215:                              ; 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.preheader215
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  %53 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.next.prol
  %54 = load i32, ptr %53, align 4, !tbaa !23
  %55 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.ph
  %56 = load i32, ptr %55, align 4, !tbaa !23
  %57 = sub nsw i32 %54, %56
  %..prol = tail call i32 @llvm.smin.i32(i32 %57, i32 %37)
  %58 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv.ph
  store i32 %..prol, ptr %58, align 4, !tbaa !23
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader215
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader215 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %59 = add nsw i64 %wide.trip.count, -1
  %60 = icmp eq i64 %indvars.iv.ph, %59
  br i1 %60, 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
  %61 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.next
  %62 = load i32, ptr %61, align 4, !tbaa !23
  %63 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv
  %64 = load i32, ptr %63, align 4, !tbaa !23
  %65 = sub nsw i32 %62, %64
  %. = tail call i32 @llvm.smin.i32(i32 %65, i32 %37)
  %66 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv
  store i32 %., ptr %66, align 4, !tbaa !23
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %67 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.next.1
  %68 = load i32, ptr %67, align 4, !tbaa !23
  %69 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.next
  %70 = load i32, ptr %69, align 4, !tbaa !23
  %71 = sub nsw i32 %68, %70
  %..1 = tail call i32 @llvm.smin.i32(i32 %71, i32 %37)
  %72 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv.next
  store i32 %..1, ptr %72, 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 %13, i32 noundef %37, ptr noundef nonnull %30, ptr noundef %29, ptr noundef %28) #3
  br i1 %38, label %.lr.ph164, label %._crit_edge165

.lr.ph164:                                        ; preds = %._crit_edge
  %.0138154 = add nsw i32 %13, -1
  %73 = add nsw i64 %31, -1
  %74 = zext nneg i32 %.0138154 to i64
  %wide.trip.count191 = zext nneg i32 %13 to i64
  br label %75

75:                                               ; preds = %.lr.ph164, %107
  %indvars.iv188 = phi i64 [ 0, %.lr.ph164 ], [ %indvars.iv.next189, %107 ]
  %.0140160 = phi i32 [ 0, %.lr.ph164 ], [ %.1141, %107 ]
  %76 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv188
  %77 = load i32, ptr %76, align 4, !tbaa !23
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds i32, ptr %27, i64 %78
  %80 = load i32, ptr %79, align 4, !tbaa !23
  %81 = icmp eq i32 %80, -1
  br i1 %81, label %82, label %107

82:                                               ; preds = %75
  %83 = getelementptr inbounds i32, ptr %17, i64 %78
  %84 = load i32, ptr %83, align 4, !tbaa !23
  %85 = getelementptr i8, ptr %83, i64 4
  %86 = load i32, ptr %85, align 4, !tbaa !23
  %87 = icmp slt i32 %84, %86
  br i1 %87, label %._crit_edge165.loopexit, label %.preheader

.preheader:                                       ; preds = %82
  %88 = icmp ult i64 %indvars.iv188, %74
  br i1 %88, label %.lr.ph156, label %._crit_edge157

.lr.ph156:                                        ; preds = %.preheader, %101
  %indvars.iv185 = phi i64 [ %indvars.iv.next186, %101 ], [ %73, %.preheader ]
  %89 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv185
  %90 = load i32, ptr %89, align 4, !tbaa !23
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %27, i64 %91
  %93 = load i32, ptr %92, align 4, !tbaa !23
  %94 = icmp eq i32 %93, -1
  br i1 %94, label %95, label %101

95:                                               ; preds = %.lr.ph156
  %96 = getelementptr inbounds i32, ptr %17, i64 %91
  %97 = load i32, ptr %96, align 4, !tbaa !23
  %98 = getelementptr i8, ptr %96, i64 4
  %99 = load i32, ptr %98, align 4, !tbaa !23
  %100 = icmp slt i32 %97, %99
  br i1 %100, label %._crit_edge157, label %101

101:                                              ; preds = %.lr.ph156, %95
  %indvars.iv.next186 = add nsw i64 %indvars.iv185, -1
  %102 = icmp sgt i64 %indvars.iv.next186, %indvars.iv188
  br i1 %102, label %.lr.ph156, label %._crit_edge157, !llvm.loop !34

._crit_edge157:                                   ; preds = %101, %95, %.preheader
  %.pre-phi200 = phi i64 [ %78, %.preheader ], [ %78, %101 ], [ %91, %95 ]
  %.0142 = phi i32 [ %77, %.preheader ], [ %77, %101 ], [ %90, %95 ]
  %103 = add nsw i32 %.0140160, 1
  %104 = getelementptr inbounds i32, ptr %25, i64 %.pre-phi200
  store i32 %.0140160, ptr %104, align 4, !tbaa !23
  %105 = getelementptr inbounds i32, ptr %25, i64 %78
  store i32 %.0140160, ptr %105, align 4, !tbaa !23
  store i32 %.0142, ptr %79, align 4, !tbaa !23
  %106 = getelementptr inbounds i32, ptr %27, i64 %.pre-phi200
  store i32 %77, ptr %106, align 4, !tbaa !23
  br label %107

107:                                              ; preds = %75, %._crit_edge157
  %.1141 = phi i32 [ %103, %._crit_edge157 ], [ %.0140160, %75 ]
  %indvars.iv.next189 = add nuw nsw i64 %indvars.iv188, 1
  %exitcond192.not = icmp eq i64 %indvars.iv.next189, %wide.trip.count191
  br i1 %exitcond192.not, label %._crit_edge182, label %75, !llvm.loop !35

._crit_edge165.loopexit:                          ; preds = %82
  %108 = trunc nuw nsw i64 %indvars.iv188 to i32
  br label %._crit_edge165

._crit_edge165:                                   ; preds = %._crit_edge165.loopexit, %._crit_edge.thread, %._crit_edge
  %.0140.lcssa = phi i32 [ 0, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.0140160, %._crit_edge165.loopexit ]
  %.0137.lcssa = phi i32 [ 0, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %108, %._crit_edge165.loopexit ]
  %109 = icmp slt i32 %.0137.lcssa, %13
  br i1 %109, label %.lr.ph181, label %._crit_edge182

.lr.ph181:                                        ; preds = %._crit_edge165
  %110 = getelementptr inbounds i8, ptr %0, i64 24
  %111 = zext i32 %.0137.lcssa to i64
  br label %112

112:                                              ; preds = %.lr.ph181, %156
  %indvars.iv196 = phi i64 [ %111, %.lr.ph181 ], [ %indvars.iv.next197, %156 ]
  %.2178 = phi i32 [ %.0140.lcssa, %.lr.ph181 ], [ %.3, %156 ]
  %113 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv196
  %114 = load i32, ptr %113, align 4, !tbaa !23
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds i32, ptr %27, i64 %115
  %117 = load i32, ptr %116, align 4, !tbaa !23
  %118 = icmp eq i32 %117, -1
  br i1 %118, label %119, label %156

119:                                              ; preds = %112
  %120 = getelementptr inbounds i32, ptr %17, i64 %115
  %121 = load i32, ptr %120, align 4, !tbaa !23
  %122 = getelementptr i8, ptr %120, i64 4
  %123 = load i32, ptr %122, align 4, !tbaa !23
  %124 = icmp slt i32 %121, %123
  br i1 %124, label %.lr.ph175, label %._crit_edge176

.lr.ph175:                                        ; preds = %119
  %125 = mul nsw i32 %114, %15
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds float, ptr %19, i64 %126
  %128 = sext i32 %121 to i64
  br label %129

129:                                              ; preds = %.lr.ph175, %148
  %indvars.iv193 = phi i64 [ %128, %.lr.ph175 ], [ %indvars.iv.next194, %148 ]
  %.1143172 = phi i32 [ %114, %.lr.ph175 ], [ %.2144, %148 ]
  %.0145171 = phi i32 [ 0, %.lr.ph175 ], [ %.1146, %148 ]
  %130 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv193
  %131 = load i32, ptr %130, align 4, !tbaa !23
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %27, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !23
  %135 = icmp eq i32 %134, -1
  br i1 %135, label %136, label %148

136:                                              ; preds = %129
  %137 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv193
  %138 = load i32, ptr %137, align 4, !tbaa !23
  %.not151 = icmp sgt i32 %.0145171, %138
  br i1 %.not151, label %148, label %139

139:                                              ; preds = %136
  %140 = mul nsw i32 %131, %15
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds float, ptr %19, i64 %141
  %143 = load float, ptr %110, align 8, !tbaa !36
  %144 = tail call i32 @__AreAllVwgtsBelowFast(i32 noundef %15, ptr noundef %127, ptr noundef %142, float noundef %143)
  %.not152 = icmp eq i32 %144, 0
  br i1 %.not152, label %148, label %145

145:                                              ; preds = %139
  %146 = load i32, ptr %137, align 4, !tbaa !23
  %147 = load i32, ptr %130, align 4, !tbaa !23
  br label %148

148:                                              ; preds = %129, %136, %139, %145
  %.1146 = phi i32 [ %146, %145 ], [ %.0145171, %139 ], [ %.0145171, %136 ], [ %.0145171, %129 ]
  %.2144 = phi i32 [ %147, %145 ], [ %.1143172, %139 ], [ %.1143172, %136 ], [ %.1143172, %129 ]
  %indvars.iv.next194 = add nsw i64 %indvars.iv193, 1
  %149 = load i32, ptr %122, align 4, !tbaa !23
  %150 = sext i32 %149 to i64
  %151 = icmp slt i64 %indvars.iv.next194, %150
  br i1 %151, label %129, label %._crit_edge176.loopexit, !llvm.loop !37

._crit_edge176.loopexit:                          ; preds = %148
  %.pre = sext i32 %.2144 to i64
  br label %._crit_edge176

._crit_edge176:                                   ; preds = %._crit_edge176.loopexit, %119
  %.pre-phi = phi i64 [ %.pre, %._crit_edge176.loopexit ], [ %115, %119 ]
  %.1143.lcssa = phi i32 [ %.2144, %._crit_edge176.loopexit ], [ %114, %119 ]
  %152 = add nsw i32 %.2178, 1
  %153 = getelementptr inbounds i32, ptr %25, i64 %.pre-phi
  store i32 %.2178, ptr %153, align 4, !tbaa !23
  %154 = getelementptr inbounds i32, ptr %25, i64 %115
  store i32 %.2178, ptr %154, align 4, !tbaa !23
  store i32 %.1143.lcssa, ptr %116, align 4, !tbaa !23
  %155 = getelementptr inbounds i32, ptr %27, i64 %.pre-phi
  store i32 %114, ptr %155, align 4, !tbaa !23
  br label %156

156:                                              ; preds = %112, %._crit_edge176
  %.3 = phi i32 [ %152, %._crit_edge176 ], [ %.2178, %112 ]
  %indvars.iv.next197 = add nuw nsw i64 %indvars.iv196, 1
  %157 = trunc nuw i64 %indvars.iv.next197 to i32
  %158 = icmp sgt i32 %13, %157
  br i1 %158, label %112, label %._crit_edge182, !llvm.loop !38

._crit_edge182:                                   ; preds = %107, %156, %._crit_edge165
  %.2.lcssa = phi i32 [ %.0140.lcssa, %._crit_edge165 ], [ %.3, %156 ], [ %.1141, %107 ]
  %159 = load i32, ptr %3, align 4, !tbaa !5
  %160 = and i32 %159, 1
  %.not150 = icmp eq i32 %160, 0
  br i1 %.not150, label %166, label %161

161:                                              ; preds = %._crit_edge182
  %162 = tail call double @__seconds() #3
  %163 = getelementptr inbounds i8, ptr %0, i64 120
  %164 = load double, ptr %163, align 8, !tbaa !14
  %165 = fadd double %162, %164
  store double %165, ptr %163, align 8, !tbaa !14
  br label %166

166:                                              ; preds = %161, %._crit_edge182
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %13) #3
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %13) #3
  tail call void @__CreateCoarseGraph(ptr noundef nonnull %0, ptr noundef %1, i32 noundef %.2.lcssa, ptr noundef %27, ptr noundef %28) #3
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %13) #3
  tail call void @__idxwspacefree(ptr noundef nonnull %0, i32 noundef %13) #3
  ret void
}

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

; 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 <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: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass