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

@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: 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) #1

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

12:                                               ; preds = %0
  %13 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.registry_entry, ptr %13, i32 0, i32 3
  %15 = getelementptr inbounds %struct.UT_hash_handle, ptr %14, i32 0, i32 2
  %16 = load ptr, ptr %15, align 8, !tbaa !9
  br label %18

17:                                               ; preds = %0
  br label %18

18:                                               ; preds = %17, %12
  %19 = phi ptr [ %16, %12 ], [ null, %17 ]
  store ptr %19, ptr %2, align 8, !tbaa !5
  br label %20

20:                                               ; preds = %215, %18
  %21 = load ptr, ptr %1, align 8, !tbaa !5
  %22 = icmp ne ptr %21, null
  br i1 %22, label %23, label %217

23:                                               ; preds = %20
  br label %24

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

31:                                               ; preds = %24
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.UT_hash_handle, ptr %32, i32 0, i32 2
  %34 = load ptr, ptr %33, align 8, !tbaa !14
  %35 = icmp eq ptr %34, null
  br i1 %35, label %36, label %47

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

47:                                               ; preds = %31, %24
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.registry_entry, ptr %49, i32 0, i32 3
  %51 = getelementptr inbounds %struct.UT_hash_handle, ptr %50, i32 0, i32 0
  %52 = load ptr, ptr %51, align 8, !tbaa !15
  %53 = getelementptr inbounds %struct.UT_hash_table, ptr %52, i32 0, i32 4
  %54 = load ptr, ptr %53, align 8, !tbaa !19
  %55 = icmp eq ptr %48, %54
  br i1 %55, label %56, label %72

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

72:                                               ; preds = %56, %47
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.UT_hash_handle, ptr %73, i32 0, i32 1
  %75 = load ptr, ptr %74, align 8, !tbaa !13
  %76 = icmp ne ptr %75, null
  br i1 %76, label %77, label %92

77:                                               ; preds = %72
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.UT_hash_handle, ptr %78, i32 0, i32 2
  %80 = load ptr, ptr %79, align 8, !tbaa !14
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.UT_hash_handle, ptr %81, i32 0, i32 1
  %83 = load ptr, ptr %82, align 8, !tbaa !13
  %84 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.registry_entry, ptr %84, i32 0, i32 3
  %86 = getelementptr inbounds %struct.UT_hash_handle, ptr %85, i32 0, i32 0
  %87 = load ptr, ptr %86, align 8, !tbaa !15
  %88 = getelementptr inbounds %struct.UT_hash_table, ptr %87, i32 0, i32 5
  %89 = load i64, ptr %88, align 8, !tbaa !20
  %90 = getelementptr inbounds i8, ptr %83, i64 %89
  %91 = getelementptr inbounds %struct.UT_hash_handle, ptr %90, i32 0, i32 2
  store ptr %80, ptr %91, align 8, !tbaa !14
  br label %99

92:                                               ; preds = %72
  br label %93

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

97:                                               ; preds = %93
  br label %98

98:                                               ; preds = %97
  br label %99

99:                                               ; preds = %98, %77
  %100 = load ptr, ptr %3, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.UT_hash_handle, ptr %100, i32 0, i32 2
  %102 = load ptr, ptr %101, align 8, !tbaa !14
  %103 = icmp ne ptr %102, null
  br i1 %103, label %104, label %119

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

119:                                              ; preds = %104, %99
  br label %120

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

132:                                              ; preds = %120
  br label %133

133:                                              ; preds = %132
  br label %134

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

153:                                              ; preds = %134
  %154 = load ptr, ptr %3, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.UT_hash_handle, ptr %154, i32 0, i32 4
  %156 = load ptr, ptr %155, align 8, !tbaa !27
  %157 = load ptr, ptr %5, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.UT_hash_bucket, ptr %157, i32 0, i32 0
  store ptr %156, ptr %158, align 8, !tbaa !26
  br label %159

159:                                              ; preds = %153, %134
  %160 = load ptr, ptr %3, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.UT_hash_handle, ptr %160, i32 0, i32 3
  %162 = load ptr, ptr %161, align 8, !tbaa !28
  %163 = icmp ne ptr %162, null
  br i1 %163, label %164, label %172

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

172:                                              ; preds = %164, %159
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.UT_hash_handle, ptr %173, i32 0, i32 4
  %175 = load ptr, ptr %174, align 8, !tbaa !27
  %176 = icmp ne ptr %175, null
  br i1 %176, label %177, label %185

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

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

186:                                              ; preds = %185
  br label %187

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

195:                                              ; preds = %187, %36
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  %198 = load ptr, ptr %1, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.registry_entry, ptr %198, i32 0, i32 1
  %200 = load ptr, ptr %199, align 8, !tbaa !30
  %201 = getelementptr inbounds %struct.bpf_table, ptr %200, i32 0, i32 5
  %202 = load ptr, ptr %201, align 8, !tbaa !31
  %203 = call i32 @bpf_map_delete_map(ptr noundef %202)
  %204 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %204) #4
  br label %205

205:                                              ; preds = %197
  %206 = load ptr, ptr %2, align 8, !tbaa !5
  store ptr %206, ptr %1, align 8, !tbaa !5
  %207 = load ptr, ptr %2, align 8, !tbaa !5
  %208 = icmp ne ptr %207, null
  br i1 %208, label %209, label %214

209:                                              ; preds = %205
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.registry_entry, ptr %210, i32 0, i32 3
  %212 = getelementptr inbounds %struct.UT_hash_handle, ptr %211, i32 0, i32 2
  %213 = load ptr, ptr %212, align 8, !tbaa !9
  br label %215

214:                                              ; preds = %205
  br label %215

215:                                              ; preds = %214, %209
  %216 = phi ptr [ %213, %209 ], [ null, %214 ]
  store ptr %216, ptr %2, align 8, !tbaa !5
  br label %20, !llvm.loop !33

217:                                              ; preds = %20
  store ptr null, ptr %1, align 8, !tbaa !5
  store ptr null, ptr %2, align 8, !tbaa !5
  %218 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  store ptr %218, ptr %1, align 8, !tbaa !5
  %219 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %220 = icmp ne ptr %219, null
  br i1 %220, label %221, label %226

221:                                              ; preds = %217
  %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 2
  %225 = load ptr, ptr %224, align 8, !tbaa !35
  br label %227

226:                                              ; preds = %217
  br label %227

227:                                              ; preds = %226, %221
  %228 = phi ptr [ %225, %221 ], [ null, %226 ]
  store ptr %228, ptr %2, align 8, !tbaa !5
  br label %229

229:                                              ; preds = %417, %227
  %230 = load ptr, ptr %1, align 8, !tbaa !5
  %231 = icmp ne ptr %230, null
  br i1 %231, label %232, label %419

232:                                              ; preds = %229
  br label %233

233:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %234 = load ptr, ptr %1, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.registry_entry, ptr %234, i32 0, i32 4
  store ptr %235, ptr %6, align 8, !tbaa !5
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.UT_hash_handle, ptr %236, i32 0, i32 1
  %238 = load ptr, ptr %237, align 8, !tbaa !13
  %239 = icmp eq ptr %238, null
  br i1 %239, label %240, label %256

240:                                              ; preds = %233
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.UT_hash_handle, ptr %241, i32 0, i32 2
  %243 = load ptr, ptr %242, align 8, !tbaa !14
  %244 = icmp eq ptr %243, null
  br i1 %244, label %245, label %256

245:                                              ; preds = %240
  %246 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.registry_entry, ptr %246, i32 0, i32 4
  %248 = getelementptr inbounds %struct.UT_hash_handle, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !36
  %250 = getelementptr inbounds %struct.UT_hash_table, ptr %249, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !16
  call void @free(ptr noundef %251) #4
  %252 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.registry_entry, ptr %252, i32 0, i32 4
  %254 = getelementptr inbounds %struct.UT_hash_handle, ptr %253, i32 0, i32 0
  %255 = load ptr, ptr %254, align 8, !tbaa !36
  call void @free(ptr noundef %255) #4
  store ptr null, ptr @reg_tables_id, align 8, !tbaa !5
  br label %404

256:                                              ; preds = %240, %233
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %257 = load ptr, ptr %6, align 8, !tbaa !5
  %258 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.registry_entry, ptr %258, i32 0, i32 4
  %260 = getelementptr inbounds %struct.UT_hash_handle, ptr %259, i32 0, i32 0
  %261 = load ptr, ptr %260, align 8, !tbaa !36
  %262 = getelementptr inbounds %struct.UT_hash_table, ptr %261, i32 0, i32 4
  %263 = load ptr, ptr %262, align 8, !tbaa !19
  %264 = icmp eq ptr %257, %263
  br i1 %264, label %265, label %281

265:                                              ; preds = %256
  %266 = load ptr, ptr %6, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.UT_hash_handle, ptr %266, i32 0, i32 1
  %268 = load ptr, ptr %267, align 8, !tbaa !13
  %269 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.registry_entry, ptr %269, i32 0, i32 4
  %271 = getelementptr inbounds %struct.UT_hash_handle, ptr %270, i32 0, i32 0
  %272 = load ptr, ptr %271, align 8, !tbaa !36
  %273 = getelementptr inbounds %struct.UT_hash_table, ptr %272, i32 0, i32 5
  %274 = load i64, ptr %273, align 8, !tbaa !20
  %275 = getelementptr inbounds i8, ptr %268, i64 %274
  %276 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.registry_entry, ptr %276, i32 0, i32 4
  %278 = getelementptr inbounds %struct.UT_hash_handle, ptr %277, i32 0, i32 0
  %279 = load ptr, ptr %278, align 8, !tbaa !36
  %280 = getelementptr inbounds %struct.UT_hash_table, ptr %279, i32 0, i32 4
  store ptr %275, ptr %280, align 8, !tbaa !19
  br label %281

281:                                              ; preds = %265, %256
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.UT_hash_handle, ptr %282, i32 0, i32 1
  %284 = load ptr, ptr %283, align 8, !tbaa !13
  %285 = icmp ne ptr %284, null
  br i1 %285, label %286, label %301

286:                                              ; preds = %281
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.UT_hash_handle, ptr %287, i32 0, i32 2
  %289 = load ptr, ptr %288, align 8, !tbaa !14
  %290 = load ptr, ptr %6, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.UT_hash_handle, ptr %290, i32 0, i32 1
  %292 = load ptr, ptr %291, align 8, !tbaa !13
  %293 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.registry_entry, ptr %293, i32 0, i32 4
  %295 = getelementptr inbounds %struct.UT_hash_handle, ptr %294, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8, !tbaa !36
  %297 = getelementptr inbounds %struct.UT_hash_table, ptr %296, i32 0, i32 5
  %298 = load i64, ptr %297, align 8, !tbaa !20
  %299 = getelementptr inbounds i8, ptr %292, i64 %298
  %300 = getelementptr inbounds %struct.UT_hash_handle, ptr %299, i32 0, i32 2
  store ptr %289, ptr %300, align 8, !tbaa !14
  br label %308

301:                                              ; preds = %281
  br label %302

302:                                              ; preds = %301
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.UT_hash_handle, ptr %303, i32 0, i32 2
  %305 = load ptr, ptr %304, align 8, !tbaa !14
  store ptr %305, ptr @reg_tables_id, align 8, !tbaa !5
  br label %306

306:                                              ; preds = %302
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307, %286
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.UT_hash_handle, ptr %309, i32 0, i32 2
  %311 = load ptr, ptr %310, align 8, !tbaa !14
  %312 = icmp ne ptr %311, null
  br i1 %312, label %313, label %328

313:                                              ; preds = %308
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.UT_hash_handle, ptr %314, i32 0, i32 1
  %316 = load ptr, ptr %315, align 8, !tbaa !13
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.UT_hash_handle, ptr %317, i32 0, i32 2
  %319 = load ptr, ptr %318, align 8, !tbaa !14
  %320 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.registry_entry, ptr %320, i32 0, i32 4
  %322 = getelementptr inbounds %struct.UT_hash_handle, ptr %321, i32 0, i32 0
  %323 = load ptr, ptr %322, align 8, !tbaa !36
  %324 = getelementptr inbounds %struct.UT_hash_table, ptr %323, i32 0, i32 5
  %325 = load i64, ptr %324, align 8, !tbaa !20
  %326 = getelementptr inbounds i8, ptr %319, i64 %325
  %327 = getelementptr inbounds %struct.UT_hash_handle, ptr %326, i32 0, i32 1
  store ptr %316, ptr %327, align 8, !tbaa !13
  br label %328

328:                                              ; preds = %313, %308
  br label %329

329:                                              ; preds = %328
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.UT_hash_handle, ptr %330, i32 0, i32 7
  %332 = load i32, ptr %331, align 4, !tbaa !21
  %333 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.registry_entry, ptr %333, i32 0, i32 4
  %335 = getelementptr inbounds %struct.UT_hash_handle, ptr %334, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !36
  %337 = getelementptr inbounds %struct.UT_hash_table, ptr %336, i32 0, i32 1
  %338 = load i32, ptr %337, align 8, !tbaa !22
  %339 = sub i32 %338, 1
  %340 = and i32 %332, %339
  store i32 %340, ptr %7, align 4, !tbaa !23
  br label %341

341:                                              ; preds = %329
  br label %342

342:                                              ; preds = %341
  br label %343

343:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %344 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.registry_entry, ptr %344, i32 0, i32 4
  %346 = getelementptr inbounds %struct.UT_hash_handle, ptr %345, i32 0, i32 0
  %347 = load ptr, ptr %346, align 8, !tbaa !36
  %348 = getelementptr inbounds %struct.UT_hash_table, ptr %347, i32 0, i32 0
  %349 = load ptr, ptr %348, align 8, !tbaa !16
  %350 = load i32, ptr %7, align 4, !tbaa !23
  %351 = zext i32 %350 to i64
  %352 = getelementptr inbounds %struct.UT_hash_bucket, ptr %349, i64 %351
  store ptr %352, ptr %8, align 8, !tbaa !5
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.UT_hash_bucket, ptr %353, i32 0, i32 1
  %355 = load i32, ptr %354, align 8, !tbaa !24
  %356 = add i32 %355, -1
  store i32 %356, ptr %354, align 8, !tbaa !24
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.UT_hash_bucket, ptr %357, i32 0, i32 0
  %359 = load ptr, ptr %358, align 8, !tbaa !26
  %360 = load ptr, ptr %6, align 8, !tbaa !5
  %361 = icmp eq ptr %359, %360
  br i1 %361, label %362, label %368

362:                                              ; preds = %343
  %363 = load ptr, ptr %6, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.UT_hash_handle, ptr %363, i32 0, i32 4
  %365 = load ptr, ptr %364, align 8, !tbaa !27
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.UT_hash_bucket, ptr %366, i32 0, i32 0
  store ptr %365, ptr %367, align 8, !tbaa !26
  br label %368

368:                                              ; preds = %362, %343
  %369 = load ptr, ptr %6, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.UT_hash_handle, ptr %369, i32 0, i32 3
  %371 = load ptr, ptr %370, align 8, !tbaa !28
  %372 = icmp ne ptr %371, null
  br i1 %372, label %373, label %381

373:                                              ; preds = %368
  %374 = load ptr, ptr %6, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.UT_hash_handle, ptr %374, i32 0, i32 4
  %376 = load ptr, ptr %375, align 8, !tbaa !27
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.UT_hash_handle, ptr %377, i32 0, i32 3
  %379 = load ptr, ptr %378, align 8, !tbaa !28
  %380 = getelementptr inbounds %struct.UT_hash_handle, ptr %379, i32 0, i32 4
  store ptr %376, ptr %380, align 8, !tbaa !27
  br label %381

381:                                              ; preds = %373, %368
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.UT_hash_handle, ptr %382, i32 0, i32 4
  %384 = load ptr, ptr %383, align 8, !tbaa !27
  %385 = icmp ne ptr %384, null
  br i1 %385, label %386, label %394

386:                                              ; preds = %381
  %387 = load ptr, ptr %6, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.UT_hash_handle, ptr %387, i32 0, i32 3
  %389 = load ptr, ptr %388, align 8, !tbaa !28
  %390 = load ptr, ptr %6, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.UT_hash_handle, ptr %390, i32 0, i32 4
  %392 = load ptr, ptr %391, align 8, !tbaa !27
  %393 = getelementptr inbounds %struct.UT_hash_handle, ptr %392, i32 0, i32 3
  store ptr %389, ptr %393, align 8, !tbaa !28
  br label %394

394:                                              ; preds = %386, %381
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  br label %395

395:                                              ; preds = %394
  br label %396

396:                                              ; preds = %395
  %397 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.registry_entry, ptr %397, i32 0, i32 4
  %399 = getelementptr inbounds %struct.UT_hash_handle, ptr %398, i32 0, i32 0
  %400 = load ptr, ptr %399, align 8, !tbaa !36
  %401 = getelementptr inbounds %struct.UT_hash_table, ptr %400, i32 0, i32 3
  %402 = load i32, ptr %401, align 8, !tbaa !29
  %403 = add i32 %402, -1
  store i32 %403, ptr %401, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %404

404:                                              ; preds = %396, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  br label %405

405:                                              ; preds = %404
  br label %406

406:                                              ; preds = %405
  br label %407

407:                                              ; preds = %406
  %408 = load ptr, ptr %2, align 8, !tbaa !5
  store ptr %408, ptr %1, align 8, !tbaa !5
  %409 = load ptr, ptr %2, align 8, !tbaa !5
  %410 = icmp ne ptr %409, null
  br i1 %410, label %411, label %416

411:                                              ; preds = %407
  %412 = load ptr, ptr %2, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.registry_entry, ptr %412, i32 0, i32 4
  %414 = getelementptr inbounds %struct.UT_hash_handle, ptr %413, i32 0, i32 2
  %415 = load ptr, ptr %414, align 8, !tbaa !35
  br label %417

416:                                              ; preds = %407
  br label %417

417:                                              ; preds = %416, %411
  %418 = phi ptr [ %415, %411 ], [ null, %416 ]
  store ptr %418, ptr %2, align 8, !tbaa !5
  br label %229, !llvm.loop !37

419:                                              ; preds = %229
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #4
  ret void
}

declare i32 @bpf_map_delete_map(ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 288}
!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 = !{!12, !6, i64 8}
!14 = !{!12, !6, i64 16}
!15 = !{!10, !6, i64 272}
!16 = !{!17, !6, i64 0}
!17 = !{!"UT_hash_table", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !6, i64 24, !18, i64 32, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56}
!18 = !{!"long", !7, i64 0}
!19 = !{!17, !6, i64 24}
!20 = !{!17, !18, i64 32}
!21 = !{!12, !11, i64 52}
!22 = !{!17, !11, i64 8}
!23 = !{!11, !11, i64 0}
!24 = !{!25, !11, i64 8}
!25 = !{!"UT_hash_bucket", !6, i64 0, !11, i64 8, !11, i64 12}
!26 = !{!25, !6, i64 0}
!27 = !{!12, !6, i64 32}
!28 = !{!12, !6, i64 24}
!29 = !{!17, !11, i64 16}
!30 = !{!10, !6, i64 256}
!31 = !{!32, !6, i64 24}
!32 = !{!"bpf_table", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !6, i64 24}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!10, !6, i64 344}
!36 = !{!10, !6, i64 328}
!37 = distinct !{!37, !34}


; 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: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @registry_delete() local_unnamed_addr #1 {
  %1 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %82
  %.sink110 = phi ptr [ %3, %82 ], [ %1, %0 ]
  %2 = getelementptr inbounds i8, ptr %.sink110, i64 288
  %3 = load ptr, ptr %2, align 8, !tbaa !9
  %4 = getelementptr inbounds i8, ptr %.sink110, i64 272
  %5 = getelementptr inbounds i8, ptr %.sink110, i64 280
  %6 = load ptr, ptr %5, align 8, !tbaa !13
  %7 = icmp eq ptr %6, null
  br i1 %7, label %8, label %.lr.ph._crit_edge

.lr.ph._crit_edge:                                ; preds = %.lr.ph
  %.pre = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  br label %19

8:                                                ; preds = %.lr.ph
  %9 = getelementptr inbounds i8, ptr %.sink110, i64 288
  %10 = load ptr, ptr %9, align 8, !tbaa !14
  %11 = icmp eq ptr %10, null
  %.pre95 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  br i1 %11, label %12, label %19

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %.pre95, i64 272
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = load ptr, ptr %14, align 8, !tbaa !16
  tail call void @free(ptr noundef %15) #3
  %16 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %16, i64 272
  %18 = load ptr, ptr %17, align 8, !tbaa !15
  tail call void @free(ptr noundef %18) #3
  store ptr null, ptr @reg_tables_name, align 8, !tbaa !5
  br label %82

19:                                               ; preds = %.lr.ph._crit_edge, %8
  %20 = phi ptr [ %.pre, %.lr.ph._crit_edge ], [ %.pre95, %8 ]
  %21 = getelementptr inbounds i8, ptr %20, i64 272
  %22 = load ptr, ptr %21, align 8, !tbaa !15
  %23 = getelementptr inbounds i8, ptr %22, i64 24
  %24 = load ptr, ptr %23, align 8, !tbaa !19
  %25 = icmp eq ptr %4, %24
  br i1 %25, label %26, label %30

26:                                               ; preds = %19
  %27 = getelementptr inbounds i8, ptr %22, i64 32
  %28 = load i64, ptr %27, align 8, !tbaa !20
  %29 = getelementptr inbounds i8, ptr %6, i64 %28
  store ptr %29, ptr %23, align 8, !tbaa !19
  br label %30

30:                                               ; preds = %26, %19
  %31 = getelementptr inbounds i8, ptr %.sink110, i64 288
  %32 = load ptr, ptr %31, align 8, !tbaa !14
  br i1 %7, label %38, label %33

33:                                               ; preds = %30
  %34 = getelementptr inbounds i8, ptr %22, i64 32
  %35 = load i64, ptr %34, align 8, !tbaa !20
  %36 = getelementptr inbounds i8, ptr %6, i64 %35
  %37 = getelementptr inbounds i8, ptr %36, i64 16
  store ptr %32, ptr %37, align 8, !tbaa !14
  %.pre97.pre = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  br label %39

38:                                               ; preds = %30
  store ptr %32, ptr @reg_tables_name, align 8, !tbaa !5
  br label %39

39:                                               ; preds = %38, %33
  %.pre97 = phi ptr [ %32, %38 ], [ %.pre97.pre, %33 ]
  %.not82 = icmp eq ptr %32, null
  br i1 %.not82, label %47, label %40

40:                                               ; preds = %39
  %41 = getelementptr inbounds i8, ptr %.pre97, i64 272
  %42 = load ptr, ptr %41, align 8, !tbaa !15
  %43 = getelementptr inbounds i8, ptr %42, i64 32
  %44 = load i64, ptr %43, align 8, !tbaa !20
  %45 = getelementptr inbounds i8, ptr %32, i64 %44
  %46 = getelementptr inbounds i8, ptr %45, i64 8
  store ptr %6, ptr %46, align 8, !tbaa !13
  %.pre96 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  br label %47

47:                                               ; preds = %39, %40
  %48 = phi ptr [ %.pre97, %39 ], [ %.pre96, %40 ]
  %49 = getelementptr inbounds i8, ptr %.sink110, i64 324
  %50 = load i32, ptr %49, align 4, !tbaa !21
  %51 = getelementptr inbounds i8, ptr %48, i64 272
  %52 = load ptr, ptr %51, align 8, !tbaa !15
  %53 = getelementptr inbounds i8, ptr %52, i64 8
  %54 = load i32, ptr %53, align 8, !tbaa !22
  %55 = add i32 %54, -1
  %56 = and i32 %55, %50
  %57 = load ptr, ptr %52, align 8, !tbaa !16
  %58 = zext i32 %56 to i64
  %59 = getelementptr inbounds %struct.UT_hash_bucket, ptr %57, i64 %58
  %60 = getelementptr inbounds i8, ptr %59, i64 8
  %61 = load i32, ptr %60, align 8, !tbaa !23
  %62 = add i32 %61, -1
  store i32 %62, ptr %60, align 8, !tbaa !23
  %63 = load ptr, ptr %59, align 8, !tbaa !25
  %64 = icmp eq ptr %63, %4
  br i1 %64, label %65, label %68

65:                                               ; preds = %47
  %66 = getelementptr inbounds i8, ptr %.sink110, i64 304
  %67 = load ptr, ptr %66, align 8, !tbaa !26
  store ptr %67, ptr %59, align 8, !tbaa !25
  br label %68

68:                                               ; preds = %65, %47
  %69 = getelementptr inbounds i8, ptr %.sink110, i64 296
  %70 = load ptr, ptr %69, align 8, !tbaa !27
  %.not83 = icmp eq ptr %70, null
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.sink110, i64 304
  %.pre99 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !26
  br i1 %.not83, label %._crit_edge98, label %71

71:                                               ; preds = %68
  %72 = getelementptr inbounds i8, ptr %70, i64 32
  store ptr %.pre99, ptr %72, align 8, !tbaa !26
  br label %._crit_edge98

._crit_edge98:                                    ; preds = %68, %71
  %.not84 = icmp eq ptr %.pre99, null
  br i1 %.not84, label %75, label %73

73:                                               ; preds = %._crit_edge98
  %74 = getelementptr inbounds i8, ptr %.pre99, i64 24
  store ptr %70, ptr %74, align 8, !tbaa !27
  br label %75

75:                                               ; preds = %73, %._crit_edge98
  %76 = load ptr, ptr @reg_tables_name, align 8, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %76, i64 272
  %78 = load ptr, ptr %77, align 8, !tbaa !15
  %79 = getelementptr inbounds i8, ptr %78, i64 16
  %80 = load i32, ptr %79, align 8, !tbaa !28
  %81 = add i32 %80, -1
  store i32 %81, ptr %79, align 8, !tbaa !28
  br label %82

82:                                               ; preds = %75, %12
  %83 = getelementptr inbounds i8, ptr %.sink110, i64 256
  %84 = load ptr, ptr %83, align 8, !tbaa !29
  %85 = getelementptr inbounds i8, ptr %84, i64 24
  %86 = load ptr, ptr %85, align 8, !tbaa !30
  %87 = tail call i32 @bpf_map_delete_map(ptr noundef %86) #3
  tail call void @free(ptr noundef nonnull %.sink110) #3
  %.not85 = icmp eq ptr %3, null
  br i1 %.not85, label %._crit_edge, label %.lr.ph, !llvm.loop !32

._crit_edge:                                      ; preds = %82, %0
  %88 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %.not74 = icmp eq ptr %88, null
  br i1 %.not74, label %._crit_edge94, label %.lr.ph93

.lr.ph93:                                         ; preds = %._crit_edge, %169
  %.sink111 = phi ptr [ %91, %169 ], [ %88, %._crit_edge ]
  %89 = phi ptr [ %170, %169 ], [ %88, %._crit_edge ]
  %90 = getelementptr inbounds i8, ptr %.sink111, i64 344
  %91 = load ptr, ptr %90, align 8, !tbaa !34
  %92 = getelementptr inbounds i8, ptr %.sink111, i64 328
  %93 = getelementptr inbounds i8, ptr %.sink111, i64 336
  %94 = load ptr, ptr %93, align 8, !tbaa !13
  %95 = icmp eq ptr %94, null
  br i1 %95, label %96, label %107

96:                                               ; preds = %.lr.ph93
  %97 = getelementptr inbounds i8, ptr %.sink111, i64 344
  %98 = load ptr, ptr %97, align 8, !tbaa !14
  %99 = icmp eq ptr %98, null
  br i1 %99, label %100, label %107

100:                                              ; preds = %96
  %101 = getelementptr inbounds i8, ptr %89, i64 328
  %102 = load ptr, ptr %101, align 8, !tbaa !35
  %103 = load ptr, ptr %102, align 8, !tbaa !16
  tail call void @free(ptr noundef %103) #3
  %104 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %104, i64 328
  %106 = load ptr, ptr %105, align 8, !tbaa !35
  tail call void @free(ptr noundef %106) #3
  store ptr null, ptr @reg_tables_id, align 8, !tbaa !5
  br label %169

107:                                              ; preds = %96, %.lr.ph93
  %108 = getelementptr inbounds i8, ptr %89, i64 328
  %109 = load ptr, ptr %108, align 8, !tbaa !35
  %110 = getelementptr inbounds i8, ptr %109, i64 24
  %111 = load ptr, ptr %110, align 8, !tbaa !19
  %112 = icmp eq ptr %92, %111
  br i1 %112, label %113, label %117

113:                                              ; preds = %107
  %114 = getelementptr inbounds i8, ptr %109, i64 32
  %115 = load i64, ptr %114, align 8, !tbaa !20
  %116 = getelementptr inbounds i8, ptr %94, i64 %115
  store ptr %116, ptr %110, align 8, !tbaa !19
  br label %117

117:                                              ; preds = %113, %107
  %118 = getelementptr inbounds i8, ptr %.sink111, i64 344
  %119 = load ptr, ptr %118, align 8, !tbaa !14
  br i1 %95, label %125, label %120

120:                                              ; preds = %117
  %121 = getelementptr inbounds i8, ptr %109, i64 32
  %122 = load i64, ptr %121, align 8, !tbaa !20
  %123 = getelementptr inbounds i8, ptr %94, i64 %122
  %124 = getelementptr inbounds i8, ptr %123, i64 16
  store ptr %119, ptr %124, align 8, !tbaa !14
  %.pre101.pre = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  br label %126

125:                                              ; preds = %117
  store ptr %119, ptr @reg_tables_id, align 8, !tbaa !5
  br label %126

126:                                              ; preds = %125, %120
  %.pre101 = phi ptr [ %119, %125 ], [ %.pre101.pre, %120 ]
  %.not77 = icmp eq ptr %119, null
  br i1 %.not77, label %134, label %127

127:                                              ; preds = %126
  %128 = getelementptr inbounds i8, ptr %.pre101, i64 328
  %129 = load ptr, ptr %128, align 8, !tbaa !35
  %130 = getelementptr inbounds i8, ptr %129, i64 32
  %131 = load i64, ptr %130, align 8, !tbaa !20
  %132 = getelementptr inbounds i8, ptr %119, i64 %131
  %133 = getelementptr inbounds i8, ptr %132, i64 8
  store ptr %94, ptr %133, align 8, !tbaa !13
  %.pre100 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  br label %134

134:                                              ; preds = %126, %127
  %135 = phi ptr [ %.pre101, %126 ], [ %.pre100, %127 ]
  %136 = getelementptr inbounds i8, ptr %.sink111, i64 380
  %137 = load i32, ptr %136, align 4, !tbaa !21
  %138 = getelementptr inbounds i8, ptr %135, i64 328
  %139 = load ptr, ptr %138, align 8, !tbaa !35
  %140 = getelementptr inbounds i8, ptr %139, i64 8
  %141 = load i32, ptr %140, align 8, !tbaa !22
  %142 = add i32 %141, -1
  %143 = and i32 %142, %137
  %144 = load ptr, ptr %139, align 8, !tbaa !16
  %145 = zext i32 %143 to i64
  %146 = getelementptr inbounds %struct.UT_hash_bucket, ptr %144, i64 %145
  %147 = getelementptr inbounds i8, ptr %146, i64 8
  %148 = load i32, ptr %147, align 8, !tbaa !23
  %149 = add i32 %148, -1
  store i32 %149, ptr %147, align 8, !tbaa !23
  %150 = load ptr, ptr %146, align 8, !tbaa !25
  %151 = icmp eq ptr %150, %92
  br i1 %151, label %152, label %155

152:                                              ; preds = %134
  %153 = getelementptr inbounds i8, ptr %.sink111, i64 360
  %154 = load ptr, ptr %153, align 8, !tbaa !26
  store ptr %154, ptr %146, align 8, !tbaa !25
  br label %155

155:                                              ; preds = %152, %134
  %156 = getelementptr inbounds i8, ptr %.sink111, i64 352
  %157 = load ptr, ptr %156, align 8, !tbaa !27
  %.not78 = icmp eq ptr %157, null
  %.phi.trans.insert103 = getelementptr inbounds i8, ptr %.sink111, i64 360
  %.pre104 = load ptr, ptr %.phi.trans.insert103, align 8, !tbaa !26
  br i1 %.not78, label %._crit_edge102, label %158

158:                                              ; preds = %155
  %159 = getelementptr inbounds i8, ptr %157, i64 32
  store ptr %.pre104, ptr %159, align 8, !tbaa !26
  br label %._crit_edge102

._crit_edge102:                                   ; preds = %155, %158
  %.not79 = icmp eq ptr %.pre104, null
  br i1 %.not79, label %162, label %160

160:                                              ; preds = %._crit_edge102
  %161 = getelementptr inbounds i8, ptr %.pre104, i64 24
  store ptr %157, ptr %161, align 8, !tbaa !27
  br label %162

162:                                              ; preds = %160, %._crit_edge102
  %163 = load ptr, ptr @reg_tables_id, align 8, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %163, i64 328
  %165 = load ptr, ptr %164, align 8, !tbaa !35
  %166 = getelementptr inbounds i8, ptr %165, i64 16
  %167 = load i32, ptr %166, align 8, !tbaa !28
  %168 = add i32 %167, -1
  store i32 %168, ptr %166, align 8, !tbaa !28
  br label %169

169:                                              ; preds = %162, %100
  %170 = phi ptr [ %163, %162 ], [ null, %100 ]
  %.not80 = icmp eq ptr %91, null
  br i1 %.not80, label %._crit_edge94, label %.lr.ph93, !llvm.loop !36

._crit_edge94:                                    ; preds = %169, %._crit_edge
  ret void
}

declare i32 @bpf_map_delete_map(ptr noundef) local_unnamed_addr #2

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

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

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


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass