; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal (SimpleNetworkDriverStart)

; 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.GUID = type { i32, i16, i16, [8 x i8] }
%struct.EFI_BOOT_SERVICES = type { %struct.EFI_TABLE_HEADER, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.EFI_TABLE_HEADER = type { i64, i32, i32, i32, i32 }
%struct._EFI_DRIVER_BINDING_PROTOCOL = type { ptr, ptr, ptr, i32, ptr, ptr }
%struct._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL = type { i64, i64, i64, i32, [4 x i8], i8, i8, i8, i8, i16 }
%struct.s_pxe_hw_undi = type { i32, i8, i8, i8, i8, i8, i8, i8, i8, i32 }
%struct._EFI_PCI_IO_PROTOCOL = type { ptr, ptr, %struct.EFI_PCI_IO_PROTOCOL_ACCESS, %struct.EFI_PCI_IO_PROTOCOL_ACCESS, %struct.EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr }
%struct.EFI_PCI_IO_PROTOCOL_ACCESS = type { ptr, ptr }
%struct.EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS = type { ptr, ptr }
%struct.SNP_DRIVER = type <{ i32, [4 x i8], %struct.EFI_LOCK, %struct._EFI_SIMPLE_NETWORK_PROTOCOL, %struct.EFI_SIMPLE_NETWORK_MODE, ptr, ptr, ptr, i8, i8, i16, i32, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, %struct.s_pxe_cdb, [6 x i8], ptr, ptr, ptr, %struct.s_pxe_db_get_init_info, i8, ptr, [100 x %struct.MAP_LIST], ptr, i8, [7 x i8] }>
%struct.EFI_LOCK = type { i64, i64, i32 }
%struct._EFI_SIMPLE_NETWORK_PROTOCOL = type { i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%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.EFI_MAC_ADDRESS = type { [32 x i8] }
%struct.s_pxe_cdb = type { i16, i16, i16, i16, i64, i64, i16, i16, i16, i16 }
%struct.s_pxe_db_get_init_info = type <{ i32, i32, [4 x i32], i32, i16, i16, i16, i16, i16, i16, i16, i16, i8, i8, i8 }>
%struct.MAP_LIST = type { i64, ptr }
%struct.s_pxe_sw_undi = type { i32, i8, i8, i8, i8, i8, i8, i8, i8, i32, i64, [3 x i8], i8, [1 x i32] }
%struct.EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR = type <{ i8, i16, i8, i8, i8, i64, i64, i64, i64, i64 }>

@gBS = external global ptr, align 8
@gEfiDevicePathProtocolGuid = external global %struct.GUID, align 4
@gEfiNetworkInterfaceIdentifierProtocolGuid_31 = external global %struct.GUID, align 4
@.str.11 = external hidden unnamed_addr constant [41 x i8], align 1
@gEfiPciIoProtocolGuid = external global %struct.GUID, align 4
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [39 x i8], align 1
@gEfiEventExitBootServicesGuid = external global %struct.GUID, align 4
@gEfiSimpleNetworkProtocolGuid = external global %struct.GUID, align 4

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

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

declare i64 @PxeShutdown(ptr noundef) #2

declare i64 @PxeStop(ptr 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 i64 @IssueHwUndiCommand(i64 noundef) #0

declare zeroext i8 @DebugPrintEnabled() #2

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) #2

declare void @DebugPrint(i64 noundef, ptr noundef, ...) #2

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

; Function Attrs: nounwind uwtable
define dso_local i64 @SimpleNetworkDriverStart(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i64, 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 i64, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i8, align 1
  %16 = alloca i16, align 2
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  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 1, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 2, 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
  br label %20

20:                                               ; preds = %3
  %21 = call zeroext i8 @DebugPrintEnabled()
  %22 = icmp ne i8 %21, 0
  br i1 %22, label %23, label %31

23:                                               ; preds = %20
  br label %24

24:                                               ; preds = %23
  %25 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %26 = icmp ne i8 %25, 0
  br i1 %26, label %27, label %28

27:                                               ; preds = %24
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.11)
  br label %28

28:                                               ; preds = %27, %24
  br label %29

29:                                               ; preds = %28
  br label %30

30:                                               ; preds = %29
  br label %31

31:                                               ; preds = %30, %20
  br label %32

32:                                               ; preds = %31
  br label %33

33:                                               ; preds = %32
  %34 = load ptr, ptr @gBS, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %34, i32 0, i32 33
  %36 = load ptr, ptr %35, align 8, !tbaa !9
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct._EFI_DRIVER_BINDING_PROTOCOL, ptr %38, i32 0, i32 5
  %40 = load ptr, ptr %39, align 8, !tbaa !14
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = call i64 %36(ptr noundef %37, ptr noundef @gEfiDevicePathProtocolGuid, ptr noundef %9, ptr noundef %40, ptr noundef %41, i32 noundef 16)
  store i64 %42, ptr %10, align 8, !tbaa !16
  %43 = load i64, ptr %10, align 8, !tbaa !16
  %44 = icmp slt i64 %43, 0
  br i1 %44, label %45, label %47

45:                                               ; preds = %33
  %46 = load i64, ptr %10, align 8, !tbaa !16
  store i64 %46, ptr %4, align 8
  store i32 1, ptr %19, align 4
  br label %789

47:                                               ; preds = %33
  %48 = load ptr, ptr @gBS, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %48, i32 0, i32 21
  %50 = load ptr, ptr %49, align 8, !tbaa !17
  %51 = call i64 %50(ptr noundef @gEfiPciIoProtocolGuid, ptr noundef %9, ptr noundef %14)
  store i64 %51, ptr %10, align 8, !tbaa !16
  %52 = load i64, ptr %10, align 8, !tbaa !16
  %53 = icmp slt i64 %52, 0
  br i1 %53, label %54, label %56

54:                                               ; preds = %47
  %55 = load i64, ptr %10, align 8, !tbaa !16
  store i64 %55, ptr %4, align 8
  store i32 1, ptr %19, align 4
  br label %789

56:                                               ; preds = %47
  %57 = load ptr, ptr @gBS, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %57, i32 0, i32 33
  %59 = load ptr, ptr %58, align 8, !tbaa !9
  %60 = load ptr, ptr %14, align 8, !tbaa !5
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct._EFI_DRIVER_BINDING_PROTOCOL, ptr %61, i32 0, i32 5
  %63 = load ptr, ptr %62, align 8, !tbaa !14
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = call i64 %59(ptr noundef %60, ptr noundef @gEfiPciIoProtocolGuid, ptr noundef %17, ptr noundef %63, ptr noundef %64, i32 noundef 2)
  store i64 %65, ptr %10, align 8, !tbaa !16
  %66 = load i64, ptr %10, align 8, !tbaa !16
  %67 = icmp slt i64 %66, 0
  br i1 %67, label %68, label %70

68:                                               ; preds = %56
  %69 = load i64, ptr %10, align 8, !tbaa !16
  store i64 %69, ptr %4, align 8
  store i32 1, ptr %19, align 4
  br label %789

70:                                               ; preds = %56
  %71 = load ptr, ptr @gBS, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %71, i32 0, i32 33
  %73 = load ptr, ptr %72, align 8, !tbaa !9
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct._EFI_DRIVER_BINDING_PROTOCOL, ptr %75, i32 0, i32 5
  %77 = load ptr, ptr %76, align 8, !tbaa !14
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = call i64 %73(ptr noundef %74, ptr noundef @gEfiNetworkInterfaceIdentifierProtocolGuid_31, ptr noundef %8, ptr noundef %77, ptr noundef %78, i32 noundef 16)
  store i64 %79, ptr %10, align 8, !tbaa !16
  %80 = load i64, ptr %10, align 8, !tbaa !16
  %81 = icmp slt i64 %80, 0
  br i1 %81, label %82, label %93

82:                                               ; preds = %70
  %83 = load ptr, ptr @gBS, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %83, i32 0, i32 34
  %85 = load ptr, ptr %84, align 8, !tbaa !18
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct._EFI_DRIVER_BINDING_PROTOCOL, ptr %87, i32 0, i32 5
  %89 = load ptr, ptr %88, align 8, !tbaa !14
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = call i64 %85(ptr noundef %86, ptr noundef @gEfiDevicePathProtocolGuid, ptr noundef %89, ptr noundef %90)
  %92 = load i64, ptr %10, align 8, !tbaa !16
  store i64 %92, ptr %4, align 8
  store i32 1, ptr %19, align 4
  br label %789

93:                                               ; preds = %70
  br label %94

94:                                               ; preds = %93
  %95 = call zeroext i8 @DebugPrintEnabled()
  %96 = icmp ne i8 %95, 0
  br i1 %96, label %97, label %105

97:                                               ; preds = %94
  br label %98

98:                                               ; preds = %97
  %99 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %100 = icmp ne i8 %99, 0
  br i1 %100, label %101, label %102

101:                                              ; preds = %98
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.12)
  br label %102

102:                                              ; preds = %101, %98
  br label %103

103:                                              ; preds = %102
  br label %104

104:                                              ; preds = %103
  br label %105

105:                                              ; preds = %104, %94
  br label %106

106:                                              ; preds = %105
  br label %107

107:                                              ; preds = %106
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, ptr %108, i32 0, i32 1
  %110 = load i64, ptr %109, align 8, !tbaa !19
  %111 = inttoptr i64 %110 to ptr
  store ptr %111, ptr %11, align 8, !tbaa !5
  %112 = load ptr, ptr %11, align 8, !tbaa !5
  %113 = load ptr, ptr %11, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %113, i32 0, i32 1
  %115 = load i8, ptr %114, align 1, !tbaa !22
  %116 = zext i8 %115 to i64
  %117 = call zeroext i8 @Calc8BitCksum(ptr noundef %112, i64 noundef %116)
  %118 = zext i8 %117 to i32
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %120, label %135

120:                                              ; preds = %107
  br label %121

121:                                              ; preds = %120
  %122 = call zeroext i8 @DebugPrintEnabled()
  %123 = icmp ne i8 %122, 0
  br i1 %123, label %124, label %132

124:                                              ; preds = %121
  br label %125

125:                                              ; preds = %124
  %126 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %127 = icmp ne i8 %126, 0
  br i1 %127, label %128, label %129

128:                                              ; preds = %125
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.13)
  br label %129

129:                                              ; preds = %128, %125
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130
  br label %132

132:                                              ; preds = %131, %121
  br label %133

133:                                              ; preds = %132
  br label %134

134:                                              ; preds = %133
  br label %765

135:                                              ; preds = %107
  %136 = load ptr, ptr %11, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %136, i32 0, i32 9
  %138 = load i32, ptr %137, align 1, !tbaa !22
  %139 = and i32 %138, 64
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %141, label %142

141:                                              ; preds = %135
  br label %165

142:                                              ; preds = %135
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %143, i32 0, i32 9
  %145 = load i32, ptr %144, align 1, !tbaa !22
  %146 = and i32 %145, 32
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %149

148:                                              ; preds = %142
  br label %164

149:                                              ; preds = %142
  br label %150

150:                                              ; preds = %149
  %151 = call zeroext i8 @DebugPrintEnabled()
  %152 = icmp ne i8 %151, 0
  br i1 %152, label %153, label %161

153:                                              ; preds = %150
  br label %154

154:                                              ; preds = %153
  %155 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %156 = icmp ne i8 %155, 0
  br i1 %156, label %157, label %158

157:                                              ; preds = %154
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.14)
  br label %158

158:                                              ; preds = %157, %154
  br label %159

159:                                              ; preds = %158
  br label %160

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160, %150
  br label %162

162:                                              ; preds = %161
  br label %163

163:                                              ; preds = %162
  br label %765

164:                                              ; preds = %148
  br label %165

165:                                              ; preds = %164, %141
  %166 = load ptr, ptr %17, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct._EFI_PCI_IO_PROTOCOL, ptr %166, i32 0, i32 8
  %168 = load ptr, ptr %167, align 8, !tbaa !23
  %169 = load ptr, ptr %17, align 8, !tbaa !5
  %170 = call i64 %168(ptr noundef %169, i32 noundef 0, i32 noundef 4, i64 noundef 1, ptr noundef %13, i64 noundef 0)
  store i64 %170, ptr %10, align 8, !tbaa !16
  %171 = load i64, ptr %10, align 8, !tbaa !16
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %173, label %188

173:                                              ; preds = %165
  br label %174

174:                                              ; preds = %173
  %175 = call zeroext i8 @DebugPrintEnabled()
  %176 = icmp ne i8 %175, 0
  br i1 %176, label %177, label %185

177:                                              ; preds = %174
  br label %178

178:                                              ; preds = %177
  %179 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %180 = icmp ne i8 %179, 0
  br i1 %180, label %181, label %182

