; LLVM IR from p4lang/p4c :: backends/ebpf/runtime (ebpf_registry)

; 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.registry_entry = type { [256 x i8], ptr, i32, %struct.UT_hash_handle, %struct.UT_hash_handle }
%struct.UT_hash_handle = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.UT_hash_table = type { ptr, i32, i32, i32, ptr, i64, i32, i32, i32, i32, i32 }
%struct.UT_hash_bucket = type { ptr, i32, i32 }

@reg_tables_id = external hidden global ptr, align 8

; 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
define dso_local ptr @registry_lookup_table_id(i32 noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  store i32 %0, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #3
  br label %12

12:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  br label %13

13:                                               ; preds = %12
  br label %14

14:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  store ptr %3, ptr %9, align 8, !tbaa !9
  store i32 -17973521, ptr %5, align 4, !tbaa !5
  store i32 -1640531527, ptr %7, align 4, !tbaa !5
  store i32 -1640531527, ptr %6, align 4, !tbaa !5
  store i32 4, ptr %8, align 4, !tbaa !5
  br label %15

15:                                               ; preds = %183, %14
  %16 = load i32, ptr %8, align 4, !tbaa !5
  %17 = icmp uge i32 %16, 12
  br i1 %17, label %18, label %188

18:                                               ; preds = %15
  %19 = load ptr, ptr %9, align 8, !tbaa !9
  %20 = getelementptr inbounds i8, ptr %19, i64 0
  %21 = load i8, ptr %20, align 1, !tbaa !11
  %22 = zext i8 %21 to i32
  %23 = load ptr, ptr %9, align 8, !tbaa !9
  %24 = getelementptr inbounds i8, ptr %23, i64 1
  %25 = load i8, ptr %24, align 1, !tbaa !11
  %26 = zext i8 %25 to i32
  %27 = shl i32 %26, 8
  %28 = add i32 %22, %27
  %29 = load ptr, ptr %9, align 8, !tbaa !9
  %30 = getelementptr inbounds i8, ptr %29, i64 2
  %31 = load i8, ptr %30, align 1, !tbaa !11
  %32 = zext i8 %31 to i32
  %33 = shl i32 %32, 16
  %34 = add i32 %28, %33
  %35 = load ptr, ptr %9, align 8, !tbaa !9
  %36 = getelementptr inbounds i8, ptr %35, i64 3
  %37 = load i8, ptr %36, align 1, !tbaa !11
  %38 = zext i8 %37 to i32
  %39 = shl i32 %38, 24
  %40 = add i32 %34, %39
  %41 = load i32, ptr %6, align 4, !tbaa !5
  %42 = add i32 %41, %40
  store i32 %42, ptr %6, align 4, !tbaa !5
  %43 = load ptr, ptr %9, align 8, !tbaa !9
  %44 = getelementptr inbounds i8, ptr %43, i64 4
  %45 = load i8, ptr %44, align 1, !tbaa !11
  %46 = zext i8 %45 to i32
  %47 = load ptr, ptr %9, align 8, !tbaa !9
  %48 = getelementptr inbounds i8, ptr %47, i64 5
  %49 = load i8, ptr %48, align 1, !tbaa !11
  %50 = zext i8 %49 to i32
  %51 = shl i32 %50, 8
  %52 = add i32 %46, %51
  %53 = load ptr, ptr %9, align 8, !tbaa !9
  %54 = getelementptr inbounds i8, ptr %53, i64 6
  %55 = load i8, ptr %54, align 1, !tbaa !11
  %56 = zext i8 %55 to i32
  %57 = shl i32 %56, 16
  %58 = add i32 %52, %57
  %59 = load ptr, ptr %9, align 8, !tbaa !9
  %60 = getelementptr inbounds i8, ptr %59, i64 7
  %61 = load i8, ptr %60, align 1, !tbaa !11
  %62 = zext i8 %61 to i32
  %63 = shl i32 %62, 24
  %64 = add i32 %58, %63
  %65 = load i32, ptr %7, align 4, !tbaa !5
  %66 = add i32 %65, %64
  store i32 %66, ptr %7, align 4, !tbaa !5
  %67 = load ptr, ptr %9, align 8, !tbaa !9
  %68 = getelementptr inbounds i8, ptr %67, i64 8
  %69 = load i8, ptr %68, align 1, !tbaa !11
  %70 = zext i8 %69 to i32
  %71 = load ptr, ptr %9, align 8, !tbaa !9
  %72 = getelementptr inbounds i8, ptr %71, i64 9
  %73 = load i8, ptr %72, align 1, !tbaa !11
  %74 = zext i8 %73 to i32
  %75 = shl i32 %74, 8
  %76 = add i32 %70, %75
  %77 = load ptr, ptr %9, align 8, !tbaa !9
  %78 = getelementptr inbounds i8, ptr %77, i64 10
  %79 = load i8, ptr %78, align 1, !tbaa !11
  %80 = zext i8 %79 to i32
  %81 = shl i32 %80, 16
  %82 = add i32 %76, %81
  %83 = load ptr, ptr %9, align 8, !tbaa !9
  %84 = getelementptr inbounds i8, ptr %83, i64 11
  %85 = load i8, ptr %84, align 1, !tbaa !11
  %86 = zext i8 %85 to i32
  %87 = shl i32 %86, 24
  %88 = add i32 %82, %87
  %89 = load i32, ptr %5, align 4, !tbaa !5
  %90 = add i32 %89, %88
  store i32 %90, ptr %5, align 4, !tbaa !5
  br label %91

91:                                               ; preds = %18
  %92 = load i32, ptr %7, align 4, !tbaa !5
  %93 = load i32, ptr %6, align 4, !tbaa !5
  %94 = sub i32 %93, %92
  store i32 %94, ptr %6, align 4, !tbaa !5
  %95 = load i32, ptr %5, align 4, !tbaa !5
  %96 = load i32, ptr %6, align 4, !tbaa !5
  %97 = sub i32 %96, %95
  store i32 %97, ptr %6, align 4, !tbaa !5
  %98 = load i32, ptr %5, align 4, !tbaa !5
  %99 = lshr i32 %98, 13
  %100 = load i32, ptr %6, align 4, !tbaa !5
  %101 = xor i32 %100, %99
  store i32 %101, ptr %6, align 4, !tbaa !5
  %102 = load i32, ptr %5, align 4, !tbaa !5
  %103 = load i32, ptr %7, align 4, !tbaa !5
  %104 = sub i32 %103, %102
  store i32 %104, ptr %7, align 4, !tbaa !5
  %105 = load i32, ptr %6, align 4, !tbaa !5
  %106 = load i32, ptr %7, align 4, !tbaa !5
  %107 = sub i32 %106, %105
  store i32 %107, ptr %7, align 4, !tbaa !5
  %108 = load i32, ptr %6, align 4, !tbaa !5
  %109 = shl i32 %108, 8
  %110 = load i32, ptr %7, align 4, !tbaa !5
  %111 = xor i32 %110, %109
  store i32 %111, ptr %7, align 4, !tbaa !5
  %112 = load i32, ptr %6, align 4, !tbaa !5
  %113 = load i32, ptr %5, align 4, !tbaa !5
  %114 = sub i32 %113, %112
  store i32 %114, ptr %5, align 4, !tbaa !5
  %115 = load i32, ptr %7, align 4, !tbaa !5
  %116 = load i32, ptr %5, align 4, !tbaa !5
  %117 = sub i32 %116, %115
  store i32 %117, ptr %5, align 4, !tbaa !5
  %118 = load i32, ptr %7, align 4, !tbaa !5
  %119 = lshr i32 %118, 13
  %120 = load i32, ptr %5, align 4, !tbaa !5
  %121 = xor i32 %120, %119
  store i32 %121, ptr %5, align 4, !tbaa !5
  %122 = load i32, ptr %7, align 4, !tbaa !5
  %123 = load i32, ptr %6, align 4, !tbaa !5
  %124 = sub i32 %123, %122
  store i32 %124, ptr %6, align 4, !tbaa !5
  %125 = load i32, ptr %5, align 4, !tbaa !5
  %126 = load i32, ptr %6, align 4, !tbaa !5
  %127 = sub i32 %126, %125
  store i32 %127, ptr %6, align 4, !tbaa !5
  %128 = load i32, ptr %5, align 4, !tbaa !5
  %129 = lshr i32 %128, 12
  %130 = load i32, ptr %6, align 4, !tbaa !5
  %131 = xor i32 %130, %129
  store i32 %131, ptr %6, align 4, !tbaa !5
  %132 = load i32, ptr %5, align 4, !tbaa !5
  %133 = load i32, ptr %7, align 4, !tbaa !5
  %134 = sub i32 %133, %132
  store i32 %134, ptr %7, align 4, !tbaa !5
  %135 = load i32, ptr %6, align 4, !tbaa !5
  %136 = load i32, ptr %7, align 4, !tbaa !5
  %137 = sub i32 %136, %135
  store i32 %137, ptr %7, align 4, !tbaa !5
  %138 = load i32, ptr %6, align 4, !tbaa !5
  %139 = shl i32 %138, 16
  %140 = load i32, ptr %7, align 4, !tbaa !5
  %141 = xor i32 %140, %139
  store i32 %141, ptr %7, align 4, !tbaa !5
  %142 = load i32, ptr %6, align 4, !tbaa !5
  %143 = load i32, ptr %5, align 4, !tbaa !5
  %144 = sub i32 %143, %142
  store i32 %144, ptr %5, align 4, !tbaa !5
  %145 = load i32, ptr %7, align 4, !tbaa !5
  %146 = load i32, ptr %5, align 4, !tbaa !5
  %147 = sub i32 %146, %145
  store i32 %147, ptr %5, align 4, !tbaa !5
  %148 = load i32, ptr %7, align 4, !tbaa !5
  %149 = lshr i32 %148, 5
  %150 = load i32, ptr %5, align 4, !tbaa !5
  %151 = xor i32 %150, %149
  store i32 %151, ptr %5, align 4, !tbaa !5
  %152 = load i32, ptr %7, align 4, !tbaa !5
  %153 = load i32, ptr %6, align 4, !tbaa !5
  %154 = sub i32 %153, %152
  store i32 %154, ptr %6, align 4, !tbaa !5
  %155 = load i32, ptr %5, align 4, !tbaa !5
  %156 = load i32, ptr %6, align 4, !tbaa !5
  %157 = sub i32 %156, %155
  store i32 %157, ptr %6, align 4, !tbaa !5
  %158 = load i32, ptr %5, align 4, !tbaa !5
  %159 = lshr i32 %158, 3
  %160 = load i32, ptr %6, align 4, !tbaa !5
  %161 = xor i32 %160, %159
  store i32 %161, ptr %6, align 4, !tbaa !5
  %162 = load i32, ptr %5, align 4, !tbaa !5
  %163 = load i32, ptr %7, align 4, !tbaa !5
  %164 = sub i32 %163, %162
  store i32 %164, ptr %7, align 4, !tbaa !5
  %165 = load i32, ptr %6, align 4, !tbaa !5
  %166 = load i32, ptr %7, align 4, !tbaa !5
  %167 = sub i32 %166, %165
  store i32 %167, ptr %7, align 4, !tbaa !5
  %168 = load i32, ptr %6, align 4, !tbaa !5
  %169 = shl i32 %168, 10
  %170 = load i32, ptr %7, align 4, !tbaa !5
  %171 = xor i32 %170, %169
  store i32 %171, ptr %7, align 4, !tbaa !5
  %172 = load i32, ptr %6, align 4, !tbaa !5
  %173 = load i32, ptr %5, align 4, !tbaa !5
  %174 = sub i32 %173, %172
  store i32 %174, ptr %5, align 4, !tbaa !5
  %175 = load i32, ptr %7, align 4, !tbaa !5
  %176 = load i32, ptr %5, align 4, !tbaa !5
  %177 = sub i32 %176, %175
  store i32 %177, ptr %5, align 4, !tbaa !5
  %178 = load i32, ptr %7, align 4, !tbaa !5
  %179 = lshr i32 %178, 15
  %180 = load i32, ptr %5, align 4, !tbaa !5
  %181 = xor i32 %180, %179
  store i32 %181, ptr %5, align 4, !tbaa !5
  br label %182

182:                                              ; preds = %91
  br label %183

183:                                              ; preds = %182
  %184 = load ptr, ptr %9, align 8, !tbaa !9
  %185 = getelementptr inbounds i8, ptr %184, i64 12
  store ptr %185, ptr %9, align 8, !tbaa !9
  %186 = load i32, ptr %8, align 4, !tbaa !5
  %187 = sub i32 %186, 12
  store i32 %187, ptr %8, align 4, !tbaa !5
  br label %15, !llvm.loop !12

188:                                              ; preds = %15
  %189 = load i32, ptr %5, align 4, !tbaa !5
  %190 = add i32 %189, 4
  store i32 %190, ptr %5, align 4, !tbaa !5
  %191 = load i32, ptr %8, align 4, !tbaa !5
  switch i32 %191, label %278 [
    i32 11, label %192
    i32 10, label %200
    i32 9, label %208
    i32 8, label %216
    i32 7, label %224
    i32 6, label %232
    i32 5, label %240
    i32 4, label %247
    i32 3, label %255
    i32 2, label %263
    i32 1, label %271
  ]

192:                                              ; preds = %188
  %193 = load ptr, ptr %9, align 8, !tbaa !9
  %194 = getelementptr inbounds i8, ptr %193, i64 10
  %195 = load i8, ptr %194, align 1, !tbaa !11
  %196 = zext i8 %195 to i32
  %197 = shl i32 %196, 24
  %198 = load i32, ptr %5, align 4, !tbaa !5
  %199 = add i32 %198, %197
  store i32 %199, ptr %5, align 4, !tbaa !5
  br label %200

200:                                              ; preds = %192, %188
  %201 = load ptr, ptr %9, align 8, !tbaa !9
  %202 = getelementptr inbounds i8, ptr %201, i64 9
  %203 = load i8, ptr %202, align 1, !tbaa !11
  %204 = zext i8 %203 to i32
  %205 = shl i32 %204, 16
  %206 = load i32, ptr %5, align 4, !tbaa !5
  %207 = add i32 %206, %205
  store i32 %207, ptr %5, align 4, !tbaa !5
  br label %208

208:                                              ; preds = %200, %188
  %209 = load ptr, ptr %9, align 8, !tbaa !9
  %210 = getelementptr inbounds i8, ptr %209, i64 8
  %211 = load i8, ptr %210, align 1, !tbaa !11
  %212 = zext i8 %211 to i32
  %213 = shl i32 %212, 8
  %214 = load i32, ptr %5, align 4, !tbaa !5
  %215 = add i32 %214, %213
  store i32 %215, ptr %5, align 4, !tbaa !5
  br label %216

216:                                              ; preds = %208, %188
  %217 = load ptr, ptr %9, align 8, !tbaa !9
  %218 = getelementptr inbounds i8, ptr %217, i64 7
  %219 = load i8, ptr %218, align 1, !tbaa !11
  %220 = zext i8 %219 to i32
  %221 = shl i32 %220, 24
  %222 = load i32, ptr %7, align 4, !tbaa !5
  %223 = add i32 %222, %221
  store i32 %223, ptr %7, align 4, !tbaa !5
  br label %224

224:                                              ; preds = %216, %188
  %225 = load ptr, ptr %9, align 8, !tbaa !9
  %226 = getelementptr inbounds i8, ptr %225, i64 6
  %227 = load i8, ptr %226, align 1, !tbaa !11
  %228 = zext i8 %227 to i32
  %229 = shl i32 %228, 16
  %230 = load i32, ptr %7, align 4, !tbaa !5
  %231 = add i32 %230, %229
  store i32 %231, ptr %7, align 4, !tbaa !5
  br label %232

232:                                              ; preds = %224, %188
  %233 = load ptr, ptr %9, align 8, !tbaa !9
  %234 = getelementptr inbounds i8, ptr %233, i64 5
  %235 = load i8, ptr %234, align 1, !tbaa !11
  %236 = zext i8 %235 to i32
  %237 = shl i32 %236, 8
  %238 = load i32, ptr %7, align 4, !tbaa !5
  %239 = add i32 %238, %237
  store i32 %239, ptr %7, align 4, !tbaa !5
  br label %240

240:                                              ; preds = %232, %188
  %241 = load ptr, ptr %9, align 8, !tbaa !9
  %242 = getelementptr inbounds i8, ptr %241, i64 4
  %243 = load i8, ptr %242, align 1, !tbaa !11
  %244 = zext i8 %243 to i32
  %245 = load i32, ptr %7, align 4, !tbaa !5
  %246 = add i32 %245, %244
  store i32 %246, ptr %7, align 4, !tbaa !5
  br label %247

247:                                              ; preds = %240, %188
  %248 = load ptr, ptr %9, align 8, !tbaa !9
  %249 = getelementptr inbounds i8, ptr %248, i64 3
  %250 = load i8, ptr %249, align 1, !tbaa !11
  %251 = zext i8 %250 to i32
  %252 = shl i32 %251, 24
  %253 = load i32, ptr %6, align 4, !tbaa !5
  %254 = add i32 %253, %252
  store i32 %254, ptr %6, align 4, !tbaa !5
  br label %255

255:                                              ; preds = %247, %188
  %256 = load ptr, ptr %9, align 8, !tbaa !9
  %257 = getelementptr inbounds i8, ptr %256, i64 2
  %258 = load i8, ptr %257, align 1, !tbaa !11
  %259 = zext i8 %258 to i32
  %260 = shl i32 %259, 16
  %261 = load i32, ptr %6, align 4, !tbaa !5
  %262 = add i32 %261, %260
  store i32 %262, ptr %6, align 4, !tbaa !5
  br label %263

263:                                              ; preds = %255, %188
  %264 = load ptr, ptr %9, align 8, !tbaa !9
  %265 = getelementptr inbounds i8, ptr %264, i64 1
  %266 = load i8, ptr %265, align 1, !tbaa !11
  %267 = zext i8 %266 to i32
  %268 = shl i32 %267, 8
  %269 = load i32, ptr %6, align 4, !tbaa !5
  %270 = add i32 %269, %268
  store i32 %270, ptr %6, align 4, !tbaa !5
  br label %271

271:                                              ; preds = %263, %188
  %272 = load ptr, ptr %9, align 8, !tbaa !9
  %273 = getelementptr inbounds i8, ptr %272, i64 0
  %274 = load i8, ptr %273, align 1, !tbaa !11
  %275 = zext i8 %274 to i32
  %276 = load i32, ptr %6, align 4, !tbaa !5
  %277 = add i32 %276, %275
  store i32 %277, ptr %6, align 4, !tbaa !5
  br label %278

278:                                              ; preds = %271, %188
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %7, align 4, !tbaa !5
  %281 = load i32, ptr %6, align 4, !tbaa !5
  %282 = sub i32 %281, %280
  store i32 %282, ptr %6, align 4, !tbaa !5
  %283 = load i32, ptr %5, align 4, !tbaa !5
  %284 = load i32, ptr %6, align 4, !tbaa !5
  %285 = sub i32 %284, %283
  store i32 %285, ptr %6, align 4, !tbaa !5
  %286 = load i32, ptr %5, align 4, !tbaa !5
  %287 = lshr i32 %286, 13
  %288 = load i32, ptr %6, align 4, !tbaa !5
  %289 = xor i32 %288, %287
  store i32 %289, ptr %6, align 4, !tbaa !5
  %290 = load i32, ptr %5, align 4, !tbaa !5
  %291 = load i32, ptr %7, align 4, !tbaa !5
  %292 = sub i32 %291, %290
  store i32 %292, ptr %7, align 4, !tbaa !5
  %293 = load i32, ptr %6, align 4, !tbaa !5
  %294 = load i32, ptr %7, align 4, !tbaa !5
  %295 = sub i32 %294, %293
  store i32 %295, ptr %7, align 4, !tbaa !5
  %296 = load i32, ptr %6, align 4, !tbaa !5
  %297 = shl i32 %296, 8
  %298 = load i32, ptr %7, align 4, !tbaa !5
  %299 = xor i32 %298, %297
  store i32 %299, ptr %7, align 4, !tbaa !5
  %300 = load i32, ptr %6, align 4, !tbaa !5
  %301 = load i32, ptr %5, align 4, !tbaa !5
  %302 = sub i32 %301, %300
  store i32 %302, ptr %5, align 4, !tbaa !5
  %303 = load i32, ptr %7, align 4, !tbaa !5
  %304 = load i32, ptr %5, align 4, !tbaa !5
  %305 = sub i32 %304, %303
  store i32 %305, ptr %5, align 4, !tbaa !5
  %306 = load i32, ptr %7, align 4, !tbaa !5
  %307 = lshr i32 %306, 13
  %308 = load i32, ptr %5, align 4, !tbaa !5
  %309 = xor i32 %308, %307
  store i32 %309, ptr %5, align 4, !tbaa !5
  %310 = load i32, ptr %7, align 4, !tbaa !5
  %311 = load i32, ptr %6, align 4, !tbaa !5
  %312 = sub i32 %311, %310
  store i32 %312, ptr %6, align 4, !tbaa !5
  %313 = load i32, ptr %5, align 4, !tbaa !5
  %314 = load i32, ptr %6, align 4, !tbaa !5
  %315 = sub i32 %314, %313
  store i32 %315, ptr %6, align 4, !tbaa !5
  %316 = load i32, ptr %5, align 4, !tbaa !5
  %317 = lshr i32 %316, 12
  %318 = load i32, ptr %6, align 4, !tbaa !5
  %319 = xor i32 %318, %317
  store i32 %319, ptr %6, align 4, !tbaa !5
  %320 = load i32, ptr %5, align 4, !tbaa !5
  %321 = load i32, ptr %7, align 4, !tbaa !5
  %322 = sub i32 %321, %320
  store i32 %322, ptr %7, align 4, !tbaa !5
  %323 = load i32, ptr %6, align 4, !tbaa !5
  %324 = load i32, ptr %7, align 4, !tbaa !5
  %325 = sub i32 %324, %323
  store i32 %325, ptr %7, align 4, !tbaa !5
  %326 = load i32, ptr %6, align 4, !tbaa !5
  %327 = shl i32 %326, 16
  %328 = load i32, ptr %7, align 4, !tbaa !5
  %329 = xor i32 %328, %327
  store i32 %329, ptr %7, align 4, !tbaa !5
  %330 = load i32, ptr %6, align 4, !tbaa !5
  %331 = load i32, ptr %5, align 4, !tbaa !5
  %332 = sub i32 %331, %330
  store i32 %332, ptr %5, align 4, !tbaa !5
  %333 = load i32, ptr %7, align 4, !tbaa !5
  %334 = load i32, ptr %5, align 4, !tbaa !5
  %335 = sub i32 %334, %333
  store i32 %335, ptr %5, align 4, !tbaa !5
  %336 = load i32, ptr %7, align 4, !tbaa !5
  %337 = lshr i32 %336, 5
  %338 = load i32, ptr %5, align 4, !tbaa !5
  %339 = xor i32 %338, %337
  store i32 %339, ptr %5, align 4, !tbaa !5
  %340 = load i32, ptr %7, align 4, !tbaa !5
  %341 = load i32, ptr %6, align 4, !tbaa !5
  %342 = sub i32 %341, %340
  store i32 %342, ptr %6, align 4, !tbaa !5
  %343 = load i32, ptr %5, align 4, !tbaa !5
  %344 = load i32, ptr %6, align 4, !tbaa !5
  %345 = sub i32 %344, %343
  store i32 %345, ptr %6, align 4, !tbaa !5
  %346 = load i32, ptr %5, align 4, !tbaa !5
  %347 = lshr i32 %346, 3
  %348 = load i32, ptr %6, align 4, !tbaa !5
  %349 = xor i32 %348, %347
  store i32 %349, ptr %6, align 4, !tbaa !5
  %350 = load i32, ptr %5, align 4, !tbaa !5
  %351 = load i32, ptr %7, align 4, !tbaa !5
  %352 = sub i32 %351, %350
  store i32 %352, ptr %7, align 4, !tbaa !5
  %353 = load i32, ptr %6, align 4, !tbaa !5
  %354 = load i32, ptr %7, align 4, !tbaa !5
  %355 = sub i32 %354, %353
  store i32 %355, ptr %7, align 4, !tbaa !5
  %356 = load i32, ptr %6, align 4, !tbaa !5
  %357 = shl i32 %356, 10
  %358 = load i32, ptr %7, align 4, !tbaa !5
  %359 = xor i32 %358, %357
  store i32 %359, ptr %7, align 4, !tbaa !5
  %360 = load i32, ptr %6, align 4, !tbaa !5
  %361 = load i32, ptr %5, align 4, !tbaa !5
  %362 = sub i32 %361, %360
  store i32 %362, ptr %5, align 4, !tbaa !5
  %363 = load i32, ptr %7, align 4, !tbaa !5
  %364 = load i32, ptr %5, align 4, !tbaa !5
  %365 = sub i32 %364, %363
  store i32 %365, ptr %5, align 4, !tbaa !5
  %366 = load i32, ptr %7, align 4, !tbaa !5
  %367 = lshr i32 %366, 15
  %368 = load i32, ptr %5, align 4, !tbaa !5
  %369 = xor i32 %368, %367
  store i32 %369, ptr %5, align 4, !tbaa !5
  br label %370

370:                                              ; preds = %279
  br label %371

371:                                              ; preds = %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  br label %372

372:                                              ; preds = %371
  br label %373

373:                                              ; preds = %372
  br label %374

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %374
  br label %376

376:                                              ; preds = %375
  store ptr null, ptr %4, align 8, !tbaa !9
  %377 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %378 = icmp ne ptr %377, null
  br i1 %378, label %379, label %483

379:                                              ; preds = %376
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  br label %380

380:                                              ; preds = %379
  %381 = load i32, ptr %5, align 4, !tbaa !5
  %382 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %383 = getelementptr inbounds %struct.registry_entry, ptr %382, i32 0, i32 4
  %384 = getelementptr inbounds %struct.UT_hash_handle, ptr %383, i32 0, i32 0
  %385 = load ptr, ptr %384, align 8, !tbaa !14
  %386 = getelementptr inbounds %struct.UT_hash_table, ptr %385, i32 0, i32 1
  %387 = load i32, ptr %386, align 8, !tbaa !17
  %388 = sub i32 %387, 1
  %389 = and i32 %381, %388
  store i32 %389, ptr %10, align 4, !tbaa !5
  br label %390

390:                                              ; preds = %380
  br label %391

391:                                              ; preds = %390
  br label %392

392:                                              ; preds = %391
  %393 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %394 = getelementptr inbounds %struct.registry_entry, ptr %393, i32 0, i32 4
  %395 = getelementptr inbounds %struct.UT_hash_handle, ptr %394, i32 0, i32 0
  %396 = load ptr, ptr %395, align 8, !tbaa !14
  %397 = getelementptr inbounds %struct.UT_hash_table, ptr %396, i32 0, i32 0
  %398 = load ptr, ptr %397, align 8, !tbaa !20
  %399 = load i32, ptr %10, align 4, !tbaa !5
  %400 = zext i32 %399 to i64
  %401 = getelementptr inbounds %struct.UT_hash_bucket, ptr %398, i64 %400
  %402 = getelementptr inbounds %struct.UT_hash_bucket, ptr %401, i32 0, i32 0
  %403 = load ptr, ptr %402, align 8, !tbaa !21
  %404 = icmp ne ptr %403, null
  br i1 %404, label %405, label %428

405:                                              ; preds = %392
  br label %406

406:                                              ; preds = %405
  %407 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %408 = getelementptr inbounds %struct.registry_entry, ptr %407, i32 0, i32 4
  %409 = getelementptr inbounds %struct.UT_hash_handle, ptr %408, i32 0, i32 0
  %410 = load ptr, ptr %409, align 8, !tbaa !14
  %411 = getelementptr inbounds %struct.UT_hash_table, ptr %410, i32 0, i32 0
  %412 = load ptr, ptr %411, align 8, !tbaa !20
  %413 = load i32, ptr %10, align 4, !tbaa !5
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds %struct.UT_hash_bucket, ptr %412, i64 %414
  %416 = getelementptr inbounds %struct.UT_hash_bucket, ptr %415, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !21
  %418 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %419 = getelementptr inbounds %struct.registry_entry, ptr %418, i32 0, i32 4
  %420 = getelementptr inbounds %struct.UT_hash_handle, ptr %419, i32 0, i32 0
  %421 = load ptr, ptr %420, align 8, !tbaa !14
  %422 = getelementptr inbounds %struct.UT_hash_table, ptr %421, i32 0, i32 5
  %423 = load i64, ptr %422, align 8, !tbaa !23
  %424 = sub i64 0, %423
  %425 = getelementptr inbounds i8, ptr %417, i64 %424
  store ptr %425, ptr %4, align 8, !tbaa !9
  br label %426

426:                                              ; preds = %406
  br label %427

427:                                              ; preds = %426
  br label %429

428:                                              ; preds = %392
  store ptr null, ptr %4, align 8, !tbaa !9
  br label %429

429:                                              ; preds = %428, %427
  br label %430

430:                                              ; preds = %479, %429
  %431 = load ptr, ptr %4, align 8, !tbaa !9
  %432 = icmp ne ptr %431, null
  br i1 %432, label %433, label %480

433:                                              ; preds = %430
  %434 = load ptr, ptr %4, align 8, !tbaa !9
  %435 = getelementptr inbounds %struct.registry_entry, ptr %434, i32 0, i32 4
  %436 = getelementptr inbounds %struct.UT_hash_handle, ptr %435, i32 0, i32 7
  %437 = load i32, ptr %436, align 4, !tbaa !24
  %438 = load i32, ptr %5, align 4, !tbaa !5
  %439 = icmp eq i32 %437, %438
  br i1 %439, label %440, label %456

440:                                              ; preds = %433
  %441 = load ptr, ptr %4, align 8, !tbaa !9
  %442 = getelementptr inbounds %struct.registry_entry, ptr %441, i32 0, i32 4
  %443 = getelementptr inbounds %struct.UT_hash_handle, ptr %442, i32 0, i32 6
  %444 = load i32, ptr %443, align 8, !tbaa !25
  %445 = zext i32 %444 to i64
  %446 = icmp eq i64 %445, 4
  br i1 %446, label %447, label %456

447:                                              ; preds = %440
  %448 = load ptr, ptr %4, align 8, !tbaa !9
  %449 = getelementptr inbounds %struct.registry_entry, ptr %448, i32 0, i32 4
  %450 = getelementptr inbounds %struct.UT_hash_handle, ptr %449, i32 0, i32 5
  %451 = load ptr, ptr %450, align 8, !tbaa !26
  %452 = call i32 @memcmp(ptr noundef %451, ptr noundef %3, i64 noundef 4) #4
  %453 = icmp eq i32 %452, 0
  br i1 %453, label %454, label %455

454:                                              ; preds = %447
  br label %480

455:                                              ; preds = %447
  br label %456

456:                                              ; preds = %455, %440, %433
  %457 = load ptr, ptr %4, align 8, !tbaa !9
  %458 = getelementptr inbounds %struct.registry_entry, ptr %457, i32 0, i32 4
  %459 = getelementptr inbounds %struct.UT_hash_handle, ptr %458, i32 0, i32 4
  %460 = load ptr, ptr %459, align 8, !tbaa !27
  %461 = icmp ne ptr %460, null
  br i1 %461, label %462, label %478

462:                                              ; preds = %456
  br label %463

463:                                              ; preds = %462
  %464 = load ptr, ptr %4, align 8, !tbaa !9
  %465 = getelementptr inbounds %struct.registry_entry, ptr %464, i32 0, i32 4
  %466 = getelementptr inbounds %struct.UT_hash_handle, ptr %465, i32 0, i32 4
  %467 = load ptr, ptr %466, align 8, !tbaa !27
  %468 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.registry_entry, ptr %468, i32 0, i32 4
  %470 = getelementptr inbounds %struct.UT_hash_handle, ptr %469, i32 0, i32 0
  %471 = load ptr, ptr %470, align 8, !tbaa !14
  %472 = getelementptr inbounds %struct.UT_hash_table, ptr %471, i32 0, i32 5
  %473 = load i64, ptr %472, align 8, !tbaa !23
  %474 = sub i64 0, %473
  %475 = getelementptr inbounds i8, ptr %467, i64 %474
  store ptr %475, ptr %4, align 8, !tbaa !9
  br label %476

476:                                              ; preds = %463
  br label %477

477:                                              ; preds = %476
  br label %479

478:                                              ; preds = %456
  store ptr null, ptr %4, align 8, !tbaa !9
  br label %479

479:                                              ; preds = %478, %477
  br label %430, !llvm.loop !28

480:                                              ; preds = %454, %430
  br label %481

481:                                              ; preds = %480
  br label %482

482:                                              ; preds = %481
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  br label %483

483:                                              ; preds = %482, %376
  br label %484

484:                                              ; preds = %483
  br label %485

485:                                              ; preds = %484
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  br label %486

486:                                              ; preds = %485
  br label %487

487:                                              ; preds = %486
  %488 = load ptr, ptr %4, align 8, !tbaa !9
  %489 = icmp eq ptr %488, null
  br i1 %489, label %490, label %491

490:                                              ; preds = %487
  store ptr null, ptr %2, align 8
  store i32 1, ptr %11, align 4
  br label %495

491:                                              ; preds = %487
  %492 = load ptr, ptr %4, align 8, !tbaa !9
  %493 = getelementptr inbounds %struct.registry_entry, ptr %492, i32 0, i32 1
  %494 = load ptr, ptr %493, align 8, !tbaa !29
  store ptr %494, ptr %2, align 8
  store i32 1, ptr %11, align 4
  br label %495

495:                                              ; preds = %491, %490
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #3
  %496 = load ptr, ptr %2, align 8
  ret ptr %496
}

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #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 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }
attributes #4 = { nounwind willreturn memory(read) }

!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 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !10, i64 328}
!15 = !{!"", !7, i64 0, !10, i64 256, !6, i64 264, !16, i64 272, !16, i64 328}
!16 = !{!"UT_hash_handle", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !6, i64 48, !6, i64 52}
!17 = !{!18, !6, i64 8}
!18 = !{!"UT_hash_table", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !10, i64 24, !19, i64 32, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56}
!19 = !{!"long", !7, i64 0}
!20 = !{!18, !10, i64 0}
!21 = !{!22, !10, i64 0}
!22 = !{!"UT_hash_bucket", !10, i64 0, !6, i64 8, !6, i64 12}
!23 = !{!18, !19, i64 32}
!24 = !{!15, !6, i64 380}
!25 = !{!15, !6, i64 376}
!26 = !{!15, !10, i64 368}
!27 = !{!15, !10, i64 360}
!28 = distinct !{!28, !13}
!29 = !{!15, !10, i64 256}


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

@reg_tables_id = external hidden local_unnamed_addr global ptr, align 8

; Function Attrs: nofree nounwind memory(read, inaccessiblemem: none) uwtable
define dso_local ptr @registry_lookup_table_id(i32 noundef %0) local_unnamed_addr #0 {
  %2 = alloca i32, align 4
  store i32 %0, ptr %2, align 4, !tbaa !5
  %3 = and i32 %0, -16777216
  %4 = and i32 %0, 16711680
  %5 = and i32 %0, 65280
  %6 = and i32 %0, 255
  %7 = add i32 %3, 17973517
  %8 = add i32 %7, %4
  %9 = add i32 %8, %5
  %10 = add i32 %9, %6
  %11 = xor i32 %10, 522093
  %12 = sub i32 -1622558010, %11
  %13 = shl i32 %11, 8
  %14 = xor i32 %12, %13
  %15 = add i32 %11, %14
  %16 = sub i32 -17973517, %15
  %17 = lshr i32 %14, 13
  %18 = xor i32 %16, %17
  %19 = add i32 %14, %18
  %20 = sub i32 %11, %19
  %21 = lshr i32 %18, 12
  %22 = xor i32 %20, %21
  %23 = add i32 %18, %22
  %24 = sub i32 %14, %23
  %25 = shl i32 %22, 16
  %26 = xor i32 %24, %25
  %27 = add i32 %22, %26
  %28 = sub i32 %18, %27
  %29 = lshr i32 %26, 5
  %30 = xor i32 %28, %29
  %31 = add i32 %26, %30
  %32 = sub i32 %22, %31
  %33 = lshr i32 %30, 3
  %34 = xor i32 %32, %33
  %35 = add i32 %30, %34
  %36 = sub i32 %26, %35
  %37 = shl i32 %34, 10
  %38 = xor i32 %36, %37
  %39 = add i32 %34, %38
  %40 = sub i32 %30, %39
  %41 = lshr i32 %38, 15
  %42 = xor i32 %40, %41
  %43 = load ptr, ptr @reg_tables_id, align 8, !tbaa !9
  %.not = icmp eq ptr %43, null
  br i1 %.not, label %.thread, label %44

