; 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.bpf_table = type { ptr, i32, i32, i32, i32, ptr }
%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_name = external hidden global ptr, align 8
@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: nounwind uwtable
declare hidden ptr @find_register(ptr noundef) #1

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

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

declare i32 @bpf_map_delete_map(ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @registry_delete_tbl(ptr noundef %0) #1 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #4
  %12 = load ptr, ptr %3, align 8, !tbaa !5
  %13 = call ptr @find_register(ptr noundef %12)
  store ptr %13, ptr %4, align 8, !tbaa !5
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = icmp ne ptr %14, null
  br i1 %15, label %16, label %372

16:                                               ; preds = %1
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.registry_entry, ptr %17, i32 0, i32 1
  %19 = load ptr, ptr %18, align 8, !tbaa !9
  %20 = getelementptr inbounds %struct.bpf_table, ptr %19, i32 0, i32 5
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = call i32 @bpf_map_delete_map(ptr noundef %21)
  br label %23

23:                                               ; preds = %16
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.registry_entry, ptr %24, i32 0, i32 3
  store ptr %25, ptr %5, align 8, !tbaa !5
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.UT_hash_handle, ptr %26, i32 0, i32 1
  %28 = load ptr, ptr %27, align 8, !tbaa !15
  %29 = icmp eq ptr %28, null
  br i1 %29, label %30, label %46

30:                                               ; preds = %23
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.UT_hash_handle, ptr %31, i32 0, i32 2
  %33 = load ptr, ptr %32, align 8, !tbaa !16
  %34 = icmp eq ptr %33, null
  br i1 %34, label %35, label %46

35:                                               ; preds = %30
  %36 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.registry_entry, ptr %36, i32 0, i32 3
  %38 = getelementptr inbounds %struct.UT_hash_handle, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !17
  %40 = getelementptr inbounds %struct.UT_hash_table, ptr %39, i32 0, i32 0
  %41 = load ptr, ptr %40, align 8, !tbaa !18
  call void @free(ptr noundef %41) #4
  %42 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.registry_entry, ptr %42, i32 0, i32 3
  %44 = getelementptr inbounds %struct.UT_hash_handle, ptr %43, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8, !tbaa !17
  call void @free(ptr noundef %45) #4
  store ptr null, ptr @reg_tables_name, align 8, !tbaa !5
  br label %194

46:                                               ; preds = %30, %23
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.registry_entry, ptr %48, i32 0, i32 3
  %50 = getelementptr inbounds %struct.UT_hash_handle, ptr %49, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !17
  %52 = getelementptr inbounds %struct.UT_hash_table, ptr %51, i32 0, i32 4
  %53 = load ptr, ptr %52, align 8, !tbaa !21
  %54 = icmp eq ptr %47, %53
  br i1 %54, label %55, label %71

55:                                               ; preds = %46
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.UT_hash_handle, ptr %56, i32 0, i32 1
  %58 = load ptr, ptr %57, align 8, !tbaa !15
  %59 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.registry_entry, ptr %59, i32 0, i32 3
  %61 = getelementptr inbounds %struct.UT_hash_handle, ptr %60, i32 0, i32 0
  %62 = load ptr, ptr %61, align 8, !tbaa !17
  %63 = getelementptr inbounds %struct.UT_hash_table, ptr %62, i32 0, i32 5
  %64 = load i64, ptr %63, align 8, !tbaa !22
  %65 = getelementptr inbounds i8, ptr %58, i64 %64
  %66 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.registry_entry, ptr %66, i32 0, i32 3
  %68 = getelementptr inbounds %struct.UT_hash_handle, ptr %67, i32 0, i32 0
  %69 = load ptr, ptr %68, align 8, !tbaa !17
  %70 = getelementptr inbounds %struct.UT_hash_table, ptr %69, i32 0, i32 4
  store ptr %65, ptr %70, align 8, !tbaa !21
  br label %71

71:                                               ; preds = %55, %46
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.UT_hash_handle, ptr %72, i32 0, i32 1
  %74 = load ptr, ptr %73, align 8, !tbaa !15
  %75 = icmp ne ptr %74, null
  br i1 %75, label %76, label %91

76:                                               ; preds = %71
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.UT_hash_handle, ptr %77, i32 0, i32 2
  %79 = load ptr, ptr %78, align 8, !tbaa !16
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.UT_hash_handle, ptr %80, i32 0, i32 1
  %82 = load ptr, ptr %81, align 8, !tbaa !15
  %83 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.registry_entry, ptr %83, i32 0, i32 3
  %85 = getelementptr inbounds %struct.UT_hash_handle, ptr %84, i32 0, i32 0
  %86 = load ptr, ptr %85, align 8, !tbaa !17
  %87 = getelementptr inbounds %struct.UT_hash_table, ptr %86, i32 0, i32 5
  %88 = load i64, ptr %87, align 8, !tbaa !22
  %89 = getelementptr inbounds i8, ptr %82, i64 %88
  %90 = getelementptr inbounds %struct.UT_hash_handle, ptr %89, i32 0, i32 2
  store ptr %79, ptr %90, align 8, !tbaa !16
  br label %98

91:                                               ; preds = %71
  br label %92

92:                                               ; preds = %91
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.UT_hash_handle, ptr %93, i32 0, i32 2
  %95 = load ptr, ptr %94, align 8, !tbaa !16
  store ptr %95, ptr @reg_tables_name, align 8, !tbaa !5
  br label %96

96:                                               ; preds = %92
  br label %97

97:                                               ; preds = %96
  br label %98

98:                                               ; preds = %97, %76
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.UT_hash_handle, ptr %99, i32 0, i32 2
  %101 = load ptr, ptr %100, align 8, !tbaa !16
  %102 = icmp ne ptr %101, null
  br i1 %102, label %103, label %118

103:                                              ; preds = %98
  %104 = load ptr, ptr %5, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.UT_hash_handle, ptr %104, i32 0, i32 1
  %106 = load ptr, ptr %105, align 8, !tbaa !15
  %107 = load ptr, ptr %5, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.UT_hash_handle, ptr %107, i32 0, i32 2
  %109 = load ptr, ptr %108, align 8, !tbaa !16
  %110 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.registry_entry, ptr %110, i32 0, i32 3
  %112 = getelementptr inbounds %struct.UT_hash_handle, ptr %111, i32 0, i32 0
  %113 = load ptr, ptr %112, align 8, !tbaa !17
  %114 = getelementptr inbounds %struct.UT_hash_table, ptr %113, i32 0, i32 5
  %115 = load i64, ptr %114, align 8, !tbaa !22
  %116 = getelementptr inbounds i8, ptr %109, i64 %115
  %117 = getelementptr inbounds %struct.UT_hash_handle, ptr %116, i32 0, i32 1
  store ptr %106, ptr %117, align 8, !tbaa !15
  br label %118

118:                                              ; preds = %103, %98
  br label %119

119:                                              ; preds = %118
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.UT_hash_handle, ptr %120, i32 0, i32 7
  %122 = load i32, ptr %121, align 4, !tbaa !23
  %123 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.registry_entry, ptr %123, i32 0, i32 3
  %125 = getelementptr inbounds %struct.UT_hash_handle, ptr %124, i32 0, i32 0
  %126 = load ptr, ptr %125, align 8, !tbaa !17
  %127 = getelementptr inbounds %struct.UT_hash_table, ptr %126, i32 0, i32 1
  %128 = load i32, ptr %127, align 8, !tbaa !24
  %129 = sub i32 %128, 1
  %130 = and i32 %122, %129
  store i32 %130, ptr %6, align 4, !tbaa !25
  br label %131

131:                                              ; preds = %119
  br label %132

132:                                              ; preds = %131
  br label %133

133:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %134 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.registry_entry, ptr %134, i32 0, i32 3
  %136 = getelementptr inbounds %struct.UT_hash_handle, ptr %135, i32 0, i32 0
  %137 = load ptr, ptr %136, align 8, !tbaa !17
  %138 = getelementptr inbounds %struct.UT_hash_table, ptr %137, i32 0, i32 0
  %139 = load ptr, ptr %138, align 8, !tbaa !18
  %140 = load i32, ptr %6, align 4, !tbaa !25
  %141 = zext i32 %140 to i64
  %142 = getelementptr inbounds %struct.UT_hash_bucket, ptr %139, i64 %141
  store ptr %142, ptr %7, align 8, !tbaa !5
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.UT_hash_bucket, ptr %143, i32 0, i32 1
  %145 = load i32, ptr %144, align 8, !tbaa !26
  %146 = add i32 %145, -1
  store i32 %146, ptr %144, align 8, !tbaa !26
  %147 = load ptr, ptr %7, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.UT_hash_bucket, ptr %147, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !28
  %150 = load ptr, ptr %5, align 8, !tbaa !5
  %151 = icmp eq ptr %149, %150
  br i1 %151, label %152, label %158

152:                                              ; preds = %133
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.UT_hash_handle, ptr %153, i32 0, i32 4
  %155 = load ptr, ptr %154, align 8, !tbaa !29
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.UT_hash_bucket, ptr %156, i32 0, i32 0
  store ptr %155, ptr %157, align 8, !tbaa !28
  br label %158

158:                                              ; preds = %152, %133
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.UT_hash_handle, ptr %159, i32 0, i32 3
  %161 = load ptr, ptr %160, align 8, !tbaa !30
  %162 = icmp ne ptr %161, null
  br i1 %162, label %163, label %171

163:                                              ; preds = %158
  %164 = load ptr, ptr %5, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.UT_hash_handle, ptr %164, i32 0, i32 4
  %166 = load ptr, ptr %165, align 8, !tbaa !29
  %167 = load ptr, ptr %5, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.UT_hash_handle, ptr %167, i32 0, i32 3
  %169 = load ptr, ptr %168, align 8, !tbaa !30
  %170 = getelementptr inbounds %struct.UT_hash_handle, ptr %169, i32 0, i32 4
  store ptr %166, ptr %170, align 8, !tbaa !29
  br label %171

171:                                              ; preds = %163, %158
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.UT_hash_handle, ptr %172, i32 0, i32 4
  %174 = load ptr, ptr %173, align 8, !tbaa !29
  %175 = icmp ne ptr %174, null
  br i1 %175, label %176, label %184

176:                                              ; preds = %171
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.UT_hash_handle, ptr %177, i32 0, i32 3
  %179 = load ptr, ptr %178, align 8, !tbaa !30
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.UT_hash_handle, ptr %180, i32 0, i32 4
  %182 = load ptr, ptr %181, align 8, !tbaa !29
  %183 = getelementptr inbounds %struct.UT_hash_handle, ptr %182, i32 0, i32 3
  store ptr %179, ptr %183, align 8, !tbaa !30
  br label %184

184:                                              ; preds = %176, %171
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  br label %185

185:                                              ; preds = %184
  br label %186

186:                                              ; preds = %185
  %187 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.registry_entry, ptr %187, i32 0, i32 3
  %189 = getelementptr inbounds %struct.UT_hash_handle, ptr %188, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !17
  %191 = getelementptr inbounds %struct.UT_hash_table, ptr %190, i32 0, i32 3
  %192 = load i32, ptr %191, align 8, !tbaa !31
  %193 = add i32 %192, -1
  store i32 %193, ptr %191, align 8, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %194

194:                                              ; preds = %186, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  br label %195

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %198 = load ptr, ptr %4, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.registry_entry, ptr %198, i32 0, i32 4
  store ptr %199, ptr %8, align 8, !tbaa !5
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.UT_hash_handle, ptr %200, i32 0, i32 1
  %202 = load ptr, ptr %201, align 8, !tbaa !15
  %203 = icmp eq ptr %202, null
  br i1 %203, label %204, label %220

204:                                              ; preds = %197
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.UT_hash_handle, ptr %205, i32 0, i32 2
  %207 = load ptr, ptr %206, align 8, !tbaa !16
  %208 = icmp eq ptr %207, null
  br i1 %208, label %209, label %220

209:                                              ; preds = %204
  %210 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.registry_entry, ptr %210, i32 0, i32 4
  %212 = getelementptr inbounds %struct.UT_hash_handle, ptr %211, i32 0, i32 0
  %213 = load ptr, ptr %212, align 8, !tbaa !32
  %214 = getelementptr inbounds %struct.UT_hash_table, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !18
  call void @free(ptr noundef %215) #4
  %216 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.registry_entry, ptr %216, i32 0, i32 4
  %218 = getelementptr inbounds %struct.UT_hash_handle, ptr %217, i32 0, i32 0
  %219 = load ptr, ptr %218, align 8, !tbaa !32
  call void @free(ptr noundef %219) #4
  store ptr null, ptr @reg_tables_id, align 8, !tbaa !5
  br label %368

220:                                              ; preds = %204, %197
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.registry_entry, ptr %222, i32 0, i32 4
  %224 = getelementptr inbounds %struct.UT_hash_handle, ptr %223, i32 0, i32 0
  %225 = load ptr, ptr %224, align 8, !tbaa !32
  %226 = getelementptr inbounds %struct.UT_hash_table, ptr %225, i32 0, i32 4
  %227 = load ptr, ptr %226, align 8, !tbaa !21
  %228 = icmp eq ptr %221, %227
  br i1 %228, label %229, label %245

229:                                              ; preds = %220
  %230 = load ptr, ptr %8, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.UT_hash_handle, ptr %230, i32 0, i32 1
  %232 = load ptr, ptr %231, align 8, !tbaa !15
  %233 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.registry_entry, ptr %233, i32 0, i32 4
  %235 = getelementptr inbounds %struct.UT_hash_handle, ptr %234, i32 0, i32 0
  %236 = load ptr, ptr %235, align 8, !tbaa !32
  %237 = getelementptr inbounds %struct.UT_hash_table, ptr %236, i32 0, i32 5
  %238 = load i64, ptr %237, align 8, !tbaa !22
  %239 = getelementptr inbounds i8, ptr %232, i64 %238
  %240 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.registry_entry, ptr %240, i32 0, i32 4
  %242 = getelementptr inbounds %struct.UT_hash_handle, ptr %241, i32 0, i32 0
  %243 = load ptr, ptr %242, align 8, !tbaa !32
  %244 = getelementptr inbounds %struct.UT_hash_table, ptr %243, i32 0, i32 4
  store ptr %239, ptr %244, align 8, !tbaa !21
  br label %245

245:                                              ; preds = %229, %220
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.UT_hash_handle, ptr %246, i32 0, i32 1
  %248 = load ptr, ptr %247, align 8, !tbaa !15
  %249 = icmp ne ptr %248, null
  br i1 %249, label %250, label %265

250:                                              ; preds = %245
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.UT_hash_handle, ptr %251, i32 0, i32 2
  %253 = load ptr, ptr %252, align 8, !tbaa !16
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.UT_hash_handle, ptr %254, i32 0, i32 1
  %256 = load ptr, ptr %255, align 8, !tbaa !15
  %257 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.registry_entry, ptr %257, i32 0, i32 4
  %259 = getelementptr inbounds %struct.UT_hash_handle, ptr %258, i32 0, i32 0
  %260 = load ptr, ptr %259, align 8, !tbaa !32
  %261 = getelementptr inbounds %struct.UT_hash_table, ptr %260, i32 0, i32 5
  %262 = load i64, ptr %261, align 8, !tbaa !22
  %263 = getelementptr inbounds i8, ptr %256, i64 %262
  %264 = getelementptr inbounds %struct.UT_hash_handle, ptr %263, i32 0, i32 2
  store ptr %253, ptr %264, align 8, !tbaa !16
  br label %272

265:                                              ; preds = %245
  br label %266

266:                                              ; preds = %265
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.UT_hash_handle, ptr %267, i32 0, i32 2
  %269 = load ptr, ptr %268, align 8, !tbaa !16
  store ptr %269, ptr @reg_tables_id, align 8, !tbaa !5
  br label %270

270:                                              ; preds = %266
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271, %250
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.UT_hash_handle, ptr %273, i32 0, i32 2
  %275 = load ptr, ptr %274, align 8, !tbaa !16
  %276 = icmp ne ptr %275, null
  br i1 %276, label %277, label %292

277:                                              ; preds = %272
  %278 = load ptr, ptr %8, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.UT_hash_handle, ptr %278, i32 0, i32 1
  %280 = load ptr, ptr %279, align 8, !tbaa !15
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.UT_hash_handle, ptr %281, i32 0, i32 2
  %283 = load ptr, ptr %282, align 8, !tbaa !16
  %284 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.registry_entry, ptr %284, i32 0, i32 4
  %286 = getelementptr inbounds %struct.UT_hash_handle, ptr %285, i32 0, i32 0
  %287 = load ptr, ptr %286, align 8, !tbaa !32
  %288 = getelementptr inbounds %struct.UT_hash_table, ptr %287, i32 0, i32 5
  %289 = load i64, ptr %288, align 8, !tbaa !22
  %290 = getelementptr inbounds i8, ptr %283, i64 %289
  %291 = getelementptr inbounds %struct.UT_hash_handle, ptr %290, i32 0, i32 1
  store ptr %280, ptr %291, align 8, !tbaa !15
  br label %292

292:                                              ; preds = %277, %272
  br label %293

293:                                              ; preds = %292
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.UT_hash_handle, ptr %294, i32 0, i32 7
  %296 = load i32, ptr %295, align 4, !tbaa !23
  %297 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.registry_entry, ptr %297, i32 0, i32 4
  %299 = getelementptr inbounds %struct.UT_hash_handle, ptr %298, i32 0, i32 0
  %300 = load ptr, ptr %299, align 8, !tbaa !32
  %301 = getelementptr inbounds %struct.UT_hash_table, ptr %300, i32 0, i32 1
  %302 = load i32, ptr %301, align 8, !tbaa !24
  %303 = sub i32 %302, 1
  %304 = and i32 %296, %303
  store i32 %304, ptr %9, align 4, !tbaa !25
  br label %305

305:                                              ; preds = %293
  br label %306

306:                                              ; preds = %305
  br label %307

307:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %308 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.registry_entry, ptr %308, i32 0, i32 4
  %310 = getelementptr inbounds %struct.UT_hash_handle, ptr %309, i32 0, i32 0
  %311 = load ptr, ptr %310, align 8, !tbaa !32
  %312 = getelementptr inbounds %struct.UT_hash_table, ptr %311, i32 0, i32 0
  %313 = load ptr, ptr %312, align 8, !tbaa !18
  %314 = load i32, ptr %9, align 4, !tbaa !25
  %315 = zext i32 %314 to i64
  %316 = getelementptr inbounds %struct.UT_hash_bucket, ptr %313, i64 %315
  store ptr %316, ptr %10, align 8, !tbaa !5
  %317 = load ptr, ptr %10, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.UT_hash_bucket, ptr %317, i32 0, i32 1
  %319 = load i32, ptr %318, align 8, !tbaa !26
  %320 = add i32 %319, -1
  store i32 %320, ptr %318, align 8, !tbaa !26
  %321 = load ptr, ptr %10, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.UT_hash_bucket, ptr %321, i32 0, i32 0
  %323 = load ptr, ptr %322, align 8, !tbaa !28
  %324 = load ptr, ptr %8, align 8, !tbaa !5
  %325 = icmp eq ptr %323, %324
  br i1 %325, label %326, label %332

326:                                              ; preds = %307
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.UT_hash_handle, ptr %327, i32 0, i32 4
  %329 = load ptr, ptr %328, align 8, !tbaa !29
  %330 = load ptr, ptr %10, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.UT_hash_bucket, ptr %330, i32 0, i32 0
  store ptr %329, ptr %331, align 8, !tbaa !28
  br label %332

332:                                              ; preds = %326, %307
  %333 = load ptr, ptr %8, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.UT_hash_handle, ptr %333, i32 0, i32 3
  %335 = load ptr, ptr %334, align 8, !tbaa !30
  %336 = icmp ne ptr %335, null
  br i1 %336, label %337, label %345

337:                                              ; preds = %332
  %338 = load ptr, ptr %8, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.UT_hash_handle, ptr %338, i32 0, i32 4
  %340 = load ptr, ptr %339, align 8, !tbaa !29
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.UT_hash_handle, ptr %341, i32 0, i32 3
  %343 = load ptr, ptr %342, align 8, !tbaa !30
  %344 = getelementptr inbounds %struct.UT_hash_handle, ptr %343, i32 0, i32 4
  store ptr %340, ptr %344, align 8, !tbaa !29
  br label %345

345:                                              ; preds = %337, %332
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.UT_hash_handle, ptr %346, i32 0, i32 4
  %348 = load ptr, ptr %347, align 8, !tbaa !29
  %349 = icmp ne ptr %348, null
  br i1 %349, label %350, label %358

350:                                              ; preds = %345
  %351 = load ptr, ptr %8, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.UT_hash_handle, ptr %351, i32 0, i32 3
  %353 = load ptr, ptr %352, align 8, !tbaa !30
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.UT_hash_handle, ptr %354, i32 0, i32 4
  %356 = load ptr, ptr %355, align 8, !tbaa !29
  %357 = getelementptr inbounds %struct.UT_hash_handle, ptr %356, i32 0, i32 3
  store ptr %353, ptr %357, align 8, !tbaa !30
  br label %358

358:                                              ; preds = %350, %345
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  br label %359

359:                                              ; preds = %358
  br label %360

360:                                              ; preds = %359
  %361 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.registry_entry, ptr %361, i32 0, i32 4
  %363 = getelementptr inbounds %struct.UT_hash_handle, ptr %362, i32 0, i32 0
  %364 = load ptr, ptr %363, align 8, !tbaa !32
  %365 = getelementptr inbounds %struct.UT_hash_table, ptr %364, i32 0, i32 3
  %366 = load i32, ptr %365, align 8, !tbaa !31
  %367 = add i32 %366, -1
  store i32 %367, ptr %365, align 8, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %368

368:                                              ; preds = %360, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  br label %369

369:                                              ; preds = %368
  br label %370

370:                                              ; preds = %369
  %371 = load ptr, ptr %4, align 8, !tbaa !5
  call void @free(ptr noundef %371) #4
  store i32 0, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %373

372:                                              ; preds = %1
  store i32 1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %373

373:                                              ; preds = %372, %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  %374 = load i32, ptr %2, align 4
  ret i32 %374
}

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

