; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/NetworkPkg/Ip6Dxe (Ip6Reassemble)

; 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.NET_BUF = type { i32, i64, %struct._LIST_ENTRY, %union.NET_IP_HEAD, ptr, ptr, [64 x i8], ptr, i32, i32, [1 x %struct.NET_BLOCK_OP] }
%struct._LIST_ENTRY = type { ptr, ptr }
%union.NET_IP_HEAD = type { ptr }
%struct.NET_BLOCK_OP = type { ptr, ptr, ptr, ptr, i32 }
%struct._EFI_IP6_HEADER = type { i16, i16, i16, i8, i8, %struct.EFI_IPv6_ADDRESS, %struct.EFI_IPv6_ADDRESS }
%struct.EFI_IPv6_ADDRESS = type { [16 x i8] }
%struct.IP6_CLIP_INFO = type { i32, i32, i32, i32, i32, i32, i64, i32, i16, i8, i8, i32 }
%struct.IP6_ASSEMBLE_TABLE = type { [127 x %struct._LIST_ENTRY] }
%struct.IP6_ASSEMBLE_ENTRY = type { %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct.EFI_IPv6_ADDRESS, %struct.EFI_IPv6_ADDRESS, i32, i32, i32, i32, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [130 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1

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

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

declare ptr @CopyMem(ptr noundef, ptr noundef, i64 noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @Ip6FreeAssembleEntry(ptr noundef) #0

declare ptr @RemoveEntryList(ptr noundef) #2

declare void @NetbufFree(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @Ip6OnFreeFragments(ptr noundef) #0

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

declare zeroext i8 @DebugAssertEnabled() #2

declare void @DebugAssert(ptr noundef, i64 noundef, ptr noundef) #2

declare i32 @NetbufTrim(ptr noundef, i32 noundef, i8 noundef zeroext) #2

; Function Attrs: nounwind uwtable
define dso_local ptr @Ip6Reassemble(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca i16, align 2
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.NET_BUF, ptr %23, i32 0, i32 3
  %25 = load ptr, ptr %24, align 8, !tbaa !9
  store ptr %25, ptr %6, align 8, !tbaa !5
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.NET_BUF, ptr %26, i32 0, i32 6
  %28 = getelementptr inbounds [64 x i8], ptr %27, i64 0, i64 0
  store ptr %28, ptr %7, align 8, !tbaa !5
  br label %29

29:                                               ; preds = %2
  %30 = call zeroext i8 @DebugAssertEnabled()
  %31 = icmp ne i8 %30, 0
  br i1 %31, label %32, label %37

32:                                               ; preds = %29
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %36, label %35

35:                                               ; preds = %32
  call void @DebugAssert(ptr noundef @.str, i64 noundef 188, ptr noundef @.str.3)
  br label %36

36:                                               ; preds = %35, %32
  br label %37

37:                                               ; preds = %36, %29
  br label %38

38:                                               ; preds = %37
  br label %39

39:                                               ; preds = %38
  store ptr null, ptr %9, align 8, !tbaa !5
  %40 = load ptr, ptr %6, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %40, i32 0, i32 6
  %42 = load i32, ptr %41, align 1, !tbaa !10
  %43 = load ptr, ptr %6, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %43, i32 0, i32 5
  %45 = load i32, ptr %44, align 1, !tbaa !10
  %46 = add i32 %42, %45
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %47, i32 0, i32 7
  %49 = load i32, ptr %48, align 8, !tbaa !12
  %50 = add i32 %46, %49
  %51 = urem i32 %50, 127
  %52 = zext i32 %51 to i64
  store i64 %52, ptr %19, align 8, !tbaa !16
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.IP6_ASSEMBLE_TABLE, ptr %53, i32 0, i32 0
  %55 = load i64, ptr %19, align 8, !tbaa !16
  %56 = getelementptr inbounds [127 x %struct._LIST_ENTRY], ptr %54, i64 0, i64 %55
  %57 = getelementptr inbounds %struct._LIST_ENTRY, ptr %56, i32 0, i32 0
  %58 = load ptr, ptr %57, align 8, !tbaa !17
  store ptr %58, ptr %13, align 8, !tbaa !5
  br label %59

59:                                               ; preds = %95, %39
  %60 = load ptr, ptr %13, align 8, !tbaa !5
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.IP6_ASSEMBLE_TABLE, ptr %61, i32 0, i32 0
  %63 = load i64, ptr %19, align 8, !tbaa !16
  %64 = getelementptr inbounds [127 x %struct._LIST_ENTRY], ptr %62, i64 0, i64 %63
  %65 = icmp ne ptr %60, %64
  br i1 %65, label %66, label %99

66:                                               ; preds = %59
  %67 = load ptr, ptr %13, align 8, !tbaa !5
  %68 = ptrtoint ptr %67 to i64
  %69 = sub i64 %68, 0
  %70 = inttoptr i64 %69 to ptr
  store ptr %70, ptr %10, align 8, !tbaa !5
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %71, i32 0, i32 4
  %73 = load i32, ptr %72, align 8, !tbaa !19
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %74, i32 0, i32 7
  %76 = load i32, ptr %75, align 8, !tbaa !12
  %77 = icmp eq i32 %73, %76
  br i1 %77, label %78, label %94

78:                                               ; preds = %66
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %79, i32 0, i32 3
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %81, i32 0, i32 5
  %83 = call i64 @CompareMem(ptr noundef %80, ptr noundef %82, i64 noundef 16)
  %84 = icmp eq i64 %83, 0
  br i1 %84, label %85, label %94

85:                                               ; preds = %78
  %86 = load ptr, ptr %10, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %86, i32 0, i32 2
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %88, i32 0, i32 6
  %90 = call i64 @CompareMem(ptr noundef %87, ptr noundef %89, i64 noundef 16)
  %91 = icmp eq i64 %90, 0
  br i1 %91, label %92, label %94

92:                                               ; preds = %85
  %93 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %93, ptr %9, align 8, !tbaa !5
  br label %99

94:                                               ; preds = %85, %78, %66
  br label %95

95:                                               ; preds = %94
  %96 = load ptr, ptr %13, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct._LIST_ENTRY, ptr %96, i32 0, i32 0
  %98 = load ptr, ptr %97, align 8, !tbaa !17
  store ptr %98, ptr %13, align 8, !tbaa !5
  br label %59, !llvm.loop !22

99:                                               ; preds = %92, %59
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = icmp eq ptr %100, null
  br i1 %101, label %102, label %122

102:                                              ; preds = %99
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %103, i32 0, i32 6
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %105, i32 0, i32 5
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %107, i32 0, i32 7
  %109 = load i32, ptr %108, align 8, !tbaa !12
  %110 = call ptr @Ip6CreateAssembleEntry(ptr noundef %104, ptr noundef %106, i32 noundef %109)
  store ptr %110, ptr %9, align 8, !tbaa !5
  %111 = load ptr, ptr %9, align 8, !tbaa !5
  %112 = icmp eq ptr %111, null
  br i1 %112, label %113, label %114

113:                                              ; preds = %102
  br label %499

114:                                              ; preds = %102
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.IP6_ASSEMBLE_TABLE, ptr %115, i32 0, i32 0
  %117 = load i64, ptr %19, align 8, !tbaa !16
  %118 = getelementptr inbounds [127 x %struct._LIST_ENTRY], ptr %116, i64 0, i64 %117
  %119 = load ptr, ptr %9, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %119, i32 0, i32 0
  %121 = call ptr @InsertHeadList(ptr noundef %118, ptr noundef %120)
  br label %122

122:                                              ; preds = %114, %99
  %123 = load ptr, ptr %9, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %123, i32 0, i32 1
  store ptr %124, ptr %11, align 8, !tbaa !5
  %125 = load ptr, ptr %11, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct._LIST_ENTRY, ptr %125, i32 0, i32 0
  %127 = load ptr, ptr %126, align 8, !tbaa !17
  store ptr %127, ptr %13, align 8, !tbaa !5
  br label %128

128:                                              ; preds = %148, %122
  %129 = load ptr, ptr %13, align 8, !tbaa !5
  %130 = load ptr, ptr %11, align 8, !tbaa !5
  %131 = icmp ne ptr %129, %130
  br i1 %131, label %132, label %152

132:                                              ; preds = %128
  %133 = load ptr, ptr %13, align 8, !tbaa !5
  %134 = ptrtoint ptr %133 to i64
  %135 = sub i64 %134, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %136 = inttoptr i64 %135 to ptr
  store ptr %136, ptr %14, align 8, !tbaa !5
  %137 = load ptr, ptr %7, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %137, i32 0, i32 2
  %139 = load i32, ptr %138, align 8, !tbaa !24
  %140 = load ptr, ptr %14, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.NET_BUF, ptr %140, i32 0, i32 6
  %142 = getelementptr inbounds [64 x i8], ptr %141, i64 0, i64 0
  %143 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %142, i32 0, i32 2
  %144 = load i32, ptr %143, align 8, !tbaa !24
  %145 = icmp slt i32 %139, %144
  br i1 %145, label %146, label %147

146:                                              ; preds = %132
  br label %152

147:                                              ; preds = %132
  br label %148

148:                                              ; preds = %147
  %149 = load ptr, ptr %13, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct._LIST_ENTRY, ptr %149, i32 0, i32 0
  %151 = load ptr, ptr %150, align 8, !tbaa !17
  store ptr %151, ptr %13, align 8, !tbaa !5
  br label %128, !llvm.loop !25

152:                                              ; preds = %146, %128
  %153 = load ptr, ptr %13, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._LIST_ENTRY, ptr %153, i32 0, i32 1
  %155 = load ptr, ptr %154, align 8, !tbaa !26
  store ptr %155, ptr %12, align 8, !tbaa !5
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = icmp ne ptr %155, %156
  br i1 %157, label %158, label %193

158:                                              ; preds = %152
  %159 = load ptr, ptr %12, align 8, !tbaa !5
  %160 = ptrtoint ptr %159 to i64
  %161 = sub i64 %160, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %162 = inttoptr i64 %161 to ptr
  store ptr %162, ptr %14, align 8, !tbaa !5
  %163 = load ptr, ptr %14, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.NET_BUF, ptr %163, i32 0, i32 6
  %165 = getelementptr inbounds [64 x i8], ptr %164, i64 0, i64 0
  store ptr %165, ptr %8, align 8, !tbaa !5
  %166 = load ptr, ptr %7, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %166, i32 0, i32 2
  %168 = load i32, ptr %167, align 8, !tbaa !24
  %169 = load ptr, ptr %8, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %169, i32 0, i32 3
  %171 = load i32, ptr %170, align 4, !tbaa !27
  %172 = icmp slt i32 %168, %171
  br i1 %172, label %173, label %192

173:                                              ; preds = %158
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %174, i32 0, i32 3
  %176 = load i32, ptr %175, align 4, !tbaa !27
  %177 = load ptr, ptr %8, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %177, i32 0, i32 3
  %179 = load i32, ptr %178, align 4, !tbaa !27
  %180 = icmp sle i32 %176, %179
  br i1 %180, label %181, label %182

181:                                              ; preds = %173
  br label %499

182:                                              ; preds = %173
  %183 = load ptr, ptr %14, align 8, !tbaa !5
  %184 = load ptr, ptr %8, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %184, i32 0, i32 2
  %186 = load i32, ptr %185, align 8, !tbaa !24
  %187 = sext i32 %186 to i64
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %188, i32 0, i32 2
  %190 = load i32, ptr %189, align 8, !tbaa !24
  %191 = sext i32 %190 to i64
  call void @Ip6TrimPacket(ptr noundef %183, i64 noundef %187, i64 noundef %191)
  br label %192

192:                                              ; preds = %182, %158
  br label %193

193:                                              ; preds = %192, %152
  %194 = load ptr, ptr %13, align 8, !tbaa !5
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.NET_BUF, ptr %195, i32 0, i32 2
  call void @NetListInsertBefore(ptr noundef %194, ptr noundef %196)
  br label %197

197:                                              ; preds = %216, %193
  %198 = load ptr, ptr %13, align 8, !tbaa !5
  %199 = load ptr, ptr %11, align 8, !tbaa !5
  %200 = icmp ne ptr %198, %199
  br i1 %200, label %201, label %262

201:                                              ; preds = %197
  %202 = load ptr, ptr %13, align 8, !tbaa !5
  %203 = ptrtoint ptr %202 to i64
  %204 = sub i64 %203, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %205 = inttoptr i64 %204 to ptr
  store ptr %205, ptr %14, align 8, !tbaa !5
  %206 = load ptr, ptr %14, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.NET_BUF, ptr %206, i32 0, i32 6
  %208 = getelementptr inbounds [64 x i8], ptr %207, i64 0, i64 0
  store ptr %208, ptr %8, align 8, !tbaa !5
  %209 = load ptr, ptr %8, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %209, i32 0, i32 3
  %211 = load i32, ptr %210, align 4, !tbaa !27
  %212 = load ptr, ptr %7, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %212, i32 0, i32 3
  %214 = load i32, ptr %213, align 4, !tbaa !27
  %215 = icmp sle i32 %211, %214
  br i1 %215, label %216, label %231

216:                                              ; preds = %201
  %217 = load ptr, ptr %13, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct._LIST_ENTRY, ptr %217, i32 0, i32 0
  %219 = load ptr, ptr %218, align 8, !tbaa !17
  store ptr %219, ptr %13, align 8, !tbaa !5
  %220 = load ptr, ptr %14, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.NET_BUF, ptr %220, i32 0, i32 2
  %222 = call ptr @RemoveEntryList(ptr noundef %221)
  %223 = load ptr, ptr %8, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %223, i32 0, i32 4
  %225 = load i32, ptr %224, align 8, !tbaa !28
  %226 = load ptr, ptr %9, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %226, i32 0, i32 6
  %228 = load i32, ptr %227, align 8, !tbaa !29
  %229 = sub i32 %228, %225
  store i32 %229, ptr %227, align 8, !tbaa !29
  %230 = load ptr, ptr %14, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %230)
  br label %197, !llvm.loop !30

231:                                              ; preds = %201
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %232, i32 0, i32 2
  %234 = load i32, ptr %233, align 8, !tbaa !24
  %235 = load ptr, ptr %7, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %235, i32 0, i32 3
  %237 = load i32, ptr %236, align 4, !tbaa !27
  %238 = icmp slt i32 %234, %237
  br i1 %238, label %239, label %261

239:                                              ; preds = %231
  %240 = load ptr, ptr %7, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %240, i32 0, i32 2
  %242 = load i32, ptr %241, align 8, !tbaa !24
  %243 = load ptr, ptr %8, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %243, i32 0, i32 2
  %245 = load i32, ptr %244, align 8, !tbaa !24
  %246 = icmp eq i32 %242, %245
  br i1 %246, label %247, label %251

247:                                              ; preds = %239
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.NET_BUF, ptr %248, i32 0, i32 2
  %250 = call ptr @RemoveEntryList(ptr noundef %249)
  br label %499

251:                                              ; preds = %239
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %253, i32 0, i32 2
  %255 = load i32, ptr %254, align 8, !tbaa !24
  %256 = sext i32 %255 to i64
  %257 = load ptr, ptr %8, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %257, i32 0, i32 2
  %259 = load i32, ptr %258, align 8, !tbaa !24
  %260 = sext i32 %259 to i64
  call void @Ip6TrimPacket(ptr noundef %252, i64 noundef %256, i64 noundef %260)
  br label %261

261:                                              ; preds = %251, %231
  br label %262

262:                                              ; preds = %261, %197
  %263 = load ptr, ptr %7, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %263, i32 0, i32 4
  %265 = load i32, ptr %264, align 8, !tbaa !28
  %266 = load ptr, ptr %9, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %266, i32 0, i32 6
  %268 = load i32, ptr %267, align 8, !tbaa !29
  %269 = add i32 %268, %265
  store i32 %269, ptr %267, align 8, !tbaa !29
  %270 = load ptr, ptr %7, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %270, i32 0, i32 2
  %272 = load i32, ptr %271, align 8, !tbaa !24
  %273 = icmp eq i32 %272, 0
  br i1 %273, label %274, label %367

274:                                              ; preds = %262
  %275 = load ptr, ptr %9, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %275, i32 0, i32 8
  %277 = load ptr, ptr %276, align 8, !tbaa !31
  %278 = icmp ne ptr %277, null
  br i1 %278, label %284, label %279

279:                                              ; preds = %274
  %280 = load ptr, ptr %9, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %280, i32 0, i32 10
  %282 = load ptr, ptr %281, align 8, !tbaa !32
  %283 = icmp ne ptr %282, null
  br i1 %283, label %284, label %285

284:                                              ; preds = %279, %274
  br label %499

285:                                              ; preds = %279
  %286 = load ptr, ptr %5, align 8, !tbaa !5
  %287 = call ptr @NetbufDuplicate(ptr noundef %286, ptr noundef null, i32 noundef 40)
  store ptr %287, ptr %17, align 8, !tbaa !5
  %288 = load ptr, ptr %17, align 8, !tbaa !5
  %289 = icmp eq ptr %288, null
  br i1 %289, label %290, label %291

290:                                              ; preds = %285
  br label %499

291:                                              ; preds = %285
  %292 = load ptr, ptr %17, align 8, !tbaa !5
  %293 = call ptr @NetbufGetByte(ptr noundef %292, i32 noundef 0, ptr noundef null)
  store ptr %293, ptr %18, align 8, !tbaa !5
  br label %294

294:                                              ; preds = %291
  %295 = call zeroext i8 @DebugAssertEnabled()
  %296 = icmp ne i8 %295, 0
  br i1 %296, label %297, label %302

297:                                              ; preds = %294
  %298 = load ptr, ptr %18, align 8, !tbaa !5
  %299 = icmp ne ptr %298, null
  br i1 %299, label %301, label %300

300:                                              ; preds = %297
  call void @DebugAssert(ptr noundef @.str, i64 noundef 338, ptr noundef @.str.4)
  br label %301

301:                                              ; preds = %300, %297
  br label %302

302:                                              ; preds = %301, %294
  br label %303

303:                                              ; preds = %302
  br label %304

304:                                              ; preds = %303
  %305 = load ptr, ptr %18, align 8, !tbaa !5
  %306 = call ptr @Ip6NtohHead(ptr noundef %305)
  %307 = load ptr, ptr %17, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.NET_BUF, ptr %307, i32 0, i32 3
  store ptr %306, ptr %308, align 8, !tbaa !9
  %309 = load ptr, ptr %17, align 8, !tbaa !5
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %310, i32 0, i32 10
  store ptr %309, ptr %311, align 8, !tbaa !32
  %312 = load ptr, ptr %7, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %312, i32 0, i32 8
  %314 = load i16, ptr %313, align 4, !tbaa !33
  %315 = zext i16 %314 to i64
  %316 = sub i64 %315, 40
  %317 = trunc i64 %316 to i16
  store i16 %317, ptr %20, align 2, !tbaa !34
  %318 = load i16, ptr %20, align 2, !tbaa !34
  %319 = zext i16 %318 to i32
  %320 = icmp eq i32 %319, 0
  br i1 %320, label %321, label %341

321:                                              ; preds = %304
  br label %322

322:                                              ; preds = %321
  %323 = call zeroext i8 @DebugAssertEnabled()
  %324 = icmp ne i8 %323, 0
  br i1 %324, label %325, label %333

325:                                              ; preds = %322
  %326 = load ptr, ptr %6, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %326, i32 0, i32 3
  %328 = load i8, ptr %327, align 1, !tbaa !35
  %329 = zext i8 %328 to i32
  %330 = icmp eq i32 %329, 44
  br i1 %330, label %332, label %331

331:                                              ; preds = %325
  call void @DebugAssert(ptr noundef @.str, i64 noundef 350, ptr noundef @.str.5)
  br label %332

332:                                              ; preds = %331, %325
  br label %333

333:                                              ; preds = %332, %322
  br label %334

334:                                              ; preds = %333
  br label %335

335:                                              ; preds = %334
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %336, i32 0, i32 9
  %338 = load i8, ptr %337, align 2, !tbaa !37
  %339 = load ptr, ptr %6, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %339, i32 0, i32 3
  store i8 %338, ptr %340, align 1, !tbaa !35
  br label %358

341:                                              ; preds = %304
  %342 = load ptr, ptr %5, align 8, !tbaa !5
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %343, i32 0, i32 11
  %345 = load i32, ptr %344, align 8, !tbaa !38
  %346 = zext i32 %345 to i64
  %347 = add i64 %346, 40
  %348 = trunc i64 %347 to i32
  %349 = call ptr @NetbufGetByte(ptr noundef %342, i32 noundef %348, ptr noundef null)
  store ptr %349, ptr %21, align 8, !tbaa !5
  %350 = load ptr, ptr %21, align 8, !tbaa !5
  %351 = icmp eq ptr %350, null
  br i1 %351, label %352, label %353

352:                                              ; preds = %341
  br label %499

353:                                              ; preds = %341
  %354 = load ptr, ptr %7, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %354, i32 0, i32 9
  %356 = load i8, ptr %355, align 2, !tbaa !37
  %357 = load ptr, ptr %21, align 8, !tbaa !5
  store i8 %356, ptr %357, align 1, !tbaa !9
  br label %358

358:                                              ; preds = %353, %335
  %359 = load ptr, ptr %6, align 8, !tbaa !5
  %360 = load ptr, ptr %9, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %360, i32 0, i32 8
  store ptr %359, ptr %361, align 8, !tbaa !31
  %362 = load ptr, ptr %5, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.NET_BUF, ptr %362, i32 0, i32 6
  %364 = getelementptr inbounds [64 x i8], ptr %363, i64 0, i64 0
  %365 = load ptr, ptr %9, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %365, i32 0, i32 9
  store ptr %364, ptr %366, align 8, !tbaa !39
  br label %367

367:                                              ; preds = %358, %262
  %368 = load ptr, ptr %7, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %368, i32 0, i32 10
  %370 = load i8, ptr %369, align 1, !tbaa !40
  %371 = zext i8 %370 to i32
  %372 = icmp ne i32 %371, 0
  br i1 %372, label %373, label %384

373:                                              ; preds = %367
  %374 = load ptr, ptr %9, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %374, i32 0, i32 5
  %376 = load i32, ptr %375, align 4, !tbaa !41
  %377 = icmp eq i32 %376, 0
  br i1 %377, label %378, label %384

378:                                              ; preds = %373
  %379 = load ptr, ptr %7, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %379, i32 0, i32 3
  %381 = load i32, ptr %380, align 4, !tbaa !27
  %382 = load ptr, ptr %9, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %382, i32 0, i32 5
  store i32 %381, ptr %383, align 4, !tbaa !41
  br label %384

384:                                              ; preds = %378, %373, %367
  %385 = load ptr, ptr %9, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %385, i32 0, i32 5
  %387 = load i32, ptr %386, align 4, !tbaa !41
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %498

389:                                              ; preds = %384
  %390 = load ptr, ptr %9, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %390, i32 0, i32 6
  %392 = load i32, ptr %391, align 8, !tbaa !29
  %393 = load ptr, ptr %9, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %393, i32 0, i32 5
  %395 = load i32, ptr %394, align 4, !tbaa !41
  %396 = icmp uge i32 %392, %395
  br i1 %396, label %397, label %498

397:                                              ; preds = %389
  %398 = load ptr, ptr %9, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %398, i32 0, i32 0
  %400 = call ptr @RemoveEntryList(ptr noundef %399)
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct._LIST_ENTRY, ptr %401, i32 0, i32 1
  %403 = load ptr, ptr %402, align 8, !tbaa !26
  %404 = ptrtoint ptr %403 to i64
  %405 = sub i64 %404, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %406 = inttoptr i64 %405 to ptr
  store ptr %406, ptr %14, align 8, !tbaa !5
  %407 = load ptr, ptr %14, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.NET_BUF, ptr %407, i32 0, i32 6
  %409 = getelementptr inbounds [64 x i8], ptr %408, i64 0, i64 0
  %410 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %409, i32 0, i32 3
  %411 = load i32, ptr %410, align 4, !tbaa !27
  %412 = sext i32 %411 to i64
  %413 = load ptr, ptr %9, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %413, i32 0, i32 5
  %415 = load i32, ptr %414, align 4, !tbaa !41
  %416 = zext i32 %415 to i64
  %417 = icmp ne i64 %412, %416
  br i1 %417, label %418, label %420

418:                                              ; preds = %397
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  call void @Ip6FreeAssembleEntry(ptr noundef %419)
  br label %499

420:                                              ; preds = %397
  %421 = load ptr, ptr %11, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct._LIST_ENTRY, ptr %421, i32 0, i32 0
  %423 = load ptr, ptr %422, align 8, !tbaa !17
  %424 = ptrtoint ptr %423 to i64
  %425 = sub i64 %424, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %426 = inttoptr i64 %425 to ptr
  store ptr %426, ptr %14, align 8, !tbaa !5
  %427 = load ptr, ptr %9, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %427, i32 0, i32 9
  %429 = load ptr, ptr %428, align 8, !tbaa !39
  store ptr %429, ptr %7, align 8, !tbaa !5
  %430 = load ptr, ptr %14, align 8, !tbaa !5
  %431 = load ptr, ptr %7, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %431, i32 0, i32 8
  %433 = load i16, ptr %432, align 4, !tbaa !33
  %434 = zext i16 %433 to i32
  %435 = call ptr @NetbufGetFragment(ptr noundef %430, i32 noundef 0, i32 noundef %434, i32 noundef 0)
  store ptr %435, ptr %15, align 8, !tbaa !5
  br label %436

436:                                              ; preds = %420
  %437 = call zeroext i8 @DebugAssertEnabled()
  %438 = icmp ne i8 %437, 0
  br i1 %438, label %439, label %444

439:                                              ; preds = %436
  %440 = load ptr, ptr %15, align 8, !tbaa !5
  %441 = icmp ne ptr %440, null
  br i1 %441, label %443, label %442

442:                                              ; preds = %439
  call void @DebugAssert(ptr noundef @.str, i64 noundef 407, ptr noundef @.str.6)
  br label %443

443:                                              ; preds = %442, %439
  br label %444

444:                                              ; preds = %443, %436
  br label %445

445:                                              ; preds = %444
  br label %446

446:                                              ; preds = %445
  %447 = load ptr, ptr %11, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct._LIST_ENTRY, ptr %447, i32 0, i32 0
  %449 = load ptr, ptr %448, align 8, !tbaa !17
  store ptr %449, ptr %13, align 8, !tbaa !5
  br label %450

450:                                              ; preds = %467, %446
  %451 = load ptr, ptr %13, align 8, !tbaa !5
  %452 = load ptr, ptr %11, align 8, !tbaa !5
  %453 = icmp ne ptr %451, %452
  br i1 %453, label %454, label %471

454:                                              ; preds = %450
  %455 = load ptr, ptr %13, align 8, !tbaa !5
  %456 = ptrtoint ptr %455 to i64
  %457 = sub i64 %456, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %458 = inttoptr i64 %457 to ptr
  store ptr %458, ptr %14, align 8, !tbaa !5
  %459 = load ptr, ptr %14, align 8, !tbaa !5
  %460 = load ptr, ptr %7, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.IP6_CLIP_INFO, ptr %460, i32 0, i32 8
  %462 = load i16, ptr %461, align 4, !tbaa !33
  %463 = zext i16 %462 to i64
  %464 = add i64 %463, 8
  %465 = trunc i64 %464 to i32
  %466 = call i32 @NetbufTrim(ptr noundef %459, i32 noundef %465, i8 noundef zeroext 1)
  br label %467

467:                                              ; preds = %454
  %468 = load ptr, ptr %13, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct._LIST_ENTRY, ptr %468, i32 0, i32 0
  %470 = load ptr, ptr %469, align 8, !tbaa !17
  store ptr %470, ptr %13, align 8, !tbaa !5
  br label %450, !llvm.loop !42

471:                                              ; preds = %450
  %472 = load ptr, ptr %11, align 8, !tbaa !5
  %473 = load ptr, ptr %15, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.NET_BUF, ptr %473, i32 0, i32 2
  %475 = call ptr @InsertHeadList(ptr noundef %472, ptr noundef %474)
  %476 = load ptr, ptr %9, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %476, i32 0, i32 1
  %478 = load ptr, ptr %9, align 8, !tbaa !5
  %479 = call ptr @NetbufFromBufList(ptr noundef %477, i32 noundef 0, i32 noundef 0, ptr noundef @Ip6OnFreeFragments, ptr noundef %478)
  store ptr %479, ptr %16, align 8, !tbaa !5
  %480 = load ptr, ptr %16, align 8, !tbaa !5
  %481 = icmp eq ptr %480, null
  br i1 %481, label %482, label %484

482:                                              ; preds = %471
  %483 = load ptr, ptr %9, align 8, !tbaa !5
  call void @Ip6FreeAssembleEntry(ptr noundef %483)
  br label %499

484:                                              ; preds = %471
  %485 = load ptr, ptr %9, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %485, i32 0, i32 8
  %487 = load ptr, ptr %486, align 8, !tbaa !31
  %488 = load ptr, ptr %16, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.NET_BUF, ptr %488, i32 0, i32 3
  store ptr %487, ptr %489, align 8, !tbaa !9
  %490 = load ptr, ptr %16, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.NET_BUF, ptr %490, i32 0, i32 6
  %492 = getelementptr inbounds [64 x i8], ptr %491, i64 0, i64 0
  %493 = load ptr, ptr %9, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.IP6_ASSEMBLE_ENTRY, ptr %493, i32 0, i32 9
  %495 = load ptr, ptr %494, align 8, !tbaa !39
  %496 = call ptr @CopyMem(ptr noundef %492, ptr noundef %495, i64 noundef 48)
  %497 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %497, ptr %3, align 8
  store i32 1, ptr %22, align 4
  br label %501

498:                                              ; preds = %389, %384
  store ptr null, ptr %3, align 8
  store i32 1, ptr %22, align 4
  br label %501

499:                                              ; preds = %482, %418, %352, %290, %284, %247, %181, %113
  %500 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %500)
  store ptr null, ptr %3, align 8
  store i32 1, ptr %22, align 4
  br label %501

501:                                              ; preds = %499, %498, %484
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %502 = load ptr, ptr %3, align 8
  ret ptr %502
}

declare i64 @CompareMem(ptr noundef, ptr noundef, i64 noundef) #2

declare ptr @InsertHeadList(ptr noundef, ptr noundef) #2

declare void @NetListInsertBefore(ptr noundef, ptr noundef) #2

declare ptr @NetbufDuplicate(ptr noundef, ptr noundef, i32 noundef) #2

declare ptr @NetbufGetByte(ptr noundef, i32 noundef, ptr noundef) #2

declare ptr @Ip6NtohHead(ptr noundef) #2

declare ptr @NetbufGetFragment(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare ptr @NetbufFromBufList(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 32}
!13 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !14, i64 24, !11, i64 32, !15, i64 36, !7, i64 38, !7, i64 39, !11, i64 40}
!14 = !{!"long long", !7, i64 0}
!15 = !{!"short", !7, i64 0}
!16 = !{!14, !14, i64 0}
!17 = !{!18, !6, i64 0}
!18 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!19 = !{!20, !11, i64 64}
!20 = !{!"", !18, i64 0, !18, i64 16, !21, i64 32, !21, i64 48, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !6, i64 80, !6, i64 88, !6, i64 96}
!21 = !{!"", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!13, !11, i64 8}
!25 = distinct !{!25, !23}
!26 = !{!18, !6, i64 8}
!27 = !{!13, !11, i64 12}
!28 = !{!13, !11, i64 16}
!29 = !{!20, !11, i64 72}
!30 = distinct !{!30, !23}
!31 = !{!20, !6, i64 80}
!32 = !{!20, !6, i64 96}
!33 = !{!13, !15, i64 36}
!34 = !{!15, !15, i64 0}
!35 = !{!36, !7, i64 6}
!36 = !{!"_EFI_IP6_HEADER", !7, i64 0, !7, i64 0, !7, i64 1, !7, i64 1, !15, i64 2, !15, i64 4, !7, i64 6, !7, i64 7, !21, i64 8, !21, i64 24}
!37 = !{!13, !7, i64 38}
!38 = !{!13, !11, i64 40}
!39 = !{!20, !6, i64 88}
!40 = !{!13, !7, i64 39}
!41 = !{!20, !11, i64 68}
!42 = distinct !{!42, !23}


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

@.str = external hidden unnamed_addr constant [130 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1

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

declare ptr @CopyMem(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

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

declare ptr @RemoveEntryList(ptr noundef) local_unnamed_addr #1

declare void @NetbufFree(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @Ip6OnFreeFragments(ptr noundef) #0

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

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #1

declare void @DebugAssert(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @NetbufTrim(ptr noundef, i32 noundef, i8 noundef zeroext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local ptr @Ip6Reassemble(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %1, i64 32
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 56
  %6 = tail call zeroext i8 @DebugAssertEnabled() #2
  %7 = icmp eq i8 %6, 0
  %8 = icmp ne ptr %4, null
  %or.cond = select i1 %7, i1 true, i1 %8
  br i1 %or.cond, label %10, label %9

9:                                                ; preds = %2
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 188, ptr noundef nonnull @.str.3) #2
  br label %10

10:                                               ; preds = %9, %2
  %11 = getelementptr inbounds i8, ptr %4, i64 24
  %12 = load i32, ptr %11, align 1, !tbaa !8
  %13 = getelementptr inbounds i8, ptr %4, i64 8
  %14 = load i32, ptr %13, align 1, !tbaa !8
  %15 = add i32 %14, %12
  %16 = getelementptr inbounds i8, ptr %1, i64 88
  %17 = load i32, ptr %16, align 8, !tbaa !10
  %18 = add i32 %15, %17
  %19 = urem i32 %18, 127
  %20 = zext nneg i32 %19 to i64
  %21 = getelementptr inbounds [127 x %struct._LIST_ENTRY], ptr %0, i64 0, i64 %20
  %.0137168 = load ptr, ptr %21, align 8, !tbaa !14
  %.not169 = icmp eq ptr %.0137168, %21
  br i1 %.not169, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %10, %34
  %.0137170 = phi ptr [ %.0137, %34 ], [ %.0137168, %10 ]
  %22 = getelementptr inbounds i8, ptr %.0137170, i64 64
  %23 = load i32, ptr %22, align 8, !tbaa !17
  %24 = load i32, ptr %16, align 8, !tbaa !10
  %25 = icmp eq i32 %23, %24
  br i1 %25, label %26, label %34

26:                                               ; preds = %.lr.ph
  %27 = getelementptr inbounds i8, ptr %.0137170, i64 48
  %28 = tail call i64 @CompareMem(ptr noundef nonnull %27, ptr noundef nonnull %13, i64 noundef 16) #2
  %29 = icmp eq i64 %28, 0
  br i1 %29, label %30, label %34

30:                                               ; preds = %26
  %31 = getelementptr inbounds i8, ptr %.0137170, i64 32
  %32 = tail call i64 @CompareMem(ptr noundef nonnull %31, ptr noundef nonnull %11, i64 noundef 16) #2
  %33 = icmp eq i64 %32, 0
  br i1 %33, label %.loopexit165, label %34

34:                                               ; preds = %.lr.ph, %26, %30
  %.0137 = load ptr, ptr %.0137170, align 8, !tbaa !14
  %.not = icmp eq ptr %.0137, %21
  br i1 %.not, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !20

._crit_edge.loopexit:                             ; preds = %34
  %.pre = load i32, ptr %16, align 8, !tbaa !10
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %10
  %35 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %17, %10 ]
  %36 = tail call ptr @Ip6CreateAssembleEntry(ptr noundef nonnull %11, ptr noundef nonnull %13, i32 noundef %35)
  %37 = icmp eq ptr %36, null
  br i1 %37, label %211, label %38

38:                                               ; preds = %._crit_edge
  %39 = tail call ptr @InsertHeadList(ptr noundef nonnull %21, ptr noundef nonnull %36) #2
  br label %.loopexit165

.loopexit165:                                     ; preds = %30, %38
  %.1 = phi ptr [ %36, %38 ], [ %.0137170, %30 ]
  %40 = getelementptr inbounds i8, ptr %.1, i64 16
  %41 = getelementptr inbounds i8, ptr %1, i64 64
  br label %42

42:                                               ; preds = %43, %.loopexit165
  %.1138.in = phi ptr [ %40, %.loopexit165 ], [ %.1138, %43 ]
  %.1138 = load ptr, ptr %.1138.in, align 8, !tbaa !14
  %.not151 = icmp eq ptr %.1138, %40
  br i1 %.not151, label %51, label %43

43:                                               ; preds = %42
  %44 = ptrtoint ptr %.1138 to i64
  %45 = add i64 %44, -16
  %46 = inttoptr i64 %45 to ptr
  %47 = load i32, ptr %41, align 8, !tbaa !22
  %48 = getelementptr inbounds i8, ptr %46, i64 64
  %49 = load i32, ptr %48, align 8, !tbaa !22
  %50 = icmp slt i32 %47, %49
  br i1 %50, label %51, label %42, !llvm.loop !23

51:                                               ; preds = %43, %42
  %52 = getelementptr inbounds i8, ptr %.1138, i64 8
  %53 = load ptr, ptr %52, align 8, !tbaa !24
  %.not152 = icmp eq ptr %53, %40
  br i1 %.not152, label %70, label %54

54:                                               ; preds = %51
  %55 = ptrtoint ptr %53 to i64
  %56 = add i64 %55, -16
  %57 = inttoptr i64 %56 to ptr
  %58 = load i32, ptr %41, align 8, !tbaa !22
  %59 = getelementptr inbounds i8, ptr %57, i64 68
  %60 = load i32, ptr %59, align 4, !tbaa !25
  %61 = icmp slt i32 %58, %60
  br i1 %61, label %62, label %70

62:                                               ; preds = %54
  %63 = getelementptr inbounds i8, ptr %1, i64 68
  %64 = load i32, ptr %63, align 4, !tbaa !25
  %.not153 = icmp sgt i32 %64, %60
  br i1 %.not153, label %65, label %211

65:                                               ; preds = %62
  %66 = getelementptr inbounds i8, ptr %57, i64 64
  %67 = load i32, ptr %66, align 8, !tbaa !22
  %68 = sext i32 %67 to i64
  %69 = sext i32 %58 to i64
  tail call void @Ip6TrimPacket(ptr noundef nonnull %57, i64 noundef %68, i64 noundef %69)
  br label %70

70:                                               ; preds = %54, %65, %51
  %71 = getelementptr inbounds i8, ptr %1, i64 16
  tail call void @NetListInsertBefore(ptr noundef nonnull %.1138, ptr noundef nonnull %71) #2
  br i1 %.not151, label %.loopexit, label %.lr.ph174

.lr.ph174:                                        ; preds = %70
  %72 = getelementptr inbounds i8, ptr %1, i64 68
  %73 = getelementptr inbounds i8, ptr %.1, i64 72
  br label %74

74:                                               ; preds = %.lr.ph174, %81
  %.2172 = phi ptr [ %.1138, %.lr.ph174 ], [ %82, %81 ]
  %75 = ptrtoint ptr %.2172 to i64
  %76 = add i64 %75, -16
  %77 = inttoptr i64 %76 to ptr
  %78 = getelementptr inbounds i8, ptr %77, i64 68
  %79 = load i32, ptr %78, align 4, !tbaa !25
  %80 = load i32, ptr %72, align 4, !tbaa !25
  %.not155 = icmp sgt i32 %79, %80
  br i1 %.not155, label %89, label %81

81:                                               ; preds = %74
  %82 = load ptr, ptr %.2172, align 8, !tbaa !14
  %83 = getelementptr inbounds i8, ptr %77, i64 16
  %84 = tail call ptr @RemoveEntryList(ptr noundef nonnull %83) #2
  %85 = getelementptr inbounds i8, ptr %77, i64 72
  %86 = load i32, ptr %85, align 8, !tbaa !26
  %87 = load i32, ptr %73, align 8, !tbaa !27
  %88 = sub i32 %87, %86
  store i32 %88, ptr %73, align 8, !tbaa !27
  tail call void @NetbufFree(ptr noundef nonnull %77) #2
  %.not154 = icmp eq ptr %82, %40
  br i1 %.not154, label %.loopexit, label %74, !llvm.loop !28

89:                                               ; preds = %74
  %90 = getelementptr inbounds i8, ptr %77, i64 64
  %91 = load i32, ptr %90, align 8, !tbaa !22
  %92 = icmp slt i32 %91, %80
  br i1 %92, label %93, label %.loopexit

93:                                               ; preds = %89
  %94 = load i32, ptr %41, align 8, !tbaa !22
  %95 = icmp eq i32 %94, %91
  br i1 %95, label %96, label %98

96:                                               ; preds = %93
  %97 = tail call ptr @RemoveEntryList(ptr noundef nonnull %71) #2
  br label %211

98:                                               ; preds = %93
  %99 = sext i32 %94 to i64
  %100 = sext i32 %91 to i64
  tail call void @Ip6TrimPacket(ptr noundef nonnull %1, i64 noundef %99, i64 noundef %100)
  br label %.loopexit

.loopexit:                                        ; preds = %81, %70, %89, %98
  %101 = getelementptr inbounds i8, ptr %1, i64 72
  %102 = load i32, ptr %101, align 8, !tbaa !26
  %103 = getelementptr inbounds i8, ptr %.1, i64 72
  %104 = load i32, ptr %103, align 8, !tbaa !27
  %105 = add i32 %104, %102
  store i32 %105, ptr %103, align 8, !tbaa !27
  %106 = load i32, ptr %41, align 8, !tbaa !22
  %107 = icmp eq i32 %106, 0
  br i1 %107, label %108, label %151

108:                                              ; preds = %.loopexit
  %109 = getelementptr inbounds i8, ptr %.1, i64 80
  %110 = load ptr, ptr %109, align 8, !tbaa !29
  %.not156 = icmp eq ptr %110, null
  br i1 %.not156, label %111, label %211

111:                                              ; preds = %108
  %112 = getelementptr inbounds i8, ptr %.1, i64 96
  %113 = load ptr, ptr %112, align 8, !tbaa !30
  %.not157 = icmp eq ptr %113, null
  br i1 %.not157, label %114, label %211

114:                                              ; preds = %111
  %115 = tail call ptr @NetbufDuplicate(ptr noundef nonnull %1, ptr noundef null, i32 noundef 40) #2
  %116 = icmp eq ptr %115, null
  br i1 %116, label %211, label %117

117:                                              ; preds = %114
  %118 = tail call ptr @NetbufGetByte(ptr noundef nonnull %115, i32 noundef 0, ptr noundef null) #2
  %119 = tail call zeroext i8 @DebugAssertEnabled() #2
  %120 = icmp eq i8 %119, 0
  %121 = icmp ne ptr %118, null
  %or.cond3 = select i1 %120, i1 true, i1 %121
  br i1 %or.cond3, label %123, label %122

122:                                              ; preds = %117
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 338, ptr noundef nonnull @.str.4) #2
  br label %123

123:                                              ; preds = %122, %117
  %124 = tail call ptr @Ip6NtohHead(ptr noundef %118) #2
  %125 = getelementptr inbounds i8, ptr %115, i64 32
  store ptr %124, ptr %125, align 8, !tbaa !5
  store ptr %115, ptr %112, align 8, !tbaa !30
  %126 = getelementptr inbounds i8, ptr %1, i64 92
  %127 = load i16, ptr %126, align 4, !tbaa !31
  %128 = icmp eq i16 %127, 40
  br i1 %128, label %129, label %140

129:                                              ; preds = %123
  %130 = tail call zeroext i8 @DebugAssertEnabled() #2
  %.not158 = icmp eq i8 %130, 0
  br i1 %.not158, label %136, label %131

131:                                              ; preds = %129
  %132 = getelementptr inbounds i8, ptr %4, i64 6
  %133 = load i8, ptr %132, align 1, !tbaa !32
  %134 = icmp eq i8 %133, 44
  br i1 %134, label %136, label %135

135:                                              ; preds = %131
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 350, ptr noundef nonnull @.str.5) #2
  br label %136

136:                                              ; preds = %131, %135, %129
  %137 = getelementptr inbounds i8, ptr %1, i64 94
  %138 = load i8, ptr %137, align 2, !tbaa !34
  %139 = getelementptr inbounds i8, ptr %4, i64 6
  store i8 %138, ptr %139, align 1, !tbaa !32
  br label %149

140:                                              ; preds = %123
  %141 = getelementptr inbounds i8, ptr %1, i64 96
  %142 = load i32, ptr %141, align 8, !tbaa !35
  %143 = add i32 %142, 40
  %144 = tail call ptr @NetbufGetByte(ptr noundef nonnull %1, i32 noundef %143, ptr noundef null) #2
  %145 = icmp eq ptr %144, null
  br i1 %145, label %211, label %146

146:                                              ; preds = %140
  %147 = getelementptr inbounds i8, ptr %1, i64 94
  %148 = load i8, ptr %147, align 2, !tbaa !34
  store i8 %148, ptr %144, align 1, !tbaa !5
  br label %149

149:                                              ; preds = %146, %136
  store ptr %4, ptr %109, align 8, !tbaa !29
  %150 = getelementptr inbounds i8, ptr %.1, i64 88
  store ptr %5, ptr %150, align 8, !tbaa !36
  br label %151

151:                                              ; preds = %149, %.loopexit
  %152 = getelementptr inbounds i8, ptr %1, i64 95
  %153 = load i8, ptr %152, align 1, !tbaa !37
  %.not159 = icmp eq i8 %153, 0
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.1, i64 68
  %.pre186 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !38
  br i1 %.not159, label %._crit_edge185, label %154

154:                                              ; preds = %151
  %155 = icmp eq i32 %.pre186, 0
  br i1 %155, label %156, label %.thread

156:                                              ; preds = %154
  %157 = getelementptr inbounds i8, ptr %1, i64 68
  %158 = load i32, ptr %157, align 4, !tbaa !25
  store i32 %158, ptr %.phi.trans.insert, align 4, !tbaa !38
  br label %._crit_edge185

._crit_edge185:                                   ; preds = %151, %156
  %159 = phi i32 [ %158, %156 ], [ %.pre186, %151 ]
  %.not160 = icmp eq i32 %159, 0
  br i1 %.not160, label %212, label %.thread

.thread:                                          ; preds = %154, %._crit_edge185
  %160 = phi i32 [ %159, %._crit_edge185 ], [ %.pre186, %154 ]
  %161 = load i32, ptr %103, align 8, !tbaa !27
  %.not161 = icmp ult i32 %161, %160
  br i1 %.not161, label %212, label %162

162:                                              ; preds = %.thread
  %163 = getelementptr inbounds i8, ptr %.1, i64 68
  %164 = tail call ptr @RemoveEntryList(ptr noundef nonnull %.1) #2
  %165 = getelementptr inbounds i8, ptr %.1, i64 24
  %166 = load ptr, ptr %165, align 8, !tbaa !24
  %167 = ptrtoint ptr %166 to i64
  %168 = add i64 %167, -16
  %169 = inttoptr i64 %168 to ptr
  %170 = getelementptr inbounds i8, ptr %169, i64 68
  %171 = load i32, ptr %170, align 4, !tbaa !25
  %172 = sext i32 %171 to i64
  %173 = load i32, ptr %163, align 4, !tbaa !38
  %174 = zext i32 %173 to i64
  %.not162 = icmp eq i64 %172, %174
  br i1 %.not162, label %176, label %175

175:                                              ; preds = %162
  tail call void @Ip6FreeAssembleEntry(ptr noundef nonnull %.1)
  br label %211

176:                                              ; preds = %162
  %177 = load ptr, ptr %40, align 8, !tbaa !14
  %178 = ptrtoint ptr %177 to i64
  %179 = add i64 %178, -16
  %180 = inttoptr i64 %179 to ptr
  %181 = getelementptr inbounds i8, ptr %.1, i64 88
  %182 = load ptr, ptr %181, align 8, !tbaa !36
  %183 = getelementptr inbounds i8, ptr %182, i64 36
  %184 = load i16, ptr %183, align 4, !tbaa !31
  %185 = zext i16 %184 to i32
  %186 = tail call ptr @NetbufGetFragment(ptr noundef %180, i32 noundef 0, i32 noundef %185, i32 noundef 0) #2
  %187 = tail call zeroext i8 @DebugAssertEnabled() #2
  %188 = icmp eq i8 %187, 0
  %189 = icmp ne ptr %186, null
  %or.cond5 = select i1 %188, i1 true, i1 %189
  br i1 %or.cond5, label %191, label %190

190:                                              ; preds = %176
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 407, ptr noundef nonnull @.str.6) #2
  br label %191

191:                                              ; preds = %190, %176
  %.3175 = load ptr, ptr %40, align 8, !tbaa !14
  %.not163176 = icmp eq ptr %.3175, %40
  br i1 %.not163176, label %._crit_edge180, label %.lr.ph179

.lr.ph179:                                        ; preds = %191, %.lr.ph179
  %.3177 = phi ptr [ %.3, %.lr.ph179 ], [ %.3175, %191 ]
  %192 = ptrtoint ptr %.3177 to i64
  %193 = add i64 %192, -16
  %194 = inttoptr i64 %193 to ptr
  %195 = load i16, ptr %183, align 4, !tbaa !31
  %196 = zext i16 %195 to i32
  %197 = add nuw nsw i32 %196, 8
  %198 = tail call i32 @NetbufTrim(ptr noundef %194, i32 noundef %197, i8 noundef zeroext 1) #2
  %.3 = load ptr, ptr %.3177, align 8, !tbaa !14
  %.not163 = icmp eq ptr %.3, %40
  br i1 %.not163, label %._crit_edge180, label %.lr.ph179, !llvm.loop !39

._crit_edge180:                                   ; preds = %.lr.ph179, %191
  %199 = getelementptr inbounds i8, ptr %186, i64 16
  %200 = tail call ptr @InsertHeadList(ptr noundef nonnull %40, ptr noundef nonnull %199) #2
  %201 = tail call ptr @NetbufFromBufList(ptr noundef nonnull %40, i32 noundef 0, i32 noundef 0, ptr noundef nonnull @Ip6OnFreeFragments, ptr noundef nonnull %.1) #2
  %202 = icmp eq ptr %201, null
  br i1 %202, label %203, label %204

203:                                              ; preds = %._crit_edge180
  tail call void @Ip6FreeAssembleEntry(ptr noundef nonnull %.1)
  br label %211

204:                                              ; preds = %._crit_edge180
  %205 = getelementptr inbounds i8, ptr %.1, i64 80
  %206 = load ptr, ptr %205, align 8, !tbaa !29
  %207 = getelementptr inbounds i8, ptr %201, i64 32
  store ptr %206, ptr %207, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %201, i64 56
  %209 = load ptr, ptr %181, align 8, !tbaa !36
  %210 = tail call ptr @CopyMem(ptr noundef nonnull %208, ptr noundef %209, i64 noundef 48) #2
  br label %212

211:                                              ; preds = %140, %114, %108, %111, %62, %._crit_edge, %203, %175, %96
  tail call void @NetbufFree(ptr noundef %1) #2
  br label %212

212:                                              ; preds = %._crit_edge185, %.thread, %211, %204
  %.0 = phi ptr [ null, %211 ], [ %201, %204 ], [ null, %.thread ], [ null, %._crit_edge185 ]
  ret ptr %.0
}

declare i64 @CompareMem(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

declare ptr @InsertHeadList(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @NetListInsertBefore(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @NetbufDuplicate(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare ptr @NetbufGetByte(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare ptr @Ip6NtohHead(ptr noundef) local_unnamed_addr #1

declare ptr @NetbufGetFragment(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare ptr @NetbufFromBufList(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !6, i64 0}
!10 = !{!11, !9, i64 32}
!11 = !{!"", !9, i64 0, !9, i64 4, !9, i64 8, !9, i64 12, !9, i64 16, !9, i64 20, !12, i64 24, !9, i64 32, !13, i64 36, !6, i64 38, !6, i64 39, !9, i64 40}
!12 = !{!"long long", !6, i64 0}
!13 = !{!"short", !6, i64 0}
!14 = !{!15, !16, i64 0}
!15 = !{!"_LIST_ENTRY", !16, i64 0, !16, i64 8}
!16 = !{!"any pointer", !6, i64 0}
!17 = !{!18, !9, i64 64}
!18 = !{!"", !15, i64 0, !15, i64 16, !19, i64 32, !19, i64 48, !9, i64 64, !9, i64 68, !9, i64 72, !9, i64 76, !16, i64 80, !16, i64 88, !16, i64 96}
!19 = !{!"", !6, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!11, !9, i64 8}
!23 = distinct !{!23, !21}
!24 = !{!15, !16, i64 8}
!25 = !{!11, !9, i64 12}
!26 = !{!11, !9, i64 16}
!27 = !{!18, !9, i64 72}
!28 = distinct !{!28, !21}
!29 = !{!18, !16, i64 80}
!30 = !{!18, !16, i64 96}
!31 = !{!11, !13, i64 36}
!32 = !{!33, !6, i64 6}
!33 = !{!"_EFI_IP6_HEADER", !6, i64 0, !6, i64 0, !6, i64 1, !6, i64 1, !13, i64 2, !13, i64 4, !6, i64 6, !6, i64 7, !19, i64 8, !19, i64 24}
!34 = !{!11, !6, i64 38}
!35 = !{!11, !9, i64 40}
!36 = !{!18, !16, i64 88}
!37 = !{!11, !6, i64 39}
!38 = !{!18, !9, i64 68}
!39 = distinct !{!39, !21}


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