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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct._EFI_HII_SIBT_EXT2_BLOCK = type { %struct.EFI_HII_STRING_BLOCK, i8, i16 }
%struct.EFI_HII_STRING_BLOCK = type { i8 }
%struct._HII_DATABASE_PRIVATE_DATA = type { i64, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._EFI_HII_FONT_PROTOCOL, %struct._EFI_HII_IMAGE_PROTOCOL, %struct._EFI_HII_STRING_PROTOCOL, %struct._EFI_HII_DATABASE_PROTOCOL, %struct._EFI_HII_CONFIG_ROUTING_PROTOCOL, %struct._LIST_ENTRY, i64, %struct._LIST_ENTRY, i64, %struct.GUID, ptr }
%struct._EFI_HII_FONT_PROTOCOL = type { ptr, ptr, ptr, ptr }
%struct._EFI_HII_IMAGE_PROTOCOL = type { ptr, ptr, ptr, ptr, ptr }
%struct._EFI_HII_STRING_PROTOCOL = type { ptr, ptr, ptr, ptr, ptr }
%struct._EFI_HII_DATABASE_PROTOCOL = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct._EFI_HII_CONFIG_ROUTING_PROTOCOL = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct._LIST_ENTRY = type { ptr, ptr }
%struct.GUID = type { i32, i16, i16, [8 x i8] }
%struct._HII_DATABASE_RECORD = type { i64, ptr, ptr, ptr, %struct._LIST_ENTRY }
%struct._HII_DATABASE_PACKAGE_LIST_INSTANCE = type { %struct.EFI_HII_PACKAGE_LIST_HEADER, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, ptr, %struct._LIST_ENTRY, ptr }
%struct.EFI_HII_PACKAGE_LIST_HEADER = type { %struct.GUID, i32 }
%struct._HII_STRING_PACKAGE_INSTANCE = type { i64, ptr, ptr, %struct._LIST_ENTRY, %struct._LIST_ENTRY, i8, i16 }
%struct._EFI_HII_STRING_PACKAGE_HDR = type <{ %struct.EFI_HII_PACKAGE_HEADER, i32, i32, [16 x i16], i16, [1 x i8] }>
%struct.EFI_HII_PACKAGE_HEADER = type { i32 }
%struct._HII_FONT_INFO = type { i64, %struct._LIST_ENTRY, ptr, i8 }
%struct.EFI_FONT_INFO = type { i32, i16, [1 x i16] }

@mLanguageWindow = external dso_local global [16 x i16], align 16
@.str = external hidden unnamed_addr constant [148 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

declare zeroext i8 @DebugAssertEnabled() #2

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

declare ptr @AllocateZeroPool(i64 noundef) #2

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

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

declare i64 @AsciiStrSize(ptr noundef) #2

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

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

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

declare void @FreePool(ptr noundef) #2

declare i64 @StrSize(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i64 @HiiNewString(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #0 {
  %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 ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %struct._EFI_HII_SIBT_EXT2_BLOCK, align 1
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i16, align 2
  %34 = alloca i16, align 2
  %35 = alloca i16, align 2
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #3
  %39 = load ptr, ptr %9, align 8, !tbaa !5
  %40 = icmp eq ptr %39, null
  br i1 %40, label %53, label %41

41:                                               ; preds = %7
  %42 = load ptr, ptr %14, align 8, !tbaa !5
  %43 = icmp eq ptr %42, null
  br i1 %43, label %53, label %44

44:                                               ; preds = %41
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = icmp eq ptr %45, null
  br i1 %46, label %53, label %47

47:                                               ; preds = %44
  %48 = load ptr, ptr %12, align 8, !tbaa !5
  %49 = icmp eq ptr %48, null
  br i1 %49, label %53, label %50

50:                                               ; preds = %47
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = icmp eq ptr %51, null
  br i1 %52, label %53, label %54

53:                                               ; preds = %50, %47, %44, %41, %7
  store i64 -9223372036854775806, ptr %8, align 8
  store i32 1, ptr %38, align 4
  br label %810

54:                                               ; preds = %50
  %55 = load ptr, ptr %10, align 8, !tbaa !5
  %56 = call zeroext i8 @IsHiiHandleValid(ptr noundef %55)
  %57 = icmp ne i8 %56, 0
  br i1 %57, label %59, label %58

58:                                               ; preds = %54
  store i64 -9223372036854775794, ptr %8, align 8
  store i32 1, ptr %38, align 4
  br label %810

59:                                               ; preds = %54
  %60 = call zeroext i8 @DebugAssertEnabled()
  %61 = zext i8 %60 to i32
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %73

63:                                               ; preds = %59
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = ptrtoint ptr %64 to i64
  %66 = sub i64 %65, ptrtoint (ptr getelementptr inbounds (%struct._HII_DATABASE_PRIVATE_DATA, ptr null, i32 0, i32 5) to i64)
  %67 = inttoptr i64 %66 to ptr
  %68 = getelementptr inbounds %struct._HII_DATABASE_PRIVATE_DATA, ptr %67, i32 0, i32 0
  %69 = load i64, ptr %68, align 8, !tbaa !9
  %70 = icmp ne i64 %69, 1883531592
  br i1 %70, label %71, label %73

71:                                               ; preds = %63
  call void @DebugAssert(ptr noundef @.str, i64 noundef 1184, ptr noundef @.str.2)
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  br label %78

73:                                               ; preds = %63, %59
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = ptrtoint ptr %74 to i64
  %76 = sub i64 %75, ptrtoint (ptr getelementptr inbounds (%struct._HII_DATABASE_PRIVATE_DATA, ptr null, i32 0, i32 5) to i64)
  %77 = inttoptr i64 %76 to ptr
  br label %78

78:                                               ; preds = %73, %71
  %79 = phi ptr [ %72, %71 ], [ %77, %73 ]
  store ptr %79, ptr %18, align 8, !tbaa !5
  store ptr null, ptr %32, align 8, !tbaa !5
  %80 = load ptr, ptr %15, align 8, !tbaa !5
  %81 = icmp ne ptr %80, null
  br i1 %81, label %82, label %89

82:                                               ; preds = %78
  %83 = load ptr, ptr %18, align 8, !tbaa !5
  %84 = load ptr, ptr %15, align 8, !tbaa !5
  %85 = call zeroext i8 @IsFontInfoExisted(ptr noundef %83, ptr noundef %84, ptr noundef null, ptr noundef null, ptr noundef %32)
  %86 = icmp ne i8 %85, 0
  br i1 %86, label %88, label %87

87:                                               ; preds = %82
  store i64 -9223372036854775806, ptr %8, align 8
  store i32 1, ptr %38, align 4
  br label %810

88:                                               ; preds = %82
  br label %89

89:                                               ; preds = %88, %78
  store ptr null, ptr %20, align 8, !tbaa !5
  %90 = load ptr, ptr %18, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._HII_DATABASE_PRIVATE_DATA, ptr %90, i32 0, i32 1
  %92 = getelementptr inbounds %struct._LIST_ENTRY, ptr %91, i32 0, i32 0
  %93 = load ptr, ptr %92, align 8, !tbaa !21
  store ptr %93, ptr %17, align 8, !tbaa !5
  br label %94

94:                                               ; preds = %130, %89
  %95 = load ptr, ptr %17, align 8, !tbaa !5
  %96 = load ptr, ptr %18, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct._HII_DATABASE_PRIVATE_DATA, ptr %96, i32 0, i32 1
  %98 = icmp ne ptr %95, %97
  br i1 %98, label %99, label %134

99:                                               ; preds = %94
  %100 = call zeroext i8 @DebugAssertEnabled()
  %101 = zext i8 %100 to i32
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %113

103:                                              ; preds = %99
  %104 = load ptr, ptr %17, align 8, !tbaa !5
  %105 = ptrtoint ptr %104 to i64
  %106 = sub i64 %105, ptrtoint (ptr getelementptr inbounds (%struct._HII_DATABASE_RECORD, ptr null, i32 0, i32 4) to i64)
  %107 = inttoptr i64 %106 to ptr
  %108 = getelementptr inbounds %struct._HII_DATABASE_RECORD, ptr %107, i32 0, i32 0
  %109 = load i64, ptr %108, align 8, !tbaa !22
  %110 = icmp ne i64 %109, 1919183208
  br i1 %110, label %111, label %113

111:                                              ; preds = %103
  call void @DebugAssert(ptr noundef @.str, i64 noundef 1201, ptr noundef @.str.2)
  %112 = load ptr, ptr %17, align 8, !tbaa !5
  br label %118

113:                                              ; preds = %103, %99
  %114 = load ptr, ptr %17, align 8, !tbaa !5
  %115 = ptrtoint ptr %114 to i64
  %116 = sub i64 %115, ptrtoint (ptr getelementptr inbounds (%struct._HII_DATABASE_RECORD, ptr null, i32 0, i32 4) to i64)
  %117 = inttoptr i64 %116 to ptr
  br label %118

118:                                              ; preds = %113, %111
  %119 = phi ptr [ %112, %111 ], [ %117, %113 ]
  store ptr %119, ptr %19, align 8, !tbaa !5
  %120 = load ptr, ptr %19, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct._HII_DATABASE_RECORD, ptr %120, i32 0, i32 3
  %122 = load ptr, ptr %121, align 8, !tbaa !24
  %123 = load ptr, ptr %10, align 8, !tbaa !5
  %124 = icmp eq ptr %122, %123
  br i1 %124, label %125, label %129

125:                                              ; preds = %118
  %126 = load ptr, ptr %19, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._HII_DATABASE_RECORD, ptr %126, i32 0, i32 1
  %128 = load ptr, ptr %127, align 8, !tbaa !25
  store ptr %128, ptr %20, align 8, !tbaa !5
  br label %134

129:                                              ; preds = %118
  br label %130

130:                                              ; preds = %129
  %131 = load ptr, ptr %17, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct._LIST_ENTRY, ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !26
  store ptr %133, ptr %17, align 8, !tbaa !5
  br label %94, !llvm.loop !27

134:                                              ; preds = %125, %94
  %135 = load ptr, ptr %20, align 8, !tbaa !5
  %136 = icmp eq ptr %135, null
  br i1 %136, label %137, label %138

137:                                              ; preds = %134
  store i64 -9223372036854775794, ptr %8, align 8
  store i32 1, ptr %38, align 4
  br label %810

138:                                              ; preds = %134
  store i64 0, ptr %16, align 8, !tbaa !29
  store i8 0, ptr %37, align 1, !tbaa !30
  store i16 0, ptr %33, align 2, !tbaa !31
  store i16 0, ptr %34, align 2, !tbaa !31
  store ptr null, ptr %21, align 8, !tbaa !5
  store ptr null, ptr %36, align 8, !tbaa !5
  %139 = load ptr, ptr %20, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %139, i32 0, i32 4
  %141 = getelementptr inbounds %struct._LIST_ENTRY, ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 8, !tbaa !32
  store ptr %142, ptr %17, align 8, !tbaa !5
  br label %143

143:                                              ; preds = %269, %138
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  %145 = load ptr, ptr %20, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %145, i32 0, i32 4
  %147 = icmp ne ptr %144, %146
  br i1 %147, label %148, label %273

148:                                              ; preds = %143
  %149 = call zeroext i8 @DebugAssertEnabled()
  %150 = zext i8 %149 to i32
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %152, label %162

152:                                              ; preds = %148
  %153 = load ptr, ptr %17, align 8, !tbaa !5
  %154 = ptrtoint ptr %153 to i64
  %155 = sub i64 %154, ptrtoint (ptr getelementptr inbounds (%struct._HII_STRING_PACKAGE_INSTANCE, ptr null, i32 0, i32 3) to i64)
  %156 = inttoptr i64 %155 to ptr
  %157 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %156, i32 0, i32 0
  %158 = load i64, ptr %157, align 8, !tbaa !35
  %159 = icmp ne i64 %158, 1886611816
  br i1 %159, label %160, label %162

160:                                              ; preds = %152
  call void @DebugAssert(ptr noundef @.str, i64 noundef 1221, ptr noundef @.str.2)
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  br label %167

162:                                              ; preds = %152, %148
  %163 = load ptr, ptr %17, align 8, !tbaa !5
  %164 = ptrtoint ptr %163 to i64
  %165 = sub i64 %164, ptrtoint (ptr getelementptr inbounds (%struct._HII_STRING_PACKAGE_INSTANCE, ptr null, i32 0, i32 3) to i64)
  %166 = inttoptr i64 %165 to ptr
  br label %167

167:                                              ; preds = %162, %160
  %168 = phi ptr [ %161, %160 ], [ %166, %162 ]
  store ptr %168, ptr %21, align 8, !tbaa !5
  %169 = load ptr, ptr %18, align 8, !tbaa !5
  %170 = load ptr, ptr %21, align 8, !tbaa !5
  %171 = call i64 @FindStringBlock(ptr noundef %169, ptr noundef %170, i16 noundef zeroext 0, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef %34, ptr noundef null)
  store i64 %171, ptr %16, align 8, !tbaa !29
  %172 = load i64, ptr %16, align 8, !tbaa !29
  %173 = icmp slt i64 %172, 0
  br i1 %173, label %174, label %175

174:                                              ; preds = %167
  br label %738

175:                                              ; preds = %167
  %176 = load i16, ptr %33, align 2, !tbaa !31
  %177 = zext i16 %176 to i32
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %179, label %193

179:                                              ; preds = %175
  %180 = load i16, ptr %33, align 2, !tbaa !31
  %181 = zext i16 %180 to i32
  %182 = load i16, ptr %34, align 2, !tbaa !31
  %183 = zext i16 %182 to i32
  %184 = icmp ne i32 %181, %183
  br i1 %184, label %185, label %193

185:                                              ; preds = %179
  br label %186

186:                                              ; preds = %185
  %187 = call zeroext i8 @DebugAssertEnabled()
  %188 = icmp ne i8 %187, 0
  br i1 %188, label %189, label %190

189:                                              ; preds = %186
  call void @DebugAssert(ptr noundef @.str, i64 noundef 1243, ptr noundef @.str.14)
  br label %190

190:                                              ; preds = %189, %186
  br label %191

191:                                              ; preds = %190
  br label %192

192:                                              ; preds = %191
  store i64 -9223372036854775806, ptr %16, align 8, !tbaa !29
  br label %738

193:                                              ; preds = %179, %175
  %194 = load i16, ptr %34, align 2, !tbaa !31
  store i16 %194, ptr %33, align 2, !tbaa !31
  %195 = load ptr, ptr %21, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %195, i32 0, i32 1
  %197 = load ptr, ptr %196, align 8, !tbaa !37
  %198 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %197, i32 0, i32 5
  %199 = getelementptr inbounds [1 x i8], ptr %198, i64 0, i64 0
  %200 = load ptr, ptr %12, align 8, !tbaa !5
  %201 = call zeroext i8 @HiiCompareLanguage(ptr noundef %199, ptr noundef %200)
  %202 = icmp ne i8 %201, 0
  br i1 %202, label %203, label %205

203:                                              ; preds = %193
  %204 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %204, ptr %36, align 8, !tbaa !5
  br label %268

205:                                              ; preds = %193
  %206 = load ptr, ptr %21, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %206, i32 0, i32 1
  %208 = load ptr, ptr %207, align 8, !tbaa !37
  %209 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %208, i32 0, i32 0
  %210 = load i32, ptr %209, align 1
  %211 = and i32 %210, 16777215
  %212 = load ptr, ptr %21, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %212, i32 0, i32 1
  %214 = load ptr, ptr %213, align 8, !tbaa !37
  %215 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %214, i32 0, i32 1
  %216 = load i32, ptr %215, align 1, !tbaa !38
  %217 = sub i32 %211, %216
  store i32 %217, ptr %24, align 4, !tbaa !41
  store i32 3, ptr %27, align 4, !tbaa !41
  %218 = load i32, ptr %24, align 4, !tbaa !41
  %219 = load i32, ptr %27, align 4, !tbaa !41
  %220 = add i32 %218, %219
  %221 = zext i32 %220 to i64
  %222 = call ptr @AllocateZeroPool(i64 noundef %221)
  store ptr %222, ptr %25, align 8, !tbaa !5
  %223 = load ptr, ptr %25, align 8, !tbaa !5
  %224 = icmp eq ptr %223, null
  br i1 %224, label %225, label %226

225:                                              ; preds = %205
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

226:                                              ; preds = %205
  %227 = load ptr, ptr %25, align 8, !tbaa !5
  %228 = load ptr, ptr %21, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %228, i32 0, i32 2
  %230 = load ptr, ptr %229, align 8, !tbaa !42
  %231 = load i32, ptr %24, align 4, !tbaa !41
  %232 = zext i32 %231 to i64
  %233 = sub i64 %232, 1
  %234 = call ptr @CopyMem(ptr noundef %227, ptr noundef %230, i64 noundef %233)
  %235 = load ptr, ptr %25, align 8, !tbaa !5
  %236 = load i32, ptr %24, align 4, !tbaa !41
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds i8, ptr %235, i64 %237
  %239 = getelementptr inbounds i8, ptr %238, i64 -1
  store ptr %239, ptr %26, align 8, !tbaa !5
  %240 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 20, ptr %240, align 1, !tbaa !30
  %241 = load ptr, ptr %26, align 8, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %241, i64 3
  store ptr %242, ptr %26, align 8, !tbaa !5
  %243 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 0, ptr %243, align 1, !tbaa !30
  %244 = load ptr, ptr %21, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %244, i32 0, i32 2
  %246 = load ptr, ptr %245, align 8, !tbaa !42
  call void @FreePool(ptr noundef %246)
  %247 = load ptr, ptr %25, align 8, !tbaa !5
  %248 = load ptr, ptr %21, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %248, i32 0, i32 2
  store ptr %247, ptr %249, align 8, !tbaa !42
  %250 = load i32, ptr %27, align 4, !tbaa !41
  %251 = load ptr, ptr %21, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %251, i32 0, i32 1
  %253 = load ptr, ptr %252, align 8, !tbaa !37
  %254 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %253, i32 0, i32 0
  %255 = load i32, ptr %254, align 1
  %256 = and i32 %255, 16777215
  %257 = add i32 %256, %250
  %258 = load i32, ptr %254, align 1
  %259 = and i32 %257, 16777215
  %260 = and i32 %258, -16777216
  %261 = or i32 %260, %259
  store i32 %261, ptr %254, align 1
  %262 = load i32, ptr %27, align 4, !tbaa !41
  %263 = load ptr, ptr %20, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %263, i32 0, i32 0
  %265 = getelementptr inbounds %struct.EFI_HII_PACKAGE_LIST_HEADER, ptr %264, i32 0, i32 1
  %266 = load i32, ptr %265, align 8, !tbaa !43
  %267 = add i32 %266, %262
  store i32 %267, ptr %265, align 8, !tbaa !43
  br label %268

268:                                              ; preds = %226, %203
  br label %269

269:                                              ; preds = %268
  %270 = load ptr, ptr %17, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct._LIST_ENTRY, ptr %270, i32 0, i32 0
  %272 = load ptr, ptr %271, align 8, !tbaa !26
  store ptr %272, ptr %17, align 8, !tbaa !5
  br label %143, !llvm.loop !44

273:                                              ; preds = %143
  %274 = load i16, ptr %33, align 2, !tbaa !31
  %275 = zext i16 %274 to i32
  %276 = icmp eq i32 %275, 0
  br i1 %276, label %277, label %279

277:                                              ; preds = %273
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  store i16 2, ptr %278, align 2, !tbaa !31
  br label %285

279:                                              ; preds = %273
  %280 = load i16, ptr %33, align 2, !tbaa !31
  %281 = zext i16 %280 to i32
  %282 = add nsw i32 %281, 1
  %283 = trunc i32 %282 to i16
  %284 = load ptr, ptr %11, align 8, !tbaa !5
  store i16 %283, ptr %284, align 2, !tbaa !31
  br label %285

285:                                              ; preds = %279, %277
  %286 = load ptr, ptr %36, align 8, !tbaa !5
  %287 = icmp ne ptr %286, null
  br i1 %287, label %288, label %290

288:                                              ; preds = %285
  %289 = load ptr, ptr %36, align 8, !tbaa !5
  store ptr %289, ptr %21, align 8, !tbaa !5
  br label %451

290:                                              ; preds = %285
  %291 = load ptr, ptr %13, align 8, !tbaa !5
  %292 = icmp eq ptr %291, null
  br i1 %292, label %293, label %294

293:                                              ; preds = %290
  store i64 -9223372036854775806, ptr %16, align 8, !tbaa !29
  br label %738

294:                                              ; preds = %290
  %295 = call ptr @AllocateZeroPool(i64 noundef 64)
  store ptr %295, ptr %21, align 8, !tbaa !5
  %296 = load ptr, ptr %21, align 8, !tbaa !5
  %297 = icmp eq ptr %296, null
  br i1 %297, label %298, label %299

298:                                              ; preds = %294
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

299:                                              ; preds = %294
  %300 = load ptr, ptr %21, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %300, i32 0, i32 0
  store i64 1886611816, ptr %301, align 8, !tbaa !35
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = load i16, ptr %302, align 2, !tbaa !31
  %304 = load ptr, ptr %21, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %304, i32 0, i32 6
  store i16 %303, ptr %305, align 2, !tbaa !45
  %306 = load ptr, ptr %21, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %306, i32 0, i32 5
  store i8 0, ptr %307, align 8, !tbaa !46
  %308 = load ptr, ptr %21, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %308, i32 0, i32 4
  %310 = call ptr @InitializeListHead(ptr noundef %309)
  %311 = load ptr, ptr %12, align 8, !tbaa !5
  %312 = call i64 @AsciiStrSize(ptr noundef %311)
  %313 = sub i64 %312, 1
  %314 = add i64 %313, 47
  %315 = trunc i64 %314 to i32
  store i32 %315, ptr %22, align 4, !tbaa !41
  %316 = load i32, ptr %22, align 4, !tbaa !41
  %317 = zext i32 %316 to i64
  %318 = call ptr @AllocateZeroPool(i64 noundef %317)
  %319 = load ptr, ptr %21, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %319, i32 0, i32 1
  store ptr %318, ptr %320, align 8, !tbaa !37
  %321 = load ptr, ptr %21, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %321, i32 0, i32 1
  %323 = load ptr, ptr %322, align 8, !tbaa !37
  %324 = icmp eq ptr %323, null
  br i1 %324, label %325, label %327

325:                                              ; preds = %299
  %326 = load ptr, ptr %21, align 8, !tbaa !5
  call void @FreePool(ptr noundef %326)
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

327:                                              ; preds = %299
  %328 = load ptr, ptr %21, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %328, i32 0, i32 1
  %330 = load ptr, ptr %329, align 8, !tbaa !37
  %331 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %330, i32 0, i32 0
  %332 = load i32, ptr %331, align 1
  %333 = and i32 %332, 16777215
  %334 = or i32 %333, 67108864
  store i32 %334, ptr %331, align 1
  %335 = load i32, ptr %22, align 4, !tbaa !41
  %336 = load ptr, ptr %21, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %336, i32 0, i32 1
  %338 = load ptr, ptr %337, align 8, !tbaa !37
  %339 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %338, i32 0, i32 1
  store i32 %335, ptr %339, align 1, !tbaa !38
  %340 = load i32, ptr %22, align 4, !tbaa !41
  %341 = load ptr, ptr %21, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %341, i32 0, i32 1
  %343 = load ptr, ptr %342, align 8, !tbaa !37
  %344 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %343, i32 0, i32 2
  store i32 %340, ptr %344, align 1, !tbaa !47
  %345 = load ptr, ptr %21, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %345, i32 0, i32 1
  %347 = load ptr, ptr %346, align 8, !tbaa !37
  %348 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %347, i32 0, i32 3
  %349 = getelementptr inbounds [16 x i16], ptr %348, i64 0, i64 0
  %350 = call ptr @CopyMem(ptr noundef %349, ptr noundef @mLanguageWindow, i64 noundef 32)
  %351 = load ptr, ptr %21, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %351, i32 0, i32 1
  %353 = load ptr, ptr %352, align 8, !tbaa !37
  %354 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %353, i32 0, i32 4
  store i16 1, ptr %354, align 1, !tbaa !48
  %355 = load ptr, ptr %21, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %355, i32 0, i32 1
  %357 = load ptr, ptr %356, align 8, !tbaa !37
  %358 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %357, i32 0, i32 5
  %359 = getelementptr inbounds [1 x i8], ptr %358, i64 0, i64 0
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = call ptr @AsciiStrCpy(ptr noundef %359, ptr noundef %360)
  %362 = load ptr, ptr %13, align 8, !tbaa !5
  %363 = call i64 @StrSize(ptr noundef %362)
  %364 = load ptr, ptr %11, align 8, !tbaa !5
  %365 = load i16, ptr %364, align 2, !tbaa !31
  %366 = zext i16 %365 to i32
  %367 = sub nsw i32 %366, 1
  %368 = sext i32 %367 to i64
  %369 = mul i64 %368, 3
  %370 = add i64 %363, %369
  %371 = sub i64 %370, 2
  %372 = trunc i64 %371 to i32
  store i32 %372, ptr %27, align 4, !tbaa !41
  %373 = load i32, ptr %27, align 4, !tbaa !41
  %374 = zext i32 %373 to i64
  %375 = add i64 %374, 1
  %376 = trunc i64 %375 to i32
  store i32 %376, ptr %23, align 4, !tbaa !41
  %377 = load i32, ptr %23, align 4, !tbaa !41
  %378 = zext i32 %377 to i64
  %379 = call ptr @AllocateZeroPool(i64 noundef %378)
  %380 = load ptr, ptr %21, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %380, i32 0, i32 2
  store ptr %379, ptr %381, align 8, !tbaa !42
  %382 = load ptr, ptr %21, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %382, i32 0, i32 2
  %384 = load ptr, ptr %383, align 8, !tbaa !42
  %385 = icmp eq ptr %384, null
  br i1 %385, label %386, label %391

386:                                              ; preds = %327
  %387 = load ptr, ptr %21, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %387, i32 0, i32 1
  %389 = load ptr, ptr %388, align 8, !tbaa !37
  call void @FreePool(ptr noundef %389)
  %390 = load ptr, ptr %21, align 8, !tbaa !5
  call void @FreePool(ptr noundef %390)
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

391:                                              ; preds = %327
  %392 = load ptr, ptr %21, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %392, i32 0, i32 2
  %394 = load ptr, ptr %393, align 8, !tbaa !42
  store ptr %394, ptr %26, align 8, !tbaa !5
  %395 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 20, ptr %395, align 1, !tbaa !30
  %396 = load ptr, ptr %26, align 8, !tbaa !5
  %397 = getelementptr inbounds i8, ptr %396, i64 1
  store ptr %397, ptr %26, align 8, !tbaa !5
  %398 = load ptr, ptr %26, align 8, !tbaa !5
  %399 = load ptr, ptr %13, align 8, !tbaa !5
  %400 = load ptr, ptr %13, align 8, !tbaa !5
  %401 = call i64 @StrSize(ptr noundef %400)
  %402 = call ptr @CopyMem(ptr noundef %398, ptr noundef %399, i64 noundef %401)
  %403 = load ptr, ptr %13, align 8, !tbaa !5
  %404 = call i64 @StrSize(ptr noundef %403)
  %405 = load ptr, ptr %26, align 8, !tbaa !5
  %406 = getelementptr inbounds i8, ptr %405, i64 %404
  store ptr %406, ptr %26, align 8, !tbaa !5
  store i16 2, ptr %35, align 2, !tbaa !31
  br label %407

407:                                              ; preds = %419, %391
  %408 = load i16, ptr %35, align 2, !tbaa !31
  %409 = zext i16 %408 to i32
  %410 = load ptr, ptr %11, align 8, !tbaa !5
  %411 = load i16, ptr %410, align 2, !tbaa !31
  %412 = zext i16 %411 to i32
  %413 = sub nsw i32 %412, 1
  %414 = icmp sle i32 %409, %413
  br i1 %414, label %415, label %422

415:                                              ; preds = %407
  %416 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 20, ptr %416, align 1, !tbaa !30
  %417 = load ptr, ptr %26, align 8, !tbaa !5
  %418 = getelementptr inbounds i8, ptr %417, i64 3
  store ptr %418, ptr %26, align 8, !tbaa !5
  br label %419

419:                                              ; preds = %415
  %420 = load i16, ptr %35, align 2, !tbaa !31
  %421 = add i16 %420, 1
  store i16 %421, ptr %35, align 2, !tbaa !31
  br label %407, !llvm.loop !49

422:                                              ; preds = %407
  %423 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 0, ptr %423, align 1, !tbaa !30
  %424 = load i32, ptr %22, align 4, !tbaa !41
  %425 = load i32, ptr %23, align 4, !tbaa !41
  %426 = add i32 %424, %425
  %427 = load ptr, ptr %21, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %427, i32 0, i32 1
  %429 = load ptr, ptr %428, align 8, !tbaa !37
  %430 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %429, i32 0, i32 0
  %431 = load i32, ptr %430, align 1
  %432 = and i32 %426, 16777215
  %433 = and i32 %431, -16777216
  %434 = or i32 %433, %432
  store i32 %434, ptr %430, align 1
  %435 = load ptr, ptr %21, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %435, i32 0, i32 1
  %437 = load ptr, ptr %436, align 8, !tbaa !37
  %438 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %437, i32 0, i32 0
  %439 = load i32, ptr %438, align 1
  %440 = and i32 %439, 16777215
  %441 = load ptr, ptr %20, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %441, i32 0, i32 0
  %443 = getelementptr inbounds %struct.EFI_HII_PACKAGE_LIST_HEADER, ptr %442, i32 0, i32 1
  %444 = load i32, ptr %443, align 8, !tbaa !43
  %445 = add i32 %444, %440
  store i32 %445, ptr %443, align 8, !tbaa !43
  %446 = load ptr, ptr %20, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %446, i32 0, i32 4
  %448 = load ptr, ptr %21, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %448, i32 0, i32 3
  %450 = call ptr @InsertTailList(ptr noundef %447, ptr noundef %449)
  store i8 1, ptr %37, align 1, !tbaa !30
  br label %451

451:                                              ; preds = %422, %288
  %452 = load ptr, ptr %21, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %452, i32 0, i32 1
  %454 = load ptr, ptr %453, align 8, !tbaa !37
  %455 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %454, i32 0, i32 0
  %456 = load i32, ptr %455, align 1
  %457 = and i32 %456, 16777215
  %458 = load ptr, ptr %21, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %458, i32 0, i32 1
  %460 = load ptr, ptr %459, align 8, !tbaa !37
  %461 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %460, i32 0, i32 1
  %462 = load i32, ptr %461, align 1, !tbaa !38
  %463 = sub i32 %457, %462
  store i32 %463, ptr %24, align 4, !tbaa !41
  %464 = load ptr, ptr %15, align 8, !tbaa !5
  %465 = icmp eq ptr %464, null
  br i1 %465, label %466, label %531

466:                                              ; preds = %451
  %467 = load ptr, ptr %14, align 8, !tbaa !5
  %468 = call i64 @StrSize(ptr noundef %467)
  %469 = add i64 %468, 3
  %470 = sub i64 %469, 2
  %471 = trunc i64 %470 to i32
  store i32 %471, ptr %27, align 4, !tbaa !41
  %472 = load i32, ptr %24, align 4, !tbaa !41
  %473 = load i32, ptr %27, align 4, !tbaa !41
  %474 = add i32 %472, %473
  %475 = zext i32 %474 to i64
  %476 = call ptr @AllocateZeroPool(i64 noundef %475)
  store ptr %476, ptr %25, align 8, !tbaa !5
  %477 = load ptr, ptr %25, align 8, !tbaa !5
  %478 = icmp eq ptr %477, null
  br i1 %478, label %479, label %480

479:                                              ; preds = %466
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

480:                                              ; preds = %466
  %481 = load ptr, ptr %25, align 8, !tbaa !5
  %482 = load ptr, ptr %21, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %482, i32 0, i32 2
  %484 = load ptr, ptr %483, align 8, !tbaa !42
  %485 = load i32, ptr %24, align 4, !tbaa !41
  %486 = zext i32 %485 to i64
  %487 = sub i64 %486, 1
  %488 = call ptr @CopyMem(ptr noundef %481, ptr noundef %484, i64 noundef %487)
  %489 = load ptr, ptr %25, align 8, !tbaa !5
  %490 = load i32, ptr %24, align 4, !tbaa !41
  %491 = zext i32 %490 to i64
  %492 = getelementptr inbounds i8, ptr %489, i64 %491
  %493 = getelementptr inbounds i8, ptr %492, i64 -1
  store ptr %493, ptr %26, align 8, !tbaa !5
  %494 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 20, ptr %494, align 1, !tbaa !30
  %495 = load ptr, ptr %26, align 8, !tbaa !5
  %496 = getelementptr inbounds i8, ptr %495, i64 1
  store ptr %496, ptr %26, align 8, !tbaa !5
  %497 = load ptr, ptr %26, align 8, !tbaa !5
  %498 = load ptr, ptr %14, align 8, !tbaa !5
  %499 = load ptr, ptr %14, align 8, !tbaa !5
  %500 = call i64 @StrSize(ptr noundef %499)
  %501 = call ptr @CopyMem(ptr noundef %497, ptr noundef %498, i64 noundef %500)
  %502 = load ptr, ptr %14, align 8, !tbaa !5
  %503 = call i64 @StrSize(ptr noundef %502)
  %504 = load ptr, ptr %26, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i64 %503
  store ptr %505, ptr %26, align 8, !tbaa !5
  %506 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 0, ptr %506, align 1, !tbaa !30
  %507 = load ptr, ptr %21, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %507, i32 0, i32 2
  %509 = load ptr, ptr %508, align 8, !tbaa !42
  call void @FreePool(ptr noundef %509)
  %510 = load ptr, ptr %25, align 8, !tbaa !5
  %511 = load ptr, ptr %21, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %511, i32 0, i32 2
  store ptr %510, ptr %512, align 8, !tbaa !42
  %513 = load i32, ptr %27, align 4, !tbaa !41
  %514 = load ptr, ptr %21, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %514, i32 0, i32 1
  %516 = load ptr, ptr %515, align 8, !tbaa !37
  %517 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %516, i32 0, i32 0
  %518 = load i32, ptr %517, align 1
  %519 = and i32 %518, 16777215
  %520 = add i32 %519, %513
  %521 = load i32, ptr %517, align 1
  %522 = and i32 %520, 16777215
  %523 = and i32 %521, -16777216
  %524 = or i32 %523, %522
  store i32 %524, ptr %517, align 1
  %525 = load i32, ptr %27, align 4, !tbaa !41
  %526 = load ptr, ptr %20, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %526, i32 0, i32 0
  %528 = getelementptr inbounds %struct.EFI_HII_PACKAGE_LIST_HEADER, ptr %527, i32 0, i32 1
  %529 = load i32, ptr %528, align 8, !tbaa !43
  %530 = add i32 %529, %525
  store i32 %530, ptr %528, align 8, !tbaa !43
  br label %737

531:                                              ; preds = %451
  %532 = load ptr, ptr %14, align 8, !tbaa !5
  %533 = call i64 @StrSize(ptr noundef %532)
  %534 = add i64 %533, 4
  %535 = sub i64 %534, 2
  %536 = trunc i64 %535 to i32
  store i32 %536, ptr %29, align 4, !tbaa !41
  %537 = load ptr, ptr %18, align 8, !tbaa !5
  %538 = load ptr, ptr %21, align 8, !tbaa !5
  %539 = load ptr, ptr %21, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %539, i32 0, i32 5
  %541 = load i8, ptr %540, align 8, !tbaa !46
  %542 = load ptr, ptr %32, align 8, !tbaa !5
  %543 = call zeroext i8 @ReferFontInfoLocally(ptr noundef %537, ptr noundef %538, i8 noundef zeroext %541, i8 noundef zeroext 0, ptr noundef %542, ptr noundef %31)
  %544 = icmp ne i8 %543, 0
  br i1 %544, label %545, label %611

545:                                              ; preds = %531
  %546 = load i32, ptr %24, align 4, !tbaa !41
  %547 = load i32, ptr %29, align 4, !tbaa !41
  %548 = add i32 %546, %547
  %549 = zext i32 %548 to i64
  %550 = call ptr @AllocateZeroPool(i64 noundef %549)
  store ptr %550, ptr %25, align 8, !tbaa !5
  %551 = load ptr, ptr %25, align 8, !tbaa !5
  %552 = icmp eq ptr %551, null
  br i1 %552, label %553, label %554

553:                                              ; preds = %545
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

554:                                              ; preds = %545
  %555 = load ptr, ptr %25, align 8, !tbaa !5
  %556 = load ptr, ptr %21, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %556, i32 0, i32 2
  %558 = load ptr, ptr %557, align 8, !tbaa !42
  %559 = load i32, ptr %24, align 4, !tbaa !41
  %560 = zext i32 %559 to i64
  %561 = sub i64 %560, 1
  %562 = call ptr @CopyMem(ptr noundef %555, ptr noundef %558, i64 noundef %561)
  %563 = load ptr, ptr %25, align 8, !tbaa !5
  %564 = load i32, ptr %24, align 4, !tbaa !41
  %565 = zext i32 %564 to i64
  %566 = getelementptr inbounds i8, ptr %563, i64 %565
  %567 = getelementptr inbounds i8, ptr %566, i64 -1
  store ptr %567, ptr %26, align 8, !tbaa !5
  %568 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 21, ptr %568, align 1, !tbaa !30
  %569 = load ptr, ptr %26, align 8, !tbaa !5
  %570 = getelementptr inbounds i8, ptr %569, i64 1
  store ptr %570, ptr %26, align 8, !tbaa !5
  %571 = load ptr, ptr %31, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct._HII_FONT_INFO, ptr %571, i32 0, i32 3
  %573 = load i8, ptr %572, align 8, !tbaa !50
  %574 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 %573, ptr %574, align 1, !tbaa !30
  %575 = load ptr, ptr %26, align 8, !tbaa !5
  %576 = getelementptr inbounds i8, ptr %575, i32 1
  store ptr %576, ptr %26, align 8, !tbaa !5
  %577 = load ptr, ptr %26, align 8, !tbaa !5
  %578 = load ptr, ptr %14, align 8, !tbaa !5
  %579 = load ptr, ptr %14, align 8, !tbaa !5
  %580 = call i64 @StrSize(ptr noundef %579)
  %581 = call ptr @CopyMem(ptr noundef %577, ptr noundef %578, i64 noundef %580)
  %582 = load ptr, ptr %14, align 8, !tbaa !5
  %583 = call i64 @StrSize(ptr noundef %582)
  %584 = load ptr, ptr %26, align 8, !tbaa !5
  %585 = getelementptr inbounds i8, ptr %584, i64 %583
  store ptr %585, ptr %26, align 8, !tbaa !5
  %586 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 0, ptr %586, align 1, !tbaa !30
  %587 = load ptr, ptr %21, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %587, i32 0, i32 2
  %589 = load ptr, ptr %588, align 8, !tbaa !42
  call void @FreePool(ptr noundef %589)
  %590 = load ptr, ptr %25, align 8, !tbaa !5
  %591 = load ptr, ptr %21, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %591, i32 0, i32 2
  store ptr %590, ptr %592, align 8, !tbaa !42
  %593 = load i32, ptr %29, align 4, !tbaa !41
  %594 = load ptr, ptr %21, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %594, i32 0, i32 1
  %596 = load ptr, ptr %595, align 8, !tbaa !37
  %597 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %596, i32 0, i32 0
  %598 = load i32, ptr %597, align 1
  %599 = and i32 %598, 16777215
  %600 = add i32 %599, %593
  %601 = load i32, ptr %597, align 1
  %602 = and i32 %600, 16777215
  %603 = and i32 %601, -16777216
  %604 = or i32 %603, %602
  store i32 %604, ptr %597, align 1
  %605 = load i32, ptr %29, align 4, !tbaa !41
  %606 = load ptr, ptr %20, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %606, i32 0, i32 0
  %608 = getelementptr inbounds %struct.EFI_HII_PACKAGE_LIST_HEADER, ptr %607, i32 0, i32 1
  %609 = load i32, ptr %608, align 8, !tbaa !43
  %610 = add i32 %609, %605
  store i32 %610, ptr %608, align 8, !tbaa !43
  br label %736

611:                                              ; preds = %531
  %612 = load ptr, ptr %15, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %612, i32 0, i32 2
  %614 = getelementptr inbounds [1 x i16], ptr %613, i64 0, i64 0
  %615 = call i64 @StrSize(ptr noundef %614)
  %616 = add i64 %615, 13
  %617 = sub i64 %616, 2
  %618 = trunc i64 %617 to i32
  store i32 %618, ptr %28, align 4, !tbaa !41
  %619 = load i32, ptr %24, align 4, !tbaa !41
  %620 = load i32, ptr %28, align 4, !tbaa !41
  %621 = add i32 %619, %620
  %622 = load i32, ptr %29, align 4, !tbaa !41
  %623 = add i32 %621, %622
  %624 = zext i32 %623 to i64
  %625 = call ptr @AllocateZeroPool(i64 noundef %624)
  store ptr %625, ptr %25, align 8, !tbaa !5
  %626 = load ptr, ptr %25, align 8, !tbaa !5
  %627 = icmp eq ptr %626, null
  br i1 %627, label %628, label %629

628:                                              ; preds = %611
  store i64 -9223372036854775799, ptr %16, align 8, !tbaa !29
  br label %738

629:                                              ; preds = %611
  %630 = load ptr, ptr %25, align 8, !tbaa !5
  %631 = load ptr, ptr %21, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %631, i32 0, i32 2
  %633 = load ptr, ptr %632, align 8, !tbaa !42
  %634 = load i32, ptr %24, align 4, !tbaa !41
  %635 = zext i32 %634 to i64
  %636 = sub i64 %635, 1
  %637 = call ptr @CopyMem(ptr noundef %630, ptr noundef %633, i64 noundef %636)
  %638 = load ptr, ptr %25, align 8, !tbaa !5
  %639 = load i32, ptr %24, align 4, !tbaa !41
  %640 = zext i32 %639 to i64
  %641 = getelementptr inbounds i8, ptr %638, i64 %640
  %642 = getelementptr inbounds i8, ptr %641, i64 -1
  store ptr %642, ptr %26, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %30, i32 0, i32 0
  %644 = getelementptr inbounds %struct.EFI_HII_STRING_BLOCK, ptr %643, i32 0, i32 0
  store i8 49, ptr %644, align 1, !tbaa !52
  %645 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %30, i32 0, i32 1
  store i8 64, ptr %645, align 1, !tbaa !55
  %646 = load i32, ptr %28, align 4, !tbaa !41
  %647 = trunc i32 %646 to i16
  %648 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %30, i32 0, i32 2
  store i16 %647, ptr %648, align 1, !tbaa !56
  %649 = load ptr, ptr %26, align 8, !tbaa !5
  %650 = call ptr @CopyMem(ptr noundef %649, ptr noundef %30, i64 noundef 4)
  %651 = load ptr, ptr %26, align 8, !tbaa !5
  %652 = getelementptr inbounds i8, ptr %651, i64 4
  store ptr %652, ptr %26, align 8, !tbaa !5
  %653 = load ptr, ptr %31, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct._HII_FONT_INFO, ptr %653, i32 0, i32 3
  %655 = load i8, ptr %654, align 8, !tbaa !50
  %656 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 %655, ptr %656, align 1, !tbaa !30
  %657 = load ptr, ptr %26, align 8, !tbaa !5
  %658 = getelementptr inbounds i8, ptr %657, i32 1
  store ptr %658, ptr %26, align 8, !tbaa !5
  %659 = load ptr, ptr %26, align 8, !tbaa !5
  %660 = load ptr, ptr %15, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %660, i32 0, i32 1
  %662 = call ptr @CopyMem(ptr noundef %659, ptr noundef %661, i64 noundef 2)
  %663 = load ptr, ptr %26, align 8, !tbaa !5
  %664 = getelementptr inbounds i8, ptr %663, i64 2
  store ptr %664, ptr %26, align 8, !tbaa !5
  %665 = load ptr, ptr %26, align 8, !tbaa !5
  %666 = load ptr, ptr %15, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %666, i32 0, i32 0
  %668 = call ptr @CopyMem(ptr noundef %665, ptr noundef %667, i64 noundef 4)
  %669 = load ptr, ptr %26, align 8, !tbaa !5
  %670 = getelementptr inbounds i8, ptr %669, i64 4
  store ptr %670, ptr %26, align 8, !tbaa !5
  %671 = load ptr, ptr %26, align 8, !tbaa !5
  %672 = load ptr, ptr %15, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %672, i32 0, i32 2
  %674 = load ptr, ptr %15, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %674, i32 0, i32 2
  %676 = getelementptr inbounds [1 x i16], ptr %675, i64 0, i64 0
  %677 = call i64 @StrSize(ptr noundef %676)
  %678 = call ptr @CopyMem(ptr noundef %671, ptr noundef %673, i64 noundef %677)
  %679 = load ptr, ptr %15, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %679, i32 0, i32 2
  %681 = getelementptr inbounds [1 x i16], ptr %680, i64 0, i64 0
  %682 = call i64 @StrSize(ptr noundef %681)
  %683 = load ptr, ptr %26, align 8, !tbaa !5
  %684 = getelementptr inbounds i8, ptr %683, i64 %682
  store ptr %684, ptr %26, align 8, !tbaa !5
  %685 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 21, ptr %685, align 1, !tbaa !30
  %686 = load ptr, ptr %26, align 8, !tbaa !5
  %687 = getelementptr inbounds i8, ptr %686, i64 1
  store ptr %687, ptr %26, align 8, !tbaa !5
  %688 = load ptr, ptr %31, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct._HII_FONT_INFO, ptr %688, i32 0, i32 3
  %690 = load i8, ptr %689, align 8, !tbaa !50
  %691 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 %690, ptr %691, align 1, !tbaa !30
  %692 = load ptr, ptr %26, align 8, !tbaa !5
  %693 = getelementptr inbounds i8, ptr %692, i32 1
  store ptr %693, ptr %26, align 8, !tbaa !5
  %694 = load ptr, ptr %26, align 8, !tbaa !5
  %695 = load ptr, ptr %14, align 8, !tbaa !5
  %696 = load ptr, ptr %14, align 8, !tbaa !5
  %697 = call i64 @StrSize(ptr noundef %696)
  %698 = call ptr @CopyMem(ptr noundef %694, ptr noundef %695, i64 noundef %697)
  %699 = load ptr, ptr %14, align 8, !tbaa !5
  %700 = call i64 @StrSize(ptr noundef %699)
  %701 = load ptr, ptr %26, align 8, !tbaa !5
  %702 = getelementptr inbounds i8, ptr %701, i64 %700
  store ptr %702, ptr %26, align 8, !tbaa !5
  %703 = load ptr, ptr %26, align 8, !tbaa !5
  store i8 0, ptr %703, align 1, !tbaa !30
  %704 = load ptr, ptr %21, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %704, i32 0, i32 2
  %706 = load ptr, ptr %705, align 8, !tbaa !42
  call void @FreePool(ptr noundef %706)
  %707 = load ptr, ptr %25, align 8, !tbaa !5
  %708 = load ptr, ptr %21, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %708, i32 0, i32 2
  store ptr %707, ptr %709, align 8, !tbaa !42
  %710 = load i32, ptr %28, align 4, !tbaa !41
  %711 = load i32, ptr %29, align 4, !tbaa !41
  %712 = add i32 %710, %711
  %713 = load ptr, ptr %21, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %713, i32 0, i32 1
  %715 = load ptr, ptr %714, align 8, !tbaa !37
  %716 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %715, i32 0, i32 0
  %717 = load i32, ptr %716, align 1
  %718 = and i32 %717, 16777215
  %719 = add i32 %718, %712
  %720 = load i32, ptr %716, align 1
  %721 = and i32 %719, 16777215
  %722 = and i32 %720, -16777216
  %723 = or i32 %722, %721
  store i32 %723, ptr %716, align 1
  %724 = load i32, ptr %28, align 4, !tbaa !41
  %725 = load i32, ptr %29, align 4, !tbaa !41
  %726 = add i32 %724, %725
  %727 = load ptr, ptr %20, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %727, i32 0, i32 0
  %729 = getelementptr inbounds %struct.EFI_HII_PACKAGE_LIST_HEADER, ptr %728, i32 0, i32 1
  %730 = load i32, ptr %729, align 8, !tbaa !43
  %731 = add i32 %730, %726
  store i32 %731, ptr %729, align 8, !tbaa !43
  %732 = load ptr, ptr %21, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %732, i32 0, i32 5
  %734 = load i8, ptr %733, align 8, !tbaa !46
  %735 = add i8 %734, 1
  store i8 %735, ptr %733, align 8, !tbaa !46
  br label %736

736:                                              ; preds = %629, %554
  br label %737

737:                                              ; preds = %736, %480
  br label %738

738:                                              ; preds = %737, %628, %553, %479, %386, %325, %298, %293, %225, %192, %174
  %739 = load i64, ptr %16, align 8, !tbaa !29
  %740 = icmp slt i64 %739, 0
  br i1 %740, label %750, label %741

741:                                              ; preds = %738
  %742 = load i8, ptr %37, align 1, !tbaa !30
  %743 = zext i8 %742 to i32
  %744 = icmp ne i32 %743, 0
  br i1 %744, label %745, label %750

745:                                              ; preds = %741
  %746 = load ptr, ptr %18, align 8, !tbaa !5
  %747 = load ptr, ptr %21, align 8, !tbaa !5
  %748 = load ptr, ptr %10, align 8, !tbaa !5
  %749 = call i64 @InvokeRegisteredFunction(ptr noundef %746, i64 noundef 1, ptr noundef %747, i8 noundef zeroext 4, ptr noundef %748)
  store i64 %749, ptr %16, align 8, !tbaa !29
  br label %750

750:                                              ; preds = %745, %741, %738
  %751 = load i64, ptr %16, align 8, !tbaa !29
  %752 = icmp slt i64 %751, 0
  br i1 %752, label %793, label %753

753:                                              ; preds = %750
  %754 = load ptr, ptr %20, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %754, i32 0, i32 4
  %756 = getelementptr inbounds %struct._LIST_ENTRY, ptr %755, i32 0, i32 0
  %757 = load ptr, ptr %756, align 8, !tbaa !32
  store ptr %757, ptr %17, align 8, !tbaa !5
  br label %758

758:                                              ; preds = %788, %753
  %759 = load ptr, ptr %17, align 8, !tbaa !5
  %760 = load ptr, ptr %20, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct._HII_DATABASE_PACKAGE_LIST_INSTANCE, ptr %760, i32 0, i32 4
  %762 = icmp ne ptr %759, %761
  br i1 %762, label %763, label %792

763:                                              ; preds = %758
  %764 = call zeroext i8 @DebugAssertEnabled()
  %765 = zext i8 %764 to i32
  %766 = icmp ne i32 %765, 0
  br i1 %766, label %767, label %777

767:                                              ; preds = %763
  %768 = load ptr, ptr %17, align 8, !tbaa !5
  %769 = ptrtoint ptr %768 to i64
  %770 = sub i64 %769, ptrtoint (ptr getelementptr inbounds (%struct._HII_STRING_PACKAGE_INSTANCE, ptr null, i32 0, i32 3) to i64)
  %771 = inttoptr i64 %770 to ptr
  %772 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %771, i32 0, i32 0
  %773 = load i64, ptr %772, align 8, !tbaa !35
  %774 = icmp ne i64 %773, 1886611816
  br i1 %774, label %775, label %777

775:                                              ; preds = %767
  call void @DebugAssert(ptr noundef @.str, i64 noundef 1549, ptr noundef @.str.2)
  %776 = load ptr, ptr %17, align 8, !tbaa !5
  br label %782

777:                                              ; preds = %767, %763
  %778 = load ptr, ptr %17, align 8, !tbaa !5
  %779 = ptrtoint ptr %778 to i64
  %780 = sub i64 %779, ptrtoint (ptr getelementptr inbounds (%struct._HII_STRING_PACKAGE_INSTANCE, ptr null, i32 0, i32 3) to i64)
  %781 = inttoptr i64 %780 to ptr
  br label %782

782:                                              ; preds = %777, %775
  %783 = phi ptr [ %776, %775 ], [ %781, %777 ]
  store ptr %783, ptr %21, align 8, !tbaa !5
  %784 = load ptr, ptr %11, align 8, !tbaa !5
  %785 = load i16, ptr %784, align 2, !tbaa !31
  %786 = load ptr, ptr %21, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %786, i32 0, i32 6
  store i16 %785, ptr %787, align 2, !tbaa !45
  br label %788

788:                                              ; preds = %782
  %789 = load ptr, ptr %17, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct._LIST_ENTRY, ptr %789, i32 0, i32 0
  %791 = load ptr, ptr %790, align 8, !tbaa !26
  store ptr %791, ptr %17, align 8, !tbaa !5
  br label %758, !llvm.loop !57

792:                                              ; preds = %758
  br label %808

793:                                              ; preds = %750
  %794 = load i8, ptr %37, align 1, !tbaa !30
  %795 = icmp ne i8 %794, 0
  br i1 %795, label %796, label %807

796:                                              ; preds = %793
  %797 = load ptr, ptr %21, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %797, i32 0, i32 3
  %799 = call ptr @RemoveEntryList(ptr noundef %798)
  %800 = load ptr, ptr %21, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %800, i32 0, i32 2
  %802 = load ptr, ptr %801, align 8, !tbaa !42
  call void @FreePool(ptr noundef %802)
  %803 = load ptr, ptr %21, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %803, i32 0, i32 1
  %805 = load ptr, ptr %804, align 8, !tbaa !37
  call void @FreePool(ptr noundef %805)
  %806 = load ptr, ptr %21, align 8, !tbaa !5
  call void @FreePool(ptr noundef %806)
  br label %807

807:                                              ; preds = %796, %793
  br label %808

808:                                              ; preds = %807, %792
  %809 = load i64, ptr %16, align 8, !tbaa !29
  store i64 %809, ptr %8, align 8
  store i32 1, ptr %38, align 4
  br label %810

810:                                              ; preds = %808, %137, %87, %58, %53
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, 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 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  %811 = load i64, ptr %8, align 8
  ret i64 %811
}

declare zeroext i8 @IsHiiHandleValid(ptr noundef) #2

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

declare ptr @InitializeListHead(ptr noundef) #2

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

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

declare ptr @RemoveEntryList(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_HII_DATABASE_PRIVATE_DATA", !11, i64 0, !12, i64 8, !12, i64 24, !13, i64 40, !14, i64 72, !15, i64 112, !16, i64 152, !17, i64 240, !12, i64 288, !11, i64 304, !12, i64 312, !11, i64 328, !18, i64 336, !6, i64 352}
!11 = !{!"long long", !7, i64 0}
!12 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!13 = !{!"_EFI_HII_FONT_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!14 = !{!"_EFI_HII_IMAGE_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!15 = !{!"_EFI_HII_STRING_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!16 = !{!"_EFI_HII_DATABASE_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, !6, i64 64, !6, i64 72, !6, i64 80}
!17 = !{!"_EFI_HII_CONFIG_ROUTING_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!18 = !{!"", !19, i64 0, !20, i64 4, !20, i64 6, !7, i64 8}
!19 = !{!"int", !7, i64 0}
!20 = !{!"short", !7, i64 0}
!21 = !{!10, !6, i64 8}
!22 = !{!23, !11, i64 0}
!23 = !{!"_HII_DATABASE_RECORD", !11, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !12, i64 32}
!24 = !{!23, !6, i64 24}
!25 = !{!23, !6, i64 8}
!26 = !{!12, !6, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!11, !11, i64 0}
!30 = !{!7, !7, i64 0}
!31 = !{!20, !20, i64 0}
!32 = !{!33, !6, i64 72}
!33 = !{!"_HII_DATABASE_PACKAGE_LIST_INSTANCE", !34, i64 0, !12, i64 24, !12, i64 40, !12, i64 56, !12, i64 72, !12, i64 88, !6, i64 104, !12, i64 112, !6, i64 128}
!34 = !{!"", !18, i64 0, !19, i64 16}
!35 = !{!36, !11, i64 0}
!36 = !{!"_HII_STRING_PACKAGE_INSTANCE", !11, i64 0, !6, i64 8, !6, i64 16, !12, i64 24, !12, i64 40, !7, i64 56, !20, i64 58}
!37 = !{!36, !6, i64 8}
!38 = !{!39, !19, i64 4}
!39 = !{!"_EFI_HII_STRING_PACKAGE_HDR", !40, i64 0, !19, i64 4, !19, i64 8, !7, i64 12, !20, i64 44, !7, i64 46}
!40 = !{!"", !19, i64 0, !19, i64 3}
!41 = !{!19, !19, i64 0}
!42 = !{!36, !6, i64 16}
!43 = !{!33, !19, i64 16}
!44 = distinct !{!44, !28}
!45 = !{!36, !20, i64 58}
!46 = !{!36, !7, i64 56}
!47 = !{!39, !19, i64 8}
!48 = !{!39, !20, i64 44}
!49 = distinct !{!49, !28}
!50 = !{!51, !7, i64 32}
!51 = !{!"_HII_FONT_INFO", !11, i64 0, !12, i64 8, !6, i64 24, !7, i64 32}
!52 = !{!53, !7, i64 0}
!53 = !{!"_EFI_HII_SIBT_EXT2_BLOCK", !54, i64 0, !7, i64 1, !20, i64 2}
!54 = !{!"", !7, i64 0}
!55 = !{!53, !7, i64 1}
!56 = !{!53, !20, i64 2}
!57 = distinct !{!57, !28}


; 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._EFI_HII_SIBT_EXT2_BLOCK = type { %struct.EFI_HII_STRING_BLOCK, i8, i16 }
%struct.EFI_HII_STRING_BLOCK = type { i8 }

@mLanguageWindow = external dso_local global [16 x i16], align 16
@.str = external hidden unnamed_addr constant [148 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #2

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

declare ptr @AllocateZeroPool(i64 noundef) local_unnamed_addr #2

declare ptr @InsertTailList(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i64 @AsciiStrSize(ptr noundef) local_unnamed_addr #2

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

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

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

declare void @FreePool(ptr noundef) local_unnamed_addr #2

declare i64 @StrSize(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local i64 @HiiNewString(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) local_unnamed_addr #0 {
  %8 = alloca %struct._EFI_HII_SIBT_EXT2_BLOCK, align 1
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i16, align 2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %11) #3
  %12 = insertelement <4 x ptr> poison, ptr %0, i64 0
  %13 = insertelement <4 x ptr> %12, ptr %5, i64 1
  %14 = insertelement <4 x ptr> %13, ptr %2, i64 2
  %15 = insertelement <4 x ptr> %14, ptr %3, i64 3
  %16 = icmp eq <4 x ptr> %15, zeroinitializer
  %17 = icmp eq ptr %1, null
  %18 = bitcast <4 x i1> %16 to i4
  %19 = icmp ne i4 %18, 0
  %op.rdx = or i1 %19, %17
  br i1 %op.rdx, label %.thread, label %20

20:                                               ; preds = %7
  %21 = tail call zeroext i8 @IsHiiHandleValid(ptr noundef nonnull %1) #3
  %.not = icmp eq i8 %21, 0
  br i1 %.not, label %.thread, label %22

22:                                               ; preds = %20
  %23 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not282 = icmp eq i8 %23, 0
  %.pre = ptrtoint ptr %0 to i64
  %.pre360 = add i64 %.pre, -112
  %.pre362 = inttoptr i64 %.pre360 to ptr
  br i1 %.not282, label %._crit_edge359, label %24

24:                                               ; preds = %22
  %25 = load i64, ptr %.pre362, align 8, !tbaa !5
  %.not283 = icmp eq i64 %25, 1883531592
  br i1 %.not283, label %._crit_edge359, label %26

26:                                               ; preds = %24
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 1184, ptr noundef nonnull @.str.2) #3
  br label %._crit_edge359

._crit_edge359:                                   ; preds = %22, %24, %26
  %27 = phi ptr [ %0, %26 ], [ %.pre362, %24 ], [ %.pre362, %22 ]
  store ptr null, ptr %10, align 8, !tbaa !20
  %.not284 = icmp eq ptr %6, null
  br i1 %.not284, label %30, label %28

28:                                               ; preds = %._crit_edge359
  %29 = call zeroext i8 @IsFontInfoExisted(ptr noundef %27, ptr noundef nonnull %6, ptr noundef null, ptr noundef null, ptr noundef nonnull %10) #3
  %.not285 = icmp eq i8 %29, 0
  br i1 %.not285, label %.thread, label %30

30:                                               ; preds = %28, %._crit_edge359
  %31 = getelementptr inbounds i8, ptr %27, i64 8
  br label %32

32:                                               ; preds = %._crit_edge358, %30
  %.0255.in = phi ptr [ %31, %30 ], [ %.0255, %._crit_edge358 ]
  %.0255 = load ptr, ptr %.0255.in, align 8, !tbaa !21
  %.not286 = icmp eq ptr %.0255, %31
  br i1 %.not286, label %.thread, label %33

33:                                               ; preds = %32
  %34 = call zeroext i8 @DebugAssertEnabled() #3
  %.not287 = icmp eq i8 %34, 0
  %.pre364 = ptrtoint ptr %.0255 to i64
  %.pre366 = add i64 %.pre364, -32
  %.pre368 = inttoptr i64 %.pre366 to ptr
  br i1 %.not287, label %._crit_edge358, label %35

35:                                               ; preds = %33
  %36 = load i64, ptr %.pre368, align 8, !tbaa !22
  %.not288 = icmp eq i64 %36, 1919183208
  br i1 %.not288, label %._crit_edge358, label %37

37:                                               ; preds = %35
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 1201, ptr noundef nonnull @.str.2) #3
  br label %._crit_edge358

._crit_edge358:                                   ; preds = %33, %35, %37
  %38 = phi ptr [ %.0255, %37 ], [ %.pre368, %35 ], [ %.pre368, %33 ]
  %39 = getelementptr inbounds i8, ptr %38, i64 24
  %40 = load ptr, ptr %39, align 8, !tbaa !24
  %41 = icmp eq ptr %40, %1
  br i1 %41, label %42, label %32, !llvm.loop !25

42:                                               ; preds = %._crit_edge358
  %43 = getelementptr inbounds i8, ptr %38, i64 8
  %44 = load ptr, ptr %43, align 8, !tbaa !27
  %45 = icmp eq ptr %44, null
  br i1 %45, label %.thread, label %46

46:                                               ; preds = %42
  store i16 0, ptr %11, align 2, !tbaa !28
  %47 = getelementptr inbounds i8, ptr %44, i64 72
  %.1256331 = load ptr, ptr %47, align 8, !tbaa !21
  %.not289332 = icmp eq ptr %.1256331, %47
  br i1 %.not289332, label %.thread390, label %.lr.ph

.thread390:                                       ; preds = %46
  store i16 2, ptr %2, align 2, !tbaa !28
  br label %99

.lr.ph:                                           ; preds = %46
  %48 = getelementptr inbounds i8, ptr %44, i64 16
  br label %49

49:                                               ; preds = %.lr.ph, %96
  %.1256335 = phi ptr [ %.1256331, %.lr.ph ], [ %.1256, %96 ]
  %.0247334 = phi ptr [ null, %.lr.ph ], [ %.1248, %96 ]
  %.0250333 = phi i16 [ 0, %.lr.ph ], [ %.fr, %96 ]
  %50 = call zeroext i8 @DebugAssertEnabled() #3
  %.not293 = icmp eq i8 %50, 0
  %.pre376 = ptrtoint ptr %.1256335 to i64
  %.pre378 = add i64 %.pre376, -24
  %.pre380 = inttoptr i64 %.pre378 to ptr
  br i1 %.not293, label %._crit_edge357, label %51

51:                                               ; preds = %49
  %52 = load i64, ptr %.pre380, align 8, !tbaa !29
  %.not294 = icmp eq i64 %52, 1886611816
  br i1 %.not294, label %._crit_edge357, label %53

53:                                               ; preds = %51
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 1221, ptr noundef nonnull @.str.2) #3
  br label %._crit_edge357

._crit_edge357:                                   ; preds = %49, %51, %53
  %54 = phi ptr [ %.1256335, %53 ], [ %.pre380, %51 ], [ %.pre380, %49 ]
  %55 = call i64 @FindStringBlock(ptr noundef %27, ptr noundef %54, i16 noundef zeroext 0, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef nonnull %11, ptr noundef null)
  %56 = icmp slt i64 %55, 0
  br i1 %56, label %.thread, label %57

57:                                               ; preds = %._crit_edge357
  %.not295 = icmp eq i16 %.0250333, 0
  %58 = load i16, ptr %11, align 2
  %.fr = freeze i16 %58
  %.not296 = icmp eq i16 %.0250333, %.fr
  %or.cond303 = or i1 %.not295, %.not296
  br i1 %or.cond303, label %62, label %59

59:                                               ; preds = %57
  %60 = call zeroext i8 @DebugAssertEnabled() #3
  %.not298 = icmp eq i8 %60, 0
  br i1 %.not298, label %.thread, label %61

61:                                               ; preds = %59
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 1243, ptr noundef nonnull @.str.14) #3
  br label %.thread

62:                                               ; preds = %57
  %63 = getelementptr inbounds i8, ptr %54, i64 8
  %64 = load ptr, ptr %63, align 8, !tbaa !31
  %65 = getelementptr inbounds i8, ptr %64, i64 46
  %66 = call zeroext i8 @HiiCompareLanguage(ptr noundef nonnull %65, ptr noundef %3)
  %.not297 = icmp eq i8 %66, 0
  br i1 %.not297, label %67, label %96

67:                                               ; preds = %62
  %68 = load ptr, ptr %63, align 8, !tbaa !31
  %69 = load i32, ptr %68, align 1
  %70 = and i32 %69, 16777215
  %71 = getelementptr inbounds i8, ptr %68, i64 4
  %72 = load i32, ptr %71, align 1, !tbaa !32
  %73 = sub i32 %70, %72
  %74 = add i32 %73, 3
  %75 = zext i32 %74 to i64
  %76 = call ptr @AllocateZeroPool(i64 noundef %75) #3
  %77 = icmp eq ptr %76, null
  br i1 %77, label %.thread, label %78

78:                                               ; preds = %67
  %79 = getelementptr inbounds i8, ptr %54, i64 16
  %80 = load ptr, ptr %79, align 8, !tbaa !35
  %81 = zext i32 %73 to i64
  %82 = add nsw i64 %81, -1
  %83 = call ptr @CopyMem(ptr noundef nonnull %76, ptr noundef %80, i64 noundef %82) #3
  %84 = getelementptr inbounds i8, ptr %76, i64 %81
  %85 = getelementptr inbounds i8, ptr %84, i64 -1
  store i8 20, ptr %85, align 1, !tbaa !36
  %86 = getelementptr inbounds i8, ptr %84, i64 2
  store i8 0, ptr %86, align 1, !tbaa !36
  %87 = load ptr, ptr %79, align 8, !tbaa !35
  call void @FreePool(ptr noundef %87) #3
  store ptr %76, ptr %79, align 8, !tbaa !35
  %88 = load ptr, ptr %63, align 8, !tbaa !31
  %89 = load i32, ptr %88, align 1
  %90 = add i32 %89, 3
  %91 = and i32 %90, 16777215
  %92 = and i32 %89, -16777216
  %93 = or disjoint i32 %91, %92
  store i32 %93, ptr %88, align 1
  %94 = load i32, ptr %48, align 8, !tbaa !37
  %95 = add i32 %94, 3
  store i32 %95, ptr %48, align 8, !tbaa !37
  br label %96

96:                                               ; preds = %62, %78
  %.1248 = phi ptr [ %.0247334, %78 ], [ %54, %62 ]
  %.1256 = load ptr, ptr %.1256335, align 8, !tbaa !21
  %.not289 = icmp eq ptr %.1256, %47
  br i1 %.not289, label %._crit_edge, label %49, !llvm.loop !40

._crit_edge:                                      ; preds = %96
  %97 = icmp eq i16 %.fr, 0
  %98 = add i16 %.fr, 1
  %spec.select = select i1 %97, i16 2, i16 %98
  store i16 %spec.select, ptr %2, align 2, !tbaa !28
  %.not290 = icmp eq ptr %.1248, null
  br i1 %.not290, label %99, label %169

99:                                               ; preds = %.thread390, %._crit_edge
  %.0252.lcssa386395 = phi i64 [ 0, %.thread390 ], [ %55, %._crit_edge ]
  %100 = icmp eq ptr %4, null
  br i1 %100, label %.thread, label %101

101:                                              ; preds = %99
  %102 = call ptr @AllocateZeroPool(i64 noundef 64) #3
  %103 = icmp eq ptr %102, null
  br i1 %103, label %.thread, label %104

104:                                              ; preds = %101
  store i64 1886611816, ptr %102, align 8, !tbaa !29
  %105 = load i16, ptr %2, align 2, !tbaa !28
  %106 = getelementptr inbounds i8, ptr %102, i64 58
  store i16 %105, ptr %106, align 2, !tbaa !41
  %107 = getelementptr inbounds i8, ptr %102, i64 56
  store i8 0, ptr %107, align 8, !tbaa !42
  %108 = getelementptr inbounds i8, ptr %102, i64 40
  %109 = call ptr @InitializeListHead(ptr noundef nonnull %108) #3
  %110 = call i64 @AsciiStrSize(ptr noundef %3) #3
  %111 = trunc i64 %110 to i32
  %112 = add i32 %111, 46
  %113 = zext i32 %112 to i64
  %114 = call ptr @AllocateZeroPool(i64 noundef %113) #3
  %115 = getelementptr inbounds i8, ptr %102, i64 8
  store ptr %114, ptr %115, align 8, !tbaa !31
  %116 = icmp eq ptr %114, null
  br i1 %116, label %117, label %118

117:                                              ; preds = %104
  call void @FreePool(ptr noundef nonnull %102) #3
  br label %.thread

118:                                              ; preds = %104
  %119 = load i32, ptr %114, align 1
  %120 = and i32 %119, 16777215
  %121 = or disjoint i32 %120, 67108864
  store i32 %121, ptr %114, align 1
  %122 = load ptr, ptr %115, align 8, !tbaa !31
  %123 = getelementptr inbounds i8, ptr %122, i64 4
  store i32 %112, ptr %123, align 1, !tbaa !32
  %124 = getelementptr inbounds i8, ptr %122, i64 8
  store i32 %112, ptr %124, align 1, !tbaa !43
  %125 = getelementptr inbounds i8, ptr %122, i64 12
  %126 = call ptr @CopyMem(ptr noundef nonnull %125, ptr noundef nonnull @mLanguageWindow, i64 noundef 32) #3
  %127 = load ptr, ptr %115, align 8, !tbaa !31
  %128 = getelementptr inbounds i8, ptr %127, i64 44
  store i16 1, ptr %128, align 1, !tbaa !44
  %129 = getelementptr inbounds i8, ptr %127, i64 46
  %130 = call ptr @AsciiStrCpy(ptr noundef nonnull %129, ptr noundef %3) #3
  %131 = call i64 @StrSize(ptr noundef nonnull %4) #3
  %132 = load i16, ptr %2, align 2, !tbaa !28
  %133 = zext i16 %132 to i64
  %134 = mul nuw nsw i64 %133, 3
  %135 = add i64 %131, 4294967293
  %136 = add i64 %135, %134
  %137 = trunc i64 %136 to i32
  %138 = add i32 %137, -1
  %139 = zext i32 %138 to i64
  %140 = call ptr @AllocateZeroPool(i64 noundef %139) #3
  %141 = getelementptr inbounds i8, ptr %102, i64 16
  store ptr %140, ptr %141, align 8, !tbaa !35
  %142 = icmp eq ptr %140, null
  br i1 %142, label %143, label %145

143:                                              ; preds = %118
  %144 = load ptr, ptr %115, align 8, !tbaa !31
  call void @FreePool(ptr noundef %144) #3
  call void @FreePool(ptr noundef nonnull %102) #3
  br label %.thread

145:                                              ; preds = %118
  store i8 20, ptr %140, align 1, !tbaa !36
  %146 = getelementptr inbounds i8, ptr %140, i64 1
  %147 = call i64 @StrSize(ptr noundef nonnull %4) #3
  %148 = call ptr @CopyMem(ptr noundef nonnull %146, ptr noundef nonnull %4, i64 noundef %147) #3
  %149 = call i64 @StrSize(ptr noundef nonnull %4) #3
  %150 = getelementptr inbounds i8, ptr %146, i64 %149
  %151 = load i16, ptr %2, align 2, !tbaa !28
  %.not291.not338 = icmp ugt i16 %151, 2
  br i1 %.not291.not338, label %.lr.ph342, label %._crit_edge343

.lr.ph342:                                        ; preds = %145, %.lr.ph342
  %.0249340 = phi i16 [ %153, %.lr.ph342 ], [ 2, %145 ]
  %.0254339 = phi ptr [ %152, %.lr.ph342 ], [ %150, %145 ]
  store i8 20, ptr %.0254339, align 1, !tbaa !36
  %152 = getelementptr inbounds i8, ptr %.0254339, i64 3
  %153 = add nuw i16 %.0249340, 1
  %154 = load i16, ptr %2, align 2, !tbaa !28
  %.not291.not = icmp ugt i16 %154, %153
  br i1 %.not291.not, label %.lr.ph342, label %._crit_edge343, !llvm.loop !45

._crit_edge343:                                   ; preds = %.lr.ph342, %145
  %.0254.lcssa = phi ptr [ %150, %145 ], [ %152, %.lr.ph342 ]
  store i8 0, ptr %.0254.lcssa, align 1, !tbaa !36
  %155 = add i32 %138, %112
  %156 = load ptr, ptr %115, align 8, !tbaa !31
  %157 = load i32, ptr %156, align 1
  %158 = and i32 %155, 16777215
  %159 = and i32 %157, -16777216
  %160 = or disjoint i32 %159, %158
  store i32 %160, ptr %156, align 1
  %161 = load ptr, ptr %115, align 8, !tbaa !31
  %162 = load i32, ptr %161, align 1
  %163 = and i32 %162, 16777215
  %164 = getelementptr inbounds i8, ptr %44, i64 16
  %165 = load i32, ptr %164, align 8, !tbaa !37
  %166 = add i32 %165, %163
  store i32 %166, ptr %164, align 8, !tbaa !37
  %167 = getelementptr inbounds i8, ptr %102, i64 24
  %168 = call ptr @InsertTailList(ptr noundef nonnull %47, ptr noundef nonnull %167) #3
  br label %169

169:                                              ; preds = %._crit_edge, %._crit_edge343
  %.not290396 = phi i1 [ true, %._crit_edge343 ], [ false, %._crit_edge ]
  %.0252.lcssa386394 = phi i64 [ %.0252.lcssa386395, %._crit_edge343 ], [ %55, %._crit_edge ]
  %.1260 = phi ptr [ %102, %._crit_edge343 ], [ %.1248, %._crit_edge ]
  %.0 = phi i8 [ 1, %._crit_edge343 ], [ 0, %._crit_edge ]
  %170 = getelementptr inbounds i8, ptr %.1260, i64 8
  %171 = load ptr, ptr %170, align 8, !tbaa !31
  %172 = load i32, ptr %171, align 1
  %173 = and i32 %172, 16777215
  %174 = getelementptr inbounds i8, ptr %171, i64 4
  %175 = load i32, ptr %174, align 1, !tbaa !32
  %176 = sub i32 %173, %175
  %177 = call i64 @StrSize(ptr noundef %5) #3
  %178 = trunc i64 %177 to i32
  br i1 %.not284, label %179, label %207

179:                                              ; preds = %169
  %180 = add i32 %178, 1
  %181 = add i32 %180, %176
  %182 = zext i32 %181 to i64
  %183 = call ptr @AllocateZeroPool(i64 noundef %182) #3
  %184 = icmp eq ptr %183, null
  br i1 %184, label %.thread312, label %185

185:                                              ; preds = %179
  %186 = getelementptr inbounds i8, ptr %.1260, i64 16
  %187 = load ptr, ptr %186, align 8, !tbaa !35
  %188 = zext i32 %176 to i64
  %189 = add nsw i64 %188, -1
  %190 = call ptr @CopyMem(ptr noundef nonnull %183, ptr noundef %187, i64 noundef %189) #3
  %191 = getelementptr inbounds i8, ptr %183, i64 %188
  %192 = getelementptr inbounds i8, ptr %191, i64 -1
  store i8 20, ptr %192, align 1, !tbaa !36
  %193 = call i64 @StrSize(ptr noundef %5) #3
  %194 = call ptr @CopyMem(ptr noundef nonnull %191, ptr noundef %5, i64 noundef %193) #3
  %195 = call i64 @StrSize(ptr noundef %5) #3
  %196 = getelementptr inbounds i8, ptr %191, i64 %195
  store i8 0, ptr %196, align 1, !tbaa !36
  %197 = load ptr, ptr %186, align 8, !tbaa !35
  call void @FreePool(ptr noundef %197) #3
  store ptr %183, ptr %186, align 8, !tbaa !35
  %198 = load ptr, ptr %170, align 8, !tbaa !31
  %199 = load i32, ptr %198, align 1
  %200 = add i32 %199, %180
  %201 = and i32 %200, 16777215
  %202 = and i32 %199, -16777216
  %203 = or disjoint i32 %201, %202
  store i32 %203, ptr %198, align 1
  %204 = getelementptr inbounds i8, ptr %44, i64 16
  %205 = load i32, ptr %204, align 8, !tbaa !37
  %206 = add i32 %205, %180
  store i32 %206, ptr %204, align 8, !tbaa !37
  br label %302

207:                                              ; preds = %169
  %208 = add i32 %178, 2
  %209 = getelementptr inbounds i8, ptr %.1260, i64 56
  %210 = load i8, ptr %209, align 8, !tbaa !42
  %211 = load ptr, ptr %10, align 8, !tbaa !20
  %212 = call zeroext i8 @ReferFontInfoLocally(ptr noundef %27, ptr noundef nonnull %.1260, i8 noundef zeroext %210, i8 noundef zeroext 0, ptr noundef %211, ptr noundef nonnull %9)
  %.not292 = icmp eq i8 %212, 0
  br i1 %.not292, label %244, label %213

213:                                              ; preds = %207
  %214 = add i32 %208, %176
  %215 = zext i32 %214 to i64
  %216 = call ptr @AllocateZeroPool(i64 noundef %215) #3
  %217 = icmp eq ptr %216, null
  br i1 %217, label %.thread312, label %218

218:                                              ; preds = %213
  %219 = getelementptr inbounds i8, ptr %.1260, i64 16
  %220 = load ptr, ptr %219, align 8, !tbaa !35
  %221 = zext i32 %176 to i64
  %222 = add nsw i64 %221, -1
  %223 = call ptr @CopyMem(ptr noundef nonnull %216, ptr noundef %220, i64 noundef %222) #3
  %224 = getelementptr inbounds i8, ptr %216, i64 %221
  %225 = getelementptr inbounds i8, ptr %224, i64 -1
  store i8 21, ptr %225, align 1, !tbaa !36
  %226 = load ptr, ptr %9, align 8, !tbaa !20
  %227 = getelementptr inbounds i8, ptr %226, i64 32
  %228 = load i8, ptr %227, align 8, !tbaa !46
  store i8 %228, ptr %224, align 1, !tbaa !36
  %229 = getelementptr inbounds i8, ptr %224, i64 1
  %230 = call i64 @StrSize(ptr noundef %5) #3
  %231 = call ptr @CopyMem(ptr noundef nonnull %229, ptr noundef %5, i64 noundef %230) #3
  %232 = call i64 @StrSize(ptr noundef %5) #3
  %233 = getelementptr inbounds i8, ptr %229, i64 %232
  store i8 0, ptr %233, align 1, !tbaa !36
  %234 = load ptr, ptr %219, align 8, !tbaa !35
  call void @FreePool(ptr noundef %234) #3
  store ptr %216, ptr %219, align 8, !tbaa !35
  %235 = load ptr, ptr %170, align 8, !tbaa !31
  %236 = load i32, ptr %235, align 1
  %237 = add i32 %236, %208
  %238 = and i32 %237, 16777215
  %239 = and i32 %236, -16777216
  %240 = or disjoint i32 %238, %239
  store i32 %240, ptr %235, align 1
  %241 = getelementptr inbounds i8, ptr %44, i64 16
  %242 = load i32, ptr %241, align 8, !tbaa !37
  %243 = add i32 %242, %208
  store i32 %243, ptr %241, align 8, !tbaa !37
  br label %302

244:                                              ; preds = %207
  %245 = getelementptr inbounds i8, ptr %6, i64 6
  %246 = call i64 @StrSize(ptr noundef nonnull %245) #3
  %247 = trunc i64 %246 to i32
  %248 = add i32 %247, 11
  %249 = add i32 %208, %176
  %250 = add i32 %249, %248
  %251 = zext i32 %250 to i64
  %252 = call ptr @AllocateZeroPool(i64 noundef %251) #3
  %253 = icmp eq ptr %252, null
  br i1 %253, label %.thread312, label %254

254:                                              ; preds = %244
  %255 = getelementptr inbounds i8, ptr %.1260, i64 16
  %256 = load ptr, ptr %255, align 8, !tbaa !35
  %257 = zext i32 %176 to i64
  %258 = add nsw i64 %257, -1
  %259 = call ptr @CopyMem(ptr noundef nonnull %252, ptr noundef %256, i64 noundef %258) #3
  %260 = getelementptr inbounds i8, ptr %252, i64 %257
  %261 = getelementptr inbounds i8, ptr %260, i64 -1
  store i8 49, ptr %8, align 1, !tbaa !48
  %262 = getelementptr inbounds i8, ptr %8, i64 1
  store i8 64, ptr %262, align 1, !tbaa !51
  %263 = trunc i32 %248 to i16
  %264 = getelementptr inbounds i8, ptr %8, i64 2
  store i16 %263, ptr %264, align 1, !tbaa !52
  %265 = call ptr @CopyMem(ptr noundef nonnull %261, ptr noundef nonnull %8, i64 noundef 4) #3
  %266 = getelementptr inbounds i8, ptr %260, i64 3
  %267 = load ptr, ptr %9, align 8, !tbaa !20
  %268 = getelementptr inbounds i8, ptr %267, i64 32
  %269 = load i8, ptr %268, align 8, !tbaa !46
  store i8 %269, ptr %266, align 1, !tbaa !36
  %270 = getelementptr inbounds i8, ptr %260, i64 4
  %271 = getelementptr inbounds i8, ptr %6, i64 4
  %272 = call ptr @CopyMem(ptr noundef nonnull %270, ptr noundef nonnull %271, i64 noundef 2) #3
  %273 = getelementptr inbounds i8, ptr %260, i64 6
  %274 = call ptr @CopyMem(ptr noundef nonnull %273, ptr noundef nonnull %6, i64 noundef 4) #3
  %275 = getelementptr inbounds i8, ptr %260, i64 10
  %276 = call i64 @StrSize(ptr noundef nonnull %245) #3
  %277 = call ptr @CopyMem(ptr noundef nonnull %275, ptr noundef nonnull %245, i64 noundef %276) #3
  %278 = call i64 @StrSize(ptr noundef nonnull %245) #3
  %279 = getelementptr inbounds i8, ptr %275, i64 %278
  store i8 21, ptr %279, align 1, !tbaa !36
  %280 = getelementptr inbounds i8, ptr %279, i64 1
  %281 = load ptr, ptr %9, align 8, !tbaa !20
  %282 = getelementptr inbounds i8, ptr %281, i64 32
  %283 = load i8, ptr %282, align 8, !tbaa !46
  store i8 %283, ptr %280, align 1, !tbaa !36
  %284 = getelementptr inbounds i8, ptr %279, i64 2
  %285 = call i64 @StrSize(ptr noundef %5) #3
  %286 = call ptr @CopyMem(ptr noundef nonnull %284, ptr noundef %5, i64 noundef %285) #3
  %287 = call i64 @StrSize(ptr noundef %5) #3
  %288 = getelementptr inbounds i8, ptr %284, i64 %287
  store i8 0, ptr %288, align 1, !tbaa !36
  %289 = load ptr, ptr %255, align 8, !tbaa !35
  call void @FreePool(ptr noundef %289) #3
  store ptr %252, ptr %255, align 8, !tbaa !35
  %290 = add i32 %248, %208
  %291 = load ptr, ptr %170, align 8, !tbaa !31
  %292 = load i32, ptr %291, align 1
  %293 = add i32 %292, %290
  %294 = and i32 %293, 16777215
  %295 = and i32 %292, -16777216
  %296 = or disjoint i32 %294, %295
  store i32 %296, ptr %291, align 1
  %297 = getelementptr inbounds i8, ptr %44, i64 16
  %298 = load i32, ptr %297, align 8, !tbaa !37
  %299 = add i32 %298, %290
  store i32 %299, ptr %297, align 8, !tbaa !37
  %300 = load i8, ptr %209, align 8, !tbaa !42
  %301 = add i8 %300, 1
  store i8 %301, ptr %209, align 8, !tbaa !42
  br label %302

302:                                              ; preds = %185, %254, %218
  %303 = icmp sgt i64 %.0252.lcssa386394, -1
  %or.cond10 = and i1 %303, %.not290396
  br i1 %or.cond10, label %304, label %306

304:                                              ; preds = %302
  %305 = call i64 @InvokeRegisteredFunction(ptr noundef %27, i64 noundef 1, ptr noundef nonnull %.1260, i8 noundef zeroext 4, ptr noundef %1) #3
  br label %306

306:                                              ; preds = %304, %302
  %.1311 = phi i8 [ 1, %304 ], [ %.0, %302 ]
  %.2 = phi i64 [ %305, %304 ], [ %.0252.lcssa386394, %302 ]
  %307 = icmp slt i64 %.2, 0
  br i1 %307, label %.thread312, label %.preheader

.preheader:                                       ; preds = %306
  %.2257345 = load ptr, ptr %47, align 8, !tbaa !21
  %.not299346 = icmp eq ptr %.2257345, %47
  br i1 %.not299346, label %.thread, label %.lr.ph348

.lr.ph348:                                        ; preds = %.preheader, %.lr.ph348._crit_edge
  %.2257347 = phi ptr [ %.2257, %.lr.ph348._crit_edge ], [ %.2257345, %.preheader ]
  %308 = call zeroext i8 @DebugAssertEnabled() #3
  %.not300 = icmp eq i8 %308, 0
  %.pre370 = ptrtoint ptr %.2257347 to i64
  %.pre372 = add i64 %.pre370, -24
  %.pre374 = inttoptr i64 %.pre372 to ptr
  br i1 %.not300, label %.lr.ph348._crit_edge, label %309

309:                                              ; preds = %.lr.ph348
  %310 = load i64, ptr %.pre374, align 8, !tbaa !29
  %.not301 = icmp eq i64 %310, 1886611816
  br i1 %.not301, label %.lr.ph348._crit_edge, label %311

311:                                              ; preds = %309
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 1549, ptr noundef nonnull @.str.2) #3
  br label %.lr.ph348._crit_edge

.lr.ph348._crit_edge:                             ; preds = %.lr.ph348, %309, %311
  %312 = phi ptr [ %.2257347, %311 ], [ %.pre374, %309 ], [ %.pre374, %.lr.ph348 ]
  %313 = load i16, ptr %2, align 2, !tbaa !28
  %314 = getelementptr inbounds i8, ptr %312, i64 58
  store i16 %313, ptr %314, align 2, !tbaa !41
  %.2257 = load ptr, ptr %.2257347, align 8, !tbaa !21
  %.not299 = icmp eq ptr %.2257, %47
  br i1 %.not299, label %.thread, label %.lr.ph348, !llvm.loop !53

.thread312:                                       ; preds = %179, %213, %244, %306
  %.2318 = phi i64 [ %.2, %306 ], [ -9223372036854775799, %244 ], [ -9223372036854775799, %213 ], [ -9223372036854775799, %179 ]
  %.1311316 = phi i8 [ %.1311, %306 ], [ %.0, %244 ], [ %.0, %213 ], [ %.0, %179 ]
  %.not302 = icmp eq i8 %.1311316, 0
  br i1 %.not302, label %.thread, label %315

315:                                              ; preds = %.thread312
  %316 = getelementptr inbounds i8, ptr %.1260, i64 24
  %317 = call ptr @RemoveEntryList(ptr noundef nonnull %316) #3
  %318 = getelementptr inbounds i8, ptr %.1260, i64 16
  %319 = load ptr, ptr %318, align 8, !tbaa !35
  call void @FreePool(ptr noundef %319) #3
  %320 = load ptr, ptr %170, align 8, !tbaa !31
  call void @FreePool(ptr noundef %320) #3
  call void @FreePool(ptr noundef nonnull %.1260) #3
  br label %.thread

.thread:                                          ; preds = %32, %._crit_edge357, %67, %.lr.ph348._crit_edge, %.preheader, %117, %143, %61, %59, %99, %101, %315, %.thread312, %42, %28, %20, %7
  %.0251 = phi i64 [ -9223372036854775806, %7 ], [ -9223372036854775794, %20 ], [ -9223372036854775806, %28 ], [ -9223372036854775794, %42 ], [ %.2318, %.thread312 ], [ %.2318, %315 ], [ -9223372036854775799, %117 ], [ -9223372036854775799, %143 ], [ -9223372036854775806, %61 ], [ -9223372036854775806, %59 ], [ -9223372036854775806, %99 ], [ -9223372036854775799, %101 ], [ %.2, %.preheader ], [ %.2, %.lr.ph348._crit_edge ], [ -9223372036854775799, %67 ], [ %55, %._crit_edge357 ], [ -9223372036854775794, %32 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #3
  ret i64 %.0251
}

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

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

declare ptr @InitializeListHead(ptr noundef) local_unnamed_addr #2

declare ptr @AsciiStrCpy(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare ptr @RemoveEntryList(ptr noundef) local_unnamed_addr #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_HII_DATABASE_PRIVATE_DATA", !7, i64 0, !10, i64 8, !10, i64 24, !12, i64 40, !13, i64 72, !14, i64 112, !15, i64 152, !16, i64 240, !10, i64 288, !7, i64 304, !10, i64 312, !7, i64 328, !17, i64 336, !11, i64 352}
!7 = !{!"long long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"_LIST_ENTRY", !11, i64 0, !11, i64 8}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"_EFI_HII_FONT_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!13 = !{!"_EFI_HII_IMAGE_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!14 = !{!"_EFI_HII_STRING_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!15 = !{!"_EFI_HII_DATABASE_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80}
!16 = !{!"_EFI_HII_CONFIG_ROUTING_PROTOCOL", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}
!17 = !{!"", !18, i64 0, !19, i64 4, !19, i64 6, !8, i64 8}
!18 = !{!"int", !8, i64 0}
!19 = !{!"short", !8, i64 0}
!20 = !{!11, !11, i64 0}
!21 = !{!10, !11, i64 0}
!22 = !{!23, !7, i64 0}
!23 = !{!"_HII_DATABASE_RECORD", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !10, i64 32}
!24 = !{!23, !11, i64 24}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!23, !11, i64 8}
!28 = !{!19, !19, i64 0}
!29 = !{!30, !7, i64 0}
!30 = !{!"_HII_STRING_PACKAGE_INSTANCE", !7, i64 0, !11, i64 8, !11, i64 16, !10, i64 24, !10, i64 40, !8, i64 56, !19, i64 58}
!31 = !{!30, !11, i64 8}
!32 = !{!33, !18, i64 4}
!33 = !{!"_EFI_HII_STRING_PACKAGE_HDR", !34, i64 0, !18, i64 4, !18, i64 8, !8, i64 12, !19, i64 44, !8, i64 46}
!34 = !{!"", !18, i64 0, !18, i64 3}
!35 = !{!30, !11, i64 16}
!36 = !{!8, !8, i64 0}
!37 = !{!38, !18, i64 16}
!38 = !{!"_HII_DATABASE_PACKAGE_LIST_INSTANCE", !39, i64 0, !10, i64 24, !10, i64 40, !10, i64 56, !10, i64 72, !10, i64 88, !11, i64 104, !10, i64 112, !11, i64 128}
!39 = !{!"", !17, i64 0, !18, i64 16}
!40 = distinct !{!40, !26}
!41 = !{!30, !19, i64 58}
!42 = !{!30, !8, i64 56}
!43 = !{!33, !18, i64 8}
!44 = !{!33, !19, i64 44}
!45 = distinct !{!45, !26}
!46 = !{!47, !8, i64 32}
!47 = !{!"_HII_FONT_INFO", !7, i64 0, !10, i64 8, !11, i64 24, !8, i64 32}
!48 = !{!49, !8, i64 0}
!49 = !{!"_EFI_HII_SIBT_EXT2_BLOCK", !50, i64 0, !8, i64 1, !19, i64 2}
!50 = !{!"", !8, i64 0}
!51 = !{!49, !8, i64 1}
!52 = !{!49, !19, i64 2}
!53 = distinct !{!53, !26}


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