; LLVM IR from jdeokkim/ferox :: src (world)

; 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.stbds_array_header = type { i64, i64, ptr, i64 }
%struct.stbds_hash_index = type { ptr, i64, i64, i64, i64, i64, i64, i64, i64, %struct.stbds_string_arena, ptr }
%struct.stbds_string_arena = type { ptr, i64, i8, i8 }
%struct.stbds_hash_bucket = type { [8 x i64], [8 x i64] }

; Function Attrs: nounwind uwtable
declare dso_local ptr @stbds_arrgrowf(ptr noundef, i64 noundef, i64 noundef, i64 noundef) #0

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @stbds_hash_string(ptr noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @stbds_hash_bytes(ptr noundef, i64 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
define dso_local ptr @stbds_hmput_key(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, i32 noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i64 %1, ptr %8, align 8, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i64 %3, ptr %10, align 8, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  store i64 0, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = icmp eq ptr %26, null
  br i1 %27, label %28, label %41

28:                                               ; preds = %5
  %29 = load i64, ptr %8, align 8, !tbaa !9
  %30 = call ptr @stbds_arrgrowf(ptr noundef null, i64 noundef %29, i64 noundef 0, i64 noundef 1)
  store ptr %30, ptr %7, align 8, !tbaa !5
  %31 = load ptr, ptr %7, align 8, !tbaa !5
  %32 = load i64, ptr %8, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 1 %31, i8 0, i64 %32, i1 false)
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.stbds_array_header, ptr %33, i64 -1
  %35 = getelementptr inbounds %struct.stbds_array_header, ptr %34, i32 0, i32 0
  %36 = load i64, ptr %35, align 8, !tbaa !13
  %37 = add i64 %36, 1
  store i64 %37, ptr %35, align 8, !tbaa !13
  %38 = load ptr, ptr %7, align 8, !tbaa !5
  %39 = load i64, ptr %8, align 8, !tbaa !9
  %40 = getelementptr inbounds i8, ptr %38, i64 %39
  store ptr %40, ptr %7, align 8, !tbaa !5
  br label %41

41:                                               ; preds = %28, %5
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %42, ptr %13, align 8, !tbaa !5
  %43 = load ptr, ptr %7, align 8, !tbaa !5
  %44 = load i64, ptr %8, align 8, !tbaa !9
  %45 = sub i64 0, %44
  %46 = getelementptr inbounds i8, ptr %43, i64 %45
  store ptr %46, ptr %7, align 8, !tbaa !5
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.stbds_array_header, ptr %47, i64 -1
  %49 = getelementptr inbounds %struct.stbds_array_header, ptr %48, i32 0, i32 2
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  store ptr %50, ptr %14, align 8, !tbaa !5
  %51 = load ptr, ptr %14, align 8, !tbaa !5
  %52 = icmp eq ptr %51, null
  br i1 %52, label %61, label %53

53:                                               ; preds = %41
  %54 = load ptr, ptr %14, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.stbds_hash_index, ptr %54, i32 0, i32 2
  %56 = load i64, ptr %55, align 8, !tbaa !16
  %57 = load ptr, ptr %14, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.stbds_hash_index, ptr %57, i32 0, i32 3
  %59 = load i64, ptr %58, align 8, !tbaa !19
  %60 = icmp uge i64 %56, %59
  br i1 %60, label %61, label %93

61:                                               ; preds = %53, %41
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %62 = load ptr, ptr %14, align 8, !tbaa !5
  %63 = icmp eq ptr %62, null
  br i1 %63, label %64, label %65

64:                                               ; preds = %61
  br label %70

65:                                               ; preds = %61
  %66 = load ptr, ptr %14, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.stbds_hash_index, ptr %66, i32 0, i32 1
  %68 = load i64, ptr %67, align 8, !tbaa !20
  %69 = mul i64 %68, 2
  br label %70

70:                                               ; preds = %65, %64
  %71 = phi i64 [ 8, %64 ], [ %69, %65 ]
  store i64 %71, ptr %16, align 8, !tbaa !9
  %72 = load i64, ptr %16, align 8, !tbaa !9
  %73 = load ptr, ptr %14, align 8, !tbaa !5
  %74 = call ptr @stbds_make_hash_index(i64 noundef %72, ptr noundef %73)
  store ptr %74, ptr %15, align 8, !tbaa !5
  %75 = load ptr, ptr %14, align 8, !tbaa !5
  %76 = icmp ne ptr %75, null
  br i1 %76, label %77, label %79

77:                                               ; preds = %70
  %78 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %78) #5
  br label %88

79:                                               ; preds = %70
  %80 = load i32, ptr %11, align 4, !tbaa !11
  %81 = icmp sge i32 %80, 1
  %82 = zext i1 %81 to i64
  %83 = select i1 %81, i32 1, i32 0
  %84 = trunc i32 %83 to i8
  %85 = load ptr, ptr %15, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.stbds_hash_index, ptr %85, i32 0, i32 9
  %87 = getelementptr inbounds %struct.stbds_string_arena, ptr %86, i32 0, i32 3
  store i8 %84, ptr %87, align 1, !tbaa !21
  br label %88

88:                                               ; preds = %79, %77
  %89 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %89, ptr %14, align 8, !tbaa !5
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.stbds_array_header, ptr %90, i64 -1
  %92 = getelementptr inbounds %struct.stbds_array_header, ptr %91, i32 0, i32 2
  store ptr %89, ptr %92, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %93

93:                                               ; preds = %88, %53
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %94 = load i32, ptr %11, align 4, !tbaa !11
  %95 = icmp sge i32 %94, 1
  br i1 %95, label %96, label %102

96:                                               ; preds = %93
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = load ptr, ptr %14, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.stbds_hash_index, ptr %98, i32 0, i32 7
  %100 = load i64, ptr %99, align 8, !tbaa !22
  %101 = call i64 @stbds_hash_string(ptr noundef %97, i64 noundef %100)
  br label %109

102:                                              ; preds = %93
  %103 = load ptr, ptr %9, align 8, !tbaa !5
  %104 = load i64, ptr %10, align 8, !tbaa !9
  %105 = load ptr, ptr %14, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.stbds_hash_index, ptr %105, i32 0, i32 7
  %107 = load i64, ptr %106, align 8, !tbaa !22
  %108 = call i64 @stbds_hash_bytes(ptr noundef %103, i64 noundef %104, i64 noundef %107)
  br label %109

109:                                              ; preds = %102, %96
  %110 = phi i64 [ %101, %96 ], [ %108, %102 ]
  store i64 %110, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  store i64 8, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  store i64 -1, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %111 = load i64, ptr %17, align 8, !tbaa !9
  %112 = icmp ult i64 %111, 2
  br i1 %112, label %113, label %116

113:                                              ; preds = %109
  %114 = load i64, ptr %17, align 8, !tbaa !9
  %115 = add i64 %114, 2
  store i64 %115, ptr %17, align 8, !tbaa !9
  br label %116

116:                                              ; preds = %113, %109
  %117 = load i64, ptr %17, align 8, !tbaa !9
  %118 = load ptr, ptr %14, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.stbds_hash_index, ptr %118, i32 0, i32 1
  %120 = load i64, ptr %119, align 8, !tbaa !20
  %121 = load ptr, ptr %14, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.stbds_hash_index, ptr %121, i32 0, i32 8
  %123 = load i64, ptr %122, align 8, !tbaa !23
  %124 = call i64 @stbds_probe_position(i64 noundef %117, i64 noundef %120, i64 noundef %123)
  store i64 %124, ptr %19, align 8, !tbaa !9
  br label %125

125:                                              ; preds = %316, %116
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %126 = load ptr, ptr %14, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.stbds_hash_index, ptr %126, i32 0, i32 10
  %128 = load ptr, ptr %127, align 8, !tbaa !24
  %129 = load i64, ptr %19, align 8, !tbaa !9
  %130 = lshr i64 %129, 3
  %131 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %128, i64 %130
  store ptr %131, ptr %21, align 8, !tbaa !5
  %132 = load i64, ptr %19, align 8, !tbaa !9
  %133 = and i64 %132, 7
  store i64 %133, ptr %23, align 8, !tbaa !9
  br label %134

134:                                              ; preds = %223, %125
  %135 = load i64, ptr %23, align 8, !tbaa !9
  %136 = icmp ult i64 %135, 8
  br i1 %136, label %137, label %226

137:                                              ; preds = %134
  %138 = load ptr, ptr %21, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %138, i32 0, i32 0
  %140 = load i64, ptr %23, align 8, !tbaa !9
  %141 = getelementptr inbounds [8 x i64], ptr %139, i64 0, i64 %140
  %142 = load i64, ptr %141, align 8, !tbaa !9
  %143 = load i64, ptr %17, align 8, !tbaa !9
  %144 = icmp eq i64 %142, %143
  br i1 %144, label %145, label %192

145:                                              ; preds = %137
  %146 = load ptr, ptr %13, align 8, !tbaa !5
  %147 = load i64, ptr %8, align 8, !tbaa !9
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = load i64, ptr %10, align 8, !tbaa !9
  %150 = load i64, ptr %12, align 8, !tbaa !9
  %151 = load i32, ptr %11, align 4, !tbaa !11
  %152 = load ptr, ptr %21, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %152, i32 0, i32 1
  %154 = load i64, ptr %23, align 8, !tbaa !9
  %155 = getelementptr inbounds [8 x i64], ptr %153, i64 0, i64 %154
  %156 = load i64, ptr %155, align 8, !tbaa !9
  %157 = call i32 @stbds_is_key_equal(ptr noundef %146, i64 noundef %147, ptr noundef %148, i64 noundef %149, i64 noundef %150, i32 noundef %151, i64 noundef %156)
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %191

159:                                              ; preds = %145
  %160 = load ptr, ptr %21, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %160, i32 0, i32 1
  %162 = load i64, ptr %23, align 8, !tbaa !9
  %163 = getelementptr inbounds [8 x i64], ptr %161, i64 0, i64 %162
  %164 = load i64, ptr %163, align 8, !tbaa !9
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.stbds_array_header, ptr %165, i64 -1
  %167 = getelementptr inbounds %struct.stbds_array_header, ptr %166, i32 0, i32 3
  store i64 %164, ptr %167, align 8, !tbaa !25
  %168 = load i32, ptr %11, align 4, !tbaa !11
  %169 = icmp sge i32 %168, 1
  br i1 %169, label %170, label %187

170:                                              ; preds = %159
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = load i64, ptr %8, align 8, !tbaa !9
  %173 = load ptr, ptr %21, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %173, i32 0, i32 1
  %175 = load i64, ptr %23, align 8, !tbaa !9
  %176 = getelementptr inbounds [8 x i64], ptr %174, i64 0, i64 %175
  %177 = load i64, ptr %176, align 8, !tbaa !9
  %178 = mul i64 %172, %177
  %179 = getelementptr inbounds i8, ptr %171, i64 %178
  %180 = load i64, ptr %12, align 8, !tbaa !9
  %181 = getelementptr inbounds i8, ptr %179, i64 %180
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.stbds_array_header, ptr %183, i64 -1
  %185 = getelementptr inbounds %struct.stbds_array_header, ptr %184, i32 0, i32 2
  %186 = load ptr, ptr %185, align 8, !tbaa !15
  store ptr %182, ptr %186, align 8, !tbaa !5
  br label %187

187:                                              ; preds = %170, %159
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = load i64, ptr %8, align 8, !tbaa !9
  %190 = getelementptr inbounds i8, ptr %188, i64 %189
  store ptr %190, ptr %6, align 8
  store i32 1, ptr %24, align 4
  br label %314

191:                                              ; preds = %145
  br label %222

192:                                              ; preds = %137
  %193 = load ptr, ptr %21, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %193, i32 0, i32 0
  %195 = load i64, ptr %23, align 8, !tbaa !9
  %196 = getelementptr inbounds [8 x i64], ptr %194, i64 0, i64 %195
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = icmp eq i64 %197, 0
  br i1 %198, label %199, label %204

199:                                              ; preds = %192
  %200 = load i64, ptr %19, align 8, !tbaa !9
  %201 = and i64 %200, -8
  %202 = load i64, ptr %23, align 8, !tbaa !9
  %203 = add i64 %201, %202
  store i64 %203, ptr %19, align 8, !tbaa !9
  store i32 7, ptr %24, align 4
  br label %314

204:                                              ; preds = %192
  %205 = load i64, ptr %20, align 8, !tbaa !9
  %206 = icmp slt i64 %205, 0
  br i1 %206, label %207, label %220

207:                                              ; preds = %204
  %208 = load ptr, ptr %21, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %208, i32 0, i32 1
  %210 = load i64, ptr %23, align 8, !tbaa !9
  %211 = getelementptr inbounds [8 x i64], ptr %209, i64 0, i64 %210
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = icmp eq i64 %212, -2
  br i1 %213, label %214, label %219

214:                                              ; preds = %207
  %215 = load i64, ptr %19, align 8, !tbaa !9
  %216 = and i64 %215, -8
  %217 = load i64, ptr %23, align 8, !tbaa !9
  %218 = add i64 %216, %217
  store i64 %218, ptr %20, align 8, !tbaa !9
  br label %219

219:                                              ; preds = %214, %207
  br label %220

220:                                              ; preds = %219, %204
  br label %221

221:                                              ; preds = %220
  br label %222

222:                                              ; preds = %221, %191
  br label %223

223:                                              ; preds = %222
  %224 = load i64, ptr %23, align 8, !tbaa !9
  %225 = add i64 %224, 1
  store i64 %225, ptr %23, align 8, !tbaa !9
  br label %134, !llvm.loop !26

226:                                              ; preds = %134
  %227 = load i64, ptr %19, align 8, !tbaa !9
  %228 = and i64 %227, 7
  store i64 %228, ptr %22, align 8, !tbaa !9
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %229

229:                                              ; preds = %299, %226
  %230 = load i64, ptr %23, align 8, !tbaa !9
  %231 = load i64, ptr %22, align 8, !tbaa !9
  %232 = icmp ult i64 %230, %231
  br i1 %232, label %233, label %302

233:                                              ; preds = %229
  %234 = load ptr, ptr %21, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %234, i32 0, i32 0
  %236 = load i64, ptr %23, align 8, !tbaa !9
  %237 = getelementptr inbounds [8 x i64], ptr %235, i64 0, i64 %236
  %238 = load i64, ptr %237, align 8, !tbaa !9
  %239 = load i64, ptr %17, align 8, !tbaa !9
  %240 = icmp eq i64 %238, %239
  br i1 %240, label %241, label %268

241:                                              ; preds = %233
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  %243 = load i64, ptr %8, align 8, !tbaa !9
  %244 = load ptr, ptr %9, align 8, !tbaa !5
  %245 = load i64, ptr %10, align 8, !tbaa !9
  %246 = load i64, ptr %12, align 8, !tbaa !9
  %247 = load i32, ptr %11, align 4, !tbaa !11
  %248 = load ptr, ptr %21, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %248, i32 0, i32 1
  %250 = load i64, ptr %23, align 8, !tbaa !9
  %251 = getelementptr inbounds [8 x i64], ptr %249, i64 0, i64 %250
  %252 = load i64, ptr %251, align 8, !tbaa !9
  %253 = call i32 @stbds_is_key_equal(ptr noundef %242, i64 noundef %243, ptr noundef %244, i64 noundef %245, i64 noundef %246, i32 noundef %247, i64 noundef %252)
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %267

255:                                              ; preds = %241
  %256 = load ptr, ptr %21, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %256, i32 0, i32 1
  %258 = load i64, ptr %23, align 8, !tbaa !9
  %259 = getelementptr inbounds [8 x i64], ptr %257, i64 0, i64 %258
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.stbds_array_header, ptr %261, i64 -1
  %263 = getelementptr inbounds %struct.stbds_array_header, ptr %262, i32 0, i32 3
  store i64 %260, ptr %263, align 8, !tbaa !25
  %264 = load ptr, ptr %7, align 8, !tbaa !5
  %265 = load i64, ptr %8, align 8, !tbaa !9
  %266 = getelementptr inbounds i8, ptr %264, i64 %265
  store ptr %266, ptr %6, align 8
  store i32 1, ptr %24, align 4
  br label %314

267:                                              ; preds = %241
  br label %298

268:                                              ; preds = %233
  %269 = load ptr, ptr %21, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %269, i32 0, i32 0
  %271 = load i64, ptr %23, align 8, !tbaa !9
  %272 = getelementptr inbounds [8 x i64], ptr %270, i64 0, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !9
  %274 = icmp eq i64 %273, 0
  br i1 %274, label %275, label %280

275:                                              ; preds = %268
  %276 = load i64, ptr %19, align 8, !tbaa !9
  %277 = and i64 %276, -8
  %278 = load i64, ptr %23, align 8, !tbaa !9
  %279 = add i64 %277, %278
  store i64 %279, ptr %19, align 8, !tbaa !9
  store i32 7, ptr %24, align 4
  br label %314

280:                                              ; preds = %268
  %281 = load i64, ptr %20, align 8, !tbaa !9
  %282 = icmp slt i64 %281, 0
  br i1 %282, label %283, label %296

283:                                              ; preds = %280
  %284 = load ptr, ptr %21, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %284, i32 0, i32 1
  %286 = load i64, ptr %23, align 8, !tbaa !9
  %287 = getelementptr inbounds [8 x i64], ptr %285, i64 0, i64 %286
  %288 = load i64, ptr %287, align 8, !tbaa !9
  %289 = icmp eq i64 %288, -2
  br i1 %289, label %290, label %295

290:                                              ; preds = %283
  %291 = load i64, ptr %19, align 8, !tbaa !9
  %292 = and i64 %291, -8
  %293 = load i64, ptr %23, align 8, !tbaa !9
  %294 = add i64 %292, %293
  store i64 %294, ptr %20, align 8, !tbaa !9
  br label %295

295:                                              ; preds = %290, %283
  br label %296

296:                                              ; preds = %295, %280
  br label %297

297:                                              ; preds = %296
  br label %298

298:                                              ; preds = %297, %267
  br label %299

299:                                              ; preds = %298
  %300 = load i64, ptr %23, align 8, !tbaa !9
  %301 = add i64 %300, 1
  store i64 %301, ptr %23, align 8, !tbaa !9
  br label %229, !llvm.loop !28

302:                                              ; preds = %229
  %303 = load i64, ptr %18, align 8, !tbaa !9
  %304 = load i64, ptr %19, align 8, !tbaa !9
  %305 = add i64 %304, %303
  store i64 %305, ptr %19, align 8, !tbaa !9
  %306 = load i64, ptr %18, align 8, !tbaa !9
  %307 = add i64 %306, 8
  store i64 %307, ptr %18, align 8, !tbaa !9
  %308 = load ptr, ptr %14, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.stbds_hash_index, ptr %308, i32 0, i32 1
  %310 = load i64, ptr %309, align 8, !tbaa !20
  %311 = sub i64 %310, 1
  %312 = load i64, ptr %19, align 8, !tbaa !9
  %313 = and i64 %312, %311
  store i64 %313, ptr %19, align 8, !tbaa !9
  store i32 0, ptr %24, align 4
  br label %314

314:                                              ; preds = %302, %275, %255, %199, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  %315 = load i32, ptr %24, align 4
  switch i32 %315, label %445 [
    i32 0, label %316
    i32 7, label %317
  ]

316:                                              ; preds = %314
  br label %125

317:                                              ; preds = %314
  %318 = load i64, ptr %20, align 8, !tbaa !9
  %319 = icmp sge i64 %318, 0
  br i1 %319, label %320, label %326

320:                                              ; preds = %317
  %321 = load i64, ptr %20, align 8, !tbaa !9
  store i64 %321, ptr %19, align 8, !tbaa !9
  %322 = load ptr, ptr %14, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.stbds_hash_index, ptr %322, i32 0, i32 5
  %324 = load i64, ptr %323, align 8, !tbaa !29
  %325 = add i64 %324, -1
  store i64 %325, ptr %323, align 8, !tbaa !29
  br label %326

326:                                              ; preds = %320, %317
  %327 = load ptr, ptr %14, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.stbds_hash_index, ptr %327, i32 0, i32 2
  %329 = load i64, ptr %328, align 8, !tbaa !16
  %330 = add i64 %329, 1
  store i64 %330, ptr %328, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %331 = load ptr, ptr %7, align 8, !tbaa !5
  %332 = icmp ne ptr %331, null
  br i1 %332, label %333, label %338

333:                                              ; preds = %326
  %334 = load ptr, ptr %7, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.stbds_array_header, ptr %334, i64 -1
  %336 = getelementptr inbounds %struct.stbds_array_header, ptr %335, i32 0, i32 0
  %337 = load i64, ptr %336, align 8, !tbaa !13
  br label %339

338:                                              ; preds = %326
  br label %339

339:                                              ; preds = %338, %333
  %340 = phi i64 [ %337, %333 ], [ 0, %338 ]
  store i64 %340, ptr %25, align 8, !tbaa !9
  %341 = load i64, ptr %25, align 8, !tbaa !9
  %342 = add i64 %341, 1
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = icmp ne ptr %343, null
  br i1 %344, label %345, label %350

345:                                              ; preds = %339
  %346 = load ptr, ptr %7, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.stbds_array_header, ptr %346, i64 -1
  %348 = getelementptr inbounds %struct.stbds_array_header, ptr %347, i32 0, i32 1
  %349 = load i64, ptr %348, align 8, !tbaa !30
  br label %351

350:                                              ; preds = %339
  br label %351

351:                                              ; preds = %350, %345
  %352 = phi i64 [ %349, %345 ], [ 0, %350 ]
  %353 = icmp ugt i64 %342, %352
  br i1 %353, label %354, label %358

354:                                              ; preds = %351
  %355 = load ptr, ptr %7, align 8, !tbaa !5
  %356 = load i64, ptr %8, align 8, !tbaa !9
  %357 = call ptr @stbds_arrgrowf(ptr noundef %355, i64 noundef %356, i64 noundef 1, i64 noundef 0)
  store ptr %357, ptr %7, align 8, !tbaa !5
  br label %358

358:                                              ; preds = %354, %351
  %359 = load ptr, ptr %7, align 8, !tbaa !5
  %360 = load i64, ptr %8, align 8, !tbaa !9
  %361 = getelementptr inbounds i8, ptr %359, i64 %360
  store ptr %361, ptr %13, align 8, !tbaa !5
  %362 = load i64, ptr %25, align 8, !tbaa !9
  %363 = add nsw i64 %362, 1
  %364 = load ptr, ptr %7, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.stbds_array_header, ptr %364, i64 -1
  %366 = getelementptr inbounds %struct.stbds_array_header, ptr %365, i32 0, i32 0
  store i64 %363, ptr %366, align 8, !tbaa !13
  %367 = load ptr, ptr %14, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.stbds_hash_index, ptr %367, i32 0, i32 10
  %369 = load ptr, ptr %368, align 8, !tbaa !24
  %370 = load i64, ptr %19, align 8, !tbaa !9
  %371 = lshr i64 %370, 3
  %372 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %369, i64 %371
  store ptr %372, ptr %21, align 8, !tbaa !5
  %373 = load i64, ptr %17, align 8, !tbaa !9
  %374 = load ptr, ptr %21, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %374, i32 0, i32 0
  %376 = load i64, ptr %19, align 8, !tbaa !9
  %377 = and i64 %376, 7
  %378 = getelementptr inbounds [8 x i64], ptr %375, i64 0, i64 %377
  store i64 %373, ptr %378, align 8, !tbaa !9
  %379 = load i64, ptr %25, align 8, !tbaa !9
  %380 = sub nsw i64 %379, 1
  %381 = load ptr, ptr %21, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %381, i32 0, i32 1
  %383 = load i64, ptr %19, align 8, !tbaa !9
  %384 = and i64 %383, 7
  %385 = getelementptr inbounds [8 x i64], ptr %382, i64 0, i64 %384
  store i64 %380, ptr %385, align 8, !tbaa !9
  %386 = load i64, ptr %25, align 8, !tbaa !9
  %387 = sub nsw i64 %386, 1
  %388 = load ptr, ptr %7, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.stbds_array_header, ptr %388, i64 -1
  %390 = getelementptr inbounds %struct.stbds_array_header, ptr %389, i32 0, i32 3
  store i64 %387, ptr %390, align 8, !tbaa !25
  %391 = load ptr, ptr %14, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.stbds_hash_index, ptr %391, i32 0, i32 9
  %393 = getelementptr inbounds %struct.stbds_string_arena, ptr %392, i32 0, i32 3
  %394 = load i8, ptr %393, align 1, !tbaa !21
  %395 = zext i8 %394 to i32
  switch i32 %395, label %433 [
    i32 2, label %396
    i32 3, label %408
    i32 1, label %422
  ]

396:                                              ; preds = %358
  %397 = load ptr, ptr %9, align 8, !tbaa !5
  %398 = call ptr @stbds_strdup(ptr noundef %397)
  %399 = load ptr, ptr %7, align 8, !tbaa !5
  %400 = load i64, ptr %8, align 8, !tbaa !9
  %401 = load i64, ptr %25, align 8, !tbaa !9
  %402 = mul i64 %400, %401
  %403 = getelementptr inbounds i8, ptr %399, i64 %402
  store ptr %398, ptr %403, align 8, !tbaa !5
  %404 = load ptr, ptr %7, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.stbds_array_header, ptr %404, i64 -1
  %406 = getelementptr inbounds %struct.stbds_array_header, ptr %405, i32 0, i32 2
  %407 = load ptr, ptr %406, align 8, !tbaa !15
  store ptr %398, ptr %407, align 8, !tbaa !5
  br label %441

408:                                              ; preds = %358
  %409 = load ptr, ptr %14, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.stbds_hash_index, ptr %409, i32 0, i32 9
  %411 = load ptr, ptr %9, align 8, !tbaa !5
  %412 = call ptr @stbds_stralloc(ptr noundef %410, ptr noundef %411)
  %413 = load ptr, ptr %7, align 8, !tbaa !5
  %414 = load i64, ptr %8, align 8, !tbaa !9
  %415 = load i64, ptr %25, align 8, !tbaa !9
  %416 = mul i64 %414, %415
  %417 = getelementptr inbounds i8, ptr %413, i64 %416
  store ptr %412, ptr %417, align 8, !tbaa !5
  %418 = load ptr, ptr %7, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.stbds_array_header, ptr %418, i64 -1
  %420 = getelementptr inbounds %struct.stbds_array_header, ptr %419, i32 0, i32 2
  %421 = load ptr, ptr %420, align 8, !tbaa !15
  store ptr %412, ptr %421, align 8, !tbaa !5
  br label %441

422:                                              ; preds = %358
  %423 = load ptr, ptr %9, align 8, !tbaa !5
  %424 = load ptr, ptr %7, align 8, !tbaa !5
  %425 = load i64, ptr %8, align 8, !tbaa !9
  %426 = load i64, ptr %25, align 8, !tbaa !9
  %427 = mul i64 %425, %426
  %428 = getelementptr inbounds i8, ptr %424, i64 %427
  store ptr %423, ptr %428, align 8, !tbaa !5
  %429 = load ptr, ptr %7, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.stbds_array_header, ptr %429, i64 -1
  %431 = getelementptr inbounds %struct.stbds_array_header, ptr %430, i32 0, i32 2
  %432 = load ptr, ptr %431, align 8, !tbaa !15
  store ptr %423, ptr %432, align 8, !tbaa !5
  br label %441

433:                                              ; preds = %358
  %434 = load ptr, ptr %7, align 8, !tbaa !5
  %435 = load i64, ptr %8, align 8, !tbaa !9
  %436 = load i64, ptr %25, align 8, !tbaa !9
  %437 = mul i64 %435, %436
  %438 = getelementptr inbounds i8, ptr %434, i64 %437
  %439 = load ptr, ptr %9, align 8, !tbaa !5
  %440 = load i64, ptr %10, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %438, ptr align 1 %439, i64 %440, i1 false)
  br label %441

441:                                              ; preds = %433, %422, %408, %396
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = load i64, ptr %8, align 8, !tbaa !9
  %444 = getelementptr inbounds i8, ptr %442, i64 %443
  store ptr %444, ptr %6, align 8
  store i32 1, ptr %24, align 4
  br label %445

445:                                              ; preds = %441, %314
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  %446 = load ptr, ptr %6, align 8
  ret ptr %446
}

; Function Attrs: nounwind uwtable
declare hidden ptr @stbds_make_hash_index(i64 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i64 @stbds_probe_position(i64 noundef, i64 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @stbds_is_key_equal(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @stbds_strdup(ptr noundef) #0

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"", !10, i64 0, !10, i64 8, !6, i64 16, !10, i64 24}
!15 = !{!14, !6, i64 16}
!16 = !{!17, !10, i64 16}
!17 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !18, i64 72, !6, i64 96}
!18 = !{!"stbds_string_arena", !6, i64 0, !10, i64 8, !7, i64 16, !7, i64 17}
!19 = !{!17, !10, i64 24}
!20 = !{!17, !10, i64 8}
!21 = !{!17, !7, i64 89}
!22 = !{!17, !10, i64 56}
!23 = !{!17, !10, i64 64}
!24 = !{!17, !6, i64 96}
!25 = !{!14, !10, i64 24}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = !{!17, !10, i64 40}
!30 = !{!14, !10, i64 8}


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

%struct.stbds_hash_bucket = type { [8 x i64], [8 x i64] }

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @stbds_hmput_key(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, i32 noundef %4) local_unnamed_addr #0 {
  %6 = icmp eq ptr %0, null
  br i1 %6, label %7, label %13

7:                                                ; preds = %5
  %8 = tail call ptr @stbds_arrgrowf(ptr noundef null, i64 noundef %1, i64 noundef 0, i64 noundef 1)
  tail call void @llvm.memset.p0.i64(ptr align 1 %8, i8 0, i64 %1, i1 false)
  %9 = getelementptr inbounds i8, ptr %8, i64 -32
  %10 = load i64, ptr %9, align 8, !tbaa !5
  %11 = add i64 %10, 1
  store i64 %11, ptr %9, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %8, i64 %1
  br label %13

13:                                               ; preds = %7, %5
  %.0159 = phi ptr [ %12, %7 ], [ %0, %5 ]
  %14 = sub i64 0, %1
  %15 = getelementptr inbounds i8, ptr %.0159, i64 %14
  %16 = getelementptr inbounds i8, ptr %15, i64 -32
  %17 = getelementptr inbounds i8, ptr %15, i64 -16
  %18 = load ptr, ptr %17, align 8, !tbaa !11
  %19 = icmp eq ptr %18, null
  br i1 %19, label %30, label %20

20:                                               ; preds = %13
  %21 = getelementptr inbounds i8, ptr %18, i64 16
  %22 = load i64, ptr %21, align 8, !tbaa !12
  %23 = getelementptr inbounds i8, ptr %18, i64 24
  %24 = load i64, ptr %23, align 8, !tbaa !15
  %.not = icmp ult i64 %22, %24
  br i1 %.not, label %37, label %25

25:                                               ; preds = %20
  %26 = getelementptr inbounds i8, ptr %18, i64 8
  %27 = load i64, ptr %26, align 8, !tbaa !16
  %28 = shl i64 %27, 1
  %29 = tail call ptr @stbds_make_hash_index(i64 noundef %28, ptr noundef nonnull %18)
  tail call void @free(ptr noundef nonnull %18) #4
  br label %35

30:                                               ; preds = %13
  %31 = tail call ptr @stbds_make_hash_index(i64 noundef 8, ptr noundef null)
  %32 = icmp sgt i32 %4, 0
  %33 = zext i1 %32 to i8
  %34 = getelementptr inbounds i8, ptr %31, i64 89
  store i8 %33, ptr %34, align 1, !tbaa !17
  br label %35

35:                                               ; preds = %30, %25
  %36 = phi ptr [ %31, %30 ], [ %29, %25 ]
  store ptr %36, ptr %17, align 8, !tbaa !11
  br label %37

37:                                               ; preds = %35, %20
  %.0170 = phi ptr [ %36, %35 ], [ %18, %20 ]
  %38 = icmp sgt i32 %4, 0
  %39 = getelementptr inbounds i8, ptr %.0170, i64 56
  %40 = load i64, ptr %39, align 8, !tbaa !18
  br i1 %38, label %41, label %43

41:                                               ; preds = %37
  %42 = tail call i64 @stbds_hash_string(ptr noundef %2, i64 noundef %40)
  br label %45

43:                                               ; preds = %37
  %44 = tail call i64 @stbds_hash_bytes(ptr noundef %2, i64 noundef %3, i64 noundef %40)
  br label %45

45:                                               ; preds = %43, %41
  %46 = phi i64 [ %42, %41 ], [ %44, %43 ]
  %47 = icmp ult i64 %46, 2
  %48 = or disjoint i64 %46, 2
  %spec.select = select i1 %47, i64 %48, i64 %46
  %49 = getelementptr inbounds i8, ptr %.0170, i64 8
  %50 = load i64, ptr %49, align 8, !tbaa !16
  %51 = getelementptr inbounds i8, ptr %.0170, i64 64
  %52 = load i64, ptr %51, align 8, !tbaa !19
  %53 = tail call i64 @stbds_probe_position(i64 noundef %spec.select, i64 noundef %50, i64 noundef %52)
  %54 = getelementptr inbounds i8, ptr %.0170, i64 96
  br label %55

55:                                               ; preds = %._crit_edge, %45
  %.0167 = phi i64 [ 8, %45 ], [ %117, %._crit_edge ]
  %.0164 = phi i64 [ %53, %45 ], [ %120, %._crit_edge ]
  %.0161 = phi i64 [ -1, %45 ], [ %.3.lcssa, %._crit_edge ]
  %56 = load ptr, ptr %54, align 8, !tbaa !20
  %57 = lshr i64 %.0164, 3
  %58 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %56, i64 %57
  %59 = and i64 %.0164, 7
  %60 = getelementptr inbounds i8, ptr %58, i64 64
  %61 = and i64 %.0164, -8
  br label %62

.preheader:                                       ; preds = %90
  %.not222 = icmp eq i64 %59, 0
  br i1 %.not222, label %._crit_edge, label %.lr.ph

62:                                               ; preds = %55, %90
  %.0157217 = phi i64 [ %59, %55 ], [ %91, %90 ]
  %.1162216 = phi i64 [ %.0161, %55 ], [ %.2163, %90 ]
  %63 = getelementptr inbounds [8 x i64], ptr %58, i64 0, i64 %.0157217
  %64 = load i64, ptr %63, align 8, !tbaa !21
  %65 = icmp eq i64 %64, %spec.select
  br i1 %65, label %66, label %79

66:                                               ; preds = %62
  %67 = getelementptr inbounds [8 x i64], ptr %60, i64 0, i64 %.0157217
  %68 = load i64, ptr %67, align 8, !tbaa !21
  %69 = tail call i32 @stbds_is_key_equal(ptr noundef %.0159, i64 noundef %1, ptr noundef %2, i64 noundef %3, i64 noundef 0, i32 noundef %4, i64 noundef %68)
  %.not181 = icmp eq i32 %69, 0
  br i1 %.not181, label %90, label %70

70:                                               ; preds = %66
  %71 = getelementptr inbounds [8 x i64], ptr %60, i64 0, i64 %.0157217
  %72 = load i64, ptr %71, align 8, !tbaa !21
  %73 = getelementptr inbounds i8, ptr %15, i64 -8
  store i64 %72, ptr %73, align 8, !tbaa !22
  br i1 %38, label %74, label %.thread

74:                                               ; preds = %70
  %75 = mul i64 %72, %1
  %76 = getelementptr inbounds i8, ptr %.0159, i64 %75
  %77 = load ptr, ptr %76, align 8, !tbaa !23
  %78 = load ptr, ptr %17, align 8, !tbaa !11
  store ptr %77, ptr %78, align 8, !tbaa !23
  br label %.thread

79:                                               ; preds = %62
  %80 = icmp eq i64 %64, 0
  br i1 %80, label %81, label %83

81:                                               ; preds = %79
  %82 = or disjoint i64 %.0157217, %61
  br label %121

83:                                               ; preds = %79
  %84 = icmp slt i64 %.1162216, 0
  br i1 %84, label %85, label %90

85:                                               ; preds = %83
  %86 = getelementptr inbounds [8 x i64], ptr %60, i64 0, i64 %.0157217
  %87 = load i64, ptr %86, align 8, !tbaa !21
  %88 = icmp eq i64 %87, -2
  %89 = or disjoint i64 %.0157217, %61
  %spec.select220 = select i1 %88, i64 %89, i64 %.1162216
  br label %90

90:                                               ; preds = %85, %66, %83
  %.2163 = phi i64 [ %.1162216, %66 ], [ %.1162216, %83 ], [ %spec.select220, %85 ]
  %91 = add nuw nsw i64 %.0157217, 1
  %exitcond.not = icmp eq i64 %91, 8
  br i1 %exitcond.not, label %.preheader, label %62, !llvm.loop !24

.lr.ph:                                           ; preds = %.preheader, %114
  %.1158219 = phi i64 [ %115, %114 ], [ 0, %.preheader ]
  %.3218 = phi i64 [ %.4, %114 ], [ %.2163, %.preheader ]
  %92 = getelementptr inbounds [8 x i64], ptr %58, i64 0, i64 %.1158219
  %93 = load i64, ptr %92, align 8, !tbaa !21
  %94 = icmp eq i64 %93, %spec.select
  br i1 %94, label %95, label %103

95:                                               ; preds = %.lr.ph
  %96 = getelementptr inbounds [8 x i64], ptr %60, i64 0, i64 %.1158219
  %97 = load i64, ptr %96, align 8, !tbaa !21
  %98 = tail call i32 @stbds_is_key_equal(ptr noundef %.0159, i64 noundef %1, ptr noundef %2, i64 noundef %3, i64 noundef 0, i32 noundef %4, i64 noundef %97)
  %.not180 = icmp eq i32 %98, 0
  br i1 %.not180, label %114, label %99

99:                                               ; preds = %95
  %100 = getelementptr inbounds [8 x i64], ptr %60, i64 0, i64 %.1158219
  %101 = load i64, ptr %100, align 8, !tbaa !21
  %102 = getelementptr inbounds i8, ptr %15, i64 -8
  store i64 %101, ptr %102, align 8, !tbaa !22
  br label %.thread

103:                                              ; preds = %.lr.ph
  %104 = icmp eq i64 %93, 0
  br i1 %104, label %105, label %107

105:                                              ; preds = %103
  %106 = add nuw i64 %.1158219, %61
  br label %121

107:                                              ; preds = %103
  %108 = icmp slt i64 %.3218, 0
  br i1 %108, label %109, label %114

109:                                              ; preds = %107
  %110 = getelementptr inbounds [8 x i64], ptr %60, i64 0, i64 %.1158219
  %111 = load i64, ptr %110, align 8, !tbaa !21
  %112 = icmp eq i64 %111, -2
  %113 = add nuw nsw i64 %.1158219, %61
  %spec.select221 = select i1 %112, i64 %113, i64 %.3218
  br label %114

114:                                              ; preds = %109, %95, %107
  %.4 = phi i64 [ %.3218, %95 ], [ %.3218, %107 ], [ %spec.select221, %109 ]
  %115 = add nuw nsw i64 %.1158219, 1
  %exitcond239.not = icmp eq i64 %115, %59
  br i1 %exitcond239.not, label %._crit_edge, label %.lr.ph, !llvm.loop !26

._crit_edge:                                      ; preds = %114, %.preheader
  %.3.lcssa = phi i64 [ %.2163, %.preheader ], [ %.4, %114 ]
  %116 = add i64 %.0164, %.0167
  %117 = add i64 %.0167, 8
  %118 = load i64, ptr %49, align 8, !tbaa !16
  %119 = add i64 %118, -1
  %120 = and i64 %119, %116
  br label %55

121:                                              ; preds = %81, %105
  %.1165.ph = phi i64 [ %106, %105 ], [ %82, %81 ]
  %.5.ph = phi i64 [ %.3218, %105 ], [ %.1162216, %81 ]
  %122 = icmp sgt i64 %.5.ph, -1
  br i1 %122, label %123, label %127

123:                                              ; preds = %121
  %124 = getelementptr inbounds i8, ptr %.0170, i64 40
  %125 = load i64, ptr %124, align 8, !tbaa !27
  %126 = add i64 %125, -1
  store i64 %126, ptr %124, align 8, !tbaa !27
  br label %127

127:                                              ; preds = %123, %121
  %.2166 = phi i64 [ %.5.ph, %123 ], [ %.1165.ph, %121 ]
  %128 = getelementptr inbounds i8, ptr %.0170, i64 16
  %129 = load i64, ptr %128, align 8, !tbaa !12
  %130 = add i64 %129, 1
  store i64 %130, ptr %128, align 8, !tbaa !12
  %.not182 = icmp eq ptr %.0159, null
  br i1 %.not182, label %.thread198, label %131

131:                                              ; preds = %127
  %132 = load i64, ptr %16, align 8, !tbaa !5
  %133 = add i64 %132, 1
  %134 = getelementptr inbounds i8, ptr %15, i64 -24
  %135 = load i64, ptr %134, align 8, !tbaa !28
  %136 = icmp ugt i64 %133, %135
  br i1 %136, label %.thread198, label %140

.thread198:                                       ; preds = %127, %131
  %137 = phi i64 [ %132, %131 ], [ 0, %127 ]
  %138 = phi i64 [ %133, %131 ], [ 1, %127 ]
  %139 = tail call ptr @stbds_arrgrowf(ptr noundef %15, i64 noundef %1, i64 noundef 1, i64 noundef 0)
  br label %140

140:                                              ; preds = %.thread198, %131
  %141 = phi i64 [ %137, %.thread198 ], [ %132, %131 ]
  %142 = phi i64 [ %138, %.thread198 ], [ %133, %131 ]
  %.1160 = phi ptr [ %139, %.thread198 ], [ %15, %131 ]
  %143 = getelementptr inbounds i8, ptr %.1160, i64 -32
  store i64 %142, ptr %143, align 8, !tbaa !5
  %144 = load ptr, ptr %54, align 8, !tbaa !20
  %145 = lshr i64 %.2166, 3
  %146 = getelementptr inbounds %struct.stbds_hash_bucket, ptr %144, i64 %145
  %147 = and i64 %.2166, 7
  %148 = getelementptr inbounds [8 x i64], ptr %146, i64 0, i64 %147
  store i64 %spec.select, ptr %148, align 8, !tbaa !21
  %149 = add nsw i64 %141, -1
  %150 = getelementptr inbounds i8, ptr %146, i64 64
  %151 = getelementptr inbounds [8 x i64], ptr %150, i64 0, i64 %147
  store i64 %149, ptr %151, align 8, !tbaa !21
  %152 = getelementptr inbounds i8, ptr %.1160, i64 -8
  store i64 %149, ptr %152, align 8, !tbaa !22
  %153 = getelementptr inbounds i8, ptr %.0170, i64 89
  %154 = load i8, ptr %153, align 1, !tbaa !17
  switch i8 %154, label %173 [
    i8 2, label %155
    i8 3, label %161
    i8 1, label %168
  ]

155:                                              ; preds = %140
  %156 = tail call ptr @stbds_strdup(ptr noundef %2)
  %157 = mul i64 %141, %1
  %158 = getelementptr inbounds i8, ptr %.1160, i64 %157
  store ptr %156, ptr %158, align 8, !tbaa !23
  %159 = getelementptr inbounds i8, ptr %.1160, i64 -16
  %160 = load ptr, ptr %159, align 8, !tbaa !11
  store ptr %156, ptr %160, align 8, !tbaa !23
  br label %176

161:                                              ; preds = %140
  %162 = getelementptr inbounds i8, ptr %.0170, i64 72
  %163 = tail call ptr @stbds_stralloc(ptr noundef nonnull %162, ptr noundef %2)
  %164 = mul i64 %141, %1
  %165 = getelementptr inbounds i8, ptr %.1160, i64 %164
  store ptr %163, ptr %165, align 8, !tbaa !23
  %166 = getelementptr inbounds i8, ptr %.1160, i64 -16
  %167 = load ptr, ptr %166, align 8, !tbaa !11
  store ptr %163, ptr %167, align 8, !tbaa !23
  br label %176

168:                                              ; preds = %140
  %169 = mul i64 %141, %1
  %170 = getelementptr inbounds i8, ptr %.1160, i64 %169
  store ptr %2, ptr %170, align 8, !tbaa !23
  %171 = getelementptr inbounds i8, ptr %.1160, i64 -16
  %172 = load ptr, ptr %171, align 8, !tbaa !11
  store ptr %2, ptr %172, align 8, !tbaa !23
  br label %176

173:                                              ; preds = %140
  %174 = mul i64 %141, %1
  %175 = getelementptr inbounds i8, ptr %.1160, i64 %174
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %175, ptr align 1 %2, i64 %3, i1 false)
  br label %176

