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

; 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.IP6_ICMP_INFORMATION_HEAD = type { %struct.IP6_ICMP_HEAD, i32 }
%struct.IP6_ICMP_HEAD = type { i8, i8, i16 }
%struct._IP6_ETHE_ADDR_OPTION = type { i8, i8, [6 x i8] }
%struct.EFI_MAC_ADDRESS = type { [32 x i8] }
%struct._IP6_MTU_OPTION = type { i8, i8, i16, i32 }
%struct._IP6_PREFIX_INFO_OPTION = type { i8, i8, i8, i8, i32, i32, i32, %struct.EFI_IPv6_ADDRESS }
%struct.EFI_IPv6_ADDRESS = type { [16 x i8] }
%struct._IP6_SERVICE = type { i32, %struct._EFI_SERVICE_BINDING_PROTOCOL, i64, i64, %struct._LIST_ENTRY, %struct._LIST_ENTRY, ptr, ptr, %struct.IP6_LINK_RX_TOKEN, %struct.IP6_ASSEMBLE_TABLE, %struct.IP6_MLD_SERVICE_DATA, %struct.EFI_IPv6_ADDRESS, i8, i8, i8, i8, i8, i32, i32, i32, i32, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, i32, i8, ptr, i8, i8, i32, ptr, ptr, ptr, ptr, %struct.EFI_MANAGED_NETWORK_CONFIG_DATA, %struct.EFI_SIMPLE_NETWORK_MODE, ptr, ptr, %struct._IP6_CONFIG_INSTANCE, ptr, i32, i32 }
%struct._EFI_SERVICE_BINDING_PROTOCOL = type { ptr, ptr }
%struct.IP6_LINK_RX_TOKEN = type { i32, ptr, ptr, %struct.EFI_MANAGED_NETWORK_COMPLETION_TOKEN }
%struct.EFI_MANAGED_NETWORK_COMPLETION_TOKEN = type { ptr, i64, %union.anon }
%union.anon = type { ptr }
%struct.IP6_ASSEMBLE_TABLE = type { [127 x %struct._LIST_ENTRY] }
%struct.IP6_MLD_SERVICE_DATA = type { i64, %struct._LIST_ENTRY }
%struct._LIST_ENTRY = type { ptr, ptr }
%struct.EFI_MANAGED_NETWORK_CONFIG_DATA = type { i32, i32, i16, i8, i8, i8, i8, i8, i8, i8 }
%struct.EFI_SIMPLE_NETWORK_MODE = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x %struct.EFI_MAC_ADDRESS], %struct.EFI_MAC_ADDRESS, %struct.EFI_MAC_ADDRESS, %struct.EFI_MAC_ADDRESS, i8, i8, i8, i8, i8 }
%struct._IP6_CONFIG_INSTANCE = type { i32, i8, %struct._LIST_ENTRY, i16, %struct.EFI_IP6_CONFIG_INTERFACE_INFO, %struct.EFI_IP6_CONFIG_INTERFACE_ID, i32, %struct.EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS, [7 x %struct.IP6_CONFIG_DATA_ITEM], %struct.NET_MAP, %struct.NET_MAP, %struct._EFI_IP6_CONFIG_PROTOCOL, ptr, ptr, ptr, ptr, i8, i32, ptr, i32, ptr, i32, %struct._IP6_FORM_CALLBACK_INFO, %struct.IP6_CONFIG_NVDATA }
%struct.EFI_IP6_CONFIG_INTERFACE_INFO = type { [32 x i16], i8, i32, %struct.EFI_MAC_ADDRESS, i32, ptr, i32, ptr }
%struct.EFI_IP6_CONFIG_INTERFACE_ID = type { [8 x i8] }
%struct.EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS = type { i32 }
%struct.IP6_CONFIG_DATA_ITEM = type { ptr, ptr, i64, i8, %struct.NET_MAP, %union.IP6_CONFIG_DATA, i64 }
%union.IP6_CONFIG_DATA = type { ptr }
%struct.NET_MAP = type { %struct._LIST_ENTRY, %struct._LIST_ENTRY, i64 }
%struct._EFI_IP6_CONFIG_PROTOCOL = type { ptr, ptr, ptr, ptr }
%struct._IP6_FORM_CALLBACK_INFO = type { i32, ptr, %struct._EFI_HII_CONFIG_ACCESS_PROTOCOL, ptr, ptr }
%struct._EFI_HII_CONFIG_ACCESS_PROTOCOL = type { ptr, ptr, ptr }
%struct.IP6_CONFIG_NVDATA = type { i32, %struct.EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS, %struct.EFI_IP6_CONFIG_INTERFACE_ID, %struct._LIST_ENTRY, i32, %struct._LIST_ENTRY, i32, %struct._LIST_ENTRY, i32 }
%struct._EFI_IP6_HEADER = type { i16, i16, i16, i8, i8, %struct.EFI_IPv6_ADDRESS, %struct.EFI_IPv6_ADDRESS }
%struct._IP6_DEFAULT_ROUTER = type { %struct._LIST_ENTRY, i64, i16, %struct.EFI_IPv6_ADDRESS, ptr }
%struct._IP6_NEIGHBOR_ENTRY = type { %struct._LIST_ENTRY, %struct._LIST_ENTRY, i64, i8, i8, i8, %struct.EFI_IPv6_ADDRESS, %struct.EFI_MAC_ADDRESS, i32, i32, i32, %struct._LIST_ENTRY, ptr, ptr }
%struct._IP6_PREFIX_LIST_ENTRY = type { %struct._LIST_ENTRY, i64, i32, i32, i8, %struct.EFI_IPv6_ADDRESS }

@.str = external hidden unnamed_addr constant [127 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [23 x i8], align 1

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

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

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

declare zeroext i8 @DebugAssertEnabled() #2

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @Ip6FindPrefixListEntry(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @Ip6DestroyPrefixListEntry(ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext) #0

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @Ip6CreateDefaultRouter(ptr noundef, ptr noundef, i16 noundef zeroext) #0

declare zeroext i8 @NetIp6IsLinkLocalAddr(ptr noundef) #2

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

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

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

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

declare zeroext i8 @Ip6IsNDOptionValid(ptr noundef, i16 noundef zeroext) #2

declare zeroext i8 @Ip6IsOneOfSetAddress(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @NetbufFree(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i64 @Ip6ProcessRouterAdvertise(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %struct.IP6_ICMP_INFORMATION_HEAD, align 1
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca %struct._IP6_ETHE_ADDR_OPTION, align 1
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %struct.EFI_MAC_ADDRESS, align 1
  %22 = alloca %struct._IP6_MTU_OPTION, align 4
  %23 = alloca %struct._IP6_PREFIX_INFO_OPTION, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca %struct.EFI_IPv6_ADDRESS, align 1
  %28 = alloca i64, align 8
  %29 = alloca i16, align 2
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  store i64 -9223372036854775806, ptr %28, align 8, !tbaa !9
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct._IP6_SERVICE, ptr %32, i32 0, i32 39
  %34 = getelementptr inbounds %struct._IP6_CONFIG_INSTANCE, ptr %33, i32 0, i32 6
  %35 = load i32, ptr %34, align 8, !tbaa !11
  %36 = icmp ne i32 %35, 1
  br i1 %36, label %37, label %38

37:                                               ; preds = %3
  br label %567

38:                                               ; preds = %3
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = call i32 @NetbufCopy(ptr noundef %39, i32 noundef 0, i32 noundef 8, ptr noundef %7)
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %41, i32 0, i32 5
  %43 = call zeroext i8 @NetIp6IsLinkLocalAddr(ptr noundef %42)
  %44 = icmp ne i8 %43, 0
  br i1 %44, label %46, label %45

45:                                               ; preds = %38
  br label %567

46:                                               ; preds = %38
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %47, i32 0, i32 4
  %49 = load i8, ptr %48, align 1, !tbaa !31
  %50 = zext i8 %49 to i32
  %51 = icmp ne i32 %50, 255
  br i1 %51, label %64, label %52

52:                                               ; preds = %46
  %53 = getelementptr inbounds %struct.IP6_ICMP_INFORMATION_HEAD, ptr %7, i32 0, i32 0
  %54 = getelementptr inbounds %struct.IP6_ICMP_HEAD, ptr %53, i32 0, i32 1
  %55 = load i8, ptr %54, align 1, !tbaa !33
  %56 = zext i8 %55 to i32
  %57 = icmp ne i32 %56, 0
  br i1 %57, label %64, label %58

58:                                               ; preds = %52
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %59, i32 0, i32 2
  %61 = load i16, ptr %60, align 1, !tbaa !36
  %62 = zext i16 %61 to i32
  %63 = icmp slt i32 %62, 16
  br i1 %63, label %64, label %65

64:                                               ; preds = %58, %52, %46
  br label %567

65:                                               ; preds = %58
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %66, i32 0, i32 2
  %68 = load i16, ptr %67, align 1, !tbaa !36
  %69 = zext i16 %68 to i32
  %70 = sub nsw i32 %69, 16
  %71 = trunc i32 %70 to i16
  store i16 %71, ptr %29, align 2, !tbaa !37
  %72 = load i16, ptr %29, align 2, !tbaa !37
  %73 = zext i16 %72 to i32
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %95

75:                                               ; preds = %65
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = call ptr @NetbufGetByte(ptr noundef %76, i32 noundef 16, ptr noundef null)
  store ptr %77, ptr %30, align 8, !tbaa !5
  br label %78

78:                                               ; preds = %75
  %79 = call zeroext i8 @DebugAssertEnabled()
  %80 = icmp ne i8 %79, 0
  br i1 %80, label %81, label %86

81:                                               ; preds = %78
  %82 = load ptr, ptr %30, align 8, !tbaa !5
  %83 = icmp ne ptr %82, null
  br i1 %83, label %85, label %84

84:                                               ; preds = %81
  call void @DebugAssert(ptr noundef @.str, i64 noundef 1999, ptr noundef @.str.19)
  br label %85

85:                                               ; preds = %84, %81
  br label %86

86:                                               ; preds = %85, %78
  br label %87

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  %89 = load ptr, ptr %30, align 8, !tbaa !5
  %90 = load i16, ptr %29, align 2, !tbaa !37
  %91 = call zeroext i8 @Ip6IsNDOptionValid(ptr noundef %89, i16 noundef zeroext %90)
  %92 = icmp ne i8 %91, 0
  br i1 %92, label %94, label %93

93:                                               ; preds = %88
  br label %567

94:                                               ; preds = %88
  br label %95

95:                                               ; preds = %94, %65
  %96 = getelementptr inbounds %struct.IP6_ICMP_INFORMATION_HEAD, ptr %7, i32 0, i32 1
  %97 = load i32, ptr %96, align 1, !tbaa !38
  %98 = call i32 @SwapBytes32(i32 noundef %97)
  store i32 %98, ptr %15, align 4, !tbaa !39
  %99 = call ptr @CopyMem(ptr noundef %10, ptr noundef %15, i64 noundef 2)
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %101, i32 0, i32 5
  %103 = call ptr @Ip6FindDefaultRouter(ptr noundef %100, ptr noundef %102)
  store ptr %103, ptr %19, align 8, !tbaa !5
  %104 = load ptr, ptr %19, align 8, !tbaa !5
  %105 = icmp eq ptr %104, null
  br i1 %105, label %106, label %121

106:                                              ; preds = %95
  %107 = load i16, ptr %10, align 2, !tbaa !37
  %108 = zext i16 %107 to i32
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %110, label %120

110:                                              ; preds = %106
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %112, i32 0, i32 5
  %114 = load i16, ptr %10, align 2, !tbaa !37
  %115 = call ptr @Ip6CreateDefaultRouter(ptr noundef %111, ptr noundef %113, i16 noundef zeroext %114)
  store ptr %115, ptr %19, align 8, !tbaa !5
  %116 = load ptr, ptr %19, align 8, !tbaa !5
  %117 = icmp eq ptr %116, null
  br i1 %117, label %118, label %119

118:                                              ; preds = %110
  store i64 -9223372036854775799, ptr %28, align 8, !tbaa !9
  br label %567

119:                                              ; preds = %110
  br label %120

120:                                              ; preds = %119, %106
  br label %145

121:                                              ; preds = %95
  %122 = load i16, ptr %10, align 2, !tbaa !37
  %123 = zext i16 %122 to i32
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %125, label %141

125:                                              ; preds = %121
  %126 = load i16, ptr %10, align 2, !tbaa !37
  %127 = load ptr, ptr %19, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct._IP6_DEFAULT_ROUTER, ptr %127, i32 0, i32 2
  store i16 %126, ptr %128, align 8, !tbaa !40
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct._IP6_DEFAULT_ROUTER, ptr %129, i32 0, i32 4
  %131 = load ptr, ptr %130, align 8, !tbaa !42
  %132 = icmp eq ptr %131, null
  br i1 %132, label %133, label %140

133:                                              ; preds = %125
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %135, i32 0, i32 5
  %137 = call ptr @Ip6FindNeighborEntry(ptr noundef %134, ptr noundef %136)
  %138 = load ptr, ptr %19, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct._IP6_DEFAULT_ROUTER, ptr %138, i32 0, i32 4
  store ptr %137, ptr %139, align 8, !tbaa !42
  br label %140

140:                                              ; preds = %133, %125
  br label %144

141:                                              ; preds = %121
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  %143 = load ptr, ptr %19, align 8, !tbaa !5
  call void @Ip6DestroyDefaultRouter(ptr noundef %142, ptr noundef %143)
  br label %144

144:                                              ; preds = %141, %140
  br label %145

145:                                              ; preds = %144, %120
  %146 = getelementptr inbounds i8, ptr %15, i64 3
  %147 = load i8, ptr %146, align 1, !tbaa !43
  store i8 %147, ptr %16, align 1, !tbaa !43
  %148 = load i8, ptr %16, align 1, !tbaa !43
  %149 = zext i8 %148 to i32
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %155

151:                                              ; preds = %145
  %152 = load i8, ptr %16, align 1, !tbaa !43
  %153 = load ptr, ptr %4, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._IP6_SERVICE, ptr %153, i32 0, i32 16
  store i8 %152, ptr %154, align 4, !tbaa !44
  br label %155

155:                                              ; preds = %151, %145
  store i8 0, ptr %17, align 1, !tbaa !43
  store i8 0, ptr %18, align 1, !tbaa !43
  %156 = getelementptr inbounds i8, ptr %15, i64 2
  %157 = load i8, ptr %156, align 1, !tbaa !43
  %158 = zext i8 %157 to i32
  %159 = and i32 %158, 128
  %160 = icmp eq i32 %159, 128
  br i1 %160, label %161, label %162

161:                                              ; preds = %155
  store i8 1, ptr %17, align 1, !tbaa !43
  br label %170

162:                                              ; preds = %155
  %163 = getelementptr inbounds i8, ptr %15, i64 2
  %164 = load i8, ptr %163, align 1, !tbaa !43
  %165 = zext i8 %164 to i32
  %166 = and i32 %165, 64
  %167 = icmp eq i32 %166, 64
  br i1 %167, label %168, label %169

168:                                              ; preds = %162
  store i8 1, ptr %18, align 1, !tbaa !43
  br label %169

169:                                              ; preds = %168, %162
  br label %170

170:                                              ; preds = %169, %161
  %171 = load i8, ptr %17, align 1, !tbaa !43
  %172 = zext i8 %171 to i32
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %178, label %174

174:                                              ; preds = %170
  %175 = load i8, ptr %18, align 1, !tbaa !43
  %176 = zext i8 %175 to i32
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %178, label %183

178:                                              ; preds = %174, %170
  %179 = load ptr, ptr %4, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct._IP6_SERVICE, ptr %179, i32 0, i32 39
  %181 = load i8, ptr %18, align 1, !tbaa !43
  %182 = call i64 @Ip6ConfigStartStatefulAutoConfig(ptr noundef %180, i8 noundef zeroext %181)
  br label %183

183:                                              ; preds = %178, %174
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = call i32 @NetbufCopy(ptr noundef %184, i32 noundef 8, i32 noundef 4, ptr noundef %8)
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = call i32 @NetbufCopy(ptr noundef %186, i32 noundef 12, i32 noundef 4, ptr noundef %9)
  %188 = load i32, ptr %8, align 4, !tbaa !39
  %189 = call i32 @SwapBytes32(i32 noundef %188)
  store i32 %189, ptr %8, align 4, !tbaa !39
  %190 = load i32, ptr %9, align 4, !tbaa !39
  %191 = call i32 @SwapBytes32(i32 noundef %190)
  store i32 %191, ptr %9, align 4, !tbaa !39
  %192 = load i32, ptr %8, align 4, !tbaa !39
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %194, label %205

194:                                              ; preds = %183
  %195 = load i32, ptr %8, align 4, !tbaa !39
  %196 = load ptr, ptr %4, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct._IP6_SERVICE, ptr %196, i32 0, i32 18
  %198 = load i32, ptr %197, align 4, !tbaa !45
  %199 = icmp ne i32 %195, %198
  br i1 %199, label %200, label %205

200:                                              ; preds = %194
  %201 = load i32, ptr %8, align 4, !tbaa !39
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct._IP6_SERVICE, ptr %202, i32 0, i32 18
  store i32 %201, ptr %203, align 4, !tbaa !45
  %204 = load ptr, ptr %4, align 8, !tbaa !5
  call void @Ip6UpdateReachableTime(ptr noundef %204)
  br label %205

205:                                              ; preds = %200, %194, %183
  %206 = load i32, ptr %9, align 4, !tbaa !39
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %208, label %212

208:                                              ; preds = %205
  %209 = load i32, ptr %9, align 4, !tbaa !39
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct._IP6_SERVICE, ptr %210, i32 0, i32 20
  store i32 %209, ptr %211, align 4, !tbaa !46
  br label %212

212:                                              ; preds = %208, %205
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = load ptr, ptr %5, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %214, i32 0, i32 5
  %216 = call ptr @Ip6FindNeighborEntry(ptr noundef %213, ptr noundef %215)
  store ptr %216, ptr %20, align 8, !tbaa !5
  %217 = load ptr, ptr %20, align 8, !tbaa !5
  %218 = icmp ne ptr %217, null
  br i1 %218, label %219, label %222

219:                                              ; preds = %212
  %220 = load ptr, ptr %20, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %220, i32 0, i32 3
  store i8 1, ptr %221, align 8, !tbaa !47
  br label %222

222:                                              ; preds = %219, %212
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct._IP6_SERVICE, ptr %223, i32 0, i32 28
  store i8 1, ptr %224, align 8, !tbaa !49
  store i16 16, ptr %11, align 2, !tbaa !37
  br label %225

225:                                              ; preds = %565, %222
  %226 = load i16, ptr %11, align 2, !tbaa !37
  %227 = zext i16 %226 to i32
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %228, i32 0, i32 2
  %230 = load i16, ptr %229, align 1, !tbaa !36
  %231 = zext i16 %230 to i32
  %232 = icmp slt i32 %227, %231
  br i1 %232, label %233, label %566

233:                                              ; preds = %225
  %234 = load ptr, ptr %6, align 8, !tbaa !5
  %235 = load i16, ptr %11, align 2, !tbaa !37
  %236 = zext i16 %235 to i32
  %237 = call i32 @NetbufCopy(ptr noundef %234, i32 noundef %236, i32 noundef 1, ptr noundef %12)
  %238 = load i8, ptr %12, align 1, !tbaa !43
  %239 = zext i8 %238 to i32
  switch i32 %239, label %545 [
    i32 1, label %240
    i32 3, label %315
    i32 5, label %530
  ]

240:                                              ; preds = %233
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = load i16, ptr %11, align 2, !tbaa !37
  %243 = zext i16 %242 to i32
  %244 = call i32 @NetbufCopy(ptr noundef %241, i32 noundef %243, i32 noundef 8, ptr noundef %14)
  %245 = getelementptr inbounds %struct._IP6_ETHE_ADDR_OPTION, ptr %14, i32 0, i32 1
  %246 = load i8, ptr %245, align 1, !tbaa !50
  %247 = zext i8 %246 to i32
  %248 = icmp sle i32 %247, 0
  br i1 %248, label %249, label %250

249:                                              ; preds = %240
  br label %567

250:                                              ; preds = %240
  %251 = call ptr @ZeroMem(ptr noundef %21, i64 noundef 32)
  %252 = getelementptr inbounds %struct._IP6_ETHE_ADDR_OPTION, ptr %14, i32 0, i32 2
  %253 = getelementptr inbounds [6 x i8], ptr %252, i64 0, i64 0
  %254 = call ptr @CopyMem(ptr noundef %21, ptr noundef %253, i64 noundef 6)
  %255 = load ptr, ptr %20, align 8, !tbaa !5
  %256 = icmp eq ptr %255, null
  br i1 %256, label %257, label %272

257:                                              ; preds = %250
  %258 = load ptr, ptr %4, align 8, !tbaa !5
  %259 = load ptr, ptr %5, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct._EFI_IP6_HEADER, ptr %259, i32 0, i32 5
  %261 = call ptr @Ip6CreateNeighborEntry(ptr noundef %258, ptr noundef @Ip6OnArpResolved, ptr noundef %260, ptr noundef %21)
  store ptr %261, ptr %20, align 8, !tbaa !5
  %262 = load ptr, ptr %20, align 8, !tbaa !5
  %263 = icmp eq ptr %262, null
  br i1 %263, label %264, label %265

264:                                              ; preds = %257
  store i64 -9223372036854775799, ptr %28, align 8, !tbaa !9
  br label %567

265:                                              ; preds = %257
  %266 = load ptr, ptr %20, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %266, i32 0, i32 3
  store i8 1, ptr %267, align 8, !tbaa !47
  %268 = load ptr, ptr %20, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %268, i32 0, i32 8
  store i32 2, ptr %269, align 4, !tbaa !52
  %270 = load ptr, ptr %20, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %270, i32 0, i32 10
  store i32 -1, ptr %271, align 4, !tbaa !53
  br label %305

272:                                              ; preds = %250
  %273 = load ptr, ptr %20, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %273, i32 0, i32 7
  %275 = call i64 @CompareMem(ptr noundef %21, ptr noundef %274, i64 noundef 6)
  store i64 %275, ptr %31, align 8, !tbaa !9
  %276 = load ptr, ptr %20, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %276, i32 0, i32 8
  %278 = load i32, ptr %277, align 4, !tbaa !52
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %283, label %280

280:                                              ; preds = %272
  %281 = load i64, ptr %31, align 8, !tbaa !9
  %282 = icmp ne i64 %281, 0
  br i1 %282, label %283, label %304

283:                                              ; preds = %280, %272
  %284 = load ptr, ptr %20, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %284, i32 0, i32 7
  %286 = call ptr @CopyMem(ptr noundef %285, ptr noundef %21, i64 noundef 6)
  %287 = load ptr, ptr %20, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %287, i32 0, i32 10
  store i32 -1, ptr %288, align 4, !tbaa !53
  %289 = load ptr, ptr %20, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %289, i32 0, i32 8
  %291 = load i32, ptr %290, align 4, !tbaa !52
  %292 = icmp eq i32 %291, 0
  br i1 %292, label %293, label %300

293:                                              ; preds = %283
  %294 = load ptr, ptr %20, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %294, i32 0, i32 8
  store i32 2, ptr %295, align 4, !tbaa !52
  %296 = load ptr, ptr %20, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %296, i32 0, i32 13
  %298 = load ptr, ptr %297, align 8, !tbaa !54
  %299 = load ptr, ptr %20, align 8, !tbaa !5
  call void %298(ptr noundef %299)
  br label %303

300:                                              ; preds = %283
  %301 = load ptr, ptr %20, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct._IP6_NEIGHBOR_ENTRY, ptr %301, i32 0, i32 8
  store i32 2, ptr %302, align 4, !tbaa !52
  br label %303

303:                                              ; preds = %300, %293
  br label %304

304:                                              ; preds = %303, %280
  br label %305

305:                                              ; preds = %304, %265
  %306 = load i16, ptr %11, align 2, !tbaa !37
  %307 = zext i16 %306 to i32
  %308 = getelementptr inbounds %struct._IP6_ETHE_ADDR_OPTION, ptr %14, i32 0, i32 1
  %309 = load i8, ptr %308, align 1, !tbaa !50
  %310 = zext i8 %309 to i16
  %311 = zext i16 %310 to i32
  %312 = mul nsw i32 %311, 8
  %313 = add nsw i32 %307, %312
  %314 = trunc i32 %313 to i16
  store i16 %314, ptr %11, align 2, !tbaa !37
  br label %565

315:                                              ; preds = %233
  %316 = load ptr, ptr %6, align 8, !tbaa !5
  %317 = load i16, ptr %11, align 2, !tbaa !37
  %318 = zext i16 %317 to i32
  %319 = call i32 @NetbufCopy(ptr noundef %316, i32 noundef %318, i32 noundef 32, ptr noundef %23)
  %320 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 1
  %321 = load i8, ptr %320, align 1, !tbaa !55
  %322 = zext i8 %321 to i32
  %323 = icmp ne i32 %322, 4
  br i1 %323, label %324, label %325

324:                                              ; preds = %315
  br label %567

325:                                              ; preds = %315
  %326 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %327 = load i32, ptr %326, align 4, !tbaa !57
  %328 = call i32 @SwapBytes32(i32 noundef %327)
  %329 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  store i32 %328, ptr %329, align 4, !tbaa !57
  %330 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  %331 = load i32, ptr %330, align 4, !tbaa !58
  %332 = call i32 @SwapBytes32(i32 noundef %331)
  %333 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  store i32 %332, ptr %333, align 4, !tbaa !58
  store i8 0, ptr %25, align 1, !tbaa !43
  %334 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 3
  %335 = load i8, ptr %334, align 1, !tbaa !59
  %336 = zext i8 %335 to i32
  %337 = and i32 %336, 128
  %338 = icmp eq i32 %337, 128
  br i1 %338, label %339, label %340

339:                                              ; preds = %325
  store i8 1, ptr %25, align 1, !tbaa !43
  br label %340

340:                                              ; preds = %339, %325
  store i8 0, ptr %26, align 1, !tbaa !43
  %341 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 3
  %342 = load i8, ptr %341, align 1, !tbaa !59
  %343 = zext i8 %342 to i32
  %344 = and i32 %343, 64
  %345 = icmp eq i32 %344, 64
  br i1 %345, label %346, label %347

346:                                              ; preds = %340
  store i8 1, ptr %26, align 1, !tbaa !43
  br label %347

347:                                              ; preds = %346, %340
  %348 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %349 = load i8, ptr %348, align 2, !tbaa !60
  %350 = zext i8 %349 to i32
  %351 = icmp eq i32 %350, 64
  br i1 %351, label %352, label %362

352:                                              ; preds = %347
  %353 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 7
  %354 = call zeroext i8 @NetIp6IsLinkLocalAddr(ptr noundef %353)
  %355 = zext i8 %354 to i32
  %356 = icmp ne i32 %355, 0
  br i1 %356, label %357, label %362

357:                                              ; preds = %352
  %358 = load i16, ptr %11, align 2, !tbaa !37
  %359 = zext i16 %358 to i64
  %360 = add i64 %359, 32
  %361 = trunc i64 %360 to i16
  store i16 %361, ptr %11, align 2, !tbaa !37
  br label %565

362:                                              ; preds = %352, %347
  %363 = load i8, ptr %25, align 1, !tbaa !43
  %364 = icmp ne i8 %363, 0
  br i1 %364, label %365, label %410

365:                                              ; preds = %362
  %366 = load ptr, ptr %4, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %368 = load i8, ptr %367, align 2, !tbaa !60
  %369 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 7
  %370 = call ptr @Ip6FindPrefixListEntry(ptr noundef %366, i8 noundef zeroext 1, i8 noundef zeroext %368, ptr noundef %369)
  store ptr %370, ptr %24, align 8, !tbaa !5
  %371 = load ptr, ptr %24, align 8, !tbaa !5
  %372 = icmp eq ptr %371, null
  br i1 %372, label %373, label %391

373:                                              ; preds = %365
  %374 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %375 = load i32, ptr %374, align 4, !tbaa !57
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %377, label %391

377:                                              ; preds = %373
  %378 = load ptr, ptr %4, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %380 = load i32, ptr %379, align 4, !tbaa !57
  %381 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  %382 = load i32, ptr %381, align 4, !tbaa !58
  %383 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %384 = load i8, ptr %383, align 2, !tbaa !60
  %385 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 7
  %386 = call ptr @Ip6CreatePrefixListEntry(ptr noundef %378, i8 noundef zeroext 1, i32 noundef %380, i32 noundef %382, i8 noundef zeroext %384, ptr noundef %385)
  store ptr %386, ptr %24, align 8, !tbaa !5
  %387 = load ptr, ptr %24, align 8, !tbaa !5
  %388 = icmp eq ptr %387, null
  br i1 %388, label %389, label %390

389:                                              ; preds = %377
  store i64 -9223372036854775799, ptr %28, align 8, !tbaa !9
  br label %567

390:                                              ; preds = %377
  br label %409

391:                                              ; preds = %373, %365
  %392 = load ptr, ptr %24, align 8, !tbaa !5
  %393 = icmp ne ptr %392, null
  br i1 %393, label %394, label %408

394:                                              ; preds = %391
  %395 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %396 = load i32, ptr %395, align 4, !tbaa !57
  %397 = icmp ne i32 %396, 0
  br i1 %397, label %398, label %403

398:                                              ; preds = %394
  %399 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %400 = load i32, ptr %399, align 4, !tbaa !57
  %401 = load ptr, ptr %24, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct._IP6_PREFIX_LIST_ENTRY, ptr %401, i32 0, i32 2
  store i32 %400, ptr %402, align 8, !tbaa !61
  br label %407

403:                                              ; preds = %394
  %404 = load ptr, ptr %4, align 8, !tbaa !5
  %405 = load ptr, ptr %24, align 8, !tbaa !5
  %406 = load i8, ptr %25, align 1, !tbaa !43
  call void @Ip6DestroyPrefixListEntry(ptr noundef %404, ptr noundef %405, i8 noundef zeroext %406, i8 noundef zeroext 1)
  br label %407

407:                                              ; preds = %403, %398
  br label %408

408:                                              ; preds = %407, %391
  br label %409

409:                                              ; preds = %408, %390
  br label %410

410:                                              ; preds = %409, %362
  %411 = load i8, ptr %26, align 1, !tbaa !43
  %412 = zext i8 %411 to i32
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %414, label %525

414:                                              ; preds = %410
  %415 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  %416 = load i32, ptr %415, align 4, !tbaa !58
  %417 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %418 = load i32, ptr %417, align 4, !tbaa !57
  %419 = icmp ule i32 %416, %418
  br i1 %419, label %420, label %525

420:                                              ; preds = %414
  %421 = load ptr, ptr %4, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %423 = load i8, ptr %422, align 2, !tbaa !60
  %424 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 7
  %425 = call ptr @Ip6FindPrefixListEntry(ptr noundef %421, i8 noundef zeroext 0, i8 noundef zeroext %423, ptr noundef %424)
  store ptr %425, ptr %24, align 8, !tbaa !5
  %426 = load ptr, ptr %24, align 8, !tbaa !5
  %427 = icmp eq ptr %426, null
  br i1 %427, label %428, label %489

428:                                              ; preds = %420
  %429 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %430 = load i32, ptr %429, align 4, !tbaa !57
  %431 = icmp ne i32 %430, 0
  br i1 %431, label %432, label %489

432:                                              ; preds = %428
  %433 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %434 = load i8, ptr %433, align 2, !tbaa !60
  %435 = zext i8 %434 to i32
  %436 = load ptr, ptr %4, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct._IP6_SERVICE, ptr %436, i32 0, i32 26
  %438 = load i8, ptr %437, align 4, !tbaa !63
  %439 = zext i8 %438 to i32
  %440 = mul nsw i32 %439, 8
  %441 = add nsw i32 %435, %440
  %442 = icmp eq i32 %441, 128
  br i1 %442, label %443, label %489

443:                                              ; preds = %432
  %444 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 7
  %445 = call ptr @CopyMem(ptr noundef %27, ptr noundef %444, i64 noundef 8)
  %446 = getelementptr inbounds %struct.EFI_IPv6_ADDRESS, ptr %27, i32 0, i32 0
  %447 = getelementptr inbounds [16 x i8], ptr %446, i64 0, i64 8
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct._IP6_SERVICE, ptr %448, i32 0, i32 27
  %450 = load ptr, ptr %449, align 8, !tbaa !64
  %451 = call ptr @CopyMem(ptr noundef %447, ptr noundef %450, i64 noundef 8)
  %452 = load ptr, ptr %4, align 8, !tbaa !5
  %453 = call zeroext i8 @Ip6IsOneOfSetAddress(ptr noundef %452, ptr noundef %27, ptr noundef null, ptr noundef null)
  %454 = icmp ne i8 %453, 0
  br i1 %454, label %475, label %455

455:                                              ; preds = %443
  %456 = load ptr, ptr %4, align 8, !tbaa !5
  %457 = call ptr @Ip6FindDADEntry(ptr noundef %456, ptr noundef %27, ptr noundef null)
  %458 = icmp eq ptr %457, null
  br i1 %458, label %459, label %474

459:                                              ; preds = %455
  %460 = load ptr, ptr %4, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct._IP6_SERVICE, ptr %460, i32 0, i32 6
  %462 = load ptr, ptr %461, align 8, !tbaa !65
  %463 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %464 = load i8, ptr %463, align 2, !tbaa !60
  %465 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %466 = load i32, ptr %465, align 4, !tbaa !57
  %467 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  %468 = load i32, ptr %467, align 4, !tbaa !58
  %469 = call i64 @Ip6SetAddress(ptr noundef %462, ptr noundef %27, i8 noundef zeroext 0, i8 noundef zeroext %464, i32 noundef %466, i32 noundef %468, ptr noundef null, ptr noundef null)
  store i64 %469, ptr %28, align 8, !tbaa !9
  %470 = load i64, ptr %28, align 8, !tbaa !9
  %471 = icmp slt i64 %470, 0
  br i1 %471, label %472, label %473

472:                                              ; preds = %459
  br label %567

473:                                              ; preds = %459
  br label %474

474:                                              ; preds = %473, %455
  br label %475

475:                                              ; preds = %474, %443
  %476 = load ptr, ptr %4, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %478 = load i32, ptr %477, align 4, !tbaa !57
  %479 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  %480 = load i32, ptr %479, align 4, !tbaa !58
  %481 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 2
  %482 = load i8, ptr %481, align 2, !tbaa !60
  %483 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 7
  %484 = call ptr @Ip6CreatePrefixListEntry(ptr noundef %476, i8 noundef zeroext 0, i32 noundef %478, i32 noundef %480, i8 noundef zeroext %482, ptr noundef %483)
  store ptr %484, ptr %24, align 8, !tbaa !5
  %485 = load ptr, ptr %24, align 8, !tbaa !5
  %486 = icmp eq ptr %485, null
  br i1 %486, label %487, label %488

487:                                              ; preds = %475
  store i64 -9223372036854775799, ptr %28, align 8, !tbaa !9
  br label %567

488:                                              ; preds = %475
  br label %524

489:                                              ; preds = %432, %428, %420
  %490 = load ptr, ptr %24, align 8, !tbaa !5
  %491 = icmp ne ptr %490, null
  br i1 %491, label %492, label %523

492:                                              ; preds = %489
  %493 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 5
  %494 = load i32, ptr %493, align 4, !tbaa !58
  %495 = load ptr, ptr %24, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct._IP6_PREFIX_LIST_ENTRY, ptr %495, i32 0, i32 3
  store i32 %494, ptr %496, align 4, !tbaa !66
  %497 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %498 = load i32, ptr %497, align 4, !tbaa !57
  %499 = icmp ugt i32 %498, 7200
  br i1 %499, label %507, label %500

500:                                              ; preds = %492
  %501 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %502 = load i32, ptr %501, align 4, !tbaa !57
  %503 = load ptr, ptr %24, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct._IP6_PREFIX_LIST_ENTRY, ptr %503, i32 0, i32 2
  %505 = load i32, ptr %504, align 8, !tbaa !61
  %506 = icmp ugt i32 %502, %505
  br i1 %506, label %507, label %512

507:                                              ; preds = %500, %492
  %508 = getelementptr inbounds %struct._IP6_PREFIX_INFO_OPTION, ptr %23, i32 0, i32 4
  %509 = load i32, ptr %508, align 4, !tbaa !57
  %510 = load ptr, ptr %24, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct._IP6_PREFIX_LIST_ENTRY, ptr %510, i32 0, i32 2
  store i32 %509, ptr %511, align 8, !tbaa !61
  br label %522

512:                                              ; preds = %500
  %513 = load ptr, ptr %24, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct._IP6_PREFIX_LIST_ENTRY, ptr %513, i32 0, i32 2
  %515 = load i32, ptr %514, align 8, !tbaa !61
  %516 = icmp ule i32 %515, 7200
  br i1 %516, label %517, label %518

517:                                              ; preds = %512
  br label %521

518:                                              ; preds = %512
  %519 = load ptr, ptr %24, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct._IP6_PREFIX_LIST_ENTRY, ptr %519, i32 0, i32 2
  store i32 7200, ptr %520, align 8, !tbaa !61
  br label %521

521:                                              ; preds = %518, %517
  br label %522

522:                                              ; preds = %521, %507
  br label %523

523:                                              ; preds = %522, %489
  br label %524

524:                                              ; preds = %523, %488
  br label %525

525:                                              ; preds = %524, %414, %410
  %526 = load i16, ptr %11, align 2, !tbaa !37
  %527 = zext i16 %526 to i64
  %528 = add i64 %527, 32
  %529 = trunc i64 %528 to i16
  store i16 %529, ptr %11, align 2, !tbaa !37
  br label %565

530:                                              ; preds = %233
  %531 = load ptr, ptr %6, align 8, !tbaa !5
  %532 = load i16, ptr %11, align 2, !tbaa !37
  %533 = zext i16 %532 to i32
  %534 = call i32 @NetbufCopy(ptr noundef %531, i32 noundef %533, i32 noundef 8, ptr noundef %22)
  %535 = getelementptr inbounds %struct._IP6_MTU_OPTION, ptr %22, i32 0, i32 1
  %536 = load i8, ptr %535, align 1, !tbaa !67
  %537 = zext i8 %536 to i32
  %538 = icmp ne i32 %537, 1
  br i1 %538, label %539, label %540

539:                                              ; preds = %530
  br label %567

540:                                              ; preds = %530
  %541 = load i16, ptr %11, align 2, !tbaa !37
  %542 = zext i16 %541 to i64
  %543 = add i64 %542, 8
  %544 = trunc i64 %543 to i16
  store i16 %544, ptr %11, align 2, !tbaa !37
  br label %565

545:                                              ; preds = %233
  %546 = load ptr, ptr %6, align 8, !tbaa !5
  %547 = load i16, ptr %11, align 2, !tbaa !37
  %548 = zext i16 %547 to i64
  %549 = add i64 %548, 1
  %550 = trunc i64 %549 to i32
  %551 = call i32 @NetbufCopy(ptr noundef %546, i32 noundef %550, i32 noundef 1, ptr noundef %13)
  %552 = load i8, ptr %13, align 1, !tbaa !43
  %553 = zext i8 %552 to i32
  %554 = icmp sle i32 %553, 0
  br i1 %554, label %555, label %556

555:                                              ; preds = %545
  br label %567

556:                                              ; preds = %545
  %557 = load i16, ptr %11, align 2, !tbaa !37
  %558 = zext i16 %557 to i32
  %559 = load i8, ptr %13, align 1, !tbaa !43
  %560 = zext i8 %559 to i16
  %561 = zext i16 %560 to i32
  %562 = mul nsw i32 %561, 8
  %563 = add nsw i32 %558, %562
  %564 = trunc i32 %563 to i16
  store i16 %564, ptr %11, align 2, !tbaa !37
  br label %565

565:                                              ; preds = %556, %540, %525, %357, %305
  br label %225, !llvm.loop !69

566:                                              ; preds = %225
  store i64 0, ptr %28, align 8, !tbaa !9
  br label %567

567:                                              ; preds = %566, %555, %539, %487, %472, %389, %324, %264, %249, %118, %93, %64, %45, %37
  %568 = load ptr, ptr %6, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %568)
  %569 = load i64, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  ret i64 %569
}

declare i32 @SwapBytes32(i32 noundef) #2

declare i64 @Ip6ConfigStartStatefulAutoConfig(ptr noundef, i8 noundef zeroext) #2

declare i64 @Ip6SetAddress(ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext, 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 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !13, i64 3224}
!12 = !{!"_IP6_SERVICE", !13, i64 0, !14, i64 8, !10, i64 24, !10, i64 32, !15, i64 40, !15, i64 56, !6, i64 72, !6, i64 80, !16, i64 88, !18, i64 136, !19, i64 2168, !18, i64 2192, !7, i64 2208, !7, i64 2209, !7, i64 2210, !7, i64 2211, !7, i64 2212, !13, i64 2216, !13, i64 2220, !13, i64 2224, !13, i64 2228, !15, i64 2232, !15, i64 2248, !15, i64 2264, !15, i64 2280, !13, i64 2296, !7, i64 2300, !6, i64 2304, !7, i64 2312, !7, i64 2313, !13, i64 2316, !6, i64 2320, !6, i64 2328, !6, i64 2336, !6, i64 2344, !20, i64 2352, !22, i64 2372, !6, i64 3032, !6, i64 3040, !23, i64 3048, !6, i64 4176, !13, i64 4184, !13, i64 4188}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_EFI_SERVICE_BINDING_PROTOCOL", !6, i64 0, !6, i64 8}
!15 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!16 = !{!"", !13, i64 0, !6, i64 8, !6, i64 16, !17, i64 24}
!17 = !{!"", !6, i64 0, !10, i64 8, !7, i64 16}
!18 = !{!"", !7, i64 0}
!19 = !{!"", !10, i64 0, !15, i64 8}
!20 = !{!"", !13, i64 0, !13, i64 4, !21, i64 8, !7, i64 10, !7, i64 11, !7, i64 12, !7, i64 13, !7, i64 14, !7, i64 15, !7, i64 16}
!21 = !{!"short", !7, i64 0}
!22 = !{!"", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !7, i64 40, !18, i64 552, !18, i64 584, !18, i64 616, !7, i64 648, !7, i64 649, !7, i64 650, !7, i64 651, !7, i64 652}
!23 = !{!"_IP6_CONFIG_INSTANCE", !13, i64 0, !7, i64 4, !15, i64 8, !21, i64 24, !24, i64 32, !18, i64 168, !13, i64 176, !25, i64 180, !7, i64 184, !26, i64 800, !26, i64 840, !27, i64 880, !6, i64 912, !6, i64 920, !6, i64 928, !6, i64 936, !7, i64 944, !13, i64 948, !6, i64 952, !13, i64 960, !6, i64 968, !13, i64 976, !28, i64 984, !30, i64 1040}
!24 = !{!"", !7, i64 0, !7, i64 64, !13, i64 68, !18, i64 72, !13, i64 104, !6, i64 112, !13, i64 120, !6, i64 128}
!25 = !{!"", !13, i64 0}
!26 = !{!"", !15, i64 0, !15, i64 16, !10, i64 32}
!27 = !{!"_EFI_IP6_CONFIG_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!28 = !{!"_IP6_FORM_CALLBACK_INFO", !13, i64 0, !6, i64 8, !29, i64 16, !6, i64 40, !6, i64 48}
!29 = !{!"_EFI_HII_CONFIG_ACCESS_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!"", !13, i64 0, !25, i64 4, !18, i64 8, !15, i64 16, !13, i64 32, !15, i64 40, !13, i64 56, !15, i64 64, !13, i64 80}
!31 = !{!32, !7, i64 7}
!32 = !{!"_EFI_IP6_HEADER", !7, i64 0, !7, i64 0, !7, i64 1, !7, i64 1, !21, i64 2, !21, i64 4, !7, i64 6, !7, i64 7, !18, i64 8, !18, i64 24}
!33 = !{!34, !7, i64 1}
!34 = !{!"", !35, i64 0, !13, i64 4}
!35 = !{!"", !7, i64 0, !7, i64 1, !21, i64 2}
!36 = !{!32, !21, i64 4}
!37 = !{!21, !21, i64 0}
!38 = !{!34, !13, i64 4}
!39 = !{!13, !13, i64 0}
!40 = !{!41, !21, i64 24}
!41 = !{!"_IP6_DEFAULT_ROUTER", !15, i64 0, !10, i64 16, !21, i64 24, !18, i64 26, !6, i64 48}
!42 = !{!41, !6, i64 48}
!43 = !{!7, !7, i64 0}
!44 = !{!12, !7, i64 2212}
!45 = !{!12, !13, i64 2220}
!46 = !{!12, !13, i64 2228}
!47 = !{!48, !7, i64 40}
!48 = !{!"_IP6_NEIGHBOR_ENTRY", !15, i64 0, !15, i64 16, !10, i64 32, !7, i64 40, !7, i64 41, !7, i64 42, !18, i64 43, !18, i64 59, !13, i64 92, !13, i64 96, !13, i64 100, !15, i64 104, !6, i64 120, !6, i64 128}
!49 = !{!12, !7, i64 2312}
!50 = !{!51, !7, i64 1}
!51 = !{!"_IP6_ETHE_ADDR_OPTION", !7, i64 0, !7, i64 1, !7, i64 2}
!52 = !{!48, !13, i64 92}
!53 = !{!48, !13, i64 100}
!54 = !{!48, !6, i64 128}
!55 = !{!56, !7, i64 1}
!56 = !{!"_IP6_PREFIX_INFO_OPTION", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !13, i64 4, !13, i64 8, !13, i64 12, !18, i64 16}
!57 = !{!56, !13, i64 4}
!58 = !{!56, !13, i64 8}
!59 = !{!56, !7, i64 3}
!60 = !{!56, !7, i64 2}
!61 = !{!62, !13, i64 24}
!62 = !{!"_IP6_PREFIX_LIST_ENTRY", !15, i64 0, !10, i64 16, !13, i64 24, !13, i64 28, !7, i64 32, !18, i64 33}
!63 = !{!12, !7, i64 2300}
!64 = !{!12, !6, i64 2304}
!65 = !{!12, !6, i64 72}
!66 = !{!62, !13, i64 28}
!67 = !{!68, !7, i64 1}
!68 = !{!"_IP6_MTU_OPTION", !7, i64 0, !7, i64 1, !21, i64 2, !13, i64 4}
!69 = distinct !{!69, !70}
!70 = !{!"llvm.loop.mustprogress"}


; 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.IP6_ICMP_INFORMATION_HEAD = type { %struct.IP6_ICMP_HEAD, i32 }
%struct.IP6_ICMP_HEAD = type { i8, i8, i16 }
%struct._IP6_ETHE_ADDR_OPTION = type { i8, i8, [6 x i8] }
%struct.EFI_MAC_ADDRESS = type { [32 x i8] }
%struct._IP6_MTU_OPTION = type { i8, i8, i16, i32 }
%struct._IP6_PREFIX_INFO_OPTION = type { i8, i8, i8, i8, i32, i32, i32, %struct.EFI_IPv6_ADDRESS }
%struct.EFI_IPv6_ADDRESS = type { [16 x i8] }

@.str = external hidden unnamed_addr constant [127 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [23 x i8], align 1

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

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

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

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #2

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @Ip6FindPrefixListEntry(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @Ip6DestroyPrefixListEntry(ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #0

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @Ip6CreateDefaultRouter(ptr noundef, ptr noundef, i16 noundef zeroext) local_unnamed_addr #0

declare zeroext i8 @NetIp6IsLinkLocalAddr(ptr noundef) local_unnamed_addr #2

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

declare ptr @ZeroMem(ptr noundef, i64 noundef) local_unnamed_addr #2

declare i32 @NetbufCopy(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

declare zeroext i8 @Ip6IsNDOptionValid(ptr noundef, i16 noundef zeroext) local_unnamed_addr #2

declare zeroext i8 @Ip6IsOneOfSetAddress(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @NetbufFree(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local i64 @Ip6ProcessRouterAdvertise(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = alloca %struct.IP6_ICMP_INFORMATION_HEAD, align 1
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i16, align 2
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca %struct._IP6_ETHE_ADDR_OPTION, align 1
  %11 = alloca i32, align 4
  %12 = alloca %struct.EFI_MAC_ADDRESS, align 1
  %13 = alloca %struct._IP6_MTU_OPTION, align 4
  %14 = alloca %struct._IP6_PREFIX_INFO_OPTION, align 4
  %15 = alloca %struct.EFI_IPv6_ADDRESS, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #3
  %16 = getelementptr inbounds i8, ptr %0, i64 3048
  %17 = getelementptr inbounds i8, ptr %0, i64 3224
  %18 = load i32, ptr %17, align 8, !tbaa !5
  %.not = icmp eq i32 %18, 1
  br i1 %.not, label %19, label %.loopexit

19:                                               ; preds = %3
  %20 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef 0, i32 noundef 8, ptr noundef nonnull %4) #3
  %21 = getelementptr inbounds i8, ptr %1, i64 8
  %22 = call zeroext i8 @NetIp6IsLinkLocalAddr(ptr noundef nonnull %21) #3
  %.not144 = icmp eq i8 %22, 0
  br i1 %.not144, label %.loopexit, label %23

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %1, i64 7
  %25 = load i8, ptr %24, align 1, !tbaa !29
  %26 = icmp ne i8 %25, -1
  %27 = getelementptr inbounds i8, ptr %4, i64 1
  %28 = load i8, ptr %27, align 1
  %29 = icmp ne i8 %28, 0
  %or.cond = select i1 %26, i1 true, i1 %29
  br i1 %or.cond, label %.loopexit, label %30

30:                                               ; preds = %23
  %31 = getelementptr inbounds i8, ptr %1, i64 4
  %32 = load i16, ptr %31, align 1, !tbaa !31
  %33 = icmp ult i16 %32, 16
  br i1 %33, label %.loopexit, label %34

34:                                               ; preds = %30
  %35 = add i16 %32, -16
  %.not145 = icmp eq i16 %35, 0
  br i1 %.not145, label %44, label %36

36:                                               ; preds = %34
  %37 = call ptr @NetbufGetByte(ptr noundef %2, i32 noundef 16, ptr noundef null) #3
  %38 = call zeroext i8 @DebugAssertEnabled() #3
  %39 = icmp eq i8 %38, 0
  %40 = icmp ne ptr %37, null
  %or.cond17 = select i1 %39, i1 true, i1 %40
  br i1 %or.cond17, label %42, label %41

41:                                               ; preds = %36
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 1999, ptr noundef nonnull @.str.19) #3
  br label %42

42:                                               ; preds = %41, %36
  %43 = call zeroext i8 @Ip6IsNDOptionValid(ptr noundef %37, i16 noundef zeroext %35) #3
  %.not146 = icmp eq i8 %43, 0
  br i1 %.not146, label %.loopexit, label %44

44:                                               ; preds = %42, %34
  %45 = getelementptr inbounds i8, ptr %4, i64 4
  %46 = load i32, ptr %45, align 1, !tbaa !32
  %47 = call i32 @SwapBytes32(i32 noundef %46) #3
  store i32 %47, ptr %11, align 4, !tbaa !35
  %48 = call ptr @CopyMem(ptr noundef nonnull %7, ptr noundef nonnull %11, i64 noundef 2) #3
  %49 = call ptr @Ip6FindDefaultRouter(ptr noundef nonnull %0, ptr noundef nonnull %21)
  %50 = icmp eq ptr %49, null
  %51 = load i16, ptr %7, align 2, !tbaa !36
  %.not148 = icmp eq i16 %51, 0
  br i1 %50, label %52, label %56

52:                                               ; preds = %44
  br i1 %.not148, label %65, label %53

53:                                               ; preds = %52
  %54 = call ptr @Ip6CreateDefaultRouter(ptr noundef nonnull %0, ptr noundef nonnull %21, i16 noundef zeroext %51)
  %55 = icmp eq ptr %54, null
  br i1 %55, label %.loopexit, label %65

56:                                               ; preds = %44
  br i1 %.not148, label %64, label %57

57:                                               ; preds = %56
  %58 = getelementptr inbounds i8, ptr %49, i64 24
  store i16 %51, ptr %58, align 8, !tbaa !37
  %59 = getelementptr inbounds i8, ptr %49, i64 48
  %60 = load ptr, ptr %59, align 8, !tbaa !39
  %61 = icmp eq ptr %60, null
  br i1 %61, label %62, label %65

62:                                               ; preds = %57
  %63 = call ptr @Ip6FindNeighborEntry(ptr noundef nonnull %0, ptr noundef nonnull %21)
  store ptr %63, ptr %59, align 8, !tbaa !39
  br label %65

64:                                               ; preds = %56
  call void @Ip6DestroyDefaultRouter(ptr noundef nonnull %0, ptr noundef nonnull %49)
  br label %65

65:                                               ; preds = %64, %62, %57, %52, %53
  %66 = getelementptr inbounds i8, ptr %11, i64 3
  %67 = load i8, ptr %66, align 1, !tbaa !40
  %.not149 = icmp eq i8 %67, 0
  br i1 %.not149, label %70, label %68

68:                                               ; preds = %65
  %69 = getelementptr inbounds i8, ptr %0, i64 2212
  store i8 %67, ptr %69, align 4, !tbaa !41
  br label %70

70:                                               ; preds = %68, %65
  %71 = getelementptr inbounds i8, ptr %11, i64 2
  %72 = load i8, ptr %71, align 2, !tbaa !40
  %or.cond7 = icmp ugt i8 %72, 63
  br i1 %or.cond7, label %73, label %75

73:                                               ; preds = %70
  %or.cond165 = icmp sgt i8 %72, 63
  %spec.select166 = zext i1 %or.cond165 to i8
  %74 = call i64 @Ip6ConfigStartStatefulAutoConfig(ptr noundef nonnull %16, i8 noundef zeroext %spec.select166) #3
  br label %75

75:                                               ; preds = %70, %73
  %76 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef 8, i32 noundef 4, ptr noundef nonnull %5) #3
  %77 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef 12, i32 noundef 4, ptr noundef nonnull %6) #3
  %78 = load i32, ptr %5, align 4, !tbaa !35
  %79 = call i32 @SwapBytes32(i32 noundef %78) #3
  store i32 %79, ptr %5, align 4, !tbaa !35
  %80 = load i32, ptr %6, align 4, !tbaa !35
  %81 = call i32 @SwapBytes32(i32 noundef %80) #3
  store i32 %81, ptr %6, align 4, !tbaa !35
  %82 = load i32, ptr %5, align 4, !tbaa !35
  %.not152 = icmp eq i32 %82, 0
  br i1 %.not152, label %thread-pre-split, label %83

83:                                               ; preds = %75
  %84 = getelementptr inbounds i8, ptr %0, i64 2220
  %85 = load i32, ptr %84, align 4, !tbaa !42
  %.not153 = icmp eq i32 %82, %85
  br i1 %.not153, label %thread-pre-split, label %86

86:                                               ; preds = %83
  store i32 %82, ptr %84, align 4, !tbaa !42
  call void @Ip6UpdateReachableTime(ptr noundef nonnull %0)
  %.pr.pre = load i32, ptr %6, align 4, !tbaa !35
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %86, %83, %75
  %87 = phi i32 [ %81, %75 ], [ %81, %83 ], [ %.pr.pre, %86 ]
  %.not154 = icmp eq i32 %87, 0
  br i1 %.not154, label %90, label %88

88:                                               ; preds = %thread-pre-split
  %89 = getelementptr inbounds i8, ptr %0, i64 2228
  store i32 %87, ptr %89, align 4, !tbaa !43
  br label %90

90:                                               ; preds = %88, %thread-pre-split
  %91 = call ptr @Ip6FindNeighborEntry(ptr noundef nonnull %0, ptr noundef nonnull %21)
  %.not155 = icmp eq ptr %91, null
  br i1 %.not155, label %94, label %92

92:                                               ; preds = %90
  %93 = getelementptr inbounds i8, ptr %91, i64 40
  store i8 1, ptr %93, align 8, !tbaa !44
  br label %94

94:                                               ; preds = %92, %90
  %95 = getelementptr inbounds i8, ptr %0, i64 2312
  store i8 1, ptr %95, align 8, !tbaa !46
  %96 = getelementptr inbounds i8, ptr %0, i64 72
  %97 = load i16, ptr %31, align 1, !tbaa !31
  %98 = icmp ugt i16 %97, 16
  br i1 %98, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %94
  %99 = getelementptr inbounds i8, ptr %13, i64 1
  %100 = getelementptr inbounds i8, ptr %14, i64 1
  %101 = getelementptr inbounds i8, ptr %14, i64 4
  %102 = getelementptr inbounds i8, ptr %14, i64 8
  %103 = getelementptr inbounds i8, ptr %14, i64 3
  %104 = getelementptr inbounds i8, ptr %14, i64 2
  %105 = getelementptr inbounds i8, ptr %14, i64 16
  %106 = getelementptr inbounds i8, ptr %0, i64 2300
  %107 = getelementptr inbounds i8, ptr %15, i64 8
  %108 = getelementptr inbounds i8, ptr %0, i64 2304
  %109 = getelementptr inbounds i8, ptr %10, i64 1
  %110 = getelementptr inbounds i8, ptr %10, i64 2
  br label %111

111:                                              ; preds = %.lr.ph, %251
  %112 = phi i32 [ 16, %.lr.ph ], [ %252, %251 ]
  %.0169 = phi i16 [ 16, %.lr.ph ], [ %.1, %251 ]
  %.0124168 = phi i64 [ -9223372036854775806, %.lr.ph ], [ %.3, %251 ]
  %.0126167 = phi ptr [ %91, %.lr.ph ], [ %.2128, %251 ]
  %113 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef %112, i32 noundef 1, ptr noundef nonnull %8) #3
  %114 = load i8, ptr %8, align 1, !tbaa !40
  switch i8 %114, label %242 [
    i8 1, label %115
    i8 3, label %150
    i8 5, label %237
  ]

115:                                              ; preds = %111
  %116 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef %112, i32 noundef 8, ptr noundef nonnull %10) #3
  %117 = load i8, ptr %109, align 1, !tbaa !47
  %118 = icmp eq i8 %117, 0
  br i1 %118, label %.loopexit, label %119

119:                                              ; preds = %115
  %120 = call ptr @ZeroMem(ptr noundef nonnull %12, i64 noundef 32) #3
  %121 = call ptr @CopyMem(ptr noundef nonnull %12, ptr noundef nonnull %110, i64 noundef 6) #3
  %122 = icmp eq ptr %.0126167, null
  br i1 %122, label %123, label %130

123:                                              ; preds = %119
  %124 = call ptr @Ip6CreateNeighborEntry(ptr noundef %0, ptr noundef nonnull @Ip6OnArpResolved, ptr noundef nonnull %21, ptr noundef nonnull %12)
  %125 = icmp eq ptr %124, null
  br i1 %125, label %.loopexit, label %126

126:                                              ; preds = %123
  %127 = getelementptr inbounds i8, ptr %124, i64 40
  store i8 1, ptr %127, align 8, !tbaa !44
  %128 = getelementptr inbounds i8, ptr %124, i64 92
  store i32 2, ptr %128, align 4, !tbaa !49
  %129 = getelementptr inbounds i8, ptr %124, i64 100
  store i32 -1, ptr %129, align 4, !tbaa !50
  br label %145

130:                                              ; preds = %119
  %131 = getelementptr inbounds i8, ptr %.0126167, i64 59
  %132 = call i64 @CompareMem(ptr noundef nonnull %12, ptr noundef nonnull %131, i64 noundef 6) #3
  %133 = getelementptr inbounds i8, ptr %.0126167, i64 92
  %134 = load i32, ptr %133, align 4, !tbaa !49
  %135 = icmp eq i32 %134, 0
  %136 = icmp ne i64 %132, 0
  %or.cond9 = select i1 %135, i1 true, i1 %136
  br i1 %or.cond9, label %137, label %145

137:                                              ; preds = %130
  %138 = call ptr @CopyMem(ptr noundef nonnull %131, ptr noundef nonnull %12, i64 noundef 6) #3
  %139 = getelementptr inbounds i8, ptr %.0126167, i64 100
  store i32 -1, ptr %139, align 4, !tbaa !50
  %140 = load i32, ptr %133, align 4, !tbaa !49
  %141 = icmp eq i32 %140, 0
  store i32 2, ptr %133, align 4, !tbaa !49
  br i1 %141, label %142, label %145

142:                                              ; preds = %137
  %143 = getelementptr inbounds i8, ptr %.0126167, i64 128
  %144 = load ptr, ptr %143, align 8, !tbaa !51
  call void %144(ptr noundef nonnull %.0126167) #3
  br label %145

145:                                              ; preds = %137, %130, %142, %126
  %.1127 = phi ptr [ %124, %126 ], [ %.0126167, %142 ], [ %.0126167, %130 ], [ %.0126167, %137 ]
  %146 = load i8, ptr %109, align 1, !tbaa !47
  %147 = zext i8 %146 to i16
  %148 = shl nuw nsw i16 %147, 3
  %149 = add i16 %148, %.0169
  br label %251

150:                                              ; preds = %111
  %151 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef %112, i32 noundef 32, ptr noundef nonnull %14) #3
  %152 = load i8, ptr %100, align 1, !tbaa !52
  %.not157 = icmp eq i8 %152, 4
  br i1 %.not157, label %153, label %.loopexit

153:                                              ; preds = %150
  %154 = load i32, ptr %101, align 4, !tbaa !54
  %155 = call i32 @SwapBytes32(i32 noundef %154) #3
  store i32 %155, ptr %101, align 4, !tbaa !54
  %156 = load i32, ptr %102, align 4, !tbaa !55
  %157 = call i32 @SwapBytes32(i32 noundef %156) #3
  store i32 %157, ptr %102, align 4, !tbaa !55
  %158 = load i8, ptr %103, align 1, !tbaa !56
  %.not158 = icmp slt i8 %158, 0
  %.lobit = lshr i8 %158, 7
  %159 = and i8 %158, 64
  %.not159 = icmp eq i8 %159, 0
  %160 = load i8, ptr %104, align 2, !tbaa !57
  %161 = icmp eq i8 %160, 64
  br i1 %161, label %162, label %166

162:                                              ; preds = %153
  %163 = call zeroext i8 @NetIp6IsLinkLocalAddr(ptr noundef nonnull %105) #3
  %.not160 = icmp eq i8 %163, 0
  br i1 %.not160, label %166, label %164

164:                                              ; preds = %162
  %165 = add i16 %.0169, 32
  br label %251

166:                                              ; preds = %162, %153
  br i1 %.not158, label %167, label %183

167:                                              ; preds = %166
  %168 = load i8, ptr %104, align 2, !tbaa !57
  %169 = call ptr @Ip6FindPrefixListEntry(ptr noundef %0, i8 noundef zeroext 1, i8 noundef zeroext %168, ptr noundef nonnull %105)
  %170 = icmp eq ptr %169, null
  %171 = load i32, ptr %101, align 4
  %172 = icmp ne i32 %171, 0
  %or.cond12 = select i1 %170, i1 %172, i1 false
  br i1 %or.cond12, label %173, label %178

173:                                              ; preds = %167
  %174 = load i32, ptr %102, align 4, !tbaa !55
  %175 = load i8, ptr %104, align 2, !tbaa !57
  %176 = call ptr @Ip6CreatePrefixListEntry(ptr noundef %0, i8 noundef zeroext 1, i32 noundef %171, i32 noundef %174, i8 noundef zeroext %175, ptr noundef nonnull %105)
  %177 = icmp eq ptr %176, null
  br i1 %177, label %.loopexit, label %183

178:                                              ; preds = %167
  br i1 %170, label %183, label %179

179:                                              ; preds = %178
  br i1 %172, label %180, label %182

180:                                              ; preds = %179
  %181 = getelementptr inbounds i8, ptr %169, i64 24
  store i32 %171, ptr %181, align 8, !tbaa !58
  br label %183

182:                                              ; preds = %179
  call void @Ip6DestroyPrefixListEntry(ptr noundef %0, ptr noundef nonnull %169, i8 noundef zeroext %.lobit, i8 noundef zeroext 1)
  br label %183

183:                                              ; preds = %173, %180, %182, %178, %166
  br i1 %.not159, label %.thread, label %184

184:                                              ; preds = %183
  %185 = load i32, ptr %102, align 4, !tbaa !55
  %186 = load i32, ptr %101, align 4, !tbaa !54
  %.not162 = icmp ugt i32 %185, %186
  br i1 %.not162, label %.thread, label %187

187:                                              ; preds = %184
  %188 = load i8, ptr %104, align 2, !tbaa !57
  %189 = call ptr @Ip6FindPrefixListEntry(ptr noundef %0, i8 noundef zeroext 0, i8 noundef zeroext %188, ptr noundef nonnull %105)
  %190 = icmp eq ptr %189, null
  %191 = load i32, ptr %101, align 4
  %192 = icmp ne i32 %191, 0
  %or.cond15 = select i1 %190, i1 %192, i1 false
  br i1 %or.cond15, label %193, label %222

193:                                              ; preds = %187
  %194 = load i8, ptr %104, align 2, !tbaa !57
  %195 = zext i8 %194 to i32
  %196 = load i8, ptr %106, align 4, !tbaa !60
  %197 = zext i8 %196 to i32
  %198 = shl nuw nsw i32 %197, 3
  %199 = add nuw nsw i32 %198, %195
  %200 = icmp eq i32 %199, 128
  br i1 %200, label %201, label %.thread

201:                                              ; preds = %193
  %202 = call ptr @CopyMem(ptr noundef nonnull %15, ptr noundef nonnull %105, i64 noundef 8) #3
  %203 = load ptr, ptr %108, align 8, !tbaa !61
  %204 = call ptr @CopyMem(ptr noundef nonnull %107, ptr noundef %203, i64 noundef 8) #3
  %205 = call zeroext i8 @Ip6IsOneOfSetAddress(ptr noundef nonnull %0, ptr noundef nonnull %15, ptr noundef null, ptr noundef null) #3
  %.not164 = icmp eq i8 %205, 0
  br i1 %.not164, label %206, label %216

206:                                              ; preds = %201
  %207 = call ptr @Ip6FindDADEntry(ptr noundef nonnull %0, ptr noundef nonnull %15, ptr noundef null)
  %208 = icmp eq ptr %207, null
  br i1 %208, label %209, label %216

209:                                              ; preds = %206
  %210 = load ptr, ptr %96, align 8, !tbaa !62
  %211 = load i8, ptr %104, align 2, !tbaa !57
  %212 = load i32, ptr %101, align 4, !tbaa !54
  %213 = load i32, ptr %102, align 4, !tbaa !55
  %214 = call i64 @Ip6SetAddress(ptr noundef %210, ptr noundef nonnull %15, i8 noundef zeroext 0, i8 noundef zeroext %211, i32 noundef %212, i32 noundef %213, ptr noundef null, ptr noundef null) #3
  %215 = icmp slt i64 %214, 0
  br i1 %215, label %.loopexit, label %216

216:                                              ; preds = %206, %209, %201
  %.1125 = phi i64 [ %.0124168, %201 ], [ %214, %209 ], [ %.0124168, %206 ]
  %217 = load i32, ptr %101, align 4, !tbaa !54
  %218 = load i32, ptr %102, align 4, !tbaa !55
  %219 = load i8, ptr %104, align 2, !tbaa !57
  %220 = call ptr @Ip6CreatePrefixListEntry(ptr noundef nonnull %0, i8 noundef zeroext 0, i32 noundef %217, i32 noundef %218, i8 noundef zeroext %219, ptr noundef nonnull %105)
  %221 = icmp eq ptr %220, null
  br i1 %221, label %.loopexit, label %.thread

222:                                              ; preds = %187
  br i1 %190, label %.thread, label %223

223:                                              ; preds = %222
  %224 = load i32, ptr %102, align 4, !tbaa !55
  %225 = getelementptr inbounds i8, ptr %189, i64 28
  store i32 %224, ptr %225, align 4, !tbaa !63
  %226 = icmp ugt i32 %191, 7200
  br i1 %226, label %231, label %227

227:                                              ; preds = %223
  %228 = getelementptr inbounds i8, ptr %189, i64 24
  %229 = load i32, ptr %228, align 8, !tbaa !58
  %230 = icmp ugt i32 %191, %229
  br i1 %230, label %231, label %233

231:                                              ; preds = %227, %223
  %232 = getelementptr inbounds i8, ptr %189, i64 24
  store i32 %191, ptr %232, align 8, !tbaa !58
  br label %.thread

233:                                              ; preds = %227
  %234 = icmp ult i32 %229, 7201
  br i1 %234, label %.thread, label %235

235:                                              ; preds = %233
  store i32 7200, ptr %228, align 8, !tbaa !58
  br label %.thread

.thread:                                          ; preds = %193, %216, %231, %233, %235, %222, %184, %183
  %.2 = phi i64 [ %.1125, %216 ], [ %.0124168, %231 ], [ %.0124168, %233 ], [ %.0124168, %235 ], [ %.0124168, %222 ], [ %.0124168, %184 ], [ %.0124168, %183 ], [ %.0124168, %193 ]
  %236 = add i16 %.0169, 32
  br label %251

237:                                              ; preds = %111
  %238 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef %112, i32 noundef 8, ptr noundef nonnull %13) #3
  %239 = load i8, ptr %99, align 1, !tbaa !64
  %.not156 = icmp eq i8 %239, 1
  br i1 %.not156, label %240, label %.loopexit

240:                                              ; preds = %237
  %241 = add i16 %.0169, 8
  br label %251

242:                                              ; preds = %111
  %243 = add nuw nsw i32 %112, 1
  %244 = call i32 @NetbufCopy(ptr noundef %2, i32 noundef %243, i32 noundef 1, ptr noundef nonnull %9) #3
  %245 = load i8, ptr %9, align 1, !tbaa !40
  %246 = icmp eq i8 %245, 0
  br i1 %246, label %.loopexit, label %247

247:                                              ; preds = %242
  %248 = zext i8 %245 to i16
  %249 = shl nuw nsw i16 %248, 3
  %250 = add i16 %249, %.0169
  br label %251

251:                                              ; preds = %247, %240, %.thread, %164, %145
  %.2128 = phi ptr [ %.0126167, %247 ], [ %.0126167, %240 ], [ %.0126167, %164 ], [ %.0126167, %.thread ], [ %.1127, %145 ]
  %.3 = phi i64 [ %.0124168, %247 ], [ %.0124168, %240 ], [ %.0124168, %164 ], [ %.2, %.thread ], [ %.0124168, %145 ]
  %.1 = phi i16 [ %250, %247 ], [ %241, %240 ], [ %165, %164 ], [ %236, %.thread ], [ %149, %145 ]
  %252 = zext i16 %.1 to i32
  %253 = load i16, ptr %31, align 1, !tbaa !31
  %254 = icmp ult i16 %.1, %253
  br i1 %254, label %111, label %.loopexit, !llvm.loop !66

.loopexit:                                        ; preds = %115, %150, %209, %237, %242, %123, %173, %216, %251, %94, %53, %42, %23, %30, %19, %3
  %.4 = phi i64 [ -9223372036854775806, %3 ], [ -9223372036854775806, %23 ], [ -9223372036854775806, %30 ], [ -9223372036854775806, %42 ], [ -9223372036854775806, %19 ], [ -9223372036854775799, %53 ], [ 0, %94 ], [ %.0124168, %115 ], [ %.0124168, %150 ], [ %214, %209 ], [ %.0124168, %237 ], [ %.0124168, %242 ], [ -9223372036854775799, %123 ], [ -9223372036854775799, %173 ], [ -9223372036854775799, %216 ], [ 0, %251 ]
  call void @NetbufFree(ptr noundef %2) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #3
  ret i64 %.4
}

declare i32 @SwapBytes32(i32 noundef) local_unnamed_addr #2

declare i64 @Ip6ConfigStartStatefulAutoConfig(ptr noundef, i8 noundef zeroext) local_unnamed_addr #2

declare i64 @Ip6SetAddress(ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #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 = { mustprogress 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, !7, i64 3224}
!6 = !{!"_IP6_SERVICE", !7, i64 0, !10, i64 8, !12, i64 24, !12, i64 32, !13, i64 40, !13, i64 56, !11, i64 72, !11, i64 80, !14, i64 88, !16, i64 136, !17, i64 2168, !16, i64 2192, !8, i64 2208, !8, i64 2209, !8, i64 2210, !8, i64 2211, !8, i64 2212, !7, i64 2216, !7, i64 2220, !7, i64 2224, !7, i64 2228, !13, i64 2232, !13, i64 2248, !13, i64 2264, !13, i64 2280, !7, i64 2296, !8, i64 2300, !11, i64 2304, !8, i64 2312, !8, i64 2313, !7, i64 2316, !11, i64 2320, !11, i64 2328, !11, i64 2336, !11, i64 2344, !18, i64 2352, !20, i64 2372, !11, i64 3032, !11, i64 3040, !21, i64 3048, !11, i64 4176, !7, i64 4184, !7, i64 4188}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"_EFI_SERVICE_BINDING_PROTOCOL", !11, i64 0, !11, i64 8}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long long", !8, i64 0}
!13 = !{!"_LIST_ENTRY", !11, i64 0, !11, i64 8}
!14 = !{!"", !7, i64 0, !11, i64 8, !11, i64 16, !15, i64 24}
!15 = !{!"", !11, i64 0, !12, i64 8, !8, i64 16}
!16 = !{!"", !8, i64 0}
!17 = !{!"", !12, i64 0, !13, i64 8}
!18 = !{!"", !7, i64 0, !7, i64 4, !19, i64 8, !8, i64 10, !8, i64 11, !8, i64 12, !8, i64 13, !8, i64 14, !8, i64 15, !8, i64 16}
!19 = !{!"short", !8, i64 0}
!20 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !8, i64 40, !16, i64 552, !16, i64 584, !16, i64 616, !8, i64 648, !8, i64 649, !8, i64 650, !8, i64 651, !8, i64 652}
!21 = !{!"_IP6_CONFIG_INSTANCE", !7, i64 0, !8, i64 4, !13, i64 8, !19, i64 24, !22, i64 32, !16, i64 168, !7, i64 176, !23, i64 180, !8, i64 184, !24, i64 800, !24, i64 840, !25, i64 880, !11, i64 912, !11, i64 920, !11, i64 928, !11, i64 936, !8, i64 944, !7, i64 948, !11, i64 952, !7, i64 960, !11, i64 968, !7, i64 976, !26, i64 984, !28, i64 1040}
!22 = !{!"", !8, i64 0, !8, i64 64, !7, i64 68, !16, i64 72, !7, i64 104, !11, i64 112, !7, i64 120, !11, i64 128}
!23 = !{!"", !7, i64 0}
!24 = !{!"", !13, i64 0, !13, i64 16, !12, i64 32}
!25 = !{!"_EFI_IP6_CONFIG_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!26 = !{!"_IP6_FORM_CALLBACK_INFO", !7, i64 0, !11, i64 8, !27, i64 16, !11, i64 40, !11, i64 48}
!27 = !{!"_EFI_HII_CONFIG_ACCESS_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16}
!28 = !{!"", !7, i64 0, !23, i64 4, !16, i64 8, !13, i64 16, !7, i64 32, !13, i64 40, !7, i64 56, !13, i64 64, !7, i64 80}
!29 = !{!30, !8, i64 7}
!30 = !{!"_EFI_IP6_HEADER", !8, i64 0, !8, i64 0, !8, i64 1, !8, i64 1, !19, i64 2, !19, i64 4, !8, i64 6, !8, i64 7, !16, i64 8, !16, i64 24}
!31 = !{!30, !19, i64 4}
!32 = !{!33, !7, i64 4}
!33 = !{!"", !34, i64 0, !7, i64 4}
!34 = !{!"", !8, i64 0, !8, i64 1, !19, i64 2}
!35 = !{!7, !7, i64 0}
!36 = !{!19, !19, i64 0}
!37 = !{!38, !19, i64 24}
!38 = !{!"_IP6_DEFAULT_ROUTER", !13, i64 0, !12, i64 16, !19, i64 24, !16, i64 26, !11, i64 48}
!39 = !{!38, !11, i64 48}
!40 = !{!8, !8, i64 0}
!41 = !{!6, !8, i64 2212}
!42 = !{!6, !7, i64 2220}
!43 = !{!6, !7, i64 2228}
!44 = !{!45, !8, i64 40}
!45 = !{!"_IP6_NEIGHBOR_ENTRY", !13, i64 0, !13, i64 16, !12, i64 32, !8, i64 40, !8, i64 41, !8, i64 42, !16, i64 43, !16, i64 59, !7, i64 92, !7, i64 96, !7, i64 100, !13, i64 104, !11, i64 120, !11, i64 128}
!46 = !{!6, !8, i64 2312}
!47 = !{!48, !8, i64 1}
!48 = !{!"_IP6_ETHE_ADDR_OPTION", !8, i64 0, !8, i64 1, !8, i64 2}
!49 = !{!45, !7, i64 92}
!50 = !{!45, !7, i64 100}
!51 = !{!45, !11, i64 128}
!52 = !{!53, !8, i64 1}
!53 = !{!"_IP6_PREFIX_INFO_OPTION", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !7, i64 4, !7, i64 8, !7, i64 12, !16, i64 16}
!54 = !{!53, !7, i64 4}
!55 = !{!53, !7, i64 8}
!56 = !{!53, !8, i64 3}
!57 = !{!53, !8, i64 2}
!58 = !{!59, !7, i64 24}
!59 = !{!"_IP6_PREFIX_LIST_ENTRY", !13, i64 0, !12, i64 16, !7, i64 24, !7, i64 28, !8, i64 32, !16, i64 33}
!60 = !{!6, !8, i64 2300}
!61 = !{!6, !11, i64 2304}
!62 = !{!6, !11, i64 72}
!63 = !{!59, !7, i64 28}
!64 = !{!65, !8, i64 1}
!65 = !{!"_IP6_MTU_OPTION", !8, i64 0, !8, i64 1, !19, i64 2, !7, i64 4}
!66 = distinct !{!66, !67}
!67 = !{!"llvm.loop.mustprogress"}


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