!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, !6, i64 256}
!10 = !{!"", !7, i64 0, !6, i64 256, !11, i64 264, !12, i64 272, !12, i64 328}
!11 = !{!"int", !7, i64 0}
!12 = !{!"UT_hash_handle", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !11, i64 52}
!13 = !{!14, !6, i64 24}
!14 = !{!"bpf_table", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !6, i64 24}
!15 = !{!12, !6, i64 8}
!16 = !{!12, !6, i64 16}
!17 = !{!10, !6, i64 272}
!18 = !{!19, !6, i64 0}
!19 = !{!"UT_hash_table", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !6, i64 24, !20, i64 32, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56}
!20 = !{!"long", !7, i64 0}
!21 = !{!19, !6, i64 24}
!22 = !{!19, !20, i64 32}
!23 = !{!12, !11, i64 52}
!24 = !{!19, !11, i64 8}
!25 = !{!11, !11, i64 0}
!26 = !{!27, !11, i64 8}
!27 = !{!"UT_hash_bucket", !6, i64 0, !11, i64 8, !11, i64 12}
!28 = !{!27, !6, i64 0}
!29 = !{!12, !6, i64 32}
!30 = !{!12, !6, i64 24}
!31 = !{!19, !11, i64 16}
!32 = !{!10, !6, i64 328}


; 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_name = external hidden local_unnamed_addr global ptr, align 8
@reg_tables_id = external hidden local_unnamed_addr global ptr, align 8

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

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

declare i32 @bpf_map_delete_map(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @registry_delete_tbl(ptr noundef %0) local_unnamed_addr #0 {
  %2 = tail call ptr @find_register(ptr noundef %0)
  %.not = icmp eq ptr %2, null
  br i1 %.not, label %169, label %3

3:                                                ; preds = %1
  %4 = getelementptr inbounds i8, ptr %2, i64 256
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %5, i64 24
  %7 = load ptr, ptr %6, align 8, !tbaa !12
  %8 = tail call i32 @bpf_map_delete_map(ptr noundef %7) #3
  %9 = getelementptr inbounds i8, ptr %2, i64 272
  %10 = getelementptr inbounds i8, ptr %2, i64 280
  %11 = load ptr, ptr %10, align 8, !tbaa !14
  %12 = icmp eq ptr %11, null
  br i1 %12, label %13, label %25

13:                                               ; preds = %3
  %14 = getelementptr inbounds i8, ptr %2, i64 288
  %15 = load ptr, ptr %14, align 8, !tbaa !15
  %16 = icmp eq ptr %15, null
  br i1 %16, label %17, label %25

17:                                               ; preds = %13
  %18 = load ptr, ptr @reg_tables_name, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %18, i64 272
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = load ptr, ptr %20, align 8, !tbaa !18
  tail call void @free(ptr noundef %21) #3
  %22 = load ptr, ptr @reg_tables_name, align 8, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %22, i64 272
  %24 = load ptr, ptr %23, align 8, !tbaa !17
  tail call void @free(ptr noundef %24) #3
  store ptr null, ptr @reg_tables_name, align 8, !tbaa !16
  br label %88

25:                                               ; preds = %13, %3
  %26 = load ptr, ptr @reg_tables_name, align 8, !tbaa !16
  %27 = getelementptr inbounds i8, ptr %26, i64 272
  %28 = load ptr, ptr %27, align 8, !tbaa !17
  %29 = getelementptr inbounds i8, ptr %28, i64 24
  %30 = load ptr, ptr %29, align 8, !tbaa !21
  %31 = icmp eq ptr %9, %30
  br i1 %31, label %32, label %36

32:                                               ; preds = %25
  %33 = getelementptr inbounds i8, ptr %28, i64 32
  %34 = load i64, ptr %33, align 8, !tbaa !22
  %35 = getelementptr inbounds i8, ptr %11, i64 %34
  store ptr %35, ptr %29, align 8, !tbaa !21
  br label %36

36:                                               ; preds = %32, %25
  %37 = getelementptr inbounds i8, ptr %2, i64 288
  %38 = load ptr, ptr %37, align 8, !tbaa !15
  br i1 %12, label %44, label %39

39:                                               ; preds = %36
  %40 = getelementptr inbounds i8, ptr %28, i64 32
  %41 = load i64, ptr %40, align 8, !tbaa !22
  %42 = getelementptr inbounds i8, ptr %11, i64 %41
  %43 = getelementptr inbounds i8, ptr %42, i64 16
  store ptr %38, ptr %43, align 8, !tbaa !15
  %.pre73.pre = load ptr, ptr @reg_tables_name, align 8, !tbaa !16
  br label %45

44:                                               ; preds = %36
  store ptr %38, ptr @reg_tables_name, align 8, !tbaa !16
  br label %45

45:                                               ; preds = %44, %39
  %.pre73 = phi ptr [ %38, %44 ], [ %.pre73.pre, %39 ]
  %.not66 = icmp eq ptr %38, null
  br i1 %.not66, label %53, label %46

46:                                               ; preds = %45
  %47 = getelementptr inbounds i8, ptr %.pre73, i64 272
  %48 = load ptr, ptr %47, align 8, !tbaa !17
  %49 = getelementptr inbounds i8, ptr %48, i64 32
  %50 = load i64, ptr %49, align 8, !tbaa !22
  %51 = getelementptr inbounds i8, ptr %38, i64 %50
  %52 = getelementptr inbounds i8, ptr %51, i64 8
  store ptr %11, ptr %52, align 8, !tbaa !14
  %.pre = load ptr, ptr @reg_tables_name, align 8, !tbaa !16
  br label %53

53:                                               ; preds = %45, %46
  %54 = phi ptr [ %.pre73, %45 ], [ %.pre, %46 ]
  %55 = getelementptr inbounds i8, ptr %2, i64 324
  %56 = load i32, ptr %55, align 4, !tbaa !23
  %57 = getelementptr inbounds i8, ptr %54, i64 272
  %58 = load ptr, ptr %57, align 8, !tbaa !17
  %59 = getelementptr inbounds i8, ptr %58, i64 8
  %60 = load i32, ptr %59, align 8, !tbaa !24
  %61 = add i32 %60, -1
  %62 = and i32 %61, %56
  %63 = load ptr, ptr %58, align 8, !tbaa !18
  %64 = zext i32 %62 to i64
  %65 = getelementptr inbounds %struct.UT_hash_bucket, ptr %63, i64 %64
  %66 = getelementptr inbounds i8, ptr %65, i64 8
  %67 = load i32, ptr %66, align 8, !tbaa !25
  %68 = add i32 %67, -1
  store i32 %68, ptr %66, align 8, !tbaa !25
  %69 = load ptr, ptr %65, align 8, !tbaa !27
  %70 = icmp eq ptr %69, %9
  br i1 %70, label %71, label %74

71:                                               ; preds = %53
  %72 = getelementptr inbounds i8, ptr %2, i64 304
  %73 = load ptr, ptr %72, align 8, !tbaa !28
  store ptr %73, ptr %65, align 8, !tbaa !27
  br label %74

74:                                               ; preds = %71, %53
  %75 = getelementptr inbounds i8, ptr %2, i64 296
  %76 = load ptr, ptr %75, align 8, !tbaa !29
  %.not67 = icmp eq ptr %76, null
  %.phi.trans.insert = getelementptr inbounds i8, ptr %2, i64 304
  %.pre74 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !28
  br i1 %.not67, label %._crit_edge, label %77

77:                                               ; preds = %74
  %78 = getelementptr inbounds i8, ptr %76, i64 32
  store ptr %.pre74, ptr %78, align 8, !tbaa !28
  br label %._crit_edge

._crit_edge:                                      ; preds = %74, %77
  %.not68 = icmp eq ptr %.pre74, null
  br i1 %.not68, label %81, label %79

79:                                               ; preds = %._crit_edge
  %80 = getelementptr inbounds i8, ptr %.pre74, i64 24
  store ptr %76, ptr %80, align 8, !tbaa !29
  br label %81

81:                                               ; preds = %79, %._crit_edge
  %82 = load ptr, ptr @reg_tables_name, align 8, !tbaa !16
  %83 = getelementptr inbounds i8, ptr %82, i64 272
  %84 = load ptr, ptr %83, align 8, !tbaa !17
  %85 = getelementptr inbounds i8, ptr %84, i64 16
  %86 = load i32, ptr %85, align 8, !tbaa !30
  %87 = add i32 %86, -1
  store i32 %87, ptr %85, align 8, !tbaa !30
  br label %88

88:                                               ; preds = %81, %17
  %89 = getelementptr inbounds i8, ptr %2, i64 328
  %90 = getelementptr inbounds i8, ptr %2, i64 336
  %91 = load ptr, ptr %90, align 8, !tbaa !14
  %92 = icmp eq ptr %91, null
  br i1 %92, label %93, label %105

93:                                               ; preds = %88
  %94 = getelementptr inbounds i8, ptr %2, i64 344
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  %96 = icmp eq ptr %95, null
  br i1 %96, label %97, label %105

97:                                               ; preds = %93
  %98 = load ptr, ptr @reg_tables_id, align 8, !tbaa !16
  %99 = getelementptr inbounds i8, ptr %98, i64 328
  %100 = load ptr, ptr %99, align 8, !tbaa !31
  %101 = load ptr, ptr %100, align 8, !tbaa !18
  tail call void @free(ptr noundef %101) #3
  %102 = load ptr, ptr @reg_tables_id, align 8, !tbaa !16
  %103 = getelementptr inbounds i8, ptr %102, i64 328
  %104 = load ptr, ptr %103, align 8, !tbaa !31
  tail call void @free(ptr noundef %104) #3
  store ptr null, ptr @reg_tables_id, align 8, !tbaa !16
  br label %168

105:                                              ; preds = %93, %88
  %106 = load ptr, ptr @reg_tables_id, align 8, !tbaa !16
  %107 = getelementptr inbounds i8, ptr %106, i64 328
  %108 = load ptr, ptr %107, align 8, !tbaa !31
  %109 = getelementptr inbounds i8, ptr %108, i64 24
  %110 = load ptr, ptr %109, align 8, !tbaa !21
  %111 = icmp eq ptr %89, %110
  br i1 %111, label %112, label %116

112:                                              ; preds = %105
  %113 = getelementptr inbounds i8, ptr %108, i64 32
  %114 = load i64, ptr %113, align 8, !tbaa !22
  %115 = getelementptr inbounds i8, ptr %91, i64 %114
  store ptr %115, ptr %109, align 8, !tbaa !21
  br label %116

116:                                              ; preds = %112, %105
  %117 = getelementptr inbounds i8, ptr %2, i64 344
  %118 = load ptr, ptr %117, align 8, !tbaa !15
  br i1 %92, label %124, label %119

119:                                              ; preds = %116
  %120 = getelementptr inbounds i8, ptr %108, i64 32
  %121 = load i64, ptr %120, align 8, !tbaa !22
  %122 = getelementptr inbounds i8, ptr %91, i64 %121
  %123 = getelementptr inbounds i8, ptr %122, i64 16
  store ptr %118, ptr %123, align 8, !tbaa !15
  %.pre76.pre = load ptr, ptr @reg_tables_id, align 8, !tbaa !16
  br label %125

124:                                              ; preds = %116
  store ptr %118, ptr @reg_tables_id, align 8, !tbaa !16
  br label %125

125:                                              ; preds = %124, %119
  %.pre76 = phi ptr [ %118, %124 ], [ %.pre76.pre, %119 ]
  %.not70 = icmp eq ptr %118, null
  br i1 %.not70, label %133, label %126

126:                                              ; preds = %125
  %127 = getelementptr inbounds i8, ptr %.pre76, i64 328
  %128 = load ptr, ptr %127, align 8, !tbaa !31
  %129 = getelementptr inbounds i8, ptr %128, i64 32
  %130 = load i64, ptr %129, align 8, !tbaa !22
  %131 = getelementptr inbounds i8, ptr %118, i64 %130
  %132 = getelementptr inbounds i8, ptr %131, i64 8
  store ptr %91, ptr %132, align 8, !tbaa !14
  %.pre75 = load ptr, ptr @reg_tables_id, align 8, !tbaa !16
  br label %133

133:                                              ; preds = %125, %126
  %134 = phi ptr [ %.pre76, %125 ], [ %.pre75, %126 ]
  %135 = getelementptr inbounds i8, ptr %2, i64 380
  %136 = load i32, ptr %135, align 4, !tbaa !23
  %137 = getelementptr inbounds i8, ptr %134, i64 328
  %138 = load ptr, ptr %137, align 8, !tbaa !31
  %139 = getelementptr inbounds i8, ptr %138, i64 8
  %140 = load i32, ptr %139, align 8, !tbaa !24
  %141 = add i32 %140, -1
  %142 = and i32 %141, %136
  %143 = load ptr, ptr %138, align 8, !tbaa !18
  %144 = zext i32 %142 to i64
  %145 = getelementptr inbounds %struct.UT_hash_bucket, ptr %143, i64 %144
  %146 = getelementptr inbounds i8, ptr %145, i64 8
  %147 = load i32, ptr %146, align 8, !tbaa !25
  %148 = add i32 %147, -1
  store i32 %148, ptr %146, align 8, !tbaa !25
  %149 = load ptr, ptr %145, align 8, !tbaa !27
  %150 = icmp eq ptr %149, %89
  br i1 %150, label %151, label %154

151:                                              ; preds = %133
  %152 = getelementptr inbounds i8, ptr %2, i64 360
  %153 = load ptr, ptr %152, align 8, !tbaa !28
  store ptr %153, ptr %145, align 8, !tbaa !27
  br label %154

154:                                              ; preds = %151, %133
  %155 = getelementptr inbounds i8, ptr %2, i64 352
  %156 = load ptr, ptr %155, align 8, !tbaa !29
  %.not71 = icmp eq ptr %156, null
  %.phi.trans.insert78 = getelementptr inbounds i8, ptr %2, i64 360
  %.pre79 = load ptr, ptr %.phi.trans.insert78, align 8, !tbaa !28
  br i1 %.not71, label %._crit_edge77, label %157

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %156, i64 32
  store ptr %.pre79, ptr %158, align 8, !tbaa !28
  br label %._crit_edge77

._crit_edge77:                                    ; preds = %154, %157
  %.not72 = icmp eq ptr %.pre79, null
  br i1 %.not72, label %161, label %159

159:                                              ; preds = %._crit_edge77
  %160 = getelementptr inbounds i8, ptr %.pre79, i64 24
  store ptr %156, ptr %160, align 8, !tbaa !29
  br label %161

161:                                              ; preds = %159, %._crit_edge77
  %162 = load ptr, ptr @reg_tables_id, align 8, !tbaa !16
  %163 = getelementptr inbounds i8, ptr %162, i64 328
  %164 = load ptr, ptr %163, align 8, !tbaa !31
  %165 = getelementptr inbounds i8, ptr %164, i64 16
  %166 = load i32, ptr %165, align 8, !tbaa !30
  %167 = add i32 %166, -1
  store i32 %167, ptr %165, align 8, !tbaa !30
  br label %168

168:                                              ; preds = %161, %97
  tail call void @free(ptr noundef nonnull %2) #3
  br label %169

169:                                              ; preds = %1, %168
  %.0 = phi i32 [ 0, %168 ], [ 1, %1 ]
  ret i32 %.0
}

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 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !9, i64 256}
!6 = !{!"", !7, i64 0, !9, i64 256, !10, i64 264, !11, i64 272, !11, i64 328}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"UT_hash_handle", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !10, i64 48, !10, i64 52}
!12 = !{!13, !9, i64 24}
!13 = !{!"bpf_table", !9, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !9, i64 24}
!14 = !{!11, !9, i64 8}
!15 = !{!11, !9, i64 16}
!16 = !{!9, !9, i64 0}
!17 = !{!6, !9, i64 272}
!18 = !{!19, !9, i64 0}
!19 = !{!"UT_hash_table", !9, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !9, i64 24, !20, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56}
!20 = !{!"long", !7, i64 0}
!21 = !{!19, !9, i64 24}
!22 = !{!19, !20, i64 32}
!23 = !{!11, !10, i64 52}
!24 = !{!19, !10, i64 8}
!25 = !{!26, !10, i64 8}
!26 = !{!"UT_hash_bucket", !9, i64 0, !10, i64 8, !10, i64 12}
!27 = !{!26, !9, i64 0}
!28 = !{!11, !9, i64 32}
!29 = !{!11, !9, i64 24}
!30 = !{!19, !10, i64 16}
!31 = !{!6, !9, i64 328}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass