; LLVM IR from siconos/siconos :: externals/lbl/metis4/kwayvolfm.ll_ (EliminateVolSubDomainEdges)

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

%struct.graphdef = type { 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 }
%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.KeyValueType = type { i32, i32 }

@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1

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

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

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

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

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

declare void @GKfree(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 ptr @__idxset(i32 noundef, i32 noundef, ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @__EliminateVolSubDomainEdges(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %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 i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  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 4, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.graphdef, ptr %44, i32 0, i32 2
  %46 = load i32, ptr %45, align 8, !tbaa !11
  store i32 %46, ptr %15, align 4, !tbaa !9
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graphdef, ptr %47, i32 0, i32 4
  %49 = load ptr, ptr %48, align 8, !tbaa !13
  store ptr %49, ptr %30, align 8, !tbaa !5
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graphdef, ptr %50, i32 0, i32 7
  %52 = load ptr, ptr %51, align 8, !tbaa !14
  store ptr %52, ptr %31, align 8, !tbaa !5
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graphdef, ptr %53, i32 0, i32 5
  %55 = load ptr, ptr %54, align 8, !tbaa !15
  store ptr %55, ptr %32, align 8, !tbaa !5
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graphdef, ptr %56, i32 0, i32 8
  %58 = load ptr, ptr %57, align 8, !tbaa !16
  store ptr %58, ptr %33, align 8, !tbaa !5
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graphdef, ptr %59, i32 0, i32 14
  %61 = load ptr, ptr %60, align 8, !tbaa !17
  store ptr %61, ptr %35, align 8, !tbaa !5
  %62 = load i32, ptr %7, align 4, !tbaa !9
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.graphdef, ptr %63, i32 0, i32 15
  %65 = load ptr, ptr %64, align 8, !tbaa !18
  %66 = call ptr @__idxset(i32 noundef %62, i32 noundef 0, ptr noundef %65)
  store ptr %66, ptr %34, align 8, !tbaa !5
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = load i32, ptr %7, align 4, !tbaa !9
  %69 = call ptr @__idxwspacemalloc(ptr noundef %67, i32 noundef %68)
  store ptr %69, ptr %36, align 8, !tbaa !5
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = load i32, ptr %7, align 4, !tbaa !9
  %72 = call ptr @__idxwspacemalloc(ptr noundef %70, i32 noundef %71)
  store ptr %72, ptr %38, align 8, !tbaa !5
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = load i32, ptr %7, align 4, !tbaa !9
  %75 = call ptr @__idxwspacemalloc(ptr noundef %73, i32 noundef %74)
  store ptr %75, ptr %40, align 8, !tbaa !5
  %76 = load ptr, ptr %5, align 8, !tbaa !5
  %77 = load i32, ptr %15, align 4, !tbaa !9
  %78 = call ptr @__idxwspacemalloc(ptr noundef %76, i32 noundef %77)
  store ptr %78, ptr %41, align 8, !tbaa !5
  %79 = load i32, ptr %7, align 4, !tbaa !9
  %80 = load i32, ptr %7, align 4, !tbaa !9
  %81 = mul nsw i32 %79, %80
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.controldef, ptr %82, i32 0, i32 11
  %84 = getelementptr inbounds %struct.workspacedef, ptr %83, i32 0, i32 7
  %85 = load ptr, ptr %84, align 8, !tbaa !19
  %86 = call ptr @__idxset(i32 noundef %81, i32 noundef 0, ptr noundef %85)
  store ptr %86, ptr %37, align 8, !tbaa !5
  %87 = load i32, ptr %7, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = mul i64 %88, 8
  %90 = trunc i64 %89 to i32
  %91 = call ptr @__GKmalloc(i32 noundef %90, ptr noundef @.str.11)
  store ptr %91, ptr %42, align 8, !tbaa !5
  %92 = load i32, ptr %7, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = mul i64 %93, 8
  %95 = trunc i64 %94 to i32
  %96 = call ptr @__GKmalloc(i32 noundef %95, ptr noundef @.str.11)
  store ptr %96, ptr %43, align 8, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %170, %4
  %98 = load i32, ptr %9, align 4, !tbaa !9
  %99 = load i32, ptr %15, align 4, !tbaa !9
  %100 = icmp slt i32 %98, %99
  br i1 %100, label %101, label %173

101:                                              ; preds = %97
  %102 = load ptr, ptr %35, align 8, !tbaa !5
  %103 = load i32, ptr %9, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i32, ptr %102, i64 %104
  %106 = load i32, ptr %105, align 4, !tbaa !9
  store i32 %106, ptr %13, align 4, !tbaa !9
  %107 = load ptr, ptr %32, align 8, !tbaa !5
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds i32, ptr %107, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !9
  %112 = load ptr, ptr %34, align 8, !tbaa !5
  %113 = load i32, ptr %13, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds i32, ptr %112, i64 %114
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = add nsw i32 %116, %111
  store i32 %117, ptr %115, align 4, !tbaa !9
  %118 = load ptr, ptr %30, align 8, !tbaa !5
  %119 = load i32, ptr %9, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds i32, ptr %118, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !9
  store i32 %122, ptr %11, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %166, %101
  %124 = load i32, ptr %11, align 4, !tbaa !9
  %125 = load ptr, ptr %30, align 8, !tbaa !5
  %126 = load i32, ptr %9, align 4, !tbaa !9
  %127 = add nsw i32 %126, 1
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds i32, ptr %125, i64 %128
  %130 = load i32, ptr %129, align 4, !tbaa !9
  %131 = icmp slt i32 %124, %130
  br i1 %131, label %132, label %169

132:                                              ; preds = %123
  %133 = load ptr, ptr %31, align 8, !tbaa !5
  %134 = load i32, ptr %11, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i32, ptr %133, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !9
  store i32 %137, ptr %12, align 4, !tbaa !9
  %138 = load ptr, ptr %35, align 8, !tbaa !5
  %139 = load i32, ptr %12, align 4, !tbaa !9
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i32, ptr %138, i64 %140
  %142 = load i32, ptr %141, align 4, !tbaa !9
  %143 = load i32, ptr %13, align 4, !tbaa !9
  %144 = icmp ne i32 %142, %143
  br i1 %144, label %145, label %165

145:                                              ; preds = %132
  %146 = load ptr, ptr %33, align 8, !tbaa !5
  %147 = load i32, ptr %11, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds i32, ptr %146, i64 %148
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = load ptr, ptr %37, align 8, !tbaa !5
  %152 = load i32, ptr %13, align 4, !tbaa !9
  %153 = load i32, ptr %7, align 4, !tbaa !9
  %154 = mul nsw i32 %152, %153
  %155 = load ptr, ptr %35, align 8, !tbaa !5
  %156 = load i32, ptr %12, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds i32, ptr %155, i64 %157
  %159 = load i32, ptr %158, align 4, !tbaa !9
  %160 = add nsw i32 %154, %159
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds i32, ptr %151, i64 %161
  %163 = load i32, ptr %162, align 4, !tbaa !9
  %164 = add nsw i32 %163, %150
  store i32 %164, ptr %162, align 4, !tbaa !9
  br label %165

165:                                              ; preds = %145, %132
  br label %166

166:                                              ; preds = %165
  %167 = load i32, ptr %11, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %11, align 4, !tbaa !9
  br label %123, !llvm.loop !24

169:                                              ; preds = %123
  br label %170

170:                                              ; preds = %169
  %171 = load i32, ptr %9, align 4, !tbaa !9
  %172 = add nsw i32 %171, 1
  store i32 %172, ptr %9, align 4, !tbaa !9
  br label %97, !llvm.loop !26

173:                                              ; preds = %97
  %174 = load i32, ptr %7, align 4, !tbaa !9
  %175 = load ptr, ptr %34, align 8, !tbaa !5
  %176 = call i32 @__idxsum(i32 noundef %174, ptr noundef %175)
  store i32 %176, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %177

177:                                              ; preds = %197, %173
  %178 = load i32, ptr %9, align 4, !tbaa !9
  %179 = load i32, ptr %7, align 4, !tbaa !9
  %180 = icmp slt i32 %178, %179
  br i1 %180, label %181, label %200

181:                                              ; preds = %177
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = load i32, ptr %9, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds float, ptr %182, i64 %184
  %186 = load float, ptr %185, align 4, !tbaa !27
  %187 = fpext float %186 to double
  %188 = fmul double 1.250000e+00, %187
  %189 = load i32, ptr %29, align 4, !tbaa !9
  %190 = sitofp i32 %189 to double
  %191 = fmul double %188, %190
  %192 = fptosi double %191 to i32
  %193 = load ptr, ptr %36, align 8, !tbaa !5
  %194 = load i32, ptr %9, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds i32, ptr %193, i64 %195
  store i32 %192, ptr %196, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %181
  %198 = load i32, ptr %9, align 4, !tbaa !9
  %199 = add nsw i32 %198, 1
  store i32 %199, ptr %9, align 4, !tbaa !9
  br label %177, !llvm.loop !28

200:                                              ; preds = %177
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %201

201:                                              ; preds = %234, %200
  %202 = load i32, ptr %9, align 4, !tbaa !9
  %203 = load i32, ptr %7, align 4, !tbaa !9
  %204 = icmp slt i32 %202, %203
  br i1 %204, label %205, label %237

205:                                              ; preds = %201
  store i32 0, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %225, %205
  %207 = load i32, ptr %11, align 4, !tbaa !9
  %208 = load i32, ptr %7, align 4, !tbaa !9
  %209 = icmp slt i32 %207, %208
  br i1 %209, label %210, label %228

210:                                              ; preds = %206
  %211 = load ptr, ptr %37, align 8, !tbaa !5
  %212 = load i32, ptr %9, align 4, !tbaa !9
  %213 = load i32, ptr %7, align 4, !tbaa !9
  %214 = mul nsw i32 %212, %213
  %215 = load i32, ptr %11, align 4, !tbaa !9
  %216 = add nsw i32 %214, %215
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %211, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = icmp sgt i32 %219, 0
  br i1 %220, label %221, label %224

221:                                              ; preds = %210
  %222 = load i32, ptr %12, align 4, !tbaa !9
  %223 = add nsw i32 %222, 1
  store i32 %223, ptr %12, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %221, %210
  br label %225

225:                                              ; preds = %224
  %226 = load i32, ptr %11, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %11, align 4, !tbaa !9
  br label %206, !llvm.loop !29

228:                                              ; preds = %206
  %229 = load i32, ptr %12, align 4, !tbaa !9
  %230 = load ptr, ptr %38, align 8, !tbaa !5
  %231 = load i32, ptr %9, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds i32, ptr %230, i64 %232
  store i32 %229, ptr %233, align 4, !tbaa !9
  br label %234

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

237:                                              ; preds = %201
  br label %238

238:                                              ; preds = %966, %237
  %239 = load i32, ptr %7, align 4, !tbaa !9
  %240 = load ptr, ptr %38, align 8, !tbaa !5
  %241 = call i32 @__idxsum(i32 noundef %239, ptr noundef %240)
  store i32 %241, ptr %16, align 4, !tbaa !9
  %242 = load i32, ptr %16, align 4, !tbaa !9
  %243 = load i32, ptr %7, align 4, !tbaa !9
  %244 = sdiv i32 %242, %243
  store i32 %244, ptr %18, align 4, !tbaa !9
  %245 = load ptr, ptr %38, align 8, !tbaa !5
  %246 = load i32, ptr %7, align 4, !tbaa !9
  %247 = load ptr, ptr %38, align 8, !tbaa !5
  %248 = call i32 @__idxamax(i32 noundef %246, ptr noundef %247)
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds i32, ptr %245, i64 %249
  %251 = load i32, ptr %250, align 4, !tbaa !9
  store i32 %251, ptr %17, align 4, !tbaa !9
  %252 = load i32, ptr %17, align 4, !tbaa !9
  %253 = sitofp i32 %252 to double
  %254 = load i32, ptr %18, align 4, !tbaa !9
  %255 = sitofp i32 %254 to double
  %256 = fmul double 1.500000e+00, %255
  %257 = fcmp olt double %253, %256
  br i1 %257, label %258, label %259

258:                                              ; preds = %238
  br label %967

259:                                              ; preds = %238
  %260 = load i32, ptr %7, align 4, !tbaa !9
  %261 = load ptr, ptr %38, align 8, !tbaa !5
  %262 = call i32 @__idxamax(i32 noundef %260, ptr noundef %261)
  store i32 %262, ptr %13, align 4, !tbaa !9
  %263 = load ptr, ptr %37, align 8, !tbaa !5
  %264 = load i32, ptr %13, align 4, !tbaa !9
  %265 = load i32, ptr %7, align 4, !tbaa !9
  %266 = mul nsw i32 %264, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %263, i64 %267
  store ptr %268, ptr %39, align 8, !tbaa !5
  %269 = load i32, ptr %7, align 4, !tbaa !9
  %270 = load ptr, ptr %39, align 8, !tbaa !5
  %271 = call i32 @__idxsum(i32 noundef %269, ptr noundef %270)
  store i32 %271, ptr %19, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %272

272:                                              ; preds = %302, %259
  %273 = load i32, ptr %9, align 4, !tbaa !9
  %274 = load i32, ptr %7, align 4, !tbaa !9
  %275 = icmp slt i32 %273, %274
  br i1 %275, label %276, label %305

276:                                              ; preds = %272
  %277 = load ptr, ptr %39, align 8, !tbaa !5
  %278 = load i32, ptr %9, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i32, ptr %277, i64 %279
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = icmp sgt i32 %281, 0
  br i1 %282, label %283, label %301

283:                                              ; preds = %276
  %284 = load ptr, ptr %39, align 8, !tbaa !5
  %285 = load i32, ptr %9, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i32, ptr %284, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !9
  %289 = load ptr, ptr %43, align 8, !tbaa !5
  %290 = load i32, ptr %22, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds %struct.KeyValueType, ptr %289, i64 %291
  %293 = getelementptr inbounds %struct.KeyValueType, ptr %292, i32 0, i32 0
  store i32 %288, ptr %293, align 4, !tbaa !31
  %294 = load i32, ptr %9, align 4, !tbaa !9
  %295 = load ptr, ptr %43, align 8, !tbaa !5
  %296 = load i32, ptr %22, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %22, align 4, !tbaa !9
  %298 = sext i32 %296 to i64
  %299 = getelementptr inbounds %struct.KeyValueType, ptr %295, i64 %298
  %300 = getelementptr inbounds %struct.KeyValueType, ptr %299, i32 0, i32 1
  store i32 %294, ptr %300, align 4, !tbaa !33
  br label %301

301:                                              ; preds = %283, %276
  br label %302

302:                                              ; preds = %301
  %303 = load i32, ptr %9, align 4, !tbaa !9
  %304 = add nsw i32 %303, 1
  store i32 %304, ptr %9, align 4, !tbaa !9
  br label %272, !llvm.loop !34

305:                                              ; preds = %272
  %306 = load i32, ptr %22, align 4, !tbaa !9
  %307 = load ptr, ptr %43, align 8, !tbaa !5
  call void @__ikeysort(i32 noundef %306, ptr noundef %307)
  store i32 0, ptr %27, align 4, !tbaa !9
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %959, %305
  %309 = load i32, ptr %26, align 4, !tbaa !9
  %310 = load i32, ptr %22, align 4, !tbaa !9
  %311 = icmp slt i32 %309, %310
  br i1 %311, label %312, label %962

312:                                              ; preds = %308
  %313 = load ptr, ptr %43, align 8, !tbaa !5
  %314 = load i32, ptr %26, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds %struct.KeyValueType, ptr %313, i64 %315
  %317 = getelementptr inbounds %struct.KeyValueType, ptr %316, i32 0, i32 0
  %318 = load i32, ptr %317, align 4, !tbaa !31
  %319 = load i32, ptr %19, align 4, !tbaa !9
  %320 = load ptr, ptr %38, align 8, !tbaa !5
  %321 = load i32, ptr %13, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i32, ptr %320, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = mul nsw i32 2, %324
  %326 = sdiv i32 %319, %325
  %327 = icmp sgt i32 %318, %326
  br i1 %327, label %328, label %329

328:                                              ; preds = %312
  br label %962

329:                                              ; preds = %312
  %330 = load ptr, ptr %43, align 8, !tbaa !5
  %331 = load i32, ptr %26, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds %struct.KeyValueType, ptr %330, i64 %332
  %334 = getelementptr inbounds %struct.KeyValueType, ptr %333, i32 0, i32 1
  %335 = load i32, ptr %334, align 4, !tbaa !33
  store i32 %335, ptr %14, align 4, !tbaa !9
  %336 = load i32, ptr %7, align 4, !tbaa !9
  %337 = load ptr, ptr %40, align 8, !tbaa !5
  %338 = call ptr @__idxset(i32 noundef %336, i32 noundef 0, ptr noundef %337)
  store i32 0, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %391, %329
  %340 = load i32, ptr %9, align 4, !tbaa !9
  %341 = load i32, ptr %15, align 4, !tbaa !9
  %342 = icmp slt i32 %340, %341
  br i1 %342, label %343, label %394

343:                                              ; preds = %339
  %344 = load ptr, ptr %35, align 8, !tbaa !5
  %345 = load i32, ptr %9, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %344, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !9
  %349 = load i32, ptr %14, align 4, !tbaa !9
  %350 = icmp eq i32 %348, %349
  br i1 %350, label %351, label %390

351:                                              ; preds = %343
  %352 = load ptr, ptr %30, align 8, !tbaa !5
  %353 = load i32, ptr %9, align 4, !tbaa !9
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %352, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !9
  store i32 %356, ptr %11, align 4, !tbaa !9
  br label %357

357:                                              ; preds = %386, %351
  %358 = load i32, ptr %11, align 4, !tbaa !9
  %359 = load ptr, ptr %30, align 8, !tbaa !5
  %360 = load i32, ptr %9, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i32, ptr %359, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !9
  %365 = icmp slt i32 %358, %364
  br i1 %365, label %366, label %389

366:                                              ; preds = %357
  %367 = load ptr, ptr %35, align 8, !tbaa !5
  %368 = load ptr, ptr %31, align 8, !tbaa !5
  %369 = load i32, ptr %11, align 4, !tbaa !9
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds i32, ptr %368, i64 %370
  %372 = load i32, ptr %371, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i32, ptr %367, i64 %373
  %375 = load i32, ptr %374, align 4, !tbaa !9
  %376 = load i32, ptr %13, align 4, !tbaa !9
  %377 = icmp eq i32 %375, %376
  br i1 %377, label %378, label %385

378:                                              ; preds = %366
  %379 = load i32, ptr %9, align 4, !tbaa !9
  %380 = load ptr, ptr %41, align 8, !tbaa !5
  %381 = load i32, ptr %20, align 4, !tbaa !9
  %382 = add nsw i32 %381, 1
  store i32 %382, ptr %20, align 4, !tbaa !9
  %383 = sext i32 %381 to i64
  %384 = getelementptr inbounds i32, ptr %380, i64 %383
  store i32 %379, ptr %384, align 4, !tbaa !9
  br label %389

385:                                              ; preds = %366
  br label %386

386:                                              ; preds = %385
  %387 = load i32, ptr %11, align 4, !tbaa !9
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %11, align 4, !tbaa !9
  br label %357, !llvm.loop !35

389:                                              ; preds = %378, %357
  br label %390

390:                                              ; preds = %389, %343
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %9, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %9, align 4, !tbaa !9
  br label %339, !llvm.loop !36

394:                                              ; preds = %339
  store i32 0, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %395

395:                                              ; preds = %460, %394
  %396 = load i32, ptr %10, align 4, !tbaa !9
  %397 = load i32, ptr %20, align 4, !tbaa !9
  %398 = icmp slt i32 %396, %397
  br i1 %398, label %399, label %463

399:                                              ; preds = %395
  %400 = load ptr, ptr %41, align 8, !tbaa !5
  %401 = load i32, ptr %10, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i32, ptr %400, i64 %402
  %404 = load i32, ptr %403, align 4, !tbaa !9
  store i32 %404, ptr %9, align 4, !tbaa !9
  %405 = load ptr, ptr %32, align 8, !tbaa !5
  %406 = load i32, ptr %9, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = load i32, ptr %28, align 4, !tbaa !9
  %411 = add nsw i32 %410, %409
  store i32 %411, ptr %28, align 4, !tbaa !9
  %412 = load ptr, ptr %30, align 8, !tbaa !5
  %413 = load i32, ptr %9, align 4, !tbaa !9
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %412, i64 %414
  %416 = load i32, ptr %415, align 4, !tbaa !9
  store i32 %416, ptr %11, align 4, !tbaa !9
  br label %417

417:                                              ; preds = %456, %399
  %418 = load i32, ptr %11, align 4, !tbaa !9
  %419 = load ptr, ptr %30, align 8, !tbaa !5
  %420 = load i32, ptr %9, align 4, !tbaa !9
  %421 = add nsw i32 %420, 1
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %419, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !9
  %425 = icmp slt i32 %418, %424
  br i1 %425, label %426, label %459

426:                                              ; preds = %417
  %427 = load ptr, ptr %31, align 8, !tbaa !5
  %428 = load i32, ptr %11, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds i32, ptr %427, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !9
  store i32 %431, ptr %12, align 4, !tbaa !9
  %432 = load ptr, ptr %35, align 8, !tbaa !5
  %433 = load i32, ptr %12, align 4, !tbaa !9
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds i32, ptr %432, i64 %434
  %436 = load i32, ptr %435, align 4, !tbaa !9
  %437 = load i32, ptr %14, align 4, !tbaa !9
  %438 = icmp ne i32 %436, %437
  br i1 %438, label %439, label %455

439:                                              ; preds = %426
  %440 = load ptr, ptr %33, align 8, !tbaa !5
  %441 = load i32, ptr %11, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i32, ptr %440, i64 %442
  %444 = load i32, ptr %443, align 4, !tbaa !9
  %445 = load ptr, ptr %40, align 8, !tbaa !5
  %446 = load ptr, ptr %35, align 8, !tbaa !5
  %447 = load i32, ptr %12, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds i32, ptr %446, i64 %448
  %450 = load i32, ptr %449, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i32, ptr %445, i64 %451
  %453 = load i32, ptr %452, align 4, !tbaa !9
  %454 = add nsw i32 %453, %444
  store i32 %454, ptr %452, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %439, %426
  br label %456

456:                                              ; preds = %455
  %457 = load i32, ptr %11, align 4, !tbaa !9
  %458 = add nsw i32 %457, 1
  store i32 %458, ptr %11, align 4, !tbaa !9
  br label %417, !llvm.loop !37

459:                                              ; preds = %417
  br label %460

460:                                              ; preds = %459
  %461 = load i32, ptr %10, align 4, !tbaa !9
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %10, align 4, !tbaa !9
  br label %395, !llvm.loop !38

463:                                              ; preds = %395
  store i32 0, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %464

464:                                              ; preds = %495, %463
  %465 = load i32, ptr %9, align 4, !tbaa !9
  %466 = load i32, ptr %7, align 4, !tbaa !9
  %467 = icmp slt i32 %465, %466
  br i1 %467, label %468, label %498

468:                                              ; preds = %464
  %469 = load ptr, ptr %40, align 8, !tbaa !5
  %470 = load i32, ptr %9, align 4, !tbaa !9
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds i32, ptr %469, i64 %471
  %473 = load i32, ptr %472, align 4, !tbaa !9
  %474 = icmp sgt i32 %473, 0
  br i1 %474, label %475, label %494

475:                                              ; preds = %468
  %476 = load ptr, ptr %40, align 8, !tbaa !5
  %477 = load i32, ptr %9, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %476, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !9
  %481 = sub nsw i32 0, %480
  %482 = load ptr, ptr %42, align 8, !tbaa !5
  %483 = load i32, ptr %21, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds %struct.KeyValueType, ptr %482, i64 %484
  %486 = getelementptr inbounds %struct.KeyValueType, ptr %485, i32 0, i32 0
  store i32 %481, ptr %486, align 4, !tbaa !31
  %487 = load i32, ptr %9, align 4, !tbaa !9
  %488 = load ptr, ptr %42, align 8, !tbaa !5
  %489 = load i32, ptr %21, align 4, !tbaa !9
  %490 = add nsw i32 %489, 1
  store i32 %490, ptr %21, align 4, !tbaa !9
  %491 = sext i32 %489 to i64
  %492 = getelementptr inbounds %struct.KeyValueType, ptr %488, i64 %491
  %493 = getelementptr inbounds %struct.KeyValueType, ptr %492, i32 0, i32 1
  store i32 %487, ptr %493, align 4, !tbaa !33
  br label %494

494:                                              ; preds = %475, %468
  br label %495

495:                                              ; preds = %494
  %496 = load i32, ptr %9, align 4, !tbaa !9
  %497 = add nsw i32 %496, 1
  store i32 %497, ptr %9, align 4, !tbaa !9
  br label %464, !llvm.loop !39

498:                                              ; preds = %464
  %499 = load i32, ptr %21, align 4, !tbaa !9
  %500 = load ptr, ptr %42, align 8, !tbaa !5
  call void @__ikeysort(i32 noundef %499, ptr noundef %500)
  store i32 -1, ptr %24, align 4, !tbaa !9
  store i32 -1, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %501

501:                                              ; preds = %635, %498
  %502 = load i32, ptr %9, align 4, !tbaa !9
  %503 = load i32, ptr %21, align 4, !tbaa !9
  %504 = icmp slt i32 %502, %503
  br i1 %504, label %505, label %638

505:                                              ; preds = %501
  %506 = load ptr, ptr %42, align 8, !tbaa !5
  %507 = load i32, ptr %9, align 4, !tbaa !9
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds %struct.KeyValueType, ptr %506, i64 %508
  %510 = getelementptr inbounds %struct.KeyValueType, ptr %509, i32 0, i32 1
  %511 = load i32, ptr %510, align 4, !tbaa !33
  store i32 %511, ptr %12, align 4, !tbaa !9
  %512 = load ptr, ptr %39, align 8, !tbaa !5
  %513 = load i32, ptr %12, align 4, !tbaa !9
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds i32, ptr %512, i64 %514
  %516 = load i32, ptr %515, align 4, !tbaa !9
  %517 = icmp sgt i32 %516, 0
  br i1 %517, label %518, label %634

518:                                              ; preds = %505
  %519 = load ptr, ptr %34, align 8, !tbaa !5
  %520 = load i32, ptr %12, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i32, ptr %519, i64 %521
  %523 = load i32, ptr %522, align 4, !tbaa !9
  %524 = load i32, ptr %28, align 4, !tbaa !9
  %525 = add nsw i32 %523, %524
  %526 = load ptr, ptr %36, align 8, !tbaa !5
  %527 = load i32, ptr %12, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds i32, ptr %526, i64 %528
  %530 = load i32, ptr %529, align 4, !tbaa !9
  %531 = icmp sgt i32 %525, %530
  br i1 %531, label %532, label %533

532:                                              ; preds = %518
  br label %635

533:                                              ; preds = %518
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %534

534:                                              ; preds = %571, %533
  %535 = load i32, ptr %11, align 4, !tbaa !9
  %536 = load i32, ptr %7, align 4, !tbaa !9
  %537 = icmp slt i32 %535, %536
  br i1 %537, label %538, label %574

538:                                              ; preds = %534
  %539 = load ptr, ptr %40, align 8, !tbaa !5
  %540 = load i32, ptr %11, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds i32, ptr %539, i64 %541
  %543 = load i32, ptr %542, align 4, !tbaa !9
  %544 = icmp sgt i32 %543, 0
  br i1 %544, label %545, label %570

545:                                              ; preds = %538
  %546 = load ptr, ptr %38, align 8, !tbaa !5
  %547 = load i32, ptr %11, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds i32, ptr %546, i64 %548
  %550 = load i32, ptr %549, align 4, !tbaa !9
  %551 = load ptr, ptr %38, align 8, !tbaa !5
  %552 = load i32, ptr %13, align 4, !tbaa !9
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds i32, ptr %551, i64 %553
  %555 = load i32, ptr %554, align 4, !tbaa !9
  %556 = sub nsw i32 %555, 1
  %557 = icmp sge i32 %550, %556
  br i1 %557, label %558, label %570

558:                                              ; preds = %545
  %559 = load ptr, ptr %37, align 8, !tbaa !5
  %560 = load i32, ptr %7, align 4, !tbaa !9
  %561 = load i32, ptr %11, align 4, !tbaa !9
  %562 = mul nsw i32 %560, %561
  %563 = load i32, ptr %12, align 4, !tbaa !9
  %564 = add nsw i32 %562, %563
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds i32, ptr %559, i64 %565
  %567 = load i32, ptr %566, align 4, !tbaa !9
  %568 = icmp eq i32 %567, 0
  br i1 %568, label %569, label %570

569:                                              ; preds = %558
  br label %574

570:                                              ; preds = %558, %545, %538
  br label %571

571:                                              ; preds = %570
  %572 = load i32, ptr %11, align 4, !tbaa !9
  %573 = add nsw i32 %572, 1
  store i32 %573, ptr %11, align 4, !tbaa !9
  br label %534, !llvm.loop !40

574:                                              ; preds = %569, %534
  %575 = load i32, ptr %11, align 4, !tbaa !9
  %576 = load i32, ptr %7, align 4, !tbaa !9
  %577 = icmp eq i32 %575, %576
  br i1 %577, label %578, label %633

578:                                              ; preds = %574
  store i32 0, ptr %25, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %579

579:                                              ; preds = %605, %578
  %580 = load i32, ptr %11, align 4, !tbaa !9
  %581 = load i32, ptr %7, align 4, !tbaa !9
  %582 = icmp slt i32 %580, %581
  br i1 %582, label %583, label %608

583:                                              ; preds = %579
  %584 = load ptr, ptr %40, align 8, !tbaa !5
  %585 = load i32, ptr %11, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %584, i64 %586
  %588 = load i32, ptr %587, align 4, !tbaa !9
  %589 = icmp sgt i32 %588, 0
  br i1 %589, label %590, label %604

590:                                              ; preds = %583
  %591 = load ptr, ptr %37, align 8, !tbaa !5
  %592 = load i32, ptr %7, align 4, !tbaa !9
  %593 = load i32, ptr %12, align 4, !tbaa !9
  %594 = mul nsw i32 %592, %593
  %595 = load i32, ptr %11, align 4, !tbaa !9
  %596 = add nsw i32 %594, %595
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds i32, ptr %591, i64 %597
  %599 = load i32, ptr %598, align 4, !tbaa !9
  %600 = icmp eq i32 %599, 0
  br i1 %600, label %601, label %604

601:                                              ; preds = %590
  %602 = load i32, ptr %25, align 4, !tbaa !9
  %603 = add nsw i32 %602, 1
  store i32 %603, ptr %25, align 4, !tbaa !9
  br label %604

604:                                              ; preds = %601, %590, %583
  br label %605

605:                                              ; preds = %604
  %606 = load i32, ptr %11, align 4, !tbaa !9
  %607 = add nsw i32 %606, 1
  store i32 %607, ptr %11, align 4, !tbaa !9
  br label %579, !llvm.loop !41

608:                                              ; preds = %579
  %609 = load i32, ptr %24, align 4, !tbaa !9
  %610 = icmp eq i32 %609, -1
  br i1 %610, label %611, label %627

611:                                              ; preds = %608
  %612 = load ptr, ptr %38, align 8, !tbaa !5
  %613 = load i32, ptr %12, align 4, !tbaa !9
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds i32, ptr %612, i64 %614
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = load i32, ptr %25, align 4, !tbaa !9
  %618 = add nsw i32 %616, %617
  %619 = load ptr, ptr %38, align 8, !tbaa !5
  %620 = load i32, ptr %13, align 4, !tbaa !9
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds i32, ptr %619, i64 %621
  %623 = load i32, ptr %622, align 4, !tbaa !9
  %624 = icmp slt i32 %618, %623
  br i1 %624, label %625, label %627

625:                                              ; preds = %611
  %626 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %626, ptr %24, align 4, !tbaa !9
  br label %627

627:                                              ; preds = %625, %611, %608
  %628 = load i32, ptr %25, align 4, !tbaa !9
  %629 = icmp eq i32 %628, 0
  br i1 %629, label %630, label %632

630:                                              ; preds = %627
  %631 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %631, ptr %23, align 4, !tbaa !9
  br label %638

632:                                              ; preds = %627
  br label %633

633:                                              ; preds = %632, %574
  br label %634

634:                                              ; preds = %633, %505
  br label %635

635:                                              ; preds = %634, %532
  %636 = load i32, ptr %9, align 4, !tbaa !9
  %637 = add nsw i32 %636, 1
  store i32 %637, ptr %9, align 4, !tbaa !9
  br label %501, !llvm.loop !42

638:                                              ; preds = %630, %501
  %639 = load i32, ptr %23, align 4, !tbaa !9
  %640 = icmp eq i32 %639, -1
  br i1 %640, label %641, label %646

641:                                              ; preds = %638
  %642 = load i32, ptr %24, align 4, !tbaa !9
  %643 = icmp ne i32 %642, -1
  br i1 %643, label %644, label %646

644:                                              ; preds = %641
  %645 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %645, ptr %23, align 4, !tbaa !9
  br label %646

646:                                              ; preds = %644, %641, %638
  %647 = load i32, ptr %23, align 4, !tbaa !9
  %648 = icmp eq i32 %647, -1
  br i1 %648, label %649, label %650

649:                                              ; preds = %646
  br label %959

650:                                              ; preds = %646
  br label %651

651:                                              ; preds = %650
  %652 = load i32, ptr %28, align 4, !tbaa !9
  %653 = load ptr, ptr %34, align 8, !tbaa !5
  %654 = load i32, ptr %23, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !9
  %658 = add nsw i32 %657, %652
  store i32 %658, ptr %656, align 4, !tbaa !9
  %659 = load i32, ptr %28, align 4, !tbaa !9
  %660 = load ptr, ptr %34, align 8, !tbaa !5
  %661 = load i32, ptr %14, align 4, !tbaa !9
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds i32, ptr %660, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !9
  %665 = sub nsw i32 %664, %659
  store i32 %665, ptr %663, align 4, !tbaa !9
  br label %666

666:                                              ; preds = %651
  br label %667

667:                                              ; preds = %666
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %668

668:                                              ; preds = %955, %667
  %669 = load i32, ptr %10, align 4, !tbaa !9
  %670 = load i32, ptr %20, align 4, !tbaa !9
  %671 = icmp slt i32 %669, %670
  br i1 %671, label %672, label %958

672:                                              ; preds = %668
  %673 = load ptr, ptr %41, align 8, !tbaa !5
  %674 = load i32, ptr %10, align 4, !tbaa !9
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i32, ptr %673, i64 %675
  %677 = load i32, ptr %676, align 4, !tbaa !9
  store i32 %677, ptr %9, align 4, !tbaa !9
  %678 = load i32, ptr %23, align 4, !tbaa !9
  %679 = load ptr, ptr %35, align 8, !tbaa !5
  %680 = load i32, ptr %9, align 4, !tbaa !9
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds i32, ptr %679, i64 %681
  store i32 %678, ptr %682, align 4, !tbaa !9
  %683 = load ptr, ptr %30, align 8, !tbaa !5
  %684 = load i32, ptr %9, align 4, !tbaa !9
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds i32, ptr %683, i64 %685
  %687 = load i32, ptr %686, align 4, !tbaa !9
  store i32 %687, ptr %11, align 4, !tbaa !9
  br label %688

688:                                              ; preds = %832, %672
  %689 = load i32, ptr %11, align 4, !tbaa !9
  %690 = load ptr, ptr %30, align 8, !tbaa !5
  %691 = load i32, ptr %9, align 4, !tbaa !9
  %692 = add nsw i32 %691, 1
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds i32, ptr %690, i64 %693
  %695 = load i32, ptr %694, align 4, !tbaa !9
  %696 = icmp slt i32 %689, %695
  br i1 %696, label %697, label %835

697:                                              ; preds = %688
  %698 = load ptr, ptr %31, align 8, !tbaa !5
  %699 = load i32, ptr %11, align 4, !tbaa !9
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds i32, ptr %698, i64 %700
  %702 = load i32, ptr %701, align 4, !tbaa !9
  store i32 %702, ptr %12, align 4, !tbaa !9
  %703 = load ptr, ptr %35, align 8, !tbaa !5
  %704 = load i32, ptr %12, align 4, !tbaa !9
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds i32, ptr %703, i64 %705
  %707 = load i32, ptr %706, align 4, !tbaa !9
  %708 = load i32, ptr %14, align 4, !tbaa !9
  %709 = icmp ne i32 %707, %708
  br i1 %709, label %710, label %831

710:                                              ; preds = %697
  %711 = load ptr, ptr %37, align 8, !tbaa !5
  %712 = load i32, ptr %7, align 4, !tbaa !9
  %713 = load i32, ptr %14, align 4, !tbaa !9
  %714 = mul nsw i32 %712, %713
  %715 = load ptr, ptr %35, align 8, !tbaa !5
  %716 = load i32, ptr %12, align 4, !tbaa !9
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds i32, ptr %715, i64 %717
  %719 = load i32, ptr %718, align 4, !tbaa !9
  %720 = add nsw i32 %714, %719
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds i32, ptr %711, i64 %721
  %723 = load i32, ptr %722, align 4, !tbaa !9
  %724 = icmp eq i32 %723, 0
  br i1 %724, label %725, label %727

725:                                              ; preds = %710
  %726 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  br label %727

727:                                              ; preds = %725, %710
  %728 = load ptr, ptr %33, align 8, !tbaa !5
  %729 = load i32, ptr %11, align 4, !tbaa !9
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds i32, ptr %728, i64 %730
  %732 = load i32, ptr %731, align 4, !tbaa !9
  %733 = load ptr, ptr %37, align 8, !tbaa !5
  %734 = load i32, ptr %7, align 4, !tbaa !9
  %735 = load i32, ptr %14, align 4, !tbaa !9
  %736 = mul nsw i32 %734, %735
  %737 = load ptr, ptr %35, align 8, !tbaa !5
  %738 = load i32, ptr %12, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds i32, ptr %737, i64 %739
  %741 = load i32, ptr %740, align 4, !tbaa !9
  %742 = add nsw i32 %736, %741
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds i32, ptr %733, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !9
  %746 = sub nsw i32 %745, %732
  store i32 %746, ptr %744, align 4, !tbaa !9
  %747 = load ptr, ptr %37, align 8, !tbaa !5
  %748 = load i32, ptr %7, align 4, !tbaa !9
  %749 = load i32, ptr %14, align 4, !tbaa !9
  %750 = mul nsw i32 %748, %749
  %751 = load ptr, ptr %35, align 8, !tbaa !5
  %752 = load i32, ptr %12, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds i32, ptr %751, i64 %753
  %755 = load i32, ptr %754, align 4, !tbaa !9
  %756 = add nsw i32 %750, %755
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds i32, ptr %747, i64 %757
  %759 = load i32, ptr %758, align 4, !tbaa !9
  %760 = icmp eq i32 %759, 0
  br i1 %760, label %761, label %768

761:                                              ; preds = %727
  %762 = load ptr, ptr %38, align 8, !tbaa !5
  %763 = load i32, ptr %14, align 4, !tbaa !9
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds i32, ptr %762, i64 %764
  %766 = load i32, ptr %765, align 4, !tbaa !9
  %767 = add nsw i32 %766, -1
  store i32 %767, ptr %765, align 4, !tbaa !9
  br label %768

768:                                              ; preds = %761, %727
  %769 = load ptr, ptr %37, align 8, !tbaa !5
  %770 = load i32, ptr %7, align 4, !tbaa !9
  %771 = load ptr, ptr %35, align 8, !tbaa !5
  %772 = load i32, ptr %12, align 4, !tbaa !9
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i32, ptr %771, i64 %773
  %775 = load i32, ptr %774, align 4, !tbaa !9
  %776 = mul nsw i32 %770, %775
  %777 = load i32, ptr %14, align 4, !tbaa !9
  %778 = add nsw i32 %776, %777
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %769, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !9
  %782 = icmp eq i32 %781, 0
  br i1 %782, label %783, label %785

783:                                              ; preds = %768
  %784 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  br label %785

785:                                              ; preds = %783, %768
  %786 = load ptr, ptr %33, align 8, !tbaa !5
  %787 = load i32, ptr %11, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i32, ptr %786, i64 %788
  %790 = load i32, ptr %789, align 4, !tbaa !9
  %791 = load ptr, ptr %37, align 8, !tbaa !5
  %792 = load i32, ptr %7, align 4, !tbaa !9
  %793 = load ptr, ptr %35, align 8, !tbaa !5
  %794 = load i32, ptr %12, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds i32, ptr %793, i64 %795
  %797 = load i32, ptr %796, align 4, !tbaa !9
  %798 = mul nsw i32 %792, %797
  %799 = load i32, ptr %14, align 4, !tbaa !9
  %800 = add nsw i32 %798, %799
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds i32, ptr %791, i64 %801
  %803 = load i32, ptr %802, align 4, !tbaa !9
  %804 = sub nsw i32 %803, %790
  store i32 %804, ptr %802, align 4, !tbaa !9
  %805 = load ptr, ptr %37, align 8, !tbaa !5
  %806 = load i32, ptr %7, align 4, !tbaa !9
  %807 = load ptr, ptr %35, align 8, !tbaa !5
  %808 = load i32, ptr %12, align 4, !tbaa !9
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds i32, ptr %807, i64 %809
  %811 = load i32, ptr %810, align 4, !tbaa !9
  %812 = mul nsw i32 %806, %811
  %813 = load i32, ptr %14, align 4, !tbaa !9
  %814 = add nsw i32 %812, %813
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds i32, ptr %805, i64 %815
  %817 = load i32, ptr %816, align 4, !tbaa !9
  %818 = icmp eq i32 %817, 0
  br i1 %818, label %819, label %830

819:                                              ; preds = %785
  %820 = load ptr, ptr %38, align 8, !tbaa !5
  %821 = load ptr, ptr %35, align 8, !tbaa !5
  %822 = load i32, ptr %12, align 4, !tbaa !9
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %821, i64 %823
  %825 = load i32, ptr %824, align 4, !tbaa !9
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds i32, ptr %820, i64 %826
  %828 = load i32, ptr %827, align 4, !tbaa !9
  %829 = add nsw i32 %828, -1
  store i32 %829, ptr %827, align 4, !tbaa !9
  br label %830

830:                                              ; preds = %819, %785
  br label %831

831:                                              ; preds = %830, %697
  br label %832

832:                                              ; preds = %831
  %833 = load i32, ptr %11, align 4, !tbaa !9
  %834 = add nsw i32 %833, 1
  store i32 %834, ptr %11, align 4, !tbaa !9
  br label %688, !llvm.loop !43

835:                                              ; preds = %688
  %836 = load ptr, ptr %30, align 8, !tbaa !5
  %837 = load i32, ptr %9, align 4, !tbaa !9
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds i32, ptr %836, i64 %838
  %840 = load i32, ptr %839, align 4, !tbaa !9
  store i32 %840, ptr %11, align 4, !tbaa !9
  br label %841

841:                                              ; preds = %951, %835
  %842 = load i32, ptr %11, align 4, !tbaa !9
  %843 = load ptr, ptr %30, align 8, !tbaa !5
  %844 = load i32, ptr %9, align 4, !tbaa !9
  %845 = add nsw i32 %844, 1
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds i32, ptr %843, i64 %846
  %848 = load i32, ptr %847, align 4, !tbaa !9
  %849 = icmp slt i32 %842, %848
  br i1 %849, label %850, label %954

850:                                              ; preds = %841
  %851 = load ptr, ptr %31, align 8, !tbaa !5
  %852 = load i32, ptr %11, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !9
  store i32 %855, ptr %12, align 4, !tbaa !9
  %856 = load ptr, ptr %35, align 8, !tbaa !5
  %857 = load i32, ptr %12, align 4, !tbaa !9
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds i32, ptr %856, i64 %858
  %860 = load i32, ptr %859, align 4, !tbaa !9
  %861 = load i32, ptr %23, align 4, !tbaa !9
  %862 = icmp ne i32 %860, %861
  br i1 %862, label %863, label %950

863:                                              ; preds = %850
  %864 = load ptr, ptr %37, align 8, !tbaa !5
  %865 = load i32, ptr %7, align 4, !tbaa !9
  %866 = load i32, ptr %23, align 4, !tbaa !9
  %867 = mul nsw i32 %865, %866
  %868 = load ptr, ptr %35, align 8, !tbaa !5
  %869 = load i32, ptr %12, align 4, !tbaa !9
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds i32, ptr %868, i64 %870
  %872 = load i32, ptr %871, align 4, !tbaa !9
  %873 = add nsw i32 %867, %872
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds i32, ptr %864, i64 %874
  %876 = load i32, ptr %875, align 4, !tbaa !9
  %877 = icmp eq i32 %876, 0
  br i1 %877, label %878, label %885

878:                                              ; preds = %863
  %879 = load ptr, ptr %38, align 8, !tbaa !5
  %880 = load i32, ptr %23, align 4, !tbaa !9
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds i32, ptr %879, i64 %881
  %883 = load i32, ptr %882, align 4, !tbaa !9
  %884 = add nsw i32 %883, 1
  store i32 %884, ptr %882, align 4, !tbaa !9
  br label %885

885:                                              ; preds = %878, %863
  %886 = load ptr, ptr %33, align 8, !tbaa !5
  %887 = load i32, ptr %11, align 4, !tbaa !9
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds i32, ptr %886, i64 %888
  %890 = load i32, ptr %889, align 4, !tbaa !9
  %891 = load ptr, ptr %37, align 8, !tbaa !5
  %892 = load i32, ptr %7, align 4, !tbaa !9
  %893 = load i32, ptr %23, align 4, !tbaa !9
  %894 = mul nsw i32 %892, %893
  %895 = load ptr, ptr %35, align 8, !tbaa !5
  %896 = load i32, ptr %12, align 4, !tbaa !9
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds i32, ptr %895, i64 %897
  %899 = load i32, ptr %898, align 4, !tbaa !9
  %900 = add nsw i32 %894, %899
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds i32, ptr %891, i64 %901
  %903 = load i32, ptr %902, align 4, !tbaa !9
  %904 = add nsw i32 %903, %890
  store i32 %904, ptr %902, align 4, !tbaa !9
  %905 = load ptr, ptr %37, align 8, !tbaa !5
  %906 = load i32, ptr %7, align 4, !tbaa !9
  %907 = load ptr, ptr %35, align 8, !tbaa !5
  %908 = load i32, ptr %12, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds i32, ptr %907, i64 %909
  %911 = load i32, ptr %910, align 4, !tbaa !9
  %912 = mul nsw i32 %906, %911
  %913 = load i32, ptr %23, align 4, !tbaa !9
  %914 = add nsw i32 %912, %913
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds i32, ptr %905, i64 %915
  %917 = load i32, ptr %916, align 4, !tbaa !9
  %918 = icmp eq i32 %917, 0
  br i1 %918, label %919, label %930

919:                                              ; preds = %885
  %920 = load ptr, ptr %38, align 8, !tbaa !5
  %921 = load ptr, ptr %35, align 8, !tbaa !5
  %922 = load i32, ptr %12, align 4, !tbaa !9
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds i32, ptr %921, i64 %923
  %925 = load i32, ptr %924, align 4, !tbaa !9
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds i32, ptr %920, i64 %926
  %928 = load i32, ptr %927, align 4, !tbaa !9
  %929 = add nsw i32 %928, 1
  store i32 %929, ptr %927, align 4, !tbaa !9
  br label %930

930:                                              ; preds = %919, %885
  %931 = load ptr, ptr %33, align 8, !tbaa !5
  %932 = load i32, ptr %11, align 4, !tbaa !9
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds i32, ptr %931, i64 %933
  %935 = load i32, ptr %934, align 4, !tbaa !9
  %936 = load ptr, ptr %37, align 8, !tbaa !5
  %937 = load i32, ptr %7, align 4, !tbaa !9
  %938 = load ptr, ptr %35, align 8, !tbaa !5
  %939 = load i32, ptr %12, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i32, ptr %938, i64 %940
  %942 = load i32, ptr %941, align 4, !tbaa !9
  %943 = mul nsw i32 %937, %942
  %944 = load i32, ptr %23, align 4, !tbaa !9
  %945 = add nsw i32 %943, %944
  %946 = sext i32 %945 to i64
  %947 = getelementptr inbounds i32, ptr %936, i64 %946
  %948 = load i32, ptr %947, align 4, !tbaa !9
  %949 = add nsw i32 %948, %935
  store i32 %949, ptr %947, align 4, !tbaa !9
  br label %950

950:                                              ; preds = %930, %850
  br label %951

951:                                              ; preds = %950
  %952 = load i32, ptr %11, align 4, !tbaa !9
  %953 = add nsw i32 %952, 1
  store i32 %953, ptr %11, align 4, !tbaa !9
  br label %841, !llvm.loop !44

954:                                              ; preds = %841
  br label %955

955:                                              ; preds = %954
  %956 = load i32, ptr %10, align 4, !tbaa !9
  %957 = add nsw i32 %956, 1
  store i32 %957, ptr %10, align 4, !tbaa !9
  br label %668, !llvm.loop !45

958:                                              ; preds = %668
  store i32 1, ptr %27, align 4, !tbaa !9
  br label %962

959:                                              ; preds = %649
  %960 = load i32, ptr %26, align 4, !tbaa !9
  %961 = add nsw i32 %960, 1
  store i32 %961, ptr %26, align 4, !tbaa !9
  br label %308, !llvm.loop !46

962:                                              ; preds = %958, %328, %308
  %963 = load i32, ptr %27, align 4, !tbaa !9
  %964 = icmp eq i32 %963, 0
  br i1 %964, label %965, label %966

965:                                              ; preds = %962
  br label %967

966:                                              ; preds = %962
  br label %238

967:                                              ; preds = %965, %258
  %968 = load ptr, ptr %5, align 8, !tbaa !5
  %969 = load i32, ptr %7, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %968, i32 noundef %969)
  %970 = load ptr, ptr %5, align 8, !tbaa !5
  %971 = load i32, ptr %7, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %970, i32 noundef %971)
  %972 = load ptr, ptr %5, align 8, !tbaa !5
  %973 = load i32, ptr %7, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %972, i32 noundef %973)
  %974 = load ptr, ptr %5, align 8, !tbaa !5
  %975 = load i32, ptr %15, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %974, i32 noundef %975)
  call void (ptr, ...) @GKfree(ptr noundef %42, ptr noundef %43, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, 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
  ret void
}

declare void @__ikeysort(i32 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"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}
!13 = !{!12, !6, i64 24}
!14 = !{!12, !6, i64 48}
!15 = !{!12, !6, i64 32}
!16 = !{!12, !6, i64 56}
!17 = !{!12, !6, i64 96}
!18 = !{!12, !6, i64 104}
!19 = !{!20, !6, i64 96}
!20 = !{!"controldef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !21, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !22, i64 48, !23, i64 104, !23, i64 112, !23, i64 120, !23, i64 128, !23, i64 136, !23, i64 144, !23, i64 152, !23, i64 160, !23, i64 168, !23, i64 176, !23, i64 184, !23, i64 192, !23, i64 200, !23, i64 208, !23, i64 216, !23, i64 224}
!21 = !{!"float", !7, i64 0}
!22 = !{!"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}
!23 = !{!"double", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!21, !21, i64 0}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = !{!32, !10, i64 0}
!32 = !{!"KeyValueType", !10, i64 0, !10, i64 4}
!33 = !{!32, !10, i64 4}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}


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

%struct.KeyValueType = type { i32, i32 }

@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1

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

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

declare i32 @__idxsum(i32 noundef, ptr noundef) local_unnamed_addr #1

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

declare i32 @__idxamax(i32 noundef, ptr noundef) local_unnamed_addr #1

declare void @GKfree(ptr noundef, ...) local_unnamed_addr #1

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

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

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

declare ptr @__GKmalloc(i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @__EliminateVolSubDomainEdges(ptr noundef %0, ptr nocapture noundef readonly %1, i32 noundef %2, ptr nocapture noundef readonly %3) local_unnamed_addr #3 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %7 = getelementptr inbounds i8, ptr %1, i64 16
  %8 = load i32, ptr %7, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !11
  %11 = getelementptr inbounds i8, ptr %1, i64 48
  %12 = load ptr, ptr %11, align 8, !tbaa !12
  %13 = getelementptr inbounds i8, ptr %1, i64 32
  %14 = load ptr, ptr %13, align 8, !tbaa !13
  %15 = getelementptr inbounds i8, ptr %1, i64 56
  %16 = load ptr, ptr %15, align 8, !tbaa !14
  %17 = getelementptr inbounds i8, ptr %1, i64 96
  %18 = load ptr, ptr %17, align 8, !tbaa !15
  %19 = getelementptr inbounds i8, ptr %1, i64 104
  %20 = load ptr, ptr %19, align 8, !tbaa !16
  %21 = tail call ptr @__idxset(i32 noundef %2, i32 noundef 0, ptr noundef %20) #5
  %22 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %2) #5
  %23 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %2) #5
  %24 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %2) #5
  %25 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %8) #5
  %26 = mul nsw i32 %2, %2
  %27 = getelementptr inbounds i8, ptr %0, i64 96
  %28 = load ptr, ptr %27, align 8, !tbaa !17
  %29 = tail call ptr @__idxset(i32 noundef %26, i32 noundef 0, ptr noundef %28) #5
  %30 = shl i32 %2, 3
  %31 = tail call ptr @__GKmalloc(i32 noundef %30, ptr noundef nonnull @.str.11) #5
  store ptr %31, ptr %5, align 8, !tbaa !22
  %32 = tail call ptr @__GKmalloc(i32 noundef %30, ptr noundef nonnull @.str.11) #5
  store ptr %32, ptr %6, align 8, !tbaa !22
  %33 = icmp sgt i32 %8, 0
  br i1 %33, label %.lr.ph383.preheader, label %._crit_edge

.lr.ph383.preheader:                              ; preds = %4
  %wide.trip.count = zext nneg i32 %8 to i64
  br label %.lr.ph383

.loopexit378:                                     ; preds = %64, %.lr.ph383
  %exitcond.not = icmp eq i64 %indvars.iv.next460, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph383, !llvm.loop !23

.lr.ph383:                                        ; preds = %.lr.ph383.preheader, %.loopexit378
  %indvars.iv459 = phi i64 [ 0, %.lr.ph383.preheader ], [ %indvars.iv.next460, %.loopexit378 ]
  %34 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv459
  %35 = load i32, ptr %34, align 4, !tbaa !25
  %36 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv459
  %37 = load i32, ptr %36, align 4, !tbaa !25
  %38 = sext i32 %35 to i64
  %39 = getelementptr inbounds i32, ptr %21, i64 %38
  %40 = load i32, ptr %39, align 4, !tbaa !25
  %41 = add nsw i32 %40, %37
  store i32 %41, ptr %39, align 4, !tbaa !25
  %42 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv459
  %43 = load i32, ptr %42, align 4, !tbaa !25
  %indvars.iv.next460 = add nuw nsw i64 %indvars.iv459, 1
  %44 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv.next460
  %45 = load i32, ptr %44, align 4, !tbaa !25
  %46 = icmp slt i32 %43, %45
  br i1 %46, label %.lr.ph, label %.loopexit378

.lr.ph:                                           ; preds = %.lr.ph383
  %47 = mul nsw i32 %35, %2
  %48 = sext i32 %43 to i64
  br label %49

49:                                               ; preds = %.lr.ph, %64
  %50 = phi i32 [ %45, %.lr.ph ], [ %65, %64 ]
  %indvars.iv = phi i64 [ %48, %.lr.ph ], [ %indvars.iv.next, %64 ]
  %51 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv
  %52 = load i32, ptr %51, align 4, !tbaa !25
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds i32, ptr %18, i64 %53
  %55 = load i32, ptr %54, align 4, !tbaa !25
  %.not366 = icmp eq i32 %55, %35
  br i1 %.not366, label %64, label %56

56:                                               ; preds = %49
  %57 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv
  %58 = load i32, ptr %57, align 4, !tbaa !25
  %59 = add nsw i32 %55, %47
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds i32, ptr %29, i64 %60
  %62 = load i32, ptr %61, align 4, !tbaa !25
  %63 = add nsw i32 %62, %58
  store i32 %63, ptr %61, align 4, !tbaa !25
  %.pre = load i32, ptr %44, align 4, !tbaa !25
  br label %64

64:                                               ; preds = %49, %56
  %65 = phi i32 [ %50, %49 ], [ %.pre, %56 ]
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %66 = sext i32 %65 to i64
  %67 = icmp slt i64 %indvars.iv.next, %66
  br i1 %67, label %49, label %.loopexit378, !llvm.loop !26

._crit_edge:                                      ; preds = %.loopexit378, %4
  %68 = tail call i32 @__idxsum(i32 noundef %2, ptr noundef %21) #5
  %69 = icmp sgt i32 %2, 0
  br i1 %69, label %.lr.ph386, label %.preheader374

.lr.ph386:                                        ; preds = %._crit_edge
  %70 = sitofp i32 %68 to double
  %wide.trip.count465 = zext nneg i32 %2 to i64
  %min.iters.check = icmp ult i32 %2, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

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

vector.ph:                                        ; preds = %.lr.ph386
  %n.vec = and i64 %wide.trip.count465, 2147483644
  %broadcast.splatinsert = insertelement <4 x double> poison, double %70, i64 0
  %broadcast.splat = shufflevector <4 x double> %broadcast.splatinsert, <4 x double> 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 ]
  %71 = getelementptr inbounds float, ptr %3, i64 %index
  %wide.load = load <4 x float>, ptr %71, align 4, !tbaa !27
  %72 = fpext <4 x float> %wide.load to <4 x double>
  %73 = fmul <4 x double> %72, <double 1.250000e+00, double 1.250000e+00, double 1.250000e+00, double 1.250000e+00>
  %74 = fmul <4 x double> %73, %broadcast.splat
  %75 = fptosi <4 x double> %74 to <4 x i32>
  %76 = getelementptr inbounds i32, ptr %22, i64 %index
  store <4 x i32> %75, ptr %76, align 4, !tbaa !25
  %index.next = add nuw i64 %index, 4
  %77 = icmp eq i64 %index.next, %n.vec
  br i1 %77, label %middle.block, label %vector.body, !llvm.loop !28

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count465
  br i1 %cmp.n, label %.preheader377, label %scalar.ph.preheader

.preheader377:                                    ; preds = %scalar.ph, %middle.block
  br i1 %69, label %.preheader376.us.preheader, label %.preheader374

.preheader376.us.preheader:                       ; preds = %.preheader377
  %78 = zext nneg i32 %2 to i64
  %min.iters.check583 = icmp ult i32 %2, 8
  %n.vec586 = and i64 %wide.trip.count465, 2147483640
  %cmp.n594 = icmp eq i64 %n.vec586, %wide.trip.count465
  br label %.preheader376.us

.preheader376.us:                                 ; preds = %.preheader376.us.preheader, %._crit_edge390.us
  %indvars.iv472 = phi i64 [ 0, %.preheader376.us.preheader ], [ %indvars.iv.next473, %._crit_edge390.us ]
  %79 = mul nuw nsw i64 %indvars.iv472, %78
  %invariant.gep = getelementptr inbounds i32, ptr %29, i64 %79
  br i1 %min.iters.check583, label %scalar.ph582.preheader, label %vector.body588

vector.body588:                                   ; preds = %.preheader376.us, %vector.body588
  %index589 = phi i64 [ %index.next593, %vector.body588 ], [ 0, %.preheader376.us ]
  %vec.phi = phi <4 x i32> [ %86, %vector.body588 ], [ zeroinitializer, %.preheader376.us ]
  %vec.phi590 = phi <4 x i32> [ %87, %vector.body588 ], [ zeroinitializer, %.preheader376.us ]
  %80 = getelementptr inbounds i32, ptr %invariant.gep, i64 %index589
  %81 = getelementptr inbounds i8, ptr %80, i64 16
  %wide.load591 = load <4 x i32>, ptr %80, align 4, !tbaa !25
  %wide.load592 = load <4 x i32>, ptr %81, align 4, !tbaa !25
  %82 = icmp sgt <4 x i32> %wide.load591, zeroinitializer
  %83 = icmp sgt <4 x i32> %wide.load592, zeroinitializer
  %84 = zext <4 x i1> %82 to <4 x i32>
  %85 = zext <4 x i1> %83 to <4 x i32>
  %86 = add <4 x i32> %vec.phi, %84
  %87 = add <4 x i32> %vec.phi590, %85
  %index.next593 = add nuw i64 %index589, 8
  %88 = icmp eq i64 %index.next593, %n.vec586
  br i1 %88, label %middle.block581, label %vector.body588, !llvm.loop !31

middle.block581:                                  ; preds = %vector.body588
  %bin.rdx = add <4 x i32> %87, %86
  %89 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  br i1 %cmp.n594, label %._crit_edge390.us, label %scalar.ph582.preheader

scalar.ph582.preheader:                           ; preds = %middle.block581, %.preheader376.us
  %indvars.iv467.ph = phi i64 [ 0, %.preheader376.us ], [ %n.vec586, %middle.block581 ]
  %.0334387.us.ph = phi i32 [ 0, %.preheader376.us ], [ %89, %middle.block581 ]
  br label %scalar.ph582

scalar.ph582:                                     ; preds = %scalar.ph582.preheader, %scalar.ph582
  %indvars.iv467 = phi i64 [ %indvars.iv.next468, %scalar.ph582 ], [ %indvars.iv467.ph, %scalar.ph582.preheader ]
  %.0334387.us = phi i32 [ %spec.select.us, %scalar.ph582 ], [ %.0334387.us.ph, %scalar.ph582.preheader ]
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv467
  %90 = load i32, ptr %gep, align 4, !tbaa !25
  %91 = icmp sgt i32 %90, 0
  %92 = zext i1 %91 to i32
  %spec.select.us = add nuw nsw i32 %.0334387.us, %92
  %indvars.iv.next468 = add nuw nsw i64 %indvars.iv467, 1
  %exitcond471.not = icmp eq i64 %indvars.iv.next468, %78
  br i1 %exitcond471.not, label %._crit_edge390.us, label %scalar.ph582, !llvm.loop !32

._crit_edge390.us:                                ; preds = %scalar.ph582, %middle.block581
  %spec.select.us.lcssa = phi i32 [ %89, %middle.block581 ], [ %spec.select.us, %scalar.ph582 ]
  %93 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv472
  store i32 %spec.select.us.lcssa, ptr %93, align 4, !tbaa !25
  %indvars.iv.next473 = add nuw nsw i64 %indvars.iv472, 1
  %exitcond476.not = icmp eq i64 %indvars.iv.next473, %78
  br i1 %exitcond476.not, label %.preheader374, label %.preheader376.us, !llvm.loop !33

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv462 = phi i64 [ %indvars.iv.next463, %scalar.ph ], [ %indvars.iv462.ph, %scalar.ph.preheader ]
  %94 = getelementptr inbounds float, ptr %3, i64 %indvars.iv462
  %95 = load float, ptr %94, align 4, !tbaa !27
  %96 = fpext float %95 to double
  %97 = fmul double %96, 1.250000e+00
  %98 = fmul double %97, %70
  %99 = fptosi double %98 to i32
  %100 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv462
  store i32 %99, ptr %100, align 4, !tbaa !25
  %indvars.iv.next463 = add nuw nsw i64 %indvars.iv462, 1
  %exitcond466.not = icmp eq i64 %indvars.iv.next463, %wide.trip.count465
  br i1 %exitcond466.not, label %.preheader377, label %scalar.ph, !llvm.loop !34

.preheader374:                                    ; preds = %._crit_edge390.us, %._crit_edge, %.preheader377
  %101 = sext i32 %2 to i64
  %wide.trip.count480 = zext i32 %2 to i64
  %wide.trip.count489 = zext nneg i32 %8 to i64
  %wide.trip.count507 = zext nneg i32 %2 to i64
  %102 = add nsw i64 %wide.trip.count480, -1
  %xtraiter = and i64 %wide.trip.count480, 1
  %103 = icmp eq i64 %102, 0
  %unroll_iter = and i64 %wide.trip.count480, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %xtraiter604 = and i64 %wide.trip.count480, 1
  %104 = icmp eq i64 %102, 0
  %unroll_iter607 = and i64 %wide.trip.count480, 2147483646
  %lcmp.mod605.not = icmp eq i64 %xtraiter604, 0
  %xtraiter609 = and i64 %wide.trip.count480, 1
  %105 = icmp eq i64 %102, 0
  %unroll_iter612 = and i64 %wide.trip.count480, 2147483646
  %lcmp.mod610.not = icmp eq i64 %xtraiter609, 0
  br label %.loopexit373

.loopexit373:                                     ; preds = %.loopexit373.backedge, %.preheader374
  %106 = tail call i32 @__idxsum(i32 noundef %2, ptr noundef %23) #5
  %107 = sdiv i32 %106, %2
  %108 = tail call i32 @__idxamax(i32 noundef %2, ptr noundef %23) #5
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds i32, ptr %23, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !25
  %112 = sitofp i32 %111 to double
  %113 = sitofp i32 %107 to double
  %114 = fmul double %113, 1.500000e+00
  %115 = fcmp ogt double %114, %112
  br i1 %115, label %.critedge, label %116

116:                                              ; preds = %.loopexit373
  %117 = tail call i32 @__idxamax(i32 noundef %2, ptr noundef nonnull %23) #5
  %118 = mul nsw i32 %117, %2
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds i32, ptr %29, i64 %119
  %121 = tail call i32 @__idxsum(i32 noundef %2, ptr noundef %120) #5
  br i1 %69, label %.lr.ph395.preheader, label %._crit_edge396.thread

.lr.ph395.preheader:                              ; preds = %116
  br i1 %103, label %._crit_edge396.unr-lcssa, label %.lr.ph395

._crit_edge396.thread:                            ; preds = %116
  tail call void @__ikeysort(i32 noundef 0, ptr noundef %32) #5
  br label %.critedge

.lr.ph395:                                        ; preds = %.lr.ph395.preheader, %140
  %indvars.iv477 = phi i64 [ %indvars.iv.next478.1, %140 ], [ 0, %.lr.ph395.preheader ]
  %.0340392 = phi i32 [ %.1341.1, %140 ], [ 0, %.lr.ph395.preheader ]
  %niter = phi i64 [ %niter.next.1, %140 ], [ 0, %.lr.ph395.preheader ]
  %122 = getelementptr inbounds i32, ptr %120, i64 %indvars.iv477
  %123 = load i32, ptr %122, align 4, !tbaa !25
  %124 = icmp sgt i32 %123, 0
  br i1 %124, label %125, label %.lr.ph395.1

125:                                              ; preds = %.lr.ph395
  %126 = sext i32 %.0340392 to i64
  %127 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %126
  store i32 %123, ptr %127, align 4, !tbaa !35
  %128 = add nsw i32 %.0340392, 1
  %129 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %126, i32 1
  %130 = trunc nuw nsw i64 %indvars.iv477 to i32
  store i32 %130, ptr %129, align 4, !tbaa !37
  br label %.lr.ph395.1

.lr.ph395.1:                                      ; preds = %.lr.ph395, %125
  %.1341 = phi i32 [ %128, %125 ], [ %.0340392, %.lr.ph395 ]
  %indvars.iv.next478 = or disjoint i64 %indvars.iv477, 1
  %131 = getelementptr inbounds i32, ptr %120, i64 %indvars.iv.next478
  %132 = load i32, ptr %131, align 4, !tbaa !25
  %133 = icmp sgt i32 %132, 0
  br i1 %133, label %134, label %140

134:                                              ; preds = %.lr.ph395.1
  %135 = sext i32 %.1341 to i64
  %136 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %135
  store i32 %132, ptr %136, align 4, !tbaa !35
  %137 = add nsw i32 %.1341, 1
  %138 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %135, i32 1
  %139 = trunc nuw nsw i64 %indvars.iv.next478 to i32
  store i32 %139, ptr %138, align 4, !tbaa !37
  br label %140

140:                                              ; preds = %134, %.lr.ph395.1
  %.1341.1 = phi i32 [ %137, %134 ], [ %.1341, %.lr.ph395.1 ]
  %indvars.iv.next478.1 = add nuw nsw i64 %indvars.iv477, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge396.unr-lcssa, label %.lr.ph395, !llvm.loop !38

._crit_edge396.unr-lcssa:                         ; preds = %140, %.lr.ph395.preheader
  %.1341.lcssa.ph = phi i32 [ poison, %.lr.ph395.preheader ], [ %.1341.1, %140 ]
  %indvars.iv477.unr = phi i64 [ 0, %.lr.ph395.preheader ], [ %indvars.iv.next478.1, %140 ]
  %.0340392.unr = phi i32 [ 0, %.lr.ph395.preheader ], [ %.1341.1, %140 ]
  br i1 %lcmp.mod.not, label %._crit_edge396, label %.lr.ph395.epil

.lr.ph395.epil:                                   ; preds = %._crit_edge396.unr-lcssa
  %141 = getelementptr inbounds i32, ptr %120, i64 %indvars.iv477.unr
  %142 = load i32, ptr %141, align 4, !tbaa !25
  %143 = icmp sgt i32 %142, 0
  br i1 %143, label %144, label %._crit_edge396

144:                                              ; preds = %.lr.ph395.epil
  %145 = sext i32 %.0340392.unr to i64
  %146 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %145
  store i32 %142, ptr %146, align 4, !tbaa !35
  %147 = add nsw i32 %.0340392.unr, 1
  %148 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %145, i32 1
  %149 = trunc nuw nsw i64 %indvars.iv477.unr to i32
  store i32 %149, ptr %148, align 4, !tbaa !37
  br label %._crit_edge396

._crit_edge396:                                   ; preds = %.lr.ph395.epil, %144, %._crit_edge396.unr-lcssa
  %.1341.lcssa = phi i32 [ %.1341.lcssa.ph, %._crit_edge396.unr-lcssa ], [ %147, %144 ], [ %.0340392.unr, %.lr.ph395.epil ]
  tail call void @__ikeysort(i32 noundef %.1341.lcssa, ptr noundef %32) #5
  %150 = icmp sgt i32 %.1341.lcssa, 0
  br i1 %150, label %.lr.ph442, label %.critedge

.lr.ph442:                                        ; preds = %._crit_edge396
  %151 = sext i32 %117 to i64
  %152 = getelementptr inbounds i32, ptr %23, i64 %151
  %wide.trip.count522 = zext nneg i32 %.1341.lcssa to i64
  br label %154

153:                                              ; preds = %._crit_edge434
  %indvars.iv.next520 = add nuw nsw i64 %indvars.iv519, 1
  %exitcond523.not = icmp eq i64 %indvars.iv.next520, %wide.trip.count522
  br i1 %exitcond523.not, label %.critedge, label %154, !llvm.loop !39

154:                                              ; preds = %.lr.ph442, %153
  %indvars.iv519 = phi i64 [ 0, %.lr.ph442 ], [ %indvars.iv.next520, %153 ]
  %155 = getelementptr inbounds %struct.KeyValueType, ptr %32, i64 %indvars.iv519
  %156 = load i32, ptr %155, align 4, !tbaa !35
  %157 = load i32, ptr %152, align 4, !tbaa !25
  %158 = shl nsw i32 %157, 1
  %159 = sdiv i32 %121, %158
  %160 = icmp sgt i32 %156, %159
  br i1 %160, label %.critedge, label %161

161:                                              ; preds = %154
  %162 = getelementptr inbounds i8, ptr %155, i64 4
  %163 = load i32, ptr %162, align 4, !tbaa !37
  %164 = tail call ptr @__idxset(i32 noundef %2, i32 noundef 0, ptr noundef %24) #5
  br i1 %33, label %.lr.ph404, label %.preheader371

.preheader372:                                    ; preds = %.loopexit
  %165 = icmp sgt i32 %.1337, 0
  br i1 %165, label %.lr.ph412.preheader, label %.preheader371

.lr.ph412.preheader:                              ; preds = %.preheader372
  %wide.trip.count497 = zext nneg i32 %.1337 to i64
  br label %.lr.ph412

.lr.ph404:                                        ; preds = %161, %.loopexit
  %indvars.iv486 = phi i64 [ %indvars.iv.next487, %.loopexit ], [ 0, %161 ]
  %.0336400 = phi i32 [ %.1337, %.loopexit ], [ 0, %161 ]
  %166 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv486
  %167 = load i32, ptr %166, align 4, !tbaa !25
  %168 = icmp eq i32 %167, %163
  br i1 %168, label %169, label %.loopexit

169:                                              ; preds = %.lr.ph404
  %170 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv486
  %171 = load i32, ptr %170, align 4, !tbaa !25
  %172 = getelementptr inbounds i8, ptr %170, i64 4
  %173 = load i32, ptr %172, align 4, !tbaa !25
  %174 = icmp slt i32 %171, %173
  br i1 %174, label %.lr.ph399.preheader, label %.loopexit

.lr.ph399.preheader:                              ; preds = %169
  %175 = sext i32 %171 to i64
  br label %.lr.ph399

176:                                              ; preds = %.lr.ph399
  %indvars.iv.next483 = add nsw i64 %indvars.iv482, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next483 to i32
  %exitcond485.not = icmp eq i32 %173, %lftr.wideiv
  br i1 %exitcond485.not, label %.loopexit, label %.lr.ph399, !llvm.loop !40

.lr.ph399:                                        ; preds = %.lr.ph399.preheader, %176
  %indvars.iv482 = phi i64 [ %175, %.lr.ph399.preheader ], [ %indvars.iv.next483, %176 ]
  %177 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv482
  %178 = load i32, ptr %177, align 4, !tbaa !25
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds i32, ptr %18, i64 %179
  %181 = load i32, ptr %180, align 4, !tbaa !25
  %182 = icmp eq i32 %181, %117
  br i1 %182, label %183, label %176

183:                                              ; preds = %.lr.ph399
  %184 = add nsw i32 %.0336400, 1
  %185 = sext i32 %.0336400 to i64
  %186 = getelementptr inbounds i32, ptr %25, i64 %185
  %187 = trunc nuw nsw i64 %indvars.iv486 to i32
  store i32 %187, ptr %186, align 4, !tbaa !25
  br label %.loopexit

.loopexit:                                        ; preds = %176, %169, %.lr.ph404, %183
  %.1337 = phi i32 [ %184, %183 ], [ %.0336400, %.lr.ph404 ], [ %.0336400, %169 ], [ %.0336400, %176 ]
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %exitcond490.not = icmp eq i64 %indvars.iv.next487, %wide.trip.count489
  br i1 %exitcond490.not, label %.preheader372, label %.lr.ph404, !llvm.loop !41

.preheader371:                                    ; preds = %._crit_edge409, %161, %.preheader372
  %188 = phi i1 [ false, %.preheader372 ], [ false, %161 ], [ %165, %._crit_edge409 ]
  %.0336.lcssa564 = phi i32 [ %.1337, %.preheader372 ], [ 0, %161 ], [ %.1337, %._crit_edge409 ]
  %.0352.lcssa = phi i32 [ 0, %.preheader372 ], [ 0, %161 ], [ %194, %._crit_edge409 ]
  br i1 %69, label %.lr.ph416.preheader, label %._crit_edge417.thread

.lr.ph416.preheader:                              ; preds = %.preheader371
  br i1 %104, label %._crit_edge417.unr-lcssa, label %.lr.ph416

._crit_edge417.thread:                            ; preds = %.preheader371
  tail call void @__ikeysort(i32 noundef 0, ptr noundef %31) #5
  br label %._crit_edge434

.lr.ph412:                                        ; preds = %.lr.ph412.preheader, %._crit_edge409
  %indvars.iv494 = phi i64 [ 0, %.lr.ph412.preheader ], [ %indvars.iv.next495, %._crit_edge409 ]
  %.0352410 = phi i32 [ 0, %.lr.ph412.preheader ], [ %194, %._crit_edge409 ]
  %189 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv494
  %190 = load i32, ptr %189, align 4, !tbaa !25
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %14, i64 %191
  %193 = load i32, ptr %192, align 4, !tbaa !25
  %194 = add nsw i32 %193, %.0352410
  %195 = getelementptr inbounds i32, ptr %10, i64 %191
  %196 = load i32, ptr %195, align 4, !tbaa !25
  %197 = getelementptr i8, ptr %195, i64 4
  %198 = load i32, ptr %197, align 4, !tbaa !25
  %199 = icmp slt i32 %196, %198
  br i1 %199, label %.lr.ph408.preheader, label %._crit_edge409

.lr.ph408.preheader:                              ; preds = %.lr.ph412
  %200 = sext i32 %196 to i64
  br label %.lr.ph408

.lr.ph408:                                        ; preds = %.lr.ph408.preheader, %214
  %201 = phi i32 [ %198, %.lr.ph408.preheader ], [ %215, %214 ]
  %indvars.iv491 = phi i64 [ %200, %.lr.ph408.preheader ], [ %indvars.iv.next492, %214 ]
  %202 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv491
  %203 = load i32, ptr %202, align 4, !tbaa !25
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds i32, ptr %18, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !25
  %.not365 = icmp eq i32 %206, %163
  br i1 %.not365, label %214, label %207

207:                                              ; preds = %.lr.ph408
  %208 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv491
  %209 = load i32, ptr %208, align 4, !tbaa !25
  %210 = sext i32 %206 to i64
  %211 = getelementptr inbounds i32, ptr %24, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !25
  %213 = add nsw i32 %212, %209
  store i32 %213, ptr %211, align 4, !tbaa !25
  %.pre535 = load i32, ptr %197, align 4, !tbaa !25
  br label %214

214:                                              ; preds = %.lr.ph408, %207
  %215 = phi i32 [ %201, %.lr.ph408 ], [ %.pre535, %207 ]
  %indvars.iv.next492 = add nsw i64 %indvars.iv491, 1
  %216 = sext i32 %215 to i64
  %217 = icmp slt i64 %indvars.iv.next492, %216
  br i1 %217, label %.lr.ph408, label %._crit_edge409, !llvm.loop !42

._crit_edge409:                                   ; preds = %214, %.lr.ph412
  %indvars.iv.next495 = add nuw nsw i64 %indvars.iv494, 1
  %exitcond498.not = icmp eq i64 %indvars.iv.next495, %wide.trip.count497
  br i1 %exitcond498.not, label %.preheader371, label %.lr.ph412, !llvm.loop !43

.lr.ph416:                                        ; preds = %.lr.ph416.preheader, %238
  %indvars.iv499 = phi i64 [ %indvars.iv.next500.1, %238 ], [ 0, %.lr.ph416.preheader ]
  %.0338414 = phi i32 [ %.1339.1, %238 ], [ 0, %.lr.ph416.preheader ]
  %niter608 = phi i64 [ %niter608.next.1, %238 ], [ 0, %.lr.ph416.preheader ]
  %218 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv499
  %219 = load i32, ptr %218, align 4, !tbaa !25
  %220 = icmp sgt i32 %219, 0
  br i1 %220, label %221, label %.lr.ph416.1

221:                                              ; preds = %.lr.ph416
  %222 = sub nsw i32 0, %219
  %223 = sext i32 %.0338414 to i64
  %224 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %223
  store i32 %222, ptr %224, align 4, !tbaa !35
  %225 = add nsw i32 %.0338414, 1
  %226 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %223, i32 1
  %227 = trunc nuw nsw i64 %indvars.iv499 to i32
  store i32 %227, ptr %226, align 4, !tbaa !37
  br label %.lr.ph416.1

.lr.ph416.1:                                      ; preds = %.lr.ph416, %221
  %.1339 = phi i32 [ %225, %221 ], [ %.0338414, %.lr.ph416 ]
  %indvars.iv.next500 = or disjoint i64 %indvars.iv499, 1
  %228 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv.next500
  %229 = load i32, ptr %228, align 4, !tbaa !25
  %230 = icmp sgt i32 %229, 0
  br i1 %230, label %231, label %238

231:                                              ; preds = %.lr.ph416.1
  %232 = sub nsw i32 0, %229
  %233 = sext i32 %.1339 to i64
  %234 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %233
  store i32 %232, ptr %234, align 4, !tbaa !35
  %235 = add nsw i32 %.1339, 1
  %236 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %233, i32 1
  %237 = trunc nuw nsw i64 %indvars.iv.next500 to i32
  store i32 %237, ptr %236, align 4, !tbaa !37
  br label %238

238:                                              ; preds = %231, %.lr.ph416.1
  %.1339.1 = phi i32 [ %235, %231 ], [ %.1339, %.lr.ph416.1 ]
  %indvars.iv.next500.1 = add nuw nsw i64 %indvars.iv499, 2
  %niter608.next.1 = add i64 %niter608, 2
  %niter608.ncmp.1 = icmp eq i64 %niter608.next.1, %unroll_iter607
  br i1 %niter608.ncmp.1, label %._crit_edge417.unr-lcssa, label %.lr.ph416, !llvm.loop !44

._crit_edge417.unr-lcssa:                         ; preds = %238, %.lr.ph416.preheader
  %.1339.lcssa.ph = phi i32 [ poison, %.lr.ph416.preheader ], [ %.1339.1, %238 ]
  %indvars.iv499.unr = phi i64 [ 0, %.lr.ph416.preheader ], [ %indvars.iv.next500.1, %238 ]
  %.0338414.unr = phi i32 [ 0, %.lr.ph416.preheader ], [ %.1339.1, %238 ]
  br i1 %lcmp.mod605.not, label %._crit_edge417, label %.lr.ph416.epil

.lr.ph416.epil:                                   ; preds = %._crit_edge417.unr-lcssa
  %239 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv499.unr
  %240 = load i32, ptr %239, align 4, !tbaa !25
  %241 = icmp sgt i32 %240, 0
  br i1 %241, label %242, label %._crit_edge417

242:                                              ; preds = %.lr.ph416.epil
  %243 = sub nsw i32 0, %240
  %244 = sext i32 %.0338414.unr to i64
  %245 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %244
  store i32 %243, ptr %245, align 4, !tbaa !35
  %246 = add nsw i32 %.0338414.unr, 1
  %247 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %244, i32 1
  %248 = trunc nuw nsw i64 %indvars.iv499.unr to i32
  store i32 %248, ptr %247, align 4, !tbaa !37
  br label %._crit_edge417

._crit_edge417:                                   ; preds = %.lr.ph416.epil, %242, %._crit_edge417.unr-lcssa
  %.1339.lcssa = phi i32 [ %.1339.lcssa.ph, %._crit_edge417.unr-lcssa ], [ %246, %242 ], [ %.0338414.unr, %.lr.ph416.epil ]
  tail call void @__ikeysort(i32 noundef %.1339.lcssa, ptr noundef %31) #5
  %249 = icmp sgt i32 %.1339.lcssa, 0
  br i1 %249, label %.lr.ph433.preheader, label %._crit_edge434

.lr.ph433.preheader:                              ; preds = %._crit_edge417
  %wide.trip.count517 = zext nneg i32 %.1339.lcssa to i64
  br label %.lr.ph433

.lr.ph433:                                        ; preds = %.lr.ph433.preheader, %312
  %indvars.iv514 = phi i64 [ 0, %.lr.ph433.preheader ], [ %indvars.iv.next515, %312 ]
  %.0344430 = phi i32 [ -1, %.lr.ph433.preheader ], [ %.2346, %312 ]
  %250 = getelementptr inbounds %struct.KeyValueType, ptr %31, i64 %indvars.iv514, i32 1
  %251 = load i32, ptr %250, align 4, !tbaa !37
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %120, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !25
  %255 = icmp sgt i32 %254, 0
  br i1 %255, label %256, label %312

256:                                              ; preds = %.lr.ph433
  %257 = getelementptr inbounds i32, ptr %21, i64 %252
  %258 = load i32, ptr %257, align 4, !tbaa !25
  %259 = add nsw i32 %258, %.0352.lcssa
  %260 = getelementptr inbounds i32, ptr %22, i64 %252
  %261 = load i32, ptr %260, align 4, !tbaa !25
  %262 = icmp sgt i32 %259, %261
  br i1 %262, label %312, label %.preheader370

.preheader370:                                    ; preds = %256
  br i1 %69, label %.lr.ph420.preheader, label %._crit_edge421

.lr.ph420.preheader:                              ; preds = %.preheader370
  %invariant.gep572 = getelementptr i32, ptr %29, i64 %252
  br label %.lr.ph420

.lr.ph420:                                        ; preds = %.lr.ph420.preheader, %275
  %indvars.iv504 = phi i64 [ 0, %.lr.ph420.preheader ], [ %indvars.iv.next505, %275 ]
  %263 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv504
  %264 = load i32, ptr %263, align 4, !tbaa !25
  %265 = icmp sgt i32 %264, 0
  br i1 %265, label %266, label %275

266:                                              ; preds = %.lr.ph420
  %267 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv504
  %268 = load i32, ptr %267, align 4, !tbaa !25
  %269 = load i32, ptr %152, align 4, !tbaa !25
  %270 = add nsw i32 %269, -1
  %.not = icmp slt i32 %268, %270
  br i1 %.not, label %275, label %271

271:                                              ; preds = %266
  %272 = mul nuw nsw i64 %indvars.iv504, %101
  %gep573 = getelementptr i32, ptr %invariant.gep572, i64 %272
  %273 = load i32, ptr %gep573, align 4, !tbaa !25
  %274 = icmp eq i32 %273, 0
  br i1 %274, label %._crit_edge421.loopexit, label %275

275:                                              ; preds = %.lr.ph420, %266, %271
  %indvars.iv.next505 = add nuw nsw i64 %indvars.iv504, 1
  %exitcond508.not = icmp eq i64 %indvars.iv.next505, %wide.trip.count507
  br i1 %exitcond508.not, label %.preheader, label %.lr.ph420, !llvm.loop !45

._crit_edge421.loopexit:                          ; preds = %271
  %276 = trunc nuw nsw i64 %indvars.iv504 to i32
  br label %._crit_edge421

._crit_edge421:                                   ; preds = %._crit_edge421.loopexit, %.preheader370
  %.4331.lcssa = phi i32 [ 0, %.preheader370 ], [ %276, %._crit_edge421.loopexit ]
  %277 = icmp eq i32 %.4331.lcssa, %2
  br i1 %277, label %.preheader, label %312

.preheader:                                       ; preds = %275, %._crit_edge421
  br i1 %69, label %.lr.ph427, label %._crit_edge428

.lr.ph427:                                        ; preds = %.preheader
  %278 = mul nsw i32 %251, %2
  %279 = sext i32 %278 to i64
  %invariant.gep574 = getelementptr i32, ptr %29, i64 %279
  br i1 %105, label %._crit_edge428.loopexit.unr-lcssa, label %.lr.ph427.new

.lr.ph427.new:                                    ; preds = %.lr.ph427, %295
  %indvars.iv509 = phi i64 [ %indvars.iv.next510.1, %295 ], [ 0, %.lr.ph427 ]
  %.0348425 = phi i32 [ %.1349.1, %295 ], [ 0, %.lr.ph427 ]
  %niter613 = phi i64 [ %niter613.next.1, %295 ], [ 0, %.lr.ph427 ]
  %280 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv509
  %281 = load i32, ptr %280, align 4, !tbaa !25
  %282 = icmp sgt i32 %281, 0
  br i1 %282, label %283, label %287

283:                                              ; preds = %.lr.ph427.new
  %gep575 = getelementptr i32, ptr %invariant.gep574, i64 %indvars.iv509
  %284 = load i32, ptr %gep575, align 4, !tbaa !25
  %285 = icmp eq i32 %284, 0
  %286 = zext i1 %285 to i32
  %spec.select367 = add nsw i32 %.0348425, %286
  br label %287

287:                                              ; preds = %283, %.lr.ph427.new
  %.1349 = phi i32 [ %.0348425, %.lr.ph427.new ], [ %spec.select367, %283 ]
  %indvars.iv.next510 = or disjoint i64 %indvars.iv509, 1
  %288 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv.next510
  %289 = load i32, ptr %288, align 4, !tbaa !25
  %290 = icmp sgt i32 %289, 0
  br i1 %290, label %291, label %295

291:                                              ; preds = %287
  %gep575.1 = getelementptr i32, ptr %invariant.gep574, i64 %indvars.iv.next510
  %292 = load i32, ptr %gep575.1, align 4, !tbaa !25
  %293 = icmp eq i32 %292, 0
  %294 = zext i1 %293 to i32
  %spec.select367.1 = add nsw i32 %.1349, %294
  br label %295

295:                                              ; preds = %291, %287
  %.1349.1 = phi i32 [ %.1349, %287 ], [ %spec.select367.1, %291 ]
  %indvars.iv.next510.1 = add nuw nsw i64 %indvars.iv509, 2
  %niter613.next.1 = add i64 %niter613, 2
  %niter613.ncmp.1 = icmp eq i64 %niter613.next.1, %unroll_iter612
  br i1 %niter613.ncmp.1, label %._crit_edge428.loopexit.unr-lcssa, label %.lr.ph427.new, !llvm.loop !46

._crit_edge428.loopexit.unr-lcssa:                ; preds = %295, %.lr.ph427
  %.1349.lcssa.ph = phi i32 [ poison, %.lr.ph427 ], [ %.1349.1, %295 ]
  %indvars.iv509.unr = phi i64 [ 0, %.lr.ph427 ], [ %indvars.iv.next510.1, %295 ]
  %.0348425.unr = phi i32 [ 0, %.lr.ph427 ], [ %.1349.1, %295 ]
  br i1 %lcmp.mod610.not, label %._crit_edge428, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge428.loopexit.unr-lcssa
  %296 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv509.unr
  %297 = load i32, ptr %296, align 4, !tbaa !25
  %298 = icmp sgt i32 %297, 0
  br i1 %298, label %299, label %._crit_edge428

299:                                              ; preds = %.epil.preheader
  %gep575.epil = getelementptr i32, ptr %invariant.gep574, i64 %indvars.iv509.unr
  %300 = load i32, ptr %gep575.epil, align 4, !tbaa !25
  %301 = icmp eq i32 %300, 0
  %302 = zext i1 %301 to i32
  %spec.select367.epil = add nsw i32 %.0348425.unr, %302
  br label %._crit_edge428

._crit_edge428:                                   ; preds = %._crit_edge428.loopexit.unr-lcssa, %299, %.epil.preheader, %.preheader
  %.0348.lcssa = phi i32 [ 0, %.preheader ], [ %.1349.lcssa.ph, %._crit_edge428.loopexit.unr-lcssa ], [ %.0348425.unr, %.epil.preheader ], [ %spec.select367.epil, %299 ]
  %303 = icmp eq i32 %.0344430, -1
  br i1 %303, label %304, label %310

304:                                              ; preds = %._crit_edge428
  %305 = getelementptr inbounds i32, ptr %23, i64 %252
  %306 = load i32, ptr %305, align 4, !tbaa !25
  %307 = add nsw i32 %306, %.0348.lcssa
  %308 = load i32, ptr %152, align 4, !tbaa !25
  %309 = icmp slt i32 %307, %308
  %spec.select368 = select i1 %309, i32 %251, i32 -1
  br label %310

310:                                              ; preds = %304, %._crit_edge428
  %.1345 = phi i32 [ %.0344430, %._crit_edge428 ], [ %spec.select368, %304 ]
  %311 = icmp eq i32 %.0348.lcssa, 0
  br i1 %311, label %._crit_edge434, label %312

312:                                              ; preds = %.lr.ph433, %310, %._crit_edge421, %256
  %.2346 = phi i32 [ %.0344430, %256 ], [ %.1345, %310 ], [ %.0344430, %._crit_edge421 ], [ %.0344430, %.lr.ph433 ]
  %indvars.iv.next515 = add nuw nsw i64 %indvars.iv514, 1
  %exitcond518.not = icmp eq i64 %indvars.iv.next515, %wide.trip.count517
  br i1 %exitcond518.not, label %._crit_edge434, label %.lr.ph433, !llvm.loop !47

._crit_edge434:                                   ; preds = %312, %310, %._crit_edge417.thread, %._crit_edge417
  %.3347 = phi i32 [ -1, %._crit_edge417 ], [ -1, %._crit_edge417.thread ], [ %.1345, %310 ], [ %.2346, %312 ]
  %.0342 = phi i32 [ -1, %._crit_edge417 ], [ -1, %._crit_edge417.thread ], [ %251, %310 ], [ -1, %312 ]
  %313 = icmp eq i32 %.0342, -1
  %314 = icmp ne i32 %.3347, -1
  %or.cond = select i1 %313, i1 %314, i1 false
  %spec.select369 = select i1 %or.cond, i32 %.3347, i32 %.0342
  %315 = icmp eq i32 %spec.select369, -1
  br i1 %315, label %153, label %316

316:                                              ; preds = %._crit_edge434
  %317 = sext i32 %spec.select369 to i64
  %318 = getelementptr inbounds i32, ptr %21, i64 %317
  %319 = load i32, ptr %318, align 4, !tbaa !25
  %320 = add nsw i32 %319, %.0352.lcssa
  store i32 %320, ptr %318, align 4, !tbaa !25
  %321 = sext i32 %163 to i64
  %322 = getelementptr inbounds i32, ptr %21, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !25
  %324 = sub nsw i32 %323, %.0352.lcssa
  store i32 %324, ptr %322, align 4, !tbaa !25
  br i1 %188, label %.lr.ph455, label %.loopexit373.backedge

.loopexit373.backedge:                            ; preds = %._crit_edge452, %316
  br label %.loopexit373

.lr.ph455:                                        ; preds = %316
  %325 = mul nsw i32 %163, %2
  %326 = getelementptr inbounds i32, ptr %23, i64 %321
  %327 = mul nsw i32 %spec.select369, %2
  %328 = getelementptr inbounds i32, ptr %23, i64 %317
  %wide.trip.count533 = zext nneg i32 %.0336.lcssa564 to i64
  br label %329

329:                                              ; preds = %.lr.ph455, %._crit_edge452
  %indvars.iv530 = phi i64 [ 0, %.lr.ph455 ], [ %indvars.iv.next531, %._crit_edge452 ]
  %330 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv530
  %331 = load i32, ptr %330, align 4, !tbaa !25
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds i32, ptr %18, i64 %332
  store i32 %spec.select369, ptr %333, align 4, !tbaa !25
  %334 = getelementptr inbounds i32, ptr %10, i64 %332
  %335 = load i32, ptr %334, align 4, !tbaa !25
  %336 = getelementptr i8, ptr %334, i64 4
  %337 = load i32, ptr %336, align 4, !tbaa !25
  %338 = icmp slt i32 %335, %337
  br i1 %338, label %.lr.ph447.preheader, label %._crit_edge448

.lr.ph447.preheader:                              ; preds = %329
  %339 = sext i32 %335 to i64
  br label %.lr.ph447

.lr.ph447:                                        ; preds = %.lr.ph447.preheader, %395
  %indvars.iv524 = phi i64 [ %339, %.lr.ph447.preheader ], [ %indvars.iv.next525, %395 ]
  %340 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv524
  %341 = load i32, ptr %340, align 4, !tbaa !25
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %18, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !25
  %.not364 = icmp eq i32 %344, %163
  br i1 %.not364, label %395, label %345

345:                                              ; preds = %.lr.ph447
  %346 = add nsw i32 %344, %325
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %29, i64 %347
  %349 = load i32, ptr %348, align 4, !tbaa !25
  %350 = icmp eq i32 %349, 0
  br i1 %350, label %351, label %353

351:                                              ; preds = %345
  %352 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %.pre536 = load i32, ptr %343, align 4, !tbaa !25
  %.pre552 = add nsw i32 %.pre536, %325
  %.pre554 = sext i32 %.pre552 to i64
  br label %353

353:                                              ; preds = %351, %345
  %.pre-phi555 = phi i64 [ %.pre554, %351 ], [ %347, %345 ]
  %354 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv524
  %355 = load i32, ptr %354, align 4, !tbaa !25
  %356 = getelementptr inbounds i32, ptr %29, i64 %.pre-phi555
  %357 = load i32, ptr %356, align 4, !tbaa !25
  %358 = sub nsw i32 %357, %355
  store i32 %358, ptr %356, align 4, !tbaa !25
  %359 = load i32, ptr %343, align 4, !tbaa !25
  %360 = add nsw i32 %359, %325
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %29, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !25
  %364 = icmp eq i32 %363, 0
  br i1 %364, label %365, label %368

365:                                              ; preds = %353
  %366 = load i32, ptr %326, align 4, !tbaa !25
  %367 = add nsw i32 %366, -1
  store i32 %367, ptr %326, align 4, !tbaa !25
  %.pre537 = load i32, ptr %343, align 4, !tbaa !25
  br label %368

368:                                              ; preds = %365, %353
  %369 = phi i32 [ %.pre537, %365 ], [ %359, %353 ]
  %370 = mul nsw i32 %369, %2
  %371 = add nsw i32 %370, %163
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds i32, ptr %29, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !25
  %375 = icmp eq i32 %374, 0
  br i1 %375, label %376, label %378

376:                                              ; preds = %368
  %377 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %.pre538 = load i32, ptr %343, align 4, !tbaa !25
  %.pre556 = mul nsw i32 %.pre538, %2
  %.pre558 = add nsw i32 %.pre556, %163
  %.pre560 = sext i32 %.pre558 to i64
  br label %378

378:                                              ; preds = %376, %368
  %.pre-phi561 = phi i64 [ %.pre560, %376 ], [ %372, %368 ]
  %379 = load i32, ptr %354, align 4, !tbaa !25
  %380 = getelementptr inbounds i32, ptr %29, i64 %.pre-phi561
  %381 = load i32, ptr %380, align 4, !tbaa !25
  %382 = sub nsw i32 %381, %379
  store i32 %382, ptr %380, align 4, !tbaa !25
  %383 = load i32, ptr %343, align 4, !tbaa !25
  %384 = mul nsw i32 %383, %2
  %385 = add nsw i32 %384, %163
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %29, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !25
  %389 = icmp eq i32 %388, 0
  br i1 %389, label %390, label %395

390:                                              ; preds = %378
  %391 = sext i32 %383 to i64
  %392 = getelementptr inbounds i32, ptr %23, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !25
  %394 = add nsw i32 %393, -1
  store i32 %394, ptr %392, align 4, !tbaa !25
  br label %395

395:                                              ; preds = %.lr.ph447, %390, %378
  %indvars.iv.next525 = add nsw i64 %indvars.iv524, 1
  %396 = load i32, ptr %336, align 4, !tbaa !25
  %397 = sext i32 %396 to i64
  %398 = icmp slt i64 %indvars.iv.next525, %397
  br i1 %398, label %.lr.ph447, label %._crit_edge448.loopexit, !llvm.loop !48

._crit_edge448.loopexit:                          ; preds = %395
  %.pre539 = load i32, ptr %334, align 4, !tbaa !25
  br label %._crit_edge448

._crit_edge448:                                   ; preds = %._crit_edge448.loopexit, %329
  %399 = phi i32 [ %396, %._crit_edge448.loopexit ], [ %337, %329 ]
  %400 = phi i32 [ %.pre539, %._crit_edge448.loopexit ], [ %335, %329 ]
  %401 = icmp slt i32 %400, %399
  br i1 %401, label %.lr.ph451.preheader, label %._crit_edge452

.lr.ph451.preheader:                              ; preds = %._crit_edge448
  %402 = sext i32 %400 to i64
  br label %.lr.ph451

.lr.ph451:                                        ; preds = %.lr.ph451.preheader, %441
  %403 = phi i32 [ %399, %.lr.ph451.preheader ], [ %442, %441 ]
  %indvars.iv527 = phi i64 [ %402, %.lr.ph451.preheader ], [ %indvars.iv.next528, %441 ]
  %404 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv527
  %405 = load i32, ptr %404, align 4, !tbaa !25
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %18, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !25
  %.not363 = icmp eq i32 %408, %spec.select369
  br i1 %.not363, label %441, label %409

409:                                              ; preds = %.lr.ph451
  %410 = add nsw i32 %408, %327
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i32, ptr %29, i64 %411
  %413 = load i32, ptr %412, align 4, !tbaa !25
  %414 = icmp eq i32 %413, 0
  br i1 %414, label %415, label %418

415:                                              ; preds = %409
  %416 = load i32, ptr %328, align 4, !tbaa !25
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %328, align 4, !tbaa !25
  %.pre540 = load i32, ptr %407, align 4, !tbaa !25
  %.pre543 = add nsw i32 %.pre540, %327
  %.pre544 = sext i32 %.pre543 to i64
  br label %418

418:                                              ; preds = %415, %409
  %.pre-phi545 = phi i64 [ %.pre544, %415 ], [ %411, %409 ]
  %419 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv527
  %420 = load i32, ptr %419, align 4, !tbaa !25
  %421 = getelementptr inbounds i32, ptr %29, i64 %.pre-phi545
  %422 = load i32, ptr %421, align 4, !tbaa !25
  %423 = add nsw i32 %422, %420
  store i32 %423, ptr %421, align 4, !tbaa !25
  %424 = load i32, ptr %407, align 4, !tbaa !25
  %425 = mul nsw i32 %424, %2
  %426 = add nsw i32 %425, %spec.select369
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds i32, ptr %29, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !25
  %430 = icmp eq i32 %429, 0
  br i1 %430, label %431, label %436

431:                                              ; preds = %418
  %432 = sext i32 %424 to i64
  %433 = getelementptr inbounds i32, ptr %23, i64 %432
  %434 = load i32, ptr %433, align 4, !tbaa !25
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %433, align 4, !tbaa !25
  %.pre541 = load i32, ptr %407, align 4, !tbaa !25
  %.pre546 = mul nsw i32 %.pre541, %2
  %.pre548 = add nsw i32 %.pre546, %spec.select369
  %.pre550 = sext i32 %.pre548 to i64
  br label %436

436:                                              ; preds = %431, %418
  %.pre-phi551 = phi i64 [ %.pre550, %431 ], [ %427, %418 ]
  %437 = load i32, ptr %419, align 4, !tbaa !25
  %438 = getelementptr inbounds i32, ptr %29, i64 %.pre-phi551
  %439 = load i32, ptr %438, align 4, !tbaa !25
  %440 = add nsw i32 %439, %437
  store i32 %440, ptr %438, align 4, !tbaa !25
  %.pre542 = load i32, ptr %336, align 4, !tbaa !25
  br label %441

441:                                              ; preds = %.lr.ph451, %436
  %442 = phi i32 [ %403, %.lr.ph451 ], [ %.pre542, %436 ]
  %indvars.iv.next528 = add nsw i64 %indvars.iv527, 1
  %443 = sext i32 %442 to i64
  %444 = icmp slt i64 %indvars.iv.next528, %443
  br i1 %444, label %.lr.ph451, label %._crit_edge452, !llvm.loop !49

._crit_edge452:                                   ; preds = %441, %._crit_edge448
  %indvars.iv.next531 = add nuw nsw i64 %indvars.iv530, 1
  %exitcond534.not = icmp eq i64 %indvars.iv.next531, %wide.trip.count533
  br i1 %exitcond534.not, label %.loopexit373.backedge, label %329, !llvm.loop !50

.critedge:                                        ; preds = %.loopexit373, %._crit_edge396, %153, %154, %._crit_edge396.thread
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %2) #5
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %2) #5
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %2) #5
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %8) #5
  call void (ptr, ...) @GKfree(ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef null) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  ret void
}

declare void @__ikeysort(i32 noundef, ptr noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress 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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

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


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