; LLVM IR from openanolis/openssl :: ssl/quic (quic_wire_pkt)

; 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.quic_pkt_hdr_ptrs_st = type { ptr, ptr, i64, ptr }
%struct.quic_pkt_hdr_st = type { i32, i32, %struct.quic_conn_id_st, %struct.quic_conn_id_st, [4 x i8], ptr, i64, i64, ptr }
%struct.quic_conn_id_st = type { i8, [20 x i8] }

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

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

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

28:                                               ; preds = %6
  %29 = load ptr, ptr %8, align 8, !tbaa !5
  %30 = call ptr @PACKET_data(ptr noundef %29)
  %31 = load ptr, ptr %13, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %31, i32 0, i32 0
  store ptr %30, ptr %32, align 8, !tbaa !13
  %33 = load ptr, ptr %13, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %33, i32 0, i32 1
  store ptr null, ptr %34, align 8, !tbaa !15
  %35 = load ptr, ptr %13, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %35, i32 0, i32 2
  store i64 0, ptr %36, align 8, !tbaa !16
  %37 = load ptr, ptr %13, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %37, i32 0, i32 3
  store ptr null, ptr %38, align 8, !tbaa !17
  br label %39

39:                                               ; preds = %28, %6
  %40 = load i64, ptr %16, align 8, !tbaa !9
  %41 = icmp ult i64 %40, 7
  br i1 %41, label %46, label %42

42:                                               ; preds = %39
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = call i32 @PACKET_get_1(ptr noundef %43, ptr noundef %14)
  %45 = icmp ne i32 %44, 0
  br i1 %45, label %47, label %46

46:                                               ; preds = %42, %39
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

47:                                               ; preds = %42
  %48 = load i32, ptr %10, align 4, !tbaa !11
  %49 = load ptr, ptr %12, align 8, !tbaa !5
  %50 = load i32, ptr %49, align 8
  %51 = and i32 %48, 1
  %52 = shl i32 %51, 14
  %53 = and i32 %50, -16385
  %54 = or i32 %53, %52
  store i32 %54, ptr %49, align 8
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  %56 = load i32, ptr %55, align 8
  %57 = and i32 %56, -983041
  %58 = or i32 %57, 0
  store i32 %58, ptr %55, align 8
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  %60 = load i32, ptr %59, align 8
  %61 = and i32 %60, -3145729
  %62 = or i32 %61, 0
  store i32 %62, ptr %59, align 8
  %63 = load i32, ptr %14, align 4, !tbaa !11
  %64 = and i32 %63, 128
  %65 = icmp eq i32 %64, 0
  br i1 %65, label %66, label %210

66:                                               ; preds = %47
  %67 = load i64, ptr %9, align 8, !tbaa !9
  %68 = icmp ugt i64 %67, 20
  br i1 %68, label %69, label %70

69:                                               ; preds = %66
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

70:                                               ; preds = %66
  %71 = load i32, ptr %14, align 4, !tbaa !11
  %72 = and i32 %71, 64
  %73 = icmp eq i32 %72, 0
  br i1 %73, label %77, label %74

74:                                               ; preds = %70
  %75 = load i64, ptr %16, align 8, !tbaa !9
  %76 = icmp ult i64 %75, 21
  br i1 %76, label %77, label %78

77:                                               ; preds = %74, %70
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

78:                                               ; preds = %74
  %79 = load ptr, ptr %12, align 8, !tbaa !5
  %80 = load i32, ptr %79, align 8
  %81 = and i32 %80, -256
  %82 = or i32 %81, 5
  store i32 %82, ptr %79, align 8
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  %84 = load i32, ptr %83, align 8
  %85 = and i32 %84, -32769
  %86 = or i32 %85, 32768
  store i32 %86, ptr %83, align 8
  %87 = load i32, ptr %14, align 4, !tbaa !11
  %88 = and i32 %87, 32
  %89 = icmp ne i32 %88, 0
  %90 = zext i1 %89 to i32
  %91 = load ptr, ptr %12, align 8, !tbaa !5
  %92 = load i32, ptr %91, align 8
  %93 = and i32 %90, 1
  %94 = shl i32 %93, 8
  %95 = and i32 %92, -257
  %96 = or i32 %95, %94
  store i32 %96, ptr %91, align 8
  %97 = load i32, ptr %10, align 4, !tbaa !11
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %99, label %112

99:                                               ; preds = %78
  %100 = load ptr, ptr %12, align 8, !tbaa !5
  %101 = load i32, ptr %100, align 8
  %102 = and i32 %101, -513
  %103 = or i32 %102, 0
  store i32 %103, ptr %100, align 8
  %104 = load ptr, ptr %12, align 8, !tbaa !5
  %105 = load i32, ptr %104, align 8
  %106 = and i32 %105, -15361
  %107 = or i32 %106, 0
  store i32 %107, ptr %104, align 8
  %108 = load ptr, ptr %12, align 8, !tbaa !5
  %109 = load i32, ptr %108, align 8
  %110 = and i32 %109, -3145729
  %111 = or i32 %110, 0
  store i32 %111, ptr %108, align 8
  br label %141

112:                                              ; preds = %78
  %113 = load i32, ptr %14, align 4, !tbaa !11
  %114 = and i32 %113, 4
  %115 = icmp ne i32 %114, 0
  %116 = zext i1 %115 to i32
  %117 = load ptr, ptr %12, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 8
  %119 = and i32 %116, 1
  %120 = shl i32 %119, 9
  %121 = and i32 %118, -513
  %122 = or i32 %121, %120
  store i32 %122, ptr %117, align 8
  %123 = load i32, ptr %14, align 4, !tbaa !11
  %124 = and i32 %123, 3
  %125 = add i32 %124, 1
  %126 = load ptr, ptr %12, align 8, !tbaa !5
  %127 = load i32, ptr %126, align 8
  %128 = and i32 %125, 15
  %129 = shl i32 %128, 10
  %130 = and i32 %127, -15361
  %131 = or i32 %130, %129
  store i32 %131, ptr %126, align 8
  %132 = load i32, ptr %14, align 4, !tbaa !11
  %133 = and i32 %132, 24
  %134 = lshr i32 %133, 3
  %135 = load ptr, ptr %12, align 8, !tbaa !5
  %136 = load i32, ptr %135, align 8
  %137 = and i32 %134, 3
  %138 = shl i32 %137, 20
  %139 = and i32 %136, -3145729
  %140 = or i32 %139, %138
  store i32 %140, ptr %135, align 8
  br label %141

141:                                              ; preds = %112, %99
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = load ptr, ptr %12, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %143, i32 0, i32 2
  %145 = getelementptr inbounds %struct.quic_conn_id_st, ptr %144, i32 0, i32 1
  %146 = getelementptr inbounds [20 x i8], ptr %145, i64 0, i64 0
  %147 = load i64, ptr %9, align 8, !tbaa !9
  %148 = call i32 @PACKET_copy_bytes(ptr noundef %142, ptr noundef %146, i64 noundef %147)
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %151, label %150

150:                                              ; preds = %141
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

151:                                              ; preds = %141
  %152 = load i64, ptr %9, align 8, !tbaa !9
  %153 = trunc i64 %152 to i8
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %154, i32 0, i32 2
  %156 = getelementptr inbounds %struct.quic_conn_id_st, ptr %155, i32 0, i32 0
  store i8 %153, ptr %156, align 8, !tbaa !18
  %157 = load ptr, ptr %12, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %157, i32 0, i32 4
  %159 = getelementptr inbounds [4 x i8], ptr %158, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 2 %159, i8 0, i64 4, i1 false)
  %160 = load ptr, ptr %8, align 8, !tbaa !5
  %161 = call ptr @PACKET_data(ptr noundef %160)
  store ptr %161, ptr %15, align 8, !tbaa !5
  %162 = load i32, ptr %10, align 4, !tbaa !11
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %170

164:                                              ; preds = %151
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = call i32 @PACKET_forward(ptr noundef %165, i64 noundef 4)
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %169, label %168

168:                                              ; preds = %164
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

169:                                              ; preds = %164
  br label %184

170:                                              ; preds = %151
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = load ptr, ptr %12, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %172, i32 0, i32 4
  %174 = getelementptr inbounds [4 x i8], ptr %173, i64 0, i64 0
  %175 = load ptr, ptr %12, align 8, !tbaa !5
  %176 = load i32, ptr %175, align 8
  %177 = lshr i32 %176, 10
  %178 = and i32 %177, 15
  %179 = zext i32 %178 to i64
  %180 = call i32 @PACKET_copy_bytes(ptr noundef %171, ptr noundef %174, i64 noundef %179)
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %183, label %182

182:                                              ; preds = %170
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

183:                                              ; preds = %170
  br label %184

184:                                              ; preds = %183, %169
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %185, i32 0, i32 1
  store i32 0, ptr %186, align 4, !tbaa !21
  %187 = load ptr, ptr %12, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %187, i32 0, i32 3
  %189 = getelementptr inbounds %struct.quic_conn_id_st, ptr %188, i32 0, i32 0
  store i8 0, ptr %189, align 1, !tbaa !22
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %190, i32 0, i32 5
  store ptr null, ptr %191, align 8, !tbaa !23
  %192 = load ptr, ptr %12, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %192, i32 0, i32 6
  store i64 0, ptr %193, align 8, !tbaa !24
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = call i64 @PACKET_remaining(ptr noundef %194)
  %196 = load ptr, ptr %12, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %196, i32 0, i32 7
  store i64 %195, ptr %197, align 8, !tbaa !25
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  %199 = call ptr @PACKET_data(ptr noundef %198)
  %200 = load ptr, ptr %12, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %200, i32 0, i32 8
  store ptr %199, ptr %201, align 8, !tbaa !26
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = load ptr, ptr %12, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %203, i32 0, i32 7
  %205 = load i64, ptr %204, align 8, !tbaa !25
  %206 = call i32 @PACKET_forward(ptr noundef %202, i64 noundef %205)
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %209, label %208

208:                                              ; preds = %184
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

209:                                              ; preds = %184
  br label %577

210:                                              ; preds = %47
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %211 = load ptr, ptr %8, align 8, !tbaa !5
  %212 = call i32 @PACKET_get_net_4(ptr noundef %211, ptr noundef %18)
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %215, label %214

214:                                              ; preds = %210
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

215:                                              ; preds = %210
  %216 = load i64, ptr %18, align 8, !tbaa !9
  %217 = icmp ne i64 %216, 0
  br i1 %217, label %218, label %223

218:                                              ; preds = %215
  %219 = load i32, ptr %14, align 4, !tbaa !11
  %220 = and i32 %219, 64
  %221 = icmp eq i32 %220, 0
  br i1 %221, label %222, label %223

222:                                              ; preds = %218
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

223:                                              ; preds = %218, %215
  %224 = load ptr, ptr %8, align 8, !tbaa !5
  %225 = call i32 @PACKET_get_1(ptr noundef %224, ptr noundef %19)
  %226 = icmp ne i32 %225, 0
  br i1 %226, label %227, label %257

227:                                              ; preds = %223
  %228 = load i32, ptr %19, align 4, !tbaa !11
  %229 = icmp ugt i32 %228, 20
  br i1 %229, label %257, label %230

230:                                              ; preds = %227
  %231 = load ptr, ptr %8, align 8, !tbaa !5
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %232, i32 0, i32 2
  %234 = getelementptr inbounds %struct.quic_conn_id_st, ptr %233, i32 0, i32 1
  %235 = getelementptr inbounds [20 x i8], ptr %234, i64 0, i64 0
  %236 = load i32, ptr %19, align 4, !tbaa !11
  %237 = zext i32 %236 to i64
  %238 = call i32 @PACKET_copy_bytes(ptr noundef %231, ptr noundef %235, i64 noundef %237)
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %257

240:                                              ; preds = %230
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = call i32 @PACKET_get_1(ptr noundef %241, ptr noundef %20)
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %244, label %257

244:                                              ; preds = %240
  %245 = load i32, ptr %20, align 4, !tbaa !11
  %246 = icmp ugt i32 %245, 20
  br i1 %246, label %257, label %247

247:                                              ; preds = %244
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %249, i32 0, i32 3
  %251 = getelementptr inbounds %struct.quic_conn_id_st, ptr %250, i32 0, i32 1
  %252 = getelementptr inbounds [20 x i8], ptr %251, i64 0, i64 0
  %253 = load i32, ptr %20, align 4, !tbaa !11
  %254 = zext i32 %253 to i64
  %255 = call i32 @PACKET_copy_bytes(ptr noundef %248, ptr noundef %252, i64 noundef %254)
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %258, label %257

257:                                              ; preds = %247, %244, %240, %230, %227, %223
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

258:                                              ; preds = %247
  %259 = load i64, ptr %18, align 8, !tbaa !9
  %260 = trunc i64 %259 to i32
  %261 = load ptr, ptr %12, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %261, i32 0, i32 1
  store i32 %260, ptr %262, align 4, !tbaa !21
  %263 = load i32, ptr %19, align 4, !tbaa !11
  %264 = trunc i32 %263 to i8
  %265 = load ptr, ptr %12, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %265, i32 0, i32 2
  %267 = getelementptr inbounds %struct.quic_conn_id_st, ptr %266, i32 0, i32 0
  store i8 %264, ptr %267, align 8, !tbaa !18
  %268 = load i32, ptr %20, align 4, !tbaa !11
  %269 = trunc i32 %268 to i8
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %270, i32 0, i32 3
  %272 = getelementptr inbounds %struct.quic_conn_id_st, ptr %271, i32 0, i32 0
  store i8 %269, ptr %272, align 1, !tbaa !22
  %273 = load i64, ptr %18, align 8, !tbaa !9
  %274 = icmp eq i64 %273, 0
  br i1 %274, label %275, label %336

275:                                              ; preds = %258
  %276 = load ptr, ptr %12, align 8, !tbaa !5
  %277 = load i32, ptr %276, align 8
  %278 = and i32 %277, -256
  %279 = or i32 %278, 6
  store i32 %279, ptr %276, align 8
  %280 = load i32, ptr %14, align 4, !tbaa !11
  %281 = and i32 %280, 64
  %282 = icmp ne i32 %281, 0
  %283 = zext i1 %282 to i32
  %284 = load ptr, ptr %12, align 8, !tbaa !5
  %285 = load i32, ptr %284, align 8
  %286 = and i32 %283, 1
  %287 = shl i32 %286, 15
  %288 = and i32 %285, -32769
  %289 = or i32 %288, %287
  store i32 %289, ptr %284, align 8
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = call ptr @PACKET_data(ptr noundef %290)
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %292, i32 0, i32 8
  store ptr %291, ptr %293, align 8, !tbaa !26
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = call i64 @PACKET_remaining(ptr noundef %294)
  %296 = load ptr, ptr %12, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %296, i32 0, i32 7
  store i64 %295, ptr %297, align 8, !tbaa !25
  %298 = load ptr, ptr %12, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %298, i32 0, i32 7
  %300 = load i64, ptr %299, align 8, !tbaa !25
  %301 = urem i64 %300, 4
  %302 = icmp ne i64 %301, 0
  br i1 %302, label %303, label %304

303:                                              ; preds = %275
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

304:                                              ; preds = %275
  %305 = load ptr, ptr %12, align 8, !tbaa !5
  %306 = load i32, ptr %305, align 8
  %307 = and i32 %306, -16385
  %308 = or i32 %307, 0
  store i32 %308, ptr %305, align 8
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = load i32, ptr %309, align 8
  %311 = and i32 %310, -15361
  %312 = or i32 %311, 0
  store i32 %312, ptr %309, align 8
  %313 = load ptr, ptr %12, align 8, !tbaa !5
  %314 = load i32, ptr %313, align 8
  %315 = and i32 %314, -257
  %316 = or i32 %315, 0
  store i32 %316, ptr %313, align 8
  %317 = load ptr, ptr %12, align 8, !tbaa !5
  %318 = load i32, ptr %317, align 8
  %319 = and i32 %318, -513
  %320 = or i32 %319, 0
  store i32 %320, ptr %317, align 8
  %321 = load ptr, ptr %12, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %321, i32 0, i32 5
  store ptr null, ptr %322, align 8, !tbaa !23
  %323 = load ptr, ptr %12, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %323, i32 0, i32 6
  store i64 0, ptr %324, align 8, !tbaa !24
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %325, i32 0, i32 4
  %327 = getelementptr inbounds [4 x i8], ptr %326, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 2 %327, i8 0, i64 4, i1 false)
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %329, i32 0, i32 7
  %331 = load i64, ptr %330, align 8, !tbaa !25
  %332 = call i32 @PACKET_forward(ptr noundef %328, i64 noundef %331)
  %333 = icmp ne i32 %332, 0
  br i1 %333, label %335, label %334

334:                                              ; preds = %304
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

335:                                              ; preds = %304
  br label %573

336:                                              ; preds = %258
  %337 = load i64, ptr %18, align 8, !tbaa !9
  %338 = icmp ne i64 %337, 1
  br i1 %338, label %339, label %340

339:                                              ; preds = %336
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

340:                                              ; preds = %336
  %341 = load i64, ptr %16, align 8, !tbaa !9
  %342 = icmp ult i64 %341, 21
  br i1 %342, label %343, label %344

343:                                              ; preds = %340
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

344:                                              ; preds = %340
  %345 = load i32, ptr %14, align 4, !tbaa !11
  %346 = lshr i32 %345, 4
  %347 = and i32 %346, 3
  store i32 %347, ptr %21, align 4, !tbaa !11
  %348 = load i32, ptr %21, align 4, !tbaa !11
  switch i32 %348, label %369 [
    i32 0, label %349
    i32 1, label %354
    i32 2, label %359
    i32 3, label %364
  ]

349:                                              ; preds = %344
  %350 = load ptr, ptr %12, align 8, !tbaa !5
  %351 = load i32, ptr %350, align 8
  %352 = and i32 %351, -256
  %353 = or i32 %352, 1
  store i32 %353, ptr %350, align 8
  br label %369

354:                                              ; preds = %344
  %355 = load ptr, ptr %12, align 8, !tbaa !5
  %356 = load i32, ptr %355, align 8
  %357 = and i32 %356, -256
  %358 = or i32 %357, 2
  store i32 %358, ptr %355, align 8
  br label %369

359:                                              ; preds = %344
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = load i32, ptr %360, align 8
  %362 = and i32 %361, -256
  %363 = or i32 %362, 3
  store i32 %363, ptr %360, align 8
  br label %369

364:                                              ; preds = %344
  %365 = load ptr, ptr %12, align 8, !tbaa !5
  %366 = load i32, ptr %365, align 8
  %367 = and i32 %366, -256
  %368 = or i32 %367, 4
  store i32 %368, ptr %365, align 8
  br label %369

369:                                              ; preds = %364, %359, %354, %349, %344
  %370 = load ptr, ptr %12, align 8, !tbaa !5
  %371 = load i32, ptr %370, align 8
  %372 = and i32 %371, -15361
  %373 = or i32 %372, 0
  store i32 %373, ptr %370, align 8
  %374 = load ptr, ptr %12, align 8, !tbaa !5
  %375 = load i32, ptr %374, align 8
  %376 = and i32 %375, -32769
  %377 = or i32 %376, 32768
  store i32 %377, ptr %374, align 8
  %378 = load ptr, ptr %12, align 8, !tbaa !5
  %379 = load i32, ptr %378, align 8
  %380 = and i32 %379, -257
  %381 = or i32 %380, 0
  store i32 %381, ptr %378, align 8
  %382 = load ptr, ptr %12, align 8, !tbaa !5
  %383 = load i32, ptr %382, align 8
  %384 = and i32 %383, -513
  %385 = or i32 %384, 0
  store i32 %385, ptr %382, align 8
  %386 = load ptr, ptr %12, align 8, !tbaa !5
  %387 = load i32, ptr %386, align 8
  %388 = and i32 %387, 255
  %389 = icmp eq i32 %388, 1
  br i1 %389, label %390, label %418

390:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %391 = load ptr, ptr %8, align 8, !tbaa !5
  %392 = call i32 @PACKET_get_quic_vlint(ptr noundef %391, ptr noundef %22)
  %393 = icmp ne i32 %392, 0
  br i1 %393, label %394, label %404

394:                                              ; preds = %390
  %395 = load i64, ptr %22, align 8, !tbaa !9
  %396 = icmp ugt i64 %395, -1
  br i1 %396, label %404, label %397

397:                                              ; preds = %394
  %398 = load ptr, ptr %8, align 8, !tbaa !5
  %399 = load ptr, ptr %12, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %399, i32 0, i32 5
  %401 = load i64, ptr %22, align 8, !tbaa !9
  %402 = call i32 @PACKET_get_bytes(ptr noundef %398, ptr noundef %400, i64 noundef %401)
  %403 = icmp ne i32 %402, 0
  br i1 %403, label %405, label %404

404:                                              ; preds = %397, %394, %390
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %415

405:                                              ; preds = %397
  %406 = load i64, ptr %22, align 8, !tbaa !9
  %407 = load ptr, ptr %12, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %407, i32 0, i32 6
  store i64 %406, ptr %408, align 8, !tbaa !24
  %409 = load i64, ptr %22, align 8, !tbaa !9
  %410 = icmp eq i64 %409, 0
  br i1 %410, label %411, label %414

411:                                              ; preds = %405
  %412 = load ptr, ptr %12, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %412, i32 0, i32 5
  store ptr null, ptr %413, align 8, !tbaa !23
  br label %414

414:                                              ; preds = %411, %405
  store i32 0, ptr %17, align 4
  br label %415

415:                                              ; preds = %414, %404
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  %416 = load i32, ptr %17, align 4
  switch i32 %416, label %574 [
    i32 0, label %417
  ]

417:                                              ; preds = %415
  br label %423

418:                                              ; preds = %369
  %419 = load ptr, ptr %12, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %419, i32 0, i32 5
  store ptr null, ptr %420, align 8, !tbaa !23
  %421 = load ptr, ptr %12, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %421, i32 0, i32 6
  store i64 0, ptr %422, align 8, !tbaa !24
  br label %423

423:                                              ; preds = %418, %417
  %424 = load ptr, ptr %12, align 8, !tbaa !5
  %425 = load i32, ptr %424, align 8
  %426 = and i32 %425, 255
  %427 = icmp eq i32 %426, 4
  br i1 %427, label %428, label %460

428:                                              ; preds = %423
  %429 = load ptr, ptr %8, align 8, !tbaa !5
  %430 = call ptr @PACKET_data(ptr noundef %429)
  %431 = load ptr, ptr %12, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %431, i32 0, i32 8
  store ptr %430, ptr %432, align 8, !tbaa !26
  %433 = load ptr, ptr %8, align 8, !tbaa !5
  %434 = call i64 @PACKET_remaining(ptr noundef %433)
  %435 = load ptr, ptr %12, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %435, i32 0, i32 7
  store i64 %434, ptr %436, align 8, !tbaa !25
  %437 = load ptr, ptr %12, align 8, !tbaa !5
  %438 = load i32, ptr %437, align 8
  %439 = and i32 %438, -16385
  %440 = or i32 %439, 0
  store i32 %440, ptr %437, align 8
  %441 = load i32, ptr %14, align 4, !tbaa !11
  %442 = and i32 %441, 15
  %443 = load ptr, ptr %12, align 8, !tbaa !5
  %444 = load i32, ptr %443, align 8
  %445 = and i32 %442, 15
  %446 = shl i32 %445, 16
  %447 = and i32 %444, -983041
  %448 = or i32 %447, %446
  store i32 %448, ptr %443, align 8
  %449 = load ptr, ptr %12, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %449, i32 0, i32 4
  %451 = getelementptr inbounds [4 x i8], ptr %450, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 2 %451, i8 0, i64 4, i1 false)
  %452 = load ptr, ptr %8, align 8, !tbaa !5
  %453 = load ptr, ptr %12, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %453, i32 0, i32 7
  %455 = load i64, ptr %454, align 8, !tbaa !25
  %456 = call i32 @PACKET_forward(ptr noundef %452, i64 noundef %455)
  %457 = icmp ne i32 %456, 0
  br i1 %457, label %459, label %458

458:                                              ; preds = %428
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %574

459:                                              ; preds = %428
  br label %571

460:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %461 = load i32, ptr %10, align 4, !tbaa !11
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %463, label %464

463:                                              ; preds = %460
  br label %468

464:                                              ; preds = %460
  %465 = load i32, ptr %14, align 4, !tbaa !11
  %466 = and i32 %465, 3
  %467 = add i32 %466, 1
  br label %468

468:                                              ; preds = %464, %463
  %469 = phi i32 [ 0, %463 ], [ %467, %464 ]
  %470 = load ptr, ptr %12, align 8, !tbaa !5
  %471 = load i32, ptr %470, align 8
  %472 = and i32 %469, 15
  %473 = shl i32 %472, 10
  %474 = and i32 %471, -15361
  %475 = or i32 %474, %473
  store i32 %475, ptr %470, align 8
  %476 = load i32, ptr %10, align 4, !tbaa !11
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %478, label %479

478:                                              ; preds = %468
  br label %483

479:                                              ; preds = %468
  %480 = load i32, ptr %14, align 4, !tbaa !11
  %481 = and i32 %480, 12
  %482 = lshr i32 %481, 2
  br label %483

483:                                              ; preds = %479, %478
  %484 = phi i32 [ 0, %478 ], [ %482, %479 ]
  %485 = load ptr, ptr %12, align 8, !tbaa !5
  %486 = load i32, ptr %485, align 8
  %487 = and i32 %484, 3
  %488 = shl i32 %487, 20
  %489 = and i32 %486, -3145729
  %490 = or i32 %489, %488
  store i32 %490, ptr %485, align 8
  %491 = load ptr, ptr %8, align 8, !tbaa !5
  %492 = call i32 @PACKET_get_quic_vlint(ptr noundef %491, ptr noundef %23)
  %493 = icmp ne i32 %492, 0
  br i1 %493, label %494, label %497

494:                                              ; preds = %483
  %495 = load i64, ptr %23, align 8, !tbaa !9
  %496 = icmp ult i64 %495, 4
  br i1 %496, label %497, label %498

497:                                              ; preds = %494, %483
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %568

498:                                              ; preds = %494
  %499 = load i32, ptr %11, align 4, !tbaa !11
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %507, label %501

501:                                              ; preds = %498
  %502 = load i64, ptr %23, align 8, !tbaa !9
  %503 = load ptr, ptr %8, align 8, !tbaa !5
  %504 = call i64 @PACKET_remaining(ptr noundef %503)
  %505 = icmp ugt i64 %502, %504
  br i1 %505, label %506, label %507

506:                                              ; preds = %501
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %568

507:                                              ; preds = %501, %498
  %508 = load ptr, ptr %8, align 8, !tbaa !5
  %509 = call ptr @PACKET_data(ptr noundef %508)
  store ptr %509, ptr %15, align 8, !tbaa !5
  %510 = load ptr, ptr %12, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %510, i32 0, i32 4
  %512 = getelementptr inbounds [4 x i8], ptr %511, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 2 %512, i8 0, i64 4, i1 false)
  %513 = load i32, ptr %10, align 4, !tbaa !11
  %514 = icmp ne i32 %513, 0
  br i1 %514, label %515, label %525

515:                                              ; preds = %507
  %516 = load ptr, ptr %8, align 8, !tbaa !5
  %517 = call i32 @PACKET_forward(ptr noundef %516, i64 noundef 4)
  %518 = icmp ne i32 %517, 0
  br i1 %518, label %520, label %519

519:                                              ; preds = %515
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %568

520:                                              ; preds = %515
  %521 = load i64, ptr %23, align 8, !tbaa !9
  %522 = sub i64 %521, 4
  %523 = load ptr, ptr %12, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %523, i32 0, i32 7
  store i64 %522, ptr %524, align 8, !tbaa !25
  br label %548

525:                                              ; preds = %507
  %526 = load ptr, ptr %8, align 8, !tbaa !5
  %527 = load ptr, ptr %12, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %527, i32 0, i32 4
  %529 = getelementptr inbounds [4 x i8], ptr %528, i64 0, i64 0
  %530 = load ptr, ptr %12, align 8, !tbaa !5
  %531 = load i32, ptr %530, align 8
  %532 = lshr i32 %531, 10
  %533 = and i32 %532, 15
  %534 = zext i32 %533 to i64
  %535 = call i32 @PACKET_copy_bytes(ptr noundef %526, ptr noundef %529, i64 noundef %534)
  %536 = icmp ne i32 %535, 0
  br i1 %536, label %538, label %537

537:                                              ; preds = %525
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %568

538:                                              ; preds = %525
  %539 = load i64, ptr %23, align 8, !tbaa !9
  %540 = load ptr, ptr %12, align 8, !tbaa !5
  %541 = load i32, ptr %540, align 8
  %542 = lshr i32 %541, 10
  %543 = and i32 %542, 15
  %544 = zext i32 %543 to i64
  %545 = sub i64 %539, %544
  %546 = load ptr, ptr %12, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %546, i32 0, i32 7
  store i64 %545, ptr %547, align 8, !tbaa !25
  br label %548

548:                                              ; preds = %538, %520
  %549 = load i32, ptr %11, align 4, !tbaa !11
  %550 = icmp ne i32 %549, 0
  br i1 %550, label %551, label %554

551:                                              ; preds = %548
  %552 = load ptr, ptr %12, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %552, i32 0, i32 8
  store ptr null, ptr %553, align 8, !tbaa !26
  br label %567

554:                                              ; preds = %548
  %555 = load ptr, ptr %8, align 8, !tbaa !5
  %556 = call ptr @PACKET_data(ptr noundef %555)
  %557 = load ptr, ptr %12, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %557, i32 0, i32 8
  store ptr %556, ptr %558, align 8, !tbaa !26
  %559 = load ptr, ptr %8, align 8, !tbaa !5
  %560 = load ptr, ptr %12, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.quic_pkt_hdr_st, ptr %560, i32 0, i32 7
  %562 = load i64, ptr %561, align 8, !tbaa !25
  %563 = call i32 @PACKET_forward(ptr noundef %559, i64 noundef %562)
  %564 = icmp ne i32 %563, 0
  br i1 %564, label %566, label %565

565:                                              ; preds = %554
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %568

566:                                              ; preds = %554
  br label %567

567:                                              ; preds = %566, %551
  store i32 0, ptr %17, align 4
  br label %568

568:                                              ; preds = %567, %565, %537, %519, %506, %497
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  %569 = load i32, ptr %17, align 4
  switch i32 %569, label %574 [
    i32 0, label %570
  ]

570:                                              ; preds = %568
  br label %571

571:                                              ; preds = %570, %459
  br label %572

572:                                              ; preds = %571
  br label %573

573:                                              ; preds = %572, %335
  store i32 0, ptr %17, align 4
  br label %574

574:                                              ; preds = %573, %568, %458, %415, %343, %339, %334, %303, %257, %222, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  %575 = load i32, ptr %17, align 4
  switch i32 %575, label %603 [
    i32 0, label %576
  ]

576:                                              ; preds = %574
  br label %577

577:                                              ; preds = %576, %209
  %578 = load ptr, ptr %13, align 8, !tbaa !5
  %579 = icmp ne ptr %578, null
  br i1 %579, label %580, label %602

580:                                              ; preds = %577
  %581 = load ptr, ptr %15, align 8, !tbaa !5
  %582 = load ptr, ptr %13, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %582, i32 0, i32 3
  store ptr %581, ptr %583, align 8, !tbaa !17
  %584 = load ptr, ptr %15, align 8, !tbaa !5
  %585 = icmp ne ptr %584, null
  br i1 %585, label %586, label %601

586:                                              ; preds = %580
  %587 = load ptr, ptr %15, align 8, !tbaa !5
  %588 = getelementptr inbounds i8, ptr %587, i64 4
  %589 = load ptr, ptr %13, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %589, i32 0, i32 1
  store ptr %588, ptr %590, align 8, !tbaa !15
  %591 = load ptr, ptr %8, align 8, !tbaa !5
  %592 = call ptr @PACKET_end(ptr noundef %591)
  %593 = load ptr, ptr %13, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %593, i32 0, i32 1
  %595 = load ptr, ptr %594, align 8, !tbaa !15
  %596 = ptrtoint ptr %592 to i64
  %597 = ptrtoint ptr %595 to i64
  %598 = sub i64 %596, %597
  %599 = load ptr, ptr %13, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.quic_pkt_hdr_ptrs_st, ptr %599, i32 0, i32 2
  store i64 %598, ptr %600, align 8, !tbaa !16
  br label %601

601:                                              ; preds = %586, %580
  br label %602

602:                                              ; preds = %601, %577
  store i32 1, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %603

603:                                              ; preds = %602, %574, %208, %182, %168, %150, %77, %69, %46
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  %604 = load i32, ptr %7, align 4
  ret i32 %604
}

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"quic_pkt_hdr_ptrs_st", !6, i64 0, !6, i64 8, !10, i64 16, !6, i64 24}
!15 = !{!14, !6, i64 8}
!16 = !{!14, !10, i64 16}
!17 = !{!14, !6, i64 24}
!18 = !{!19, !7, i64 8}
!19 = !{!"quic_pkt_hdr_st", !12, i64 0, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 2, !12, i64 2, !12, i64 4, !20, i64 8, !20, i64 29, !7, i64 50, !6, i64 56, !10, i64 64, !10, i64 72, !6, i64 80}
!20 = !{!"quic_conn_id_st", !7, i64 0, !7, i64 1}
!21 = !{!19, !12, i64 4}
!22 = !{!19, !7, i64 29}
!23 = !{!19, !6, i64 56}
!24 = !{!19, !10, i64 64}
!25 = !{!19, !10, i64 72}
!26 = !{!19, !6, i64 80}


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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @ossl_quic_wire_decode_pkt_hdr(ptr noundef %0, i64 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #1 {
  %7 = alloca i32, align 4
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #4
  %13 = tail call i64 @PACKET_remaining(ptr noundef %0)
  %.not = icmp eq ptr %5, null
  br i1 %.not, label %17, label %14

14:                                               ; preds = %6
  %15 = tail call ptr @PACKET_data(ptr noundef %0)
  store ptr %15, ptr %5, align 8, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %5, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %16, i8 0, i64 24, i1 false)
  br label %17

17:                                               ; preds = %14, %6
  %18 = icmp ult i64 %13, 7
  br i1 %18, label %249, label %19

19:                                               ; preds = %17
  %20 = call i32 @PACKET_get_1(ptr noundef %0, ptr noundef nonnull %7)
  %.not160 = icmp eq i32 %20, 0
  br i1 %.not160, label %249, label %21

21:                                               ; preds = %19
  %22 = load i32, ptr %4, align 8
  %23 = shl i32 %2, 14
  %24 = and i32 %23, 16384
  %25 = and i32 %22, -4145153
  %26 = or disjoint i32 %25, %24
  store i32 %26, ptr %4, align 8
  %27 = load i32, ptr %7, align 4, !tbaa !11
  %28 = and i32 %27, 128
  %29 = icmp eq i32 %28, 0
  br i1 %29, label %30, label %82

30:                                               ; preds = %21
  %31 = icmp ugt i64 %1, 20
  br i1 %31, label %249, label %32

32:                                               ; preds = %30
  %33 = and i32 %27, 64
  %34 = icmp eq i32 %33, 0
  %35 = icmp ult i64 %13, 21
  %or.cond = select i1 %34, i1 true, i1 %35
  br i1 %or.cond, label %249, label %36

36:                                               ; preds = %32
  %37 = shl i32 %27, 3
  %38 = and i32 %37, 256
  %39 = and i32 %26, -4162048
  %40 = or disjoint i32 %39, %38
  %41 = or disjoint i32 %40, 32773
  %.not175 = icmp eq i32 %2, 0
  br i1 %.not175, label %44, label %42

42:                                               ; preds = %36
  %43 = and i32 %41, -4144891
  br label %56

44:                                               ; preds = %36
  %45 = shl i32 %27, 7
  %46 = and i32 %45, 512
  %47 = and i32 %41, -4144891
  %48 = or disjoint i32 %46, %47
  %49 = shl i32 %27, 10
  %50 = and i32 %49, 3072
  %51 = add nuw nsw i32 %50, 1024
  %52 = or disjoint i32 %48, %51
  %53 = shl i32 %27, 17
  %54 = and i32 %53, 3145728
  %55 = or disjoint i32 %52, %54
  br label %56

56:                                               ; preds = %44, %42
  %storemerge = phi i32 [ %55, %44 ], [ %43, %42 ]
  store i32 %storemerge, ptr %4, align 8
  %57 = getelementptr inbounds i8, ptr %4, i64 9
  %58 = call i32 @PACKET_copy_bytes(ptr noundef %0, ptr noundef nonnull %57, i64 noundef %1)
  %.not176 = icmp eq i32 %58, 0
  br i1 %.not176, label %249, label %59

59:                                               ; preds = %56
  %60 = getelementptr inbounds i8, ptr %4, i64 8
  %61 = trunc nuw nsw i64 %1 to i8
  store i8 %61, ptr %60, align 8, !tbaa !13
  %62 = getelementptr inbounds i8, ptr %4, i64 50
  store i32 0, ptr %62, align 2
  %63 = call ptr @PACKET_data(ptr noundef %0)
  br i1 %.not175, label %66, label %64

64:                                               ; preds = %59
  %65 = call i32 @PACKET_forward(ptr noundef %0, i64 noundef 4)
  %.not178 = icmp eq i32 %65, 0
  br i1 %.not178, label %249, label %72

66:                                               ; preds = %59
  %67 = load i32, ptr %4, align 8
  %68 = lshr i32 %67, 10
  %69 = and i32 %68, 15
  %70 = zext nneg i32 %69 to i64
  %71 = call i32 @PACKET_copy_bytes(ptr noundef %0, ptr noundef nonnull %62, i64 noundef %70)
  %.not177 = icmp eq i32 %71, 0
  br i1 %.not177, label %249, label %72

72:                                               ; preds = %66, %64
  %73 = getelementptr inbounds i8, ptr %4, i64 4
  store i32 0, ptr %73, align 4, !tbaa !16
  %74 = getelementptr inbounds i8, ptr %4, i64 29
  store i8 0, ptr %74, align 1, !tbaa !17
  %75 = getelementptr inbounds i8, ptr %4, i64 56
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %75, i8 0, i64 16, i1 false)
  %76 = call i64 @PACKET_remaining(ptr noundef %0)
  %77 = getelementptr inbounds i8, ptr %4, i64 72
  store i64 %76, ptr %77, align 8, !tbaa !18
  %78 = call ptr @PACKET_data(ptr noundef %0)
  %79 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr %78, ptr %79, align 8, !tbaa !19
  %80 = load i64, ptr %77, align 8, !tbaa !18
  %81 = call i32 @PACKET_forward(ptr noundef %0, i64 noundef %80)
  %.not179 = icmp eq i32 %81, 0
  br i1 %.not179, label %249, label %237

82:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  %83 = call i32 @PACKET_get_net_4(ptr noundef %0, ptr noundef nonnull %8)
  %.not161 = icmp eq i32 %83, 0
  br i1 %.not161, label %.thread184, label %84

84:                                               ; preds = %82
  %85 = load i64, ptr %8, align 8, !tbaa !20
  %.not162 = icmp eq i64 %85, 0
  br i1 %.not162, label %90, label %86

86:                                               ; preds = %84
  %87 = load i32, ptr %7, align 4, !tbaa !11
  %88 = and i32 %87, 64
  %89 = icmp eq i32 %88, 0
  br i1 %89, label %.thread184, label %90

90:                                               ; preds = %86, %84
  %91 = call i32 @PACKET_get_1(ptr noundef %0, ptr noundef nonnull %9)
  %92 = icmp eq i32 %91, 0
  %93 = load i32, ptr %9, align 4
  %94 = icmp ugt i32 %93, 20
  %or.cond5 = select i1 %92, i1 true, i1 %94
  br i1 %or.cond5, label %.thread184, label %95

95:                                               ; preds = %90
  %96 = getelementptr inbounds i8, ptr %4, i64 8
  %97 = getelementptr inbounds i8, ptr %4, i64 9
  %98 = zext nneg i32 %93 to i64
  %99 = call i32 @PACKET_copy_bytes(ptr noundef %0, ptr noundef nonnull %97, i64 noundef %98)
  %.not163 = icmp eq i32 %99, 0
  br i1 %.not163, label %.thread184, label %100

100:                                              ; preds = %95
  %101 = call i32 @PACKET_get_1(ptr noundef %0, ptr noundef nonnull %10)
  %102 = icmp eq i32 %101, 0
  %103 = load i32, ptr %10, align 4
  %104 = icmp ugt i32 %103, 20
  %or.cond7 = select i1 %102, i1 true, i1 %104
  br i1 %or.cond7, label %.thread184, label %105

105:                                              ; preds = %100
  %106 = getelementptr inbounds i8, ptr %4, i64 30
  %107 = zext nneg i32 %103 to i64
  %108 = call i32 @PACKET_copy_bytes(ptr noundef %0, ptr noundef nonnull %106, i64 noundef %107)
  %.not164 = icmp eq i32 %108, 0
  br i1 %.not164, label %.thread184, label %109

109:                                              ; preds = %105
  %110 = getelementptr inbounds i8, ptr %4, i64 29
  %111 = load i64, ptr %8, align 8, !tbaa !20
  %112 = trunc i64 %111 to i32
  %113 = getelementptr inbounds i8, ptr %4, i64 4
  store i32 %112, ptr %113, align 4, !tbaa !16
  %114 = load i32, ptr %9, align 4, !tbaa !11
  %115 = trunc i32 %114 to i8
  store i8 %115, ptr %96, align 8, !tbaa !13
  %116 = load i32, ptr %10, align 4, !tbaa !11
  %117 = trunc i32 %116 to i8
  store i8 %117, ptr %110, align 1, !tbaa !17
  switch i64 %111, label %.thread184 [
    i64 0, label %118
    i64 1, label %137
  ]

118:                                              ; preds = %109
  %119 = load i32, ptr %4, align 8
  %120 = load i32, ptr %7, align 4, !tbaa !11
  %121 = shl i32 %120, 9
  %122 = and i32 %121, 32768
  %123 = and i32 %119, -33024
  %124 = or disjoint i32 %123, 6
  %125 = or disjoint i32 %122, %124
  store i32 %125, ptr %4, align 8
  %126 = call ptr @PACKET_data(ptr noundef %0)
  %127 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr %126, ptr %127, align 8, !tbaa !19
  %128 = call i64 @PACKET_remaining(ptr noundef %0)
  %129 = getelementptr inbounds i8, ptr %4, i64 72
  store i64 %128, ptr %129, align 8, !tbaa !18
  %130 = and i64 %128, 3
  %.not173 = icmp eq i64 %130, 0
  br i1 %.not173, label %131, label %.thread184

131:                                              ; preds = %118
  %132 = load i32, ptr %4, align 8
  %133 = and i32 %132, -32513
  store i32 %133, ptr %4, align 8
  %134 = getelementptr inbounds i8, ptr %4, i64 56
  %135 = getelementptr inbounds i8, ptr %4, i64 50
  store i32 0, ptr %135, align 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %134, i8 0, i64 16, i1 false)
  %136 = call i32 @PACKET_forward(ptr noundef %0, i64 noundef %128)
  %.not174 = icmp eq i32 %136, 0
  br i1 %.not174, label %.thread184, label %236

137:                                              ; preds = %109
  %138 = icmp ult i64 %13, 21
  br i1 %138, label %.thread184, label %139

139:                                              ; preds = %137
  %140 = load i32, ptr %7, align 4, !tbaa !11
  %141 = lshr i32 %140, 4
  %142 = and i32 %141, 3
  %143 = load i32, ptr %4, align 8
  %144 = and i32 %143, -49152
  switch i32 %142, label %default.unreachable187 [
    i32 0, label %148
    i32 1, label %145
    i32 2, label %146
    i32 3, label %147
  ]

145:                                              ; preds = %139
  br label %148

146:                                              ; preds = %139
  br label %148

147:                                              ; preds = %139
  br label %148

default.unreachable187:                           ; preds = %139
  unreachable

148:                                              ; preds = %139, %147, %146, %145
  %149 = phi i1 [ false, %147 ], [ false, %146 ], [ false, %145 ], [ true, %139 ]
  %.sink = phi i32 [ 4, %147 ], [ 3, %146 ], [ 2, %145 ], [ 1, %139 ]
  %150 = or disjoint i32 %144, %.sink
  %151 = or disjoint i32 %150, 32768
  store i32 %151, ptr %4, align 8
  br i1 %149, label %152, label %165

152:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #4
  %153 = call i32 @PACKET_get_quic_vlint(ptr noundef %0, ptr noundef nonnull %11)
  %154 = icmp eq i32 %153, 0
  br i1 %154, label %.critedge, label %155

155:                                              ; preds = %152
  %156 = load i64, ptr %11, align 8
  %157 = getelementptr inbounds i8, ptr %4, i64 56
  %158 = call i32 @PACKET_get_bytes(ptr noundef %0, ptr noundef nonnull %157, i64 noundef %156)
  %.not166 = icmp eq i32 %158, 0
  br i1 %.not166, label %.critedge, label %159

159:                                              ; preds = %155
  %160 = load i64, ptr %11, align 8, !tbaa !20
  %161 = getelementptr inbounds i8, ptr %4, i64 64
  store i64 %160, ptr %161, align 8, !tbaa !21
  %162 = icmp eq i64 %160, 0
  br i1 %162, label %163, label %164

163:                                              ; preds = %159
  store ptr null, ptr %157, align 8, !tbaa !22
  br label %164

164:                                              ; preds = %159, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  %.pre = load i32, ptr %4, align 8
  br label %167

165:                                              ; preds = %148
  %166 = getelementptr inbounds i8, ptr %4, i64 56
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %166, i8 0, i64 16, i1 false)
  br label %167

167:                                              ; preds = %164, %165
  %168 = phi i32 [ %.pre, %164 ], [ %151, %165 ]
  %169 = and i32 %168, 255
  %170 = icmp eq i32 %169, 4
  br i1 %170, label %171, label %184

171:                                              ; preds = %167
  %172 = call ptr @PACKET_data(ptr noundef %0)
  %173 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr %172, ptr %173, align 8, !tbaa !19
  %174 = call i64 @PACKET_remaining(ptr noundef %0)
  %175 = getelementptr inbounds i8, ptr %4, i64 72
  store i64 %174, ptr %175, align 8, !tbaa !18
  %176 = load i32, ptr %4, align 8
  %177 = load i32, ptr %7, align 4, !tbaa !11
  %178 = shl i32 %177, 16
  %179 = and i32 %178, 983040
  %180 = and i32 %176, -999425
  %181 = or disjoint i32 %179, %180
  store i32 %181, ptr %4, align 8
  %182 = getelementptr inbounds i8, ptr %4, i64 50
  store i32 0, ptr %182, align 2
  %183 = call i32 @PACKET_forward(ptr noundef %0, i64 noundef %174)
  %.not172 = icmp eq i32 %183, 0
  br i1 %.not172, label %.thread184, label %236

184:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #4
  %.not167 = icmp eq i32 %2, 0
  %185 = load i32, ptr %7, align 4
  %186 = shl i32 %185, 10
  %187 = and i32 %186, 3072
  %188 = add nuw nsw i32 %187, 1024
  %189 = select i1 %.not167, i32 %188, i32 0
  %190 = and i32 %168, -3161089
  %191 = shl i32 %185, 18
  %192 = and i32 %191, 3145728
  %193 = select i1 %.not167, i32 %192, i32 0
  %194 = or disjoint i32 %193, %190
  %195 = or disjoint i32 %194, %189
  store i32 %195, ptr %4, align 8
  %196 = call i32 @PACKET_get_quic_vlint(ptr noundef %0, ptr noundef nonnull %12)
  %197 = icmp eq i32 %196, 0
  %198 = load i64, ptr %12, align 8
  %199 = icmp ult i64 %198, 4
  %or.cond11 = select i1 %197, i1 true, i1 %199
  br i1 %or.cond11, label %.thread, label %200

200:                                              ; preds = %184
  %.not168 = icmp eq i32 %3, 0
  br i1 %.not168, label %201, label %204

201:                                              ; preds = %200
  %202 = call i64 @PACKET_remaining(ptr noundef %0)
  %203 = icmp ugt i64 %198, %202
  br i1 %203, label %.thread, label %204

204:                                              ; preds = %201, %200
  %205 = call ptr @PACKET_data(ptr noundef %0)
  %206 = getelementptr inbounds i8, ptr %4, i64 50
  store i32 0, ptr %206, align 2
  br i1 %.not167, label %212, label %207

207:                                              ; preds = %204
  %208 = call i32 @PACKET_forward(ptr noundef %0, i64 noundef 4)
  %.not170 = icmp eq i32 %208, 0
  br i1 %.not170, label %.thread, label %209

209:                                              ; preds = %207
  %210 = load i64, ptr %12, align 8, !tbaa !20
  %211 = add i64 %210, -4
  br label %225

212:                                              ; preds = %204
  %213 = load i32, ptr %4, align 8
  %214 = lshr i32 %213, 10
  %215 = and i32 %214, 15
  %216 = zext nneg i32 %215 to i64
  %217 = call i32 @PACKET_copy_bytes(ptr noundef %0, ptr noundef nonnull %206, i64 noundef %216)
  %.not169 = icmp eq i32 %217, 0
  br i1 %.not169, label %.thread, label %218

218:                                              ; preds = %212
  %219 = load i64, ptr %12, align 8, !tbaa !20
  %220 = load i32, ptr %4, align 8
  %221 = lshr i32 %220, 10
  %222 = and i32 %221, 15
  %223 = zext nneg i32 %222 to i64
  %224 = sub i64 %219, %223
  br label %225

225:                                              ; preds = %218, %209
  %.sink188 = phi i64 [ %224, %218 ], [ %211, %209 ]
  %226 = getelementptr inbounds i8, ptr %4, i64 72
  store i64 %.sink188, ptr %226, align 8, !tbaa !18
  br i1 %.not168, label %229, label %227

227:                                              ; preds = %225
  %228 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr null, ptr %228, align 8, !tbaa !19
  br label %235

229:                                              ; preds = %225
  %230 = call ptr @PACKET_data(ptr noundef %0)
  %231 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr %230, ptr %231, align 8, !tbaa !19
  %232 = getelementptr inbounds i8, ptr %4, i64 72
  %233 = load i64, ptr %232, align 8, !tbaa !18
  %234 = call i32 @PACKET_forward(ptr noundef %0, i64 noundef %233)
  %.not171 = icmp eq i32 %234, 0
  br i1 %.not171, label %.thread, label %235

.thread:                                          ; preds = %184, %201, %207, %212, %229
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  br label %.thread184

235:                                              ; preds = %227, %229
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  br label %236

.critedge:                                        ; preds = %152, %155
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  br label %.thread184

.thread184:                                       ; preds = %82, %86, %105, %100, %95, %90, %118, %131, %109, %137, %.critedge, %171, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  br label %249

236:                                              ; preds = %131, %171, %235
  %.1151 = phi ptr [ null, %131 ], [ null, %171 ], [ %205, %235 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  br label %237

237:                                              ; preds = %236, %72
  %.3153 = phi ptr [ %63, %72 ], [ %.1151, %236 ]
  br i1 %.not, label %249, label %238

238:                                              ; preds = %237
  %239 = getelementptr inbounds i8, ptr %5, i64 24
  store ptr %.3153, ptr %239, align 8, !tbaa !23
  %.not180 = icmp eq ptr %.3153, null
  br i1 %.not180, label %249, label %240

240:                                              ; preds = %238
  %241 = getelementptr inbounds i8, ptr %.3153, i64 4
  %242 = getelementptr inbounds i8, ptr %5, i64 8
  store ptr %241, ptr %242, align 8, !tbaa !24
  %243 = call ptr @PACKET_end(ptr noundef %0)
  %244 = load ptr, ptr %242, align 8, !tbaa !24
  %245 = ptrtoint ptr %243 to i64
  %246 = ptrtoint ptr %244 to i64
  %247 = sub i64 %245, %246
  %248 = getelementptr inbounds i8, ptr %5, i64 16
  store i64 %247, ptr %248, align 8, !tbaa !25
  br label %249

249:                                              ; preds = %.thread184, %237, %240, %238, %72, %66, %64, %56, %32, %30, %17, %19
  %.5 = phi i32 [ 0, %19 ], [ 0, %17 ], [ 0, %30 ], [ 0, %32 ], [ 0, %56 ], [ 0, %64 ], [ 0, %66 ], [ 0, %72 ], [ 1, %238 ], [ 1, %240 ], [ 1, %237 ], [ 0, %.thread184 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #4
  ret i32 %.5
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @PACKET_remaining(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @PACKET_copy_bytes(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @PACKET_forward(ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @PACKET_get_bytes(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"quic_pkt_hdr_ptrs_st", !7, i64 0, !7, i64 8, !10, i64 16, !7, i64 24}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!14, !8, i64 8}
!14 = !{!"quic_pkt_hdr_st", !12, i64 0, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 2, !12, i64 2, !12, i64 4, !15, i64 8, !15, i64 29, !8, i64 50, !7, i64 56, !10, i64 64, !10, i64 72, !7, i64 80}
!15 = !{!"quic_conn_id_st", !8, i64 0, !8, i64 1}
!16 = !{!14, !12, i64 4}
!17 = !{!14, !8, i64 29}
!18 = !{!14, !10, i64 72}
!19 = !{!14, !7, i64 80}
!20 = !{!10, !10, i64 0}
!21 = !{!14, !10, i64 64}
!22 = !{!14, !7, i64 56}
!23 = !{!6, !7, i64 24}
!24 = !{!6, !7, i64 8}
!25 = !{!6, !10, i64 16}


; Effective O3 passes: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,MemCpyOptPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass