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

; 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._ISCSI_DRIVER_DATA = type { i32, ptr, ptr, %struct._ISCSI_PRIVATE_PROTOCOL, ptr, %struct._EFI_EXT_SCSI_PASS_THRU_PROTOCOL, %struct.EFI_EXT_SCSI_PASS_THRU_MODE, ptr, ptr, ptr, ptr }
%struct._ISCSI_PRIVATE_PROTOCOL = type { i32 }
%struct._EFI_EXT_SCSI_PASS_THRU_PROTOCOL = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.EFI_EXT_SCSI_PASS_THRU_MODE = type { i32, i32, i32 }
%struct.ISCSI_PRIVATE_DATA = type { [223 x i16], %struct._LIST_ENTRY, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, %struct._LIST_ENTRY, [224 x i8], i64, ptr }
%struct._LIST_ENTRY = type { ptr, ptr }
%struct._ISCSI_ATTEMPT_CONFIG_NVDATA = type <{ %struct._LIST_ENTRY, i8, i8, i8, i8, i8, i8, i16, i16, [96 x i8], [96 x i8], %union.EFI_IP_ADDRESS, %union.EFI_IP_ADDRESS, %union.EFI_IP_ADDRESS, %struct._ISCSI_SESSION_CONFIG_NVDATA, i8, %union.anon }>
%union.EFI_IP_ADDRESS = type { [4 x i32] }
%struct._ISCSI_SESSION_CONFIG_NVDATA = type <{ i16, i8, i8, %union.EFI_IP_ADDRESS, %struct.EFI_IPv4_ADDRESS, %union.EFI_IP_ADDRESS, i8, i8, [224 x i8], %union.EFI_IP_ADDRESS, i8, [8 x i8], i16, i8, [6 x i8] }>
%struct.EFI_IPv4_ADDRESS = type { [4 x i8] }
%union.anon = type { %struct._ISCSI_CHAP_AUTH_CONFIG_NVDATA }
%struct._ISCSI_CHAP_AUTH_CONFIG_NVDATA = type { i8, [127 x i8], [17 x i8], [127 x i8], [17 x i8] }
%struct.EFI_DEVICE_PATH_PROTOCOL = type { i8, i8, [2 x i8] }
%struct._ISCSI_SESSION = type { i32, ptr, ptr, i8, %union.anon.0, i8, [6 x i8], i16, i32, i32, i32, i32, i16, %struct._LIST_ENTRY, i32, %struct._LIST_ENTRY, i16, i32, i8, i8, i32, i32, i32, i32, i16, i8, i8, i8 }
%union.anon.0 = type { %struct._ISCSI_CHAP_AUTH_DATA }
%struct._ISCSI_CHAP_AUTH_DATA = type { ptr, i32, [1024 x i8], i32, [16 x i8], i32, [1024 x i8], i32 }
%struct.EFI_RUNTIME_SERVICES = type { %struct.EFI_TABLE_HEADER, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@gIScsiV4PrivateGuid = external dso_local global %struct.GUID, align 4
@gIScsiV6PrivateGuid = external dso_local global %struct.GUID, align 4
@mPrivate = external dso_local global ptr, align 8
@gEfiTcp4ServiceBindingProtocolGuid = external global %struct.GUID, align 4
@gEfiTcp6ServiceBindingProtocolGuid = external global %struct.GUID, align 4
@gBS = external global ptr, align 8
@gEfiTcp4ProtocolGuid = external global %struct.GUID, align 4
@gEfiTcp6ProtocolGuid = external global %struct.GUID, align 4
@gEfiExtScsiPassThruProtocolGuid = external global %struct.GUID, align 4
@gEfiDevicePathProtocolGuid = external global %struct.GUID, align 4
@.str = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i32], align 4
@gRT = external global ptr, align 8
@gEfiIScsiInitiatorNameProtocolGuid = external global %struct.GUID, align 4
@.str.5 = external hidden unnamed_addr constant [13 x i32], align 4
@gIScsiConfigGuid = external global %struct.GUID, align 4

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

declare zeroext i8 @IsDevicePathEnd(ptr noundef) #1

declare ptr @NextDevicePathNode(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local i64 @IScsiStart(ptr noundef %0, ptr noundef %1, i8 noundef zeroext %2) #2 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca i64, 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 i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca [96 x i16], align 16
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i8 %2, ptr %7, align 1, !tbaa !9
  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 1, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 192, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  %30 = load i8, ptr %7, align 1, !tbaa !9
  %31 = zext i8 %30 to i32
  %32 = icmp eq i32 %31, 4
  br i1 %32, label %33, label %34

33:                                               ; preds = %3
  store ptr @gIScsiV4PrivateGuid, ptr %23, align 8, !tbaa !5
  store ptr @gEfiTcp4ServiceBindingProtocolGuid, ptr %24, align 8, !tbaa !5
  store ptr @gEfiTcp4ProtocolGuid, ptr %28, align 8, !tbaa !5
  br label %41

34:                                               ; preds = %3
  %35 = load i8, ptr %7, align 1, !tbaa !9
  %36 = zext i8 %35 to i32
  %37 = icmp eq i32 %36, 6
  br i1 %37, label %38, label %39

38:                                               ; preds = %34
  store ptr @gIScsiV6PrivateGuid, ptr %23, align 8, !tbaa !5
  store ptr @gEfiTcp6ServiceBindingProtocolGuid, ptr %24, align 8, !tbaa !5
  store ptr @gEfiTcp6ProtocolGuid, ptr %28, align 8, !tbaa !5
  br label %40

39:                                               ; preds = %34
  store i64 -9223372036854775806, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

40:                                               ; preds = %38
  br label %41

41:                                               ; preds = %40, %33
  %42 = load ptr, ptr @gBS, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %42, i32 0, i32 33
  %44 = load ptr, ptr %43, align 8, !tbaa !10
  %45 = load ptr, ptr %6, align 8, !tbaa !5
  %46 = load ptr, ptr %23, align 8, !tbaa !5
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = call i64 %44(ptr noundef %45, ptr noundef %46, ptr noundef null, ptr noundef %47, ptr noundef %48, i32 noundef 4)
  store i64 %49, ptr %8, align 8, !tbaa !15
  %50 = load i64, ptr %8, align 8, !tbaa !15
  %51 = icmp slt i64 %50, 0
  br i1 %51, label %53, label %52

52:                                               ; preds = %41
  store i64 -9223372036854775788, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

53:                                               ; preds = %41
  %54 = load ptr, ptr @gBS, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %54, i32 0, i32 33
  %56 = load ptr, ptr %55, align 8, !tbaa !10
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = load ptr, ptr %24, align 8, !tbaa !5
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = call i64 %56(ptr noundef %57, ptr noundef %58, ptr noundef null, ptr noundef %59, ptr noundef %60, i32 noundef 4)
  store i64 %61, ptr %8, align 8, !tbaa !15
  %62 = load i64, ptr %8, align 8, !tbaa !15
  %63 = icmp slt i64 %62, 0
  br i1 %63, label %64, label %65

64:                                               ; preds = %53
  store i64 -9223372036854775805, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

65:                                               ; preds = %53
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = call i64 @IScsiAddNic(ptr noundef %66)
  store i64 %67, ptr %8, align 8, !tbaa !15
  %68 = load i64, ptr %8, align 8, !tbaa !15
  %69 = icmp slt i64 %68, 0
  br i1 %69, label %70, label %72

70:                                               ; preds = %65
  %71 = load i64, ptr %8, align 8, !tbaa !15
  store i64 %71, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

72:                                               ; preds = %65
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = call ptr @IScsiCreateDriverData(ptr noundef %73, ptr noundef %74)
  store ptr %75, ptr %9, align 8, !tbaa !5
  %76 = load ptr, ptr %9, align 8, !tbaa !5
  %77 = icmp eq ptr %76, null
  br i1 %77, label %78, label %79

78:                                               ; preds = %72
  store i64 -9223372036854775799, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

79:                                               ; preds = %72
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = load ptr, ptr %24, align 8, !tbaa !5
  %83 = load ptr, ptr %9, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %83, i32 0, i32 9
  %85 = call i64 @NetLibCreateServiceChild(ptr noundef %80, ptr noundef %81, ptr noundef %82, ptr noundef %84)
  store i64 %85, ptr %8, align 8, !tbaa !15
  %86 = load i64, ptr %8, align 8, !tbaa !15
  %87 = icmp slt i64 %86, 0
  br i1 %87, label %88, label %89

88:                                               ; preds = %79
  br label %934

89:                                               ; preds = %79
  %90 = load ptr, ptr @gBS, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %90, i32 0, i32 33
  %92 = load ptr, ptr %91, align 8, !tbaa !10
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %93, i32 0, i32 9
  %95 = load ptr, ptr %94, align 8, !tbaa !16
  %96 = load ptr, ptr %28, align 8, !tbaa !5
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = call i64 %92(ptr noundef %95, ptr noundef %96, ptr noundef %27, ptr noundef %97, ptr noundef %98, i32 noundef 16)
  store i64 %99, ptr %8, align 8, !tbaa !15
  %100 = load i64, ptr %8, align 8, !tbaa !15
  %101 = icmp slt i64 %100, 0
  br i1 %101, label %102, label %103

102:                                              ; preds = %89
  br label %934

103:                                              ; preds = %89
  %104 = load ptr, ptr @gBS, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %104, i32 0, i32 14
  %106 = load ptr, ptr %105, align 8, !tbaa !21
  %107 = load ptr, ptr %23, align 8, !tbaa !5
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %108, i32 0, i32 3
  %110 = call i64 %106(ptr noundef %6, ptr noundef %107, i32 noundef 0, ptr noundef %109)
  store i64 %110, ptr %8, align 8, !tbaa !15
  %111 = load i64, ptr %8, align 8, !tbaa !15
  %112 = icmp slt i64 %111, 0
  br i1 %112, label %113, label %114

113:                                              ; preds = %103
  br label %934

114:                                              ; preds = %103
  %115 = load i8, ptr %7, align 1, !tbaa !9
  %116 = zext i8 %115 to i32
  %117 = icmp eq i32 %116, 4
  br i1 %117, label %118, label %121

118:                                              ; preds = %114
  %119 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %119, i32 0, i32 5
  store i8 0, ptr %120, align 1, !tbaa !22
  br label %124

121:                                              ; preds = %114
  %122 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %122, i32 0, i32 5
  store i8 1, ptr %123, align 1, !tbaa !22
  br label %124

124:                                              ; preds = %121, %118
  %125 = load ptr, ptr %9, align 8, !tbaa !5
  %126 = call i64 @IScsiGetConfigData(ptr noundef %125)
  store i64 %126, ptr %8, align 8, !tbaa !15
  %127 = load i64, ptr %8, align 8, !tbaa !15
  %128 = icmp slt i64 %127, 0
  br i1 %128, label %129, label %130

129:                                              ; preds = %124
  br label %934

130:                                              ; preds = %124
  store ptr null, ptr %16, align 8, !tbaa !5
  store i64 -9223372036854775794, ptr %8, align 8, !tbaa !15
  %131 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %131, i32 0, i32 6
  %133 = load i8, ptr %132, align 4, !tbaa !25
  %134 = zext i8 %133 to i32
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %136, label %316

136:                                              ; preds = %130
  %137 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %137, i32 0, i32 7
  %139 = load i8, ptr %138, align 1, !tbaa !26
  %140 = zext i8 %139 to i32
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %316

142:                                              ; preds = %136
  store ptr null, ptr %12, align 8, !tbaa !5
  %143 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %143, i32 0, i32 14
  %145 = getelementptr inbounds %struct._LIST_ENTRY, ptr %144, i32 0, i32 0
  %146 = load ptr, ptr %145, align 8, !tbaa !27
  store ptr %146, ptr %10, align 8, !tbaa !5
  br label %147

147:                                              ; preds = %165, %142
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %149, i32 0, i32 14
  %151 = icmp ne ptr %148, %150
  br i1 %151, label %152, label %169

152:                                              ; preds = %147
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = ptrtoint ptr %153 to i64
  %155 = sub i64 %154, 0
  %156 = inttoptr i64 %155 to ptr
  store ptr %156, ptr %12, align 8, !tbaa !5
  %157 = load ptr, ptr %12, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %157, i32 0, i32 14
  %159 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %158, i32 0, i32 1
  %160 = load i8, ptr %159, align 1, !tbaa !28
  %161 = zext i8 %160 to i32
  %162 = icmp eq i32 %161, 2
  br i1 %162, label %163, label %164

163:                                              ; preds = %152
  br label %169

164:                                              ; preds = %152
  br label %165

165:                                              ; preds = %164
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct._LIST_ENTRY, ptr %166, i32 0, i32 0
  %168 = load ptr, ptr %167, align 8, !tbaa !33
  store ptr %168, ptr %10, align 8, !tbaa !5
  br label %147, !llvm.loop !34

169:                                              ; preds = %163, %147
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = icmp eq ptr %170, null
  br i1 %171, label %172, label %173

172:                                              ; preds = %169
  br label %934

173:                                              ; preds = %169
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %174, i32 0, i32 2
  %176 = load i8, ptr %175, align 1, !tbaa !36
  %177 = zext i8 %176 to i32
  %178 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %178, i32 0, i32 12
  %180 = load i8, ptr %179, align 2, !tbaa !37
  %181 = zext i8 %180 to i32
  %182 = icmp eq i32 %177, %181
  br i1 %182, label %183, label %184

183:                                              ; preds = %173
  br label %926

184:                                              ; preds = %173
  %185 = load ptr, ptr @gBS, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %185, i32 0, i32 37
  %187 = load ptr, ptr %186, align 8, !tbaa !38
  %188 = call i64 %187(i32 noundef 2, ptr noundef @gEfiExtScsiPassThruProtocolGuid, ptr noundef null, ptr noundef %21, ptr noundef %20)
  store i64 %188, ptr %8, align 8, !tbaa !15
  %189 = load i64, ptr %8, align 8, !tbaa !15
  %190 = icmp slt i64 %189, 0
  br i1 %190, label %191, label %192

191:                                              ; preds = %184
  br label %934

192:                                              ; preds = %184
  store ptr null, ptr %15, align 8, !tbaa !5
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %193

193:                                              ; preds = %274, %192
  %194 = load i8, ptr %14, align 1, !tbaa !9
  %195 = zext i8 %194 to i64
  %196 = load i64, ptr %21, align 8, !tbaa !15
  %197 = icmp ult i64 %195, %196
  br i1 %197, label %198, label %201

198:                                              ; preds = %193
  %199 = load ptr, ptr %15, align 8, !tbaa !5
  %200 = icmp eq ptr %199, null
  br label %201

201:                                              ; preds = %198, %193
  %202 = phi i1 [ false, %193 ], [ %200, %198 ]
  br i1 %202, label %203, label %277

203:                                              ; preds = %201
  %204 = load ptr, ptr @gBS, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %204, i32 0, i32 17
  %206 = load ptr, ptr %205, align 8, !tbaa !39
  %207 = load ptr, ptr %20, align 8, !tbaa !5
  %208 = load i8, ptr %14, align 1, !tbaa !9
  %209 = zext i8 %208 to i64
  %210 = getelementptr inbounds ptr, ptr %207, i64 %209
  %211 = load ptr, ptr %210, align 8, !tbaa !5
  %212 = call i64 %206(ptr noundef %211, ptr noundef @gEfiDevicePathProtocolGuid, ptr noundef %22)
  store i64 %212, ptr %8, align 8, !tbaa !15
  %213 = load i64, ptr %8, align 8, !tbaa !15
  %214 = icmp slt i64 %213, 0
  br i1 %214, label %215, label %216

215:                                              ; preds = %203
  br label %274

216:                                              ; preds = %203
  br label %217

217:                                              ; preds = %270, %216
  %218 = load ptr, ptr %22, align 8, !tbaa !5
  %219 = call zeroext i8 @IsDevicePathEnd(ptr noundef %218)
  %220 = icmp ne i8 %219, 0
  %221 = xor i1 %220, true
  br i1 %221, label %222, label %273

222:                                              ; preds = %217
  %223 = load ptr, ptr %22, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.EFI_DEVICE_PATH_PROTOCOL, ptr %223, i32 0, i32 0
  %225 = load i8, ptr %224, align 1, !tbaa !40
  %226 = zext i8 %225 to i32
  %227 = icmp eq i32 %226, 3
  br i1 %227, label %228, label %270

228:                                              ; preds = %222
  %229 = load ptr, ptr %22, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.EFI_DEVICE_PATH_PROTOCOL, ptr %229, i32 0, i32 1
  %231 = load i8, ptr %230, align 1, !tbaa !42
  %232 = zext i8 %231 to i32
  %233 = icmp eq i32 %232, 11
  br i1 %233, label %234, label %270

234:                                              ; preds = %228
  %235 = load ptr, ptr @gBS, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %235, i32 0, i32 17
  %237 = load ptr, ptr %236, align 8, !tbaa !39
  %238 = load ptr, ptr %20, align 8, !tbaa !5
  %239 = load i8, ptr %14, align 1, !tbaa !9
  %240 = zext i8 %239 to i64
  %241 = getelementptr inbounds ptr, ptr %238, i64 %240
  %242 = load ptr, ptr %241, align 8, !tbaa !5
  %243 = call i64 %237(ptr noundef %242, ptr noundef @gEfiExtScsiPassThruProtocolGuid, ptr noundef %15)
  store i64 %243, ptr %8, align 8, !tbaa !15
  br label %244

244:                                              ; preds = %234
  %245 = call zeroext i8 @DebugAssertEnabled()
  %246 = icmp ne i8 %245, 0
  br i1 %246, label %247, label %267

247:                                              ; preds = %244
  %248 = load i64, ptr %8, align 8, !tbaa !15
  %249 = icmp slt i64 %248, 0
  br i1 %249, label %250, label %266

250:                                              ; preds = %247
  br label %251

251:                                              ; preds = %250
  %252 = call zeroext i8 @DebugPrintEnabled()
  %253 = icmp ne i8 %252, 0
  br i1 %253, label %254, label %263

254:                                              ; preds = %251
  br label %255

255:                                              ; preds = %254
  %256 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %257 = icmp ne i8 %256, 0
  br i1 %257, label %258, label %260

258:                                              ; preds = %255
  %259 = load i64, ptr %8, align 8, !tbaa !15
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str, i64 noundef %259)
  br label %260

260:                                              ; preds = %258, %255
  br label %261

261:                                              ; preds = %260
  br label %262

262:                                              ; preds = %261
  br label %263

263:                                              ; preds = %262, %251
  br label %264

264:                                              ; preds = %263
  br label %265

265:                                              ; preds = %264
  call void @DebugAssert(ptr noundef @.str.1, i64 noundef 400, ptr noundef @.str.2)
  br label %266

266:                                              ; preds = %265, %247
  br label %267

267:                                              ; preds = %266, %244
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268
  br label %273

270:                                              ; preds = %228, %222
  %271 = load ptr, ptr %22, align 8, !tbaa !5
  %272 = call ptr @NextDevicePathNode(ptr noundef %271)
  store ptr %272, ptr %22, align 8, !tbaa !5
  br label %217, !llvm.loop !43

273:                                              ; preds = %269, %217
  br label %274

274:                                              ; preds = %273, %215
  %275 = load i8, ptr %14, align 1, !tbaa !9
  %276 = add i8 %275, 1
  store i8 %276, ptr %14, align 1, !tbaa !9
  br label %193, !llvm.loop !44

277:                                              ; preds = %201
  %278 = load ptr, ptr %20, align 8, !tbaa !5
  call void @FreePool(ptr noundef %278)
  %279 = load ptr, ptr %15, align 8, !tbaa !5
  %280 = icmp eq ptr %279, null
  br i1 %280, label %281, label %282

281:                                              ; preds = %277
  store i64 -9223372036854775794, ptr %8, align 8, !tbaa !15
  br label %934

282:                                              ; preds = %277
  %283 = call zeroext i8 @DebugAssertEnabled()
  %284 = zext i8 %283 to i32
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %296

286:                                              ; preds = %282
  %287 = load ptr, ptr %15, align 8, !tbaa !5
  %288 = ptrtoint ptr %287 to i64
  %289 = sub i64 %288, ptrtoint (ptr getelementptr inbounds (%struct._ISCSI_DRIVER_DATA, ptr null, i32 0, i32 5) to i64)
  %290 = inttoptr i64 %289 to ptr
  %291 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %290, i32 0, i32 0
  %292 = load i32, ptr %291, align 8, !tbaa !45
  %293 = icmp ne i32 %292, 1094996809
  br i1 %293, label %294, label %296

294:                                              ; preds = %286
  call void @DebugAssert(ptr noundef @.str.1, i64 noundef 415, ptr noundef @.str.3)
  %295 = load ptr, ptr %15, align 8, !tbaa !5
  br label %301

296:                                              ; preds = %286, %282
  %297 = load ptr, ptr %15, align 8, !tbaa !5
  %298 = ptrtoint ptr %297 to i64
  %299 = sub i64 %298, ptrtoint (ptr getelementptr inbounds (%struct._ISCSI_DRIVER_DATA, ptr null, i32 0, i32 5) to i64)
  %300 = inttoptr i64 %299 to ptr
  br label %301

301:                                              ; preds = %296, %294
  %302 = phi ptr [ %295, %294 ], [ %300, %296 ]
  store ptr %302, ptr %16, align 8, !tbaa !5
  %303 = load ptr, ptr @gBS, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %303, i32 0, i32 16
  %305 = load ptr, ptr %304, align 8, !tbaa !46
  %306 = load ptr, ptr %16, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %306, i32 0, i32 7
  %308 = load ptr, ptr %307, align 8, !tbaa !47
  %309 = load ptr, ptr %16, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %309, i32 0, i32 5
  %311 = call i64 %305(ptr noundef %308, ptr noundef @gEfiExtScsiPassThruProtocolGuid, ptr noundef %310)
  store i64 %311, ptr %8, align 8, !tbaa !15
  %312 = load i64, ptr %8, align 8, !tbaa !15
  %313 = icmp slt i64 %312, 0
  br i1 %313, label %314, label %315

314:                                              ; preds = %301
  br label %934

315:                                              ; preds = %301
  br label %316

316:                                              ; preds = %315, %136, %130
  %317 = load ptr, ptr @gBS, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %317, i32 0, i32 14
  %319 = load ptr, ptr %318, align 8, !tbaa !21
  %320 = load ptr, ptr %9, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %320, i32 0, i32 7
  %322 = load ptr, ptr %9, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %322, i32 0, i32 5
  %324 = call i64 %319(ptr noundef %321, ptr noundef @gEfiExtScsiPassThruProtocolGuid, i32 noundef 0, ptr noundef %323)
  store i64 %324, ptr %8, align 8, !tbaa !15
  %325 = load i64, ptr %8, align 8, !tbaa !15
  %326 = icmp slt i64 %325, 0
  br i1 %326, label %327, label %328

327:                                              ; preds = %316
  br label %934

328:                                              ; preds = %316
  store i8 0, ptr %19, align 1, !tbaa !9
  %329 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %329, i32 0, i32 14
  %331 = getelementptr inbounds %struct._LIST_ENTRY, ptr %330, i32 0, i32 0
  %332 = load ptr, ptr %331, align 8, !tbaa !27
  store ptr %332, ptr %10, align 8, !tbaa !5
  %333 = load ptr, ptr %10, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct._LIST_ENTRY, ptr %333, i32 0, i32 0
  %335 = load ptr, ptr %334, align 8, !tbaa !33
  store ptr %335, ptr %11, align 8, !tbaa !5
  br label %336

336:                                              ; preds = %639, %328
  %337 = load ptr, ptr %10, align 8, !tbaa !5
  %338 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %338, i32 0, i32 14
  %340 = icmp ne ptr %337, %339
  br i1 %340, label %341, label %644

341:                                              ; preds = %336
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  %343 = ptrtoint ptr %342 to i64
  %344 = sub i64 %343, 0
  %345 = inttoptr i64 %344 to ptr
  store ptr %345, ptr %12, align 8, !tbaa !5
  %346 = load ptr, ptr %12, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %346, i32 0, i32 1
  %348 = load i8, ptr %347, align 1, !tbaa !48
  %349 = zext i8 %348 to i32
  %350 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %350, i32 0, i32 3
  %352 = load i8, ptr %351, align 1, !tbaa !49
  %353 = zext i8 %352 to i32
  %354 = icmp ne i32 %349, %353
  br i1 %354, label %368, label %355

355:                                              ; preds = %341
  %356 = load ptr, ptr %12, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %356, i32 0, i32 14
  %358 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %357, i32 0, i32 1
  %359 = load i8, ptr %358, align 1, !tbaa !28
  %360 = zext i8 %359 to i32
  %361 = icmp eq i32 %360, 0
  br i1 %361, label %368, label %362

362:                                              ; preds = %355
  %363 = load ptr, ptr %12, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %363, i32 0, i32 5
  %365 = load i8, ptr %364, align 1, !tbaa !50
  %366 = zext i8 %365 to i32
  %367 = icmp ne i32 %366, 0
  br i1 %367, label %368, label %369

368:                                              ; preds = %362, %355, %341
  br label %639

369:                                              ; preds = %362
  %370 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %370, i32 0, i32 7
  %372 = load i8, ptr %371, align 1, !tbaa !26
  %373 = zext i8 %372 to i32
  %374 = icmp ne i32 %373, 0
  br i1 %374, label %375, label %382

375:                                              ; preds = %369
  %376 = load ptr, ptr %12, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %376, i32 0, i32 14
  %378 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %377, i32 0, i32 1
  %379 = load i8, ptr %378, align 1, !tbaa !28
  %380 = zext i8 %379 to i32
  %381 = icmp ne i32 %380, 2
  br i1 %381, label %394, label %382

382:                                              ; preds = %375, %369
  %383 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %383, i32 0, i32 7
  %385 = load i8, ptr %384, align 1, !tbaa !26
  %386 = icmp ne i8 %385, 0
  br i1 %386, label %395, label %387

387:                                              ; preds = %382
  %388 = load ptr, ptr %12, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %388, i32 0, i32 14
  %390 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %389, i32 0, i32 1
  %391 = load i8, ptr %390, align 1, !tbaa !28
  %392 = zext i8 %391 to i32
  %393 = icmp ne i32 %392, 1
  br i1 %393, label %394, label %395

394:                                              ; preds = %387, %375
  br label %639

395:                                              ; preds = %387, %382
  %396 = load ptr, ptr %12, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %396, i32 0, i32 14
  %398 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %397, i32 0, i32 6
  %399 = load i8, ptr %398, align 1, !tbaa !51
  %400 = zext i8 %399 to i32
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %402, label %424

402:                                              ; preds = %395
  %403 = load ptr, ptr %12, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %403, i32 0, i32 3
  %405 = load i8, ptr %404, align 1, !tbaa !52
  %406 = icmp ne i8 %405, 0
  br i1 %406, label %424, label %407

407:                                              ; preds = %402
  %408 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %408, i32 0, i32 7
  %410 = load i8, ptr %409, align 1, !tbaa !26
  %411 = icmp ne i8 %410, 0
  br i1 %411, label %423, label %412

412:                                              ; preds = %407
  %413 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %413, i32 0, i32 11
  %415 = load i8, ptr %414, align 1, !tbaa !53
  %416 = zext i8 %415 to i32
  %417 = icmp sgt i32 %416, 0
  br i1 %417, label %418, label %423

418:                                              ; preds = %412
  %419 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %419, i32 0, i32 11
  %421 = load i8, ptr %420, align 1, !tbaa !53
  %422 = add i8 %421, -1
  store i8 %422, ptr %420, align 1, !tbaa !53
  br label %423

423:                                              ; preds = %418, %412, %407
  br label %639

424:                                              ; preds = %402, %395
  %425 = load ptr, ptr %12, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %425, i32 0, i32 14
  %427 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %426, i32 0, i32 2
  %428 = load i8, ptr %427, align 1, !tbaa !54
  %429 = zext i8 %428 to i32
  %430 = icmp eq i32 %429, 2
  br i1 %430, label %431, label %438

431:                                              ; preds = %424
  %432 = load ptr, ptr %12, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %432, i32 0, i32 6
  %434 = load i8, ptr %433, align 1, !tbaa !55
  %435 = zext i8 %434 to i32
  %436 = icmp eq i32 %435, 5
  br i1 %436, label %437, label %438

437:                                              ; preds = %431
  br label %639

438:                                              ; preds = %431, %424
  %439 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %439, i32 0, i32 5
  %441 = load i8, ptr %440, align 1, !tbaa !22
  %442 = icmp ne i8 %441, 0
  br i1 %442, label %466, label %443

443:                                              ; preds = %438
  %444 = load ptr, ptr %12, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %444, i32 0, i32 14
  %446 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %445, i32 0, i32 2
  %447 = load i8, ptr %446, align 1, !tbaa !54
  %448 = zext i8 %447 to i32
  %449 = icmp eq i32 %448, 1
  br i1 %449, label %450, label %451

450:                                              ; preds = %443
  br label %639

451:                                              ; preds = %443
  %452 = load ptr, ptr %12, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %452, i32 0, i32 14
  %454 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %453, i32 0, i32 2
  %455 = load i8, ptr %454, align 1, !tbaa !54
  %456 = zext i8 %455 to i32
  %457 = icmp eq i32 %456, 2
  br i1 %457, label %458, label %465

458:                                              ; preds = %451
  %459 = load ptr, ptr %12, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %459, i32 0, i32 6
  %461 = load i8, ptr %460, align 1, !tbaa !55
  %462 = zext i8 %461 to i32
  %463 = icmp eq i32 %462, 4
  br i1 %463, label %464, label %465

464:                                              ; preds = %458
  br label %639

465:                                              ; preds = %458, %451
  br label %489

466:                                              ; preds = %438
  %467 = load ptr, ptr %12, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %467, i32 0, i32 14
  %469 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %468, i32 0, i32 2
  %470 = load i8, ptr %469, align 1, !tbaa !54
  %471 = zext i8 %470 to i32
  %472 = icmp eq i32 %471, 0
  br i1 %472, label %473, label %474

473:                                              ; preds = %466
  br label %639

474:                                              ; preds = %466
  %475 = load ptr, ptr %12, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %475, i32 0, i32 14
  %477 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %476, i32 0, i32 2
  %478 = load i8, ptr %477, align 1, !tbaa !54
  %479 = zext i8 %478 to i32
  %480 = icmp eq i32 %479, 2
  br i1 %480, label %481, label %488

481:                                              ; preds = %474
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %482, i32 0, i32 6
  %484 = load i8, ptr %483, align 1, !tbaa !55
  %485 = zext i8 %484 to i32
  %486 = icmp eq i32 %485, 3
  br i1 %486, label %487, label %488

487:                                              ; preds = %481
  br label %639

488:                                              ; preds = %481, %474
  br label %489

489:                                              ; preds = %488, %465
  %490 = call ptr @AllocateZeroPool(i64 noundef 2232)
  store ptr %490, ptr %13, align 8, !tbaa !5
  %491 = load ptr, ptr %13, align 8, !tbaa !5
  %492 = icmp eq ptr %491, null
  br i1 %492, label %493, label %494

493:                                              ; preds = %489
  store i64 -9223372036854775799, ptr %8, align 8, !tbaa !15
  br label %934

494:                                              ; preds = %489
  %495 = load ptr, ptr %9, align 8, !tbaa !5
  %496 = load ptr, ptr %13, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct._ISCSI_SESSION, ptr %496, i32 0, i32 1
  store ptr %495, ptr %497, align 8, !tbaa !56
  %498 = load ptr, ptr %12, align 8, !tbaa !5
  %499 = load ptr, ptr %13, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct._ISCSI_SESSION, ptr %499, i32 0, i32 2
  store ptr %498, ptr %500, align 8, !tbaa !58
  %501 = load ptr, ptr %12, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %501, i32 0, i32 15
  %503 = load i8, ptr %502, align 1, !tbaa !59
  %504 = load ptr, ptr %13, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct._ISCSI_SESSION, ptr %504, i32 0, i32 3
  store i8 %503, ptr %505, align 8, !tbaa !60
  %506 = load ptr, ptr %12, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %506, i32 0, i32 10
  %508 = getelementptr inbounds [96 x i8], ptr %507, i64 0, i64 0
  %509 = getelementptr inbounds [96 x i16], ptr %25, i64 0, i64 0
  %510 = call ptr @AsciiStrToUnicodeStr(ptr noundef %508, ptr noundef %509)
  %511 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %511, i32 0, i32 0
  %513 = getelementptr inbounds [223 x i16], ptr %512, i64 0, i64 0
  %514 = getelementptr inbounds [96 x i16], ptr %25, i64 0, i64 0
  %515 = load ptr, ptr %12, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %515, i32 0, i32 2
  %517 = load i8, ptr %516, align 1, !tbaa !36
  %518 = zext i8 %517 to i64
  %519 = call i64 (ptr, i64, ptr, ...) @UnicodeSPrint(ptr noundef %513, i64 noundef 223, ptr noundef @.str.4, ptr noundef %514, i64 noundef %518)
  %520 = load ptr, ptr %13, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct._ISCSI_SESSION, ptr %520, i32 0, i32 3
  %522 = load i8, ptr %521, align 8, !tbaa !60
  %523 = zext i8 %522 to i32
  %524 = icmp eq i32 %523, 1
  br i1 %524, label %525, label %531

525:                                              ; preds = %494
  %526 = load ptr, ptr %12, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %526, i32 0, i32 16
  %528 = load ptr, ptr %13, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct._ISCSI_SESSION, ptr %528, i32 0, i32 4
  %530 = getelementptr inbounds %struct._ISCSI_CHAP_AUTH_DATA, ptr %529, i32 0, i32 0
  store ptr %527, ptr %530, align 8, !tbaa !9
  br label %531

531:                                              ; preds = %525, %494
  %532 = load ptr, ptr %13, align 8, !tbaa !5
  call void @IScsiSessionInit(ptr noundef %532, i8 noundef zeroext 0)
  %533 = load ptr, ptr %13, align 8, !tbaa !5
  %534 = call i64 @IScsiSessionLogin(ptr noundef %533)
  store i64 %534, ptr %8, align 8, !tbaa !15
  %535 = load i64, ptr %8, align 8, !tbaa !15
  %536 = icmp eq i64 %535, -9223372036854775795
  br i1 %536, label %537, label %540

537:                                              ; preds = %531
  %538 = load ptr, ptr %13, align 8, !tbaa !5
  %539 = call i64 @IScsiSessionLogin(ptr noundef %538)
  store i64 %539, ptr %8, align 8, !tbaa !15
  br label %547

540:                                              ; preds = %531
  %541 = load i64, ptr %8, align 8, !tbaa !15
  %542 = icmp eq i64 %541, -9223372036854775802
  br i1 %542, label %543, label %546

543:                                              ; preds = %540
  %544 = load ptr, ptr %13, align 8, !tbaa !5
  %545 = call i64 @IScsiSessionReLogin(ptr noundef %544)
  store i64 %545, ptr %8, align 8, !tbaa !15
  br label %546

546:                                              ; preds = %543, %540
  br label %547

547:                                              ; preds = %546, %537
  %548 = load i64, ptr %8, align 8, !tbaa !15
  %549 = icmp slt i64 %548, 0
  br i1 %549, label %550, label %568

550:                                              ; preds = %547
  %551 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %551, i32 0, i32 7
  %553 = load i8, ptr %552, align 1, !tbaa !26
  %554 = icmp ne i8 %553, 0
  br i1 %554, label %566, label %555

555:                                              ; preds = %550
  %556 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %556, i32 0, i32 11
  %558 = load i8, ptr %557, align 1, !tbaa !53
  %559 = zext i8 %558 to i32
  %560 = icmp sgt i32 %559, 0
  br i1 %560, label %561, label %566

561:                                              ; preds = %555
  %562 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %562, i32 0, i32 11
  %564 = load i8, ptr %563, align 1, !tbaa !53
  %565 = add i8 %564, -1
  store i8 %565, ptr %563, align 1, !tbaa !53
  br label %566

566:                                              ; preds = %561, %555, %550
  %567 = load ptr, ptr %13, align 8, !tbaa !5
  call void @FreePool(ptr noundef %567)
  br label %638

568:                                              ; preds = %547
  %569 = load ptr, ptr %12, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %569, i32 0, i32 5
  store i8 1, ptr %570, align 1, !tbaa !50
  %571 = load ptr, ptr %13, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct._ISCSI_SESSION, ptr %571, i32 0, i32 3
  %573 = load i8, ptr %572, align 8, !tbaa !60
  %574 = zext i8 %573 to i32
  %575 = icmp eq i32 %574, 2
  br i1 %575, label %576, label %595

576:                                              ; preds = %568
  %577 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %577, i32 0, i32 7
  %579 = load i8, ptr %578, align 1, !tbaa !26
  %580 = icmp ne i8 %579, 0
  br i1 %580, label %592, label %581

581:                                              ; preds = %576
  %582 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %582, i32 0, i32 11
  %584 = load i8, ptr %583, align 1, !tbaa !53
  %585 = zext i8 %584 to i32
  %586 = icmp sgt i32 %585, 0
  br i1 %586, label %587, label %592

587:                                              ; preds = %581
  %588 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %588, i32 0, i32 11
  %590 = load i8, ptr %589, align 1, !tbaa !53
  %591 = add i8 %590, -1
  store i8 %591, ptr %589, align 1, !tbaa !53
  br label %592

592:                                              ; preds = %587, %581, %576
  %593 = load ptr, ptr %12, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %593, i32 0, i32 4
  store i8 0, ptr %594, align 1, !tbaa !61
  br label %598

595:                                              ; preds = %568
  %596 = load ptr, ptr %12, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %596, i32 0, i32 4
  store i8 1, ptr %597, align 1, !tbaa !61
  br label %598

598:                                              ; preds = %595, %592
  %599 = load ptr, ptr %12, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %599, i32 0, i32 14
  %601 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %600, i32 0, i32 2
  %602 = load i8, ptr %601, align 1, !tbaa !54
  %603 = zext i8 %602 to i32
  %604 = icmp eq i32 %603, 2
  br i1 %604, label %605, label %608

605:                                              ; preds = %598
  %606 = load ptr, ptr %12, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %606, i32 0, i32 6
  store i8 5, ptr %607, align 1, !tbaa !55
  br label %608

608:                                              ; preds = %605, %598
  %609 = load ptr, ptr @gRT, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.EFI_RUNTIME_SERVICES, ptr %609, i32 0, i32 9
  %611 = load ptr, ptr %610, align 8, !tbaa !62
  %612 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %612, i32 0, i32 0
  %614 = getelementptr inbounds [223 x i16], ptr %613, i64 0, i64 0
  %615 = load ptr, ptr %12, align 8, !tbaa !5
  %616 = call i64 %611(ptr noundef %614, ptr noundef @gEfiIScsiInitiatorNameProtocolGuid, i32 noundef 3, i64 noundef 856, ptr noundef %615)
  %617 = load ptr, ptr %9, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %617, i32 0, i32 10
  %619 = load ptr, ptr %618, align 8, !tbaa !64
  %620 = icmp eq ptr %619, null
  br i1 %620, label %621, label %634

621:                                              ; preds = %608
  %622 = load ptr, ptr %13, align 8, !tbaa !5
  %623 = load ptr, ptr %9, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %623, i32 0, i32 10
  store ptr %622, ptr %624, align 8, !tbaa !64
  %625 = load ptr, ptr %12, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %625, i32 0, i32 2
  %627 = load i8, ptr %626, align 1, !tbaa !36
  store i8 %627, ptr %19, align 1, !tbaa !9
  %628 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %628, i32 0, i32 7
  %630 = load i8, ptr %629, align 1, !tbaa !26
  %631 = icmp ne i8 %630, 0
  br i1 %631, label %632, label %633

632:                                              ; preds = %621
  br label %644

633:                                              ; preds = %621
  br label %637

634:                                              ; preds = %608
  %635 = load ptr, ptr %13, align 8, !tbaa !5
  call void @IScsiSessionAbort(ptr noundef %635)
  %636 = load ptr, ptr %13, align 8, !tbaa !5
  call void @FreePool(ptr noundef %636)
  br label %637

637:                                              ; preds = %634, %633
  br label %638

638:                                              ; preds = %637, %566
  br label %639

639:                                              ; preds = %638, %487, %473, %464, %450, %437, %423, %394, %368
  %640 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %640, ptr %10, align 8, !tbaa !5
  %641 = load ptr, ptr %10, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct._LIST_ENTRY, ptr %641, i32 0, i32 0
  %643 = load ptr, ptr %642, align 8, !tbaa !33
  store ptr %643, ptr %11, align 8, !tbaa !5
  br label %336, !llvm.loop !65

644:                                              ; preds = %632, %336
  %645 = load ptr, ptr %9, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %645, i32 0, i32 10
  %647 = load ptr, ptr %646, align 8, !tbaa !64
  %648 = icmp eq ptr %647, null
  br i1 %648, label %649, label %709

649:                                              ; preds = %644
  %650 = load ptr, ptr @gBS, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %650, i32 0, i32 16
  %652 = load ptr, ptr %651, align 8, !tbaa !46
  %653 = load ptr, ptr %9, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %653, i32 0, i32 7
  %655 = load ptr, ptr %654, align 8, !tbaa !47
  %656 = load ptr, ptr %9, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %656, i32 0, i32 5
  %658 = call i64 %652(ptr noundef %655, ptr noundef @gEfiExtScsiPassThruProtocolGuid, ptr noundef %657)
  store i64 %658, ptr %8, align 8, !tbaa !15
  br label %659

659:                                              ; preds = %649
  %660 = call zeroext i8 @DebugAssertEnabled()
  %661 = icmp ne i8 %660, 0
  br i1 %661, label %662, label %682

662:                                              ; preds = %659
  %663 = load i64, ptr %8, align 8, !tbaa !15
  %664 = icmp slt i64 %663, 0
  br i1 %664, label %665, label %681

665:                                              ; preds = %662
  br label %666

666:                                              ; preds = %665
  %667 = call zeroext i8 @DebugPrintEnabled()
  %668 = icmp ne i8 %667, 0
  br i1 %668, label %669, label %678

669:                                              ; preds = %666
  br label %670

670:                                              ; preds = %669
  %671 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %672 = icmp ne i8 %671, 0
  br i1 %672, label %673, label %675

673:                                              ; preds = %670
  %674 = load i64, ptr %8, align 8, !tbaa !15
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str, i64 noundef %674)
  br label %675

675:                                              ; preds = %673, %670
  br label %676

676:                                              ; preds = %675
  br label %677

677:                                              ; preds = %676
  br label %678

678:                                              ; preds = %677, %666
  br label %679

679:                                              ; preds = %678
  br label %680

680:                                              ; preds = %679
  call void @DebugAssert(ptr noundef @.str.1, i64 noundef 618, ptr noundef @.str.2)
  br label %681

681:                                              ; preds = %680, %662
  br label %682

682:                                              ; preds = %681, %659
  br label %683

683:                                              ; preds = %682
  br label %684

684:                                              ; preds = %683
  %685 = load ptr, ptr %9, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %685, i32 0, i32 7
  store ptr null, ptr %686, align 8, !tbaa !47
  %687 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %687, i32 0, i32 6
  %689 = load i8, ptr %688, align 4, !tbaa !25
  %690 = zext i8 %689 to i32
  %691 = icmp ne i32 %690, 0
  br i1 %691, label %692, label %708

692:                                              ; preds = %684
  %693 = load ptr, ptr %16, align 8, !tbaa !5
  %694 = icmp ne ptr %693, null
  br i1 %694, label %695, label %708

695:                                              ; preds = %692
  %696 = load ptr, ptr @gBS, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %696, i32 0, i32 14
  %698 = load ptr, ptr %697, align 8, !tbaa !21
  %699 = load ptr, ptr %16, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %699, i32 0, i32 7
  %701 = load ptr, ptr %16, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %701, i32 0, i32 5
  %703 = call i64 %698(ptr noundef %700, ptr noundef @gEfiExtScsiPassThruProtocolGuid, i32 noundef 0, ptr noundef %702)
  store i64 %703, ptr %8, align 8, !tbaa !15
  %704 = load i64, ptr %8, align 8, !tbaa !15
  %705 = icmp slt i64 %704, 0
  br i1 %705, label %706, label %707

706:                                              ; preds = %695
  br label %934

707:                                              ; preds = %695
  br label %926

708:                                              ; preds = %692, %684
  store i64 -9223372036854775794, ptr %8, align 8, !tbaa !15
  br label %934

709:                                              ; preds = %644
  store i8 1, ptr %26, align 1, !tbaa !9
  %710 = load ptr, ptr %9, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %710, i32 0, i32 10
  %712 = load ptr, ptr %711, align 8, !tbaa !64
  %713 = icmp ne ptr %712, null
  br i1 %713, label %714, label %863

714:                                              ; preds = %709
  %715 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %715, i32 0, i32 6
  %717 = load i8, ptr %716, align 4, !tbaa !25
  %718 = zext i8 %717 to i32
  %719 = icmp ne i32 %718, 0
  br i1 %719, label %720, label %863

720:                                              ; preds = %714
  %721 = call ptr @IScsiGetVariableAndSize(ptr noundef @.str.5, ptr noundef @gIScsiConfigGuid, ptr noundef %18)
  store ptr %721, ptr %17, align 8, !tbaa !5
  %722 = load ptr, ptr %17, align 8, !tbaa !5
  %723 = icmp eq ptr %722, null
  br i1 %723, label %724, label %725

724:                                              ; preds = %720
  br label %934

725:                                              ; preds = %720
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %726

726:                                              ; preds = %756, %725
  %727 = load i8, ptr %14, align 1, !tbaa !9
  %728 = zext i8 %727 to i64
  %729 = load i64, ptr %18, align 8, !tbaa !15
  %730 = udiv i64 %729, 1
  %731 = icmp ult i64 %728, %730
  br i1 %731, label %732, label %759

732:                                              ; preds = %726
  %733 = load ptr, ptr %17, align 8, !tbaa !5
  %734 = load i8, ptr %14, align 1, !tbaa !9
  %735 = zext i8 %734 to i64
  %736 = getelementptr inbounds i8, ptr %733, i64 %735
  %737 = load i8, ptr %736, align 1, !tbaa !9
  %738 = zext i8 %737 to i32
  %739 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %739, i32 0, i32 12
  %741 = load i8, ptr %740, align 2, !tbaa !37
  %742 = zext i8 %741 to i32
  %743 = icmp eq i32 %738, %742
  br i1 %743, label %754, label %744

744:                                              ; preds = %732
  %745 = load ptr, ptr %17, align 8, !tbaa !5
  %746 = load i8, ptr %14, align 1, !tbaa !9
  %747 = zext i8 %746 to i64
  %748 = getelementptr inbounds i8, ptr %745, i64 %747
  %749 = load i8, ptr %748, align 1, !tbaa !9
  %750 = zext i8 %749 to i32
  %751 = load i8, ptr %19, align 1, !tbaa !9
  %752 = zext i8 %751 to i32
  %753 = icmp eq i32 %750, %752
  br i1 %753, label %754, label %755

754:                                              ; preds = %744, %732
  br label %759

755:                                              ; preds = %744
  br label %756

756:                                              ; preds = %755
  %757 = load i8, ptr %14, align 1, !tbaa !9
  %758 = add i8 %757, 1
  store i8 %758, ptr %14, align 1, !tbaa !9
  br label %726, !llvm.loop !66

759:                                              ; preds = %754, %726
  %760 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %760, i32 0, i32 7
  %762 = load i8, ptr %761, align 1, !tbaa !26
  %763 = icmp ne i8 %762, 0
  br i1 %763, label %764, label %848

764:                                              ; preds = %759
  %765 = load ptr, ptr %17, align 8, !tbaa !5
  %766 = load i8, ptr %14, align 1, !tbaa !9
  %767 = zext i8 %766 to i64
  %768 = getelementptr inbounds i8, ptr %765, i64 %767
  %769 = load i8, ptr %768, align 1, !tbaa !9
  %770 = zext i8 %769 to i32
  %771 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %771, i32 0, i32 12
  %773 = load i8, ptr %772, align 2, !tbaa !37
  %774 = zext i8 %773 to i32
  %775 = icmp eq i32 %770, %774
  br i1 %775, label %776, label %808

776:                                              ; preds = %764
  %777 = load ptr, ptr %9, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %777, i32 0, i32 10
  %779 = load ptr, ptr %778, align 8, !tbaa !64
  call void @IScsiSessionAbort(ptr noundef %779)
  %780 = load ptr, ptr %9, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %780, i32 0, i32 10
  %782 = load ptr, ptr %781, align 8, !tbaa !64
  call void @FreePool(ptr noundef %782)
  %783 = load ptr, ptr %9, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %783, i32 0, i32 10
  store ptr null, ptr %784, align 8, !tbaa !64
  %785 = load ptr, ptr @gBS, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %785, i32 0, i32 16
  %787 = load ptr, ptr %786, align 8, !tbaa !46
  %788 = load ptr, ptr %9, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %788, i32 0, i32 7
  %790 = load ptr, ptr %789, align 8, !tbaa !47
  %791 = load ptr, ptr %9, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %791, i32 0, i32 5
  %793 = call i64 %787(ptr noundef %790, ptr noundef @gEfiExtScsiPassThruProtocolGuid, ptr noundef %792)
  %794 = load ptr, ptr %9, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %794, i32 0, i32 7
  store ptr null, ptr %795, align 8, !tbaa !47
  %796 = load ptr, ptr @gBS, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %796, i32 0, i32 14
  %798 = load ptr, ptr %797, align 8, !tbaa !21
  %799 = load ptr, ptr %16, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %799, i32 0, i32 7
  %801 = load ptr, ptr %16, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %801, i32 0, i32 5
  %803 = call i64 %798(ptr noundef %800, ptr noundef @gEfiExtScsiPassThruProtocolGuid, i32 noundef 0, ptr noundef %802)
  store i64 %803, ptr %8, align 8, !tbaa !15
  %804 = load i64, ptr %8, align 8, !tbaa !15
  %805 = icmp slt i64 %804, 0
  br i1 %805, label %806, label %807

806:                                              ; preds = %776
  br label %934

807:                                              ; preds = %776
  br label %926

808:                                              ; preds = %764
  %809 = load ptr, ptr %17, align 8, !tbaa !5
  %810 = load i8, ptr %14, align 1, !tbaa !9
  %811 = zext i8 %810 to i64
  %812 = getelementptr inbounds i8, ptr %809, i64 %811
  %813 = load i8, ptr %812, align 1, !tbaa !9
  %814 = zext i8 %813 to i32
  %815 = load i8, ptr %19, align 1, !tbaa !9
  %816 = zext i8 %815 to i32
  %817 = icmp ne i32 %814, %816
  br i1 %817, label %818, label %819

818:                                              ; preds = %808
  br label %934

819:                                              ; preds = %808
  %820 = load i8, ptr %19, align 1, !tbaa !9
  %821 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %821, i32 0, i32 12
  store i8 %820, ptr %822, align 2, !tbaa !37
  %823 = load ptr, ptr @gBS, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %823, i32 0, i32 16
  %825 = load ptr, ptr %824, align 8, !tbaa !46
  %826 = load ptr, ptr %16, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %826, i32 0, i32 2
  %828 = load ptr, ptr %827, align 8, !tbaa !67
  %829 = load ptr, ptr %23, align 8, !tbaa !5
  %830 = load ptr, ptr %16, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %830, i32 0, i32 3
  %832 = call i64 %825(ptr noundef %828, ptr noundef %829, ptr noundef %831)
  %833 = load ptr, ptr %16, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %833, i32 0, i32 2
  %835 = load ptr, ptr %834, align 8, !tbaa !67
  %836 = call i64 @IScsiRemoveNic(ptr noundef %835)
  %837 = load ptr, ptr %16, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %837, i32 0, i32 10
  %839 = load ptr, ptr %838, align 8, !tbaa !64
  %840 = icmp ne ptr %839, null
  br i1 %840, label %841, label %845

841:                                              ; preds = %819
  %842 = load ptr, ptr %16, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %842, i32 0, i32 10
  %844 = load ptr, ptr %843, align 8, !tbaa !64
  call void @IScsiSessionAbort(ptr noundef %844)
  br label %845

845:                                              ; preds = %841, %819
  %846 = load ptr, ptr %16, align 8, !tbaa !5
  call void @IScsiCleanDriverData(ptr noundef %846)
  br label %847

847:                                              ; preds = %845
  br label %862

848:                                              ; preds = %759
  %849 = load ptr, ptr %17, align 8, !tbaa !5
  %850 = load i8, ptr %14, align 1, !tbaa !9
  %851 = zext i8 %850 to i64
  %852 = getelementptr inbounds i8, ptr %849, i64 %851
  %853 = load i8, ptr %852, align 1, !tbaa !9
  %854 = zext i8 %853 to i32
  %855 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %855, i32 0, i32 12
  %857 = load i8, ptr %856, align 2, !tbaa !37
  %858 = zext i8 %857 to i32
  %859 = icmp eq i32 %854, %858
  br i1 %859, label %860, label %861

860:                                              ; preds = %848
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %861

861:                                              ; preds = %860, %848
  br label %862

862:                                              ; preds = %861, %847
  br label %863

863:                                              ; preds = %862, %714, %709
  %864 = load i8, ptr %26, align 1, !tbaa !9
  %865 = icmp ne i8 %864, 0
  br i1 %865, label %866, label %872

866:                                              ; preds = %863
  %867 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %867, i32 0, i32 6
  store i8 1, ptr %868, align 4, !tbaa !25
  %869 = load i8, ptr %19, align 1, !tbaa !9
  %870 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %870, i32 0, i32 12
  store i8 %869, ptr %871, align 2, !tbaa !37
  br label %872

872:                                              ; preds = %866, %863
  %873 = load ptr, ptr %9, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %873, i32 0, i32 10
  %875 = load ptr, ptr %874, align 8, !tbaa !64
  %876 = call ptr @IScsiGetTcpConnDevicePath(ptr noundef %875)
  %877 = load ptr, ptr %9, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %877, i32 0, i32 8
  store ptr %876, ptr %878, align 8, !tbaa !68
  %879 = load ptr, ptr %9, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %879, i32 0, i32 8
  %881 = load ptr, ptr %880, align 8, !tbaa !68
  %882 = icmp eq ptr %881, null
  br i1 %882, label %883, label %884

883:                                              ; preds = %872
  store i64 -9223372036854775801, ptr %8, align 8, !tbaa !15
  br label %934

884:                                              ; preds = %872
  %885 = load ptr, ptr @gBS, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %885, i32 0, i32 14
  %887 = load ptr, ptr %886, align 8, !tbaa !21
  %888 = load ptr, ptr %9, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %888, i32 0, i32 7
  %890 = load ptr, ptr %9, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %890, i32 0, i32 8
  %892 = load ptr, ptr %891, align 8, !tbaa !68
  %893 = call i64 %887(ptr noundef %889, ptr noundef @gEfiDevicePathProtocolGuid, i32 noundef 0, ptr noundef %892)
  store i64 %893, ptr %8, align 8, !tbaa !15
  %894 = load i64, ptr %8, align 8, !tbaa !15
  %895 = icmp slt i64 %894, 0
  br i1 %895, label %896, label %897

896:                                              ; preds = %884
  br label %934

897:                                              ; preds = %884
  %898 = load ptr, ptr @gBS, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %898, i32 0, i32 33
  %900 = load ptr, ptr %899, align 8, !tbaa !10
  %901 = load ptr, ptr %9, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %901, i32 0, i32 9
  %903 = load ptr, ptr %902, align 8, !tbaa !16
  %904 = load ptr, ptr %28, align 8, !tbaa !5
  %905 = load ptr, ptr %5, align 8, !tbaa !5
  %906 = load ptr, ptr %9, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %906, i32 0, i32 7
  %908 = load ptr, ptr %907, align 8, !tbaa !47
  %909 = call i64 %900(ptr noundef %903, ptr noundef %904, ptr noundef %27, ptr noundef %905, ptr noundef %908, i32 noundef 8)
  store i64 %909, ptr %8, align 8, !tbaa !15
  %910 = load i64, ptr %8, align 8, !tbaa !15
  %911 = icmp slt i64 %910, 0
  br i1 %911, label %912, label %925

912:                                              ; preds = %897
  %913 = load ptr, ptr @gBS, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.EFI_BOOT_SERVICES, ptr %913, i32 0, i32 40
  %915 = load ptr, ptr %914, align 8, !tbaa !69
  %916 = load ptr, ptr %9, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %916, i32 0, i32 7
  %918 = load ptr, ptr %917, align 8, !tbaa !47
  %919 = load ptr, ptr %9, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %919, i32 0, i32 5
  %921 = load ptr, ptr %9, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %921, i32 0, i32 8
  %923 = load ptr, ptr %922, align 8, !tbaa !68
  %924 = call i64 (ptr, ...) %915(ptr noundef %918, ptr noundef @gEfiExtScsiPassThruProtocolGuid, ptr noundef %920, ptr noundef @gEfiDevicePathProtocolGuid, ptr noundef %923, ptr noundef null)
  br label %934

925:                                              ; preds = %897
  br label %926

926:                                              ; preds = %925, %807, %707, %183
  %927 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.ISCSI_PRIVATE_DATA, ptr %927, i32 0, i32 12
  %929 = load i8, ptr %928, align 2, !tbaa !37
  %930 = zext i8 %929 to i32
  %931 = icmp ne i32 %930, 0
  br i1 %931, label %932, label %933

932:                                              ; preds = %926
  call void @IScsiPublishIbft()
  br label %933

933:                                              ; preds = %932, %926
  store i64 0, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

934:                                              ; preds = %912, %896, %883, %818, %806, %724, %708, %706, %493, %327, %314, %281, %191, %172, %129, %113, %102, %88
  %935 = load ptr, ptr %9, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %935, i32 0, i32 10
  %937 = load ptr, ptr %936, align 8, !tbaa !64
  %938 = icmp ne ptr %937, null
  br i1 %938, label %939, label %943

939:                                              ; preds = %934
  %940 = load ptr, ptr %9, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct._ISCSI_DRIVER_DATA, ptr %940, i32 0, i32 10
  %942 = load ptr, ptr %941, align 8, !tbaa !64
  call void @IScsiSessionAbort(ptr noundef %942)
  br label %943

943:                                              ; preds = %939, %934
  %944 = load i64, ptr %8, align 8, !tbaa !15
  store i64 %944, ptr %4, align 8
  store i32 1, ptr %29, align 4
  br label %945

945:                                              ; preds = %943, %933, %78, %70, %64, %52, %39
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 192, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 1, 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
  %946 = load i64, ptr %4, align 8
  ret i64 %946
}

declare i64 @IScsiAddNic(ptr noundef) #1

declare ptr @IScsiCreateDriverData(ptr noundef, ptr noundef) #1

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

declare i64 @IScsiGetConfigData(ptr noundef) #1

declare zeroext i8 @DebugAssertEnabled() #1

declare zeroext i8 @DebugPrintEnabled() #1

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) #1

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

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

declare void @FreePool(ptr noundef) #1

declare ptr @AllocateZeroPool(i64 noundef) #1

declare ptr @AsciiStrToUnicodeStr(ptr noundef, ptr noundef) #1

declare i64 @UnicodeSPrint(ptr noundef, i64 noundef, ptr noundef, ...) #1

declare void @IScsiSessionInit(ptr noundef, i8 noundef zeroext) #1

declare i64 @IScsiSessionLogin(ptr noundef) #1

declare i64 @IScsiSessionReLogin(ptr noundef) #1

declare void @IScsiSessionAbort(ptr noundef) #1

declare ptr @IScsiGetVariableAndSize(ptr noundef, ptr noundef, ptr noundef) #1

declare i64 @IScsiRemoveNic(ptr noundef) #1

declare void @IScsiCleanDriverData(ptr noundef) #1

declare ptr @IScsiGetTcpConnDevicePath(ptr noundef) #1

declare void @IScsiPublishIbft() #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 = !{!7, !7, i64 0}
!10 = !{!11, !6, i64 280}
!11 = !{!"", !12, 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}
!12 = !{!"", !13, i64 0, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!13, !13, i64 0}
!16 = !{!17, !6, i64 136}
!17 = !{!"_ISCSI_DRIVER_DATA", !14, i64 0, !6, i64 8, !6, i64 16, !18, i64 24, !6, i64 32, !19, i64 40, !20, i64 104, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144}
!18 = !{!"_ISCSI_PRIVATE_PROTOCOL", !14, i64 0}
!19 = !{!"_EFI_EXT_SCSI_PASS_THRU_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!20 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8}
!21 = !{!11, !6, i64 128}
!22 = !{!23, !7, i64 467}
!23 = !{!"", !7, i64 0, !24, i64 448, !7, i64 464, !7, i64 465, !7, i64 466, !7, i64 467, !7, i64 468, !7, i64 469, !7, i64 470, !7, i64 471, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 475, !24, i64 480, !7, i64 496, !13, i64 720, !6, i64 728}
!24 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!25 = !{!23, !7, i64 468}
!26 = !{!23, !7, i64 469}
!27 = !{!23, !6, i64 480}
!28 = !{!29, !7, i64 268}
!29 = !{!"_ISCSI_ATTEMPT_CONFIG_NVDATA", !24, i64 0, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19, !7, i64 20, !7, i64 21, !30, i64 22, !30, i64 24, !7, i64 26, !7, i64 122, !7, i64 218, !7, i64 234, !7, i64 250, !31, i64 266, !7, i64 566, !7, i64 567}
!30 = !{!"short", !7, i64 0}
!31 = !{!"_ISCSI_SESSION_CONFIG_NVDATA", !30, i64 0, !7, i64 2, !7, i64 3, !7, i64 4, !32, i64 20, !7, i64 24, !7, i64 40, !7, i64 41, !7, i64 42, !7, i64 266, !7, i64 282, !7, i64 283, !30, i64 291, !7, i64 293, !7, i64 294}
!32 = !{!"", !7, i64 0}
!33 = !{!24, !6, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!29, !7, i64 17}
!37 = !{!23, !7, i64 474}
!38 = !{!11, !6, i64 312}
!39 = !{!11, !6, i64 152}
!40 = !{!41, !7, i64 0}
!41 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2}
!42 = !{!41, !7, i64 1}
!43 = distinct !{!43, !35}
!44 = distinct !{!44, !35}
!45 = !{!17, !14, i64 0}
!46 = !{!11, !6, i64 144}
!47 = !{!17, !6, i64 120}
!48 = !{!29, !7, i64 16}
!49 = !{!23, !7, i64 465}
!50 = !{!29, !7, i64 20}
!51 = !{!29, !7, i64 306}
!52 = !{!29, !7, i64 18}
!53 = !{!23, !7, i64 473}
!54 = !{!29, !7, i64 269}
!55 = !{!29, !7, i64 21}
!56 = !{!57, !6, i64 8}
!57 = !{!"_ISCSI_SESSION", !14, i64 0, !6, i64 8, !6, i64 16, !7, i64 24, !7, i64 32, !7, i64 2120, !7, i64 2121, !30, i64 2128, !14, i64 2132, !14, i64 2136, !14, i64 2140, !14, i64 2144, !30, i64 2148, !24, i64 2152, !14, i64 2168, !24, i64 2176, !30, i64 2192, !14, i64 2196, !7, i64 2200, !7, i64 2201, !14, i64 2204, !14, i64 2208, !14, i64 2212, !14, i64 2216, !30, i64 2220, !7, i64 2222, !7, i64 2223, !7, i64 2224}
!58 = !{!57, !6, i64 16}
!59 = !{!29, !7, i64 566}
!60 = !{!57, !7, i64 24}
!61 = !{!29, !7, i64 19}
!62 = !{!63, !6, i64 88}
!63 = !{!"", !12, 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}
!64 = !{!17, !6, i64 144}
!65 = distinct !{!65, !35}
!66 = distinct !{!66, !35}
!67 = !{!17, !6, i64 16}
!68 = !{!17, !6, i64 128}
!69 = !{!11, !6, i64 336}


; 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] }

@gIScsiV4PrivateGuid = external dso_local global %struct.GUID, align 4
@gIScsiV6PrivateGuid = external dso_local global %struct.GUID, align 4
@mPrivate = external dso_local local_unnamed_addr global ptr, align 8
@gEfiTcp4ServiceBindingProtocolGuid = external global %struct.GUID, align 4
@gEfiTcp6ServiceBindingProtocolGuid = external global %struct.GUID, align 4
@gBS = external local_unnamed_addr global ptr, align 8
@gEfiTcp4ProtocolGuid = external global %struct.GUID, align 4
@gEfiTcp6ProtocolGuid = external global %struct.GUID, align 4
@gEfiExtScsiPassThruProtocolGuid = external global %struct.GUID, align 4
@gEfiDevicePathProtocolGuid = external global %struct.GUID, align 4
@.str = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i32], align 4
@gRT = external local_unnamed_addr global ptr, align 8
@gEfiIScsiInitiatorNameProtocolGuid = external global %struct.GUID, align 4
@.str.5 = external hidden unnamed_addr constant [13 x i32], align 4
@gIScsiConfigGuid = external global %struct.GUID, align 4

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

declare zeroext i8 @IsDevicePathEnd(ptr noundef) local_unnamed_addr #1

declare ptr @NextDevicePathNode(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local i64 @IScsiStart(ptr noundef %0, ptr noundef %1, i8 noundef zeroext %2) local_unnamed_addr #2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca [96 x i16], align 16
  %11 = 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 192, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #3
  %12 = icmp ne i8 %2, 4
  br i1 %12, label %13, label %15

13:                                               ; preds = %3
  %14 = icmp eq i8 %2, 6
  br i1 %14, label %15, label %409

15:                                               ; preds = %13, %3
  %.0168 = phi ptr [ @gIScsiV4PrivateGuid, %3 ], [ @gIScsiV6PrivateGuid, %13 ]
  %.0167 = phi ptr [ @gEfiTcp4ServiceBindingProtocolGuid, %3 ], [ @gEfiTcp6ServiceBindingProtocolGuid, %13 ]
  %.0 = phi ptr [ @gEfiTcp4ProtocolGuid, %3 ], [ @gEfiTcp6ProtocolGuid, %13 ]
  %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 = tail call i64 %18(ptr noundef %1, ptr noundef nonnull %.0168, ptr noundef null, ptr noundef %0, ptr noundef %1, i32 noundef 4) #3
  %20 = icmp slt i64 %19, 0
  br i1 %20, label %21, label %409

21:                                               ; preds = %15
  %22 = load ptr, ptr @gBS, align 8, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %22, i64 280
  %24 = load ptr, ptr %23, align 8, !tbaa !9
  %25 = tail call i64 %24(ptr noundef %1, ptr noundef nonnull %.0167, ptr noundef null, ptr noundef %0, ptr noundef %1, i32 noundef 4) #3
  %26 = icmp slt i64 %25, 0
  br i1 %26, label %409, label %27

27:                                               ; preds = %21
  %28 = tail call i64 @IScsiAddNic(ptr noundef %1) #3
  %29 = icmp slt i64 %28, 0
  br i1 %29, label %409, label %30

30:                                               ; preds = %27
  %31 = tail call ptr @IScsiCreateDriverData(ptr noundef %0, ptr noundef %1) #3
  %32 = icmp eq ptr %31, null
  br i1 %32, label %409, label %33

33:                                               ; preds = %30
  %34 = getelementptr inbounds i8, ptr %31, i64 136
  %35 = tail call i64 @NetLibCreateServiceChild(ptr noundef %1, ptr noundef %0, ptr noundef nonnull %.0167, ptr noundef nonnull %34) #3
  %36 = icmp slt i64 %35, 0
  br i1 %36, label %.loopexit, label %37

37:                                               ; preds = %33
  %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 %34, align 8, !tbaa !14
  %42 = call i64 %40(ptr noundef %41, ptr noundef nonnull %.0, ptr noundef nonnull %11, ptr noundef %0, ptr noundef %1, i32 noundef 16) #3
  %43 = icmp slt i64 %42, 0
  br i1 %43, label %.loopexit, label %44

44:                                               ; preds = %37
  %45 = load ptr, ptr @gBS, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %45, i64 128
  %47 = load ptr, ptr %46, align 8, !tbaa !19
  %48 = getelementptr inbounds i8, ptr %31, i64 24
  %49 = call i64 %47(ptr noundef nonnull %4, ptr noundef nonnull %.0168, i32 noundef 0, ptr noundef nonnull %48) #3
  %50 = icmp slt i64 %49, 0
  br i1 %50, label %.loopexit, label %51

51:                                               ; preds = %44
  %52 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %52, i64 467
  %. = zext i1 %12 to i8
  store i8 %., ptr %53, align 1, !tbaa !20
  %54 = call i64 @IScsiGetConfigData(ptr noundef nonnull %31) #3
  %55 = icmp slt i64 %54, 0
  br i1 %55, label %.loopexit, label %56

56:                                               ; preds = %51
  %57 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i64 468
  %59 = load i8, ptr %58, align 4, !tbaa !23
  %.not = icmp eq i8 %59, 0
  br i1 %.not, label %145, label %60

60:                                               ; preds = %56
  %61 = getelementptr inbounds i8, ptr %57, i64 469
  %62 = load i8, ptr %61, align 1, !tbaa !24
  %.not212 = icmp eq i8 %62, 0
  br i1 %.not212, label %145, label %63

63:                                               ; preds = %60
  %64 = getelementptr inbounds i8, ptr %57, i64 480
  %.0180255 = load ptr, ptr %64, align 8, !tbaa !25
  %.not213256 = icmp eq ptr %.0180255, %64
  br i1 %.not213256, label %.loopexit, label %.lr.ph

65:                                               ; preds = %.lr.ph
  %.0180 = load ptr, ptr %.0180257, align 8, !tbaa !25
  %.not213 = icmp eq ptr %.0180, %64
  br i1 %.not213, label %.thread, label %.lr.ph, !llvm.loop !26

.lr.ph:                                           ; preds = %63, %65
  %.0180257 = phi ptr [ %.0180, %65 ], [ %.0180255, %63 ]
  %66 = getelementptr inbounds i8, ptr %.0180257, i64 268
  %67 = load i8, ptr %66, align 1, !tbaa !28
  %68 = icmp eq i8 %67, 2
  br i1 %68, label %.thread, label %65, !llvm.loop !26

.thread:                                          ; preds = %.lr.ph, %65
  %69 = getelementptr inbounds i8, ptr %.0180257, i64 17
  %70 = load i8, ptr %69, align 1, !tbaa !33
  %71 = getelementptr inbounds i8, ptr %57, i64 474
  %72 = load i8, ptr %71, align 2, !tbaa !34
  %73 = icmp eq i8 %70, %72
  br i1 %73, label %401, label %74

74:                                               ; preds = %.thread
  %75 = load ptr, ptr @gBS, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 312
  %77 = load ptr, ptr %76, align 8, !tbaa !35
  %78 = call i64 %77(i32 noundef 2, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %7) #3
  %79 = icmp slt i64 %78, 0
  br i1 %79, label %.loopexit, label %80

80:                                               ; preds = %74
  store ptr null, ptr %5, align 8, !tbaa !5
  %81 = load i64, ptr %8, align 8, !tbaa !36
  %.not284 = icmp eq i64 %81, 0
  br i1 %.not284, label %._crit_edge263, label %.lr.ph262

.lr.ph262:                                        ; preds = %80, %.loopexit252
  %82 = phi i64 [ %121, %.loopexit252 ], [ 0, %80 ]
  %.0172260 = phi i8 [ %120, %.loopexit252 ], [ 0, %80 ]
  %83 = load ptr, ptr @gBS, align 8, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %83, i64 152
  %85 = load ptr, ptr %84, align 8, !tbaa !37
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds ptr, ptr %86, i64 %82
  %88 = load ptr, ptr %87, align 8, !tbaa !5
  %89 = call i64 %85(ptr noundef %88, ptr noundef nonnull @gEfiDevicePathProtocolGuid, ptr noundef nonnull %9) #3
  %90 = icmp slt i64 %89, 0
  br i1 %90, label %.loopexit252, label %.preheader251

.preheader251:                                    ; preds = %.lr.ph262
  %91 = load ptr, ptr %9, align 8, !tbaa !5
  %92 = call zeroext i8 @IsDevicePathEnd(ptr noundef %91) #3
  %.not240258 = icmp eq i8 %92, 0
  br i1 %.not240258, label %.lr.ph259, label %.loopexit252

.lr.ph259:                                        ; preds = %.preheader251, %117
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = load i8, ptr %93, align 1, !tbaa !38
  %95 = icmp eq i8 %94, 3
  br i1 %95, label %96, label %117

96:                                               ; preds = %.lr.ph259
  %97 = getelementptr inbounds i8, ptr %93, i64 1
  %98 = load i8, ptr %97, align 1, !tbaa !40
  %99 = icmp eq i8 %98, 11
  br i1 %99, label %100, label %117

100:                                              ; preds = %96
  %101 = load ptr, ptr @gBS, align 8, !tbaa !5
  %102 = getelementptr inbounds i8, ptr %101, i64 152
  %103 = load ptr, ptr %102, align 8, !tbaa !37
  %104 = load ptr, ptr %7, align 8, !tbaa !5
  %105 = getelementptr inbounds ptr, ptr %104, i64 %82
  %106 = load ptr, ptr %105, align 8, !tbaa !5
  %107 = call i64 %103(ptr noundef %106, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, ptr noundef nonnull %5) #3
  %108 = call zeroext i8 @DebugAssertEnabled() #3
  %109 = icmp ne i8 %108, 0
  %110 = icmp slt i64 %107, 0
  %or.cond3 = select i1 %109, i1 %110, i1 false
  br i1 %or.cond3, label %111, label %.loopexit252

111:                                              ; preds = %100
  %112 = call zeroext i8 @DebugPrintEnabled() #3
  %.not241 = icmp eq i8 %112, 0
  br i1 %.not241, label %116, label %113

113:                                              ; preds = %111
  %114 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #3
  %.not242 = icmp eq i8 %114, 0
  br i1 %.not242, label %116, label %115

115:                                              ; preds = %113
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str, i64 noundef %107) #3
  br label %116

116:                                              ; preds = %113, %115, %111
  call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 400, ptr noundef nonnull @.str.2) #3
  br label %.loopexit252

117:                                              ; preds = %96, %.lr.ph259
  %118 = call ptr @NextDevicePathNode(ptr noundef nonnull %93) #3
  store ptr %118, ptr %9, align 8, !tbaa !5
  %119 = call zeroext i8 @IsDevicePathEnd(ptr noundef %118) #3
  %.not240 = icmp eq i8 %119, 0
  br i1 %.not240, label %.lr.ph259, label %.loopexit252, !llvm.loop !41

.loopexit252:                                     ; preds = %117, %.preheader251, %116, %100, %.lr.ph262
  %120 = add i8 %.0172260, 1
  %121 = zext i8 %120 to i64
  %122 = load i64, ptr %8, align 8, !tbaa !36
  %123 = icmp ugt i64 %122, %121
  %124 = load ptr, ptr %5, align 8
  %125 = icmp eq ptr %124, null
  %126 = select i1 %123, i1 %125, i1 false
  br i1 %126, label %.lr.ph262, label %._crit_edge263, !llvm.loop !42

._crit_edge263:                                   ; preds = %.loopexit252, %80
  %127 = load ptr, ptr %7, align 8, !tbaa !5
  call void @FreePool(ptr noundef %127) #3
  %128 = load ptr, ptr %5, align 8, !tbaa !5
  %129 = icmp eq ptr %128, null
  br i1 %129, label %.loopexit, label %130

130:                                              ; preds = %._crit_edge263
  %131 = call zeroext i8 @DebugAssertEnabled() #3
  %.not214 = icmp eq i8 %131, 0
  %.pre = load ptr, ptr %5, align 8, !tbaa !5
  %.pre290 = ptrtoint ptr %.pre to i64
  %.pre291 = add i64 %.pre290, -40
  %.pre293 = inttoptr i64 %.pre291 to ptr
  br i1 %.not214, label %._crit_edge289, label %132

132:                                              ; preds = %130
  %133 = load i32, ptr %.pre293, align 8, !tbaa !43
  %.not215 = icmp eq i32 %133, 1094996809
  br i1 %.not215, label %._crit_edge289, label %134

134:                                              ; preds = %132
  call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 415, ptr noundef nonnull @.str.3) #3
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  br label %._crit_edge289

._crit_edge289:                                   ; preds = %130, %132, %134
  %136 = phi ptr [ %135, %134 ], [ %.pre293, %132 ], [ %.pre293, %130 ]
  %137 = load ptr, ptr @gBS, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %137, i64 144
  %139 = load ptr, ptr %138, align 8, !tbaa !44
  %140 = getelementptr inbounds i8, ptr %136, i64 120
  %141 = load ptr, ptr %140, align 8, !tbaa !45
  %142 = getelementptr inbounds i8, ptr %136, i64 40
  %143 = call i64 %139(ptr noundef %141, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, ptr noundef nonnull %142) #3
  %144 = icmp slt i64 %143, 0
  br i1 %144, label %.loopexit, label %145

145:                                              ; preds = %._crit_edge289, %60, %56
  %.0171 = phi ptr [ %136, %._crit_edge289 ], [ null, %60 ], [ null, %56 ]
  %146 = load ptr, ptr @gBS, align 8, !tbaa !5
  %147 = getelementptr inbounds i8, ptr %146, i64 128
  %148 = load ptr, ptr %147, align 8, !tbaa !19
  %149 = getelementptr inbounds i8, ptr %31, i64 120
  %150 = getelementptr inbounds i8, ptr %31, i64 40
  %151 = call i64 %148(ptr noundef nonnull %149, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, i32 noundef 0, ptr noundef nonnull %150) #3
  %152 = icmp slt i64 %151, 0
  br i1 %152, label %.loopexit, label %153

153:                                              ; preds = %145
  %154 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %154, i64 480
  %156 = load ptr, ptr %155, align 8, !tbaa !46
  %.not216265 = icmp eq ptr %156, %155
  br i1 %.not216265, label %._crit_edge272, label %.lr.ph271

.lr.ph271:                                        ; preds = %153
  %157 = getelementptr inbounds i8, ptr %31, i64 144
  br label %158

158:                                              ; preds = %.lr.ph271, %278
  %159 = phi ptr [ %154, %.lr.ph271 ], [ %279, %278 ]
  %.0169268 = phi i8 [ 0, %.lr.ph271 ], [ %.1, %278 ]
  %.0174267 = phi i64 [ %151, %.lr.ph271 ], [ %.2176, %278 ]
  %.1181266 = phi ptr [ %156, %.lr.ph271 ], [ %.0179269, %278 ]
  %.0179269 = load ptr, ptr %.1181266, align 8, !tbaa !25
  %160 = getelementptr inbounds i8, ptr %.1181266, i64 16
  %161 = load i8, ptr %160, align 1, !tbaa !47
  %162 = getelementptr inbounds i8, ptr %159, i64 465
  %163 = load i8, ptr %162, align 1, !tbaa !48
  %.not217 = icmp eq i8 %161, %163
  br i1 %.not217, label %164, label %278

164:                                              ; preds = %158
  %165 = getelementptr inbounds i8, ptr %.1181266, i64 268
  %166 = load i8, ptr %165, align 1, !tbaa !28
  %167 = icmp eq i8 %166, 0
  br i1 %167, label %278, label %168

168:                                              ; preds = %164
  %169 = getelementptr inbounds i8, ptr %.1181266, i64 20
  %170 = load i8, ptr %169, align 1, !tbaa !49
  %.not218 = icmp eq i8 %170, 0
  br i1 %.not218, label %171, label %278

171:                                              ; preds = %168
  %172 = getelementptr inbounds i8, ptr %159, i64 469
  %173 = load i8, ptr %172, align 1, !tbaa !24
  %.not219 = icmp eq i8 %173, 0
  %or.cond250.v = select i1 %.not219, i8 1, i8 2
  %or.cond250.not = icmp eq i8 %166, %or.cond250.v
  br i1 %or.cond250.not, label %174, label %278

174:                                              ; preds = %171
  %175 = getelementptr inbounds i8, ptr %.1181266, i64 306
  %176 = load i8, ptr %175, align 1, !tbaa !50
  %.not223 = icmp eq i8 %176, 0
  br i1 %.not223, label %186, label %177

177:                                              ; preds = %174
  %178 = getelementptr inbounds i8, ptr %.1181266, i64 18
  %179 = load i8, ptr %178, align 1, !tbaa !51
  %.not224 = icmp eq i8 %179, 0
  br i1 %.not224, label %180, label %186

180:                                              ; preds = %177
  br i1 %.not219, label %181, label %278

181:                                              ; preds = %180
  %182 = getelementptr inbounds i8, ptr %159, i64 473
  %183 = load i8, ptr %182, align 1, !tbaa !52
  %.not226 = icmp eq i8 %183, 0
  br i1 %.not226, label %278, label %184

184:                                              ; preds = %181
  %185 = add i8 %183, -1
  store i8 %185, ptr %182, align 1, !tbaa !52
  br label %278

186:                                              ; preds = %177, %174
  %187 = getelementptr inbounds i8, ptr %.1181266, i64 269
  %188 = load i8, ptr %187, align 1, !tbaa !53
  %189 = icmp eq i8 %188, 2
  br i1 %189, label %190, label %194

190:                                              ; preds = %186
  %191 = getelementptr inbounds i8, ptr %.1181266, i64 21
  %192 = load i8, ptr %191, align 1, !tbaa !54
  %193 = icmp eq i8 %192, 5
  br i1 %193, label %278, label %194

194:                                              ; preds = %190, %186
  %195 = getelementptr inbounds i8, ptr %159, i64 467
  %196 = load i8, ptr %195, align 1, !tbaa !20
  %.not227 = icmp eq i8 %196, 0
  br i1 %.not227, label %197, label %202

197:                                              ; preds = %194
  switch i8 %188, label %207 [
    i8 1, label %278
    i8 2, label %198
  ]

198:                                              ; preds = %197
  %199 = getelementptr inbounds i8, ptr %.1181266, i64 21
  %200 = load i8, ptr %199, align 1, !tbaa !54
  %201 = icmp eq i8 %200, 4
  br i1 %201, label %278, label %207

202:                                              ; preds = %194
  switch i8 %188, label %207 [
    i8 0, label %278
    i8 2, label %203
  ]

203:                                              ; preds = %202
  %204 = getelementptr inbounds i8, ptr %.1181266, i64 21
  %205 = load i8, ptr %204, align 1, !tbaa !54
  %206 = icmp eq i8 %205, 3
  br i1 %206, label %278, label %207

207:                                              ; preds = %202, %197, %203, %198
  %208 = call ptr @AllocateZeroPool(i64 noundef 2232) #3
  %209 = icmp eq ptr %208, null
  br i1 %209, label %.loopexit, label %210

210:                                              ; preds = %207
  %211 = getelementptr inbounds i8, ptr %208, i64 8
  store ptr %31, ptr %211, align 8, !tbaa !55
  %212 = getelementptr inbounds i8, ptr %208, i64 16
  store ptr %.1181266, ptr %212, align 8, !tbaa !57
  %213 = getelementptr inbounds i8, ptr %.1181266, i64 566
  %214 = load i8, ptr %213, align 1, !tbaa !58
  %215 = getelementptr inbounds i8, ptr %208, i64 24
  store i8 %214, ptr %215, align 8, !tbaa !59
  %216 = getelementptr inbounds i8, ptr %.1181266, i64 122
  %217 = call ptr @AsciiStrToUnicodeStr(ptr noundef nonnull %216, ptr noundef nonnull %10) #3
  %218 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %219 = getelementptr inbounds i8, ptr %.1181266, i64 17
  %220 = load i8, ptr %219, align 1, !tbaa !33
  %221 = zext i8 %220 to i64
  %222 = call i64 (ptr, i64, ptr, ...) @UnicodeSPrint(ptr noundef %218, i64 noundef 223, ptr noundef nonnull @.str.4, ptr noundef nonnull %10, i64 noundef %221) #3
  %223 = load i8, ptr %215, align 8, !tbaa !59
  %224 = icmp eq i8 %223, 1
  br i1 %224, label %225, label %228

225:                                              ; preds = %210
  %226 = getelementptr inbounds i8, ptr %.1181266, i64 567
  %227 = getelementptr inbounds i8, ptr %208, i64 32
  store ptr %226, ptr %227, align 8, !tbaa !60
  br label %228

228:                                              ; preds = %225, %210
  call void @IScsiSessionInit(ptr noundef nonnull %208, i8 noundef zeroext 0) #3
  %229 = call i64 @IScsiSessionLogin(ptr noundef nonnull %208) #3
  switch i64 %229, label %234 [
    i64 -9223372036854775795, label %230
    i64 -9223372036854775802, label %232
  ]

230:                                              ; preds = %228
  %231 = call i64 @IScsiSessionLogin(ptr noundef nonnull %208) #3
  br label %234

232:                                              ; preds = %228
  %233 = call i64 @IScsiSessionReLogin(ptr noundef nonnull %208) #3
  br label %234

234:                                              ; preds = %228, %232, %230
  %.1175 = phi i64 [ %231, %230 ], [ %233, %232 ], [ %229, %228 ]
  %235 = icmp slt i64 %.1175, 0
  br i1 %235, label %236, label %246

236:                                              ; preds = %234
  %237 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i64 469
  %239 = load i8, ptr %238, align 1, !tbaa !24
  %.not238 = icmp eq i8 %239, 0
  br i1 %.not238, label %240, label %245

240:                                              ; preds = %236
  %241 = getelementptr inbounds i8, ptr %237, i64 473
  %242 = load i8, ptr %241, align 1, !tbaa !52
  %.not239 = icmp eq i8 %242, 0
  br i1 %.not239, label %245, label %243

243:                                              ; preds = %240
  %244 = add i8 %242, -1
  store i8 %244, ptr %241, align 1, !tbaa !52
  br label %245

245:                                              ; preds = %243, %240, %236
  call void @FreePool(ptr noundef nonnull %208) #3
  br label %278

246:                                              ; preds = %234
  store i8 1, ptr %169, align 1, !tbaa !49
  %247 = load i8, ptr %215, align 8, !tbaa !59
  %248 = icmp eq i8 %247, 2
  br i1 %248, label %249, label %258

249:                                              ; preds = %246
  %250 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %251 = getelementptr inbounds i8, ptr %250, i64 469
  %252 = load i8, ptr %251, align 1, !tbaa !24
  %.not228 = icmp eq i8 %252, 0
  br i1 %.not228, label %253, label %258

253:                                              ; preds = %249
  %254 = getelementptr inbounds i8, ptr %250, i64 473
  %255 = load i8, ptr %254, align 1, !tbaa !52
  %.not229 = icmp eq i8 %255, 0
  br i1 %.not229, label %258, label %256

256:                                              ; preds = %253
  %257 = add i8 %255, -1
  store i8 %257, ptr %254, align 1, !tbaa !52
  br label %258

258:                                              ; preds = %246, %249, %253, %256
  %.sink296 = phi i8 [ 0, %256 ], [ 0, %253 ], [ 0, %249 ], [ 1, %246 ]
  %259 = getelementptr inbounds i8, ptr %.1181266, i64 19
  store i8 %.sink296, ptr %259, align 1, !tbaa !61
  %260 = load i8, ptr %187, align 1, !tbaa !53
  %261 = icmp eq i8 %260, 2
  br i1 %261, label %262, label %264

262:                                              ; preds = %258
  %263 = getelementptr inbounds i8, ptr %.1181266, i64 21
  store i8 5, ptr %263, align 1, !tbaa !54
  br label %264

264:                                              ; preds = %262, %258
  %265 = load ptr, ptr @gRT, align 8, !tbaa !5
  %266 = getelementptr inbounds i8, ptr %265, i64 88
  %267 = load ptr, ptr %266, align 8, !tbaa !62
  %268 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %269 = call i64 %267(ptr noundef %268, ptr noundef nonnull @gEfiIScsiInitiatorNameProtocolGuid, i32 noundef 3, i64 noundef 856, ptr noundef nonnull %.1181266) #3
  %270 = load ptr, ptr %157, align 8, !tbaa !64
  %271 = icmp eq ptr %270, null
  br i1 %271, label %272, label %277

272:                                              ; preds = %264
  store ptr %208, ptr %157, align 8, !tbaa !64
  %273 = load i8, ptr %219, align 1, !tbaa !33
  %274 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %274, i64 469
  %276 = load i8, ptr %275, align 1, !tbaa !24
  %.not230 = icmp eq i8 %276, 0
  br i1 %.not230, label %278, label %._crit_edge272

277:                                              ; preds = %264
  call void @IScsiSessionAbort(ptr noundef nonnull %208) #3
  call void @FreePool(ptr noundef nonnull %208) #3
  br label %278

278:                                              ; preds = %202, %197, %171, %245, %272, %277, %203, %198, %190, %180, %181, %184, %158, %164, %168
  %.2176 = phi i64 [ %.0174267, %158 ], [ %.0174267, %164 ], [ %.0174267, %168 ], [ %.0174267, %190 ], [ %.0174267, %202 ], [ %.0174267, %203 ], [ %.1175, %245 ], [ %.1175, %272 ], [ %.1175, %277 ], [ %.0174267, %197 ], [ %.0174267, %198 ], [ %.0174267, %180 ], [ %.0174267, %184 ], [ %.0174267, %181 ], [ %.0174267, %171 ]
  %.1 = phi i8 [ %.0169268, %158 ], [ %.0169268, %164 ], [ %.0169268, %168 ], [ %.0169268, %190 ], [ %.0169268, %202 ], [ %.0169268, %203 ], [ %.0169268, %245 ], [ %273, %272 ], [ %.0169268, %277 ], [ %.0169268, %197 ], [ %.0169268, %198 ], [ %.0169268, %180 ], [ %.0169268, %184 ], [ %.0169268, %181 ], [ %.0169268, %171 ]
  %279 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 480
  %.not216 = icmp eq ptr %.0179269, %280
  br i1 %.not216, label %._crit_edge272, label %158, !llvm.loop !65

._crit_edge272:                                   ; preds = %278, %272, %153
  %281 = phi ptr [ %154, %153 ], [ %274, %272 ], [ %279, %278 ]
  %.3 = phi i64 [ %151, %153 ], [ %.1175, %272 ], [ %.2176, %278 ]
  %.2 = phi i8 [ 0, %153 ], [ %273, %272 ], [ %.1, %278 ]
  %282 = getelementptr inbounds i8, ptr %31, i64 144
  %283 = load ptr, ptr %282, align 8, !tbaa !64
  %284 = icmp eq ptr %283, null
  br i1 %284, label %285, label %314

285:                                              ; preds = %._crit_edge272
  %286 = load ptr, ptr @gBS, align 8, !tbaa !5
  %287 = getelementptr inbounds i8, ptr %286, i64 144
  %288 = load ptr, ptr %287, align 8, !tbaa !44
  %289 = load ptr, ptr %149, align 8, !tbaa !45
  %290 = call i64 %288(ptr noundef %289, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, ptr noundef nonnull %150) #3
  %291 = call zeroext i8 @DebugAssertEnabled() #3
  %292 = icmp ne i8 %291, 0
  %293 = icmp slt i64 %290, 0
  %or.cond5 = select i1 %292, i1 %293, i1 false
  br i1 %or.cond5, label %294, label %300

294:                                              ; preds = %285
  %295 = call zeroext i8 @DebugPrintEnabled() #3
  %.not236 = icmp eq i8 %295, 0
  br i1 %.not236, label %299, label %296

296:                                              ; preds = %294
  %297 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #3
  %.not237 = icmp eq i8 %297, 0
  br i1 %.not237, label %299, label %298

298:                                              ; preds = %296
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str, i64 noundef %290) #3
  br label %299

299:                                              ; preds = %296, %298, %294
  call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 618, ptr noundef nonnull @.str.2) #3
  br label %300

300:                                              ; preds = %299, %285
  store ptr null, ptr %149, align 8, !tbaa !45
  %301 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %301, i64 468
  %303 = load i8, ptr %302, align 4, !tbaa !23
  %304 = icmp ne i8 %303, 0
  %305 = icmp ne ptr %.0171, null
  %or.cond = and i1 %305, %304
  br i1 %or.cond, label %306, label %.loopexit

306:                                              ; preds = %300
  %307 = load ptr, ptr @gBS, align 8, !tbaa !5
  %308 = getelementptr inbounds i8, ptr %307, i64 128
  %309 = load ptr, ptr %308, align 8, !tbaa !19
  %310 = getelementptr inbounds i8, ptr %.0171, i64 120
  %311 = getelementptr inbounds i8, ptr %.0171, i64 40
  %312 = call i64 %309(ptr noundef nonnull %310, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, i32 noundef 0, ptr noundef nonnull %311) #3
  %313 = icmp slt i64 %312, 0
  br i1 %313, label %.loopexit, label %401

314:                                              ; preds = %._crit_edge272
  %315 = getelementptr inbounds i8, ptr %281, i64 468
  %316 = load i8, ptr %315, align 4, !tbaa !23
  %.not231 = icmp eq i8 %316, 0
  br i1 %.not231, label %.critedge, label %317

317:                                              ; preds = %314
  %318 = call ptr @IScsiGetVariableAndSize(ptr noundef nonnull @.str.5, ptr noundef nonnull @gIScsiConfigGuid, ptr noundef nonnull %6) #3
  %319 = icmp eq ptr %318, null
  br i1 %319, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %317
  %320 = load i64, ptr %6, align 8, !tbaa !36
  %.not285 = icmp eq i64 %320, 0
  %.pre287 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  br i1 %.not285, label %._crit_edge280, label %.lr.ph279

.lr.ph279:                                        ; preds = %.preheader
  %321 = getelementptr inbounds i8, ptr %.pre287, i64 474
  %322 = load i8, ptr %321, align 2, !tbaa !34
  br label %327

323:                                              ; preds = %327
  %324 = add i8 %.1173278, 1
  %325 = zext i8 %324 to i64
  %326 = icmp ugt i64 %320, %325
  br i1 %326, label %327, label %._crit_edge280, !llvm.loop !66

327:                                              ; preds = %.lr.ph279, %323
  %328 = phi i64 [ 0, %.lr.ph279 ], [ %325, %323 ]
  %.1173278 = phi i8 [ 0, %.lr.ph279 ], [ %324, %323 ]
  %329 = getelementptr inbounds i8, ptr %318, i64 %328
  %330 = load i8, ptr %329, align 1, !tbaa !60
  %331 = icmp eq i8 %330, %322
  %332 = icmp eq i8 %330, %.2
  %or.cond246 = select i1 %331, i1 true, i1 %332
  br i1 %or.cond246, label %._crit_edge280, label %323

._crit_edge280:                                   ; preds = %323, %327, %.preheader
  %.lcssa = phi i64 [ 0, %.preheader ], [ %328, %327 ], [ %325, %323 ]
  %333 = getelementptr inbounds i8, ptr %.pre287, i64 469
  %334 = load i8, ptr %333, align 1, !tbaa !24
  %.not232 = icmp eq i8 %334, 0
  %335 = getelementptr inbounds i8, ptr %318, i64 %.lcssa
  %336 = load i8, ptr %335, align 1, !tbaa !60
  %337 = getelementptr inbounds i8, ptr %.pre287, i64 474
  %338 = load i8, ptr %337, align 2, !tbaa !34
  %339 = icmp eq i8 %336, %338
  br i1 %.not232, label %371, label %340

340:                                              ; preds = %._crit_edge280
  br i1 %339, label %341, label %356

341:                                              ; preds = %340
  %342 = load ptr, ptr %282, align 8, !tbaa !64
  call void @IScsiSessionAbort(ptr noundef %342) #3
  %343 = load ptr, ptr %282, align 8, !tbaa !64
  call void @FreePool(ptr noundef %343) #3
  store ptr null, ptr %282, align 8, !tbaa !64
  %344 = load ptr, ptr @gBS, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i64 144
  %346 = load ptr, ptr %345, align 8, !tbaa !44
  %347 = load ptr, ptr %149, align 8, !tbaa !45
  %348 = call i64 %346(ptr noundef %347, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, ptr noundef nonnull %150) #3
  store ptr null, ptr %149, align 8, !tbaa !45
  %349 = load ptr, ptr @gBS, align 8, !tbaa !5
  %350 = getelementptr inbounds i8, ptr %349, i64 128
  %351 = load ptr, ptr %350, align 8, !tbaa !19
  %352 = getelementptr inbounds i8, ptr %.0171, i64 120
  %353 = getelementptr inbounds i8, ptr %.0171, i64 40
  %354 = call i64 %351(ptr noundef nonnull %352, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, i32 noundef 0, ptr noundef nonnull %353) #3
  %355 = icmp slt i64 %354, 0
  br i1 %355, label %.loopexit, label %401

356:                                              ; preds = %340
  %.not233 = icmp eq i8 %336, %.2
  br i1 %.not233, label %357, label %.loopexit

357:                                              ; preds = %356
  store i8 %.2, ptr %337, align 2, !tbaa !34
  %358 = load ptr, ptr @gBS, align 8, !tbaa !5
  %359 = getelementptr inbounds i8, ptr %358, i64 144
  %360 = load ptr, ptr %359, align 8, !tbaa !44
  %361 = getelementptr inbounds i8, ptr %.0171, i64 16
  %362 = load ptr, ptr %361, align 8, !tbaa !67
  %363 = getelementptr inbounds i8, ptr %.0171, i64 24
  %364 = call i64 %360(ptr noundef %362, ptr noundef nonnull %.0168, ptr noundef nonnull %363) #3
  %365 = load ptr, ptr %361, align 8, !tbaa !67
  %366 = call i64 @IScsiRemoveNic(ptr noundef %365) #3
  %367 = getelementptr inbounds i8, ptr %.0171, i64 144
  %368 = load ptr, ptr %367, align 8, !tbaa !64
  %.not234 = icmp eq ptr %368, null
  br i1 %.not234, label %370, label %369

369:                                              ; preds = %357
  call void @IScsiSessionAbort(ptr noundef nonnull %368) #3
  br label %370

370:                                              ; preds = %369, %357
  call void @IScsiCleanDriverData(ptr noundef nonnull %.0171) #3
  %.pre288 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  br label %.critedge

371:                                              ; preds = %._crit_edge280
  br i1 %339, label %375, label %.critedge

.critedge:                                        ; preds = %370, %314, %371
  %372 = phi ptr [ %.pre288, %370 ], [ %281, %314 ], [ %.pre287, %371 ]
  %373 = getelementptr inbounds i8, ptr %372, i64 468
  store i8 1, ptr %373, align 4, !tbaa !23
  %374 = getelementptr inbounds i8, ptr %372, i64 474
  store i8 %.2, ptr %374, align 2, !tbaa !34
  br label %375

375:                                              ; preds = %.critedge, %371
  %376 = load ptr, ptr %282, align 8, !tbaa !64
  %377 = call ptr @IScsiGetTcpConnDevicePath(ptr noundef %376) #3
  %378 = getelementptr inbounds i8, ptr %31, i64 128
  store ptr %377, ptr %378, align 8, !tbaa !68
  %379 = icmp eq ptr %377, null
  br i1 %379, label %.loopexit, label %380

380:                                              ; preds = %375
  %381 = load ptr, ptr @gBS, align 8, !tbaa !5
  %382 = getelementptr inbounds i8, ptr %381, i64 128
  %383 = load ptr, ptr %382, align 8, !tbaa !19
  %384 = call i64 %383(ptr noundef nonnull %149, ptr noundef nonnull @gEfiDevicePathProtocolGuid, i32 noundef 0, ptr noundef nonnull %377) #3
  %385 = icmp slt i64 %384, 0
  br i1 %385, label %.loopexit, label %386

386:                                              ; preds = %380
  %387 = load ptr, ptr @gBS, align 8, !tbaa !5
  %388 = getelementptr inbounds i8, ptr %387, i64 280
  %389 = load ptr, ptr %388, align 8, !tbaa !9
  %390 = load ptr, ptr %34, align 8, !tbaa !14
  %391 = load ptr, ptr %149, align 8, !tbaa !45
  %392 = call i64 %389(ptr noundef %390, ptr noundef nonnull %.0, ptr noundef nonnull %11, ptr noundef %0, ptr noundef %391, i32 noundef 8) #3
  %393 = icmp slt i64 %392, 0
  br i1 %393, label %394, label %401

394:                                              ; preds = %386
  %395 = load ptr, ptr @gBS, align 8, !tbaa !5
  %396 = getelementptr inbounds i8, ptr %395, i64 336
  %397 = load ptr, ptr %396, align 8, !tbaa !69
  %398 = load ptr, ptr %149, align 8, !tbaa !45
  %399 = load ptr, ptr %378, align 8, !tbaa !68
  %400 = call i64 (ptr, ...) %397(ptr noundef %398, ptr noundef nonnull @gEfiExtScsiPassThruProtocolGuid, ptr noundef nonnull %150, ptr noundef nonnull @gEfiDevicePathProtocolGuid, ptr noundef %399, ptr noundef null) #3
  br label %.loopexit

401:                                              ; preds = %386, %341, %306, %.thread
  %402 = load ptr, ptr @mPrivate, align 8, !tbaa !5
  %403 = getelementptr inbounds i8, ptr %402, i64 474
  %404 = load i8, ptr %403, align 2, !tbaa !34
  %.not243 = icmp eq i8 %404, 0
  br i1 %.not243, label %409, label %405

405:                                              ; preds = %401
  call void @IScsiPublishIbft() #3
  br label %409

.loopexit:                                        ; preds = %207, %63, %375, %300, %._crit_edge263, %380, %356, %341, %317, %306, %145, %._crit_edge289, %74, %51, %44, %37, %33, %394
  %.4 = phi i64 [ %35, %33 ], [ %42, %37 ], [ %49, %44 ], [ %54, %51 ], [ %78, %74 ], [ %143, %._crit_edge289 ], [ %151, %145 ], [ %312, %306 ], [ %.3, %317 ], [ %354, %341 ], [ %.3, %356 ], [ %384, %380 ], [ %392, %394 ], [ -9223372036854775794, %._crit_edge263 ], [ -9223372036854775794, %300 ], [ -9223372036854775801, %375 ], [ -9223372036854775794, %63 ], [ -9223372036854775799, %207 ]
  %406 = getelementptr inbounds i8, ptr %31, i64 144
  %407 = load ptr, ptr %406, align 8, !tbaa !64
  %.not244 = icmp eq ptr %407, null
  br i1 %.not244, label %409, label %408

408:                                              ; preds = %.loopexit
  call void @IScsiSessionAbort(ptr noundef nonnull %407) #3
  br label %409

409:                                              ; preds = %.loopexit, %408, %401, %405, %30, %27, %21, %15, %13
  %.0170 = phi i64 [ -9223372036854775806, %13 ], [ -9223372036854775788, %15 ], [ -9223372036854775805, %21 ], [ %28, %27 ], [ -9223372036854775799, %30 ], [ 0, %405 ], [ 0, %401 ], [ %.4, %408 ], [ %.4, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 192, 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 %.0170
}

declare i64 @IScsiAddNic(ptr noundef) local_unnamed_addr #1

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

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

declare i64 @IScsiGetConfigData(ptr noundef) local_unnamed_addr #1

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #1

declare zeroext i8 @DebugPrintEnabled() local_unnamed_addr #1

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

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

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

declare void @FreePool(ptr noundef) local_unnamed_addr #1

declare ptr @AllocateZeroPool(i64 noundef) local_unnamed_addr #1

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

declare i64 @UnicodeSPrint(ptr noundef, i64 noundef, ptr noundef, ...) local_unnamed_addr #1

declare void @IScsiSessionInit(ptr noundef, i8 noundef zeroext) local_unnamed_addr #1

declare i64 @IScsiSessionLogin(ptr noundef) local_unnamed_addr #1

declare i64 @IScsiSessionReLogin(ptr noundef) local_unnamed_addr #1

declare void @IScsiSessionAbort(ptr noundef) local_unnamed_addr #1

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

declare i64 @IScsiRemoveNic(ptr noundef) local_unnamed_addr #1

declare void @IScsiCleanDriverData(ptr noundef) local_unnamed_addr #1

declare ptr @IScsiGetTcpConnDevicePath(ptr noundef) local_unnamed_addr #1

declare void @IScsiPublishIbft() local_unnamed_addr #1

attributes #0 = { mustprogress 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, !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 136}
!15 = !{!"_ISCSI_DRIVER_DATA", !13, i64 0, !6, i64 8, !6, i64 16, !16, i64 24, !6, i64 32, !17, i64 40, !18, i64 104, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144}
!16 = !{!"_ISCSI_PRIVATE_PROTOCOL", !13, i64 0}
!17 = !{!"_EFI_EXT_SCSI_PASS_THRU_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!18 = !{!"", !13, i64 0, !13, i64 4, !13, i64 8}
!19 = !{!10, !6, i64 128}
!20 = !{!21, !7, i64 467}
!21 = !{!"", !7, i64 0, !22, i64 448, !7, i64 464, !7, i64 465, !7, i64 466, !7, i64 467, !7, i64 468, !7, i64 469, !7, i64 470, !7, i64 471, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 475, !22, i64 480, !7, i64 496, !12, i64 720, !6, i64 728}
!22 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!23 = !{!21, !7, i64 468}
!24 = !{!21, !7, i64 469}
!25 = !{!22, !6, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!29, !7, i64 268}
!29 = !{!"_ISCSI_ATTEMPT_CONFIG_NVDATA", !22, i64 0, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19, !7, i64 20, !7, i64 21, !30, i64 22, !30, i64 24, !7, i64 26, !7, i64 122, !7, i64 218, !7, i64 234, !7, i64 250, !31, i64 266, !7, i64 566, !7, i64 567}
!30 = !{!"short", !7, i64 0}
!31 = !{!"_ISCSI_SESSION_CONFIG_NVDATA", !30, i64 0, !7, i64 2, !7, i64 3, !7, i64 4, !32, i64 20, !7, i64 24, !7, i64 40, !7, i64 41, !7, i64 42, !7, i64 266, !7, i64 282, !7, i64 283, !30, i64 291, !7, i64 293, !7, i64 294}
!32 = !{!"", !7, i64 0}
!33 = !{!29, !7, i64 17}
!34 = !{!21, !7, i64 474}
!35 = !{!10, !6, i64 312}
!36 = !{!12, !12, i64 0}
!37 = !{!10, !6, i64 152}
!38 = !{!39, !7, i64 0}
!39 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2}
!40 = !{!39, !7, i64 1}
!41 = distinct !{!41, !27}
!42 = distinct !{!42, !27}
!43 = !{!15, !13, i64 0}
!44 = !{!10, !6, i64 144}
!45 = !{!15, !6, i64 120}
!46 = !{!21, !6, i64 480}
!47 = !{!29, !7, i64 16}
!48 = !{!21, !7, i64 465}
!49 = !{!29, !7, i64 20}
!50 = !{!29, !7, i64 306}
!51 = !{!29, !7, i64 18}
!52 = !{!21, !7, i64 473}
!53 = !{!29, !7, i64 269}
!54 = !{!29, !7, i64 21}
!55 = !{!56, !6, i64 8}
!56 = !{!"_ISCSI_SESSION", !13, i64 0, !6, i64 8, !6, i64 16, !7, i64 24, !7, i64 32, !7, i64 2120, !7, i64 2121, !30, i64 2128, !13, i64 2132, !13, i64 2136, !13, i64 2140, !13, i64 2144, !30, i64 2148, !22, i64 2152, !13, i64 2168, !22, i64 2176, !30, i64 2192, !13, i64 2196, !7, i64 2200, !7, i64 2201, !13, i64 2204, !13, i64 2208, !13, i64 2212, !13, i64 2216, !30, i64 2220, !7, i64 2222, !7, i64 2223, !7, i64 2224}
!57 = !{!56, !6, i64 16}
!58 = !{!29, !7, i64 566}
!59 = !{!56, !7, i64 24}
!60 = !{!7, !7, i64 0}
!61 = !{!29, !7, i64 19}
!62 = !{!63, !6, i64 88}
!63 = !{!"", !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}
!64 = !{!15, !6, i64 144}
!65 = distinct !{!65, !27}
!66 = distinct !{!66, !27}
!67 = !{!15, !6, i64 16}
!68 = !{!15, !6, i64 128}
!69 = !{!10, !6, i64 336}


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