181:                                              ; preds = %178
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.15)
  br label %182

182:                                              ; preds = %181, %178
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184, %174
  br label %186

186:                                              ; preds = %185
  br label %187

187:                                              ; preds = %186
  br label %765

188:                                              ; preds = %165
  %189 = load ptr, ptr %13, align 8, !tbaa !5
  %190 = ptrtoint ptr %189 to i64
  %191 = inttoptr i64 %190 to ptr
  store ptr %191, ptr %12, align 8, !tbaa !5
  %192 = load ptr, ptr %12, align 8, !tbaa !5
  %193 = call ptr @ZeroMem(ptr noundef %192, i64 noundef 2632)
  %194 = load ptr, ptr %17, align 8, !tbaa !5
  %195 = load ptr, ptr %12, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.SNP_DRIVER, ptr %195, i32 0, i32 17
  store ptr %194, ptr %196, align 8, !tbaa !26
  %197 = load ptr, ptr %12, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.SNP_DRIVER, ptr %197, i32 0, i32 0
  store i32 1935961715, ptr %198, align 8, !tbaa !34
  %199 = load ptr, ptr %12, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.SNP_DRIVER, ptr %199, i32 0, i32 2
  %201 = call ptr @EfiInitializeLock(ptr noundef %200, i64 noundef 16)
  %202 = load ptr, ptr %12, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.SNP_DRIVER, ptr %202, i32 0, i32 3
  %204 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %203, i32 0, i32 0
  store i64 65536, ptr %204, align 8, !tbaa !35
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.SNP_DRIVER, ptr %205, i32 0, i32 3
  %207 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %206, i32 0, i32 1
  store ptr @SnpUndi32Start, ptr %207, align 8, !tbaa !36
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.SNP_DRIVER, ptr %208, i32 0, i32 3
  %210 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %209, i32 0, i32 2
  store ptr @SnpUndi32Stop, ptr %210, align 8, !tbaa !37
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.SNP_DRIVER, ptr %211, i32 0, i32 3
  %213 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %212, i32 0, i32 3
  store ptr @SnpUndi32Initialize, ptr %213, align 8, !tbaa !38
  %214 = load ptr, ptr %12, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.SNP_DRIVER, ptr %214, i32 0, i32 3
  %216 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %215, i32 0, i32 4
  store ptr @SnpUndi32Reset, ptr %216, align 8, !tbaa !39
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.SNP_DRIVER, ptr %217, i32 0, i32 3
  %219 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %218, i32 0, i32 5
  store ptr @SnpUndi32Shutdown, ptr %219, align 8, !tbaa !40
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.SNP_DRIVER, ptr %220, i32 0, i32 3
  %222 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %221, i32 0, i32 6
  store ptr @SnpUndi32ReceiveFilters, ptr %222, align 8, !tbaa !41
  %223 = load ptr, ptr %12, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.SNP_DRIVER, ptr %223, i32 0, i32 3
  %225 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %224, i32 0, i32 7
  store ptr @SnpUndi32StationAddress, ptr %225, align 8, !tbaa !42
  %226 = load ptr, ptr %12, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.SNP_DRIVER, ptr %226, i32 0, i32 3
  %228 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %227, i32 0, i32 8
  store ptr @SnpUndi32Statistics, ptr %228, align 8, !tbaa !43
  %229 = load ptr, ptr %12, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.SNP_DRIVER, ptr %229, i32 0, i32 3
  %231 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %230, i32 0, i32 9
  store ptr @SnpUndi32McastIpToMac, ptr %231, align 8, !tbaa !44
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.SNP_DRIVER, ptr %232, i32 0, i32 3
  %234 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %233, i32 0, i32 10
  store ptr @SnpUndi32NvData, ptr %234, align 8, !tbaa !45
  %235 = load ptr, ptr %12, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.SNP_DRIVER, ptr %235, i32 0, i32 3
  %237 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %236, i32 0, i32 11
  store ptr @SnpUndi32GetStatus, ptr %237, align 8, !tbaa !46
  %238 = load ptr, ptr %12, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.SNP_DRIVER, ptr %238, i32 0, i32 3
  %240 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %239, i32 0, i32 12
  store ptr @SnpUndi32Transmit, ptr %240, align 8, !tbaa !47
  %241 = load ptr, ptr %12, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.SNP_DRIVER, ptr %241, i32 0, i32 3
  %243 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %242, i32 0, i32 13
  store ptr @SnpUndi32Receive, ptr %243, align 8, !tbaa !48
  %244 = load ptr, ptr %12, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.SNP_DRIVER, ptr %244, i32 0, i32 3
  %246 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %245, i32 0, i32 14
  store ptr null, ptr %246, align 8, !tbaa !49
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.SNP_DRIVER, ptr %247, i32 0, i32 4
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.SNP_DRIVER, ptr %249, i32 0, i32 3
  %251 = getelementptr inbounds %struct._EFI_SIMPLE_NETWORK_PROTOCOL, ptr %250, i32 0, i32 15
  store ptr %248, ptr %251, align 8, !tbaa !50
  %252 = load ptr, ptr %12, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.SNP_DRIVER, ptr %252, i32 0, i32 11
  store i32 0, ptr %253, align 4, !tbaa !51
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.SNP_DRIVER, ptr %254, i32 0, i32 12
  store ptr null, ptr %255, align 8, !tbaa !52
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, ptr %256, i32 0, i32 0
  %258 = load i64, ptr %257, align 8, !tbaa !53
  %259 = icmp uge i64 %258, 131072
  br i1 %259, label %260, label %266

260:                                              ; preds = %188
  %261 = load ptr, ptr %8, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, ptr %261, i32 0, i32 9
  %263 = load i16, ptr %262, align 4, !tbaa !54
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.SNP_DRIVER, ptr %264, i32 0, i32 10
  store i16 %263, ptr %265, align 2, !tbaa !55
  br label %276

266:                                              ; preds = %188
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, ptr %267, i32 0, i32 9
  %269 = load i16, ptr %268, align 4, !tbaa !54
  %270 = zext i16 %269 to i32
  %271 = and i32 %270, 255
  %272 = trunc i32 %271 to i8
  %273 = zext i8 %272 to i16
  %274 = load ptr, ptr %12, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.SNP_DRIVER, ptr %274, i32 0, i32 10
  store i16 %273, ptr %275, align 2, !tbaa !55
  br label %276

276:                                              ; preds = %266, %260
  %277 = load ptr, ptr %11, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %277, i32 0, i32 9
  %279 = load i32, ptr %278, align 1, !tbaa !22
  %280 = and i32 %279, -2147483648
  %281 = icmp ne i32 %280, 0
  br i1 %281, label %282, label %287

282:                                              ; preds = %276
  %283 = load ptr, ptr %12, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.SNP_DRIVER, ptr %283, i32 0, i32 8
  store i8 0, ptr %284, align 8, !tbaa !56
  %285 = load ptr, ptr %12, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.SNP_DRIVER, ptr %285, i32 0, i32 7
  store ptr @IssueHwUndiCommand, ptr %286, align 8, !tbaa !57
  br label %315

287:                                              ; preds = %276
  %288 = load ptr, ptr %12, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.SNP_DRIVER, ptr %288, i32 0, i32 8
  store i8 1, ptr %289, align 8, !tbaa !56
  %290 = load ptr, ptr %11, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.s_pxe_sw_undi, ptr %290, i32 0, i32 9
  %292 = load i32, ptr %291, align 1, !tbaa !22
  %293 = and i32 %292, 1073741824
  %294 = icmp ne i32 %293, 0
  br i1 %294, label %295, label %302

295:                                              ; preds = %287
  %296 = load ptr, ptr %11, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.s_pxe_sw_undi, ptr %296, i32 0, i32 10
  %298 = load i64, ptr %297, align 1, !tbaa !22
  %299 = inttoptr i64 %298 to ptr
  %300 = load ptr, ptr %12, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.SNP_DRIVER, ptr %300, i32 0, i32 7
  store ptr %299, ptr %301, align 8, !tbaa !57
  br label %314

302:                                              ; preds = %287
  %303 = load ptr, ptr %11, align 8, !tbaa !5
  %304 = ptrtoint ptr %303 to i64
  %305 = trunc i64 %304 to i8
  %306 = zext i8 %305 to i64
  %307 = load ptr, ptr %11, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.s_pxe_sw_undi, ptr %307, i32 0, i32 10
  %309 = load i64, ptr %308, align 1, !tbaa !22
  %310 = add i64 %306, %309
  %311 = inttoptr i64 %310 to ptr
  %312 = load ptr, ptr %12, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.SNP_DRIVER, ptr %312, i32 0, i32 7
  store ptr %311, ptr %313, align 8, !tbaa !57
  br label %314

314:                                              ; preds = %302, %295
  br label %315

315:                                              ; preds = %314, %282
  %316 = load ptr, ptr %17, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct._EFI_PCI_IO_PROTOCOL, ptr %316, i32 0, i32 8
  %318 = load ptr, ptr %317, align 8, !tbaa !23
  %319 = load ptr, ptr %17, align 8, !tbaa !5
  %320 = call i64 %318(ptr noundef %319, i32 noundef 0, i32 noundef 4, i64 noundef 1, ptr noundef %13, i64 noundef 0)
  store i64 %320, ptr %10, align 8, !tbaa !16
  %321 = load i64, ptr %10, align 8, !tbaa !16
  %322 = icmp ne i64 %321, 0
  br i1 %322, label %323, label %338

323:                                              ; preds = %315
  br label %324

324:                                              ; preds = %323
  %325 = call zeroext i8 @DebugPrintEnabled()
  %326 = icmp ne i8 %325, 0
  br i1 %326, label %327, label %335

327:                                              ; preds = %324
  br label %328

328:                                              ; preds = %327
  %329 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %330 = icmp ne i8 %329, 0
  br i1 %330, label %331, label %332

331:                                              ; preds = %328
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.16)
  br label %332

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

333:                                              ; preds = %332
  br label %334

334:                                              ; preds = %333
  br label %335

335:                                              ; preds = %334, %324
  br label %336

336:                                              ; preds = %335
  br label %337

337:                                              ; preds = %336
  br label %758

338:                                              ; preds = %315
  %339 = load ptr, ptr %13, align 8, !tbaa !5
  %340 = ptrtoint ptr %339 to i64
  %341 = inttoptr i64 %340 to ptr
  %342 = load ptr, ptr %12, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.SNP_DRIVER, ptr %342, i32 0, i32 22
  store ptr %341, ptr %343, align 8, !tbaa !58
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %345 = ptrtoint ptr %344 to i64
  %346 = add i64 %345, 2048
  %347 = inttoptr i64 %346 to ptr
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.SNP_DRIVER, ptr %348, i32 0, i32 24
  store ptr %347, ptr %349, align 8, !tbaa !59
  %350 = load ptr, ptr %12, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.SNP_DRIVER, ptr %350, i32 0, i32 19
  store i8 0, ptr %351, align 1, !tbaa !60
  %352 = load ptr, ptr %12, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.SNP_DRIVER, ptr %352, i32 0, i32 18
  store i8 1, ptr %353, align 8, !tbaa !61
  store i8 0, ptr %15, align 1, !tbaa !22
  br label %354

354:                                              ; preds = %396, %338
  %355 = load i8, ptr %15, align 1, !tbaa !22
  %356 = zext i8 %355 to i32
  %357 = icmp slt i32 %356, 6
  br i1 %357, label %358, label %399

358:                                              ; preds = %354
  %359 = load ptr, ptr %17, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct._EFI_PCI_IO_PROTOCOL, ptr %359, i32 0, i32 13
  %361 = load ptr, ptr %360, align 8, !tbaa !62
  %362 = load ptr, ptr %17, align 8, !tbaa !5
  %363 = load i8, ptr %15, align 1, !tbaa !22
  %364 = call i64 %361(ptr noundef %362, i8 noundef zeroext %363, ptr noundef null, ptr noundef %18)
  store i64 %364, ptr %10, align 8, !tbaa !16
  %365 = load i64, ptr %10, align 8, !tbaa !16
  %366 = icmp eq i64 %365, -9223372036854775805
  br i1 %366, label %367, label %368

367:                                              ; preds = %358
  br label %396

368:                                              ; preds = %358
  %369 = load i64, ptr %10, align 8, !tbaa !16
  %370 = icmp slt i64 %369, 0
  br i1 %370, label %371, label %372

371:                                              ; preds = %368
  br label %758

372:                                              ; preds = %368
  br label %373

373:                                              ; preds = %372
  %374 = load ptr, ptr %18, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, ptr %374, i32 0, i32 2
  %376 = load i8, ptr %375, align 1, !tbaa !63
  %377 = zext i8 %376 to i32
  %378 = icmp eq i32 %377, 0
  br i1 %378, label %379, label %383

379:                                              ; preds = %373
  %380 = load i8, ptr %15, align 1, !tbaa !22
  %381 = load ptr, ptr %12, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.SNP_DRIVER, ptr %381, i32 0, i32 19
  store i8 %380, ptr %382, align 1, !tbaa !60
  br label %394

383:                                              ; preds = %373
  %384 = load ptr, ptr %18, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, ptr %384, i32 0, i32 2
  %386 = load i8, ptr %385, align 1, !tbaa !63
  %387 = zext i8 %386 to i32
  %388 = icmp eq i32 %387, 1
  br i1 %388, label %389, label %393

389:                                              ; preds = %383
  %390 = load i8, ptr %15, align 1, !tbaa !22
  %391 = load ptr, ptr %12, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.SNP_DRIVER, ptr %391, i32 0, i32 18
  store i8 %390, ptr %392, align 8, !tbaa !61
  br label %393

393:                                              ; preds = %389, %383
  br label %394

394:                                              ; preds = %393, %379
  %395 = load ptr, ptr %18, align 8, !tbaa !5
  call void @FreePool(ptr noundef %395)
  br label %396

396:                                              ; preds = %394, %367
  %397 = load i8, ptr %15, align 1, !tbaa !22
  %398 = add i8 %397, 1
  store i8 %398, ptr %15, align 1, !tbaa !22
  br label %354, !llvm.loop !65

399:                                              ; preds = %354
  %400 = load ptr, ptr %12, align 8, !tbaa !5
  %401 = call i64 @PxeStart(ptr noundef %400)
  store i64 %401, ptr %10, align 8, !tbaa !16
  %402 = load i64, ptr %10, align 8, !tbaa !16
  %403 = icmp ne i64 %402, 0
  br i1 %403, label %404, label %405

404:                                              ; preds = %399
  br label %758

405:                                              ; preds = %399
  %406 = load ptr, ptr %12, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.SNP_DRIVER, ptr %406, i32 0, i32 20
  %408 = getelementptr inbounds %struct.s_pxe_cdb, ptr %407, i32 0, i32 0
  store i16 3, ptr %408, align 2, !tbaa !67
  %409 = load ptr, ptr %12, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.SNP_DRIVER, ptr %409, i32 0, i32 20
  %411 = getelementptr inbounds %struct.s_pxe_cdb, ptr %410, i32 0, i32 1
  store i16 0, ptr %411, align 2, !tbaa !68
  %412 = load ptr, ptr %12, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.SNP_DRIVER, ptr %412, i32 0, i32 20
  %414 = getelementptr inbounds %struct.s_pxe_cdb, ptr %413, i32 0, i32 2
  store i16 0, ptr %414, align 2, !tbaa !69
  %415 = load ptr, ptr %12, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.SNP_DRIVER, ptr %415, i32 0, i32 20
  %417 = getelementptr inbounds %struct.s_pxe_cdb, ptr %416, i32 0, i32 4
  store i64 0, ptr %417, align 2, !tbaa !70
  %418 = load ptr, ptr %12, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.SNP_DRIVER, ptr %418, i32 0, i32 20
  %420 = getelementptr inbounds %struct.s_pxe_cdb, ptr %419, i32 0, i32 3
  store i16 47, ptr %420, align 2, !tbaa !71
  %421 = load ptr, ptr %12, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.SNP_DRIVER, ptr %421, i32 0, i32 25
  %423 = ptrtoint ptr %422 to i64
  %424 = load ptr, ptr %12, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.SNP_DRIVER, ptr %424, i32 0, i32 20
  %426 = getelementptr inbounds %struct.s_pxe_cdb, ptr %425, i32 0, i32 5
  store i64 %423, ptr %426, align 2, !tbaa !72
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.SNP_DRIVER, ptr %427, i32 0, i32 20
  %429 = getelementptr inbounds %struct.s_pxe_cdb, ptr %428, i32 0, i32 6
  store i16 0, ptr %429, align 2, !tbaa !73
  %430 = load ptr, ptr %12, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.SNP_DRIVER, ptr %430, i32 0, i32 20
  %432 = getelementptr inbounds %struct.s_pxe_cdb, ptr %431, i32 0, i32 7
  store i16 0, ptr %432, align 2, !tbaa !74
  %433 = load ptr, ptr %12, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.SNP_DRIVER, ptr %433, i32 0, i32 10
  %435 = load i16, ptr %434, align 2, !tbaa !55
  %436 = load ptr, ptr %12, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.SNP_DRIVER, ptr %436, i32 0, i32 20
  %438 = getelementptr inbounds %struct.s_pxe_cdb, ptr %437, i32 0, i32 8
  store i16 %435, ptr %438, align 2, !tbaa !75
  %439 = load ptr, ptr %12, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.SNP_DRIVER, ptr %439, i32 0, i32 20
  %441 = getelementptr inbounds %struct.s_pxe_cdb, ptr %440, i32 0, i32 9
  store i16 0, ptr %441, align 2, !tbaa !76
  br label %442

442:                                              ; preds = %405
  %443 = call zeroext i8 @DebugPrintEnabled()
  %444 = icmp ne i8 %443, 0
  br i1 %444, label %445, label %453

445:                                              ; preds = %442
  br label %446

446:                                              ; preds = %445
  %447 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %448 = icmp ne i8 %447, 0
  br i1 %448, label %449, label %450

449:                                              ; preds = %446
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.17)
  br label %450

450:                                              ; preds = %449, %446
  br label %451

451:                                              ; preds = %450
  br label %452

452:                                              ; preds = %451
  br label %453

453:                                              ; preds = %452, %442
  br label %454

454:                                              ; preds = %453
  br label %455

455:                                              ; preds = %454
  %456 = load ptr, ptr %12, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.SNP_DRIVER, ptr %456, i32 0, i32 7
  %458 = load ptr, ptr %457, align 8, !tbaa !57
  %459 = load ptr, ptr %12, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.SNP_DRIVER, ptr %459, i32 0, i32 20
  %461 = ptrtoint ptr %460 to i64
  %462 = call i64 %458(i64 noundef %461)
  %463 = load ptr, ptr %12, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.SNP_DRIVER, ptr %463, i32 0, i32 20
  %465 = getelementptr inbounds %struct.s_pxe_cdb, ptr %464, i32 0, i32 7
  %466 = load i16, ptr %465, align 2, !tbaa !74
  store i16 %466, ptr %16, align 2, !tbaa !77
  %467 = load ptr, ptr %12, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.SNP_DRIVER, ptr %467, i32 0, i32 20
  %469 = getelementptr inbounds %struct.s_pxe_cdb, ptr %468, i32 0, i32 6
  %470 = load i16, ptr %469, align 2, !tbaa !73
  %471 = zext i16 %470 to i32
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %473, label %500

473:                                              ; preds = %455
  br label %474

474:                                              ; preds = %473
  %475 = call zeroext i8 @DebugPrintEnabled()
  %476 = icmp ne i8 %475, 0
  br i1 %476, label %477, label %495

477:                                              ; preds = %474
  br label %478

478:                                              ; preds = %477
  %479 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %480 = icmp ne i8 %479, 0
  br i1 %480, label %481, label %492

481:                                              ; preds = %478
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.SNP_DRIVER, ptr %482, i32 0, i32 20
  %484 = getelementptr inbounds %struct.s_pxe_cdb, ptr %483, i32 0, i32 7
  %485 = load i16, ptr %484, align 2, !tbaa !74
  %486 = zext i16 %485 to i32
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.SNP_DRIVER, ptr %487, i32 0, i32 20
  %489 = getelementptr inbounds %struct.s_pxe_cdb, ptr %488, i32 0, i32 6
  %490 = load i16, ptr %489, align 2, !tbaa !73
  %491 = zext i16 %490 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.18, i32 noundef %486, i32 noundef %491)
  br label %492

492:                                              ; preds = %481, %478
  br label %493

493:                                              ; preds = %492
  br label %494

494:                                              ; preds = %493
  br label %495

495:                                              ; preds = %494, %474
  br label %496

496:                                              ; preds = %495
  br label %497

497:                                              ; preds = %496
  %498 = load ptr, ptr %12, align 8, !tbaa !5
  %499 = call i64 @PxeStop(ptr noundef %498)
  br label %758

500:                                              ; preds = %455
  %501 = load ptr, ptr %12, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.SNP_DRIVER, ptr %501, i32 0, i32 4
  %503 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %502, i32 0, i32 0
  store i32 0, ptr %503, align 8, !tbaa !78
  %504 = load ptr, ptr %12, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.SNP_DRIVER, ptr %504, i32 0, i32 25
  %506 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %505, i32 0, i32 6
  %507 = load i16, ptr %506, align 8, !tbaa !79
  %508 = zext i16 %507 to i32
  %509 = load ptr, ptr %12, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.SNP_DRIVER, ptr %509, i32 0, i32 4
  %511 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %510, i32 0, i32 1
  store i32 %508, ptr %511, align 4, !tbaa !80
  %512 = load ptr, ptr %12, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.SNP_DRIVER, ptr %512, i32 0, i32 25
  %514 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %513, i32 0, i32 5
  %515 = load i16, ptr %514, align 2, !tbaa !81
  %516 = zext i16 %515 to i32
  %517 = load ptr, ptr %12, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.SNP_DRIVER, ptr %517, i32 0, i32 4
  %519 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %518, i32 0, i32 2
  store i32 %516, ptr %519, align 8, !tbaa !82
  %520 = load ptr, ptr %12, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.SNP_DRIVER, ptr %520, i32 0, i32 25
  %522 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %521, i32 0, i32 1
  %523 = load i32, ptr %522, align 4, !tbaa !83
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.SNP_DRIVER, ptr %524, i32 0, i32 4
  %526 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %525, i32 0, i32 3
  store i32 %523, ptr %526, align 4, !tbaa !84
  %527 = load ptr, ptr %12, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.SNP_DRIVER, ptr %527, i32 0, i32 25
  %529 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %528, i32 0, i32 4
  %530 = load i16, ptr %529, align 4, !tbaa !85
  %531 = zext i16 %530 to i32
  %532 = load ptr, ptr %12, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.SNP_DRIVER, ptr %532, i32 0, i32 4
  %534 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %533, i32 0, i32 5
  store i32 %531, ptr %534, align 4, !tbaa !86
  %535 = load ptr, ptr %12, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.SNP_DRIVER, ptr %535, i32 0, i32 25
  %537 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %536, i32 0, i32 3
  %538 = load i32, ptr %537, align 8, !tbaa !87
  %539 = load ptr, ptr %12, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.SNP_DRIVER, ptr %539, i32 0, i32 4
  %541 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %540, i32 0, i32 5
  %542 = load i32, ptr %541, align 4, !tbaa !86
  %543 = mul i32 %538, %542
  %544 = load ptr, ptr %12, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.SNP_DRIVER, ptr %544, i32 0, i32 4
  %546 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %545, i32 0, i32 4
  store i32 %543, ptr %546, align 8, !tbaa !88
  %547 = load ptr, ptr %12, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.SNP_DRIVER, ptr %547, i32 0, i32 25
  %549 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %548, i32 0, i32 12
  %550 = load i8, ptr %549, align 4, !tbaa !89
  %551 = load ptr, ptr %12, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.SNP_DRIVER, ptr %551, i32 0, i32 4
  %553 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %552, i32 0, i32 14
  store i8 %550, ptr %553, align 8, !tbaa !90
  %554 = load ptr, ptr %12, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.SNP_DRIVER, ptr %554, i32 0, i32 25
  %556 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %555, i32 0, i32 7
  %557 = load i16, ptr %556, align 2, !tbaa !91
  %558 = zext i16 %557 to i32
  %559 = load ptr, ptr %12, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.SNP_DRIVER, ptr %559, i32 0, i32 4
  %561 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %560, i32 0, i32 8
  store i32 %558, ptr %561, align 8, !tbaa !92
  %562 = load ptr, ptr %12, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.SNP_DRIVER, ptr %562, i32 0, i32 4
  %564 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %563, i32 0, i32 9
  store i32 0, ptr %564, align 4, !tbaa !93
  %565 = load i16, ptr %16, align 2, !tbaa !77
  %566 = zext i16 %565 to i32
  %567 = and i32 %566, 1
  switch i32 %567, label %573 [
    i32 1, label %568
    i32 0, label %572
  ]

568:                                              ; preds = %500
  %569 = load ptr, ptr %12, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.SNP_DRIVER, ptr %569, i32 0, i32 4
  %571 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %570, i32 0, i32 17
  store i8 1, ptr %571, align 1, !tbaa !94
  br label %577

572:                                              ; preds = %500
  br label %573

573:                                              ; preds = %572, %500
  %574 = load ptr, ptr %12, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.SNP_DRIVER, ptr %574, i32 0, i32 4
  %576 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %575, i32 0, i32 17
  store i8 0, ptr %576, align 1, !tbaa !94
  br label %577

577:                                              ; preds = %573, %568
  %578 = load i16, ptr %16, align 2, !tbaa !77
  %579 = zext i16 %578 to i32
  %580 = and i32 %579, 2
  switch i32 %580, label %585 [
    i32 2, label %581
    i32 0, label %584
  ]

581:                                              ; preds = %577
  %582 = load ptr, ptr %12, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.SNP_DRIVER, ptr %582, i32 0, i32 30
  store i8 1, ptr %583, align 8, !tbaa !95
  br label %588

584:                                              ; preds = %577
  br label %585

585:                                              ; preds = %584, %577
  %586 = load ptr, ptr %12, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.SNP_DRIVER, ptr %586, i32 0, i32 30
  store i8 0, ptr %587, align 8, !tbaa !95
  br label %588

588:                                              ; preds = %585, %581
  %589 = load ptr, ptr %11, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %589, i32 0, i32 9
  %591 = load i32, ptr %590, align 1, !tbaa !22
  %592 = and i32 %591, 256
  %593 = icmp ne i32 %592, 0
  br i1 %593, label %594, label %598

594:                                              ; preds = %588
  %595 = load ptr, ptr %12, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.SNP_DRIVER, ptr %595, i32 0, i32 4
  %597 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %596, i32 0, i32 15
  store i8 1, ptr %597, align 1, !tbaa !96
  br label %602

598:                                              ; preds = %588
  %599 = load ptr, ptr %12, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.SNP_DRIVER, ptr %599, i32 0, i32 4
  %601 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %600, i32 0, i32 15
  store i8 0, ptr %601, align 1, !tbaa !96
  br label %602

602:                                              ; preds = %598, %594
  %603 = load ptr, ptr %11, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %603, i32 0, i32 9
  %605 = load i32, ptr %604, align 1, !tbaa !22
  %606 = and i32 %605, 4096
  %607 = icmp ne i32 %606, 0
  br i1 %607, label %608, label %612

608:                                              ; preds = %602
  %609 = load ptr, ptr %12, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.SNP_DRIVER, ptr %609, i32 0, i32 4
  %611 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %610, i32 0, i32 16
  store i8 1, ptr %611, align 2, !tbaa !97
  br label %616

612:                                              ; preds = %602
  %613 = load ptr, ptr %12, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.SNP_DRIVER, ptr %613, i32 0, i32 4
  %615 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %614, i32 0, i32 16
  store i8 0, ptr %615, align 2, !tbaa !97
  br label %616

616:                                              ; preds = %612, %608
  %617 = load ptr, ptr %12, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.SNP_DRIVER, ptr %617, i32 0, i32 4
  %619 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %618, i32 0, i32 6
  store i32 1, ptr %619, align 8, !tbaa !98
  %620 = load ptr, ptr %11, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %620, i32 0, i32 9
  %622 = load i32, ptr %621, align 1, !tbaa !22
  %623 = and i32 %622, 128
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %631

625:                                              ; preds = %616
  %626 = load ptr, ptr %12, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.SNP_DRIVER, ptr %626, i32 0, i32 4
  %628 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %627, i32 0, i32 6
  %629 = load i32, ptr %628, align 8, !tbaa !98
  %630 = or i32 %629, 16
  store i32 %630, ptr %628, align 8, !tbaa !98
  br label %631

631:                                              ; preds = %625, %616
  %632 = load ptr, ptr %11, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %632, i32 0, i32 9
  %634 = load i32, ptr %633, align 1, !tbaa !22
  %635 = and i32 %634, 64
  %636 = icmp ne i32 %635, 0
  br i1 %636, label %637, label %643

637:                                              ; preds = %631
  %638 = load ptr, ptr %12, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.SNP_DRIVER, ptr %638, i32 0, i32 4
  %640 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %639, i32 0, i32 6
  %641 = load i32, ptr %640, align 8, !tbaa !98
  %642 = or i32 %641, 8
  store i32 %642, ptr %640, align 8, !tbaa !98
  br label %643

643:                                              ; preds = %637, %631
  %644 = load ptr, ptr %11, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %644, i32 0, i32 9
  %646 = load i32, ptr %645, align 1, !tbaa !22
  %647 = and i32 %646, 32
  %648 = icmp ne i32 %647, 0
  br i1 %648, label %649, label %655

649:                                              ; preds = %643
  %650 = load ptr, ptr %12, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.SNP_DRIVER, ptr %650, i32 0, i32 4
  %652 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %651, i32 0, i32 6
  %653 = load i32, ptr %652, align 8, !tbaa !98
  %654 = or i32 %653, 4
  store i32 %654, ptr %652, align 8, !tbaa !98
  br label %655

655:                                              ; preds = %649, %643
  %656 = load ptr, ptr %11, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %656, i32 0, i32 9
  %658 = load i32, ptr %657, align 1, !tbaa !22
  %659 = and i32 %658, 16
  %660 = icmp ne i32 %659, 0
  br i1 %660, label %661, label %667

661:                                              ; preds = %655
  %662 = load ptr, ptr %12, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.SNP_DRIVER, ptr %662, i32 0, i32 4
  %664 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %663, i32 0, i32 6
  %665 = load i32, ptr %664, align 8, !tbaa !98
  %666 = or i32 %665, 2
  store i32 %666, ptr %664, align 8, !tbaa !98
  br label %667

667:                                              ; preds = %661, %655
  %668 = load ptr, ptr %11, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.s_pxe_hw_undi, ptr %668, i32 0, i32 9
  %670 = load i32, ptr %669, align 1, !tbaa !22
  %671 = and i32 %670, 128
  %672 = icmp ne i32 %671, 0
  br i1 %672, label %673, label %679

673:                                              ; preds = %667
  %674 = load ptr, ptr %12, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.SNP_DRIVER, ptr %674, i32 0, i32 4
  %676 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %675, i32 0, i32 6
  %677 = load i32, ptr %676, align 8, !tbaa !98
  %678 = or i32 %677, 16
  store i32 %678, ptr %676, align 8, !tbaa !98
  br label %679

679:                                              ; preds = %673, %667
  %680 = load ptr, ptr %12, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.SNP_DRIVER, ptr %680, i32 0, i32 4
  %682 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %681, i32 0, i32 7
  store i32 0, ptr %682, align 4, !tbaa !99
  %683 = load ptr, ptr %12, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.SNP_DRIVER, ptr %683, i32 0, i32 25
  %685 = getelementptr inbounds %struct.s_pxe_db_get_init_info, ptr %684, i32 0, i32 0
  %686 = load i32, ptr %685, align 8, !tbaa !100
  %687 = load ptr, ptr %12, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.SNP_DRIVER, ptr %687, i32 0, i32 11
  store i32 %686, ptr %688, align 4, !tbaa !51
  %689 = load ptr, ptr %12, align 8, !tbaa !5
  %690 = call i64 @PxeInit(ptr noundef %689, i16 noundef zeroext 1)
  store i64 %690, ptr %10, align 8, !tbaa !16
  %691 = load i64, ptr %10, align 8, !tbaa !16
  %692 = icmp slt i64 %691, 0
  br i1 %692, label %693, label %696

693:                                              ; preds = %679
  %694 = load ptr, ptr %12, align 8, !tbaa !5
  %695 = call i64 @PxeStop(ptr noundef %694)
  br label %758

696:                                              ; preds = %679
  %697 = load ptr, ptr %12, align 8, !tbaa !5
  %698 = call i64 @PxeGetStnAddr(ptr noundef %697)
  store i64 %698, ptr %10, align 8, !tbaa !16
  %699 = load i64, ptr %10, align 8, !tbaa !16
  %700 = icmp ne i64 %699, 0
  br i1 %700, label %701, label %720

701:                                              ; preds = %696
  br label %702

702:                                              ; preds = %701
  %703 = call zeroext i8 @DebugPrintEnabled()
  %704 = icmp ne i8 %703, 0
  br i1 %704, label %705, label %713

705:                                              ; preds = %702
  br label %706

706:                                              ; preds = %705
  %707 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %708 = icmp ne i8 %707, 0
  br i1 %708, label %709, label %710

709:                                              ; preds = %706
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.19)
  br label %710

710:                                              ; preds = %709, %706
  br label %711

711:                                              ; preds = %710
  br label %712

712:                                              ; preds = %711
  br label %713

713:                                              ; preds = %712, %702
  br label %714

714:                                              ; preds = %713
  br label %715

715:                                              ; preds = %714
  %716 = load ptr, ptr %12, align 8, !tbaa !5
  %717 = call i64 @PxeShutdown(ptr noundef %716)
  %718 = load ptr, ptr %12, align 8, !tbaa !5
  %719 = call i64 @PxeStop(ptr noundef %718)
  br label %758

720:                                              ; preds = %696
  %721 = load ptr, ptr %12, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.SNP_DRIVER, ptr %721, i32 0, i32 4
  %723 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %722, i32 0, i32 18
  store i8 0, ptr %723, align 4, !tbaa !101
  %724 = load ptr, ptr %12, align 8, !tbaa !5
  %725 = call i64 @PxeShutdown(ptr noundef %724)
  %726 = load ptr, ptr %12, align 8, !tbaa !5
  %727 = call i64 @PxeStop(ptr noundef %726)
  %728 = load ptr, ptr @gBS, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %728, i32 0, i32 44
  %730 = load ptr, ptr %729, align 8, !tbaa !102
  %731 = load ptr, ptr %12, align 8, !tbaa !5
  %732 = load ptr, ptr %12, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.SNP_DRIVER, ptr %732, i32 0, i32 29
  %734 = call i64 %730(i32 noundef 512, i64 noundef 16, ptr noundef @SnpNotifyExitBootServices, ptr noundef %731, ptr noundef @gEfiEventExitBootServicesGuid, ptr noundef %733)
  store i64 %734, ptr %10, align 8, !tbaa !16
  %735 = load i64, ptr %10, align 8, !tbaa !16
  %736 = icmp slt i64 %735, 0
  br i1 %736, label %737, label %738

737:                                              ; preds = %720
  br label %758

738:                                              ; preds = %720
  %739 = load ptr, ptr @gBS, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %739, i32 0, i32 14
  %741 = load ptr, ptr %740, align 8, !tbaa !103
  %742 = load ptr, ptr %12, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.SNP_DRIVER, ptr %742, i32 0, i32 3
  %744 = call i64 %741(ptr noundef %6, ptr noundef @gEfiSimpleNetworkProtocolGuid, i32 noundef 0, ptr noundef %743)
  store i64 %744, ptr %10, align 8, !tbaa !16
  %745 = load i64, ptr %10, align 8, !tbaa !16
  %746 = icmp slt i64 %745, 0
  br i1 %746, label %749, label %747

747:                                              ; preds = %738
  %748 = load i64, ptr %10, align 8, !tbaa !16
  store i64 %748, ptr %4, align 8
  store i32 1, ptr %19, align 4
  br label %789

749:                                              ; preds = %738
  %750 = load ptr, ptr %17, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct._EFI_PCI_IO_PROTOCOL, ptr %750, i32 0, i32 9
  %752 = load ptr, ptr %751, align 8, !tbaa !104
  %753 = load ptr, ptr %17, align 8, !tbaa !5
  %754 = load ptr, ptr %12, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.SNP_DRIVER, ptr %754, i32 0, i32 22
  %756 = load ptr, ptr %755, align 8, !tbaa !58
  %757 = call i64 %752(ptr noundef %753, i64 noundef 1, ptr noundef %756)
  br label %758

758:                                              ; preds = %749, %737, %715, %693, %497, %404, %371, %337
  %759 = load ptr, ptr %17, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct._EFI_PCI_IO_PROTOCOL, ptr %759, i32 0, i32 9
  %761 = load ptr, ptr %760, align 8, !tbaa !104
  %762 = load ptr, ptr %17, align 8, !tbaa !5
  %763 = load ptr, ptr %12, align 8, !tbaa !5
  %764 = call i64 %761(ptr noundef %762, i64 noundef 1, ptr noundef %763)
  br label %765

765:                                              ; preds = %758, %187, %163, %134
  %766 = load ptr, ptr @gBS, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %766, i32 0, i32 34
  %768 = load ptr, ptr %767, align 8, !tbaa !18
  %769 = load ptr, ptr %6, align 8, !tbaa !5
  %770 = load ptr, ptr %5, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct._EFI_DRIVER_BINDING_PROTOCOL, ptr %770, i32 0, i32 5
  %772 = load ptr, ptr %771, align 8, !tbaa !14
  %773 = load ptr, ptr %6, align 8, !tbaa !5
  %774 = call i64 %768(ptr noundef %769, ptr noundef @gEfiNetworkInterfaceIdentifierProtocolGuid_31, ptr noundef %772, ptr noundef %773)
  %775 = load ptr, ptr @gBS, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %775, i32 0, i32 34
  %777 = load ptr, ptr %776, align 8, !tbaa !18
  %778 = load ptr, ptr %6, align 8, !tbaa !5
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct._EFI_DRIVER_BINDING_PROTOCOL, ptr %779, i32 0, i32 5
  %781 = load ptr, ptr %780, align 8, !tbaa !14
  %782 = load ptr, ptr %6, align 8, !tbaa !5
  %783 = call i64 %777(ptr noundef %778, ptr noundef @gEfiDevicePathProtocolGuid, ptr noundef %781, ptr noundef %782)
  %784 = load i64, ptr %10, align 8, !tbaa !16
  %785 = icmp slt i64 %784, 0
  br i1 %785, label %787, label %786

786:                                              ; preds = %765
  store i64 -9223372036854775801, ptr %10, align 8, !tbaa !16
  br label %787

787:                                              ; preds = %786, %765
  %788 = load i64, ptr %10, align 8, !tbaa !16
  store i64 %788, ptr %4, align 8
  store i32 1, ptr %19, align 4
  br label %789

789:                                              ; preds = %787, %747, %82, %68, %54, %45
  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 2, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 1, 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
  %790 = load i64, ptr %4, align 8
  ret i64 %790
}

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

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

declare i64 @SnpUndi32Start(ptr noundef) #2

declare i64 @SnpUndi32Stop(ptr noundef) #2

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

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

declare i64 @SnpUndi32Shutdown(ptr noundef) #2

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

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

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

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

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

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

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

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

declare void @FreePool(ptr noundef) #2

declare i64 @PxeStart(ptr noundef) #2

declare i64 @PxeInit(ptr noundef, i16 noundef zeroext) #2

declare i64 @PxeGetStnAddr(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, !6, i64 280}
!10 = !{!"", !11, i64 0, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368}
!11 = !{!"", !12, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20}
!12 = !{!"long long", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !6, i64 40}
!15 = !{!"_EFI_DRIVER_BINDING_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !13, i64 24, !6, i64 32, !6, i64 40}
!16 = !{!12, !12, i64 0}
!17 = !{!10, !6, i64 184}
!18 = !{!10, !6, i64 288}
!19 = !{!20, !12, i64 8}
!20 = !{!"_EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL", !12, i64 0, !12, i64 8, !12, i64 16, !13, i64 24, !7, i64 28, !7, i64 32, !7, i64 33, !7, i64 34, !7, i64 35, !21, i64 36}
!21 = !{!"short", !7, i64 0}
!22 = !{!7, !7, i64 0}
!23 = !{!24, !6, i64 88}
!24 = !{!"_EFI_PCI_IO_PROTOCOL", !6, i64 0, !6, i64 8, !25, i64 16, !25, i64 32, !25, i64 48, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !12, i64 144, !6, i64 152}
!25 = !{!"", !6, i64 0, !6, i64 8}
!26 = !{!27, !6, i64 888}
!27 = !{!"", !13, i64 0, !28, i64 8, !29, i64 32, !30, i64 160, !6, i64 816, !6, i64 824, !6, i64 832, !7, i64 840, !21, i64 842, !13, i64 844, !6, i64 848, !6, i64 856, !6, i64 864, !6, i64 872, !6, i64 880, !6, i64 888, !7, i64 896, !7, i64 897, !32, i64 898, !6, i64 936, !6, i64 944, !6, i64 952, !33, i64 960, !6, i64 1008, !7, i64 1016, !6, i64 2616, !7, i64 2624}
!28 = !{!"", !12, i64 0, !12, i64 8, !13, i64 16}
!29 = !{!"_EFI_SIMPLE_NETWORK_PROTOCOL", !12, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!30 = !{!"", !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, !31, i64 552, !31, i64 584, !31, i64 616, !7, i64 648, !7, i64 649, !7, i64 650, !7, i64 651, !7, i64 652}
!31 = !{!"", !7, i64 0}
!32 = !{!"s_pxe_cdb", !21, i64 0, !21, i64 2, !21, i64 4, !21, i64 6, !12, i64 8, !12, i64 16, !21, i64 24, !21, i64 26, !21, i64 28, !21, i64 30}
!33 = !{!"s_pxe_db_get_init_info", !13, i64 0, !13, i64 4, !7, i64 8, !13, i64 24, !21, i64 28, !21, i64 30, !21, i64 32, !21, i64 34, !21, i64 36, !21, i64 38, !21, i64 40, !21, i64 42, !7, i64 44, !7, i64 45, !7, i64 46}
!34 = !{!27, !13, i64 0}
!35 = !{!27, !12, i64 32}
!36 = !{!27, !6, i64 40}
!37 = !{!27, !6, i64 48}
!38 = !{!27, !6, i64 56}
!39 = !{!27, !6, i64 64}
!40 = !{!27, !6, i64 72}
!41 = !{!27, !6, i64 80}
!42 = !{!27, !6, i64 88}
!43 = !{!27, !6, i64 96}
!44 = !{!27, !6, i64 104}
!45 = !{!27, !6, i64 112}
!46 = !{!27, !6, i64 120}
!47 = !{!27, !6, i64 128}
!48 = !{!27, !6, i64 136}
!49 = !{!27, !6, i64 144}
!50 = !{!27, !6, i64 152}
!51 = !{!27, !13, i64 844}
!52 = !{!27, !6, i64 848}
!53 = !{!20, !12, i64 0}
!54 = !{!20, !21, i64 36}
!55 = !{!27, !21, i64 842}
!56 = !{!27, !7, i64 840}
!57 = !{!27, !6, i64 832}
!58 = !{!27, !6, i64 936}
!59 = !{!27, !6, i64 952}
!60 = !{!27, !7, i64 897}
!61 = !{!27, !7, i64 896}
!62 = !{!24, !6, i64 128}
!63 = !{!64, !7, i64 3}
!64 = !{!"", !7, i64 0, !21, i64 1, !7, i64 3, !7, i64 4, !7, i64 5, !12, i64 6, !12, i64 14, !12, i64 22, !12, i64 30, !12, i64 38}
!65 = distinct !{!65, !66}
!66 = !{!"llvm.loop.mustprogress"}
!67 = !{!27, !21, i64 898}
!68 = !{!27, !21, i64 900}
!69 = !{!27, !21, i64 902}
!70 = !{!27, !12, i64 906}
!71 = !{!27, !21, i64 904}
!72 = !{!27, !12, i64 914}
!73 = !{!27, !21, i64 922}
!74 = !{!27, !21, i64 924}
!75 = !{!27, !21, i64 926}
!76 = !{!27, !21, i64 928}
!77 = !{!21, !21, i64 0}
!78 = !{!27, !13, i64 160}
!79 = !{!27, !21, i64 992}
!80 = !{!27, !13, i64 164}
!81 = !{!27, !21, i64 990}
!82 = !{!27, !13, i64 168}
!83 = !{!27, !13, i64 964}
!84 = !{!27, !13, i64 172}
!85 = !{!27, !21, i64 988}
!86 = !{!27, !13, i64 180}
!87 = !{!27, !13, i64 984}
!88 = !{!27, !13, i64 176}
!89 = !{!27, !7, i64 1004}
!90 = !{!27, !7, i64 808}
!91 = !{!27, !21, i64 994}
!92 = !{!27, !13, i64 192}
!93 = !{!27, !13, i64 196}
!94 = !{!27, !7, i64 811}
!95 = !{!27, !7, i64 2624}
!96 = !{!27, !7, i64 809}
!97 = !{!27, !7, i64 810}
!98 = !{!27, !13, i64 184}
!99 = !{!27, !13, i64 188}
!100 = !{!27, !13, i64 960}
!101 = !{!27, !7, i64 812}
!102 = !{!10, !6, i64 368}
!103 = !{!10, !6, i64 128}
!104 = !{!24, !6, i64 96}


; 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.GUID = type { i32, i16, i16, [8 x i8] }

@gBS = external local_unnamed_addr global ptr, align 8
@gEfiDevicePathProtocolGuid = external global %struct.GUID, align 4
@gEfiNetworkInterfaceIdentifierProtocolGuid_31 = external global %struct.GUID, align 4
@.str.11 = external hidden unnamed_addr constant [41 x i8], align 1
@gEfiPciIoProtocolGuid = external global %struct.GUID, align 4
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [39 x i8], align 1
@gEfiEventExitBootServicesGuid = external global %struct.GUID, align 4
@gEfiSimpleNetworkProtocolGuid = external global %struct.GUID, align 4

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

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

declare i64 @PxeShutdown(ptr noundef) local_unnamed_addr #2

declare i64 @PxeStop(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress 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 i64 @IssueHwUndiCommand(i64 noundef) #0

declare zeroext i8 @DebugPrintEnabled() local_unnamed_addr #2

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @SimpleNetworkDriverStart(ptr nocapture noundef readonly %0, ptr noundef %1, ptr nocapture noundef readnone %2) local_unnamed_addr #0 {
  %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
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  %11 = tail call zeroext i8 @DebugPrintEnabled() #3
  %.not = icmp eq i8 %11, 0
  br i1 %.not, label %15, label %12

12:                                               ; preds = %3
  %13 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not171 = icmp eq i8 %13, 0
  br i1 %.not171, label %15, label %14

14:                                               ; preds = %12
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.11) #3
  br label %15

15:                                               ; preds = %12, %14, %3
  %16 = load ptr, ptr @gBS, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %16, i64 280
  %18 = load ptr, ptr %17, align 8, !tbaa !9
  %19 = getelementptr inbounds i8, ptr %0, i64 40
  %20 = load ptr, ptr %19, align 8, !tbaa !14
  %21 = call i64 %18(ptr noundef %1, ptr noundef nonnull @gEfiDevicePathProtocolGuid, ptr noundef nonnull %6, ptr noundef %20, ptr noundef %1, i32 noundef 16) #3
  %22 = icmp slt i64 %21, 0
  br i1 %22, label %406, label %23

23:                                               ; preds = %15
  %24 = load ptr, ptr @gBS, align 8, !tbaa !5
  %25 = getelementptr inbounds i8, ptr %24, i64 184
  %26 = load ptr, ptr %25, align 8, !tbaa !16
  %27 = call i64 %26(ptr noundef nonnull @gEfiPciIoProtocolGuid, ptr noundef nonnull %6, ptr noundef nonnull %8) #3
  %28 = icmp slt i64 %27, 0
  br i1 %28, label %406, label %29

29:                                               ; preds = %23
  %30 = load ptr, ptr @gBS, align 8, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %30, i64 280
  %32 = load ptr, ptr %31, align 8, !tbaa !9
  %33 = load ptr, ptr %8, align 8, !tbaa !5
  %34 = load ptr, ptr %19, align 8, !tbaa !14
  %35 = call i64 %32(ptr noundef %33, ptr noundef nonnull @gEfiPciIoProtocolGuid, ptr noundef nonnull %9, ptr noundef %34, ptr noundef %1, i32 noundef 2) #3
  %36 = icmp slt i64 %35, 0
  br i1 %36, label %406, label %37

37:                                               ; preds = %29
  %38 = load ptr, ptr @gBS, align 8, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %38, i64 280
  %40 = load ptr, ptr %39, align 8, !tbaa !9
  %41 = load ptr, ptr %19, align 8, !tbaa !14
  %42 = call i64 %40(ptr noundef %1, ptr noundef nonnull @gEfiNetworkInterfaceIdentifierProtocolGuid_31, ptr noundef nonnull %5, ptr noundef %41, ptr noundef %1, i32 noundef 16) #3
  %43 = icmp slt i64 %42, 0
  br i1 %43, label %44, label %50

44:                                               ; preds = %37
  %45 = load ptr, ptr @gBS, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %45, i64 288
  %47 = load ptr, ptr %46, align 8, !tbaa !17
  %48 = load ptr, ptr %19, align 8, !tbaa !14
  %49 = call i64 %47(ptr noundef %1, ptr noundef nonnull @gEfiDevicePathProtocolGuid, ptr noundef %48, ptr noundef %1) #3
  br label %406

50:                                               ; preds = %37
  %51 = call zeroext i8 @DebugPrintEnabled() #3
  %.not172 = icmp eq i8 %51, 0
  br i1 %.not172, label %55, label %52

52:                                               ; preds = %50
  %53 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #3
  %.not173 = icmp eq i8 %53, 0
  br i1 %.not173, label %55, label %54

54:                                               ; preds = %52
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.12) #3
  br label %55

55:                                               ; preds = %52, %54, %50
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %56, i64 8
  %58 = load i64, ptr %57, align 8, !tbaa !18
  %59 = inttoptr i64 %58 to ptr
  %60 = getelementptr inbounds i8, ptr %59, i64 4
  %61 = load i8, ptr %60, align 1, !tbaa !21
  %62 = zext i8 %61 to i64
  %63 = call zeroext i8 @Calc8BitCksum(ptr noundef %59, i64 noundef %62)
  %.not174 = icmp eq i8 %63, 0
  br i1 %.not174, label %69, label %64

64:                                               ; preds = %55
  %65 = call zeroext i8 @DebugPrintEnabled() #3
  %.not203 = icmp eq i8 %65, 0
  br i1 %.not203, label %392, label %66

66:                                               ; preds = %64
  %67 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not204 = icmp eq i8 %67, 0
  br i1 %.not204, label %392, label %68

68:                                               ; preds = %66
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.13) #3
  br label %392

69:                                               ; preds = %55
  %70 = getelementptr inbounds i8, ptr %59, i64 12
  %71 = load i32, ptr %70, align 1, !tbaa !21
  %72 = and i32 %71, 96
  %or.cond = icmp eq i32 %72, 0
  br i1 %or.cond, label %73, label %78

73:                                               ; preds = %69
  %74 = call zeroext i8 @DebugPrintEnabled() #3
  %.not177 = icmp eq i8 %74, 0
  br i1 %.not177, label %392, label %75

75:                                               ; preds = %73
  %76 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not178 = icmp eq i8 %76, 0
  br i1 %.not178, label %392, label %77

77:                                               ; preds = %75
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.14) #3
  br label %392

78:                                               ; preds = %69
  %79 = load ptr, ptr %9, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 88
  %81 = load ptr, ptr %80, align 8, !tbaa !22
  %82 = call i64 %81(ptr noundef %79, i32 noundef 0, i32 noundef 4, i64 noundef 1, ptr noundef nonnull %7, i64 noundef 0) #3
  %.not179 = icmp eq i64 %82, 0
  br i1 %.not179, label %88, label %83

83:                                               ; preds = %78
  %84 = call zeroext i8 @DebugPrintEnabled() #3
  %.not201 = icmp eq i8 %84, 0
  br i1 %.not201, label %392, label %85

85:                                               ; preds = %83
  %86 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not202 = icmp eq i8 %86, 0
  br i1 %.not202, label %392, label %87

87:                                               ; preds = %85
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.15) #3
  br label %392

88:                                               ; preds = %78
  %89 = load ptr, ptr %7, align 8, !tbaa !5
  %90 = call ptr @ZeroMem(ptr noundef %89, i64 noundef 2632) #3
  %91 = load ptr, ptr %9, align 8, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %89, i64 888
  store ptr %91, ptr %92, align 8, !tbaa !25
  store i32 1935961715, ptr %89, align 8, !tbaa !33
  %93 = getelementptr inbounds i8, ptr %89, i64 8
  %94 = call ptr @EfiInitializeLock(ptr noundef nonnull %93, i64 noundef 16) #3
  %95 = getelementptr inbounds i8, ptr %89, i64 32
  store i64 65536, ptr %95, align 8, !tbaa !34
  %96 = getelementptr inbounds i8, ptr %89, i64 40
  store ptr @SnpUndi32Start, ptr %96, align 8, !tbaa !35
  %97 = getelementptr inbounds i8, ptr %89, i64 48
  store ptr @SnpUndi32Stop, ptr %97, align 8, !tbaa !36
  %98 = getelementptr inbounds i8, ptr %89, i64 56
  store ptr @SnpUndi32Initialize, ptr %98, align 8, !tbaa !37
  %99 = getelementptr inbounds i8, ptr %89, i64 64
  store ptr @SnpUndi32Reset, ptr %99, align 8, !tbaa !38
  %100 = getelementptr inbounds i8, ptr %89, i64 72
  store ptr @SnpUndi32Shutdown, ptr %100, align 8, !tbaa !39
  %101 = getelementptr inbounds i8, ptr %89, i64 80
  store ptr @SnpUndi32ReceiveFilters, ptr %101, align 8, !tbaa !40
  %102 = getelementptr inbounds i8, ptr %89, i64 88
  store ptr @SnpUndi32StationAddress, ptr %102, align 8, !tbaa !41
  %103 = getelementptr inbounds i8, ptr %89, i64 96
  store ptr @SnpUndi32Statistics, ptr %103, align 8, !tbaa !42
  %104 = getelementptr inbounds i8, ptr %89, i64 104
  store ptr @SnpUndi32McastIpToMac, ptr %104, align 8, !tbaa !43
  %105 = getelementptr inbounds i8, ptr %89, i64 112
  store ptr @SnpUndi32NvData, ptr %105, align 8, !tbaa !44
  %106 = getelementptr inbounds i8, ptr %89, i64 120
  store ptr @SnpUndi32GetStatus, ptr %106, align 8, !tbaa !45
  %107 = getelementptr inbounds i8, ptr %89, i64 128
  store ptr @SnpUndi32Transmit, ptr %107, align 8, !tbaa !46
  %108 = getelementptr inbounds i8, ptr %89, i64 136
  store ptr @SnpUndi32Receive, ptr %108, align 8, !tbaa !47
  %109 = getelementptr inbounds i8, ptr %89, i64 144
  store ptr null, ptr %109, align 8, !tbaa !48
  %110 = getelementptr inbounds i8, ptr %89, i64 160
  %111 = getelementptr inbounds i8, ptr %89, i64 152
  store ptr %110, ptr %111, align 8, !tbaa !49
  %112 = getelementptr inbounds i8, ptr %89, i64 844
  store i32 0, ptr %112, align 4, !tbaa !50
  %113 = getelementptr inbounds i8, ptr %89, i64 848
  store ptr null, ptr %113, align 8, !tbaa !51
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = load i64, ptr %114, align 8, !tbaa !52
  %116 = icmp ugt i64 %115, 131071
  %117 = getelementptr inbounds i8, ptr %114, i64 36
  %118 = load i16, ptr %117, align 4, !tbaa !53
  %119 = and i16 %118, 255
  %.sink = select i1 %116, i16 %118, i16 %119
  %120 = getelementptr inbounds i8, ptr %89, i64 842
  store i16 %.sink, ptr %120, align 2
  %121 = load i32, ptr %70, align 1, !tbaa !21
  %.not180 = icmp sgt i32 %121, -1
  %122 = getelementptr inbounds i8, ptr %89, i64 840
  br i1 %.not180, label %124, label %123

123:                                              ; preds = %88
  store i8 0, ptr %122, align 8, !tbaa !54
  br label %137

124:                                              ; preds = %88
  store i8 1, ptr %122, align 8, !tbaa !54
  %125 = load i32, ptr %70, align 1, !tbaa !21
  %126 = and i32 %125, 1073741824
  %.not181 = icmp eq i32 %126, 0
  br i1 %.not181, label %131, label %127

127:                                              ; preds = %124
  %128 = getelementptr inbounds i8, ptr %59, i64 16
  %129 = load i64, ptr %128, align 1, !tbaa !21
  %130 = inttoptr i64 %129 to ptr
  br label %137

131:                                              ; preds = %124
  %132 = and i64 %58, 255
  %133 = getelementptr inbounds i8, ptr %59, i64 16
  %134 = load i64, ptr %133, align 1, !tbaa !21
  %135 = add i64 %134, %132
  %136 = inttoptr i64 %135 to ptr
  br label %137

137:                                              ; preds = %127, %131, %123
  %.sink217 = phi ptr [ %130, %127 ], [ %136, %131 ], [ @IssueHwUndiCommand, %123 ]
  %138 = getelementptr inbounds i8, ptr %89, i64 832
  store ptr %.sink217, ptr %138, align 8, !tbaa !55
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %139, i64 88
  %141 = load ptr, ptr %140, align 8, !tbaa !22
  %142 = call i64 %141(ptr noundef %139, i32 noundef 0, i32 noundef 4, i64 noundef 1, ptr noundef nonnull %7, i64 noundef 0) #3
  %.not182 = icmp eq i64 %142, 0
  br i1 %.not182, label %148, label %143

143:                                              ; preds = %137
  %144 = call zeroext i8 @DebugPrintEnabled() #3
  %.not199 = icmp eq i8 %144, 0
  br i1 %.not199, label %.loopexit, label %145

145:                                              ; preds = %143
  %146 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not200 = icmp eq i8 %146, 0
  br i1 %.not200, label %.loopexit, label %147

147:                                              ; preds = %145
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.16) #3
  br label %.loopexit

148:                                              ; preds = %137
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %89, i64 936
  store ptr %149, ptr %150, align 8, !tbaa !56
  %151 = ptrtoint ptr %149 to i64
  %152 = add i64 %151, 2048
  %153 = inttoptr i64 %152 to ptr
  %154 = getelementptr inbounds i8, ptr %89, i64 952
  store ptr %153, ptr %154, align 8, !tbaa !57
  %155 = getelementptr inbounds i8, ptr %89, i64 897
  store i8 0, ptr %155, align 1, !tbaa !58
  %156 = getelementptr inbounds i8, ptr %89, i64 896
  store i8 1, ptr %156, align 8, !tbaa !59
  %157 = load ptr, ptr %9, align 8, !tbaa !5
  %158 = getelementptr inbounds i8, ptr %157, i64 128
  %159 = load ptr, ptr %158, align 8, !tbaa !60
  %160 = call i64 %159(ptr noundef %157, i8 noundef zeroext 0, ptr noundef null, ptr noundef nonnull %10) #3
  %161 = icmp eq i64 %160, -9223372036854775805
  br i1 %161, label %171, label %162

162:                                              ; preds = %148
  %163 = icmp slt i64 %160, 0
  br i1 %163, label %.loopexit, label %164

164:                                              ; preds = %162
  %165 = load ptr, ptr %10, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 3
  %167 = load i8, ptr %166, align 1, !tbaa !61
  switch i8 %167, label %170 [
    i8 0, label %168
    i8 1, label %169
  ]

168:                                              ; preds = %164
  store i8 0, ptr %155, align 1, !tbaa !58
  br label %170

169:                                              ; preds = %164
  store i8 0, ptr %156, align 8, !tbaa !59
  br label %170

170:                                              ; preds = %164, %169, %168
  call void @FreePool(ptr noundef nonnull %165) #3
  br label %171

171:                                              ; preds = %148, %170
  %172 = load ptr, ptr %9, align 8, !tbaa !5
  %173 = getelementptr inbounds i8, ptr %172, i64 128
  %174 = load ptr, ptr %173, align 8, !tbaa !60
  %175 = call i64 %174(ptr noundef %172, i8 noundef zeroext 1, ptr noundef null, ptr noundef nonnull %10) #3
  %176 = icmp eq i64 %175, -9223372036854775805
  br i1 %176, label %186, label %177

177:                                              ; preds = %171
  %178 = icmp slt i64 %175, 0
  br i1 %178, label %.loopexit, label %179

179:                                              ; preds = %177
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %180, i64 3
  %182 = load i8, ptr %181, align 1, !tbaa !61
  switch i8 %182, label %185 [
    i8 0, label %184
    i8 1, label %183
  ]

183:                                              ; preds = %179
  store i8 1, ptr %156, align 8, !tbaa !59
  br label %185

184:                                              ; preds = %179
  store i8 1, ptr %155, align 1, !tbaa !58
  br label %185

185:                                              ; preds = %184, %183, %179
  call void @FreePool(ptr noundef nonnull %180) #3
  br label %186

186:                                              ; preds = %185, %171
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i64 128
  %189 = load ptr, ptr %188, align 8, !tbaa !60
  %190 = call i64 %189(ptr noundef %187, i8 noundef zeroext 2, ptr noundef null, ptr noundef nonnull %10) #3
  %191 = icmp eq i64 %190, -9223372036854775805
  br i1 %191, label %201, label %192

192:                                              ; preds = %186
  %193 = icmp slt i64 %190, 0
  br i1 %193, label %.loopexit, label %194

194:                                              ; preds = %192
  %195 = load ptr, ptr %10, align 8, !tbaa !5
  %196 = getelementptr inbounds i8, ptr %195, i64 3
  %197 = load i8, ptr %196, align 1, !tbaa !61
  switch i8 %197, label %200 [
    i8 0, label %199
    i8 1, label %198
  ]

198:                                              ; preds = %194
  store i8 2, ptr %156, align 8, !tbaa !59
  br label %200

199:                                              ; preds = %194
  store i8 2, ptr %155, align 1, !tbaa !58
  br label %200

200:                                              ; preds = %199, %198, %194
  call void @FreePool(ptr noundef nonnull %195) #3
  br label %201

201:                                              ; preds = %200, %186
  %202 = load ptr, ptr %9, align 8, !tbaa !5
  %203 = getelementptr inbounds i8, ptr %202, i64 128
  %204 = load ptr, ptr %203, align 8, !tbaa !60
  %205 = call i64 %204(ptr noundef %202, i8 noundef zeroext 3, ptr noundef null, ptr noundef nonnull %10) #3
  %206 = icmp eq i64 %205, -9223372036854775805
  br i1 %206, label %216, label %207

207:                                              ; preds = %201
  %208 = icmp slt i64 %205, 0
  br i1 %208, label %.loopexit, label %209

209:                                              ; preds = %207
  %210 = load ptr, ptr %10, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 3
  %212 = load i8, ptr %211, align 1, !tbaa !61
  switch i8 %212, label %215 [
    i8 0, label %214
    i8 1, label %213
  ]

213:                                              ; preds = %209
  store i8 3, ptr %156, align 8, !tbaa !59
  br label %215

214:                                              ; preds = %209
  store i8 3, ptr %155, align 1, !tbaa !58
  br label %215

215:                                              ; preds = %214, %213, %209
  call void @FreePool(ptr noundef nonnull %210) #3
  br label %216

216:                                              ; preds = %215, %201
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %217, i64 128
  %219 = load ptr, ptr %218, align 8, !tbaa !60
  %220 = call i64 %219(ptr noundef %217, i8 noundef zeroext 4, ptr noundef null, ptr noundef nonnull %10) #3
  %221 = icmp eq i64 %220, -9223372036854775805
  br i1 %221, label %231, label %222

222:                                              ; preds = %216
  %223 = icmp slt i64 %220, 0
  br i1 %223, label %.loopexit, label %224

224:                                              ; preds = %222
  %225 = load ptr, ptr %10, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %225, i64 3
  %227 = load i8, ptr %226, align 1, !tbaa !61
  switch i8 %227, label %230 [
    i8 0, label %229
    i8 1, label %228
  ]

228:                                              ; preds = %224
  store i8 4, ptr %156, align 8, !tbaa !59
  br label %230

229:                                              ; preds = %224
  store i8 4, ptr %155, align 1, !tbaa !58
  br label %230

230:                                              ; preds = %229, %228, %224
  call void @FreePool(ptr noundef nonnull %225) #3
  br label %231

231:                                              ; preds = %230, %216
  %232 = load ptr, ptr %9, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %232, i64 128
  %234 = load ptr, ptr %233, align 8, !tbaa !60
  %235 = call i64 %234(ptr noundef %232, i8 noundef zeroext 5, ptr noundef null, ptr noundef nonnull %10) #3
  %236 = icmp eq i64 %235, -9223372036854775805
  br i1 %236, label %246, label %237

237:                                              ; preds = %231
  %238 = icmp slt i64 %235, 0
  br i1 %238, label %.loopexit, label %239

239:                                              ; preds = %237
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = getelementptr inbounds i8, ptr %240, i64 3
  %242 = load i8, ptr %241, align 1, !tbaa !61
  switch i8 %242, label %245 [
    i8 0, label %244
    i8 1, label %243
  ]

243:                                              ; preds = %239
  store i8 5, ptr %156, align 8, !tbaa !59
  br label %245

244:                                              ; preds = %239
  store i8 5, ptr %155, align 1, !tbaa !58
  br label %245

245:                                              ; preds = %244, %243, %239
  call void @FreePool(ptr noundef nonnull %240) #3
  br label %246

246:                                              ; preds = %245, %231
  %247 = call i64 @PxeStart(ptr noundef nonnull %89) #3
  %.not183 = icmp eq i64 %247, 0
  br i1 %.not183, label %248, label %.loopexit

248:                                              ; preds = %246
  %249 = getelementptr inbounds i8, ptr %89, i64 898
  store i16 3, ptr %249, align 2, !tbaa !63
  %250 = getelementptr inbounds i8, ptr %89, i64 900
  store i16 0, ptr %250, align 2, !tbaa !64
  %251 = getelementptr inbounds i8, ptr %89, i64 902
  store i16 0, ptr %251, align 2, !tbaa !65
  %252 = getelementptr inbounds i8, ptr %89, i64 906
  store i64 0, ptr %252, align 2, !tbaa !66
  %253 = getelementptr inbounds i8, ptr %89, i64 904
  store i16 47, ptr %253, align 2, !tbaa !67
  %254 = getelementptr inbounds i8, ptr %89, i64 960
  %255 = ptrtoint ptr %254 to i64
  %256 = getelementptr inbounds i8, ptr %89, i64 914
  store i64 %255, ptr %256, align 2, !tbaa !68
  %257 = getelementptr inbounds i8, ptr %89, i64 922
  store i16 0, ptr %257, align 2, !tbaa !69
  %258 = getelementptr inbounds i8, ptr %89, i64 924
  store i16 0, ptr %258, align 2, !tbaa !70
  %259 = load i16, ptr %120, align 2, !tbaa !71
  %260 = getelementptr inbounds i8, ptr %89, i64 926
  store i16 %259, ptr %260, align 2, !tbaa !72
  %261 = getelementptr inbounds i8, ptr %89, i64 928
  store i16 0, ptr %261, align 2, !tbaa !73
  %262 = call zeroext i8 @DebugPrintEnabled() #3
  %.not184 = icmp eq i8 %262, 0
  br i1 %.not184, label %266, label %263

263:                                              ; preds = %248
  %264 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not185 = icmp eq i8 %264, 0
  br i1 %.not185, label %266, label %265

265:                                              ; preds = %263
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.17) #3
  br label %266

266:                                              ; preds = %263, %265, %248
  %267 = getelementptr inbounds i8, ptr %89, i64 832
  %268 = load ptr, ptr %267, align 8, !tbaa !55
  %269 = ptrtoint ptr %249 to i64
  %270 = call i64 %268(i64 noundef %269) #3
  %271 = load i16, ptr %257, align 2, !tbaa !69
  %.not186 = icmp eq i16 %271, 0
  br i1 %.not186, label %283, label %272

272:                                              ; preds = %266
  %273 = call zeroext i8 @DebugPrintEnabled() #3
  %.not197 = icmp eq i8 %273, 0
  br i1 %.not197, label %281, label %274

274:                                              ; preds = %272
  %275 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #3
  %.not198 = icmp eq i8 %275, 0
  br i1 %.not198, label %281, label %276

276:                                              ; preds = %274
  %277 = load i16, ptr %258, align 2, !tbaa !70
  %278 = zext i16 %277 to i32
  %279 = load i16, ptr %257, align 2, !tbaa !69
  %280 = zext i16 %279 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.18, i32 noundef %278, i32 noundef %280) #3
  br label %281

281:                                              ; preds = %274, %276, %272
  %282 = call i64 @PxeStop(ptr noundef nonnull %89) #3
  br label %.loopexit

283:                                              ; preds = %266
  %284 = load i16, ptr %258, align 2, !tbaa !70
  store i32 0, ptr %110, align 8, !tbaa !74
  %285 = getelementptr inbounds i8, ptr %89, i64 992
  %286 = load i16, ptr %285, align 8, !tbaa !75
  %287 = zext i16 %286 to i32
  %288 = getelementptr inbounds i8, ptr %89, i64 164
  store i32 %287, ptr %288, align 4, !tbaa !76
  %289 = getelementptr inbounds i8, ptr %89, i64 990
  %290 = load i16, ptr %289, align 2, !tbaa !77
  %291 = zext i16 %290 to i32
  %292 = getelementptr inbounds i8, ptr %89, i64 168
  store i32 %291, ptr %292, align 8, !tbaa !78
  %293 = getelementptr inbounds i8, ptr %89, i64 964
  %294 = load i32, ptr %293, align 4, !tbaa !79
  %295 = getelementptr inbounds i8, ptr %89, i64 172
  store i32 %294, ptr %295, align 4, !tbaa !80
  %296 = getelementptr inbounds i8, ptr %89, i64 988
  %297 = load i16, ptr %296, align 4, !tbaa !81
  %298 = zext i16 %297 to i32
  %299 = getelementptr inbounds i8, ptr %89, i64 180
  store i32 %298, ptr %299, align 4, !tbaa !82
  %300 = getelementptr inbounds i8, ptr %89, i64 984
  %301 = load i32, ptr %300, align 8, !tbaa !83
  %302 = mul i32 %301, %298
  %303 = getelementptr inbounds i8, ptr %89, i64 176
  store i32 %302, ptr %303, align 8, !tbaa !84
  %304 = getelementptr inbounds i8, ptr %89, i64 1004
  %305 = load i8, ptr %304, align 4, !tbaa !85
  %306 = getelementptr inbounds i8, ptr %89, i64 808
  store i8 %305, ptr %306, align 8, !tbaa !86
  %307 = getelementptr inbounds i8, ptr %89, i64 994
  %308 = load i16, ptr %307, align 2, !tbaa !87
  %309 = zext i16 %308 to i32
  %310 = getelementptr inbounds i8, ptr %89, i64 192
  store i32 %309, ptr %310, align 8, !tbaa !88
  %311 = getelementptr inbounds i8, ptr %89, i64 196
  store i32 0, ptr %311, align 4, !tbaa !89
  %trunc = trunc i16 %284 to i8
  %spec.select = and i8 %trunc, 1
  %312 = getelementptr inbounds i8, ptr %89, i64 811
  store i8 %spec.select, ptr %312, align 1
  %313 = trunc i16 %284 to i8
  %314 = lshr i8 %313, 1
  %.sink211 = and i8 %314, 1
  %315 = getelementptr inbounds i8, ptr %89, i64 2624
  store i8 %.sink211, ptr %315, align 8
  %316 = load i32, ptr %70, align 1, !tbaa !21
  %317 = lshr i32 %316, 8
  %318 = trunc i32 %317 to i8
  %.sink212 = and i8 %318, 1
  %319 = getelementptr inbounds i8, ptr %89, i64 809
  store i8 %.sink212, ptr %319, align 1
  %320 = load i32, ptr %70, align 1, !tbaa !21
  %321 = lshr i32 %320, 12
  %322 = trunc i32 %321 to i8
  %.sink213 = and i8 %322, 1
  %323 = getelementptr inbounds i8, ptr %89, i64 810
  store i8 %.sink213, ptr %323, align 2
  %324 = getelementptr inbounds i8, ptr %89, i64 184
  store i32 1, ptr %324, align 8, !tbaa !90
  %325 = load i32, ptr %70, align 1, !tbaa !21
  %326 = and i32 %325, 128
  %.not189 = icmp eq i32 %326, 0
  %spec.store.select206 = select i1 %.not189, i32 1, i32 17
  store i32 %spec.store.select206, ptr %324, align 8
  %327 = load i32, ptr %70, align 1, !tbaa !21
  %328 = and i32 %327, 64
  %.not190 = icmp eq i32 %328, 0
  br i1 %.not190, label %331, label %329

329:                                              ; preds = %283
  %330 = or disjoint i32 %spec.store.select206, 8
  store i32 %330, ptr %324, align 8, !tbaa !90
  %.pre = load i32, ptr %70, align 1, !tbaa !21
  br label %331

331:                                              ; preds = %329, %283
  %332 = phi i32 [ %330, %329 ], [ %spec.store.select206, %283 ]
  %333 = phi i32 [ %.pre, %329 ], [ %327, %283 ]
  %334 = and i32 %333, 32
  %.not191 = icmp eq i32 %334, 0
  br i1 %.not191, label %337, label %335

335:                                              ; preds = %331
  %336 = or i32 %332, 4
  store i32 %336, ptr %324, align 8, !tbaa !90
  %.pre214 = load i32, ptr %70, align 1, !tbaa !21
  br label %337

337:                                              ; preds = %335, %331
  %338 = phi i32 [ %336, %335 ], [ %332, %331 ]
  %339 = phi i32 [ %.pre214, %335 ], [ %333, %331 ]
  %340 = and i32 %339, 16
  %.not192 = icmp eq i32 %340, 0
  br i1 %.not192, label %343, label %341

341:                                              ; preds = %337
  %342 = or i32 %338, 2
  store i32 %342, ptr %324, align 8, !tbaa !90
  %.pre215 = load i32, ptr %70, align 1, !tbaa !21
  br label %343

343:                                              ; preds = %341, %337
  %344 = phi i32 [ %342, %341 ], [ %338, %337 ]
  %345 = phi i32 [ %.pre215, %341 ], [ %339, %337 ]
  %346 = and i32 %345, 128
  %.not193 = icmp eq i32 %346, 0
  br i1 %.not193, label %349, label %347

347:                                              ; preds = %343
  %348 = or i32 %344, 16
  store i32 %348, ptr %324, align 8, !tbaa !90
  br label %349

349:                                              ; preds = %347, %343
  %350 = getelementptr inbounds i8, ptr %89, i64 188
  store i32 0, ptr %350, align 4, !tbaa !91
  %351 = load i32, ptr %254, align 8, !tbaa !92
  store i32 %351, ptr %112, align 4, !tbaa !50
  %352 = call i64 @PxeInit(ptr noundef nonnull %89, i16 noundef zeroext 1) #3
  %353 = icmp slt i64 %352, 0
  br i1 %353, label %354, label %356

354:                                              ; preds = %349
  %355 = call i64 @PxeStop(ptr noundef nonnull %89) #3
  br label %.loopexit

356:                                              ; preds = %349
  %357 = call i64 @PxeGetStnAddr(ptr noundef nonnull %89) #3
  %.not194 = icmp eq i64 %357, 0
  br i1 %.not194, label %366, label %358

358:                                              ; preds = %356
  %359 = call zeroext i8 @DebugPrintEnabled() #3
  %.not195 = icmp eq i8 %359, 0
  br i1 %.not195, label %363, label %360

360:                                              ; preds = %358
  %361 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #3
  %.not196 = icmp eq i8 %361, 0
  br i1 %.not196, label %363, label %362

362:                                              ; preds = %360
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.19) #3
  br label %363

363:                                              ; preds = %360, %362, %358
  %364 = call i64 @PxeShutdown(ptr noundef nonnull %89) #3
  %365 = call i64 @PxeStop(ptr noundef nonnull %89) #3
  br label %.loopexit

366:                                              ; preds = %356
  %367 = getelementptr inbounds i8, ptr %89, i64 812
  store i8 0, ptr %367, align 4, !tbaa !93
  %368 = call i64 @PxeShutdown(ptr noundef nonnull %89) #3
  %369 = call i64 @PxeStop(ptr noundef nonnull %89) #3
  %370 = load ptr, ptr @gBS, align 8, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %370, i64 368
  %372 = load ptr, ptr %371, align 8, !tbaa !94
  %373 = getelementptr inbounds i8, ptr %89, i64 2616
  %374 = call i64 %372(i32 noundef 512, i64 noundef 16, ptr noundef nonnull @SnpNotifyExitBootServices, ptr noundef nonnull %89, ptr noundef nonnull @gEfiEventExitBootServicesGuid, ptr noundef nonnull %373) #3
  %375 = icmp slt i64 %374, 0
  br i1 %375, label %.loopexit, label %376

376:                                              ; preds = %366
  %377 = load ptr, ptr @gBS, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i64 128
  %379 = load ptr, ptr %378, align 8, !tbaa !95
  %380 = call i64 %379(ptr noundef nonnull %4, ptr noundef nonnull @gEfiSimpleNetworkProtocolGuid, i32 noundef 0, ptr noundef nonnull %95) #3
  %381 = icmp slt i64 %380, 0
  br i1 %381, label %382, label %406

382:                                              ; preds = %376
  %383 = load ptr, ptr %9, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i64 96
  %385 = load ptr, ptr %384, align 8, !tbaa !96
  %386 = load ptr, ptr %150, align 8, !tbaa !56
  %387 = call i64 %385(ptr noundef %383, i64 noundef 1, ptr noundef %386) #3
  br label %.loopexit

.loopexit:                                        ; preds = %162, %177, %192, %207, %222, %237, %366, %246, %143, %147, %145, %382, %363, %354, %281
  %.0154 = phi i64 [ %142, %147 ], [ %142, %145 ], [ %142, %143 ], [ %247, %246 ], [ 0, %281 ], [ %352, %354 ], [ %357, %363 ], [ %374, %366 ], [ %380, %382 ], [ %160, %162 ], [ %175, %177 ], [ %190, %192 ], [ %205, %207 ], [ %220, %222 ], [ %235, %237 ]
  %388 = load ptr, ptr %9, align 8, !tbaa !5
  %389 = getelementptr inbounds i8, ptr %388, i64 96
  %390 = load ptr, ptr %389, align 8, !tbaa !96
  %391 = call i64 %390(ptr noundef %388, i64 noundef 1, ptr noundef nonnull %89) #3
  %.pre216 = load ptr, ptr %4, align 8, !tbaa !5
  br label %392

392:                                              ; preds = %83, %87, %85, %73, %77, %75, %64, %68, %66, %.loopexit
  %393 = phi ptr [ %1, %68 ], [ %1, %66 ], [ %1, %64 ], [ %1, %87 ], [ %1, %85 ], [ %1, %83 ], [ %.pre216, %.loopexit ], [ %1, %77 ], [ %1, %75 ], [ %1, %73 ]
  %.1 = phi i64 [ %42, %68 ], [ %42, %66 ], [ %42, %64 ], [ %82, %87 ], [ %82, %85 ], [ %82, %83 ], [ %.0154, %.loopexit ], [ %42, %77 ], [ %42, %75 ], [ %42, %73 ]
  %394 = load ptr, ptr @gBS, align 8, !tbaa !5
  %395 = getelementptr inbounds i8, ptr %394, i64 288
  %396 = load ptr, ptr %395, align 8, !tbaa !17
  %397 = load ptr, ptr %19, align 8, !tbaa !14
  %398 = call i64 %396(ptr noundef %393, ptr noundef nonnull @gEfiNetworkInterfaceIdentifierProtocolGuid_31, ptr noundef %397, ptr noundef %393) #3
  %399 = load ptr, ptr @gBS, align 8, !tbaa !5
  %400 = getelementptr inbounds i8, ptr %399, i64 288
  %401 = load ptr, ptr %400, align 8, !tbaa !17
  %402 = load ptr, ptr %4, align 8, !tbaa !5
  %403 = load ptr, ptr %19, align 8, !tbaa !14
  %404 = call i64 %401(ptr noundef %402, ptr noundef nonnull @gEfiDevicePathProtocolGuid, ptr noundef %403, ptr noundef %402) #3
  %405 = icmp slt i64 %.1, 0
  %spec.store.select = select i1 %405, i64 %.1, i64 -9223372036854775801
  br label %406

406:                                              ; preds = %376, %29, %23, %15, %392, %44
  %.0 = phi i64 [ %42, %44 ], [ %spec.store.select, %392 ], [ %21, %15 ], [ %27, %23 ], [ %35, %29 ], [ %380, %376 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  ret i64 %.0
}

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

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

declare i64 @SnpUndi32Start(ptr noundef) #2

declare i64 @SnpUndi32Stop(ptr noundef) #2

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

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

declare i64 @SnpUndi32Shutdown(ptr noundef) #2

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

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

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

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

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

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

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

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

declare void @FreePool(ptr noundef) local_unnamed_addr #2

declare i64 @PxeStart(ptr noundef) local_unnamed_addr #2

declare i64 @PxeInit(ptr noundef, i16 noundef zeroext) local_unnamed_addr #2

declare i64 @PxeGetStnAddr(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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 280}
!10 = !{!"", !11, i64 0, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368}
!11 = !{!"", !12, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20}
!12 = !{!"long long", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !6, i64 40}
!15 = !{!"_EFI_DRIVER_BINDING_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !13, i64 24, !6, i64 32, !6, i64 40}
!16 = !{!10, !6, i64 184}
!17 = !{!10, !6, i64 288}
!18 = !{!19, !12, i64 8}
!19 = !{!"_EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL", !12, i64 0, !12, i64 8, !12, i64 16, !13, i64 24, !7, i64 28, !7, i64 32, !7, i64 33, !7, i64 34, !7, i64 35, !20, i64 36}
!20 = !{!"short", !7, i64 0}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !6, i64 88}
!23 = !{!"_EFI_PCI_IO_PROTOCOL", !6, i64 0, !6, i64 8, !24, i64 16, !24, i64 32, !24, i64 48, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !12, i64 144, !6, i64 152}
!24 = !{!"", !6, i64 0, !6, i64 8}
!25 = !{!26, !6, i64 888}
!26 = !{!"", !13, i64 0, !27, i64 8, !28, i64 32, !29, i64 160, !6, i64 816, !6, i64 824, !6, i64 832, !7, i64 840, !20, i64 842, !13, i64 844, !6, i64 848, !6, i64 856, !6, i64 864, !6, i64 872, !6, i64 880, !6, i64 888, !7, i64 896, !7, i64 897, !31, i64 898, !6, i64 936, !6, i64 944, !6, i64 952, !32, i64 960, !6, i64 1008, !7, i64 1016, !6, i64 2616, !7, i64 2624}
!27 = !{!"", !12, i64 0, !12, i64 8, !13, i64 16}
!28 = !{!"_EFI_SIMPLE_NETWORK_PROTOCOL", !12, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!29 = !{!"", !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, !30, i64 552, !30, i64 584, !30, i64 616, !7, i64 648, !7, i64 649, !7, i64 650, !7, i64 651, !7, i64 652}
!30 = !{!"", !7, i64 0}
!31 = !{!"s_pxe_cdb", !20, i64 0, !20, i64 2, !20, i64 4, !20, i64 6, !12, i64 8, !12, i64 16, !20, i64 24, !20, i64 26, !20, i64 28, !20, i64 30}
!32 = !{!"s_pxe_db_get_init_info", !13, i64 0, !13, i64 4, !7, i64 8, !13, i64 24, !20, i64 28, !20, i64 30, !20, i64 32, !20, i64 34, !20, i64 36, !20, i64 38, !20, i64 40, !20, i64 42, !7, i64 44, !7, i64 45, !7, i64 46}
!33 = !{!26, !13, i64 0}
!34 = !{!26, !12, i64 32}
!35 = !{!26, !6, i64 40}
!36 = !{!26, !6, i64 48}
!37 = !{!26, !6, i64 56}
!38 = !{!26, !6, i64 64}
!39 = !{!26, !6, i64 72}
!40 = !{!26, !6, i64 80}
!41 = !{!26, !6, i64 88}
!42 = !{!26, !6, i64 96}
!43 = !{!26, !6, i64 104}
!44 = !{!26, !6, i64 112}
!45 = !{!26, !6, i64 120}
!46 = !{!26, !6, i64 128}
!47 = !{!26, !6, i64 136}
!48 = !{!26, !6, i64 144}
!49 = !{!26, !6, i64 152}
!50 = !{!26, !13, i64 844}
!51 = !{!26, !6, i64 848}
!52 = !{!19, !12, i64 0}
!53 = !{!19, !20, i64 36}
!54 = !{!26, !7, i64 840}
!55 = !{!26, !6, i64 832}
!56 = !{!26, !6, i64 936}
!57 = !{!26, !6, i64 952}
!58 = !{!26, !7, i64 897}
!59 = !{!26, !7, i64 896}
!60 = !{!23, !6, i64 128}
!61 = !{!62, !7, i64 3}
!62 = !{!"", !7, i64 0, !20, i64 1, !7, i64 3, !7, i64 4, !7, i64 5, !12, i64 6, !12, i64 14, !12, i64 22, !12, i64 30, !12, i64 38}
!63 = !{!26, !20, i64 898}
!64 = !{!26, !20, i64 900}
!65 = !{!26, !20, i64 902}
!66 = !{!26, !12, i64 906}
!67 = !{!26, !20, i64 904}
!68 = !{!26, !12, i64 914}
!69 = !{!26, !20, i64 922}
!70 = !{!26, !20, i64 924}
!71 = !{!26, !20, i64 842}
!72 = !{!26, !20, i64 926}
!73 = !{!26, !20, i64 928}
!74 = !{!26, !13, i64 160}
!75 = !{!26, !20, i64 992}
!76 = !{!26, !13, i64 164}
!77 = !{!26, !20, i64 990}
!78 = !{!26, !13, i64 168}
!79 = !{!26, !13, i64 964}
!80 = !{!26, !13, i64 172}
!81 = !{!26, !20, i64 988}
!82 = !{!26, !13, i64 180}
!83 = !{!26, !13, i64 984}
!84 = !{!26, !13, i64 176}
!85 = !{!26, !7, i64 1004}
!86 = !{!26, !7, i64 808}
!87 = !{!26, !20, i64 994}
!88 = !{!26, !13, i64 192}
!89 = !{!26, !13, i64 196}
!90 = !{!26, !13, i64 184}
!91 = !{!26, !13, i64 188}
!92 = !{!26, !13, i64 960}
!93 = !{!26, !7, i64 812}
!94 = !{!10, !6, i64 368}
!95 = !{!10, !6, i64 128}
!96 = !{!23, !6, i64 96}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass