; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/IntelFrameworkModulePkg (Undi16SimpleNetworkIsr)

; 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.EFI_SIMPLE_NETWORK_DEV = type { i64, ptr, %struct._EFI_SIMPLE_NETWORK_PROTOCOL, %struct.EFI_SIMPLE_NETWORK_MODE, %struct._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, ptr, ptr, ptr, i8, ptr, ptr, i16, i16, %struct.EFI_SIMPLE_NETWORK_DEV_FIFO, ptr, ptr, %struct.PXENV_UNDI_GET_INFORMATION_T, %struct.PXENV_UNDI_GET_NIC_TYPE_T, %struct.PXENV_UNDI_GET_NDIS_INFO_T, i8, %struct.PXENV_UNDI_ISR_T, ptr, ptr, ptr, ptr, i8, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%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._EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL = type { i64, i64, i64, i32, [4 x i8], i8, i8, i8, i8, i16 }
%struct.EFI_SIMPLE_NETWORK_DEV_FIFO = type { i32, i32, [64 x ptr] }
%struct.PXENV_UNDI_GET_INFORMATION_T = type { i16, i16, i16, i16, i16, i16, [16 x i8], [16 x i8], i16, i16, i16 }
%struct.PXENV_UNDI_GET_NIC_TYPE_T = type <{ i16, i8, %union.PCI_PNP_INFO_T }>
%union.PCI_PNP_INFO_T = type { %struct.PCI_INFO_T }
%struct.PCI_INFO_T = type { i16, i16, i8, i8, i8, i8, i16, i16, i16 }
%struct.PXENV_UNDI_GET_NDIS_INFO_T = type <{ i16, [16 x i8], i32, i32, [4 x i32] }>
%struct.PXENV_UNDI_ISR_T = type { i16, i16, i16, i16, i16, i16, i16, i8, i8 }

@.str.29 = external hidden unnamed_addr constant [160 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [16 x i8], align 1

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

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

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

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

declare zeroext i8 @DebugPrintEnabled() #1

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) #1

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

declare zeroext i8 @DebugAssertEnabled() #1

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

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

20:                                               ; preds = %6
  store i64 -9223372036854775806, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

21:                                               ; preds = %6
  store i64 0, ptr %14, align 8, !tbaa !9
  %22 = call zeroext i8 @DebugAssertEnabled()
  %23 = zext i8 %22 to i32
  %24 = icmp ne i32 %23, 0
  br i1 %24, label %25, label %35

25:                                               ; preds = %21
  %26 = load ptr, ptr %8, align 8, !tbaa !5
  %27 = ptrtoint ptr %26 to i64
  %28 = sub i64 %27, ptrtoint (ptr getelementptr inbounds (%struct.EFI_SIMPLE_NETWORK_DEV, ptr null, i32 0, i32 2) to i64)
  %29 = inttoptr i64 %28 to ptr
  %30 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %29, i32 0, i32 0
  %31 = load i64, ptr %30, align 8, !tbaa !11
  %32 = icmp ne i64 %31, 909209203
  br i1 %32, label %33, label %35

33:                                               ; preds = %25
  call void @DebugAssert(ptr noundef @.str.29, i64 noundef 1713, ptr noundef @.str.30)
  %34 = load ptr, ptr %8, align 8, !tbaa !5
  br label %40

35:                                               ; preds = %25, %21
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = ptrtoint ptr %36 to i64
  %38 = sub i64 %37, ptrtoint (ptr getelementptr inbounds (%struct.EFI_SIMPLE_NETWORK_DEV, ptr null, i32 0, i32 2) to i64)
  %39 = inttoptr i64 %38 to ptr
  br label %40

40:                                               ; preds = %35, %33
  %41 = phi ptr [ %34, %33 ], [ %39, %35 ]
  store ptr %41, ptr %15, align 8, !tbaa !5
  %42 = load ptr, ptr %15, align 8, !tbaa !5
  %43 = icmp eq ptr %42, null
  br i1 %43, label %44, label %45

44:                                               ; preds = %40
  store i64 -9223372036854775801, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

45:                                               ; preds = %40
  store i8 0, ptr %16, align 1, !tbaa !24
  %46 = load ptr, ptr %15, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %46, i32 0, i32 3
  %48 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_MODE, ptr %47, i32 0, i32 0
  %49 = load i32, ptr %48, align 8, !tbaa !25
  switch i32 %49, label %52 [
    i32 2, label %53
    i32 0, label %50
    i32 1, label %51
  ]

50:                                               ; preds = %45
  store i64 -9223372036854775789, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

51:                                               ; preds = %45
  br label %52

52:                                               ; preds = %51, %45
  store i64 -9223372036854775801, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

53:                                               ; preds = %45
  br label %54

54:                                               ; preds = %53
  %55 = call zeroext i8 @DebugPrintEnabled()
  %56 = icmp ne i8 %55, 0
  br i1 %56, label %57, label %69

57:                                               ; preds = %54
  br label %58

58:                                               ; preds = %57
  %59 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %60 = icmp ne i8 %59, 0
  br i1 %60, label %61, label %66

61:                                               ; preds = %58
  %62 = load ptr, ptr %15, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %62, i32 0, i32 19
  %64 = load i8, ptr %63, align 1, !tbaa !26
  %65 = zext i8 %64 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.51, i32 noundef %65)
  br label %66

66:                                               ; preds = %61, %58
  br label %67

67:                                               ; preds = %66
  br label %68

68:                                               ; preds = %67
  br label %69

69:                                               ; preds = %68, %54
  br label %70

70:                                               ; preds = %69
  br label %71

71:                                               ; preds = %70
  %72 = load ptr, ptr %15, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %72, i32 0, i32 19
  %74 = load i8, ptr %73, align 1, !tbaa !26
  %75 = icmp ne i8 %74, 0
  br i1 %75, label %159, label %76

76:                                               ; preds = %71
  %77 = load ptr, ptr %15, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %77, i32 0, i32 20
  %79 = call ptr @ZeroMem(ptr noundef %78, i64 noundef 16)
  %80 = load ptr, ptr %15, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %80, i32 0, i32 20
  %82 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %81, i32 0, i32 0
  store i16 -21555, ptr %82, align 2, !tbaa !27
  %83 = load ptr, ptr %15, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %83, i32 0, i32 20
  %85 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %84, i32 0, i32 1
  store i16 1, ptr %85, align 2, !tbaa !28
  br label %86

86:                                               ; preds = %76
  %87 = call zeroext i8 @DebugPrintEnabled()
  %88 = icmp ne i8 %87, 0
  br i1 %88, label %89, label %97

89:                                               ; preds = %86
  br label %90

90:                                               ; preds = %89
  %91 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %92 = icmp ne i8 %91, 0
  br i1 %92, label %93, label %94

93:                                               ; preds = %90
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.52)
  br label %94

94:                                               ; preds = %93, %90
  br label %95

95:                                               ; preds = %94
  br label %96

96:                                               ; preds = %95
  br label %97

97:                                               ; preds = %96, %86
  br label %98

98:                                               ; preds = %97
  br label %99

99:                                               ; preds = %98
  %100 = load ptr, ptr %15, align 8, !tbaa !5
  %101 = load ptr, ptr %15, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %101, i32 0, i32 20
  %103 = call i64 @PxeUndiIsr(ptr noundef %100, ptr noundef %102)
  store i64 %103, ptr %14, align 8, !tbaa !9
  %104 = load i64, ptr %14, align 8, !tbaa !9
  %105 = icmp slt i64 %104, 0
  br i1 %105, label %106, label %108

106:                                              ; preds = %99
  %107 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %107, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

108:                                              ; preds = %99
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %109, i32 0, i32 20
  %111 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %110, i32 0, i32 0
  %112 = load i16, ptr %111, align 2, !tbaa !27
  %113 = zext i16 %112 to i32
  %114 = icmp ne i32 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %108
  store i64 -9223372036854775801, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

116:                                              ; preds = %108
  %117 = load ptr, ptr %15, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %117, i32 0, i32 20
  %119 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %118, i32 0, i32 1
  %120 = load i16, ptr %119, align 2, !tbaa !28
  %121 = zext i16 %120 to i32
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %123, label %124

123:                                              ; preds = %116
  store i64 0, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

124:                                              ; preds = %116
  %125 = load ptr, ptr %15, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %125, i32 0, i32 20
  %127 = call ptr @ZeroMem(ptr noundef %126, i64 noundef 16)
  %128 = load ptr, ptr %15, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %128, i32 0, i32 20
  %130 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %129, i32 0, i32 0
  store i16 -21555, ptr %130, align 2, !tbaa !27
  %131 = load ptr, ptr %15, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %131, i32 0, i32 20
  %133 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %132, i32 0, i32 1
  store i16 2, ptr %133, align 2, !tbaa !28
  br label %134

134:                                              ; preds = %124
  %135 = call zeroext i8 @DebugPrintEnabled()
  %136 = icmp ne i8 %135, 0
  br i1 %136, label %137, label %145

137:                                              ; preds = %134
  br label %138

138:                                              ; preds = %137
  %139 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %140 = icmp ne i8 %139, 0
  br i1 %140, label %141, label %142

141:                                              ; preds = %138
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.53)
  br label %142

142:                                              ; preds = %141, %138
  br label %143

143:                                              ; preds = %142
  br label %144

144:                                              ; preds = %143
  br label %145

145:                                              ; preds = %144, %134
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146
  %148 = load ptr, ptr %15, align 8, !tbaa !5
  %149 = load ptr, ptr %15, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %149, i32 0, i32 20
  %151 = call i64 @PxeUndiIsr(ptr noundef %148, ptr noundef %150)
  store i64 %151, ptr %14, align 8, !tbaa !9
  %152 = load i64, ptr %14, align 8, !tbaa !9
  %153 = icmp slt i64 %152, 0
  br i1 %153, label %154, label %156

154:                                              ; preds = %147
  %155 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %155, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

156:                                              ; preds = %147
  %157 = load ptr, ptr %15, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %157, i32 0, i32 19
  store i8 1, ptr %158, align 1, !tbaa !26
  br label %159

159:                                              ; preds = %156, %71
  br label %160

160:                                              ; preds = %554, %159
  %161 = load ptr, ptr %15, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %161, i32 0, i32 20
  %163 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %162, i32 0, i32 1
  %164 = load i16, ptr %163, align 2, !tbaa !28
  %165 = zext i16 %164 to i32
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %555

167:                                              ; preds = %160
  %168 = load ptr, ptr %15, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %168, i32 0, i32 20
  %170 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %169, i32 0, i32 0
  %171 = load i16, ptr %170, align 2, !tbaa !27
  %172 = zext i16 %171 to i32
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %174, label %175

174:                                              ; preds = %167
  store i64 -9223372036854775801, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

175:                                              ; preds = %167
  %176 = load ptr, ptr %15, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %176, i32 0, i32 20
  %178 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %177, i32 0, i32 1
  %179 = load i16, ptr %178, align 2, !tbaa !28
  %180 = zext i16 %179 to i32
  %181 = icmp eq i32 %180, 4
  br i1 %181, label %182, label %197

182:                                              ; preds = %175
  br label %183

183:                                              ; preds = %182
  %184 = call zeroext i8 @DebugPrintEnabled()
  %185 = icmp ne i8 %184, 0
  br i1 %185, label %186, label %194

186:                                              ; preds = %183
  br label %187

187:                                              ; preds = %186
  %188 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %189 = icmp ne i8 %188, 0
  br i1 %189, label %190, label %191

190:                                              ; preds = %187
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.54)
  br label %191

191:                                              ; preds = %190, %187
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193, %183
  br label %195

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195
  store i64 0, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

197:                                              ; preds = %175
  %198 = load ptr, ptr %15, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %198, i32 0, i32 20
  %200 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %199, i32 0, i32 1
  %201 = load i16, ptr %200, align 2, !tbaa !28
  %202 = zext i16 %201 to i32
  %203 = icmp ne i32 %202, 3
  br i1 %203, label %204, label %231

204:                                              ; preds = %197
  %205 = load ptr, ptr %15, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %205, i32 0, i32 20
  %207 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %206, i32 0, i32 1
  %208 = load i16, ptr %207, align 2, !tbaa !28
  %209 = zext i16 %208 to i32
  %210 = icmp ne i32 %209, 2
  br i1 %210, label %211, label %231

211:                                              ; preds = %204
  br label %212

212:                                              ; preds = %211
  %213 = call zeroext i8 @DebugPrintEnabled()
  %214 = icmp ne i8 %213, 0
  br i1 %214, label %215, label %228

215:                                              ; preds = %212
  br label %216

216:                                              ; preds = %215
  %217 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %218 = icmp ne i8 %217, 0
  br i1 %218, label %219, label %225

219:                                              ; preds = %216
  %220 = load ptr, ptr %15, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %220, i32 0, i32 20
  %222 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %221, i32 0, i32 1
  %223 = load i16, ptr %222, align 2, !tbaa !28
  %224 = zext i16 %223 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.55, i32 noundef %224)
  br label %225

225:                                              ; preds = %219, %216
  br label %226

226:                                              ; preds = %225
  br label %227

227:                                              ; preds = %226
  br label %228

228:                                              ; preds = %227, %212
  br label %229

229:                                              ; preds = %228
  br label %230

230:                                              ; preds = %229
  store i64 -9223372036854775801, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

231:                                              ; preds = %204, %197
  %232 = load ptr, ptr %15, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %232, i32 0, i32 20
  %234 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %233, i32 0, i32 1
  %235 = load i16, ptr %234, align 2, !tbaa !28
  %236 = zext i16 %235 to i32
  %237 = icmp eq i32 %236, 2
  br i1 %237, label %238, label %259

238:                                              ; preds = %231
  br label %239

239:                                              ; preds = %238
  %240 = call zeroext i8 @DebugPrintEnabled()
  %241 = icmp ne i8 %240, 0
  br i1 %241, label %242, label %250

242:                                              ; preds = %239
  br label %243

243:                                              ; preds = %242
  %244 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %245 = icmp ne i8 %244, 0
  br i1 %245, label %246, label %247

246:                                              ; preds = %243
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.56)
  br label %247

247:                                              ; preds = %246, %243
  br label %248

248:                                              ; preds = %247
  br label %249

249:                                              ; preds = %248
  br label %250

250:                                              ; preds = %249, %239
  br label %251

251:                                              ; preds = %250
  br label %252

252:                                              ; preds = %251
  %253 = load ptr, ptr %15, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %253, i32 0, i32 25
  %255 = load i8, ptr %254, align 8, !tbaa !29
  %256 = zext i8 %255 to i32
  %257 = or i32 %256, 2
  %258 = trunc i32 %257 to i8
  store i8 %258, ptr %254, align 8, !tbaa !29
  br label %522

259:                                              ; preds = %231
  %260 = load ptr, ptr %15, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %260, i32 0, i32 20
  %262 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %261, i32 0, i32 1
  %263 = load i16, ptr %262, align 2, !tbaa !28
  %264 = zext i16 %263 to i32
  %265 = icmp eq i32 %264, 3
  br i1 %265, label %266, label %521

266:                                              ; preds = %259
  br label %267

267:                                              ; preds = %266
  %268 = call zeroext i8 @DebugPrintEnabled()
  %269 = icmp ne i8 %268, 0
  br i1 %269, label %270, label %278

270:                                              ; preds = %267
  br label %271

271:                                              ; preds = %270
  %272 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %273 = icmp ne i8 %272, 0
  br i1 %273, label %274, label %275

274:                                              ; preds = %271
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.57)
  br label %275

275:                                              ; preds = %274, %271
  br label %276

276:                                              ; preds = %275
  br label %277

277:                                              ; preds = %276
  br label %278

278:                                              ; preds = %277, %267
  br label %279

279:                                              ; preds = %278
  br label %280

280:                                              ; preds = %279
  %281 = load ptr, ptr %15, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %281, i32 0, i32 25
  %283 = load i8, ptr %282, align 8, !tbaa !29
  %284 = zext i8 %283 to i32
  %285 = or i32 %284, 1
  %286 = trunc i32 %285 to i8
  store i8 %286, ptr %282, align 8, !tbaa !29
  br label %287

287:                                              ; preds = %280
  %288 = call zeroext i8 @DebugPrintEnabled()
  %289 = icmp ne i8 %288, 0
  br i1 %289, label %290, label %303

290:                                              ; preds = %287
  br label %291

291:                                              ; preds = %290
  %292 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %293 = icmp ne i8 %292, 0
  br i1 %293, label %294, label %300

294:                                              ; preds = %291
  %295 = load ptr, ptr %15, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %295, i32 0, i32 20
  %297 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %296, i32 0, i32 2
  %298 = load i16, ptr %297, align 2, !tbaa !30
  %299 = zext i16 %298 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.58, i32 noundef %299)
  br label %300

300:                                              ; preds = %294, %291
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301
  br label %303

303:                                              ; preds = %302, %287
  br label %304

304:                                              ; preds = %303
  br label %305

305:                                              ; preds = %304
  br label %306

306:                                              ; preds = %305
  %307 = call zeroext i8 @DebugPrintEnabled()
  %308 = icmp ne i8 %307, 0
  br i1 %308, label %309, label %322

309:                                              ; preds = %306
  br label %310

310:                                              ; preds = %309
  %311 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %312 = icmp ne i8 %311, 0
  br i1 %312, label %313, label %319

313:                                              ; preds = %310
  %314 = load ptr, ptr %15, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %314, i32 0, i32 20
  %316 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %315, i32 0, i32 3
  %317 = load i16, ptr %316, align 2, !tbaa !31
  %318 = zext i16 %317 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.59, i32 noundef %318)
  br label %319

319:                                              ; preds = %313, %310
  br label %320

320:                                              ; preds = %319
  br label %321

321:                                              ; preds = %320
  br label %322

322:                                              ; preds = %321, %306
  br label %323

323:                                              ; preds = %322
  br label %324

324:                                              ; preds = %323
  br label %325

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

328:                                              ; preds = %325
  br label %329

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

332:                                              ; preds = %329
  %333 = load ptr, ptr %15, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %333, i32 0, i32 20
  %335 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %334, i32 0, i32 4
  %336 = load i16, ptr %335, align 2, !tbaa !32
  %337 = zext i16 %336 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.60, i32 noundef %337)
  br label %338

338:                                              ; preds = %332, %329
  br label %339

339:                                              ; preds = %338
  br label %340

340:                                              ; preds = %339
  br label %341

341:                                              ; preds = %340, %325
  br label %342

342:                                              ; preds = %341
  br label %343

343:                                              ; preds = %342
  br label %344

344:                                              ; preds = %343
  %345 = call zeroext i8 @DebugPrintEnabled()
  %346 = icmp ne i8 %345, 0
  br i1 %346, label %347, label %365

347:                                              ; preds = %344
  br label %348

348:                                              ; preds = %347
  %349 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %350 = icmp ne i8 %349, 0
  br i1 %350, label %351, label %362

351:                                              ; preds = %348
  %352 = load ptr, ptr %15, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %352, i32 0, i32 20
  %354 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %353, i32 0, i32 6
  %355 = load i16, ptr %354, align 2, !tbaa !33
  %356 = zext i16 %355 to i32
  %357 = load ptr, ptr %15, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %357, i32 0, i32 20
  %359 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %358, i32 0, i32 5
  %360 = load i16, ptr %359, align 2, !tbaa !34
  %361 = zext i16 %360 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.61, i32 noundef %356, i32 noundef %361)
  br label %362

362:                                              ; preds = %351, %348
  br label %363

363:                                              ; preds = %362
  br label %364

364:                                              ; preds = %363
  br label %365

365:                                              ; preds = %364, %344
  br label %366

366:                                              ; preds = %365
  br label %367

367:                                              ; preds = %366
  br label %368

368:                                              ; preds = %367
  %369 = call zeroext i8 @DebugPrintEnabled()
  %370 = icmp ne i8 %369, 0
  br i1 %370, label %371, label %384

371:                                              ; preds = %368
  br label %372

372:                                              ; preds = %371
  %373 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %374 = icmp ne i8 %373, 0
  br i1 %374, label %375, label %381

375:                                              ; preds = %372
  %376 = load ptr, ptr %15, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %376, i32 0, i32 20
  %378 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %377, i32 0, i32 2
  %379 = load i16, ptr %378, align 2, !tbaa !30
  %380 = zext i16 %379 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.62, i32 noundef %380)
  br label %381

381:                                              ; preds = %375, %372
  br label %382

382:                                              ; preds = %381
  br label %383

383:                                              ; preds = %382
  br label %384

384:                                              ; preds = %383, %368
  br label %385

385:                                              ; preds = %384
  br label %386

386:                                              ; preds = %385
  br label %387

387:                                              ; preds = %386
  %388 = call zeroext i8 @DebugPrintEnabled()
  %389 = icmp ne i8 %388, 0
  br i1 %389, label %390, label %403

390:                                              ; preds = %387
  br label %391

391:                                              ; preds = %390
  %392 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %393 = icmp ne i8 %392, 0
  br i1 %393, label %394, label %400

394:                                              ; preds = %391
  %395 = load ptr, ptr %15, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %395, i32 0, i32 20
  %397 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %396, i32 0, i32 2
  %398 = load i16, ptr %397, align 2, !tbaa !30
  %399 = zext i16 %398 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.63, i32 noundef %399)
  br label %400

400:                                              ; preds = %394, %391
  br label %401

401:                                              ; preds = %400
  br label %402

402:                                              ; preds = %401
  br label %403

403:                                              ; preds = %402, %387
  br label %404

404:                                              ; preds = %403
  br label %405

405:                                              ; preds = %404
  %406 = load i8, ptr %16, align 1, !tbaa !24
  %407 = icmp ne i8 %406, 0
  br i1 %407, label %408, label %409

408:                                              ; preds = %405
  store i64 0, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

409:                                              ; preds = %405
  %410 = load ptr, ptr %11, align 8, !tbaa !5
  %411 = icmp eq ptr %410, null
  br i1 %411, label %421, label %412

412:                                              ; preds = %409
  %413 = load ptr, ptr %15, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %413, i32 0, i32 20
  %415 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %414, i32 0, i32 3
  %416 = load i16, ptr %415, align 2, !tbaa !31
  %417 = zext i16 %416 to i64
  %418 = load ptr, ptr %9, align 8, !tbaa !5
  %419 = load i64, ptr %418, align 8, !tbaa !9
  %420 = icmp ugt i64 %417, %419
  br i1 %420, label %421, label %444

421:                                              ; preds = %412, %409
  br label %422

422:                                              ; preds = %421
  %423 = call zeroext i8 @DebugPrintEnabled()
  %424 = icmp ne i8 %423, 0
  br i1 %424, label %425, label %435

425:                                              ; preds = %422
  br label %426

426:                                              ; preds = %425
  %427 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %428 = icmp ne i8 %427, 0
  br i1 %428, label %429, label %432

429:                                              ; preds = %426
  %430 = load ptr, ptr %9, align 8, !tbaa !5
  %431 = load i64, ptr %430, align 8, !tbaa !9
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.64, i64 noundef %431)
  br label %432

432:                                              ; preds = %429, %426
  br label %433

433:                                              ; preds = %432
  br label %434

434:                                              ; preds = %433
  br label %435

435:                                              ; preds = %434, %422
  br label %436

436:                                              ; preds = %435
  br label %437

437:                                              ; preds = %436
  %438 = load ptr, ptr %15, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %438, i32 0, i32 20
  %440 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %439, i32 0, i32 3
  %441 = load i16, ptr %440, align 2, !tbaa !31
  %442 = zext i16 %441 to i64
  %443 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %442, ptr %443, align 8, !tbaa !9
  store i64 -9223372036854775803, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

444:                                              ; preds = %412
  %445 = load ptr, ptr %15, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %445, i32 0, i32 20
  %447 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %446, i32 0, i32 3
  %448 = load i16, ptr %447, align 2, !tbaa !31
  %449 = zext i16 %448 to i64
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %449, ptr %450, align 8, !tbaa !9
  %451 = load ptr, ptr %10, align 8, !tbaa !5
  %452 = icmp ne ptr %451, null
  br i1 %452, label %453, label %460

453:                                              ; preds = %444
  %454 = load ptr, ptr %15, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %454, i32 0, i32 20
  %456 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %455, i32 0, i32 4
  %457 = load i16, ptr %456, align 2, !tbaa !32
  %458 = zext i16 %457 to i64
  %459 = load ptr, ptr %10, align 8, !tbaa !5
  store i64 %458, ptr %459, align 8, !tbaa !9
  br label %460

460:                                              ; preds = %453, %444
  %461 = load ptr, ptr %12, align 8, !tbaa !5
  %462 = icmp ne ptr %461, null
  br i1 %462, label %463, label %469

463:                                              ; preds = %460
  %464 = load ptr, ptr %15, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %464, i32 0, i32 20
  %466 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %465, i32 0, i32 7
  %467 = load i8, ptr %466, align 2, !tbaa !35
  %468 = load ptr, ptr %12, align 8, !tbaa !5
  store i8 %467, ptr %468, align 1, !tbaa !24
  br label %469

469:                                              ; preds = %463, %460
  %470 = load ptr, ptr %13, align 8, !tbaa !5
  %471 = icmp ne ptr %470, null
  br i1 %471, label %472, label %478

472:                                              ; preds = %469
  %473 = load ptr, ptr %15, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %473, i32 0, i32 20
  %475 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %474, i32 0, i32 8
  %476 = load i8, ptr %475, align 1, !tbaa !36
  %477 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 %476, ptr %477, align 1, !tbaa !24
  br label %478

478:                                              ; preds = %472, %469
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = load ptr, ptr %15, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %480, i32 0, i32 20
  %482 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %481, i32 0, i32 6
  %483 = load i16, ptr %482, align 2, !tbaa !33
  %484 = zext i16 %483 to i32
  %485 = shl i32 %484, 4
  %486 = load ptr, ptr %15, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %486, i32 0, i32 20
  %488 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %487, i32 0, i32 5
  %489 = load i16, ptr %488, align 2, !tbaa !34
  %490 = zext i16 %489 to i32
  %491 = add nsw i32 %485, %490
  %492 = sext i32 %491 to i64
  %493 = inttoptr i64 %492 to ptr
  %494 = load ptr, ptr %15, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %494, i32 0, i32 20
  %496 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %495, i32 0, i32 2
  %497 = load i16, ptr %496, align 2, !tbaa !30
  %498 = zext i16 %497 to i64
  %499 = call ptr @CopyMem(ptr noundef %479, ptr noundef %493, i64 noundef %498)
  %500 = load ptr, ptr %11, align 8, !tbaa !5
  %501 = load ptr, ptr %15, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %501, i32 0, i32 20
  %503 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %502, i32 0, i32 2
  %504 = load i16, ptr %503, align 2, !tbaa !30
  %505 = zext i16 %504 to i32
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds i8, ptr %500, i64 %506
  store ptr %507, ptr %11, align 8, !tbaa !5
  %508 = load ptr, ptr %15, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %508, i32 0, i32 20
  %510 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %509, i32 0, i32 2
  %511 = load i16, ptr %510, align 2, !tbaa !30
  %512 = zext i16 %511 to i32
  %513 = load ptr, ptr %15, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %513, i32 0, i32 20
  %515 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %514, i32 0, i32 3
  %516 = load i16, ptr %515, align 2, !tbaa !31
  %517 = zext i16 %516 to i32
  %518 = icmp eq i32 %512, %517
  br i1 %518, label %519, label %520

519:                                              ; preds = %478
  store i8 1, ptr %16, align 1, !tbaa !24
  br label %520

520:                                              ; preds = %519, %478
  br label %521

521:                                              ; preds = %520, %259
  br label %522

522:                                              ; preds = %521, %252
  %523 = load ptr, ptr %15, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %523, i32 0, i32 20
  %525 = call ptr @ZeroMem(ptr noundef %524, i64 noundef 16)
  %526 = load ptr, ptr %15, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %526, i32 0, i32 20
  %528 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %527, i32 0, i32 0
  store i16 -21555, ptr %528, align 2, !tbaa !27
  %529 = load ptr, ptr %15, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %529, i32 0, i32 20
  %531 = getelementptr inbounds %struct.PXENV_UNDI_ISR_T, ptr %530, i32 0, i32 1
  store i16 3, ptr %531, align 2, !tbaa !28
  br label %532

532:                                              ; preds = %522
  %533 = call zeroext i8 @DebugPrintEnabled()
  %534 = icmp ne i8 %533, 0
  br i1 %534, label %535, label %543

535:                                              ; preds = %532
  br label %536

536:                                              ; preds = %535
  %537 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384)
  %538 = icmp ne i8 %537, 0
  br i1 %538, label %539, label %540

539:                                              ; preds = %536
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef @.str.65)
  br label %540

540:                                              ; preds = %539, %536
  br label %541

541:                                              ; preds = %540
  br label %542

542:                                              ; preds = %541
  br label %543

543:                                              ; preds = %542, %532
  br label %544

544:                                              ; preds = %543
  br label %545

545:                                              ; preds = %544
  %546 = load ptr, ptr %15, align 8, !tbaa !5
  %547 = load ptr, ptr %15, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %547, i32 0, i32 20
  %549 = call i64 @PxeUndiIsr(ptr noundef %546, ptr noundef %548)
  store i64 %549, ptr %14, align 8, !tbaa !9
  %550 = load i64, ptr %14, align 8, !tbaa !9
  %551 = icmp slt i64 %550, 0
  br i1 %551, label %552, label %554

552:                                              ; preds = %545
  %553 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %553, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

554:                                              ; preds = %545
  br label %160, !llvm.loop !37

555:                                              ; preds = %160
  %556 = load ptr, ptr %15, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.EFI_SIMPLE_NETWORK_DEV, ptr %556, i32 0, i32 19
  store i8 0, ptr %557, align 1, !tbaa !26
  store i64 0, ptr %7, align 8
  store i32 1, ptr %17, align 4
  br label %558

558:                                              ; preds = %555, %552, %437, %408, %230, %196, %174, %154, %123, %115, %106, %52, %50, %44, %20
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  %559 = load i64, ptr %7, align 8
  ret i64 %559
}

declare i64 @PxeUndiIsr(ptr noundef, ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !6, i64 8, !13, i64 16, !14, i64 144, !17, i64 800, !6, i64 840, !6, i64 848, !6, i64 856, !7, i64 864, !6, i64 872, !6, i64 880, !18, i64 888, !18, i64 890, !19, i64 896, !6, i64 1416, !6, i64 1424, !20, i64 1432, !21, i64 1482, !22, i64 1499, !7, i64 1541, !23, i64 1542, !6, i64 1560, !6, i64 1568, !6, i64 1576, !6, i64 1584, !7, i64 1592, !10, i64 1600, !10, i64 1608, !10, i64 1616, !10, i64 1624, !6, i64 1632, !6, i64 1640, !6, i64 1648, !6, i64 1656}
!13 = !{!"_EFI_SIMPLE_NETWORK_PROTOCOL", !10, 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}
!14 = !{!"", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !7, i64 40, !16, i64 552, !16, i64 584, !16, i64 616, !7, i64 648, !7, i64 649, !7, i64 650, !7, i64 651, !7, i64 652}
!15 = !{!"int", !7, i64 0}
!16 = !{!"", !7, i64 0}
!17 = !{!"_EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL", !10, i64 0, !10, i64 8, !10, i64 16, !15, i64 24, !7, i64 28, !7, i64 32, !7, i64 33, !7, i64 34, !7, i64 35, !18, i64 36}
!18 = !{!"short", !7, i64 0}
!19 = !{!"", !15, i64 0, !15, i64 4, !7, i64 8}
!20 = !{!"", !18, i64 0, !18, i64 2, !18, i64 4, !18, i64 6, !18, i64 8, !18, i64 10, !7, i64 12, !7, i64 28, !18, i64 44, !18, i64 46, !18, i64 48}
!21 = !{!"", !18, i64 0, !7, i64 2, !7, i64 3}
!22 = !{!"", !18, i64 0, !7, i64 2, !15, i64 18, !15, i64 22, !7, i64 26}
!23 = !{!"", !18, i64 0, !18, i64 2, !18, i64 4, !18, i64 6, !18, i64 8, !18, i64 10, !18, i64 12, !7, i64 14, !7, i64 15}
!24 = !{!7, !7, i64 0}
!25 = !{!12, !15, i64 144}
!26 = !{!12, !7, i64 1541}
!27 = !{!12, !18, i64 1542}
!28 = !{!12, !18, i64 1544}
!29 = !{!12, !7, i64 1592}
!30 = !{!12, !18, i64 1546}
!31 = !{!12, !18, i64 1548}
!32 = !{!12, !18, i64 1550}
!33 = !{!12, !18, i64 1554}
!34 = !{!12, !18, i64 1552}
!35 = !{!12, !7, i64 1556}
!36 = !{!12, !7, i64 1557}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str.29 = external hidden unnamed_addr constant [160 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [16 x i8], align 1

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

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

declare zeroext i8 @DebugPrintEnabled() local_unnamed_addr #0

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

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

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local range(i64 -9223372036854775808, 1) i64 @Undi16SimpleNetworkIsr(ptr noundef %0, ptr nocapture noundef %1, ptr noundef writeonly %2, ptr noundef %3, ptr noundef writeonly %4, ptr noundef writeonly %5) local_unnamed_addr #1 {
  %7 = icmp eq ptr %0, null
  br i1 %7, label %.loopexit, label %8

8:                                                ; preds = %6
  %9 = tail call zeroext i8 @DebugAssertEnabled() #2
  %.not = icmp eq i8 %9, 0
  %.pre = ptrtoint ptr %0 to i64
  %.pre135 = add i64 %.pre, -16
  %.pre137 = inttoptr i64 %.pre135 to ptr
  br i1 %.not, label %._crit_edge, label %10

10:                                               ; preds = %8
  %11 = load i64, ptr %.pre137, align 8, !tbaa !5
  %.not90 = icmp eq i64 %11, 909209203
  br i1 %.not90, label %._crit_edge, label %.thread

.thread:                                          ; preds = %10
  tail call void @DebugAssert(ptr noundef nonnull @.str.29, i64 noundef 1713, ptr noundef nonnull @.str.30) #2
  br label %13

._crit_edge:                                      ; preds = %8, %10
  %12 = icmp eq i64 %.pre135, 0
  br i1 %12, label %.loopexit, label %13

13:                                               ; preds = %.thread, %._crit_edge
  %14 = phi ptr [ %0, %.thread ], [ %.pre137, %._crit_edge ]
  %15 = getelementptr inbounds i8, ptr %14, i64 144
  %16 = load i32, ptr %15, align 8, !tbaa !22
  switch i32 %16, label %17 [
    i32 2, label %18
    i32 0, label %.loopexit
  ]

17:                                               ; preds = %13
  br label %.loopexit

18:                                               ; preds = %13
  %19 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not91 = icmp eq i8 %19, 0
  br i1 %.not91, label %26, label %20

20:                                               ; preds = %18
  %21 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not92 = icmp eq i8 %21, 0
  br i1 %.not92, label %26, label %22

22:                                               ; preds = %20
  %23 = getelementptr inbounds i8, ptr %14, i64 1541
  %24 = load i8, ptr %23, align 1, !tbaa !23
  %25 = zext i8 %24 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.51, i32 noundef %25) #2
  br label %26

26:                                               ; preds = %20, %22, %18
  %27 = getelementptr inbounds i8, ptr %14, i64 1541
  %28 = load i8, ptr %27, align 1, !tbaa !23
  %.not93 = icmp eq i8 %28, 0
  br i1 %.not93, label %29, label %55

29:                                               ; preds = %26
  %30 = getelementptr inbounds i8, ptr %14, i64 1542
  %31 = tail call ptr @ZeroMem(ptr noundef nonnull %30, i64 noundef 16) #2
  store i16 -21555, ptr %30, align 2, !tbaa !24
  %32 = getelementptr inbounds i8, ptr %14, i64 1544
  store i16 1, ptr %32, align 2, !tbaa !25
  %33 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not94 = icmp eq i8 %33, 0
  br i1 %.not94, label %37, label %34

34:                                               ; preds = %29
  %35 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not95 = icmp eq i8 %35, 0
  br i1 %.not95, label %37, label %36

36:                                               ; preds = %34
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.52) #2
  br label %37

37:                                               ; preds = %34, %36, %29
  %38 = tail call i64 @PxeUndiIsr(ptr noundef nonnull %14, ptr noundef nonnull %30) #2
  %39 = icmp slt i64 %38, 0
  br i1 %39, label %.loopexit, label %40

40:                                               ; preds = %37
  %41 = load i16, ptr %30, align 2, !tbaa !24
  %.not96 = icmp eq i16 %41, 0
  br i1 %.not96, label %42, label %.loopexit

42:                                               ; preds = %40
  %43 = load i16, ptr %32, align 2, !tbaa !25
  %44 = icmp eq i16 %43, 1
  br i1 %44, label %.loopexit, label %45

45:                                               ; preds = %42
  %46 = tail call ptr @ZeroMem(ptr noundef nonnull %30, i64 noundef 16) #2
  store i16 -21555, ptr %30, align 2, !tbaa !24
  store i16 2, ptr %32, align 2, !tbaa !25
  %47 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not97 = icmp eq i8 %47, 0
  br i1 %.not97, label %51, label %48

48:                                               ; preds = %45
  %49 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not98 = icmp eq i8 %49, 0
  br i1 %.not98, label %51, label %50

50:                                               ; preds = %48
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.53) #2
  br label %51

51:                                               ; preds = %48, %50, %45
  %52 = tail call i64 @PxeUndiIsr(ptr noundef nonnull %14, ptr noundef nonnull %30) #2
  %53 = icmp slt i64 %52, 0
  br i1 %53, label %.loopexit, label %54

54:                                               ; preds = %51
  store i8 1, ptr %27, align 1, !tbaa !23
  br label %55

55:                                               ; preds = %54, %26
  %56 = getelementptr inbounds i8, ptr %14, i64 1542
  %57 = getelementptr inbounds i8, ptr %14, i64 1544
  %58 = getelementptr inbounds i8, ptr %14, i64 1592
  %59 = getelementptr inbounds i8, ptr %14, i64 1546
  %60 = getelementptr inbounds i8, ptr %14, i64 1548
  %61 = getelementptr inbounds i8, ptr %14, i64 1550
  %62 = getelementptr inbounds i8, ptr %14, i64 1554
  %63 = getelementptr inbounds i8, ptr %14, i64 1552
  %.not118 = icmp eq ptr %2, null
  %.not119 = icmp eq ptr %4, null
  %64 = getelementptr inbounds i8, ptr %14, i64 1556
  %.not120 = icmp eq ptr %5, null
  %65 = getelementptr inbounds i8, ptr %14, i64 1557
  br label %66

66:                                               ; preds = %188, %55
  %.077 = phi ptr [ %3, %55 ], [ %.178, %188 ]
  %.0 = phi i8 [ 0, %55 ], [ %.1, %188 ]
  %67 = load i16, ptr %57, align 2, !tbaa !25
  %.not99 = icmp eq i16 %67, 0
  br i1 %.not99, label %191, label %68

68:                                               ; preds = %66
  %69 = load i16, ptr %56, align 2, !tbaa !24
  %.not100 = icmp eq i16 %69, 0
  br i1 %.not100, label %70, label %.loopexit

70:                                               ; preds = %68
  %71 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not127 = icmp eq i8 %71, 0
  switch i16 %67, label %76 [
    i16 4, label %72
    i16 2, label %82
    i16 3, label %89
  ]

72:                                               ; preds = %70
  br i1 %.not127, label %.loopexit, label %73

73:                                               ; preds = %72
  %74 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not130 = icmp eq i8 %74, 0
  br i1 %.not130, label %.loopexit, label %75

75:                                               ; preds = %73
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.54) #2
  br label %.loopexit

76:                                               ; preds = %70
  br i1 %.not127, label %.loopexit, label %77

77:                                               ; preds = %76
  %78 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not128 = icmp eq i8 %78, 0
  br i1 %.not128, label %.loopexit, label %79

79:                                               ; preds = %77
  %80 = load i16, ptr %57, align 2, !tbaa !25
  %81 = zext i16 %80 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.55, i32 noundef %81) #2
  br label %.loopexit

82:                                               ; preds = %70
  br i1 %.not127, label %86, label %83

83:                                               ; preds = %82
  %84 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not124 = icmp eq i8 %84, 0
  br i1 %.not124, label %86, label %85

85:                                               ; preds = %83
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.56) #2
  br label %86

86:                                               ; preds = %83, %85, %82
  %87 = load i8, ptr %58, align 8, !tbaa !26
  %88 = or i8 %87, 2
  store i8 %88, ptr %58, align 8, !tbaa !26
  br label %182

89:                                               ; preds = %70
  br i1 %.not127, label %93, label %90

90:                                               ; preds = %89
  %91 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not104 = icmp eq i8 %91, 0
  br i1 %.not104, label %93, label %92

92:                                               ; preds = %90
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.57) #2
  br label %93

93:                                               ; preds = %90, %92, %89
  %94 = load i8, ptr %58, align 8, !tbaa !26
  %95 = or i8 %94, 1
  store i8 %95, ptr %58, align 8, !tbaa !26
  %96 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not105 = icmp eq i8 %96, 0
  br i1 %.not105, label %102, label %97

97:                                               ; preds = %93
  %98 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not106 = icmp eq i8 %98, 0
  br i1 %.not106, label %102, label %99

99:                                               ; preds = %97
  %100 = load i16, ptr %59, align 2, !tbaa !27
  %101 = zext i16 %100 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.58, i32 noundef %101) #2
  br label %102

102:                                              ; preds = %93, %99, %97
  %103 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not107 = icmp eq i8 %103, 0
  br i1 %.not107, label %109, label %104

104:                                              ; preds = %102
  %105 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not108 = icmp eq i8 %105, 0
  br i1 %.not108, label %109, label %106

106:                                              ; preds = %104
  %107 = load i16, ptr %60, align 2, !tbaa !28
  %108 = zext i16 %107 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.59, i32 noundef %108) #2
  br label %109

109:                                              ; preds = %102, %106, %104
  %110 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not109 = icmp eq i8 %110, 0
  br i1 %.not109, label %116, label %111

111:                                              ; preds = %109
  %112 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not110 = icmp eq i8 %112, 0
  br i1 %.not110, label %116, label %113

113:                                              ; preds = %111
  %114 = load i16, ptr %61, align 2, !tbaa !29
  %115 = zext i16 %114 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.60, i32 noundef %115) #2
  br label %116

116:                                              ; preds = %109, %113, %111
  %117 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not111 = icmp eq i8 %117, 0
  br i1 %.not111, label %125, label %118

118:                                              ; preds = %116
  %119 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not112 = icmp eq i8 %119, 0
  br i1 %.not112, label %125, label %120

120:                                              ; preds = %118
  %121 = load i16, ptr %62, align 2, !tbaa !30
  %122 = zext i16 %121 to i32
  %123 = load i16, ptr %63, align 2, !tbaa !31
  %124 = zext i16 %123 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.61, i32 noundef %122, i32 noundef %124) #2
  br label %125

125:                                              ; preds = %116, %120, %118
  %126 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not113 = icmp eq i8 %126, 0
  br i1 %.not113, label %132, label %127

127:                                              ; preds = %125
  %128 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not114 = icmp eq i8 %128, 0
  br i1 %.not114, label %132, label %129

129:                                              ; preds = %127
  %130 = load i16, ptr %59, align 2, !tbaa !27
  %131 = zext i16 %130 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.62, i32 noundef %131) #2
  br label %132

132:                                              ; preds = %125, %129, %127
  %133 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not115 = icmp eq i8 %133, 0
  br i1 %.not115, label %139, label %134

134:                                              ; preds = %132
  %135 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not116 = icmp eq i8 %135, 0
  br i1 %.not116, label %139, label %136

136:                                              ; preds = %134
  %137 = load i16, ptr %59, align 2, !tbaa !27
  %138 = zext i16 %137 to i32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.63, i32 noundef %138) #2
  br label %139

139:                                              ; preds = %134, %136, %132
  %.not117 = icmp eq i8 %.0, 0
  br i1 %.not117, label %140, label %.loopexit

140:                                              ; preds = %139
  %141 = icmp eq ptr %.077, null
  br i1 %141, label %147, label %142

142:                                              ; preds = %140
  %143 = load i16, ptr %60, align 2, !tbaa !28
  %144 = zext i16 %143 to i64
  %145 = load i64, ptr %1, align 8, !tbaa !32
  %146 = icmp ult i64 %145, %144
  br i1 %146, label %147, label %156

147:                                              ; preds = %140, %142
  %148 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not121 = icmp eq i8 %148, 0
  br i1 %.not121, label %153, label %149

149:                                              ; preds = %147
  %150 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not122 = icmp eq i8 %150, 0
  br i1 %.not122, label %153, label %151

151:                                              ; preds = %149
  %152 = load i64, ptr %1, align 8, !tbaa !32
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.64, i64 noundef %152) #2
  br label %153

153:                                              ; preds = %149, %151, %147
  %154 = load i16, ptr %60, align 2, !tbaa !28
  %155 = zext i16 %154 to i64
  store i64 %155, ptr %1, align 8, !tbaa !32
  br label %.loopexit

156:                                              ; preds = %142
  store i64 %144, ptr %1, align 8, !tbaa !32
  br i1 %.not118, label %160, label %157

157:                                              ; preds = %156
  %158 = load i16, ptr %61, align 2, !tbaa !29
  %159 = zext i16 %158 to i64
  store i64 %159, ptr %2, align 8, !tbaa !32
  br label %160

160:                                              ; preds = %157, %156
  br i1 %.not119, label %163, label %161

161:                                              ; preds = %160
  %162 = load i8, ptr %64, align 2, !tbaa !33
  store i8 %162, ptr %4, align 1, !tbaa !34
  br label %163

163:                                              ; preds = %161, %160
  br i1 %.not120, label %166, label %164

164:                                              ; preds = %163
  %165 = load i8, ptr %65, align 1, !tbaa !35
  store i8 %165, ptr %5, align 1, !tbaa !34
  br label %166

166:                                              ; preds = %164, %163
  %167 = load i16, ptr %62, align 2, !tbaa !30
  %168 = zext i16 %167 to i64
  %169 = shl nuw nsw i64 %168, 4
  %170 = load i16, ptr %63, align 2, !tbaa !31
  %171 = zext i16 %170 to i64
  %172 = add nuw nsw i64 %169, %171
  %173 = inttoptr i64 %172 to ptr
  %174 = load i16, ptr %59, align 2, !tbaa !27
  %175 = zext i16 %174 to i64
  %176 = tail call ptr @CopyMem(ptr noundef nonnull %.077, ptr noundef %173, i64 noundef %175) #2
  %177 = load i16, ptr %59, align 2, !tbaa !27
  %178 = zext i16 %177 to i64
  %179 = getelementptr inbounds i8, ptr %.077, i64 %178
  %180 = load i16, ptr %60, align 2, !tbaa !28
  %181 = icmp eq i16 %177, %180
  %spec.select = zext i1 %181 to i8
  br label %182

182:                                              ; preds = %166, %86
  %.178 = phi ptr [ %.077, %86 ], [ %179, %166 ]
  %.1 = phi i8 [ %.0, %86 ], [ %spec.select, %166 ]
  %183 = tail call ptr @ZeroMem(ptr noundef nonnull %56, i64 noundef 16) #2
  store i16 -21555, ptr %56, align 2, !tbaa !24
  store i16 3, ptr %57, align 2, !tbaa !25
  %184 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not125 = icmp eq i8 %184, 0
  br i1 %.not125, label %188, label %185

185:                                              ; preds = %182
  %186 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 16384) #2
  %.not126 = icmp eq i8 %186, 0
  br i1 %.not126, label %188, label %187

187:                                              ; preds = %185
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 16384, ptr noundef nonnull @.str.65) #2
  br label %188

188:                                              ; preds = %185, %187, %182
  %189 = tail call i64 @PxeUndiIsr(ptr noundef nonnull %14, ptr noundef nonnull %56) #2
  %190 = icmp slt i64 %189, 0
  br i1 %190, label %.loopexit, label %66, !llvm.loop !36

191:                                              ; preds = %66
  store i8 0, ptr %27, align 1, !tbaa !23
  br label %.loopexit

.loopexit:                                        ; preds = %188, %139, %68, %76, %79, %77, %72, %75, %73, %51, %42, %40, %37, %13, %._crit_edge, %6, %191, %153, %17
  %.076 = phi i64 [ -9223372036854775801, %17 ], [ -9223372036854775803, %153 ], [ 0, %191 ], [ -9223372036854775806, %6 ], [ -9223372036854775801, %._crit_edge ], [ -9223372036854775789, %13 ], [ %38, %37 ], [ -9223372036854775801, %40 ], [ 0, %42 ], [ %52, %51 ], [ 0, %73 ], [ 0, %75 ], [ 0, %72 ], [ -9223372036854775801, %77 ], [ -9223372036854775801, %79 ], [ -9223372036854775801, %76 ], [ %189, %188 ], [ 0, %139 ], [ -9223372036854775801, %68 ]
  ret i64 %.076
}

declare i64 @PxeUndiIsr(ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"", !7, i64 0, !10, i64 8, !11, i64 16, !12, i64 144, !15, i64 800, !10, i64 840, !10, i64 848, !10, i64 856, !8, i64 864, !10, i64 872, !10, i64 880, !16, i64 888, !16, i64 890, !17, i64 896, !10, i64 1416, !10, i64 1424, !18, i64 1432, !19, i64 1482, !20, i64 1499, !8, i64 1541, !21, i64 1542, !10, i64 1560, !10, i64 1568, !10, i64 1576, !10, i64 1584, !8, i64 1592, !7, i64 1600, !7, i64 1608, !7, i64 1616, !7, i64 1624, !10, i64 1632, !10, i64 1640, !10, i64 1648, !10, i64 1656}
!7 = !{!"long long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_EFI_SIMPLE_NETWORK_PROTOCOL", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120}
!12 = !{!"", !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, !8, i64 40, !14, i64 552, !14, i64 584, !14, i64 616, !8, i64 648, !8, i64 649, !8, i64 650, !8, i64 651, !8, i64 652}
!13 = !{!"int", !8, i64 0}
!14 = !{!"", !8, i64 0}
!15 = !{!"_EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL", !7, i64 0, !7, i64 8, !7, i64 16, !13, i64 24, !8, i64 28, !8, i64 32, !8, i64 33, !8, i64 34, !8, i64 35, !16, i64 36}
!16 = !{!"short", !8, i64 0}
!17 = !{!"", !13, i64 0, !13, i64 4, !8, i64 8}
!18 = !{!"", !16, i64 0, !16, i64 2, !16, i64 4, !16, i64 6, !16, i64 8, !16, i64 10, !8, i64 12, !8, i64 28, !16, i64 44, !16, i64 46, !16, i64 48}
!19 = !{!"", !16, i64 0, !8, i64 2, !8, i64 3}
!20 = !{!"", !16, i64 0, !8, i64 2, !13, i64 18, !13, i64 22, !8, i64 26}
!21 = !{!"", !16, i64 0, !16, i64 2, !16, i64 4, !16, i64 6, !16, i64 8, !16, i64 10, !16, i64 12, !8, i64 14, !8, i64 15}
!22 = !{!6, !13, i64 144}
!23 = !{!6, !8, i64 1541}
!24 = !{!6, !16, i64 1542}
!25 = !{!6, !16, i64 1544}
!26 = !{!6, !8, i64 1592}
!27 = !{!6, !16, i64 1546}
!28 = !{!6, !16, i64 1548}
!29 = !{!6, !16, i64 1550}
!30 = !{!6, !16, i64 1554}
!31 = !{!6, !16, i64 1552}
!32 = !{!7, !7, i64 0}
!33 = !{!6, !8, i64 1556}
!34 = !{!8, !8, i64 0}
!35 = !{!6, !8, i64 1557}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}


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