; LLVM IR from jermp/2i_bench :: external/CRoaring/benchmarks (array_container_benchmark)

; 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.array_container_s = type { i32, i32, ptr }

@.str = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @array_cache_flush(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local void @array_cache_prefetch(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @add_test(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @array_container_add(ptr noundef, i16 noundef zeroext) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @remove_test(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @contains_test(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare zeroext i1 @array_container_contains(ptr noundef, i16 noundef zeroext) #2

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #1 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, 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 i64, align 8
  %16 = alloca float, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %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 i64, align 8
  %29 = alloca float, align 4
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i64, align 8
  %41 = alloca float, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca i64, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca ptr, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i64, align 8
  %61 = alloca float, align 4
  %62 = alloca i64, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i32, align 4
  %66 = alloca i64, align 8
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i64, align 8
  %72 = alloca float, align 4
  %73 = alloca i64, align 8
  %74 = alloca i64, align 8
  %75 = alloca i64, align 8
  %76 = alloca i32, align 4
  %77 = alloca i64, align 8
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i64, align 8
  %83 = alloca float, align 4
  %84 = alloca ptr, align 8
  %85 = alloca i32, align 4
  %86 = alloca ptr, align 8
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca ptr, align 8
  %90 = alloca i64, align 8
  %91 = alloca i64, align 8
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i64, align 8
  %101 = alloca float, align 4
  %102 = alloca i64, align 8
  %103 = alloca i64, align 8
  %104 = alloca i64, align 8
  %105 = alloca i64, align 8
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  %110 = alloca i32, align 4
  %111 = alloca i32, align 4
  %112 = alloca i64, align 8
  %113 = alloca float, align 4
  %114 = alloca i32, align 4
  %115 = alloca i32, align 4
  %116 = alloca i64, align 8
  %117 = alloca i64, align 8
  %118 = alloca i64, align 8
  %119 = alloca i64, align 8
  %120 = alloca i32, align 4
  %121 = alloca i32, align 4
  %122 = alloca i32, align 4
  %123 = alloca i32, align 4
  %124 = alloca i32, align 4
  %125 = alloca i32, align 4
  %126 = alloca i64, align 8
  %127 = alloca float, align 4
  %128 = alloca i64, align 8
  %129 = alloca i64, align 8
  %130 = alloca i64, align 8
  %131 = alloca i64, align 8
  %132 = alloca i32, align 4
  %133 = alloca i32, align 4
  %134 = alloca i32, align 4
  %135 = alloca i32, align 4
  %136 = alloca i32, align 4
  %137 = alloca i32, align 4
  %138 = alloca i64, align 8
  %139 = alloca float, align 4
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #6
  store i32 500, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  store i32 2048, ptr %3, align 4, !tbaa !5
  call void @tellmeall()
  %140 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  %141 = call ptr @array_container_create()
  store ptr %141, ptr %4, align 8, !tbaa !9
  br label %142

142:                                              ; preds = %0
  %143 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.2)
  %144 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  store i64 -1, ptr %8, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %145

145:                                              ; preds = %189, %142
  %146 = load i32, ptr %10, align 4, !tbaa !5
  %147 = load i32, ptr %2, align 4, !tbaa !5
  %148 = icmp slt i32 %146, %147
  br i1 %148, label %150, label %149

149:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %192

150:                                              ; preds = %145
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !13
  br label %151

151:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %152 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !14
  %153 = extractvalue { i32, i32 } %152, 0
  %154 = extractvalue { i32, i32 } %152, 1
  store i32 %153, ptr %11, align 4, !tbaa !5
  store i32 %154, ptr %12, align 4, !tbaa !5
  %155 = load i32, ptr %11, align 4, !tbaa !5
  %156 = zext i32 %155 to i64
  %157 = shl i64 %156, 32
  %158 = load i32, ptr %12, align 4, !tbaa !5
  %159 = zext i32 %158 to i64
  %160 = or i64 %157, %159
  store i64 %160, ptr %5, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %161

161:                                              ; preds = %151
  br label %162

162:                                              ; preds = %161
  %163 = load ptr, ptr %4, align 8, !tbaa !9
  %164 = call i32 @add_test(ptr noundef %163)
  %165 = icmp ne i32 %164, 0
  br i1 %165, label %166, label %167

166:                                              ; preds = %162
  store i32 1, ptr %9, align 4, !tbaa !5
  br label %167

167:                                              ; preds = %166, %162
  br label %168

168:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %169 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !15
  %170 = extractvalue { i32, i32 } %169, 0
  %171 = extractvalue { i32, i32 } %169, 1
  store i32 %170, ptr %13, align 4, !tbaa !5
  store i32 %171, ptr %14, align 4, !tbaa !5
  %172 = load i32, ptr %13, align 4, !tbaa !5
  %173 = zext i32 %172 to i64
  %174 = shl i64 %173, 32
  %175 = load i32, ptr %14, align 4, !tbaa !5
  %176 = zext i32 %175 to i64
  %177 = or i64 %174, %176
  store i64 %177, ptr %6, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %178

178:                                              ; preds = %168
  br label %179

179:                                              ; preds = %178
  %180 = load i64, ptr %6, align 8, !tbaa !11
  %181 = load i64, ptr %5, align 8, !tbaa !11
  %182 = sub i64 %180, %181
  store i64 %182, ptr %7, align 8, !tbaa !11
  %183 = load i64, ptr %7, align 8, !tbaa !11
  %184 = load i64, ptr %8, align 8, !tbaa !11
  %185 = icmp ult i64 %183, %184
  br i1 %185, label %186, label %188

186:                                              ; preds = %179
  %187 = load i64, ptr %7, align 8, !tbaa !11
  store i64 %187, ptr %8, align 8, !tbaa !11
  br label %188

188:                                              ; preds = %186, %179
  br label %189

189:                                              ; preds = %188
  %190 = load i32, ptr %10, align 4, !tbaa !5
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr %10, align 4, !tbaa !5
  br label %145, !llvm.loop !16

192:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %193 = load i32, ptr %3, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  store i64 %194, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %195 = load i64, ptr %8, align 8, !tbaa !11
  %196 = uitofp i64 %195 to float
  %197 = load i64, ptr %15, align 8, !tbaa !11
  %198 = uitofp i64 %197 to float
  %199 = fdiv float %196, %198
  store float %199, ptr %16, align 4, !tbaa !18
  %200 = load float, ptr %16, align 4, !tbaa !18
  %201 = fpext float %200 to double
  %202 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %201)
  %203 = load i32, ptr %9, align 4, !tbaa !5
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %207

205:                                              ; preds = %192
  %206 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %207

207:                                              ; preds = %205, %192
  %208 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %209 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  br label %210

210:                                              ; preds = %207
  br label %211

211:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %212 = load ptr, ptr %4, align 8, !tbaa !9
  %213 = call i32 @contains_test(ptr noundef %212)
  store i32 %213, ptr %17, align 4, !tbaa !5
  store i32 65536, ptr %3, align 4, !tbaa !5
  br label %214

214:                                              ; preds = %211
  %215 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.6)
  %216 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  store i64 -1, ptr %21, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %262, %214
  %218 = load i32, ptr %23, align 4, !tbaa !5
  %219 = load i32, ptr %2, align 4, !tbaa !5
  %220 = icmp slt i32 %218, %219
  br i1 %220, label %222, label %221

221:                                              ; preds = %217
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %265

222:                                              ; preds = %217
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !20
  br label %223

223:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %224 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !21
  %225 = extractvalue { i32, i32 } %224, 0
  %226 = extractvalue { i32, i32 } %224, 1
  store i32 %225, ptr %24, align 4, !tbaa !5
  store i32 %226, ptr %25, align 4, !tbaa !5
  %227 = load i32, ptr %24, align 4, !tbaa !5
  %228 = zext i32 %227 to i64
  %229 = shl i64 %228, 32
  %230 = load i32, ptr %25, align 4, !tbaa !5
  %231 = zext i32 %230 to i64
  %232 = or i64 %229, %231
  store i64 %232, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %233

233:                                              ; preds = %223
  br label %234

234:                                              ; preds = %233
  %235 = load ptr, ptr %4, align 8, !tbaa !9
  %236 = call i32 @contains_test(ptr noundef %235)
  %237 = load i32, ptr %17, align 4, !tbaa !5
  %238 = icmp ne i32 %236, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %234
  store i32 1, ptr %22, align 4, !tbaa !5
  br label %240

240:                                              ; preds = %239, %234
  br label %241

241:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %242 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !22
  %243 = extractvalue { i32, i32 } %242, 0
  %244 = extractvalue { i32, i32 } %242, 1
  store i32 %243, ptr %26, align 4, !tbaa !5
  store i32 %244, ptr %27, align 4, !tbaa !5
  %245 = load i32, ptr %26, align 4, !tbaa !5
  %246 = zext i32 %245 to i64
  %247 = shl i64 %246, 32
  %248 = load i32, ptr %27, align 4, !tbaa !5
  %249 = zext i32 %248 to i64
  %250 = or i64 %247, %249
  store i64 %250, ptr %19, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %251

251:                                              ; preds = %241
  br label %252

252:                                              ; preds = %251
  %253 = load i64, ptr %19, align 8, !tbaa !11
  %254 = load i64, ptr %18, align 8, !tbaa !11
  %255 = sub i64 %253, %254
  store i64 %255, ptr %20, align 8, !tbaa !11
  %256 = load i64, ptr %20, align 8, !tbaa !11
  %257 = load i64, ptr %21, align 8, !tbaa !11
  %258 = icmp ult i64 %256, %257
  br i1 %258, label %259, label %261

259:                                              ; preds = %252
  %260 = load i64, ptr %20, align 8, !tbaa !11
  store i64 %260, ptr %21, align 8, !tbaa !11
  br label %261

261:                                              ; preds = %259, %252
  br label %262

262:                                              ; preds = %261
  %263 = load i32, ptr %23, align 4, !tbaa !5
  %264 = add nsw i32 %263, 1
  store i32 %264, ptr %23, align 4, !tbaa !5
  br label %217, !llvm.loop !23

265:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %266 = load i32, ptr %3, align 4, !tbaa !5
  %267 = sext i32 %266 to i64
  store i64 %267, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %268 = load i64, ptr %21, align 8, !tbaa !11
  %269 = uitofp i64 %268 to float
  %270 = load i64, ptr %28, align 8, !tbaa !11
  %271 = uitofp i64 %270 to float
  %272 = fdiv float %269, %271
  store float %272, ptr %29, align 4, !tbaa !18
  %273 = load float, ptr %29, align 4, !tbaa !18
  %274 = fpext float %273 to double
  %275 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %274)
  %276 = load i32, ptr %22, align 4, !tbaa !5
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %280

278:                                              ; preds = %265
  %279 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %280

280:                                              ; preds = %278, %265
  %281 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %282 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %283

283:                                              ; preds = %280
  br label %284

284:                                              ; preds = %283
  store i32 21845, ptr %3, align 4, !tbaa !5
  br label %285

285:                                              ; preds = %284
  %286 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.7)
  %287 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  store i64 -1, ptr %33, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  store i32 0, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %288

288:                                              ; preds = %332, %285
  %289 = load i32, ptr %35, align 4, !tbaa !5
  %290 = load i32, ptr %2, align 4, !tbaa !5
  %291 = icmp slt i32 %289, %290
  br i1 %291, label %293, label %292

292:                                              ; preds = %288
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %335

293:                                              ; preds = %288
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !24
  br label %294

294:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  %295 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !25
  %296 = extractvalue { i32, i32 } %295, 0
  %297 = extractvalue { i32, i32 } %295, 1
  store i32 %296, ptr %36, align 4, !tbaa !5
  store i32 %297, ptr %37, align 4, !tbaa !5
  %298 = load i32, ptr %36, align 4, !tbaa !5
  %299 = zext i32 %298 to i64
  %300 = shl i64 %299, 32
  %301 = load i32, ptr %37, align 4, !tbaa !5
  %302 = zext i32 %301 to i64
  %303 = or i64 %300, %302
  store i64 %303, ptr %30, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %304

304:                                              ; preds = %294
  br label %305

305:                                              ; preds = %304
  %306 = load ptr, ptr %4, align 8, !tbaa !9
  %307 = call i32 @remove_test(ptr noundef %306)
  %308 = icmp ne i32 %307, 0
  br i1 %308, label %309, label %310

309:                                              ; preds = %305
  store i32 1, ptr %34, align 4, !tbaa !5
  br label %310

310:                                              ; preds = %309, %305
  br label %311

311:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  %312 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !26
  %313 = extractvalue { i32, i32 } %312, 0
  %314 = extractvalue { i32, i32 } %312, 1
  store i32 %313, ptr %38, align 4, !tbaa !5
  store i32 %314, ptr %39, align 4, !tbaa !5
  %315 = load i32, ptr %38, align 4, !tbaa !5
  %316 = zext i32 %315 to i64
  %317 = shl i64 %316, 32
  %318 = load i32, ptr %39, align 4, !tbaa !5
  %319 = zext i32 %318 to i64
  %320 = or i64 %317, %319
  store i64 %320, ptr %31, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %321

321:                                              ; preds = %311
  br label %322

322:                                              ; preds = %321
  %323 = load i64, ptr %31, align 8, !tbaa !11
  %324 = load i64, ptr %30, align 8, !tbaa !11
  %325 = sub i64 %323, %324
  store i64 %325, ptr %32, align 8, !tbaa !11
  %326 = load i64, ptr %32, align 8, !tbaa !11
  %327 = load i64, ptr %33, align 8, !tbaa !11
  %328 = icmp ult i64 %326, %327
  br i1 %328, label %329, label %331

329:                                              ; preds = %322
  %330 = load i64, ptr %32, align 8, !tbaa !11
  store i64 %330, ptr %33, align 8, !tbaa !11
  br label %331

331:                                              ; preds = %329, %322
  br label %332

332:                                              ; preds = %331
  %333 = load i32, ptr %35, align 4, !tbaa !5
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %35, align 4, !tbaa !5
  br label %288, !llvm.loop !27

335:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %336 = load i32, ptr %3, align 4, !tbaa !5
  %337 = sext i32 %336 to i64
  store i64 %337, ptr %40, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  %338 = load i64, ptr %33, align 8, !tbaa !11
  %339 = uitofp i64 %338 to float
  %340 = load i64, ptr %40, align 8, !tbaa !11
  %341 = uitofp i64 %340 to float
  %342 = fdiv float %339, %341
  store float %342, ptr %41, align 4, !tbaa !18
  %343 = load float, ptr %41, align 4, !tbaa !18
  %344 = fpext float %343 to double
  %345 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %344)
  %346 = load i32, ptr %34, align 4, !tbaa !5
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %348, label %350

348:                                              ; preds = %335
  %349 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %350

350:                                              ; preds = %348, %335
  %351 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %352 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %353

353:                                              ; preds = %350
  br label %354

354:                                              ; preds = %353
  %355 = load ptr, ptr %4, align 8, !tbaa !9
  call void @array_container_free(ptr noundef %355)
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  store i32 32, ptr %42, align 4, !tbaa !5
  br label %356

356:                                              ; preds = %594, %354
  %357 = load i32, ptr %42, align 4, !tbaa !5
  %358 = icmp sle i32 %357, 65536
  br i1 %358, label %360, label %359

359:                                              ; preds = %356
  store i32 29, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  br label %597

360:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %361 = call ptr @array_container_create()
  store ptr %361, ptr %44, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %362

362:                                              ; preds = %372, %360
  %363 = load i32, ptr %45, align 4, !tbaa !5
  %364 = load i32, ptr %42, align 4, !tbaa !5
  %365 = icmp slt i32 %363, %364
  br i1 %365, label %367, label %366

366:                                              ; preds = %362
  store i32 32, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  br label %375

367:                                              ; preds = %362
  %368 = load ptr, ptr %44, align 8, !tbaa !9
  %369 = call i32 @pcg32_random()
  %370 = trunc i32 %369 to i16
  %371 = call zeroext i1 @array_container_add(ptr noundef %368, i16 noundef zeroext %370)
  br label %372

372:                                              ; preds = %367
  %373 = load i32, ptr %45, align 4, !tbaa !5
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %45, align 4, !tbaa !5
  br label %362, !llvm.loop !28

375:                                              ; preds = %366
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  store i64 1024, ptr %46, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %376 = load i64, ptr %46, align 8, !tbaa !11
  %377 = mul i64 %376, 2
  %378 = call noalias ptr @malloc(i64 noundef %377) #7
  store ptr %378, ptr %47, align 8, !tbaa !9
  %379 = load ptr, ptr %44, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct.array_container_s, ptr %379, i32 0, i32 0
  %381 = load i32, ptr %380, align 8, !tbaa !29
  %382 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef %381)
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  %383 = load ptr, ptr %44, align 8, !tbaa !9
  %384 = call i32 @array_container_cardinality(ptr noundef %383)
  store i32 %384, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  %385 = load i32, ptr %48, align 4, !tbaa !5
  %386 = sext i32 %385 to i64
  %387 = mul i64 4, %386
  %388 = call noalias ptr @malloc(i64 noundef %387) #7
  store ptr %388, ptr %49, align 8, !tbaa !9
  br label %389

389:                                              ; preds = %375
  %390 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.9)
  %391 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  store i64 -1, ptr %53, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  store i32 0, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  store i32 0, ptr %55, align 4, !tbaa !5
  br label %392

392:                                              ; preds = %438, %389
  %393 = load i32, ptr %55, align 4, !tbaa !5
  %394 = load i32, ptr %2, align 4, !tbaa !5
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %397, label %396

396:                                              ; preds = %392
  store i32 37, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  br label %441

397:                                              ; preds = %392
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !31
  br label %398

398:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  %399 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !32
  %400 = extractvalue { i32, i32 } %399, 0
  %401 = extractvalue { i32, i32 } %399, 1
  store i32 %400, ptr %56, align 4, !tbaa !5
  store i32 %401, ptr %57, align 4, !tbaa !5
  %402 = load i32, ptr %56, align 4, !tbaa !5
  %403 = zext i32 %402 to i64
  %404 = shl i64 %403, 32
  %405 = load i32, ptr %57, align 4, !tbaa !5
  %406 = zext i32 %405 to i64
  %407 = or i64 %404, %406
  store i64 %407, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  br label %408

408:                                              ; preds = %398
  br label %409

409:                                              ; preds = %408
  %410 = load ptr, ptr %49, align 8, !tbaa !9
  %411 = load ptr, ptr %44, align 8, !tbaa !9
  %412 = call i32 @array_container_to_uint32_array(ptr noundef %410, ptr noundef %411, i32 noundef 1234)
  %413 = load i32, ptr %48, align 4, !tbaa !5
  %414 = icmp ne i32 %412, %413
  br i1 %414, label %415, label %416

415:                                              ; preds = %409
  store i32 1, ptr %54, align 4, !tbaa !5
  br label %416

416:                                              ; preds = %415, %409
  br label %417

417:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %418 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !33
  %419 = extractvalue { i32, i32 } %418, 0
  %420 = extractvalue { i32, i32 } %418, 1
  store i32 %419, ptr %58, align 4, !tbaa !5
  store i32 %420, ptr %59, align 4, !tbaa !5
  %421 = load i32, ptr %58, align 4, !tbaa !5
  %422 = zext i32 %421 to i64
  %423 = shl i64 %422, 32
  %424 = load i32, ptr %59, align 4, !tbaa !5
  %425 = zext i32 %424 to i64
  %426 = or i64 %423, %425
  store i64 %426, ptr %51, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %427

427:                                              ; preds = %417
  br label %428

428:                                              ; preds = %427
  %429 = load i64, ptr %51, align 8, !tbaa !11
  %430 = load i64, ptr %50, align 8, !tbaa !11
  %431 = sub i64 %429, %430
  store i64 %431, ptr %52, align 8, !tbaa !11
  %432 = load i64, ptr %52, align 8, !tbaa !11
  %433 = load i64, ptr %53, align 8, !tbaa !11
  %434 = icmp ult i64 %432, %433
  br i1 %434, label %435, label %437

435:                                              ; preds = %428
  %436 = load i64, ptr %52, align 8, !tbaa !11
  store i64 %436, ptr %53, align 8, !tbaa !11
  br label %437

437:                                              ; preds = %435, %428
  br label %438

438:                                              ; preds = %437
  %439 = load i32, ptr %55, align 4, !tbaa !5
  %440 = add nsw i32 %439, 1
  store i32 %440, ptr %55, align 4, !tbaa !5
  br label %392, !llvm.loop !34

441:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  %442 = load i32, ptr %48, align 4, !tbaa !5
  %443 = sext i32 %442 to i64
  store i64 %443, ptr %60, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  %444 = load i64, ptr %53, align 8, !tbaa !11
  %445 = uitofp i64 %444 to float
  %446 = load i64, ptr %60, align 8, !tbaa !11
  %447 = uitofp i64 %446 to float
  %448 = fdiv float %445, %447
  store float %448, ptr %61, align 4, !tbaa !18
  %449 = load float, ptr %61, align 4, !tbaa !18
  %450 = fpext float %449 to double
  %451 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %450)
  %452 = load i32, ptr %54, align 4, !tbaa !5
  %453 = icmp ne i32 %452, 0
  br i1 %453, label %454, label %456

454:                                              ; preds = %441
  %455 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %456

456:                                              ; preds = %454, %441
  %457 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %458 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %459

459:                                              ; preds = %456
  br label %460

460:                                              ; preds = %459
  %461 = load ptr, ptr %49, align 8, !tbaa !9
  call void @free(ptr noundef %461) #6
  br label %462

462:                                              ; preds = %460
  %463 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str.12)
  %464 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #6
  store i32 0, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #6
  store i64 0, ptr %66, align 8, !tbaa !11
  br label %465

465:                                              ; preds = %510, %462
  %466 = load i64, ptr %66, align 8, !tbaa !11
  %467 = load i64, ptr %46, align 8, !tbaa !11
  %468 = icmp ult i64 %466, %467
  br i1 %468, label %470, label %469

469:                                              ; preds = %465
  store i32 46, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  br label %513

470:                                              ; preds = %465
  %471 = load ptr, ptr %44, align 8, !tbaa !9
  call void @array_cache_prefetch(ptr noundef %471)
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !35
  br label %472

472:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #6
  %473 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !36
  %474 = extractvalue { i32, i32 } %473, 0
  %475 = extractvalue { i32, i32 } %473, 1
  store i32 %474, ptr %67, align 4, !tbaa !5
  store i32 %475, ptr %68, align 4, !tbaa !5
  %476 = load i32, ptr %67, align 4, !tbaa !5
  %477 = zext i32 %476 to i64
  %478 = shl i64 %477, 32
  %479 = load i32, ptr %68, align 4, !tbaa !5
  %480 = zext i32 %479 to i64
  %481 = or i64 %478, %480
  store i64 %481, ptr %62, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #6
  br label %482

482:                                              ; preds = %472
  br label %483

483:                                              ; preds = %482
  %484 = load ptr, ptr %44, align 8, !tbaa !9
  %485 = load ptr, ptr %47, align 8, !tbaa !9
  %486 = load i64, ptr %66, align 8, !tbaa !11
  %487 = getelementptr inbounds i16, ptr %485, i64 %486
  %488 = load i16, ptr %487, align 2, !tbaa !37
  %489 = call zeroext i1 @array_container_contains(ptr noundef %484, i16 noundef zeroext %488)
  br label %490

490:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #6
  %491 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !39
  %492 = extractvalue { i32, i32 } %491, 0
  %493 = extractvalue { i32, i32 } %491, 1
  store i32 %492, ptr %69, align 4, !tbaa !5
  store i32 %493, ptr %70, align 4, !tbaa !5
  %494 = load i32, ptr %69, align 4, !tbaa !5
  %495 = zext i32 %494 to i64
  %496 = shl i64 %495, 32
  %497 = load i32, ptr %70, align 4, !tbaa !5
  %498 = zext i32 %497 to i64
  %499 = or i64 %496, %498
  store i64 %499, ptr %63, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #6
  br label %500

500:                                              ; preds = %490
  br label %501

501:                                              ; preds = %500
  %502 = load i64, ptr %63, align 8, !tbaa !11
  %503 = load i64, ptr %62, align 8, !tbaa !11
  %504 = sub i64 %502, %503
  store i64 %504, ptr %64, align 8, !tbaa !11
  %505 = load i64, ptr %64, align 8, !tbaa !11
  %506 = load i32, ptr %65, align 4, !tbaa !5
  %507 = sext i32 %506 to i64
  %508 = add i64 %507, %505
  %509 = trunc i64 %508 to i32
  store i32 %509, ptr %65, align 4, !tbaa !5
  br label %510

510:                                              ; preds = %501
  %511 = load i64, ptr %66, align 8, !tbaa !11
  %512 = add i64 %511, 1
  store i64 %512, ptr %66, align 8, !tbaa !11
  br label %465, !llvm.loop !40

513:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #6
  %514 = load i64, ptr %46, align 8, !tbaa !11
  store i64 %514, ptr %71, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #6
  %515 = load i32, ptr %65, align 4, !tbaa !5
  %516 = sitofp i32 %515 to float
  %517 = load i64, ptr %71, align 8, !tbaa !11
  %518 = uitofp i64 %517 to float
  %519 = fdiv float %516, %518
  store float %519, ptr %72, align 4, !tbaa !18
  %520 = load float, ptr %72, align 4, !tbaa !18
  %521 = fpext float %520 to double
  %522 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %521)
  %523 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %524 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  br label %525

525:                                              ; preds = %513
  br label %526

526:                                              ; preds = %525
  br label %527

527:                                              ; preds = %526
  %528 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str.13)
  %529 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #6
  store i32 0, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #6
  store i64 0, ptr %77, align 8, !tbaa !11
  br label %530

530:                                              ; preds = %575, %527
  %531 = load i64, ptr %77, align 8, !tbaa !11
  %532 = load i64, ptr %46, align 8, !tbaa !11
  %533 = icmp ult i64 %531, %532
  br i1 %533, label %535, label %534

534:                                              ; preds = %530
  store i32 55, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #6
  br label %578

535:                                              ; preds = %530
  %536 = load ptr, ptr %44, align 8, !tbaa !9
  call void @array_cache_flush(ptr noundef %536)
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !41
  br label %537

537:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #6
  %538 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !42
  %539 = extractvalue { i32, i32 } %538, 0
  %540 = extractvalue { i32, i32 } %538, 1
  store i32 %539, ptr %78, align 4, !tbaa !5
  store i32 %540, ptr %79, align 4, !tbaa !5
  %541 = load i32, ptr %78, align 4, !tbaa !5
  %542 = zext i32 %541 to i64
  %543 = shl i64 %542, 32
  %544 = load i32, ptr %79, align 4, !tbaa !5
  %545 = zext i32 %544 to i64
  %546 = or i64 %543, %545
  store i64 %546, ptr %73, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #6
  br label %547

547:                                              ; preds = %537
  br label %548

548:                                              ; preds = %547
  %549 = load ptr, ptr %44, align 8, !tbaa !9
  %550 = load ptr, ptr %47, align 8, !tbaa !9
  %551 = load i64, ptr %77, align 8, !tbaa !11
  %552 = getelementptr inbounds i16, ptr %550, i64 %551
  %553 = load i16, ptr %552, align 2, !tbaa !37
  %554 = call zeroext i1 @array_container_contains(ptr noundef %549, i16 noundef zeroext %553)
  br label %555

555:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #6
  %556 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !43
  %557 = extractvalue { i32, i32 } %556, 0
  %558 = extractvalue { i32, i32 } %556, 1
  store i32 %557, ptr %80, align 4, !tbaa !5
  store i32 %558, ptr %81, align 4, !tbaa !5
  %559 = load i32, ptr %80, align 4, !tbaa !5
  %560 = zext i32 %559 to i64
  %561 = shl i64 %560, 32
  %562 = load i32, ptr %81, align 4, !tbaa !5
  %563 = zext i32 %562 to i64
  %564 = or i64 %561, %563
  store i64 %564, ptr %74, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #6
  br label %565

565:                                              ; preds = %555
  br label %566

566:                                              ; preds = %565
  %567 = load i64, ptr %74, align 8, !tbaa !11
  %568 = load i64, ptr %73, align 8, !tbaa !11
  %569 = sub i64 %567, %568
  store i64 %569, ptr %75, align 8, !tbaa !11
  %570 = load i64, ptr %75, align 8, !tbaa !11
  %571 = load i32, ptr %76, align 4, !tbaa !5
  %572 = sext i32 %571 to i64
  %573 = add i64 %572, %570
  %574 = trunc i64 %573 to i32
  store i32 %574, ptr %76, align 4, !tbaa !5
  br label %575

575:                                              ; preds = %566
  %576 = load i64, ptr %77, align 8, !tbaa !11
  %577 = add i64 %576, 1
  store i64 %577, ptr %77, align 8, !tbaa !11
  br label %530, !llvm.loop !44

578:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #6
  %579 = load i64, ptr %46, align 8, !tbaa !11
  store i64 %579, ptr %82, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #6
  %580 = load i32, ptr %76, align 4, !tbaa !5
  %581 = sitofp i32 %580 to float
  %582 = load i64, ptr %82, align 8, !tbaa !11
  %583 = uitofp i64 %582 to float
  %584 = fdiv float %581, %583
  store float %584, ptr %83, align 4, !tbaa !18
  %585 = load float, ptr %83, align 4, !tbaa !18
  %586 = fpext float %585 to double
  %587 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %586)
  %588 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %589 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  br label %590

590:                                              ; preds = %578
  br label %591

591:                                              ; preds = %590
  %592 = load ptr, ptr %47, align 8, !tbaa !9
  call void @free(ptr noundef %592) #6
  %593 = load ptr, ptr %44, align 8, !tbaa !9
  call void @array_container_free(ptr noundef %593)
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %594

594:                                              ; preds = %591
  %595 = load i32, ptr %42, align 4, !tbaa !5
  %596 = mul nsw i32 %595, 8
  store i32 %596, ptr %42, align 4, !tbaa !5
  br label %356, !llvm.loop !45

597:                                              ; preds = %359
  %598 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #6
  %599 = call ptr @array_container_create()
  store ptr %599, ptr %84, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #6
  store i32 0, ptr %85, align 4, !tbaa !5
  br label %600

600:                                              ; preds = %609, %597
  %601 = load i32, ptr %85, align 4, !tbaa !5
  %602 = icmp slt i32 %601, 65536
  br i1 %602, label %604, label %603

603:                                              ; preds = %600
  store i32 62, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #6
  br label %612

604:                                              ; preds = %600
  %605 = load ptr, ptr %84, align 8, !tbaa !9
  %606 = load i32, ptr %85, align 4, !tbaa !5
  %607 = trunc i32 %606 to i16
  %608 = call zeroext i1 @array_container_add(ptr noundef %605, i16 noundef zeroext %607)
  br label %609

609:                                              ; preds = %604
  %610 = load i32, ptr %85, align 4, !tbaa !5
  %611 = add nsw i32 %610, 3
  store i32 %611, ptr %85, align 4, !tbaa !5
  br label %600, !llvm.loop !46

612:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #6
  %613 = call ptr @array_container_create()
  store ptr %613, ptr %86, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #6
  store i32 0, ptr %87, align 4, !tbaa !5
  br label %614

614:                                              ; preds = %623, %612
  %615 = load i32, ptr %87, align 4, !tbaa !5
  %616 = icmp slt i32 %615, 65536
  br i1 %616, label %618, label %617

617:                                              ; preds = %614
  store i32 65, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #6
  br label %626

618:                                              ; preds = %614
  %619 = load ptr, ptr %86, align 8, !tbaa !9
  %620 = load i32, ptr %87, align 4, !tbaa !5
  %621 = trunc i32 %620 to i16
  %622 = call zeroext i1 @array_container_add(ptr noundef %619, i16 noundef zeroext %621)
  br label %623

623:                                              ; preds = %618
  %624 = load i32, ptr %87, align 4, !tbaa !5
  %625 = add nsw i32 %624, 5
  store i32 %625, ptr %87, align 4, !tbaa !5
  br label %614, !llvm.loop !47

626:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #6
  %627 = load ptr, ptr %84, align 8, !tbaa !9
  %628 = getelementptr inbounds %struct.array_container_s, ptr %627, i32 0, i32 0
  %629 = load i32, ptr %628, align 8, !tbaa !29
  %630 = load ptr, ptr %86, align 8, !tbaa !9
  %631 = getelementptr inbounds %struct.array_container_s, ptr %630, i32 0, i32 0
  %632 = load i32, ptr %631, align 8, !tbaa !29
  %633 = add nsw i32 %629, %632
  store i32 %633, ptr %88, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #6
  %634 = call ptr @array_container_create()
  store ptr %634, ptr %89, align 8, !tbaa !9
  %635 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  %636 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  %637 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  %638 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  %639 = call i32 (ptr, ...) @printf(ptr noundef @.str.18)
  %640 = load ptr, ptr %84, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.array_container_s, ptr %640, i32 0, i32 0
  %642 = load i32, ptr %641, align 8, !tbaa !29
  %643 = load ptr, ptr %86, align 8, !tbaa !9
  %644 = getelementptr inbounds %struct.array_container_s, ptr %643, i32 0, i32 0
  %645 = load i32, ptr %644, align 8, !tbaa !29
  %646 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef %642, i32 noundef %645)
  %647 = load ptr, ptr %84, align 8, !tbaa !9
  %648 = load ptr, ptr %86, align 8, !tbaa !9
  %649 = load ptr, ptr %89, align 8, !tbaa !9
  %650 = call i32 @union_test(ptr noundef %647, ptr noundef %648, ptr noundef %649)
  store i32 %650, ptr %17, align 4, !tbaa !5
  %651 = load i32, ptr %17, align 4, !tbaa !5
  %652 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %651)
  %653 = load ptr, ptr %84, align 8, !tbaa !9
  %654 = getelementptr inbounds %struct.array_container_s, ptr %653, i32 0, i32 0
  %655 = load i32, ptr %654, align 8, !tbaa !29
  %656 = load ptr, ptr %86, align 8, !tbaa !9
  %657 = getelementptr inbounds %struct.array_container_s, ptr %656, i32 0, i32 0
  %658 = load i32, ptr %657, align 8, !tbaa !29
  %659 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, i32 noundef %655, i32 noundef %658)
  br label %660

660:                                              ; preds = %626
  %661 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.22)
  %662 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #6
  store i64 -1, ptr %93, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #6
  store i32 0, ptr %94, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #6
  store i32 0, ptr %95, align 4, !tbaa !5
  br label %663

663:                                              ; preds = %710, %660
  %664 = load i32, ptr %95, align 4, !tbaa !5
  %665 = load i32, ptr %2, align 4, !tbaa !5
  %666 = icmp slt i32 %664, %665
  br i1 %666, label %668, label %667

667:                                              ; preds = %663
  store i32 70, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #6
  br label %713

668:                                              ; preds = %663
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !48
  br label %669

669:                                              ; preds = %668
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #6
  %670 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !49
  %671 = extractvalue { i32, i32 } %670, 0
  %672 = extractvalue { i32, i32 } %670, 1
  store i32 %671, ptr %96, align 4, !tbaa !5
  store i32 %672, ptr %97, align 4, !tbaa !5
  %673 = load i32, ptr %96, align 4, !tbaa !5
  %674 = zext i32 %673 to i64
  %675 = shl i64 %674, 32
  %676 = load i32, ptr %97, align 4, !tbaa !5
  %677 = zext i32 %676 to i64
  %678 = or i64 %675, %677
  store i64 %678, ptr %90, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #6
  br label %679

679:                                              ; preds = %669
  br label %680

680:                                              ; preds = %679
  %681 = load ptr, ptr %84, align 8, !tbaa !9
  %682 = load ptr, ptr %86, align 8, !tbaa !9
  %683 = load ptr, ptr %89, align 8, !tbaa !9
  %684 = call i32 @union_test(ptr noundef %681, ptr noundef %682, ptr noundef %683)
  %685 = load i32, ptr %17, align 4, !tbaa !5
  %686 = icmp ne i32 %684, %685
  br i1 %686, label %687, label %688

687:                                              ; preds = %680
  store i32 1, ptr %94, align 4, !tbaa !5
  br label %688

688:                                              ; preds = %687, %680
  br label %689

689:                                              ; preds = %688
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #6
  %690 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !50
  %691 = extractvalue { i32, i32 } %690, 0
  %692 = extractvalue { i32, i32 } %690, 1
  store i32 %691, ptr %98, align 4, !tbaa !5
  store i32 %692, ptr %99, align 4, !tbaa !5
  %693 = load i32, ptr %98, align 4, !tbaa !5
  %694 = zext i32 %693 to i64
  %695 = shl i64 %694, 32
  %696 = load i32, ptr %99, align 4, !tbaa !5
  %697 = zext i32 %696 to i64
  %698 = or i64 %695, %697
  store i64 %698, ptr %91, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #6
  br label %699

699:                                              ; preds = %689
  br label %700

700:                                              ; preds = %699
  %701 = load i64, ptr %91, align 8, !tbaa !11
  %702 = load i64, ptr %90, align 8, !tbaa !11
  %703 = sub i64 %701, %702
  store i64 %703, ptr %92, align 8, !tbaa !11
  %704 = load i64, ptr %92, align 8, !tbaa !11
  %705 = load i64, ptr %93, align 8, !tbaa !11
  %706 = icmp ult i64 %704, %705
  br i1 %706, label %707, label %709

707:                                              ; preds = %700
  %708 = load i64, ptr %92, align 8, !tbaa !11
  store i64 %708, ptr %93, align 8, !tbaa !11
  br label %709

709:                                              ; preds = %707, %700
  br label %710

710:                                              ; preds = %709
  %711 = load i32, ptr %95, align 4, !tbaa !5
  %712 = add nsw i32 %711, 1
  store i32 %712, ptr %95, align 4, !tbaa !5
  br label %663, !llvm.loop !51

713:                                              ; preds = %667
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #6
  %714 = load i32, ptr %88, align 4, !tbaa !5
  %715 = sext i32 %714 to i64
  store i64 %715, ptr %100, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #6
  %716 = load i64, ptr %93, align 8, !tbaa !11
  %717 = uitofp i64 %716 to float
  %718 = load i64, ptr %100, align 8, !tbaa !11
  %719 = uitofp i64 %718 to float
  %720 = fdiv float %717, %719
  store float %720, ptr %101, align 4, !tbaa !18
  %721 = load float, ptr %101, align 4, !tbaa !18
  %722 = fpext float %721 to double
  %723 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %722)
  %724 = load i32, ptr %94, align 4, !tbaa !5
  %725 = icmp ne i32 %724, 0
  br i1 %725, label %726, label %728

726:                                              ; preds = %713
  %727 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %728

728:                                              ; preds = %726, %713
  %729 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %730 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #6
  br label %731

731:                                              ; preds = %728
  br label %732

732:                                              ; preds = %731
  %733 = load ptr, ptr %84, align 8, !tbaa !9
  %734 = load ptr, ptr %86, align 8, !tbaa !9
  %735 = load ptr, ptr %89, align 8, !tbaa !9
  %736 = call i32 @intersection_test(ptr noundef %733, ptr noundef %734, ptr noundef %735)
  store i32 %736, ptr %17, align 4, !tbaa !5
  %737 = load i32, ptr %17, align 4, !tbaa !5
  %738 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i32 noundef %737)
  br label %739

739:                                              ; preds = %732
  %740 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.24)
  %741 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #6
  store i64 -1, ptr %105, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #6
  store i32 0, ptr %106, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #6
  store i32 0, ptr %107, align 4, !tbaa !5
  br label %742

742:                                              ; preds = %789, %739
  %743 = load i32, ptr %107, align 4, !tbaa !5
  %744 = load i32, ptr %2, align 4, !tbaa !5
  %745 = icmp slt i32 %743, %744
  br i1 %745, label %747, label %746

746:                                              ; preds = %742
  store i32 79, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #6
  br label %792

747:                                              ; preds = %742
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !52
  br label %748

748:                                              ; preds = %747
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #6
  %749 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !53
  %750 = extractvalue { i32, i32 } %749, 0
  %751 = extractvalue { i32, i32 } %749, 1
  store i32 %750, ptr %108, align 4, !tbaa !5
  store i32 %751, ptr %109, align 4, !tbaa !5
  %752 = load i32, ptr %108, align 4, !tbaa !5
  %753 = zext i32 %752 to i64
  %754 = shl i64 %753, 32
  %755 = load i32, ptr %109, align 4, !tbaa !5
  %756 = zext i32 %755 to i64
  %757 = or i64 %754, %756
  store i64 %757, ptr %102, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #6
  br label %758

758:                                              ; preds = %748
  br label %759

759:                                              ; preds = %758
  %760 = load ptr, ptr %84, align 8, !tbaa !9
  %761 = load ptr, ptr %86, align 8, !tbaa !9
  %762 = load ptr, ptr %89, align 8, !tbaa !9
  %763 = call i32 @intersection_test(ptr noundef %760, ptr noundef %761, ptr noundef %762)
  %764 = load i32, ptr %17, align 4, !tbaa !5
  %765 = icmp ne i32 %763, %764
  br i1 %765, label %766, label %767

766:                                              ; preds = %759
  store i32 1, ptr %106, align 4, !tbaa !5
  br label %767

767:                                              ; preds = %766, %759
  br label %768

768:                                              ; preds = %767
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #6
  %769 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !54
  %770 = extractvalue { i32, i32 } %769, 0
  %771 = extractvalue { i32, i32 } %769, 1
  store i32 %770, ptr %110, align 4, !tbaa !5
  store i32 %771, ptr %111, align 4, !tbaa !5
  %772 = load i32, ptr %110, align 4, !tbaa !5
  %773 = zext i32 %772 to i64
  %774 = shl i64 %773, 32
  %775 = load i32, ptr %111, align 4, !tbaa !5
  %776 = zext i32 %775 to i64
  %777 = or i64 %774, %776
  store i64 %777, ptr %103, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #6
  br label %778

778:                                              ; preds = %768
  br label %779

779:                                              ; preds = %778
  %780 = load i64, ptr %103, align 8, !tbaa !11
  %781 = load i64, ptr %102, align 8, !tbaa !11
  %782 = sub i64 %780, %781
  store i64 %782, ptr %104, align 8, !tbaa !11
  %783 = load i64, ptr %104, align 8, !tbaa !11
  %784 = load i64, ptr %105, align 8, !tbaa !11
  %785 = icmp ult i64 %783, %784
  br i1 %785, label %786, label %788

786:                                              ; preds = %779
  %787 = load i64, ptr %104, align 8, !tbaa !11
  store i64 %787, ptr %105, align 8, !tbaa !11
  br label %788

788:                                              ; preds = %786, %779
  br label %789

789:                                              ; preds = %788
  %790 = load i32, ptr %107, align 4, !tbaa !5
  %791 = add nsw i32 %790, 1
  store i32 %791, ptr %107, align 4, !tbaa !5
  br label %742, !llvm.loop !55

792:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #6
  %793 = load i32, ptr %17, align 4, !tbaa !5
  %794 = sext i32 %793 to i64
  store i64 %794, ptr %112, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #6
  %795 = load i64, ptr %105, align 8, !tbaa !11
  %796 = uitofp i64 %795 to float
  %797 = load i64, ptr %112, align 8, !tbaa !11
  %798 = uitofp i64 %797 to float
  %799 = fdiv float %796, %798
  store float %799, ptr %113, align 4, !tbaa !18
  %800 = load float, ptr %113, align 4, !tbaa !18
  %801 = fpext float %800 to double
  %802 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %801)
  %803 = load i32, ptr %106, align 4, !tbaa !5
  %804 = icmp ne i32 %803, 0
  br i1 %804, label %805, label %807

805:                                              ; preds = %792
  %806 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %807

807:                                              ; preds = %805, %792
  %808 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %809 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #6
  br label %810

810:                                              ; preds = %807
  br label %811

811:                                              ; preds = %810
  %812 = call i32 (ptr, ...) @printf(ptr noundef @.str.25)
  %813 = load ptr, ptr %84, align 8, !tbaa !9
  call void @array_container_clear(ptr noundef %813)
  %814 = load ptr, ptr %86, align 8, !tbaa !9
  call void @array_container_clear(ptr noundef %814)
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #6
  store i32 0, ptr %114, align 4, !tbaa !5
  br label %815

815:                                              ; preds = %824, %811
  %816 = load i32, ptr %114, align 4, !tbaa !5
  %817 = icmp slt i32 %816, 65536
  br i1 %817, label %819, label %818

818:                                              ; preds = %815
  store i32 86, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #6
  br label %827

819:                                              ; preds = %815
  %820 = load ptr, ptr %84, align 8, !tbaa !9
  %821 = load i32, ptr %114, align 4, !tbaa !5
  %822 = trunc i32 %821 to i16
  %823 = call zeroext i1 @array_container_add(ptr noundef %820, i16 noundef zeroext %822)
  br label %824

824:                                              ; preds = %819
  %825 = load i32, ptr %114, align 4, !tbaa !5
  %826 = add nsw i32 %825, 16
  store i32 %826, ptr %114, align 4, !tbaa !5
  br label %815, !llvm.loop !56

827:                                              ; preds = %818
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #6
  store i32 1, ptr %115, align 4, !tbaa !5
  br label %828

828:                                              ; preds = %837, %827
  %829 = load i32, ptr %115, align 4, !tbaa !5
  %830 = icmp slt i32 %829, 65536
  br i1 %830, label %832, label %831

831:                                              ; preds = %828
  store i32 89, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #6
  br label %841

832:                                              ; preds = %828
  %833 = load ptr, ptr %86, align 8, !tbaa !9
  %834 = load i32, ptr %115, align 4, !tbaa !5
  %835 = trunc i32 %834 to i16
  %836 = call zeroext i1 @array_container_add(ptr noundef %833, i16 noundef zeroext %835)
  br label %837

837:                                              ; preds = %832
  %838 = load i32, ptr %115, align 4, !tbaa !5
  %839 = load i32, ptr %115, align 4, !tbaa !5
  %840 = add nsw i32 %839, %838
  store i32 %840, ptr %115, align 4, !tbaa !5
  br label %828, !llvm.loop !57

841:                                              ; preds = %831
  %842 = load ptr, ptr %84, align 8, !tbaa !9
  %843 = getelementptr inbounds %struct.array_container_s, ptr %842, i32 0, i32 0
  %844 = load i32, ptr %843, align 8, !tbaa !29
  %845 = load ptr, ptr %86, align 8, !tbaa !9
  %846 = getelementptr inbounds %struct.array_container_s, ptr %845, i32 0, i32 0
  %847 = load i32, ptr %846, align 8, !tbaa !29
  %848 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef %844, i32 noundef %847)
  %849 = load ptr, ptr %84, align 8, !tbaa !9
  %850 = load ptr, ptr %86, align 8, !tbaa !9
  %851 = load ptr, ptr %89, align 8, !tbaa !9
  %852 = call i32 @union_test(ptr noundef %849, ptr noundef %850, ptr noundef %851)
  store i32 %852, ptr %17, align 4, !tbaa !5
  %853 = load i32, ptr %17, align 4, !tbaa !5
  %854 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %853)
  %855 = load ptr, ptr %84, align 8, !tbaa !9
  %856 = getelementptr inbounds %struct.array_container_s, ptr %855, i32 0, i32 0
  %857 = load i32, ptr %856, align 8, !tbaa !29
  %858 = load ptr, ptr %86, align 8, !tbaa !9
  %859 = getelementptr inbounds %struct.array_container_s, ptr %858, i32 0, i32 0
  %860 = load i32, ptr %859, align 8, !tbaa !29
  %861 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, i32 noundef %857, i32 noundef %860)
  br label %862

862:                                              ; preds = %841
  %863 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.22)
  %864 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #6
  store i64 -1, ptr %119, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %120) #6
  store i32 0, ptr %120, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %121) #6
  store i32 0, ptr %121, align 4, !tbaa !5
  br label %865

865:                                              ; preds = %912, %862
  %866 = load i32, ptr %121, align 4, !tbaa !5
  %867 = load i32, ptr %2, align 4, !tbaa !5
  %868 = icmp slt i32 %866, %867
  br i1 %868, label %870, label %869

869:                                              ; preds = %865
  store i32 94, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #6
  br label %915

870:                                              ; preds = %865
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !58
  br label %871

871:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #6
  %872 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !59
  %873 = extractvalue { i32, i32 } %872, 0
  %874 = extractvalue { i32, i32 } %872, 1
  store i32 %873, ptr %122, align 4, !tbaa !5
  store i32 %874, ptr %123, align 4, !tbaa !5
  %875 = load i32, ptr %122, align 4, !tbaa !5
  %876 = zext i32 %875 to i64
  %877 = shl i64 %876, 32
  %878 = load i32, ptr %123, align 4, !tbaa !5
  %879 = zext i32 %878 to i64
  %880 = or i64 %877, %879
  store i64 %880, ptr %116, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #6
  br label %881

881:                                              ; preds = %871
  br label %882

882:                                              ; preds = %881
  %883 = load ptr, ptr %84, align 8, !tbaa !9
  %884 = load ptr, ptr %86, align 8, !tbaa !9
  %885 = load ptr, ptr %89, align 8, !tbaa !9
  %886 = call i32 @union_test(ptr noundef %883, ptr noundef %884, ptr noundef %885)
  %887 = load i32, ptr %17, align 4, !tbaa !5
  %888 = icmp ne i32 %886, %887
  br i1 %888, label %889, label %890

889:                                              ; preds = %882
  store i32 1, ptr %120, align 4, !tbaa !5
  br label %890

890:                                              ; preds = %889, %882
  br label %891

891:                                              ; preds = %890
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %125) #6
  %892 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !60
  %893 = extractvalue { i32, i32 } %892, 0
  %894 = extractvalue { i32, i32 } %892, 1
  store i32 %893, ptr %124, align 4, !tbaa !5
  store i32 %894, ptr %125, align 4, !tbaa !5
  %895 = load i32, ptr %124, align 4, !tbaa !5
  %896 = zext i32 %895 to i64
  %897 = shl i64 %896, 32
  %898 = load i32, ptr %125, align 4, !tbaa !5
  %899 = zext i32 %898 to i64
  %900 = or i64 %897, %899
  store i64 %900, ptr %117, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #6
  br label %901

901:                                              ; preds = %891
  br label %902

902:                                              ; preds = %901
  %903 = load i64, ptr %117, align 8, !tbaa !11
  %904 = load i64, ptr %116, align 8, !tbaa !11
  %905 = sub i64 %903, %904
  store i64 %905, ptr %118, align 8, !tbaa !11
  %906 = load i64, ptr %118, align 8, !tbaa !11
  %907 = load i64, ptr %119, align 8, !tbaa !11
  %908 = icmp ult i64 %906, %907
  br i1 %908, label %909, label %911

909:                                              ; preds = %902
  %910 = load i64, ptr %118, align 8, !tbaa !11
  store i64 %910, ptr %119, align 8, !tbaa !11
  br label %911

911:                                              ; preds = %909, %902
  br label %912

912:                                              ; preds = %911
  %913 = load i32, ptr %121, align 4, !tbaa !5
  %914 = add nsw i32 %913, 1
  store i32 %914, ptr %121, align 4, !tbaa !5
  br label %865, !llvm.loop !61

915:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #6
  %916 = load i32, ptr %88, align 4, !tbaa !5
  %917 = sext i32 %916 to i64
  store i64 %917, ptr %126, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #6
  %918 = load i64, ptr %119, align 8, !tbaa !11
  %919 = uitofp i64 %918 to float
  %920 = load i64, ptr %126, align 8, !tbaa !11
  %921 = uitofp i64 %920 to float
  %922 = fdiv float %919, %921
  store float %922, ptr %127, align 4, !tbaa !18
  %923 = load float, ptr %127, align 4, !tbaa !18
  %924 = fpext float %923 to double
  %925 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %924)
  %926 = load i32, ptr %120, align 4, !tbaa !5
  %927 = icmp ne i32 %926, 0
  br i1 %927, label %928, label %930

928:                                              ; preds = %915
  %929 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %930

930:                                              ; preds = %928, %915
  %931 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %932 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #6
  br label %933

933:                                              ; preds = %930
  br label %934

934:                                              ; preds = %933
  %935 = load ptr, ptr %84, align 8, !tbaa !9
  %936 = load ptr, ptr %86, align 8, !tbaa !9
  %937 = load ptr, ptr %89, align 8, !tbaa !9
  %938 = call i32 @intersection_test(ptr noundef %935, ptr noundef %936, ptr noundef %937)
  store i32 %938, ptr %17, align 4, !tbaa !5
  %939 = load i32, ptr %17, align 4, !tbaa !5
  %940 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i32 noundef %939)
  br label %941

941:                                              ; preds = %934
  %942 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef @.str.24)
  %943 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #6
  store i64 -1, ptr %131, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #6
  store i32 0, ptr %132, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #6
  store i32 0, ptr %133, align 4, !tbaa !5
  br label %944

944:                                              ; preds = %991, %941
  %945 = load i32, ptr %133, align 4, !tbaa !5
  %946 = load i32, ptr %2, align 4, !tbaa !5
  %947 = icmp slt i32 %945, %946
  br i1 %947, label %949, label %948

948:                                              ; preds = %944
  store i32 103, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #6
  br label %994

949:                                              ; preds = %944
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !62
  br label %950

950:                                              ; preds = %949
  call void @llvm.lifetime.start.p0(i64 4, ptr %134) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %135) #6
  %951 = call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !63
  %952 = extractvalue { i32, i32 } %951, 0
  %953 = extractvalue { i32, i32 } %951, 1
  store i32 %952, ptr %134, align 4, !tbaa !5
  store i32 %953, ptr %135, align 4, !tbaa !5
  %954 = load i32, ptr %134, align 4, !tbaa !5
  %955 = zext i32 %954 to i64
  %956 = shl i64 %955, 32
  %957 = load i32, ptr %135, align 4, !tbaa !5
  %958 = zext i32 %957 to i64
  %959 = or i64 %956, %958
  store i64 %959, ptr %128, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %135) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #6
  br label %960

960:                                              ; preds = %950
  br label %961

961:                                              ; preds = %960
  %962 = load ptr, ptr %84, align 8, !tbaa !9
  %963 = load ptr, ptr %86, align 8, !tbaa !9
  %964 = load ptr, ptr %89, align 8, !tbaa !9
  %965 = call i32 @intersection_test(ptr noundef %962, ptr noundef %963, ptr noundef %964)
  %966 = load i32, ptr %17, align 4, !tbaa !5
  %967 = icmp ne i32 %965, %966
  br i1 %967, label %968, label %969

968:                                              ; preds = %961
  store i32 1, ptr %132, align 4, !tbaa !5
  br label %969

969:                                              ; preds = %968, %961
  br label %970

970:                                              ; preds = %969
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %137) #6
  %971 = call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !64
  %972 = extractvalue { i32, i32 } %971, 0
  %973 = extractvalue { i32, i32 } %971, 1
  store i32 %972, ptr %136, align 4, !tbaa !5
  store i32 %973, ptr %137, align 4, !tbaa !5
  %974 = load i32, ptr %136, align 4, !tbaa !5
  %975 = zext i32 %974 to i64
  %976 = shl i64 %975, 32
  %977 = load i32, ptr %137, align 4, !tbaa !5
  %978 = zext i32 %977 to i64
  %979 = or i64 %976, %978
  store i64 %979, ptr %129, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %137) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #6
  br label %980

980:                                              ; preds = %970
  br label %981

981:                                              ; preds = %980
  %982 = load i64, ptr %129, align 8, !tbaa !11
  %983 = load i64, ptr %128, align 8, !tbaa !11
  %984 = sub i64 %982, %983
  store i64 %984, ptr %130, align 8, !tbaa !11
  %985 = load i64, ptr %130, align 8, !tbaa !11
  %986 = load i64, ptr %131, align 8, !tbaa !11
  %987 = icmp ult i64 %985, %986
  br i1 %987, label %988, label %990

988:                                              ; preds = %981
  %989 = load i64, ptr %130, align 8, !tbaa !11
  store i64 %989, ptr %131, align 8, !tbaa !11
  br label %990

990:                                              ; preds = %988, %981
  br label %991

991:                                              ; preds = %990
  %992 = load i32, ptr %133, align 4, !tbaa !5
  %993 = add nsw i32 %992, 1
  store i32 %993, ptr %133, align 4, !tbaa !5
  br label %944, !llvm.loop !65

994:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #6
  %995 = load i32, ptr %17, align 4, !tbaa !5
  %996 = sext i32 %995 to i64
  store i64 %996, ptr %138, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %139) #6
  %997 = load i64, ptr %131, align 8, !tbaa !11
  %998 = uitofp i64 %997 to float
  %999 = load i64, ptr %138, align 8, !tbaa !11
  %1000 = uitofp i64 %999 to float
  %1001 = fdiv float %998, %1000
  store float %1001, ptr %139, align 4, !tbaa !18
  %1002 = load float, ptr %139, align 4, !tbaa !18
  %1003 = fpext float %1002 to double
  %1004 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %1003)
  %1005 = load i32, ptr %132, align 4, !tbaa !5
  %1006 = icmp ne i32 %1005, 0
  br i1 %1006, label %1007, label %1009

1007:                                             ; preds = %994
  %1008 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %1009

1009:                                             ; preds = %1007, %994
  %1010 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %1011 = call i32 @fflush(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #6
  br label %1012

1012:                                             ; preds = %1009
  br label %1013

1013:                                             ; preds = %1012
  %1014 = load ptr, ptr %84, align 8, !tbaa !9
  call void @array_container_free(ptr noundef %1014)
  %1015 = load ptr, ptr %86, align 8, !tbaa !9
  call void @array_container_free(ptr noundef %1015)
  %1016 = load ptr, ptr %89, align 8, !tbaa !9
  call void @array_container_free(ptr noundef %1016)
  store i32 0, ptr %1, align 4
  store i32 1, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #6
  %1017 = load i32, ptr %1, align 4
  ret i32 %1017
}

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

declare ptr @array_container_create() #3

declare i32 @fflush(ptr noundef) #3

declare void @array_container_free(ptr noundef) #3

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @array_container_cardinality(ptr noundef) #2

declare i32 @array_container_to_uint32_array(ptr noundef, ptr noundef, i32 noundef) #3

; Function Attrs: nounwind
declare void @free(ptr noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @array_container_clear(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @tellmeall() #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @pcg32_random() #2

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

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{i64 2151672022}
!14 = !{i64 2151672312, i64 2151672320, i64 2151672400, i64 2151672488, i64 2151672568}
!15 = !{i64 2151673057, i64 2151673066, i64 2151673153, i64 2151673233, i64 2151673305}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !19, i64 0}
!19 = !{!"float", !7, i64 0}
!20 = !{i64 2151674978}
!21 = !{i64 2151675268, i64 2151675276, i64 2151675356, i64 2151675444, i64 2151675524}
!22 = !{i64 2151676013, i64 2151676022, i64 2151676109, i64 2151676189, i64 2151676261}
!23 = distinct !{!23, !17}
!24 = !{i64 2151677925}
!25 = !{i64 2151678215, i64 2151678223, i64 2151678303, i64 2151678391, i64 2151678471}
!26 = !{i64 2151678960, i64 2151678969, i64 2151679056, i64 2151679136, i64 2151679208}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = !{!30, !6, i64 0}
!30 = !{!"array_container_s", !6, i64 0, !6, i64 4, !10, i64 8}
!31 = !{i64 2151680939}
!32 = !{i64 2151681229, i64 2151681237, i64 2151681317, i64 2151681405, i64 2151681485}
!33 = !{i64 2151681974, i64 2151681983, i64 2151682070, i64 2151682150, i64 2151682222}
!34 = distinct !{!34, !17}
!35 = !{i64 2151684067}
!36 = !{i64 2151684357, i64 2151684365, i64 2151684445, i64 2151684533, i64 2151684613}
!37 = !{!38, !38, i64 0}
!38 = !{!"short", !7, i64 0}
!39 = !{i64 2151685102, i64 2151685111, i64 2151685198, i64 2151685278, i64 2151685350}
!40 = distinct !{!40, !17}
!41 = !{i64 2151687189}
!42 = !{i64 2151687479, i64 2151687487, i64 2151687567, i64 2151687655, i64 2151687735}
!43 = !{i64 2151688224, i64 2151688233, i64 2151688320, i64 2151688400, i64 2151688472}
!44 = distinct !{!44, !17}
!45 = distinct !{!45, !17}
!46 = distinct !{!46, !17}
!47 = distinct !{!47, !17}
!48 = !{i64 2151690162}
!49 = !{i64 2151690452, i64 2151690460, i64 2151690540, i64 2151690628, i64 2151690708}
!50 = !{i64 2151691197, i64 2151691206, i64 2151691293, i64 2151691373, i64 2151691445}
!51 = distinct !{!51, !17}
!52 = !{i64 2151693146}
!53 = !{i64 2151693436, i64 2151693444, i64 2151693524, i64 2151693612, i64 2151693692}
!54 = !{i64 2151694181, i64 2151694190, i64 2151694277, i64 2151694357, i64 2151694429}
!55 = distinct !{!55, !17}
!56 = distinct !{!56, !17}
!57 = distinct !{!57, !17}
!58 = !{i64 2151696119}
!59 = !{i64 2151696409, i64 2151696417, i64 2151696497, i64 2151696585, i64 2151696665}
!60 = !{i64 2151697154, i64 2151697163, i64 2151697250, i64 2151697330, i64 2151697402}
!61 = distinct !{!61, !17}
!62 = !{i64 2151699103}
!63 = !{i64 2151699393, i64 2151699401, i64 2151699481, i64 2151699569, i64 2151699649}
!64 = !{i64 2151700138, i64 2151700147, i64 2151700234, i64 2151700314, i64 2151700386}
!65 = distinct !{!65, !17}


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

@.str = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @array_cache_flush(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @array_cache_prefetch(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @add_test(ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @array_container_add(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @remove_test(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @contains_test(ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare zeroext i1 @array_container_contains(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @union_test(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @intersection_test(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  tail call void @tellmeall()
  %1 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  %2 = tail call ptr @array_container_create() #7
  %3 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.2)
  %4 = tail call i32 @fflush(ptr noundef null)
  br label %10

5:                                                ; preds = %10
  %6 = uitofp i64 %.1 to float
  %7 = fmul float %6, 0x3F40000000000000
  %8 = fpext float %7 to double
  %9 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %8)
  %.not = icmp eq i32 %spec.select, 0
  br i1 %.not, label %27, label %25

10:                                               ; preds = %0, %10
  %.0365 = phi i64 [ -1, %0 ], [ %.1, %10 ]
  %.0260364 = phi i32 [ 0, %0 ], [ %spec.select, %10 ]
  %.0262363 = phi i32 [ 0, %0 ], [ %24, %10 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !5
  %11 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !6
  %12 = extractvalue { i32, i32 } %11, 0
  %13 = extractvalue { i32, i32 } %11, 1
  %.neg398 = sub i32 0, %12
  %.neg398.z = zext i32 %.neg398 to i64
  %.neg397 = shl nuw i64 %.neg398.z, 32
  %14 = zext i32 %13 to i64
  %15 = tail call i32 @add_test(ptr noundef %2)
  %.not330 = icmp eq i32 %15, 0
  %spec.select = select i1 %.not330, i32 %.0260364, i32 1
  %16 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !7
  %17 = extractvalue { i32, i32 } %16, 0
  %18 = extractvalue { i32, i32 } %16, 1
  %19 = zext i32 %17 to i64
  %20 = shl nuw i64 %19, 32
  %21 = zext i32 %18 to i64
  %.neg362 = sub i64 %.neg397, %14
  %22 = add i64 %.neg362, %21
  %23 = add i64 %22, %20
  %.1 = tail call i64 @llvm.umin.i64(i64 %23, i64 %.0365)
  %24 = add nuw nsw i32 %.0262363, 1
  %exitcond.not = icmp eq i32 %24, 500
  br i1 %exitcond.not, label %5, label %10, !llvm.loop !8

25:                                               ; preds = %5
  %26 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %27

27:                                               ; preds = %25, %5
  %28 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %29 = tail call i32 @fflush(ptr noundef null)
  %30 = tail call i32 @contains_test(ptr noundef %2)
  %31 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.6)
  %32 = tail call i32 @fflush(ptr noundef null)
  br label %38

33:                                               ; preds = %38
  %34 = uitofp i64 %.1269 to float
  %35 = fmul float %34, 0x3EF0000000000000
  %36 = fpext float %35 to double
  %37 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %36)
  %.not316 = icmp eq i32 %spec.select331, 0
  br i1 %.not316, label %55, label %53

38:                                               ; preds = %27, %38
  %.0268368 = phi i64 [ -1, %27 ], [ %.1269, %38 ]
  %.0270367 = phi i32 [ 0, %27 ], [ %spec.select331, %38 ]
  %.0272366 = phi i32 [ 0, %27 ], [ %52, %38 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !10
  %39 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !11
  %40 = extractvalue { i32, i32 } %39, 0
  %41 = extractvalue { i32, i32 } %39, 1
  %.neg400 = sub i32 0, %40
  %.neg400.z = zext i32 %.neg400 to i64
  %.neg399 = shl nuw i64 %.neg400.z, 32
  %42 = zext i32 %41 to i64
  %43 = tail call i32 @contains_test(ptr noundef %2)
  %.not329 = icmp eq i32 %43, %30
  %spec.select331 = select i1 %.not329, i32 %.0270367, i32 1
  %44 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !12
  %45 = extractvalue { i32, i32 } %44, 0
  %46 = extractvalue { i32, i32 } %44, 1
  %47 = zext i32 %45 to i64
  %48 = shl nuw i64 %47, 32
  %49 = zext i32 %46 to i64
  %.neg359 = sub i64 %.neg399, %42
  %50 = add i64 %.neg359, %49
  %51 = add i64 %50, %48
  %.1269 = tail call i64 @llvm.umin.i64(i64 %51, i64 %.0268368)
  %52 = add nuw nsw i32 %.0272366, 1
  %exitcond414.not = icmp eq i32 %52, 500
  br i1 %exitcond414.not, label %33, label %38, !llvm.loop !13

53:                                               ; preds = %33
  %54 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %55

55:                                               ; preds = %53, %33
  %56 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %57 = tail call i32 @fflush(ptr noundef null)
  %58 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.7)
  %59 = tail call i32 @fflush(ptr noundef null)
  br label %65

60:                                               ; preds = %65
  %61 = uitofp i64 %.1274 to float
  %62 = fdiv float %61, 2.184500e+04
  %63 = fpext float %62 to double
  %64 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %63)
  %.not317 = icmp eq i32 %spec.select332, 0
  br i1 %.not317, label %82, label %80

65:                                               ; preds = %55, %65
  %.0273371 = phi i64 [ -1, %55 ], [ %.1274, %65 ]
  %.0275370 = phi i32 [ 0, %55 ], [ %spec.select332, %65 ]
  %.0277369 = phi i32 [ 0, %55 ], [ %79, %65 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !14
  %66 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !15
  %67 = extractvalue { i32, i32 } %66, 0
  %68 = extractvalue { i32, i32 } %66, 1
  %.neg402 = sub i32 0, %67
  %.neg402.z = zext i32 %.neg402 to i64
  %.neg401 = shl nuw i64 %.neg402.z, 32
  %69 = zext i32 %68 to i64
  %70 = tail call i32 @remove_test(ptr noundef %2)
  %.not328 = icmp eq i32 %70, 0
  %spec.select332 = select i1 %.not328, i32 %.0275370, i32 1
  %71 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !16
  %72 = extractvalue { i32, i32 } %71, 0
  %73 = extractvalue { i32, i32 } %71, 1
  %74 = zext i32 %72 to i64
  %75 = shl nuw i64 %74, 32
  %76 = zext i32 %73 to i64
  %.neg356 = sub i64 %.neg401, %69
  %77 = add i64 %.neg356, %76
  %78 = add i64 %77, %75
  %.1274 = tail call i64 @llvm.umin.i64(i64 %78, i64 %.0273371)
  %79 = add nuw nsw i32 %.0277369, 1
  %exitcond415.not = icmp eq i32 %79, 500
  br i1 %exitcond415.not, label %60, label %65, !llvm.loop !17

80:                                               ; preds = %60
  %81 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %82

82:                                               ; preds = %80, %60
  %83 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %84 = tail call i32 @fflush(ptr noundef null)
  tail call void @array_container_free(ptr noundef %2) #7
  br label %88

85:                                               ; preds = %153
  %86 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %87 = tail call ptr @array_container_create() #7
  br label %175

88:                                               ; preds = %82, %153
  %.0278380 = phi i32 [ 32, %82 ], [ %160, %153 ]
  %89 = tail call ptr @array_container_create() #7
  br label %100

90:                                               ; preds = %100
  %91 = tail call noalias dereferenceable_or_null(2048) ptr @malloc(i64 noundef 2048) #8
  %92 = load i32, ptr %89, align 8, !tbaa !18
  %93 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %92)
  %94 = tail call i32 @array_container_cardinality(ptr noundef nonnull %89)
  %95 = sext i32 %94 to i64
  %96 = shl nsw i64 %95, 2
  %97 = tail call noalias ptr @malloc(i64 noundef %96) #8
  %98 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.9)
  %99 = tail call i32 @fflush(ptr noundef null)
  br label %111

100:                                              ; preds = %88, %100
  %.0279372 = phi i32 [ 0, %88 ], [ %104, %100 ]
  %101 = tail call i32 @pcg32_random()
  %102 = trunc i32 %101 to i16
  %103 = tail call zeroext i1 @array_container_add(ptr noundef %89, i16 noundef zeroext %102)
  %104 = add nuw nsw i32 %.0279372, 1
  %exitcond416.not = icmp eq i32 %104, %.0278380
  br i1 %exitcond416.not, label %90, label %100, !llvm.loop !24

105:                                              ; preds = %111
  %106 = uitofp i64 %.1286 to float
  %107 = uitofp i64 %95 to float
  %108 = fdiv float %106, %107
  %109 = fpext float %108 to double
  %110 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %109)
  %.not326 = icmp eq i32 %spec.select333, 0
  br i1 %.not326, label %128, label %126

111:                                              ; preds = %90, %111
  %.0285375 = phi i64 [ -1, %90 ], [ %.1286, %111 ]
  %.0287374 = phi i32 [ 0, %90 ], [ %spec.select333, %111 ]
  %.0289373 = phi i32 [ 0, %90 ], [ %125, %111 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !25
  %112 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !26
  %113 = extractvalue { i32, i32 } %112, 0
  %114 = extractvalue { i32, i32 } %112, 1
  %.neg404 = sub i32 0, %113
  %.neg404.z = zext i32 %.neg404 to i64
  %.neg403 = shl nuw i64 %.neg404.z, 32
  %115 = zext i32 %114 to i64
  %116 = tail call i32 @array_container_to_uint32_array(ptr noundef %97, ptr noundef nonnull %89, i32 noundef 1234) #7
  %.not327 = icmp eq i32 %116, %94
  %spec.select333 = select i1 %.not327, i32 %.0287374, i32 1
  %117 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !27
  %118 = extractvalue { i32, i32 } %117, 0
  %119 = extractvalue { i32, i32 } %117, 1
  %120 = zext i32 %118 to i64
  %121 = shl nuw i64 %120, 32
  %122 = zext i32 %119 to i64
  %.neg353 = sub i64 %.neg403, %115
  %123 = add i64 %.neg353, %122
  %124 = add i64 %123, %121
  %.1286 = tail call i64 @llvm.umin.i64(i64 %124, i64 %.0285375)
  %125 = add nuw nsw i32 %.0289373, 1
  %exitcond417.not = icmp eq i32 %125, 500
  br i1 %exitcond417.not, label %105, label %111, !llvm.loop !28

126:                                              ; preds = %105
  %127 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %128

128:                                              ; preds = %126, %105
  %129 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %130 = tail call i32 @fflush(ptr noundef null)
  tail call void @free(ptr noundef %97) #7
  %131 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.12)
  %132 = tail call i32 @fflush(ptr noundef null)
  br label %142

133:                                              ; preds = %142
  %134 = sitofp i32 %151 to float
  %135 = fmul float %134, 0x3F50000000000000
  %136 = fpext float %135 to double
  %137 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %136)
  %138 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %139 = tail call i32 @fflush(ptr noundef null)
  %140 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.13)
  %141 = tail call i32 @fflush(ptr noundef null)
  br label %162

142:                                              ; preds = %128, %142
  %.0292377 = phi i32 [ 0, %128 ], [ %151, %142 ]
  %.0293376 = phi i64 [ 0, %128 ], [ %152, %142 ]
  tail call void @array_cache_prefetch(ptr noundef nonnull %89)
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !29
  %143 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !30
  %144 = extractvalue { i32, i32 } %143, 1
  %145 = getelementptr inbounds i16, ptr %91, i64 %.0293376
  %146 = load i16, ptr %145, align 2, !tbaa !31
  %147 = tail call zeroext i1 @array_container_contains(ptr noundef nonnull %89, i16 noundef zeroext %146)
  %148 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !33
  %149 = extractvalue { i32, i32 } %148, 1
  %150 = sub i32 %.0292377, %144
  %151 = add i32 %150, %149
  %152 = add nuw nsw i64 %.0293376, 1
  %exitcond418.not = icmp eq i64 %152, 1024
  br i1 %exitcond418.not, label %133, label %142, !llvm.loop !34

153:                                              ; preds = %162
  %154 = sitofp i32 %171 to float
  %155 = fmul float %154, 0x3F50000000000000
  %156 = fpext float %155 to double
  %157 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %156)
  %158 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %159 = tail call i32 @fflush(ptr noundef null)
  tail call void @free(ptr noundef nonnull %91) #7
  tail call void @array_container_free(ptr noundef nonnull %89) #7
  %160 = shl nuw nsw i32 %.0278380, 3
  %161 = icmp ult i32 %.0278380, 8193
  br i1 %161, label %88, label %85, !llvm.loop !35

162:                                              ; preds = %133, %162
  %.0294379 = phi i32 [ 0, %133 ], [ %171, %162 ]
  %.0295378 = phi i64 [ 0, %133 ], [ %172, %162 ]
  tail call void @array_cache_flush(ptr noundef nonnull %89)
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !36
  %163 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !37
  %164 = extractvalue { i32, i32 } %163, 1
  %165 = getelementptr inbounds i16, ptr %91, i64 %.0295378
  %166 = load i16, ptr %165, align 2, !tbaa !31
  %167 = tail call zeroext i1 @array_container_contains(ptr noundef nonnull %89, i16 noundef zeroext %166)
  %168 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !38
  %169 = extractvalue { i32, i32 } %168, 1
  %170 = sub i32 %.0294379, %164
  %171 = add i32 %170, %169
  %172 = add nuw nsw i64 %.0295378, 1
  %exitcond419.not = icmp eq i64 %172, 1024
  br i1 %exitcond419.not, label %153, label %162, !llvm.loop !39

173:                                              ; preds = %175
  %174 = tail call ptr @array_container_create() #7
  br label %199

175:                                              ; preds = %85, %175
  %.0296381 = phi i32 [ 0, %85 ], [ %178, %175 ]
  %176 = trunc nuw i32 %.0296381 to i16
  %177 = tail call zeroext i1 @array_container_add(ptr noundef %87, i16 noundef zeroext %176)
  %178 = add nuw nsw i32 %.0296381, 3
  %179 = icmp ult i32 %.0296381, 65533
  br i1 %179, label %175, label %173, !llvm.loop !40

180:                                              ; preds = %199
  %181 = load i32, ptr %87, align 8, !tbaa !18
  %182 = load i32, ptr %174, align 8, !tbaa !18
  %183 = tail call ptr @array_container_create() #7
  %184 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  %185 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %186 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  %187 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17)
  %188 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18)
  %189 = load i32, ptr %87, align 8, !tbaa !18
  %190 = load i32, ptr %174, align 8, !tbaa !18
  %191 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef %189, i32 noundef %190)
  %192 = tail call i32 @union_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %193 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef %192)
  %194 = load i32, ptr %87, align 8, !tbaa !18
  %195 = load i32, ptr %174, align 8, !tbaa !18
  %196 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, i32 noundef %194, i32 noundef %195)
  %197 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.22)
  %198 = tail call i32 @fflush(ptr noundef null)
  br label %212

199:                                              ; preds = %173, %199
  %.0297382 = phi i32 [ 0, %173 ], [ %202, %199 ]
  %200 = trunc nuw i32 %.0297382 to i16
  %201 = tail call zeroext i1 @array_container_add(ptr noundef %174, i16 noundef zeroext %200)
  %202 = add nuw nsw i32 %.0297382, 5
  %203 = icmp ult i32 %.0297382, 65531
  br i1 %203, label %199, label %180, !llvm.loop !41

204:                                              ; preds = %212
  %205 = add nsw i32 %182, %181
  %206 = sext i32 %205 to i64
  %207 = uitofp i64 %.1304 to float
  %208 = uitofp i64 %206 to float
  %209 = fdiv float %207, %208
  %210 = fpext float %209 to double
  %211 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %210)
  %.not318 = icmp eq i32 %spec.select334, 0
  br i1 %.not318, label %229, label %227

212:                                              ; preds = %180, %212
  %.0303385 = phi i64 [ -1, %180 ], [ %.1304, %212 ]
  %.0305384 = phi i32 [ 0, %180 ], [ %spec.select334, %212 ]
  %.0307383 = phi i32 [ 0, %180 ], [ %226, %212 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !42
  %213 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !43
  %214 = extractvalue { i32, i32 } %213, 0
  %215 = extractvalue { i32, i32 } %213, 1
  %.neg406 = sub i32 0, %214
  %.neg406.z = zext i32 %.neg406 to i64
  %.neg405 = shl nuw i64 %.neg406.z, 32
  %216 = zext i32 %215 to i64
  %217 = tail call i32 @union_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %.not325 = icmp eq i32 %217, %192
  %spec.select334 = select i1 %.not325, i32 %.0305384, i32 1
  %218 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !44
  %219 = extractvalue { i32, i32 } %218, 0
  %220 = extractvalue { i32, i32 } %218, 1
  %221 = zext i32 %219 to i64
  %222 = shl nuw i64 %221, 32
  %223 = zext i32 %220 to i64
  %.neg348 = sub i64 %.neg405, %216
  %224 = add i64 %.neg348, %223
  %225 = add i64 %224, %222
  %.1304 = tail call i64 @llvm.umin.i64(i64 %225, i64 %.0303385)
  %226 = add nuw nsw i32 %.0307383, 1
  %exitcond420.not = icmp eq i32 %226, 500
  br i1 %exitcond420.not, label %204, label %212, !llvm.loop !45

227:                                              ; preds = %204
  %228 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %229

229:                                              ; preds = %227, %204
  %230 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %231 = tail call i32 @fflush(ptr noundef null)
  %232 = tail call i32 @intersection_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %233 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i32 noundef %232)
  %234 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.24)
  %235 = tail call i32 @fflush(ptr noundef null)
  br label %243

236:                                              ; preds = %243
  %237 = sext i32 %232 to i64
  %238 = uitofp i64 %.1302 to float
  %239 = uitofp i64 %237 to float
  %240 = fdiv float %238, %239
  %241 = fpext float %240 to double
  %242 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %241)
  %.not319 = icmp eq i32 %spec.select335, 0
  br i1 %.not319, label %260, label %258

243:                                              ; preds = %229, %243
  %.0298388 = phi i32 [ 0, %229 ], [ %257, %243 ]
  %.0299387 = phi i32 [ 0, %229 ], [ %spec.select335, %243 ]
  %.0301386 = phi i64 [ -1, %229 ], [ %.1302, %243 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !46
  %244 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !47
  %245 = extractvalue { i32, i32 } %244, 0
  %246 = extractvalue { i32, i32 } %244, 1
  %.neg408 = sub i32 0, %245
  %.neg408.z = zext i32 %.neg408 to i64
  %.neg407 = shl nuw i64 %.neg408.z, 32
  %247 = zext i32 %246 to i64
  %248 = tail call i32 @intersection_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %.not324 = icmp eq i32 %248, %232
  %spec.select335 = select i1 %.not324, i32 %.0299387, i32 1
  %249 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !48
  %250 = extractvalue { i32, i32 } %249, 0
  %251 = extractvalue { i32, i32 } %249, 1
  %252 = zext i32 %250 to i64
  %253 = shl nuw i64 %252, 32
  %254 = zext i32 %251 to i64
  %.neg345 = sub i64 %.neg407, %247
  %255 = add i64 %.neg345, %254
  %256 = add i64 %255, %253
  %.1302 = tail call i64 @llvm.umin.i64(i64 %256, i64 %.0301386)
  %257 = add nuw nsw i32 %.0298388, 1
  %exitcond421.not = icmp eq i32 %257, 500
  br i1 %exitcond421.not, label %236, label %243, !llvm.loop !49

258:                                              ; preds = %236
  %259 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %260

260:                                              ; preds = %258, %236
  %261 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %262 = tail call i32 @fflush(ptr noundef null)
  %263 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25)
  tail call void @array_container_clear(ptr noundef nonnull %87)
  tail call void @array_container_clear(ptr noundef nonnull %174)
  br label %264

264:                                              ; preds = %260, %264
  %.0291389 = phi i32 [ 0, %260 ], [ %267, %264 ]
  %265 = trunc nuw i32 %.0291389 to i16
  %266 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %87, i16 noundef zeroext %265)
  %267 = add nuw nsw i32 %.0291389, 16
  %268 = icmp ult i32 %.0291389, 65520
  br i1 %268, label %264, label %.preheader.preheader, !llvm.loop !50

.preheader.preheader:                             ; preds = %264
  %269 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 1)
  %270 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 2)
  %271 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 4)
  %272 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 8)
  %273 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 16)
  %274 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 32)
  %275 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 64)
  %276 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 128)
  %277 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 256)
  %278 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 512)
  %279 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 1024)
  %280 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 2048)
  %281 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 4096)
  %282 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 8192)
  %283 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext 16384)
  %284 = tail call zeroext i1 @array_container_add(ptr noundef nonnull %174, i16 noundef zeroext -32768)
  %285 = load i32, ptr %87, align 8, !tbaa !18
  %286 = load i32, ptr %174, align 8, !tbaa !18
  %287 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef %285, i32 noundef %286)
  %288 = tail call i32 @union_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %289 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef %288)
  %290 = load i32, ptr %87, align 8, !tbaa !18
  %291 = load i32, ptr %174, align 8, !tbaa !18
  %292 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, i32 noundef %290, i32 noundef %291)
  %293 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.22)
  %294 = tail call i32 @fflush(ptr noundef null)
  br label %300

295:                                              ; preds = %300
  %296 = uitofp i64 %.1284 to float
  %297 = fdiv float %296, %208
  %298 = fpext float %297 to double
  %299 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %298)
  %.not320 = icmp eq i32 %spec.select336, 0
  br i1 %.not320, label %317, label %315

300:                                              ; preds = %.preheader.preheader, %300
  %.0280393 = phi i32 [ 0, %.preheader.preheader ], [ %314, %300 ]
  %.0281392 = phi i32 [ 0, %.preheader.preheader ], [ %spec.select336, %300 ]
  %.0283391 = phi i64 [ -1, %.preheader.preheader ], [ %.1284, %300 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !51
  %301 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !52
  %302 = extractvalue { i32, i32 } %301, 0
  %303 = extractvalue { i32, i32 } %301, 1
  %.neg410 = sub i32 0, %302
  %.neg410.z = zext i32 %.neg410 to i64
  %.neg409 = shl nuw i64 %.neg410.z, 32
  %304 = zext i32 %303 to i64
  %305 = tail call i32 @union_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %.not323 = icmp eq i32 %305, %288
  %spec.select336 = select i1 %.not323, i32 %.0281392, i32 1
  %306 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !53
  %307 = extractvalue { i32, i32 } %306, 0
  %308 = extractvalue { i32, i32 } %306, 1
  %309 = zext i32 %307 to i64
  %310 = shl nuw i64 %309, 32
  %311 = zext i32 %308 to i64
  %.neg342 = sub i64 %.neg409, %304
  %312 = add i64 %.neg342, %311
  %313 = add i64 %312, %310
  %.1284 = tail call i64 @llvm.umin.i64(i64 %313, i64 %.0283391)
  %314 = add nuw nsw i32 %.0280393, 1
  %exitcond422.not = icmp eq i32 %314, 500
  br i1 %exitcond422.not, label %295, label %300, !llvm.loop !54

315:                                              ; preds = %295
  %316 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %317

317:                                              ; preds = %315, %295
  %318 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %319 = tail call i32 @fflush(ptr noundef null)
  %320 = tail call i32 @intersection_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %321 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i32 noundef %320)
  %322 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @.str.24)
  %323 = tail call i32 @fflush(ptr noundef null)
  br label %331

324:                                              ; preds = %331
  %325 = sext i32 %320 to i64
  %326 = uitofp i64 %.1267 to float
  %327 = uitofp i64 %325 to float
  %328 = fdiv float %326, %327
  %329 = fpext float %328 to double
  %330 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %329)
  %.not321 = icmp eq i32 %spec.select337, 0
  br i1 %.not321, label %348, label %346

331:                                              ; preds = %317, %331
  %.0263396 = phi i32 [ 0, %317 ], [ %345, %331 ]
  %.0264395 = phi i32 [ 0, %317 ], [ %spec.select337, %331 ]
  %.0266394 = phi i64 [ -1, %317 ], [ %.1267, %331 ]
  tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !55
  %332 = tail call { i32, i32 } asm sideeffect "cpuid\0A\09rdtsc\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !56
  %333 = extractvalue { i32, i32 } %332, 0
  %334 = extractvalue { i32, i32 } %332, 1
  %.neg412 = sub i32 0, %333
  %.neg412.z = zext i32 %.neg412 to i64
  %.neg411 = shl nuw i64 %.neg412.z, 32
  %335 = zext i32 %334 to i64
  %336 = tail call i32 @intersection_test(ptr noundef nonnull %87, ptr noundef nonnull %174, ptr noundef %183)
  %.not322 = icmp eq i32 %336, %320
  %spec.select337 = select i1 %.not322, i32 %.0264395, i32 1
  %337 = tail call { i32, i32 } asm sideeffect "rdtscp\0A\09mov %edx, $0\0A\09mov %eax, $1\0A\09cpuid\0A\09", "=r,=r,~{rax},~{rbx},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !57
  %338 = extractvalue { i32, i32 } %337, 0
  %339 = extractvalue { i32, i32 } %337, 1
  %340 = zext i32 %338 to i64
  %341 = shl nuw i64 %340, 32
  %342 = zext i32 %339 to i64
  %.neg339 = sub i64 %.neg411, %335
  %343 = add i64 %.neg339, %342
  %344 = add i64 %343, %341
  %.1267 = tail call i64 @llvm.umin.i64(i64 %344, i64 %.0266394)
  %345 = add nuw nsw i32 %.0263396, 1
  %exitcond423.not = icmp eq i32 %345, 500
  br i1 %exitcond423.not, label %324, label %331, !llvm.loop !58

346:                                              ; preds = %324
  %347 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %348

348:                                              ; preds = %346, %324
  %349 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %350 = tail call i32 @fflush(ptr noundef null)
  tail call void @array_container_free(ptr noundef nonnull %87) #7
  tail call void @array_container_free(ptr noundef nonnull %174) #7
  tail call void @array_container_free(ptr noundef %183) #7
  ret i32 0
}

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

declare ptr @array_container_create() local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #2

declare void @array_container_free(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @array_container_cardinality(ptr noundef) local_unnamed_addr #1

declare i32 @array_container_to_uint32_array(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @array_container_clear(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @tellmeall() local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @pcg32_random() local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #6

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { "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 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #5 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }

!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 = !{i64 2151672022}
!6 = !{i64 2151672312, i64 2151672320, i64 2151672400, i64 2151672488, i64 2151672568}
!7 = !{i64 2151673057, i64 2151673066, i64 2151673153, i64 2151673233, i64 2151673305}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{i64 2151674978}
!11 = !{i64 2151675268, i64 2151675276, i64 2151675356, i64 2151675444, i64 2151675524}
!12 = !{i64 2151676013, i64 2151676022, i64 2151676109, i64 2151676189, i64 2151676261}
!13 = distinct !{!13, !9}
!14 = !{i64 2151677925}
!15 = !{i64 2151678215, i64 2151678223, i64 2151678303, i64 2151678391, i64 2151678471}
!16 = !{i64 2151678960, i64 2151678969, i64 2151679056, i64 2151679136, i64 2151679208}
!17 = distinct !{!17, !9}
!18 = !{!19, !20, i64 0}
!19 = !{!"array_container_s", !20, i64 0, !20, i64 4, !23, i64 8}
!20 = !{!"int", !21, i64 0}
!21 = !{!"omnipotent char", !22, i64 0}
!22 = !{!"Simple C/C++ TBAA"}
!23 = !{!"any pointer", !21, i64 0}
!24 = distinct !{!24, !9}
!25 = !{i64 2151680939}
!26 = !{i64 2151681229, i64 2151681237, i64 2151681317, i64 2151681405, i64 2151681485}
!27 = !{i64 2151681974, i64 2151681983, i64 2151682070, i64 2151682150, i64 2151682222}
!28 = distinct !{!28, !9}
!29 = !{i64 2151684067}
!30 = !{i64 2151684357, i64 2151684365, i64 2151684445, i64 2151684533, i64 2151684613}
!31 = !{!32, !32, i64 0}
!32 = !{!"short", !21, i64 0}
!33 = !{i64 2151685102, i64 2151685111, i64 2151685198, i64 2151685278, i64 2151685350}
!34 = distinct !{!34, !9}
!35 = distinct !{!35, !9}
!36 = !{i64 2151687189}
!37 = !{i64 2151687479, i64 2151687487, i64 2151687567, i64 2151687655, i64 2151687735}
!38 = !{i64 2151688224, i64 2151688233, i64 2151688320, i64 2151688400, i64 2151688472}
!39 = distinct !{!39, !9}
!40 = distinct !{!40, !9}
!41 = distinct !{!41, !9}
!42 = !{i64 2151690162}
!43 = !{i64 2151690452, i64 2151690460, i64 2151690540, i64 2151690628, i64 2151690708}
!44 = !{i64 2151691197, i64 2151691206, i64 2151691293, i64 2151691373, i64 2151691445}
!45 = distinct !{!45, !9}
!46 = !{i64 2151693146}
!47 = !{i64 2151693436, i64 2151693444, i64 2151693524, i64 2151693612, i64 2151693692}
!48 = !{i64 2151694181, i64 2151694190, i64 2151694277, i64 2151694357, i64 2151694429}
!49 = distinct !{!49, !9}
!50 = distinct !{!50, !9}
!51 = !{i64 2151696119}
!52 = !{i64 2151696409, i64 2151696417, i64 2151696497, i64 2151696585, i64 2151696665}
!53 = !{i64 2151697154, i64 2151697163, i64 2151697250, i64 2151697330, i64 2151697402}
!54 = distinct !{!54, !9}
!55 = !{i64 2151699103}
!56 = !{i64 2151699393, i64 2151699401, i64 2151699481, i64 2151699569, i64 2151699649}
!57 = !{i64 2151700138, i64 2151700147, i64 2151700234, i64 2151700314, i64 2151700386}
!58 = distinct !{!58, !9}


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