44:                                               ; preds = %1
  %45 = getelementptr inbounds i8, ptr %43, i64 328
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = getelementptr inbounds i8, ptr %46, i64 8
  %48 = load i32, ptr %47, align 8, !tbaa !14
  %49 = add i32 %48, -1
  %50 = and i32 %49, %42
  %51 = load ptr, ptr %46, align 8, !tbaa !17
  %52 = zext i32 %50 to i64
  %53 = getelementptr inbounds %struct.UT_hash_bucket, ptr %51, i64 %52
  %54 = load ptr, ptr %53, align 8, !tbaa !18
  %.not186 = icmp eq ptr %54, null
  br i1 %.not186, label %.thread, label %.lr.ph

.lr.ph:                                           ; preds = %44
  %55 = getelementptr inbounds i8, ptr %46, i64 32
  %56 = load i64, ptr %55, align 8, !tbaa !20
  %57 = sub i64 0, %56
  %58 = getelementptr inbounds i8, ptr %54, i64 %57
  %59 = getelementptr inbounds i8, ptr %46, i64 32
  br label %60

60:                                               ; preds = %75, %.lr.ph
  %.1180206 = phi ptr [ %58, %.lr.ph ], [ %78, %75 ]
  %61 = getelementptr inbounds i8, ptr %.1180206, i64 380
  %62 = load i32, ptr %61, align 4, !tbaa !21
  %63 = icmp eq i32 %62, %42
  br i1 %63, label %64, label %72

64:                                               ; preds = %60
  %65 = getelementptr inbounds i8, ptr %.1180206, i64 376
  %66 = load i32, ptr %65, align 8, !tbaa !22
  %67 = icmp eq i32 %66, 4
  br i1 %67, label %68, label %72

68:                                               ; preds = %64
  %69 = getelementptr inbounds i8, ptr %.1180206, i64 368
  %70 = load ptr, ptr %69, align 8, !tbaa !23
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %70, ptr noundef nonnull dereferenceable(4) %2, i64 4)
  %71 = icmp eq i32 %bcmp, 0
  br i1 %71, label %79, label %72

72:                                               ; preds = %68, %64, %60
  %73 = getelementptr inbounds i8, ptr %.1180206, i64 360
  %74 = load ptr, ptr %73, align 8, !tbaa !24
  %.not188 = icmp eq ptr %74, null
  br i1 %.not188, label %.thread, label %75

75:                                               ; preds = %72
  %76 = load i64, ptr %59, align 8, !tbaa !20
  %77 = sub i64 0, %76
  %78 = getelementptr inbounds i8, ptr %74, i64 %77
  br label %60, !llvm.loop !25

79:                                               ; preds = %68
  %80 = getelementptr inbounds i8, ptr %.1180206, i64 256
  %81 = load ptr, ptr %80, align 8, !tbaa !27
  br label %.thread

.thread:                                          ; preds = %72, %44, %1, %79
  %.0 = phi ptr [ %81, %79 ], [ null, %1 ], [ null, %44 ], [ null, %72 ]
  ret ptr %.0
}

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #1

attributes #0 = { nofree nounwind memory(read, inaccessiblemem: none) 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 = { nofree nounwind willreturn memory(argmem: read) }

!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, !10, i64 328}
!12 = !{!"", !7, i64 0, !10, i64 256, !6, i64 264, !13, i64 272, !13, i64 328}
!13 = !{!"UT_hash_handle", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !6, i64 48, !6, i64 52}
!14 = !{!15, !6, i64 8}
!15 = !{!"UT_hash_table", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !10, i64 24, !16, i64 32, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56}
!16 = !{!"long", !7, i64 0}
!17 = !{!15, !10, i64 0}
!18 = !{!19, !10, i64 0}
!19 = !{!"UT_hash_bucket", !10, i64 0, !6, i64 8, !6, i64 12}
!20 = !{!15, !16, i64 32}
!21 = !{!12, !6, i64 380}
!22 = !{!12, !6, i64 376}
!23 = !{!12, !10, i64 368}
!24 = !{!12, !10, i64 360}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!12, !10, i64 256}


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