; LLVM IR from siconos/siconos :: externals/lbl/metis4/subdomains.ll_ (EliminateSubDomainEdges)

; 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.8 = external hidden unnamed_addr constant [30 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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @__EliminateSubDomainEdges(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 ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graphdef, ptr %62, i32 0, i32 15
  %64 = load ptr, ptr %63, align 8, !tbaa !18
  store ptr %64, ptr %34, align 8, !tbaa !5
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = load i32, ptr %7, align 4, !tbaa !9
  %67 = call ptr @__idxwspacemalloc(ptr noundef %65, i32 noundef %66)
  store ptr %67, ptr %36, align 8, !tbaa !5
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = load i32, ptr %7, align 4, !tbaa !9
  %70 = call ptr @__idxwspacemalloc(ptr noundef %68, i32 noundef %69)
  store ptr %70, ptr %38, align 8, !tbaa !5
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = load i32, ptr %7, align 4, !tbaa !9
  %73 = call ptr @__idxwspacemalloc(ptr noundef %71, i32 noundef %72)
  store ptr %73, ptr %40, align 8, !tbaa !5
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = load i32, ptr %15, align 4, !tbaa !9
  %76 = call ptr @__idxwspacemalloc(ptr noundef %74, i32 noundef %75)
  store ptr %76, ptr %41, align 8, !tbaa !5
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.controldef, ptr %77, i32 0, i32 11
  %79 = getelementptr inbounds %struct.workspacedef, ptr %78, i32 0, i32 7
  %80 = load ptr, ptr %79, align 8, !tbaa !19
  store ptr %80, ptr %37, align 8, !tbaa !5
  %81 = load i32, ptr %7, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = mul i64 %82, 8
  %84 = trunc i64 %83 to i32
  %85 = call ptr @__GKmalloc(i32 noundef %84, ptr noundef @.str.8)
  store ptr %85, ptr %42, align 8, !tbaa !5
  %86 = load i32, ptr %7, align 4, !tbaa !9
  %87 = sext i32 %86 to i64
  %88 = mul i64 %87, 8
  %89 = trunc i64 %88 to i32
  %90 = call ptr @__GKmalloc(i32 noundef %89, ptr noundef @.str.8)
  store ptr %90, ptr %43, align 8, !tbaa !5
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = load i32, ptr %7, align 4, !tbaa !9
  %93 = load ptr, ptr %37, align 8, !tbaa !5
  %94 = load ptr, ptr %38, align 8, !tbaa !5
  call void @__ComputeSubDomainGraph(ptr noundef %91, i32 noundef %92, ptr noundef %93, ptr noundef %94)
  %95 = load i32, ptr %7, align 4, !tbaa !9
  %96 = load ptr, ptr %34, align 8, !tbaa !5
  %97 = call i32 @__idxsum(i32 noundef %95, ptr noundef %96)
  store i32 %97, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %118, %4
  %99 = load i32, ptr %9, align 4, !tbaa !9
  %100 = load i32, ptr %7, align 4, !tbaa !9
  %101 = icmp slt i32 %99, %100
  br i1 %101, label %102, label %121

102:                                              ; preds = %98
  %103 = load ptr, ptr %8, align 8, !tbaa !5
  %104 = load i32, ptr %9, align 4, !tbaa !9
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds float, ptr %103, i64 %105
  %107 = load float, ptr %106, align 4, !tbaa !24
  %108 = fpext float %107 to double
  %109 = fmul double 1.250000e+00, %108
  %110 = load i32, ptr %29, align 4, !tbaa !9
  %111 = sitofp i32 %110 to double
  %112 = fmul double %109, %111
  %113 = fptosi double %112 to i32
  %114 = load ptr, ptr %36, align 8, !tbaa !5
  %115 = load i32, ptr %9, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i32, ptr %114, i64 %116
  store i32 %113, ptr %117, align 4, !tbaa !9
  br label %118

118:                                              ; preds = %102
  %119 = load i32, ptr %9, align 4, !tbaa !9
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr %9, align 4, !tbaa !9
  br label %98, !llvm.loop !25

121:                                              ; preds = %98
  br label %122

122:                                              ; preds = %561, %121
  %123 = load i32, ptr %7, align 4, !tbaa !9
  %124 = load ptr, ptr %38, align 8, !tbaa !5
  %125 = call i32 @__idxsum(i32 noundef %123, ptr noundef %124)
  store i32 %125, ptr %16, align 4, !tbaa !9
  %126 = load i32, ptr %16, align 4, !tbaa !9
  %127 = load i32, ptr %7, align 4, !tbaa !9
  %128 = sdiv i32 %126, %127
  store i32 %128, ptr %18, align 4, !tbaa !9
  %129 = load ptr, ptr %38, align 8, !tbaa !5
  %130 = load i32, ptr %7, align 4, !tbaa !9
  %131 = load ptr, ptr %38, align 8, !tbaa !5
  %132 = call i32 @__idxamax(i32 noundef %130, ptr noundef %131)
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds i32, ptr %129, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !9
  store i32 %135, ptr %17, align 4, !tbaa !9
  %136 = load i32, ptr %17, align 4, !tbaa !9
  %137 = sitofp i32 %136 to double
  %138 = load i32, ptr %18, align 4, !tbaa !9
  %139 = sitofp i32 %138 to double
  %140 = fmul double 1.400000e+00, %139
  %141 = fcmp olt double %137, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %122
  br label %562

143:                                              ; preds = %122
  %144 = load i32, ptr %7, align 4, !tbaa !9
  %145 = load ptr, ptr %38, align 8, !tbaa !5
  %146 = call i32 @__idxamax(i32 noundef %144, ptr noundef %145)
  store i32 %146, ptr %13, align 4, !tbaa !9
  %147 = load ptr, ptr %37, align 8, !tbaa !5
  %148 = load i32, ptr %13, align 4, !tbaa !9
  %149 = load i32, ptr %7, align 4, !tbaa !9
  %150 = mul nsw i32 %148, %149
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds i32, ptr %147, i64 %151
  store ptr %152, ptr %39, align 8, !tbaa !5
  %153 = load i32, ptr %7, align 4, !tbaa !9
  %154 = load ptr, ptr %39, align 8, !tbaa !5
  %155 = call i32 @__idxsum(i32 noundef %153, ptr noundef %154)
  store i32 %155, 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 %156

156:                                              ; preds = %186, %143
  %157 = load i32, ptr %9, align 4, !tbaa !9
  %158 = load i32, ptr %7, align 4, !tbaa !9
  %159 = icmp slt i32 %157, %158
  br i1 %159, label %160, label %189

160:                                              ; preds = %156
  %161 = load ptr, ptr %39, align 8, !tbaa !5
  %162 = load i32, ptr %9, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i32, ptr %161, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = icmp sgt i32 %165, 0
  br i1 %166, label %167, label %185

167:                                              ; preds = %160
  %168 = load ptr, ptr %39, align 8, !tbaa !5
  %169 = load i32, ptr %9, align 4, !tbaa !9
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds i32, ptr %168, i64 %170
  %172 = load i32, ptr %171, align 4, !tbaa !9
  %173 = load ptr, ptr %43, align 8, !tbaa !5
  %174 = load i32, ptr %22, align 4, !tbaa !9
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds %struct.KeyValueType, ptr %173, i64 %175
  %177 = getelementptr inbounds %struct.KeyValueType, ptr %176, i32 0, i32 0
  store i32 %172, ptr %177, align 4, !tbaa !27
  %178 = load i32, ptr %9, align 4, !tbaa !9
  %179 = load ptr, ptr %43, align 8, !tbaa !5
  %180 = load i32, ptr %22, align 4, !tbaa !9
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr %22, align 4, !tbaa !9
  %182 = sext i32 %180 to i64
  %183 = getelementptr inbounds %struct.KeyValueType, ptr %179, i64 %182
  %184 = getelementptr inbounds %struct.KeyValueType, ptr %183, i32 0, i32 1
  store i32 %178, ptr %184, align 4, !tbaa !29
  br label %185

185:                                              ; preds = %167, %160
  br label %186

186:                                              ; preds = %185
  %187 = load i32, ptr %9, align 4, !tbaa !9
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %9, align 4, !tbaa !9
  br label %156, !llvm.loop !30

189:                                              ; preds = %156
  %190 = load i32, ptr %22, align 4, !tbaa !9
  %191 = load ptr, ptr %43, align 8, !tbaa !5
  call void @__ikeysort(i32 noundef %190, ptr noundef %191)
  store i32 0, ptr %27, align 4, !tbaa !9
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %192

192:                                              ; preds = %554, %189
  %193 = load i32, ptr %26, align 4, !tbaa !9
  %194 = load i32, ptr %22, align 4, !tbaa !9
  %195 = icmp slt i32 %193, %194
  br i1 %195, label %196, label %557

196:                                              ; preds = %192
  %197 = load ptr, ptr %43, align 8, !tbaa !5
  %198 = load i32, ptr %26, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds %struct.KeyValueType, ptr %197, i64 %199
  %201 = getelementptr inbounds %struct.KeyValueType, ptr %200, i32 0, i32 0
  %202 = load i32, ptr %201, align 4, !tbaa !27
  %203 = load i32, ptr %19, align 4, !tbaa !9
  %204 = load ptr, ptr %38, align 8, !tbaa !5
  %205 = load i32, ptr %13, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds i32, ptr %204, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !9
  %209 = mul nsw i32 2, %208
  %210 = sdiv i32 %203, %209
  %211 = icmp sgt i32 %202, %210
  br i1 %211, label %212, label %213

212:                                              ; preds = %196
  br label %557

213:                                              ; preds = %196
  %214 = load ptr, ptr %43, align 8, !tbaa !5
  %215 = load i32, ptr %26, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds %struct.KeyValueType, ptr %214, i64 %216
  %218 = getelementptr inbounds %struct.KeyValueType, ptr %217, i32 0, i32 1
  %219 = load i32, ptr %218, align 4, !tbaa !29
  store i32 %219, ptr %14, align 4, !tbaa !9
  %220 = load i32, ptr %7, align 4, !tbaa !9
  %221 = load ptr, ptr %40, align 8, !tbaa !5
  %222 = call ptr @__idxset(i32 noundef %220, i32 noundef 0, ptr noundef %221)
  store i32 0, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %275, %213
  %224 = load i32, ptr %9, align 4, !tbaa !9
  %225 = load i32, ptr %15, align 4, !tbaa !9
  %226 = icmp slt i32 %224, %225
  br i1 %226, label %227, label %278

227:                                              ; preds = %223
  %228 = load ptr, ptr %35, align 8, !tbaa !5
  %229 = load i32, ptr %9, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i32, ptr %228, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !9
  %233 = load i32, ptr %14, align 4, !tbaa !9
  %234 = icmp eq i32 %232, %233
  br i1 %234, label %235, label %274

235:                                              ; preds = %227
  %236 = load ptr, ptr %30, align 8, !tbaa !5
  %237 = load i32, ptr %9, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds i32, ptr %236, i64 %238
  %240 = load i32, ptr %239, align 4, !tbaa !9
  store i32 %240, ptr %11, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %270, %235
  %242 = load i32, ptr %11, align 4, !tbaa !9
  %243 = load ptr, ptr %30, align 8, !tbaa !5
  %244 = load i32, ptr %9, align 4, !tbaa !9
  %245 = add nsw i32 %244, 1
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds i32, ptr %243, i64 %246
  %248 = load i32, ptr %247, align 4, !tbaa !9
  %249 = icmp slt i32 %242, %248
  br i1 %249, label %250, label %273

250:                                              ; preds = %241
  %251 = load ptr, ptr %35, align 8, !tbaa !5
  %252 = load ptr, ptr %31, align 8, !tbaa !5
  %253 = load i32, ptr %11, align 4, !tbaa !9
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds i32, ptr %252, i64 %254
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %251, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = load i32, ptr %13, align 4, !tbaa !9
  %261 = icmp eq i32 %259, %260
  br i1 %261, label %262, label %269

262:                                              ; preds = %250
  %263 = load i32, ptr %9, align 4, !tbaa !9
  %264 = load ptr, ptr %41, align 8, !tbaa !5
  %265 = load i32, ptr %20, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %20, align 4, !tbaa !9
  %267 = sext i32 %265 to i64
  %268 = getelementptr inbounds i32, ptr %264, i64 %267
  store i32 %263, ptr %268, align 4, !tbaa !9
  br label %273

269:                                              ; preds = %250
  br label %270

270:                                              ; preds = %269
  %271 = load i32, ptr %11, align 4, !tbaa !9
  %272 = add nsw i32 %271, 1
  store i32 %272, ptr %11, align 4, !tbaa !9
  br label %241, !llvm.loop !31

273:                                              ; preds = %262, %241
  br label %274

274:                                              ; preds = %273, %227
  br label %275

275:                                              ; preds = %274
  %276 = load i32, ptr %9, align 4, !tbaa !9
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %9, align 4, !tbaa !9
  br label %223, !llvm.loop !32

278:                                              ; preds = %223
  store i32 0, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %279

279:                                              ; preds = %334, %278
  %280 = load i32, ptr %10, align 4, !tbaa !9
  %281 = load i32, ptr %20, align 4, !tbaa !9
  %282 = icmp slt i32 %280, %281
  br i1 %282, label %283, label %337

283:                                              ; preds = %279
  %284 = load ptr, ptr %41, align 8, !tbaa !5
  %285 = load i32, ptr %10, 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
  store i32 %288, ptr %9, align 4, !tbaa !9
  %289 = load ptr, ptr %32, align 8, !tbaa !5
  %290 = load i32, ptr %9, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %289, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !9
  %294 = load i32, ptr %28, align 4, !tbaa !9
  %295 = add nsw i32 %294, %293
  store i32 %295, ptr %28, align 4, !tbaa !9
  %296 = load ptr, ptr %30, align 8, !tbaa !5
  %297 = load i32, ptr %9, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %296, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !9
  store i32 %300, ptr %11, align 4, !tbaa !9
  br label %301

301:                                              ; preds = %330, %283
  %302 = load i32, ptr %11, align 4, !tbaa !9
  %303 = load ptr, ptr %30, align 8, !tbaa !5
  %304 = load i32, ptr %9, align 4, !tbaa !9
  %305 = add nsw i32 %304, 1
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i32, ptr %303, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !9
  %309 = icmp slt i32 %302, %308
  br i1 %309, label %310, label %333

310:                                              ; preds = %301
  %311 = load ptr, ptr %33, align 8, !tbaa !5
  %312 = load i32, ptr %11, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds i32, ptr %311, i64 %313
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = load ptr, ptr %40, align 8, !tbaa !5
  %317 = load ptr, ptr %35, align 8, !tbaa !5
  %318 = load ptr, ptr %31, align 8, !tbaa !5
  %319 = load i32, ptr %11, align 4, !tbaa !9
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds i32, ptr %318, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds i32, ptr %317, i64 %323
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds i32, ptr %316, i64 %326
  %328 = load i32, ptr %327, align 4, !tbaa !9
  %329 = add nsw i32 %328, %315
  store i32 %329, ptr %327, align 4, !tbaa !9
  br label %330

330:                                              ; preds = %310
  %331 = load i32, ptr %11, align 4, !tbaa !9
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %11, align 4, !tbaa !9
  br label %301, !llvm.loop !33

333:                                              ; preds = %301
  br label %334

334:                                              ; preds = %333
  %335 = load i32, ptr %10, align 4, !tbaa !9
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %10, align 4, !tbaa !9
  br label %279, !llvm.loop !34

337:                                              ; preds = %279
  %338 = load ptr, ptr %40, align 8, !tbaa !5
  %339 = load i32, ptr %14, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i32, ptr %338, i64 %340
  store i32 0, ptr %341, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %342

342:                                              ; preds = %373, %337
  %343 = load i32, ptr %9, align 4, !tbaa !9
  %344 = load i32, ptr %7, align 4, !tbaa !9
  %345 = icmp slt i32 %343, %344
  br i1 %345, label %346, label %376

346:                                              ; preds = %342
  %347 = load ptr, ptr %40, align 8, !tbaa !5
  %348 = load i32, ptr %9, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = icmp sgt i32 %351, 0
  br i1 %352, label %353, label %372

353:                                              ; preds = %346
  %354 = load ptr, ptr %40, align 8, !tbaa !5
  %355 = load i32, ptr %9, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %359 = sub nsw i32 0, %358
  %360 = load ptr, ptr %42, align 8, !tbaa !5
  %361 = load i32, ptr %21, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds %struct.KeyValueType, ptr %360, i64 %362
  %364 = getelementptr inbounds %struct.KeyValueType, ptr %363, i32 0, i32 0
  store i32 %359, ptr %364, align 4, !tbaa !27
  %365 = load i32, ptr %9, align 4, !tbaa !9
  %366 = load ptr, ptr %42, align 8, !tbaa !5
  %367 = load i32, ptr %21, align 4, !tbaa !9
  %368 = add nsw i32 %367, 1
  store i32 %368, ptr %21, align 4, !tbaa !9
  %369 = sext i32 %367 to i64
  %370 = getelementptr inbounds %struct.KeyValueType, ptr %366, i64 %369
  %371 = getelementptr inbounds %struct.KeyValueType, ptr %370, i32 0, i32 1
  store i32 %365, ptr %371, align 4, !tbaa !29
  br label %372

372:                                              ; preds = %353, %346
  br label %373

373:                                              ; preds = %372
  %374 = load i32, ptr %9, align 4, !tbaa !9
  %375 = add nsw i32 %374, 1
  store i32 %375, ptr %9, align 4, !tbaa !9
  br label %342, !llvm.loop !35

376:                                              ; preds = %342
  %377 = load i32, ptr %21, align 4, !tbaa !9
  %378 = load ptr, ptr %42, align 8, !tbaa !5
  call void @__ikeysort(i32 noundef %377, ptr noundef %378)
  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 %379

379:                                              ; preds = %513, %376
  %380 = load i32, ptr %9, align 4, !tbaa !9
  %381 = load i32, ptr %21, align 4, !tbaa !9
  %382 = icmp slt i32 %380, %381
  br i1 %382, label %383, label %516

383:                                              ; preds = %379
  %384 = load ptr, ptr %42, align 8, !tbaa !5
  %385 = load i32, ptr %9, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds %struct.KeyValueType, ptr %384, i64 %386
  %388 = getelementptr inbounds %struct.KeyValueType, ptr %387, i32 0, i32 1
  %389 = load i32, ptr %388, align 4, !tbaa !29
  store i32 %389, ptr %12, align 4, !tbaa !9
  %390 = load ptr, ptr %39, align 8, !tbaa !5
  %391 = load i32, ptr %12, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %390, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = icmp sgt i32 %394, 0
  br i1 %395, label %396, label %512

396:                                              ; preds = %383
  %397 = load ptr, ptr %34, align 8, !tbaa !5
  %398 = load i32, ptr %12, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !9
  %402 = load i32, ptr %28, align 4, !tbaa !9
  %403 = add nsw i32 %401, %402
  %404 = load ptr, ptr %36, align 8, !tbaa !5
  %405 = load i32, ptr %12, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %404, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !9
  %409 = icmp sgt i32 %403, %408
  br i1 %409, label %410, label %411

410:                                              ; preds = %396
  br label %513

411:                                              ; preds = %396
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %412

412:                                              ; preds = %449, %411
  %413 = load i32, ptr %11, align 4, !tbaa !9
  %414 = load i32, ptr %7, align 4, !tbaa !9
  %415 = icmp slt i32 %413, %414
  br i1 %415, label %416, label %452

416:                                              ; preds = %412
  %417 = load ptr, ptr %40, align 8, !tbaa !5
  %418 = load i32, ptr %11, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %417, i64 %419
  %421 = load i32, ptr %420, align 4, !tbaa !9
  %422 = icmp sgt i32 %421, 0
  br i1 %422, label %423, label %448

423:                                              ; preds = %416
  %424 = load ptr, ptr %38, align 8, !tbaa !5
  %425 = load i32, ptr %11, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds i32, ptr %424, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !9
  %429 = load ptr, ptr %38, align 8, !tbaa !5
  %430 = load i32, ptr %13, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i32, ptr %429, i64 %431
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = sub nsw i32 %433, 1
  %435 = icmp sge i32 %428, %434
  br i1 %435, label %436, label %448

436:                                              ; preds = %423
  %437 = load ptr, ptr %37, align 8, !tbaa !5
  %438 = load i32, ptr %7, align 4, !tbaa !9
  %439 = load i32, ptr %11, align 4, !tbaa !9
  %440 = mul nsw i32 %438, %439
  %441 = load i32, ptr %12, align 4, !tbaa !9
  %442 = add nsw i32 %440, %441
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds i32, ptr %437, i64 %443
  %445 = load i32, ptr %444, align 4, !tbaa !9
  %446 = icmp eq i32 %445, 0
  br i1 %446, label %447, label %448

447:                                              ; preds = %436
  br label %452

448:                                              ; preds = %436, %423, %416
  br label %449

449:                                              ; preds = %448
  %450 = load i32, ptr %11, align 4, !tbaa !9
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %11, align 4, !tbaa !9
  br label %412, !llvm.loop !36

452:                                              ; preds = %447, %412
  %453 = load i32, ptr %11, align 4, !tbaa !9
  %454 = load i32, ptr %7, align 4, !tbaa !9
  %455 = icmp eq i32 %453, %454
  br i1 %455, label %456, label %511

456:                                              ; preds = %452
  store i32 0, ptr %25, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %457

457:                                              ; preds = %483, %456
  %458 = load i32, ptr %11, align 4, !tbaa !9
  %459 = load i32, ptr %7, align 4, !tbaa !9
  %460 = icmp slt i32 %458, %459
  br i1 %460, label %461, label %486

461:                                              ; preds = %457
  %462 = load ptr, ptr %40, align 8, !tbaa !5
  %463 = load i32, ptr %11, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds i32, ptr %462, i64 %464
  %466 = load i32, ptr %465, align 4, !tbaa !9
  %467 = icmp sgt i32 %466, 0
  br i1 %467, label %468, label %482

468:                                              ; preds = %461
  %469 = load ptr, ptr %37, align 8, !tbaa !5
  %470 = load i32, ptr %7, align 4, !tbaa !9
  %471 = load i32, ptr %12, align 4, !tbaa !9
  %472 = mul nsw i32 %470, %471
  %473 = load i32, ptr %11, align 4, !tbaa !9
  %474 = add nsw i32 %472, %473
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %469, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !9
  %478 = icmp eq i32 %477, 0
  br i1 %478, label %479, label %482

479:                                              ; preds = %468
  %480 = load i32, ptr %25, align 4, !tbaa !9
  %481 = add nsw i32 %480, 1
  store i32 %481, ptr %25, align 4, !tbaa !9
  br label %482

482:                                              ; preds = %479, %468, %461
  br label %483

483:                                              ; preds = %482
  %484 = load i32, ptr %11, align 4, !tbaa !9
  %485 = add nsw i32 %484, 1
  store i32 %485, ptr %11, align 4, !tbaa !9
  br label %457, !llvm.loop !37

486:                                              ; preds = %457
  %487 = load i32, ptr %24, align 4, !tbaa !9
  %488 = icmp eq i32 %487, -1
  br i1 %488, label %489, label %505

489:                                              ; preds = %486
  %490 = load ptr, ptr %38, align 8, !tbaa !5
  %491 = load i32, ptr %12, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds i32, ptr %490, i64 %492
  %494 = load i32, ptr %493, align 4, !tbaa !9
  %495 = load i32, ptr %25, align 4, !tbaa !9
  %496 = add nsw i32 %494, %495
  %497 = load ptr, ptr %38, align 8, !tbaa !5
  %498 = load i32, ptr %13, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i32, ptr %497, i64 %499
  %501 = load i32, ptr %500, align 4, !tbaa !9
  %502 = icmp slt i32 %496, %501
  br i1 %502, label %503, label %505

503:                                              ; preds = %489
  %504 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %504, ptr %24, align 4, !tbaa !9
  br label %505

505:                                              ; preds = %503, %489, %486
  %506 = load i32, ptr %25, align 4, !tbaa !9
  %507 = icmp eq i32 %506, 0
  br i1 %507, label %508, label %510

508:                                              ; preds = %505
  %509 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %509, ptr %23, align 4, !tbaa !9
  br label %516

510:                                              ; preds = %505
  br label %511

511:                                              ; preds = %510, %452
  br label %512

512:                                              ; preds = %511, %383
  br label %513

513:                                              ; preds = %512, %410
  %514 = load i32, ptr %9, align 4, !tbaa !9
  %515 = add nsw i32 %514, 1
  store i32 %515, ptr %9, align 4, !tbaa !9
  br label %379, !llvm.loop !38

516:                                              ; preds = %508, %379
  %517 = load i32, ptr %23, align 4, !tbaa !9
  %518 = icmp eq i32 %517, -1
  br i1 %518, label %519, label %524

519:                                              ; preds = %516
  %520 = load i32, ptr %24, align 4, !tbaa !9
  %521 = icmp ne i32 %520, -1
  br i1 %521, label %522, label %524

522:                                              ; preds = %519
  %523 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %523, ptr %23, align 4, !tbaa !9
  br label %524

524:                                              ; preds = %522, %519, %516
  %525 = load i32, ptr %23, align 4, !tbaa !9
  %526 = icmp eq i32 %525, -1
  br i1 %526, label %527, label %528

527:                                              ; preds = %524
  br label %554

528:                                              ; preds = %524
  br label %529

529:                                              ; preds = %528
  %530 = load i32, ptr %28, align 4, !tbaa !9
  %531 = load ptr, ptr %34, align 8, !tbaa !5
  %532 = load i32, ptr %23, align 4, !tbaa !9
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds i32, ptr %531, i64 %533
  %535 = load i32, ptr %534, align 4, !tbaa !9
  %536 = add nsw i32 %535, %530
  store i32 %536, ptr %534, align 4, !tbaa !9
  %537 = load i32, ptr %28, align 4, !tbaa !9
  %538 = load ptr, ptr %34, align 8, !tbaa !5
  %539 = load i32, ptr %14, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds i32, ptr %538, i64 %540
  %542 = load i32, ptr %541, align 4, !tbaa !9
  %543 = sub nsw i32 %542, %537
  store i32 %543, ptr %541, align 4, !tbaa !9
  br label %544

544:                                              ; preds = %529
  br label %545

545:                                              ; preds = %544
  %546 = load ptr, ptr %5, align 8, !tbaa !5
  %547 = load ptr, ptr %6, align 8, !tbaa !5
  %548 = load ptr, ptr %38, align 8, !tbaa !5
  %549 = load ptr, ptr %37, align 8, !tbaa !5
  %550 = load i32, ptr %7, align 4, !tbaa !9
  %551 = load i32, ptr %23, align 4, !tbaa !9
  %552 = load i32, ptr %20, align 4, !tbaa !9
  %553 = load ptr, ptr %41, align 8, !tbaa !5
  call void @__MoveGroupMConn(ptr noundef %546, ptr noundef %547, ptr noundef %548, ptr noundef %549, i32 noundef %550, i32 noundef %551, i32 noundef %552, ptr noundef %553)
  store i32 1, ptr %27, align 4, !tbaa !9
  br label %557

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

557:                                              ; preds = %545, %212, %192
  %558 = load i32, ptr %27, align 4, !tbaa !9
  %559 = icmp eq i32 %558, 0
  br i1 %559, label %560, label %561

560:                                              ; preds = %557
  br label %562

561:                                              ; preds = %557
  br label %122

562:                                              ; preds = %560, %142
  %563 = load ptr, ptr %5, align 8, !tbaa !5
  %564 = load i32, ptr %7, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %563, i32 noundef %564)
  %565 = load ptr, ptr %5, align 8, !tbaa !5
  %566 = load i32, ptr %7, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %565, i32 noundef %566)
  %567 = load ptr, ptr %5, align 8, !tbaa !5
  %568 = load i32, ptr %7, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %567, i32 noundef %568)
  %569 = load ptr, ptr %5, align 8, !tbaa !5
  %570 = load i32, ptr %15, align 4, !tbaa !9
  call void @__idxwspacefree(ptr noundef %569, i32 noundef %570)
  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 ptr @__GKmalloc(i32 noundef, ptr noundef) #1

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

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

declare void @GKfree(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 = !{!21, !21, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!28, !10, i64 0}
!28 = !{!"KeyValueType", !10, i64 0, !10, i64 4}
!29 = !{!28, !10, i64 4}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.KeyValueType = type { i32, i32 }

@.str.8 = external hidden unnamed_addr constant [30 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

; Function Attrs: nounwind uwtable
declare dso_local void @__ComputeSubDomainGraph(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @__idxamax(i32 noundef, 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

; Function Attrs: nounwind uwtable
define dso_local void @__EliminateSubDomainEdges(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr nocapture noundef readonly %3) local_unnamed_addr #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #3
  %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 @__idxwspacemalloc(ptr noundef %0, i32 noundef %2) #3
  %22 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %2) #3
  %23 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %2) #3
  %24 = tail call ptr @__idxwspacemalloc(ptr noundef %0, i32 noundef %8) #3
  %25 = getelementptr inbounds i8, ptr %0, i64 96
  %26 = load ptr, ptr %25, align 8, !tbaa !17
  %27 = shl i32 %2, 3
  %28 = tail call ptr @__GKmalloc(i32 noundef %27, ptr noundef nonnull @.str.8) #3
  store ptr %28, ptr %5, align 8, !tbaa !22
  %29 = tail call ptr @__GKmalloc(i32 noundef %27, ptr noundef nonnull @.str.8) #3
  store ptr %29, ptr %6, align 8, !tbaa !22
  tail call void @__ComputeSubDomainGraph(ptr noundef %1, i32 noundef %2, ptr noundef %26, ptr noundef %22)
  %30 = tail call i32 @__idxsum(i32 noundef %2, ptr noundef %20) #3
  %31 = icmp sgt i32 %2, 0
  br i1 %31, label %.lr.ph, label %.preheader222

.lr.ph:                                           ; preds = %4
  %32 = sitofp i32 %30 to double
  %wide.trip.count = 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.ph
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph
  %n.vec = and i64 %wide.trip.count, 2147483644
  %broadcast.splatinsert = insertelement <4 x double> poison, double %32, 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 ]
  %33 = getelementptr inbounds float, ptr %3, i64 %index
  %wide.load = load <4 x float>, ptr %33, align 4, !tbaa !23
  %34 = fpext <4 x float> %wide.load to <4 x double>
  %35 = fmul <4 x double> %34, <double 1.250000e+00, double 1.250000e+00, double 1.250000e+00, double 1.250000e+00>
  %36 = fmul <4 x double> %35, %broadcast.splat
  %37 = fptosi <4 x double> %36 to <4 x i32>
  %38 = getelementptr inbounds i32, ptr %21, i64 %index
  store <4 x i32> %37, ptr %38, align 4, !tbaa !24
  %index.next = add nuw i64 %index, 4
  %39 = icmp eq i64 %index.next, %n.vec
  br i1 %39, label %middle.block, label %vector.body, !llvm.loop !25

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

.preheader222:                                    ; preds = %scalar.ph, %middle.block, %4
  %40 = icmp sgt i32 %8, 0
  %41 = sext i32 %2 to i64
  %wide.trip.count284 = zext i32 %2 to i64
  %wide.trip.count293 = zext nneg i32 %8 to i64
  %wide.trip.count311 = zext nneg i32 %2 to i64
  %42 = add nsw i64 %wide.trip.count284, -1
  %xtraiter = and i64 %wide.trip.count284, 1
  %43 = icmp eq i64 %42, 0
  %unroll_iter = and i64 %wide.trip.count284, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %xtraiter345 = and i64 %wide.trip.count284, 1
  %44 = icmp eq i64 %42, 0
  %unroll_iter348 = and i64 %wide.trip.count284, 2147483646
  %lcmp.mod346.not = icmp eq i64 %xtraiter345, 0
  %xtraiter350 = and i64 %wide.trip.count284, 1
  %45 = icmp eq i64 %42, 0
  %unroll_iter353 = and i64 %wide.trip.count284, 2147483646
  %lcmp.mod351.not = icmp eq i64 %xtraiter350, 0
  br label %53

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %46 = getelementptr inbounds float, ptr %3, i64 %indvars.iv
  %47 = load float, ptr %46, align 4, !tbaa !23
  %48 = fpext float %47 to double
  %49 = fmul double %48, 1.250000e+00
  %50 = fmul double %49, %32
  %51 = fptosi double %50 to i32
  %52 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv
  store i32 %51, ptr %52, align 4, !tbaa !24
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader222, label %scalar.ph, !llvm.loop !29

53:                                               ; preds = %.preheader222, %262
  %54 = tail call i32 @__idxsum(i32 noundef %2, ptr noundef %22) #3
  %55 = sdiv i32 %54, %2
  %56 = tail call i32 @__idxamax(i32 noundef %2, ptr noundef %22) #3
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds i32, ptr %22, i64 %57
  %59 = load i32, ptr %58, align 4, !tbaa !24
  %60 = sitofp i32 %59 to double
  %61 = sitofp i32 %55 to double
  %62 = fmul double %61, 1.400000e+00
  %63 = fcmp ogt double %62, %60
  br i1 %63, label %.critedge, label %64

64:                                               ; preds = %53
  %65 = tail call i32 @__idxamax(i32 noundef %2, ptr noundef nonnull %22) #3
  %66 = mul nsw i32 %65, %2
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds i32, ptr %26, i64 %67
  %69 = tail call i32 @__idxsum(i32 noundef %2, ptr noundef %68) #3
  br i1 %31, label %.lr.ph227.preheader, label %._crit_edge.thread

.lr.ph227.preheader:                              ; preds = %64
  br i1 %43, label %._crit_edge.unr-lcssa, label %.lr.ph227

._crit_edge.thread:                               ; preds = %64
  tail call void @__ikeysort(i32 noundef 0, ptr noundef %29) #3
  br label %.critedge

.lr.ph227:                                        ; preds = %.lr.ph227.preheader, %88
  %indvars.iv281 = phi i64 [ %indvars.iv.next282.1, %88 ], [ 0, %.lr.ph227.preheader ]
  %.0202225 = phi i32 [ %.1203.1, %88 ], [ 0, %.lr.ph227.preheader ]
  %niter = phi i64 [ %niter.next.1, %88 ], [ 0, %.lr.ph227.preheader ]
  %70 = getelementptr inbounds i32, ptr %68, i64 %indvars.iv281
  %71 = load i32, ptr %70, align 4, !tbaa !24
  %72 = icmp sgt i32 %71, 0
  br i1 %72, label %73, label %.lr.ph227.1

73:                                               ; preds = %.lr.ph227
  %74 = sext i32 %.0202225 to i64
  %75 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %74
  store i32 %71, ptr %75, align 4, !tbaa !30
  %76 = add nsw i32 %.0202225, 1
  %77 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %74, i32 1
  %78 = trunc nuw nsw i64 %indvars.iv281 to i32
  store i32 %78, ptr %77, align 4, !tbaa !32
  br label %.lr.ph227.1

.lr.ph227.1:                                      ; preds = %.lr.ph227, %73
  %.1203 = phi i32 [ %76, %73 ], [ %.0202225, %.lr.ph227 ]
  %indvars.iv.next282 = or disjoint i64 %indvars.iv281, 1
  %79 = getelementptr inbounds i32, ptr %68, i64 %indvars.iv.next282
  %80 = load i32, ptr %79, align 4, !tbaa !24
  %81 = icmp sgt i32 %80, 0
  br i1 %81, label %82, label %88

82:                                               ; preds = %.lr.ph227.1
  %83 = sext i32 %.1203 to i64
  %84 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %83
  store i32 %80, ptr %84, align 4, !tbaa !30
  %85 = add nsw i32 %.1203, 1
  %86 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %83, i32 1
  %87 = trunc nuw nsw i64 %indvars.iv.next282 to i32
  store i32 %87, ptr %86, align 4, !tbaa !32
  br label %88

88:                                               ; preds = %82, %.lr.ph227.1
  %.1203.1 = phi i32 [ %85, %82 ], [ %.1203, %.lr.ph227.1 ]
  %indvars.iv.next282.1 = add nuw nsw i64 %indvars.iv281, 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_edge.unr-lcssa, label %.lr.ph227, !llvm.loop !33

._crit_edge.unr-lcssa:                            ; preds = %88, %.lr.ph227.preheader
  %.1203.lcssa.ph = phi i32 [ poison, %.lr.ph227.preheader ], [ %.1203.1, %88 ]
  %indvars.iv281.unr = phi i64 [ 0, %.lr.ph227.preheader ], [ %indvars.iv.next282.1, %88 ]
  %.0202225.unr = phi i32 [ 0, %.lr.ph227.preheader ], [ %.1203.1, %88 ]
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph227.epil

.lr.ph227.epil:                                   ; preds = %._crit_edge.unr-lcssa
  %89 = getelementptr inbounds i32, ptr %68, i64 %indvars.iv281.unr
  %90 = load i32, ptr %89, align 4, !tbaa !24
  %91 = icmp sgt i32 %90, 0
  br i1 %91, label %92, label %._crit_edge

92:                                               ; preds = %.lr.ph227.epil
  %93 = sext i32 %.0202225.unr to i64
  %94 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %93
  store i32 %90, ptr %94, align 4, !tbaa !30
  %95 = add nsw i32 %.0202225.unr, 1
  %96 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %93, i32 1
  %97 = trunc nuw nsw i64 %indvars.iv281.unr to i32
  store i32 %97, ptr %96, align 4, !tbaa !32
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph227.epil, %92, %._crit_edge.unr-lcssa
  %.1203.lcssa = phi i32 [ %.1203.lcssa.ph, %._crit_edge.unr-lcssa ], [ %95, %92 ], [ %.0202225.unr, %.lr.ph227.epil ]
  tail call void @__ikeysort(i32 noundef %.1203.lcssa, ptr noundef %29) #3
  %98 = icmp sgt i32 %.1203.lcssa, 0
  br i1 %98, label %.lr.ph275, label %.critedge

.lr.ph275:                                        ; preds = %._crit_edge
  %99 = sext i32 %65 to i64
  %100 = getelementptr inbounds i32, ptr %22, i64 %99
  %wide.trip.count326 = zext nneg i32 %.1203.lcssa to i64
  br label %102

101:                                              ; preds = %._crit_edge267
  %indvars.iv.next324 = add nuw nsw i64 %indvars.iv323, 1
  %exitcond327.not = icmp eq i64 %indvars.iv.next324, %wide.trip.count326
  br i1 %exitcond327.not, label %.critedge, label %102, !llvm.loop !34

102:                                              ; preds = %.lr.ph275, %101
  %indvars.iv323 = phi i64 [ 0, %.lr.ph275 ], [ %indvars.iv.next324, %101 ]
  %103 = getelementptr inbounds %struct.KeyValueType, ptr %29, i64 %indvars.iv323
  %104 = load i32, ptr %103, align 4, !tbaa !30
  %105 = load i32, ptr %100, align 4, !tbaa !24
  %106 = shl nsw i32 %105, 1
  %107 = sdiv i32 %69, %106
  %108 = icmp sgt i32 %104, %107
  br i1 %108, label %.critedge, label %109

109:                                              ; preds = %102
  %110 = getelementptr inbounds i8, ptr %103, i64 4
  %111 = load i32, ptr %110, align 4, !tbaa !32
  %112 = tail call ptr @__idxset(i32 noundef %2, i32 noundef 0, ptr noundef %23) #3
  br i1 %40, label %.lr.ph235, label %._crit_edge244

.preheader221:                                    ; preds = %.loopexit
  %113 = icmp sgt i32 %.1199, 0
  br i1 %113, label %.lr.ph243.preheader, label %._crit_edge244

.lr.ph243.preheader:                              ; preds = %.preheader221
  %wide.trip.count301 = zext nneg i32 %.1199 to i64
  br label %.lr.ph243

.lr.ph235:                                        ; preds = %109, %.loopexit
  %indvars.iv290 = phi i64 [ %indvars.iv.next291, %.loopexit ], [ 0, %109 ]
  %.0198231 = phi i32 [ %.1199, %.loopexit ], [ 0, %109 ]
  %114 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv290
  %115 = load i32, ptr %114, align 4, !tbaa !24
  %116 = icmp eq i32 %115, %111
  br i1 %116, label %117, label %.loopexit

117:                                              ; preds = %.lr.ph235
  %118 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv290
  %119 = load i32, ptr %118, align 4, !tbaa !24
  %120 = getelementptr inbounds i8, ptr %118, i64 4
  %121 = load i32, ptr %120, align 4, !tbaa !24
  %122 = icmp slt i32 %119, %121
  br i1 %122, label %.lr.ph230.preheader, label %.loopexit

.lr.ph230.preheader:                              ; preds = %117
  %123 = sext i32 %119 to i64
  br label %.lr.ph230

124:                                              ; preds = %.lr.ph230
  %indvars.iv.next287 = add nsw i64 %indvars.iv286, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next287 to i32
  %exitcond289.not = icmp eq i32 %121, %lftr.wideiv
  br i1 %exitcond289.not, label %.loopexit, label %.lr.ph230, !llvm.loop !35

.lr.ph230:                                        ; preds = %.lr.ph230.preheader, %124
  %indvars.iv286 = phi i64 [ %123, %.lr.ph230.preheader ], [ %indvars.iv.next287, %124 ]
  %125 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv286
  %126 = load i32, ptr %125, align 4, !tbaa !24
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i32, ptr %18, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !24
  %130 = icmp eq i32 %129, %65
  br i1 %130, label %131, label %124

131:                                              ; preds = %.lr.ph230
  %132 = add nsw i32 %.0198231, 1
  %133 = sext i32 %.0198231 to i64
  %134 = getelementptr inbounds i32, ptr %24, i64 %133
  %135 = trunc nuw nsw i64 %indvars.iv290 to i32
  store i32 %135, ptr %134, align 4, !tbaa !24
  br label %.loopexit

.loopexit:                                        ; preds = %124, %117, %.lr.ph235, %131
  %.1199 = phi i32 [ %132, %131 ], [ %.0198231, %.lr.ph235 ], [ %.0198231, %117 ], [ %.0198231, %124 ]
  %indvars.iv.next291 = add nuw nsw i64 %indvars.iv290, 1
  %exitcond294.not = icmp eq i64 %indvars.iv.next291, %wide.trip.count293
  br i1 %exitcond294.not, label %.preheader221, label %.lr.ph235, !llvm.loop !36

.lr.ph243:                                        ; preds = %.lr.ph243.preheader, %._crit_edge240
  %indvars.iv298 = phi i64 [ 0, %.lr.ph243.preheader ], [ %indvars.iv.next299, %._crit_edge240 ]
  %.0214241 = phi i32 [ 0, %.lr.ph243.preheader ], [ %141, %._crit_edge240 ]
  %136 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv298
  %137 = load i32, ptr %136, align 4, !tbaa !24
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds i32, ptr %14, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !24
  %141 = add nsw i32 %140, %.0214241
  %142 = getelementptr inbounds i32, ptr %10, i64 %138
  %143 = load i32, ptr %142, align 4, !tbaa !24
  %144 = getelementptr i8, ptr %142, i64 4
  %145 = load i32, ptr %144, align 4, !tbaa !24
  %146 = icmp slt i32 %143, %145
  br i1 %146, label %.lr.ph239.preheader, label %._crit_edge240

.lr.ph239.preheader:                              ; preds = %.lr.ph243
  %147 = sext i32 %143 to i64
  br label %.lr.ph239

.lr.ph239:                                        ; preds = %.lr.ph239.preheader, %.lr.ph239
  %indvars.iv295 = phi i64 [ %147, %.lr.ph239.preheader ], [ %indvars.iv.next296, %.lr.ph239 ]
  %148 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv295
  %149 = load i32, ptr %148, align 4, !tbaa !24
  %150 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv295
  %151 = load i32, ptr %150, align 4, !tbaa !24
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %18, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !24
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i32, ptr %23, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !24
  %158 = add nsw i32 %157, %149
  store i32 %158, ptr %156, align 4, !tbaa !24
  %indvars.iv.next296 = add nsw i64 %indvars.iv295, 1
  %159 = load i32, ptr %144, align 4, !tbaa !24
  %160 = sext i32 %159 to i64
  %161 = icmp slt i64 %indvars.iv.next296, %160
  br i1 %161, label %.lr.ph239, label %._crit_edge240, !llvm.loop !37

._crit_edge240:                                   ; preds = %.lr.ph239, %.lr.ph243
  %indvars.iv.next299 = add nuw nsw i64 %indvars.iv298, 1
  %exitcond302.not = icmp eq i64 %indvars.iv.next299, %wide.trip.count301
  br i1 %exitcond302.not, label %._crit_edge244, label %.lr.ph243, !llvm.loop !38

._crit_edge244:                                   ; preds = %._crit_edge240, %109, %.preheader221
  %.0198.lcssa330 = phi i32 [ %.1199, %.preheader221 ], [ 0, %109 ], [ %.1199, %._crit_edge240 ]
  %.0214.lcssa = phi i32 [ 0, %.preheader221 ], [ 0, %109 ], [ %141, %._crit_edge240 ]
  %162 = sext i32 %111 to i64
  %163 = getelementptr inbounds i32, ptr %23, i64 %162
  store i32 0, ptr %163, align 4, !tbaa !24
  br i1 %31, label %.lr.ph249.preheader, label %._crit_edge250.thread

.lr.ph249.preheader:                              ; preds = %._crit_edge244
  br i1 %44, label %._crit_edge250.unr-lcssa, label %.lr.ph249

._crit_edge250.thread:                            ; preds = %._crit_edge244
  tail call void @__ikeysort(i32 noundef 0, ptr noundef %28) #3
  br label %._crit_edge267

.lr.ph249:                                        ; preds = %.lr.ph249.preheader, %184
  %indvars.iv303 = phi i64 [ %indvars.iv.next304.1, %184 ], [ 0, %.lr.ph249.preheader ]
  %.0200246 = phi i32 [ %.1201.1, %184 ], [ 0, %.lr.ph249.preheader ]
  %niter349 = phi i64 [ %niter349.next.1, %184 ], [ 0, %.lr.ph249.preheader ]
  %164 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv303
  %165 = load i32, ptr %164, align 4, !tbaa !24
  %166 = icmp sgt i32 %165, 0
  br i1 %166, label %167, label %.lr.ph249.1

167:                                              ; preds = %.lr.ph249
  %168 = sub nsw i32 0, %165
  %169 = sext i32 %.0200246 to i64
  %170 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %169
  store i32 %168, ptr %170, align 4, !tbaa !30
  %171 = add nsw i32 %.0200246, 1
  %172 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %169, i32 1
  %173 = trunc nuw nsw i64 %indvars.iv303 to i32
  store i32 %173, ptr %172, align 4, !tbaa !32
  br label %.lr.ph249.1

.lr.ph249.1:                                      ; preds = %.lr.ph249, %167
  %.1201 = phi i32 [ %171, %167 ], [ %.0200246, %.lr.ph249 ]
  %indvars.iv.next304 = or disjoint i64 %indvars.iv303, 1
  %174 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next304
  %175 = load i32, ptr %174, align 4, !tbaa !24
  %176 = icmp sgt i32 %175, 0
  br i1 %176, label %177, label %184

177:                                              ; preds = %.lr.ph249.1
  %178 = sub nsw i32 0, %175
  %179 = sext i32 %.1201 to i64
  %180 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %179
  store i32 %178, ptr %180, align 4, !tbaa !30
  %181 = add nsw i32 %.1201, 1
  %182 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %179, i32 1
  %183 = trunc nuw nsw i64 %indvars.iv.next304 to i32
  store i32 %183, ptr %182, align 4, !tbaa !32
  br label %184

184:                                              ; preds = %177, %.lr.ph249.1
  %.1201.1 = phi i32 [ %181, %177 ], [ %.1201, %.lr.ph249.1 ]
  %indvars.iv.next304.1 = add nuw nsw i64 %indvars.iv303, 2
  %niter349.next.1 = add i64 %niter349, 2
  %niter349.ncmp.1 = icmp eq i64 %niter349.next.1, %unroll_iter348
  br i1 %niter349.ncmp.1, label %._crit_edge250.unr-lcssa, label %.lr.ph249, !llvm.loop !39

._crit_edge250.unr-lcssa:                         ; preds = %184, %.lr.ph249.preheader
  %.1201.lcssa.ph = phi i32 [ poison, %.lr.ph249.preheader ], [ %.1201.1, %184 ]
  %indvars.iv303.unr = phi i64 [ 0, %.lr.ph249.preheader ], [ %indvars.iv.next304.1, %184 ]
  %.0200246.unr = phi i32 [ 0, %.lr.ph249.preheader ], [ %.1201.1, %184 ]
  br i1 %lcmp.mod346.not, label %._crit_edge250, label %.lr.ph249.epil

.lr.ph249.epil:                                   ; preds = %._crit_edge250.unr-lcssa
  %185 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv303.unr
  %186 = load i32, ptr %185, align 4, !tbaa !24
  %187 = icmp sgt i32 %186, 0
  br i1 %187, label %188, label %._crit_edge250

188:                                              ; preds = %.lr.ph249.epil
  %189 = sub nsw i32 0, %186
  %190 = sext i32 %.0200246.unr to i64
  %191 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %190
  store i32 %189, ptr %191, align 4, !tbaa !30
  %192 = add nsw i32 %.0200246.unr, 1
  %193 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %190, i32 1
  %194 = trunc nuw nsw i64 %indvars.iv303.unr to i32
  store i32 %194, ptr %193, align 4, !tbaa !32
  br label %._crit_edge250

._crit_edge250:                                   ; preds = %.lr.ph249.epil, %188, %._crit_edge250.unr-lcssa
  %.1201.lcssa = phi i32 [ %.1201.lcssa.ph, %._crit_edge250.unr-lcssa ], [ %192, %188 ], [ %.0200246.unr, %.lr.ph249.epil ]
  tail call void @__ikeysort(i32 noundef %.1201.lcssa, ptr noundef %28) #3
  %195 = icmp sgt i32 %.1201.lcssa, 0
  br i1 %195, label %.lr.ph266.preheader, label %._crit_edge267

.lr.ph266.preheader:                              ; preds = %._crit_edge250
  %wide.trip.count321 = zext nneg i32 %.1201.lcssa to i64
  br label %.lr.ph266

.lr.ph266:                                        ; preds = %.lr.ph266.preheader, %258
  %indvars.iv318 = phi i64 [ 0, %.lr.ph266.preheader ], [ %indvars.iv.next319, %258 ]
  %.0206263 = phi i32 [ -1, %.lr.ph266.preheader ], [ %.2208, %258 ]
  %196 = getelementptr inbounds %struct.KeyValueType, ptr %28, i64 %indvars.iv318, i32 1
  %197 = load i32, ptr %196, align 4, !tbaa !32
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %68, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !24
  %201 = icmp sgt i32 %200, 0
  br i1 %201, label %202, label %258

202:                                              ; preds = %.lr.ph266
  %203 = getelementptr inbounds i32, ptr %20, i64 %198
  %204 = load i32, ptr %203, align 4, !tbaa !24
  %205 = add nsw i32 %204, %.0214.lcssa
  %206 = getelementptr inbounds i32, ptr %21, i64 %198
  %207 = load i32, ptr %206, align 4, !tbaa !24
  %208 = icmp sgt i32 %205, %207
  br i1 %208, label %258, label %.preheader220

.preheader220:                                    ; preds = %202
  br i1 %31, label %.lr.ph253.preheader, label %._crit_edge254

.lr.ph253.preheader:                              ; preds = %.preheader220
  %invariant.gep = getelementptr i32, ptr %26, i64 %198
  br label %.lr.ph253

.lr.ph253:                                        ; preds = %.lr.ph253.preheader, %221
  %indvars.iv308 = phi i64 [ 0, %.lr.ph253.preheader ], [ %indvars.iv.next309, %221 ]
  %209 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv308
  %210 = load i32, ptr %209, align 4, !tbaa !24
  %211 = icmp sgt i32 %210, 0
  br i1 %211, label %212, label %221

212:                                              ; preds = %.lr.ph253
  %213 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv308
  %214 = load i32, ptr %213, align 4, !tbaa !24
  %215 = load i32, ptr %100, align 4, !tbaa !24
  %216 = add nsw i32 %215, -1
  %.not = icmp slt i32 %214, %216
  br i1 %.not, label %221, label %217

217:                                              ; preds = %212
  %218 = mul nuw nsw i64 %indvars.iv308, %41
  %gep = getelementptr i32, ptr %invariant.gep, i64 %218
  %219 = load i32, ptr %gep, align 4, !tbaa !24
  %220 = icmp eq i32 %219, 0
  br i1 %220, label %._crit_edge254.loopexit, label %221

221:                                              ; preds = %.lr.ph253, %212, %217
  %indvars.iv.next309 = add nuw nsw i64 %indvars.iv308, 1
  %exitcond312.not = icmp eq i64 %indvars.iv.next309, %wide.trip.count311
  br i1 %exitcond312.not, label %.preheader, label %.lr.ph253, !llvm.loop !40

._crit_edge254.loopexit:                          ; preds = %217
  %222 = trunc nuw nsw i64 %indvars.iv308 to i32
  br label %._crit_edge254

._crit_edge254:                                   ; preds = %._crit_edge254.loopexit, %.preheader220
  %.2196.lcssa = phi i32 [ 0, %.preheader220 ], [ %222, %._crit_edge254.loopexit ]
  %223 = icmp eq i32 %.2196.lcssa, %2
  br i1 %223, label %.preheader, label %258

.preheader:                                       ; preds = %221, %._crit_edge254
  br i1 %31, label %.lr.ph260, label %._crit_edge261

.lr.ph260:                                        ; preds = %.preheader
  %224 = mul nsw i32 %197, %2
  %225 = sext i32 %224 to i64
  %invariant.gep336 = getelementptr i32, ptr %26, i64 %225
  br i1 %45, label %._crit_edge261.loopexit.unr-lcssa, label %.lr.ph260.new

.lr.ph260.new:                                    ; preds = %.lr.ph260, %241
  %indvars.iv313 = phi i64 [ %indvars.iv.next314.1, %241 ], [ 0, %.lr.ph260 ]
  %.0210258 = phi i32 [ %.1211.1, %241 ], [ 0, %.lr.ph260 ]
  %niter354 = phi i64 [ %niter354.next.1, %241 ], [ 0, %.lr.ph260 ]
  %226 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv313
  %227 = load i32, ptr %226, align 4, !tbaa !24
  %228 = icmp sgt i32 %227, 0
  br i1 %228, label %229, label %233

229:                                              ; preds = %.lr.ph260.new
  %gep337 = getelementptr i32, ptr %invariant.gep336, i64 %indvars.iv313
  %230 = load i32, ptr %gep337, align 4, !tbaa !24
  %231 = icmp eq i32 %230, 0
  %232 = zext i1 %231 to i32
  %spec.select = add nsw i32 %.0210258, %232
  br label %233

233:                                              ; preds = %229, %.lr.ph260.new
  %.1211 = phi i32 [ %.0210258, %.lr.ph260.new ], [ %spec.select, %229 ]
  %indvars.iv.next314 = or disjoint i64 %indvars.iv313, 1
  %234 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next314
  %235 = load i32, ptr %234, align 4, !tbaa !24
  %236 = icmp sgt i32 %235, 0
  br i1 %236, label %237, label %241

237:                                              ; preds = %233
  %gep337.1 = getelementptr i32, ptr %invariant.gep336, i64 %indvars.iv.next314
  %238 = load i32, ptr %gep337.1, align 4, !tbaa !24
  %239 = icmp eq i32 %238, 0
  %240 = zext i1 %239 to i32
  %spec.select.1 = add nsw i32 %.1211, %240
  br label %241

241:                                              ; preds = %237, %233
  %.1211.1 = phi i32 [ %.1211, %233 ], [ %spec.select.1, %237 ]
  %indvars.iv.next314.1 = add nuw nsw i64 %indvars.iv313, 2
  %niter354.next.1 = add i64 %niter354, 2
  %niter354.ncmp.1 = icmp eq i64 %niter354.next.1, %unroll_iter353
  br i1 %niter354.ncmp.1, label %._crit_edge261.loopexit.unr-lcssa, label %.lr.ph260.new, !llvm.loop !41

._crit_edge261.loopexit.unr-lcssa:                ; preds = %241, %.lr.ph260
  %.1211.lcssa.ph = phi i32 [ poison, %.lr.ph260 ], [ %.1211.1, %241 ]
  %indvars.iv313.unr = phi i64 [ 0, %.lr.ph260 ], [ %indvars.iv.next314.1, %241 ]
  %.0210258.unr = phi i32 [ 0, %.lr.ph260 ], [ %.1211.1, %241 ]
  br i1 %lcmp.mod351.not, label %._crit_edge261, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge261.loopexit.unr-lcssa
  %242 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv313.unr
  %243 = load i32, ptr %242, align 4, !tbaa !24
  %244 = icmp sgt i32 %243, 0
  br i1 %244, label %245, label %._crit_edge261

245:                                              ; preds = %.epil.preheader
  %gep337.epil = getelementptr i32, ptr %invariant.gep336, i64 %indvars.iv313.unr
  %246 = load i32, ptr %gep337.epil, align 4, !tbaa !24
  %247 = icmp eq i32 %246, 0
  %248 = zext i1 %247 to i32
  %spec.select.epil = add nsw i32 %.0210258.unr, %248
  br label %._crit_edge261

._crit_edge261:                                   ; preds = %._crit_edge261.loopexit.unr-lcssa, %245, %.epil.preheader, %.preheader
  %.0210.lcssa = phi i32 [ 0, %.preheader ], [ %.1211.lcssa.ph, %._crit_edge261.loopexit.unr-lcssa ], [ %.0210258.unr, %.epil.preheader ], [ %spec.select.epil, %245 ]
  %249 = icmp eq i32 %.0206263, -1
  br i1 %249, label %250, label %256

250:                                              ; preds = %._crit_edge261
  %251 = getelementptr inbounds i32, ptr %22, i64 %198
  %252 = load i32, ptr %251, align 4, !tbaa !24
  %253 = add nsw i32 %252, %.0210.lcssa
  %254 = load i32, ptr %100, align 4, !tbaa !24
  %255 = icmp slt i32 %253, %254
  %spec.select218 = select i1 %255, i32 %197, i32 -1
  br label %256

256:                                              ; preds = %250, %._crit_edge261
  %.1207 = phi i32 [ %.0206263, %._crit_edge261 ], [ %spec.select218, %250 ]
  %257 = icmp eq i32 %.0210.lcssa, 0
  br i1 %257, label %._crit_edge267, label %258

258:                                              ; preds = %.lr.ph266, %256, %._crit_edge254, %202
  %.2208 = phi i32 [ %.0206263, %202 ], [ %.1207, %256 ], [ %.0206263, %._crit_edge254 ], [ %.0206263, %.lr.ph266 ]
  %indvars.iv.next319 = add nuw nsw i64 %indvars.iv318, 1
  %exitcond322.not = icmp eq i64 %indvars.iv.next319, %wide.trip.count321
  br i1 %exitcond322.not, label %._crit_edge267, label %.lr.ph266, !llvm.loop !42

._crit_edge267:                                   ; preds = %258, %256, %._crit_edge250.thread, %._crit_edge250
  %.3209 = phi i32 [ -1, %._crit_edge250 ], [ -1, %._crit_edge250.thread ], [ %.1207, %256 ], [ %.2208, %258 ]
  %.0204 = phi i32 [ -1, %._crit_edge250 ], [ -1, %._crit_edge250.thread ], [ %197, %256 ], [ -1, %258 ]
  %259 = icmp eq i32 %.0204, -1
  %260 = icmp ne i32 %.3209, -1
  %or.cond = select i1 %259, i1 %260, i1 false
  %spec.select219 = select i1 %or.cond, i32 %.3209, i32 %.0204
  %261 = icmp eq i32 %spec.select219, -1
  br i1 %261, label %101, label %262

262:                                              ; preds = %._crit_edge267
  %263 = sext i32 %spec.select219 to i64
  %264 = getelementptr inbounds i32, ptr %20, i64 %263
  %265 = load i32, ptr %264, align 4, !tbaa !24
  %266 = add nsw i32 %265, %.0214.lcssa
  store i32 %266, ptr %264, align 4, !tbaa !24
  %267 = getelementptr inbounds i32, ptr %20, i64 %162
  %268 = load i32, ptr %267, align 4, !tbaa !24
  %269 = sub nsw i32 %268, %.0214.lcssa
  store i32 %269, ptr %267, align 4, !tbaa !24
  tail call void @__MoveGroupMConn(ptr noundef %0, ptr noundef %1, ptr noundef %22, ptr noundef %26, i32 noundef %2, i32 noundef %spec.select219, i32 noundef %.0198.lcssa330, ptr noundef %24)
  br label %53

.critedge:                                        ; preds = %53, %._crit_edge, %101, %102, %._crit_edge.thread
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %2) #3
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %2) #3
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %2) #3
  tail call void @__idxwspacefree(ptr noundef %0, i32 noundef %8) #3
  call void (ptr, ...) @GKfree(ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef null) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  ret void
}

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @__MoveGroupMConn(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

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 = { 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, !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 = !{!19, !19, i64 0}
!24 = !{!10, !10, i64 0}
!25 = distinct !{!25, !26, !27, !28}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !26, !28, !27}
!30 = !{!31, !10, i64 0}
!31 = !{!"KeyValueType", !10, i64 0, !10, i64 4}
!32 = !{!31, !10, i64 4}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = distinct !{!41, !26}
!42 = distinct !{!42, !26}


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