176:                                              ; preds = %173, %168, %161, %155
  %177 = getelementptr inbounds i8, ptr %.1160, i64 %1
  br label %.thread

.thread:                                          ; preds = %70, %74, %99, %176
  %.2 = phi ptr [ %177, %176 ], [ %.0159, %99 ], [ %.0159, %74 ], [ %.0159, %70 ]
  ret ptr %.2
}

; Function Attrs: nounwind uwtable
declare hidden ptr @stbds_make_hash_index(i64 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i64 @stbds_probe_position(i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @stbds_is_key_equal(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @stbds_strdup(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { 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 #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"", !7, i64 0, !7, i64 8, !10, i64 16, !7, i64 24}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !10, i64 16}
!12 = !{!13, !7, i64 16}
!13 = !{!"", !10, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !14, i64 72, !10, i64 96}
!14 = !{!"stbds_string_arena", !10, i64 0, !7, i64 8, !8, i64 16, !8, i64 17}
!15 = !{!13, !7, i64 24}
!16 = !{!13, !7, i64 8}
!17 = !{!13, !8, i64 89}
!18 = !{!13, !7, i64 56}
!19 = !{!13, !7, i64 64}
!20 = !{!13, !10, i64 96}
!21 = !{!7, !7, i64 0}
!22 = !{!6, !7, i64 24}
!23 = !{!10, !10, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!13, !7, i64 40}
!28 = !{!6, !7, i64 8}


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