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

; 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_STRING_PACKAGE_INSTANCE = type { i64, ptr, ptr, %struct._LIST_ENTRY, %struct._LIST_ENTRY, i8, i16 }
%struct._LIST_ENTRY = type { ptr, ptr }
%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.GUID = type { i32, i16, i16, [8 x i8] }
%struct.EFI_FONT_INFO = type { i32, i16, [1 x i16] }

@.str = external hidden unnamed_addr constant [148 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [28 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

; 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

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

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

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

39:                                               ; preds = %8
  %40 = call zeroext i8 @DebugAssertEnabled()
  %41 = icmp ne i8 %40, 0
  br i1 %41, label %42, label %47

42:                                               ; preds = %39
  %43 = load ptr, ptr %11, align 8, !tbaa !5
  %44 = icmp ne ptr %43, null
  br i1 %44, label %46, label %45

45:                                               ; preds = %42
  call void @DebugAssert(ptr noundef @.str, i64 noundef 294, ptr noundef @.str.6)
  br label %46

46:                                               ; preds = %45, %42
  br label %47

47:                                               ; preds = %46, %39
  br label %48

48:                                               ; preds = %47
  br label %49

49:                                               ; preds = %48
  br label %50

50:                                               ; preds = %49
  %51 = call zeroext i8 @DebugAssertEnabled()
  %52 = icmp ne i8 %51, 0
  br i1 %52, label %53, label %60

53:                                               ; preds = %50
  %54 = load ptr, ptr %11, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %54, i32 0, i32 0
  %56 = load i64, ptr %55, align 8, !tbaa !11
  %57 = icmp eq i64 %56, 1886611816
  br i1 %57, label %59, label %58

58:                                               ; preds = %53
  call void @DebugAssert(ptr noundef @.str, i64 noundef 295, ptr noundef @.str.7)
  br label %59

59:                                               ; preds = %58, %53
  br label %60

60:                                               ; preds = %59, %50
  br label %61

61:                                               ; preds = %60
  br label %62

62:                                               ; preds = %61
  store i16 1, ptr %19, align 2, !tbaa !9
  %63 = load i16, ptr %12, align 2, !tbaa !9
  %64 = zext i16 %63 to i32
  %65 = icmp ne i32 %64, 65535
  br i1 %65, label %66, label %97

66:                                               ; preds = %62
  %67 = load i16, ptr %12, align 2, !tbaa !9
  %68 = zext i16 %67 to i32
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %70, label %97

70:                                               ; preds = %66
  br label %71

71:                                               ; preds = %70
  %72 = call zeroext i8 @DebugAssertEnabled()
  %73 = icmp ne i8 %72, 0
  br i1 %73, label %74, label %85

74:                                               ; preds = %71
  %75 = load ptr, ptr %13, align 8, !tbaa !5
  %76 = icmp ne ptr %75, null
  br i1 %76, label %77, label %83

77:                                               ; preds = %74
  %78 = load ptr, ptr %14, align 8, !tbaa !5
  %79 = icmp ne ptr %78, null
  br i1 %79, label %80, label %83

80:                                               ; preds = %77
  %81 = load ptr, ptr %15, align 8, !tbaa !5
  %82 = icmp ne ptr %81, null
  br i1 %82, label %84, label %83

83:                                               ; preds = %80, %77, %74
  call void @DebugAssert(ptr noundef @.str, i64 noundef 300, ptr noundef @.str.8)
  br label %84

84:                                               ; preds = %83, %80
  br label %85

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

86:                                               ; preds = %85
  br label %87

87:                                               ; preds = %86
  %88 = load i16, ptr %12, align 2, !tbaa !9
  %89 = zext i16 %88 to i32
  %90 = load ptr, ptr %11, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %90, i32 0, i32 6
  %92 = load i16, ptr %91, align 2, !tbaa !15
  %93 = zext i16 %92 to i32
  %94 = icmp sgt i32 %89, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %87
  store i64 -9223372036854775794, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

96:                                               ; preds = %87
  br label %126

97:                                               ; preds = %66, %62
  br label %98

98:                                               ; preds = %97
  %99 = call zeroext i8 @DebugAssertEnabled()
  %100 = icmp ne i8 %99, 0
  br i1 %100, label %101, label %111

101:                                              ; preds = %98
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = icmp ne ptr %102, null
  br i1 %103, label %104, label %109

104:                                              ; preds = %101
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct._HII_DATABASE_PRIVATE_DATA, ptr %105, i32 0, i32 0
  %107 = load i64, ptr %106, align 8, !tbaa !16
  %108 = icmp eq i64 %107, 1883531592
  br i1 %108, label %110, label %109

109:                                              ; preds = %104, %101
  call void @DebugAssert(ptr noundef @.str, i64 noundef 305, ptr noundef @.str.9)
  br label %110

110:                                              ; preds = %109, %104
  br label %111

111:                                              ; preds = %110, %98
  br label %112

112:                                              ; preds = %111
  br label %113

113:                                              ; preds = %112
  %114 = load i16, ptr %12, align 2, !tbaa !9
  %115 = zext i16 %114 to i32
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %117, label %125

117:                                              ; preds = %113
  %118 = load ptr, ptr %16, align 8, !tbaa !5
  %119 = icmp ne ptr %118, null
  br i1 %119, label %120, label %125

120:                                              ; preds = %117
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %121, i32 0, i32 6
  %123 = load i16, ptr %122, align 2, !tbaa !15
  %124 = load ptr, ptr %16, align 8, !tbaa !5
  store i16 %123, ptr %124, align 2, !tbaa !9
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

125:                                              ; preds = %117, %113
  br label %126

126:                                              ; preds = %125, %96
  %127 = call ptr @ZeroMem(ptr noundef %37, i64 noundef 2)
  %128 = load ptr, ptr %11, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %128, i32 0, i32 2
  %130 = load ptr, ptr %129, align 8, !tbaa !25
  store ptr %130, ptr %18, align 8, !tbaa !5
  store i64 0, ptr %20, align 8, !tbaa !26
  store i64 0, ptr %23, align 8, !tbaa !26
  br label %131

131:                                              ; preds = %689, %126
  %132 = load ptr, ptr %18, align 8, !tbaa !5
  %133 = load i8, ptr %132, align 1, !tbaa !27
  %134 = zext i8 %133 to i32
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %136, label %690

136:                                              ; preds = %131
  %137 = load ptr, ptr %18, align 8, !tbaa !5
  %138 = load i8, ptr %137, align 1, !tbaa !27
  %139 = zext i8 %138 to i32
  switch i32 %139, label %617 [
    i32 16, label %140
    i32 17, label %152
    i32 18, label %164
    i32 19, label %235
    i32 20, label %309
    i32 21, label %322
    i32 22, label %335
    i32 23, label %400
    i32 32, label %468
    i32 34, label %498
    i32 33, label %513
    i32 48, label %525
    i32 49, label %536
    i32 50, label %606
  ]

140:                                              ; preds = %136
  store i64 1, ptr %23, align 8, !tbaa !26
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = load i64, ptr %23, align 8, !tbaa !26
  %143 = getelementptr inbounds i8, ptr %141, i64 %142
  store ptr %143, ptr %22, align 8, !tbaa !5
  %144 = load i64, ptr %23, align 8, !tbaa !26
  %145 = load ptr, ptr %22, align 8, !tbaa !5
  %146 = call i64 @AsciiStrSize(ptr noundef %145)
  %147 = add i64 %144, %146
  %148 = load i64, ptr %20, align 8, !tbaa !26
  %149 = add i64 %148, %147
  store i64 %149, ptr %20, align 8, !tbaa !26
  %150 = load i16, ptr %19, align 2, !tbaa !9
  %151 = add i16 %150, 1
  store i16 %151, ptr %19, align 2, !tbaa !9
  br label %618

152:                                              ; preds = %136
  store i64 2, ptr %23, align 8, !tbaa !26
  %153 = load ptr, ptr %18, align 8, !tbaa !5
  %154 = load i64, ptr %23, align 8, !tbaa !26
  %155 = getelementptr inbounds i8, ptr %153, i64 %154
  store ptr %155, ptr %22, align 8, !tbaa !5
  %156 = load i64, ptr %23, align 8, !tbaa !26
  %157 = load ptr, ptr %22, align 8, !tbaa !5
  %158 = call i64 @AsciiStrSize(ptr noundef %157)
  %159 = add i64 %156, %158
  %160 = load i64, ptr %20, align 8, !tbaa !26
  %161 = add i64 %160, %159
  store i64 %161, ptr %20, align 8, !tbaa !26
  %162 = load i16, ptr %19, align 2, !tbaa !9
  %163 = add i16 %162, 1
  store i16 %163, ptr %19, align 2, !tbaa !9
  br label %618

164:                                              ; preds = %136
  %165 = load ptr, ptr %18, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 1
  %167 = call ptr @CopyMem(ptr noundef %28, ptr noundef %166, i64 noundef 2)
  %168 = load ptr, ptr %18, align 8, !tbaa !5
  %169 = ptrtoint ptr %168 to i64
  %170 = add i64 %169, 4
  %171 = sub i64 %170, 1
  %172 = inttoptr i64 %171 to ptr
  store ptr %172, ptr %22, align 8, !tbaa !5
  %173 = load ptr, ptr %22, align 8, !tbaa !5
  %174 = load ptr, ptr %18, align 8, !tbaa !5
  %175 = ptrtoint ptr %173 to i64
  %176 = ptrtoint ptr %174 to i64
  %177 = sub i64 %175, %176
  %178 = load i64, ptr %20, align 8, !tbaa !26
  %179 = add i64 %178, %177
  store i64 %179, ptr %20, align 8, !tbaa !26
  store i64 0, ptr %21, align 8, !tbaa !26
  br label %180

180:                                              ; preds = %231, %164
  %181 = load i64, ptr %21, align 8, !tbaa !26
  %182 = load i16, ptr %28, align 2, !tbaa !9
  %183 = zext i16 %182 to i64
  %184 = icmp ult i64 %181, %183
  br i1 %184, label %185, label %234

185:                                              ; preds = %180
  %186 = load ptr, ptr %22, align 8, !tbaa !5
  %187 = call i64 @AsciiStrSize(ptr noundef %186)
  %188 = load i64, ptr %20, align 8, !tbaa !26
  %189 = add i64 %188, %187
  store i64 %189, ptr %20, align 8, !tbaa !26
  %190 = load i16, ptr %19, align 2, !tbaa !9
  %191 = zext i16 %190 to i32
  %192 = load i16, ptr %12, align 2, !tbaa !9
  %193 = zext i16 %192 to i32
  %194 = icmp eq i32 %191, %193
  br i1 %194, label %195, label %224

195:                                              ; preds = %185
  br label %196

196:                                              ; preds = %195
  %197 = call zeroext i8 @DebugAssertEnabled()
  %198 = icmp ne i8 %197, 0
  br i1 %198, label %199, label %210

199:                                              ; preds = %196
  %200 = load ptr, ptr %13, align 8, !tbaa !5
  %201 = icmp ne ptr %200, null
  br i1 %201, label %202, label %208

202:                                              ; preds = %199
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = icmp ne ptr %203, null
  br i1 %204, label %205, label %208

205:                                              ; preds = %202
  %206 = load ptr, ptr %15, align 8, !tbaa !5
  %207 = icmp ne ptr %206, null
  br i1 %207, label %209, label %208

208:                                              ; preds = %205, %202, %199
  call void @DebugAssert(ptr noundef @.str, i64 noundef 344, ptr noundef @.str.8)
  br label %209

209:                                              ; preds = %208, %205
  br label %210

210:                                              ; preds = %209, %196
  br label %211

211:                                              ; preds = %210
  br label %212

212:                                              ; preds = %211
  %213 = load ptr, ptr %18, align 8, !tbaa !5
  %214 = load i8, ptr %213, align 1, !tbaa !27
  %215 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 %214, ptr %215, align 1, !tbaa !27
  %216 = load ptr, ptr %18, align 8, !tbaa !5
  %217 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %216, ptr %217, align 8, !tbaa !5
  %218 = load ptr, ptr %22, align 8, !tbaa !5
  %219 = load ptr, ptr %18, align 8, !tbaa !5
  %220 = ptrtoint ptr %218 to i64
  %221 = ptrtoint ptr %219 to i64
  %222 = sub i64 %220, %221
  %223 = load ptr, ptr %15, align 8, !tbaa !5
  store i64 %222, ptr %223, align 8, !tbaa !26
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

224:                                              ; preds = %185
  %225 = load ptr, ptr %22, align 8, !tbaa !5
  %226 = load ptr, ptr %22, align 8, !tbaa !5
  %227 = call i64 @AsciiStrSize(ptr noundef %226)
  %228 = getelementptr inbounds i8, ptr %225, i64 %227
  store ptr %228, ptr %22, align 8, !tbaa !5
  %229 = load i16, ptr %19, align 2, !tbaa !9
  %230 = add i16 %229, 1
  store i16 %230, ptr %19, align 2, !tbaa !9
  br label %231

231:                                              ; preds = %224
  %232 = load i64, ptr %21, align 8, !tbaa !26
  %233 = add i64 %232, 1
  store i64 %233, ptr %21, align 8, !tbaa !26
  br label %180, !llvm.loop !28

234:                                              ; preds = %180
  br label %618

235:                                              ; preds = %136
  %236 = load ptr, ptr %18, align 8, !tbaa !5
  %237 = ptrtoint ptr %236 to i64
  %238 = add i64 %237, 1
  %239 = add i64 %238, 1
  %240 = inttoptr i64 %239 to ptr
  %241 = call ptr @CopyMem(ptr noundef %28, ptr noundef %240, i64 noundef 2)
  %242 = load ptr, ptr %18, align 8, !tbaa !5
  %243 = ptrtoint ptr %242 to i64
  %244 = add i64 %243, 5
  %245 = sub i64 %244, 1
  %246 = inttoptr i64 %245 to ptr
  store ptr %246, ptr %22, align 8, !tbaa !5
  %247 = load ptr, ptr %22, align 8, !tbaa !5
  %248 = load ptr, ptr %18, align 8, !tbaa !5
  %249 = ptrtoint ptr %247 to i64
  %250 = ptrtoint ptr %248 to i64
  %251 = sub i64 %249, %250
  %252 = load i64, ptr %20, align 8, !tbaa !26
  %253 = add i64 %252, %251
  store i64 %253, ptr %20, align 8, !tbaa !26
  store i64 0, ptr %21, align 8, !tbaa !26
  br label %254

254:                                              ; preds = %305, %235
  %255 = load i64, ptr %21, align 8, !tbaa !26
  %256 = load i16, ptr %28, align 2, !tbaa !9
  %257 = zext i16 %256 to i64
  %258 = icmp ult i64 %255, %257
  br i1 %258, label %259, label %308

259:                                              ; preds = %254
  %260 = load ptr, ptr %22, align 8, !tbaa !5
  %261 = call i64 @AsciiStrSize(ptr noundef %260)
  %262 = load i64, ptr %20, align 8, !tbaa !26
  %263 = add i64 %262, %261
  store i64 %263, ptr %20, align 8, !tbaa !26
  %264 = load i16, ptr %19, align 2, !tbaa !9
  %265 = zext i16 %264 to i32
  %266 = load i16, ptr %12, align 2, !tbaa !9
  %267 = zext i16 %266 to i32
  %268 = icmp eq i32 %265, %267
  br i1 %268, label %269, label %298

269:                                              ; preds = %259
  br label %270

270:                                              ; preds = %269
  %271 = call zeroext i8 @DebugAssertEnabled()
  %272 = icmp ne i8 %271, 0
  br i1 %272, label %273, label %284

273:                                              ; preds = %270
  %274 = load ptr, ptr %13, align 8, !tbaa !5
  %275 = icmp ne ptr %274, null
  br i1 %275, label %276, label %282

276:                                              ; preds = %273
  %277 = load ptr, ptr %14, align 8, !tbaa !5
  %278 = icmp ne ptr %277, null
  br i1 %278, label %279, label %282

279:                                              ; preds = %276
  %280 = load ptr, ptr %15, align 8, !tbaa !5
  %281 = icmp ne ptr %280, null
  br i1 %281, label %283, label %282

282:                                              ; preds = %279, %276, %273
  call void @DebugAssert(ptr noundef @.str, i64 noundef 367, ptr noundef @.str.8)
  br label %283

283:                                              ; preds = %282, %279
  br label %284

284:                                              ; preds = %283, %270
  br label %285

285:                                              ; preds = %284
  br label %286

286:                                              ; preds = %285
  %287 = load ptr, ptr %18, align 8, !tbaa !5
  %288 = load i8, ptr %287, align 1, !tbaa !27
  %289 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 %288, ptr %289, align 1, !tbaa !27
  %290 = load ptr, ptr %18, align 8, !tbaa !5
  %291 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %290, ptr %291, align 8, !tbaa !5
  %292 = load ptr, ptr %22, align 8, !tbaa !5
  %293 = load ptr, ptr %18, align 8, !tbaa !5
  %294 = ptrtoint ptr %292 to i64
  %295 = ptrtoint ptr %293 to i64
  %296 = sub i64 %294, %295
  %297 = load ptr, ptr %15, align 8, !tbaa !5
  store i64 %296, ptr %297, align 8, !tbaa !26
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

298:                                              ; preds = %259
  %299 = load ptr, ptr %22, align 8, !tbaa !5
  %300 = load ptr, ptr %22, align 8, !tbaa !5
  %301 = call i64 @AsciiStrSize(ptr noundef %300)
  %302 = getelementptr inbounds i8, ptr %299, i64 %301
  store ptr %302, ptr %22, align 8, !tbaa !5
  %303 = load i16, ptr %19, align 2, !tbaa !9
  %304 = add i16 %303, 1
  store i16 %304, ptr %19, align 2, !tbaa !9
  br label %305

305:                                              ; preds = %298
  %306 = load i64, ptr %21, align 8, !tbaa !26
  %307 = add i64 %306, 1
  store i64 %307, ptr %21, align 8, !tbaa !26
  br label %254, !llvm.loop !30

308:                                              ; preds = %254
  br label %618

309:                                              ; preds = %136
  store i64 1, ptr %23, align 8, !tbaa !26
  %310 = load ptr, ptr %18, align 8, !tbaa !5
  %311 = load i64, ptr %23, align 8, !tbaa !26
  %312 = getelementptr inbounds i8, ptr %310, i64 %311
  store ptr %312, ptr %22, align 8, !tbaa !5
  %313 = load ptr, ptr %22, align 8, !tbaa !5
  %314 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %313, ptr noundef %36)
  %315 = load i64, ptr %23, align 8, !tbaa !26
  %316 = load i64, ptr %36, align 8, !tbaa !26
  %317 = add i64 %315, %316
  %318 = load i64, ptr %20, align 8, !tbaa !26
  %319 = add i64 %318, %317
  store i64 %319, ptr %20, align 8, !tbaa !26
  %320 = load i16, ptr %19, align 2, !tbaa !9
  %321 = add i16 %320, 1
  store i16 %321, ptr %19, align 2, !tbaa !9
  br label %618

322:                                              ; preds = %136
  store i64 2, ptr %23, align 8, !tbaa !26
  %323 = load ptr, ptr %18, align 8, !tbaa !5
  %324 = load i64, ptr %23, align 8, !tbaa !26
  %325 = getelementptr inbounds i8, ptr %323, i64 %324
  store ptr %325, ptr %22, align 8, !tbaa !5
  %326 = load ptr, ptr %22, align 8, !tbaa !5
  %327 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %326, ptr noundef %36)
  %328 = load i64, ptr %23, align 8, !tbaa !26
  %329 = load i64, ptr %36, align 8, !tbaa !26
  %330 = add i64 %328, %329
  %331 = load i64, ptr %20, align 8, !tbaa !26
  %332 = add i64 %331, %330
  store i64 %332, ptr %20, align 8, !tbaa !26
  %333 = load i16, ptr %19, align 2, !tbaa !9
  %334 = add i16 %333, 1
  store i16 %334, ptr %19, align 2, !tbaa !9
  br label %618

335:                                              ; preds = %136
  store i64 3, ptr %23, align 8, !tbaa !26
  %336 = load ptr, ptr %18, align 8, !tbaa !5
  %337 = load i64, ptr %23, align 8, !tbaa !26
  %338 = getelementptr inbounds i8, ptr %336, i64 %337
  store ptr %338, ptr %22, align 8, !tbaa !5
  %339 = load i64, ptr %23, align 8, !tbaa !26
  %340 = load i64, ptr %20, align 8, !tbaa !26
  %341 = add i64 %340, %339
  store i64 %341, ptr %20, align 8, !tbaa !26
  %342 = load ptr, ptr %18, align 8, !tbaa !5
  %343 = getelementptr inbounds i8, ptr %342, i64 1
  %344 = call ptr @CopyMem(ptr noundef %28, ptr noundef %343, i64 noundef 2)
  store i64 0, ptr %21, align 8, !tbaa !26
  br label %345

345:                                              ; preds = %396, %335
  %346 = load i64, ptr %21, align 8, !tbaa !26
  %347 = load i16, ptr %28, align 2, !tbaa !9
  %348 = zext i16 %347 to i64
  %349 = icmp ult i64 %346, %348
  br i1 %349, label %350, label %399

350:                                              ; preds = %345
  %351 = load ptr, ptr %22, align 8, !tbaa !5
  %352 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %351, ptr noundef %36)
  %353 = load i64, ptr %36, align 8, !tbaa !26
  %354 = load i64, ptr %20, align 8, !tbaa !26
  %355 = add i64 %354, %353
  store i64 %355, ptr %20, align 8, !tbaa !26
  %356 = load i16, ptr %19, align 2, !tbaa !9
  %357 = zext i16 %356 to i32
  %358 = load i16, ptr %12, align 2, !tbaa !9
  %359 = zext i16 %358 to i32
  %360 = icmp eq i32 %357, %359
  br i1 %360, label %361, label %390

361:                                              ; preds = %350
  br label %362

362:                                              ; preds = %361
  %363 = call zeroext i8 @DebugAssertEnabled()
  %364 = icmp ne i8 %363, 0
  br i1 %364, label %365, label %376

365:                                              ; preds = %362
  %366 = load ptr, ptr %13, align 8, !tbaa !5
  %367 = icmp ne ptr %366, null
  br i1 %367, label %368, label %374

368:                                              ; preds = %365
  %369 = load ptr, ptr %14, align 8, !tbaa !5
  %370 = icmp ne ptr %369, null
  br i1 %370, label %371, label %374

371:                                              ; preds = %368
  %372 = load ptr, ptr %15, align 8, !tbaa !5
  %373 = icmp ne ptr %372, null
  br i1 %373, label %375, label %374

374:                                              ; preds = %371, %368, %365
  call void @DebugAssert(ptr noundef @.str, i64 noundef 411, ptr noundef @.str.8)
  br label %375

375:                                              ; preds = %374, %371
  br label %376

376:                                              ; preds = %375, %362
  br label %377

377:                                              ; preds = %376
  br label %378

378:                                              ; preds = %377
  %379 = load ptr, ptr %18, align 8, !tbaa !5
  %380 = load i8, ptr %379, align 1, !tbaa !27
  %381 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 %380, ptr %381, align 1, !tbaa !27
  %382 = load ptr, ptr %18, align 8, !tbaa !5
  %383 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %382, ptr %383, align 8, !tbaa !5
  %384 = load ptr, ptr %22, align 8, !tbaa !5
  %385 = load ptr, ptr %18, align 8, !tbaa !5
  %386 = ptrtoint ptr %384 to i64
  %387 = ptrtoint ptr %385 to i64
  %388 = sub i64 %386, %387
  %389 = load ptr, ptr %15, align 8, !tbaa !5
  store i64 %388, ptr %389, align 8, !tbaa !26
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

390:                                              ; preds = %350
  %391 = load ptr, ptr %22, align 8, !tbaa !5
  %392 = load i64, ptr %36, align 8, !tbaa !26
  %393 = getelementptr inbounds i8, ptr %391, i64 %392
  store ptr %393, ptr %22, align 8, !tbaa !5
  %394 = load i16, ptr %19, align 2, !tbaa !9
  %395 = add i16 %394, 1
  store i16 %395, ptr %19, align 2, !tbaa !9
  br label %396

396:                                              ; preds = %390
  %397 = load i64, ptr %21, align 8, !tbaa !26
  %398 = add i64 %397, 1
  store i64 %398, ptr %21, align 8, !tbaa !26
  br label %345, !llvm.loop !31

399:                                              ; preds = %345
  br label %618

400:                                              ; preds = %136
  store i64 4, ptr %23, align 8, !tbaa !26
  %401 = load ptr, ptr %18, align 8, !tbaa !5
  %402 = load i64, ptr %23, align 8, !tbaa !26
  %403 = getelementptr inbounds i8, ptr %401, i64 %402
  store ptr %403, ptr %22, align 8, !tbaa !5
  %404 = load i64, ptr %23, align 8, !tbaa !26
  %405 = load i64, ptr %20, align 8, !tbaa !26
  %406 = add i64 %405, %404
  store i64 %406, ptr %20, align 8, !tbaa !26
  %407 = load ptr, ptr %18, align 8, !tbaa !5
  %408 = ptrtoint ptr %407 to i64
  %409 = add i64 %408, 1
  %410 = add i64 %409, 1
  %411 = inttoptr i64 %410 to ptr
  %412 = call ptr @CopyMem(ptr noundef %28, ptr noundef %411, i64 noundef 2)
  store i64 0, ptr %21, align 8, !tbaa !26
  br label %413

413:                                              ; preds = %464, %400
  %414 = load i64, ptr %21, align 8, !tbaa !26
  %415 = load i16, ptr %28, align 2, !tbaa !9
  %416 = zext i16 %415 to i64
  %417 = icmp ult i64 %414, %416
  br i1 %417, label %418, label %467

418:                                              ; preds = %413
  %419 = load ptr, ptr %22, align 8, !tbaa !5
  %420 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %419, ptr noundef %36)
  %421 = load i64, ptr %36, align 8, !tbaa !26
  %422 = load i64, ptr %20, align 8, !tbaa !26
  %423 = add i64 %422, %421
  store i64 %423, ptr %20, align 8, !tbaa !26
  %424 = load i16, ptr %19, align 2, !tbaa !9
  %425 = zext i16 %424 to i32
  %426 = load i16, ptr %12, align 2, !tbaa !9
  %427 = zext i16 %426 to i32
  %428 = icmp eq i32 %425, %427
  br i1 %428, label %429, label %458

429:                                              ; preds = %418
  br label %430

430:                                              ; preds = %429
  %431 = call zeroext i8 @DebugAssertEnabled()
  %432 = icmp ne i8 %431, 0
  br i1 %432, label %433, label %444

433:                                              ; preds = %430
  %434 = load ptr, ptr %13, align 8, !tbaa !5
  %435 = icmp ne ptr %434, null
  br i1 %435, label %436, label %442

436:                                              ; preds = %433
  %437 = load ptr, ptr %14, align 8, !tbaa !5
  %438 = icmp ne ptr %437, null
  br i1 %438, label %439, label %442

439:                                              ; preds = %436
  %440 = load ptr, ptr %15, align 8, !tbaa !5
  %441 = icmp ne ptr %440, null
  br i1 %441, label %443, label %442

442:                                              ; preds = %439, %436, %433
  call void @DebugAssert(ptr noundef @.str, i64 noundef 435, ptr noundef @.str.8)
  br label %443

443:                                              ; preds = %442, %439
  br label %444

444:                                              ; preds = %443, %430
  br label %445

445:                                              ; preds = %444
  br label %446

446:                                              ; preds = %445
  %447 = load ptr, ptr %18, align 8, !tbaa !5
  %448 = load i8, ptr %447, align 1, !tbaa !27
  %449 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 %448, ptr %449, align 1, !tbaa !27
  %450 = load ptr, ptr %18, align 8, !tbaa !5
  %451 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %450, ptr %451, align 8, !tbaa !5
  %452 = load ptr, ptr %22, align 8, !tbaa !5
  %453 = load ptr, ptr %18, align 8, !tbaa !5
  %454 = ptrtoint ptr %452 to i64
  %455 = ptrtoint ptr %453 to i64
  %456 = sub i64 %454, %455
  %457 = load ptr, ptr %15, align 8, !tbaa !5
  store i64 %456, ptr %457, align 8, !tbaa !26
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

458:                                              ; preds = %418
  %459 = load ptr, ptr %22, align 8, !tbaa !5
  %460 = load i64, ptr %36, align 8, !tbaa !26
  %461 = getelementptr inbounds i8, ptr %459, i64 %460
  store ptr %461, ptr %22, align 8, !tbaa !5
  %462 = load i16, ptr %19, align 2, !tbaa !9
  %463 = add i16 %462, 1
  store i16 %463, ptr %19, align 2, !tbaa !9
  br label %464

464:                                              ; preds = %458
  %465 = load i64, ptr %21, align 8, !tbaa !26
  %466 = add i64 %465, 1
  store i64 %466, ptr %21, align 8, !tbaa !26
  br label %413, !llvm.loop !32

467:                                              ; preds = %413
  br label %618

468:                                              ; preds = %136
  %469 = load i16, ptr %19, align 2, !tbaa !9
  %470 = zext i16 %469 to i32
  %471 = load i16, ptr %12, align 2, !tbaa !9
  %472 = zext i16 %471 to i32
  %473 = icmp eq i32 %470, %472
  br i1 %473, label %474, label %492

474:                                              ; preds = %468
  %475 = load ptr, ptr %18, align 8, !tbaa !5
  %476 = getelementptr inbounds i8, ptr %475, i64 1
  %477 = call ptr @CopyMem(ptr noundef %12, ptr noundef %476, i64 noundef 2)
  br label %478

478:                                              ; preds = %474
  %479 = call zeroext i8 @DebugAssertEnabled()
  %480 = icmp ne i8 %479, 0
  br i1 %480, label %481, label %489

481:                                              ; preds = %478
  %482 = load i16, ptr %12, align 2, !tbaa !9
  %483 = zext i16 %482 to i32
  %484 = load i16, ptr %19, align 2, !tbaa !9
  %485 = zext i16 %484 to i32
  %486 = icmp ne i32 %483, %485
  br i1 %486, label %488, label %487

487:                                              ; preds = %481
  call void @DebugAssert(ptr noundef @.str, i64 noundef 458, ptr noundef @.str.10)
  br label %488

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

489:                                              ; preds = %488, %478
  br label %490

490:                                              ; preds = %489
  br label %491

491:                                              ; preds = %490
  store i16 1, ptr %19, align 2, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !26
  br label %497

492:                                              ; preds = %468
  %493 = load i64, ptr %20, align 8, !tbaa !26
  %494 = add i64 %493, 3
  store i64 %494, ptr %20, align 8, !tbaa !26
  %495 = load i16, ptr %19, align 2, !tbaa !9
  %496 = add i16 %495, 1
  store i16 %496, ptr %19, align 2, !tbaa !9
  br label %497

497:                                              ; preds = %492, %491
  br label %618

498:                                              ; preds = %136
  %499 = load ptr, ptr %18, align 8, !tbaa !5
  %500 = ptrtoint ptr %499 to i64
  %501 = add i64 %500, 1
  %502 = inttoptr i64 %501 to ptr
  %503 = load i8, ptr %502, align 1, !tbaa !27
  %504 = zext i8 %503 to i16
  store i16 %504, ptr %29, align 2, !tbaa !9
  %505 = load i16, ptr %19, align 2, !tbaa !9
  %506 = zext i16 %505 to i32
  %507 = load i16, ptr %29, align 2, !tbaa !9
  %508 = zext i16 %507 to i32
  %509 = add nsw i32 %506, %508
  %510 = trunc i32 %509 to i16
  store i16 %510, ptr %19, align 2, !tbaa !9
  %511 = load i64, ptr %20, align 8, !tbaa !26
  %512 = add i64 %511, 2
  store i64 %512, ptr %20, align 8, !tbaa !26
  br label %618

513:                                              ; preds = %136
  %514 = load ptr, ptr %18, align 8, !tbaa !5
  %515 = getelementptr inbounds i8, ptr %514, i64 1
  %516 = call ptr @CopyMem(ptr noundef %29, ptr noundef %515, i64 noundef 2)
  %517 = load i16, ptr %19, align 2, !tbaa !9
  %518 = zext i16 %517 to i32
  %519 = load i16, ptr %29, align 2, !tbaa !9
  %520 = zext i16 %519 to i32
  %521 = add nsw i32 %518, %520
  %522 = trunc i32 %521 to i16
  store i16 %522, ptr %19, align 2, !tbaa !9
  %523 = load i64, ptr %20, align 8, !tbaa !26
  %524 = add i64 %523, 3
  store i64 %524, ptr %20, align 8, !tbaa !26
  br label %618

525:                                              ; preds = %136
  %526 = load ptr, ptr %18, align 8, !tbaa !5
  %527 = ptrtoint ptr %526 to i64
  %528 = add i64 %527, 1
  %529 = add i64 %528, 1
  %530 = inttoptr i64 %529 to ptr
  %531 = call ptr @CopyMem(ptr noundef %32, ptr noundef %530, i64 noundef 1)
  %532 = load i8, ptr %32, align 1, !tbaa !27
  %533 = zext i8 %532 to i64
  %534 = load i64, ptr %20, align 8, !tbaa !26
  %535 = add i64 %534, %533
  store i64 %535, ptr %20, align 8, !tbaa !26
  br label %618

536:                                              ; preds = %136
  %537 = load ptr, ptr %18, align 8, !tbaa !5
  %538 = call ptr @CopyMem(ptr noundef %33, ptr noundef %537, i64 noundef 4)
  %539 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %33, i32 0, i32 1
  %540 = load i8, ptr %539, align 1, !tbaa !33
  %541 = zext i8 %540 to i32
  %542 = icmp eq i32 %541, 64
  br i1 %542, label %543, label %600

543:                                              ; preds = %536
  %544 = load i16, ptr %12, align 2, !tbaa !9
  %545 = zext i16 %544 to i32
  %546 = icmp eq i32 %545, 65535
  br i1 %546, label %547, label %600

547:                                              ; preds = %543
  %548 = load ptr, ptr %18, align 8, !tbaa !5
  %549 = getelementptr inbounds i8, ptr %548, i64 4
  store ptr %549, ptr %18, align 8, !tbaa !5
  %550 = load ptr, ptr %18, align 8, !tbaa !5
  %551 = call ptr @CopyMem(ptr noundef %34, ptr noundef %550, i64 noundef 1)
  %552 = load ptr, ptr %18, align 8, !tbaa !5
  %553 = getelementptr inbounds i8, ptr %552, i32 1
  store ptr %553, ptr %18, align 8, !tbaa !5
  %554 = load ptr, ptr %18, align 8, !tbaa !5
  %555 = call ptr @CopyMem(ptr noundef %31, ptr noundef %554, i64 noundef 2)
  %556 = load ptr, ptr %18, align 8, !tbaa !5
  %557 = getelementptr inbounds i8, ptr %556, i64 2
  store ptr %557, ptr %18, align 8, !tbaa !5
  %558 = load ptr, ptr %18, align 8, !tbaa !5
  %559 = call ptr @CopyMem(ptr noundef %30, ptr noundef %558, i64 noundef 4)
  %560 = load ptr, ptr %18, align 8, !tbaa !5
  %561 = getelementptr inbounds i8, ptr %560, i64 4
  store ptr %561, ptr %18, align 8, !tbaa !5
  %562 = load ptr, ptr %18, align 8, !tbaa !5
  %563 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %562, ptr noundef %36)
  %564 = load i64, ptr %36, align 8, !tbaa !26
  %565 = add i64 6, %564
  store i64 %565, ptr %27, align 8, !tbaa !26
  %566 = load i64, ptr %27, align 8, !tbaa !26
  %567 = call ptr @AllocateZeroPool(i64 noundef %566)
  store ptr %567, ptr %25, align 8, !tbaa !5
  %568 = load ptr, ptr %25, align 8, !tbaa !5
  %569 = icmp eq ptr %568, null
  br i1 %569, label %570, label %571

570:                                              ; preds = %547
  store i64 -9223372036854775799, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

571:                                              ; preds = %547
  %572 = load i32, ptr %30, align 4, !tbaa !36
  %573 = load ptr, ptr %25, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %573, i32 0, i32 0
  store i32 %572, ptr %574, align 4, !tbaa !37
  %575 = load i16, ptr %31, align 2, !tbaa !9
  %576 = load ptr, ptr %25, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %576, i32 0, i32 1
  store i16 %575, ptr %577, align 4, !tbaa !39
  %578 = load ptr, ptr %25, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %578, i32 0, i32 2
  %580 = getelementptr inbounds [1 x i16], ptr %579, i64 0, i64 0
  %581 = load ptr, ptr %18, align 8, !tbaa !5
  %582 = load i64, ptr %36, align 8, !tbaa !26
  %583 = call ptr @CopyMem(ptr noundef %580, ptr noundef %581, i64 noundef %582)
  %584 = load ptr, ptr %10, align 8, !tbaa !5
  %585 = load ptr, ptr %25, align 8, !tbaa !5
  %586 = call zeroext i8 @IsFontInfoExisted(ptr noundef %584, ptr noundef %585, ptr noundef null, ptr noundef null, ptr noundef %26)
  %587 = icmp ne i8 %586, 0
  br i1 %587, label %588, label %594

588:                                              ; preds = %571
  %589 = load ptr, ptr %10, align 8, !tbaa !5
  %590 = load ptr, ptr %11, align 8, !tbaa !5
  %591 = load i8, ptr %34, align 1, !tbaa !27
  %592 = load ptr, ptr %26, align 8, !tbaa !5
  %593 = call zeroext i8 @ReferFontInfoLocally(ptr noundef %589, ptr noundef %590, i8 noundef zeroext %591, i8 noundef zeroext 1, ptr noundef %592, ptr noundef %24)
  br label %594

594:                                              ; preds = %588, %571
  %595 = load ptr, ptr %11, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %595, i32 0, i32 5
  %597 = load i8, ptr %596, align 8, !tbaa !40
  %598 = add i8 %597, 1
  store i8 %598, ptr %596, align 8, !tbaa !40
  %599 = load ptr, ptr %25, align 8, !tbaa !5
  call void @FreePool(ptr noundef %599)
  br label %600

600:                                              ; preds = %594, %543, %536
  %601 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %33, i32 0, i32 2
  %602 = load i16, ptr %601, align 1, !tbaa !41
  %603 = zext i16 %602 to i64
  %604 = load i64, ptr %20, align 8, !tbaa !26
  %605 = add i64 %604, %603
  store i64 %605, ptr %20, align 8, !tbaa !26
  br label %618

606:                                              ; preds = %136
  %607 = load ptr, ptr %18, align 8, !tbaa !5
  %608 = ptrtoint ptr %607 to i64
  %609 = add i64 %608, 1
  %610 = add i64 %609, 1
  %611 = inttoptr i64 %610 to ptr
  %612 = call ptr @CopyMem(ptr noundef %35, ptr noundef %611, i64 noundef 4)
  %613 = load i32, ptr %35, align 4, !tbaa !36
  %614 = zext i32 %613 to i64
  %615 = load i64, ptr %20, align 8, !tbaa !26
  %616 = add i64 %615, %614
  store i64 %616, ptr %20, align 8, !tbaa !26
  br label %618

617:                                              ; preds = %136
  br label %618

618:                                              ; preds = %617, %606, %600, %525, %513, %498, %497, %467, %399, %322, %309, %308, %234, %152, %140
  %619 = load i16, ptr %12, align 2, !tbaa !9
  %620 = zext i16 %619 to i32
  %621 = icmp sgt i32 %620, 0
  br i1 %621, label %622, label %678

622:                                              ; preds = %618
  %623 = load i16, ptr %12, align 2, !tbaa !9
  %624 = zext i16 %623 to i32
  %625 = icmp ne i32 %624, 65535
  br i1 %625, label %626, label %678

626:                                              ; preds = %622
  br label %627

627:                                              ; preds = %626
  %628 = call zeroext i8 @DebugAssertEnabled()
  %629 = icmp ne i8 %628, 0
  br i1 %629, label %630, label %641

630:                                              ; preds = %627
  %631 = load ptr, ptr %13, align 8, !tbaa !5
  %632 = icmp ne ptr %631, null
  br i1 %632, label %633, label %639

633:                                              ; preds = %630
  %634 = load ptr, ptr %14, align 8, !tbaa !5
  %635 = icmp ne ptr %634, null
  br i1 %635, label %636, label %639

636:                                              ; preds = %633
  %637 = load ptr, ptr %15, align 8, !tbaa !5
  %638 = icmp ne ptr %637, null
  br i1 %638, label %640, label %639

639:                                              ; preds = %636, %633, %630
  call void @DebugAssert(ptr noundef @.str, i64 noundef 550, ptr noundef @.str.8)
  br label %640

640:                                              ; preds = %639, %636
  br label %641

641:                                              ; preds = %640, %627
  br label %642

642:                                              ; preds = %641
  br label %643

643:                                              ; preds = %642
  %644 = load ptr, ptr %18, align 8, !tbaa !5
  %645 = load i8, ptr %644, align 1, !tbaa !27
  %646 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 %645, ptr %646, align 1, !tbaa !27
  %647 = load ptr, ptr %18, align 8, !tbaa !5
  %648 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %647, ptr %648, align 8, !tbaa !5
  %649 = load i64, ptr %23, align 8, !tbaa !26
  %650 = load ptr, ptr %15, align 8, !tbaa !5
  store i64 %649, ptr %650, align 8, !tbaa !26
  %651 = load i16, ptr %12, align 2, !tbaa !9
  %652 = zext i16 %651 to i32
  %653 = load i16, ptr %19, align 2, !tbaa !9
  %654 = zext i16 %653 to i32
  %655 = sub nsw i32 %654, 1
  %656 = icmp eq i32 %652, %655
  br i1 %656, label %657, label %669

657:                                              ; preds = %643
  %658 = load ptr, ptr %13, align 8, !tbaa !5
  %659 = load i8, ptr %658, align 1, !tbaa !27
  %660 = zext i8 %659 to i32
  %661 = icmp eq i32 %660, 33
  br i1 %661, label %667, label %662

662:                                              ; preds = %657
  %663 = load ptr, ptr %13, align 8, !tbaa !5
  %664 = load i8, ptr %663, align 1, !tbaa !27
  %665 = zext i8 %664 to i32
  %666 = icmp eq i32 %665, 34
  br i1 %666, label %667, label %668

667:                                              ; preds = %662, %657
  store i64 -9223372036854775794, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

668:                                              ; preds = %662
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

669:                                              ; preds = %643
  %670 = load i16, ptr %12, align 2, !tbaa !9
  %671 = zext i16 %670 to i32
  %672 = load i16, ptr %19, align 2, !tbaa !9
  %673 = zext i16 %672 to i32
  %674 = sub nsw i32 %673, 1
  %675 = icmp slt i32 %671, %674
  br i1 %675, label %676, label %677

676:                                              ; preds = %669
  store i64 -9223372036854775794, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

677:                                              ; preds = %669
  br label %678

678:                                              ; preds = %677, %622, %618
  %679 = load ptr, ptr %11, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %679, i32 0, i32 2
  %681 = load ptr, ptr %680, align 8, !tbaa !25
  %682 = load i64, ptr %20, align 8, !tbaa !26
  %683 = getelementptr inbounds i8, ptr %681, i64 %682
  store ptr %683, ptr %18, align 8, !tbaa !5
  %684 = load ptr, ptr %17, align 8, !tbaa !5
  %685 = icmp ne ptr %684, null
  br i1 %685, label %686, label %689

686:                                              ; preds = %678
  %687 = load i16, ptr %19, align 2, !tbaa !9
  %688 = load ptr, ptr %17, align 8, !tbaa !5
  store i16 %687, ptr %688, align 2, !tbaa !9
  br label %689

689:                                              ; preds = %686, %678
  br label %131, !llvm.loop !42

690:                                              ; preds = %131
  %691 = load i16, ptr %12, align 2, !tbaa !9
  %692 = zext i16 %691 to i32
  %693 = icmp eq i32 %692, 65535
  br i1 %693, label %694, label %703

694:                                              ; preds = %690
  %695 = load ptr, ptr %16, align 8, !tbaa !5
  %696 = icmp ne ptr %695, null
  br i1 %696, label %697, label %703

697:                                              ; preds = %694
  %698 = load i16, ptr %19, align 2, !tbaa !9
  %699 = zext i16 %698 to i32
  %700 = sub nsw i32 %699, 1
  %701 = trunc i32 %700 to i16
  %702 = load ptr, ptr %16, align 8, !tbaa !5
  store i16 %701, ptr %702, align 2, !tbaa !9
  store i64 0, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

703:                                              ; preds = %694, %690
  store i64 -9223372036854775794, ptr %9, align 8
  store i32 1, ptr %38, align 4
  br label %704

704:                                              ; preds = %703, %697, %676, %668, %667, %570, %446, %378, %286, %212, %120, %95
  call void @llvm.lifetime.end.p0(i64 2, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  %705 = load i64, ptr %9, align 8
  ret i64 %705
}

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

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

declare void @FreePool(ptr noundef) #2

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

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

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


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

@.str = external hidden unnamed_addr constant [148 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [28 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

; 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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i64 -9223372036854775799, 1) i64 @FindStringBlock(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, ptr noundef %3, ptr noundef writeonly %4, ptr noundef writeonly %5, ptr noundef writeonly %6, ptr noundef writeonly %7) local_unnamed_addr #0 {
  %9 = alloca i16, align 2
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i16, align 2
  %13 = alloca i16, align 2
  %14 = alloca i32, align 4
  %15 = alloca i16, align 2
  %16 = alloca i8, align 1
  %17 = alloca %struct._EFI_HII_SIBT_EXT2_BLOCK, align 1
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca i64, align 8
  %21 = alloca i16, align 2
  store i16 %2, ptr %9, align 2, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %12) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %15) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %21) #3
  %22 = tail call zeroext i8 @DebugAssertEnabled() #3
  %23 = icmp eq i8 %22, 0
  %24 = icmp ne ptr %1, null
  %or.cond38 = or i1 %24, %23
  br i1 %or.cond38, label %26, label %25

25:                                               ; preds = %8
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 294, ptr noundef nonnull @.str.6) #3
  br label %26

26:                                               ; preds = %8, %25
  %27 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not = icmp eq i8 %27, 0
  br i1 %.not, label %32, label %28

28:                                               ; preds = %26
  %29 = load i64, ptr %1, align 8, !tbaa !9
  %30 = icmp eq i64 %29, 1886611816
  br i1 %30, label %32, label %31

31:                                               ; preds = %28
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 295, ptr noundef nonnull @.str.7) #3
  br label %32

32:                                               ; preds = %28, %31, %26
  %33 = add i16 %2, -1
  %or.cond = icmp ult i16 %33, -2
  %34 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not256 = icmp eq i8 %34, 0
  br i1 %or.cond, label %35, label %45

35:                                               ; preds = %32
  br i1 %.not256, label %41, label %36

36:                                               ; preds = %35
  %37 = icmp ne ptr %3, null
  %38 = icmp ne ptr %4, null
  %or.cond4 = and i1 %37, %38
  %39 = icmp ne ptr %5, null
  %or.cond6 = and i1 %or.cond4, %39
  br i1 %or.cond6, label %41, label %40

40:                                               ; preds = %36
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 300, ptr noundef nonnull @.str.8) #3
  br label %41

41:                                               ; preds = %40, %36, %35
  %42 = getelementptr inbounds i8, ptr %1, i64 58
  %43 = load i16, ptr %42, align 2, !tbaa !14
  %44 = icmp ult i16 %43, %2
  br i1 %44, label %.loopexit271, label %57

45:                                               ; preds = %32
  br i1 %.not256, label %51, label %46

46:                                               ; preds = %45
  %.not255 = icmp eq ptr %0, null
  br i1 %.not255, label %50, label %47

47:                                               ; preds = %46
  %48 = load i64, ptr %0, align 8, !tbaa !15
  %49 = icmp eq i64 %48, 1883531592
  br i1 %49, label %51, label %50

50:                                               ; preds = %47, %46
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 305, ptr noundef nonnull @.str.9) #3
  br label %51

51:                                               ; preds = %47, %50, %45
  %52 = icmp eq i16 %2, 0
  %53 = icmp ne ptr %6, null
  %or.cond8 = and i1 %53, %52
  br i1 %or.cond8, label %54, label %57

54:                                               ; preds = %51
  %55 = getelementptr inbounds i8, ptr %1, i64 58
  %56 = load i16, ptr %55, align 2, !tbaa !14
  store i16 %56, ptr %6, align 2, !tbaa !5
  br label %.loopexit271

57:                                               ; preds = %51, %41
  %58 = call ptr @ZeroMem(ptr noundef nonnull %21, i64 noundef 2) #3
  %59 = getelementptr inbounds i8, ptr %1, i64 16
  %60 = load ptr, ptr %59, align 8, !tbaa !24
  %61 = getelementptr inbounds i8, ptr %17, i64 1
  %62 = getelementptr inbounds i8, ptr %1, i64 56
  %63 = getelementptr inbounds i8, ptr %17, i64 2
  %64 = icmp ne ptr %3, null
  %65 = icmp ne ptr %4, null
  %or.cond32 = and i1 %64, %65
  %66 = icmp ne ptr %5, null
  %or.cond34 = and i1 %or.cond32, %66
  %.not266 = icmp eq ptr %7, null
  br label %67

67:                                               ; preds = %.backedge, %57
  %.0238 = phi i16 [ 1, %57 ], [ %.5243, %.backedge ]
  %.0234 = phi i64 [ 0, %57 ], [ %.5, %.backedge ]
  %.0225 = phi i64 [ 0, %57 ], [ %.1226, %.backedge ]
  %.0224 = phi ptr [ %60, %57 ], [ %301, %.backedge ]
  %68 = load i8, ptr %.0224, align 1, !tbaa !25
  switch i8 %68, label %.loopexit [
    i8 0, label %303
    i8 16, label %69
    i8 17, label %75
    i8 18, label %81
    i8 19, label %108
    i8 20, label %136
    i8 21, label %143
    i8 22, label %150
    i8 23, label %176
    i8 32, label %203
    i8 34, label %215
    i8 33, label %223
    i8 48, label %229
    i8 49, label %237
    i8 50, label %275
  ]

69:                                               ; preds = %67
  %70 = getelementptr inbounds i8, ptr %.0224, i64 1
  %71 = call i64 @AsciiStrSize(ptr noundef nonnull %70) #3
  %72 = add i64 %.0234, 1
  %73 = add i64 %72, %71
  %74 = add i16 %.0238, 1
  br label %.loopexit

75:                                               ; preds = %67
  %76 = getelementptr inbounds i8, ptr %.0224, i64 2
  %77 = call i64 @AsciiStrSize(ptr noundef nonnull %76) #3
  %78 = add i64 %.0234, 2
  %79 = add i64 %78, %77
  %80 = add i16 %.0238, 1
  br label %.loopexit

81:                                               ; preds = %67
  %82 = getelementptr inbounds i8, ptr %.0224, i64 1
  %83 = call ptr @CopyMem(ptr noundef nonnull %12, ptr noundef nonnull %82, i64 noundef 2) #3
  %84 = ptrtoint ptr %.0224 to i64
  %85 = add i64 %.0234, 3
  %86 = load i16, ptr %12, align 2, !tbaa !5
  %.not327 = icmp eq i16 %86, 0
  br i1 %.not327, label %.loopexit, label %.lr.ph321.preheader

.lr.ph321.preheader:                              ; preds = %81
  %87 = add i64 %84, 3
  %88 = inttoptr i64 %87 to ptr
  br label %.lr.ph321

.lr.ph321:                                        ; preds = %.lr.ph321.preheader, %99
  %.0227320 = phi ptr [ %102, %99 ], [ %88, %.lr.ph321.preheader ]
  %.0230319 = phi i64 [ %104, %99 ], [ 0, %.lr.ph321.preheader ]
  %.1235318 = phi i64 [ %100, %99 ], [ %85, %.lr.ph321.preheader ]
  %.1239317 = phi i16 [ %103, %99 ], [ %.0238, %.lr.ph321.preheader ]
  %89 = call i64 @AsciiStrSize(ptr noundef %.0227320) #3
  %90 = load i16, ptr %9, align 2, !tbaa !5
  %91 = icmp eq i16 %.1239317, %90
  br i1 %91, label %92, label %99

92:                                               ; preds = %.lr.ph321
  %93 = call zeroext i8 @DebugAssertEnabled() #3
  %.not264 = icmp eq i8 %93, 0
  %brmerge386 = or i1 %.not264, %or.cond34
  br i1 %brmerge386, label %95, label %94

94:                                               ; preds = %92
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 344, ptr noundef nonnull @.str.8) #3
  br label %95

95:                                               ; preds = %92, %94
  %96 = load i8, ptr %.0224, align 1, !tbaa !25
  store i8 %96, ptr %3, align 1, !tbaa !25
  store ptr %.0224, ptr %4, align 8, !tbaa !26
  %97 = ptrtoint ptr %.0227320 to i64
  %98 = sub i64 %97, %84
  store i64 %98, ptr %5, align 8, !tbaa !27
  br label %.loopexit271

99:                                               ; preds = %.lr.ph321
  %100 = add i64 %89, %.1235318
  %101 = call i64 @AsciiStrSize(ptr noundef %.0227320) #3
  %102 = getelementptr inbounds i8, ptr %.0227320, i64 %101
  %103 = add i16 %.1239317, 1
  %104 = add nuw nsw i64 %.0230319, 1
  %105 = load i16, ptr %12, align 2, !tbaa !5
  %106 = zext i16 %105 to i64
  %107 = icmp ult i64 %104, %106
  br i1 %107, label %.lr.ph321, label %.loopexit, !llvm.loop !28

108:                                              ; preds = %67
  %109 = ptrtoint ptr %.0224 to i64
  %110 = add i64 %109, 2
  %111 = inttoptr i64 %110 to ptr
  %112 = call ptr @CopyMem(ptr noundef nonnull %12, ptr noundef %111, i64 noundef 2) #3
  %113 = add i64 %.0234, 4
  %114 = load i16, ptr %12, align 2, !tbaa !5
  %.not326 = icmp eq i16 %114, 0
  br i1 %.not326, label %.loopexit, label %.lr.ph314.preheader

.lr.ph314.preheader:                              ; preds = %108
  %115 = add i64 %109, 4
  %116 = inttoptr i64 %115 to ptr
  br label %.lr.ph314

.lr.ph314:                                        ; preds = %.lr.ph314.preheader, %127
  %.1228313 = phi ptr [ %130, %127 ], [ %116, %.lr.ph314.preheader ]
  %.1231312 = phi i64 [ %132, %127 ], [ 0, %.lr.ph314.preheader ]
  %.2236311 = phi i64 [ %128, %127 ], [ %113, %.lr.ph314.preheader ]
  %.2240310 = phi i16 [ %131, %127 ], [ %.0238, %.lr.ph314.preheader ]
  %117 = call i64 @AsciiStrSize(ptr noundef %.1228313) #3
  %118 = load i16, ptr %9, align 2, !tbaa !5
  %119 = icmp eq i16 %.2240310, %118
  br i1 %119, label %120, label %127

120:                                              ; preds = %.lr.ph314
  %121 = call zeroext i8 @DebugAssertEnabled() #3
  %.not263 = icmp eq i8 %121, 0
  %brmerge387 = or i1 %.not263, %or.cond34
  br i1 %brmerge387, label %123, label %122

122:                                              ; preds = %120
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 367, ptr noundef nonnull @.str.8) #3
  br label %123

123:                                              ; preds = %120, %122
  %124 = load i8, ptr %.0224, align 1, !tbaa !25
  store i8 %124, ptr %3, align 1, !tbaa !25
  store ptr %.0224, ptr %4, align 8, !tbaa !26
  %125 = ptrtoint ptr %.1228313 to i64
  %126 = sub i64 %125, %109
  store i64 %126, ptr %5, align 8, !tbaa !27
  br label %.loopexit271

127:                                              ; preds = %.lr.ph314
  %128 = add i64 %117, %.2236311
  %129 = call i64 @AsciiStrSize(ptr noundef %.1228313) #3
  %130 = getelementptr inbounds i8, ptr %.1228313, i64 %129
  %131 = add i16 %.2240310, 1
  %132 = add nuw nsw i64 %.1231312, 1
  %133 = load i16, ptr %12, align 2, !tbaa !5
  %134 = zext i16 %133 to i64
  %135 = icmp ult i64 %132, %134
  br i1 %135, label %.lr.ph314, label %.loopexit, !llvm.loop !30

136:                                              ; preds = %67
  %137 = getelementptr inbounds i8, ptr %.0224, i64 1
  %138 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef nonnull %137, ptr noundef nonnull %20)
  %139 = load i64, ptr %20, align 8, !tbaa !27
  %140 = add i64 %.0234, 1
  %141 = add i64 %140, %139
  %142 = add i16 %.0238, 1
  br label %.loopexit

143:                                              ; preds = %67
  %144 = getelementptr inbounds i8, ptr %.0224, i64 2
  %145 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef nonnull %144, ptr noundef nonnull %20)
  %146 = load i64, ptr %20, align 8, !tbaa !27
  %147 = add i64 %.0234, 2
  %148 = add i64 %147, %146
  %149 = add i16 %.0238, 1
  br label %.loopexit

150:                                              ; preds = %67
  %151 = add i64 %.0234, 3
  %152 = getelementptr inbounds i8, ptr %.0224, i64 1
  %153 = call ptr @CopyMem(ptr noundef nonnull %12, ptr noundef nonnull %152, i64 noundef 2) #3
  %154 = load i16, ptr %12, align 2, !tbaa !5
  %.not325 = icmp eq i16 %154, 0
  br i1 %.not325, label %.loopexit, label %.lr.ph307.preheader

.lr.ph307.preheader:                              ; preds = %150
  %155 = getelementptr inbounds i8, ptr %.0224, i64 3
  br label %.lr.ph307

.lr.ph307:                                        ; preds = %.lr.ph307.preheader, %167
  %.2229306 = phi ptr [ %170, %167 ], [ %155, %.lr.ph307.preheader ]
  %.2232305 = phi i64 [ %172, %167 ], [ 0, %.lr.ph307.preheader ]
  %.3237304 = phi i64 [ %169, %167 ], [ %151, %.lr.ph307.preheader ]
  %.3241303 = phi i16 [ %171, %167 ], [ %.0238, %.lr.ph307.preheader ]
  %156 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %.2229306, ptr noundef nonnull %20)
  %157 = load i16, ptr %9, align 2, !tbaa !5
  %158 = icmp eq i16 %.3241303, %157
  br i1 %158, label %159, label %167

159:                                              ; preds = %.lr.ph307
  %160 = call zeroext i8 @DebugAssertEnabled() #3
  %.not262 = icmp eq i8 %160, 0
  %brmerge388 = or i1 %.not262, %or.cond34
  br i1 %brmerge388, label %162, label %161

161:                                              ; preds = %159
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 411, ptr noundef nonnull @.str.8) #3
  br label %162

162:                                              ; preds = %159, %161
  %163 = load i8, ptr %.0224, align 1, !tbaa !25
  store i8 %163, ptr %3, align 1, !tbaa !25
  store ptr %.0224, ptr %4, align 8, !tbaa !26
  %164 = ptrtoint ptr %.2229306 to i64
  %165 = ptrtoint ptr %.0224 to i64
  %166 = sub i64 %164, %165
  store i64 %166, ptr %5, align 8, !tbaa !27
  br label %.loopexit271

167:                                              ; preds = %.lr.ph307
  %168 = load i64, ptr %20, align 8, !tbaa !27
  %169 = add i64 %168, %.3237304
  %170 = getelementptr inbounds i8, ptr %.2229306, i64 %168
  %171 = add i16 %.3241303, 1
  %172 = add nuw nsw i64 %.2232305, 1
  %173 = load i16, ptr %12, align 2, !tbaa !5
  %174 = zext i16 %173 to i64
  %175 = icmp ult i64 %172, %174
  br i1 %175, label %.lr.ph307, label %.loopexit, !llvm.loop !31

176:                                              ; preds = %67
  %177 = add i64 %.0234, 4
  %178 = ptrtoint ptr %.0224 to i64
  %179 = add i64 %178, 2
  %180 = inttoptr i64 %179 to ptr
  %181 = call ptr @CopyMem(ptr noundef nonnull %12, ptr noundef %180, i64 noundef 2) #3
  %182 = load i16, ptr %12, align 2, !tbaa !5
  %.not324 = icmp eq i16 %182, 0
  br i1 %.not324, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %176
  %183 = getelementptr inbounds i8, ptr %.0224, i64 4
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %194
  %.3301 = phi ptr [ %197, %194 ], [ %183, %.lr.ph.preheader ]
  %.3233300 = phi i64 [ %199, %194 ], [ 0, %.lr.ph.preheader ]
  %.4299 = phi i64 [ %196, %194 ], [ %177, %.lr.ph.preheader ]
  %.4242298 = phi i16 [ %198, %194 ], [ %.0238, %.lr.ph.preheader ]
  %184 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %.3301, ptr noundef nonnull %20)
  %185 = load i16, ptr %9, align 2, !tbaa !5
  %186 = icmp eq i16 %.4242298, %185
  br i1 %186, label %187, label %194

187:                                              ; preds = %.lr.ph
  %188 = call zeroext i8 @DebugAssertEnabled() #3
  %.not261 = icmp eq i8 %188, 0
  %brmerge389 = or i1 %.not261, %or.cond34
  br i1 %brmerge389, label %190, label %189

189:                                              ; preds = %187
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 435, ptr noundef nonnull @.str.8) #3
  br label %190

190:                                              ; preds = %187, %189
  %191 = load i8, ptr %.0224, align 1, !tbaa !25
  store i8 %191, ptr %3, align 1, !tbaa !25
  store ptr %.0224, ptr %4, align 8, !tbaa !26
  %192 = ptrtoint ptr %.3301 to i64
  %193 = sub i64 %192, %178
  store i64 %193, ptr %5, align 8, !tbaa !27
  br label %.loopexit271

194:                                              ; preds = %.lr.ph
  %195 = load i64, ptr %20, align 8, !tbaa !27
  %196 = add i64 %195, %.4299
  %197 = getelementptr inbounds i8, ptr %.3301, i64 %195
  %198 = add i16 %.4242298, 1
  %199 = add nuw nsw i64 %.3233300, 1
  %200 = load i16, ptr %12, align 2, !tbaa !5
  %201 = zext i16 %200 to i64
  %202 = icmp ult i64 %199, %201
  br i1 %202, label %.lr.ph, label %.loopexit, !llvm.loop !32

203:                                              ; preds = %67
  %204 = load i16, ptr %9, align 2, !tbaa !5
  %205 = icmp eq i16 %.0238, %204
  br i1 %205, label %206, label %212

206:                                              ; preds = %203
  %207 = getelementptr inbounds i8, ptr %.0224, i64 1
  %208 = call ptr @CopyMem(ptr noundef nonnull %9, ptr noundef nonnull %207, i64 noundef 2) #3
  %209 = call zeroext i8 @DebugAssertEnabled() #3
  %.not259 = icmp ne i8 %209, 0
  %210 = load i16, ptr %9, align 2
  %.not260 = icmp eq i16 %210, %.0238
  %or.cond267 = select i1 %.not259, i1 %.not260, i1 false
  br i1 %or.cond267, label %211, label %.loopexit

211:                                              ; preds = %206
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 458, ptr noundef nonnull @.str.10) #3
  br label %.loopexit

212:                                              ; preds = %203
  %213 = add i64 %.0234, 3
  %214 = add i16 %.0238, 1
  br label %.loopexit

215:                                              ; preds = %67
  %216 = ptrtoint ptr %.0224 to i64
  %217 = add i64 %216, 1
  %218 = inttoptr i64 %217 to ptr
  %219 = load i8, ptr %218, align 1, !tbaa !25
  %220 = zext i8 %219 to i16
  store i16 %220, ptr %13, align 2, !tbaa !5
  %221 = add i16 %.0238, %220
  %222 = add i64 %.0234, 2
  br label %.loopexit

223:                                              ; preds = %67
  %224 = getelementptr inbounds i8, ptr %.0224, i64 1
  %225 = call ptr @CopyMem(ptr noundef nonnull %13, ptr noundef nonnull %224, i64 noundef 2) #3
  %226 = load i16, ptr %13, align 2, !tbaa !5
  %227 = add i16 %226, %.0238
  %228 = add i64 %.0234, 3
  br label %.loopexit

229:                                              ; preds = %67
  %230 = ptrtoint ptr %.0224 to i64
  %231 = add i64 %230, 2
  %232 = inttoptr i64 %231 to ptr
  %233 = call ptr @CopyMem(ptr noundef nonnull %16, ptr noundef %232, i64 noundef 1) #3
  %234 = load i8, ptr %16, align 1, !tbaa !25
  %235 = zext i8 %234 to i64
  %236 = add i64 %.0234, %235
  br label %.loopexit

237:                                              ; preds = %67
  %238 = call ptr @CopyMem(ptr noundef nonnull %17, ptr noundef nonnull %.0224, i64 noundef 4) #3
  %239 = load i8, ptr %61, align 1, !tbaa !33
  %240 = icmp eq i8 %239, 64
  %241 = load i16, ptr %9, align 2
  %242 = icmp eq i16 %241, -1
  %or.cond27 = select i1 %240, i1 %242, i1 false
  br i1 %or.cond27, label %243, label %271

243:                                              ; preds = %237
  %244 = getelementptr inbounds i8, ptr %.0224, i64 4
  %245 = call ptr @CopyMem(ptr noundef nonnull %18, ptr noundef nonnull %244, i64 noundef 1) #3
  %246 = getelementptr inbounds i8, ptr %.0224, i64 5
  %247 = call ptr @CopyMem(ptr noundef nonnull %15, ptr noundef nonnull %246, i64 noundef 2) #3
  %248 = getelementptr inbounds i8, ptr %.0224, i64 7
  %249 = call ptr @CopyMem(ptr noundef nonnull %14, ptr noundef nonnull %248, i64 noundef 4) #3
  %250 = getelementptr inbounds i8, ptr %.0224, i64 11
  %251 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef nonnull %250, ptr noundef nonnull %20)
  %252 = load i64, ptr %20, align 8, !tbaa !27
  %253 = add i64 %252, 6
  %254 = call ptr @AllocateZeroPool(i64 noundef %253) #3
  %255 = icmp eq ptr %254, null
  br i1 %255, label %.loopexit271, label %256

256:                                              ; preds = %243
  %257 = load i32, ptr %14, align 4, !tbaa !36
  store i32 %257, ptr %254, align 4, !tbaa !37
  %258 = load i16, ptr %15, align 2, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %254, i64 4
  store i16 %258, ptr %259, align 4, !tbaa !39
  %260 = getelementptr inbounds i8, ptr %254, i64 6
  %261 = load i64, ptr %20, align 8, !tbaa !27
  %262 = call ptr @CopyMem(ptr noundef nonnull %260, ptr noundef nonnull %250, i64 noundef %261) #3
  %263 = call zeroext i8 @IsFontInfoExisted(ptr noundef %0, ptr noundef nonnull %254, ptr noundef null, ptr noundef null, ptr noundef nonnull %11) #3
  %.not258 = icmp eq i8 %263, 0
  br i1 %.not258, label %268, label %264

264:                                              ; preds = %256
  %265 = load i8, ptr %18, align 1, !tbaa !25
  %266 = load ptr, ptr %11, align 8, !tbaa !26
  %267 = call zeroext i8 @ReferFontInfoLocally(ptr noundef %0, ptr noundef nonnull %1, i8 noundef zeroext %265, i8 noundef zeroext 1, ptr noundef %266, ptr noundef nonnull %10)
  br label %268

268:                                              ; preds = %264, %256
  %269 = load i8, ptr %62, align 8, !tbaa !40
  %270 = add i8 %269, 1
  store i8 %270, ptr %62, align 8, !tbaa !40
  call void @FreePool(ptr noundef nonnull %254) #3
  br label %271

271:                                              ; preds = %268, %237
  %.1 = phi ptr [ %250, %268 ], [ %.0224, %237 ]
  %272 = load i16, ptr %63, align 1, !tbaa !41
  %273 = zext i16 %272 to i64
  %274 = add i64 %.0234, %273
  br label %.loopexit

275:                                              ; preds = %67
  %276 = ptrtoint ptr %.0224 to i64
  %277 = add i64 %276, 2
  %278 = inttoptr i64 %277 to ptr
  %279 = call ptr @CopyMem(ptr noundef nonnull %19, ptr noundef %278, i64 noundef 4) #3
  %280 = load i32, ptr %19, align 4, !tbaa !36
  %281 = zext i32 %280 to i64
  %282 = add i64 %.0234, %281
  br label %.loopexit

.loopexit:                                        ; preds = %194, %167, %127, %99, %176, %150, %108, %81, %206, %211, %67, %212, %275, %271, %229, %223, %215, %143, %136, %75, %69
  %.5243 = phi i16 [ %.0238, %275 ], [ %.0238, %271 ], [ %.0238, %229 ], [ %227, %223 ], [ %221, %215 ], [ %214, %212 ], [ %149, %143 ], [ %142, %136 ], [ %80, %75 ], [ %74, %69 ], [ %.0238, %67 ], [ 1, %211 ], [ 1, %206 ], [ %.0238, %81 ], [ %.0238, %108 ], [ %.0238, %150 ], [ %.0238, %176 ], [ %103, %99 ], [ %131, %127 ], [ %171, %167 ], [ %198, %194 ]
  %.5 = phi i64 [ %282, %275 ], [ %274, %271 ], [ %236, %229 ], [ %228, %223 ], [ %222, %215 ], [ %213, %212 ], [ %148, %143 ], [ %141, %136 ], [ %79, %75 ], [ %73, %69 ], [ %.0234, %67 ], [ 0, %211 ], [ 0, %206 ], [ %85, %81 ], [ %113, %108 ], [ %151, %150 ], [ %177, %176 ], [ %100, %99 ], [ %128, %127 ], [ %169, %167 ], [ %196, %194 ]
  %.1226 = phi i64 [ %.0225, %275 ], [ %.0225, %271 ], [ %.0225, %229 ], [ %.0225, %223 ], [ %.0225, %215 ], [ %.0225, %212 ], [ 2, %143 ], [ 1, %136 ], [ 2, %75 ], [ 1, %69 ], [ %.0225, %67 ], [ %.0225, %211 ], [ %.0225, %206 ], [ %.0225, %81 ], [ %.0225, %108 ], [ 3, %150 ], [ 4, %176 ], [ %.0225, %99 ], [ %.0225, %127 ], [ 3, %167 ], [ 4, %194 ]
  %.2 = phi ptr [ %.0224, %275 ], [ %.1, %271 ], [ %.0224, %229 ], [ %.0224, %223 ], [ %.0224, %215 ], [ %.0224, %212 ], [ %.0224, %143 ], [ %.0224, %136 ], [ %.0224, %75 ], [ %.0224, %69 ], [ %.0224, %67 ], [ %.0224, %211 ], [ %.0224, %206 ], [ %.0224, %81 ], [ %.0224, %108 ], [ %.0224, %150 ], [ %.0224, %176 ], [ %.0224, %99 ], [ %.0224, %127 ], [ %.0224, %167 ], [ %.0224, %194 ]
  %283 = load i16, ptr %9, align 2
  %284 = add i16 %283, -1
  %or.cond30 = icmp ult i16 %284, -2
  br i1 %or.cond30, label %285, label %299

285:                                              ; preds = %.loopexit
  %286 = call zeroext i8 @DebugAssertEnabled() #3
  %.not265 = icmp eq i8 %286, 0
  %brmerge = or i1 %.not265, %or.cond34
  br i1 %brmerge, label %288, label %287

287:                                              ; preds = %285
  call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 550, ptr noundef nonnull @.str.8) #3
  br label %288

288:                                              ; preds = %285, %287
  %289 = load i8, ptr %.2, align 1, !tbaa !25
  store i8 %289, ptr %3, align 1, !tbaa !25
  store ptr %.2, ptr %4, align 8, !tbaa !26
  store i64 %.1226, ptr %5, align 8, !tbaa !27
  %290 = load i16, ptr %9, align 2, !tbaa !5
  %291 = zext i16 %290 to i32
  %292 = zext i16 %.5243 to i32
  %293 = add nsw i32 %292, -1
  %294 = icmp eq i32 %293, %291
  br i1 %294, label %295, label %297

295:                                              ; preds = %288
  %296 = load i8, ptr %3, align 1, !tbaa !25
  %.off = add i8 %296, -33
  %switch = icmp ult i8 %.off, 2
  %spec.select = select i1 %switch, i64 -9223372036854775794, i64 0
  br label %.loopexit271

297:                                              ; preds = %288
  %298 = icmp sgt i32 %293, %291
  br i1 %298, label %.loopexit271, label %299

299:                                              ; preds = %297, %.loopexit
  %300 = load ptr, ptr %59, align 8, !tbaa !24
  %301 = getelementptr inbounds i8, ptr %300, i64 %.5
  br i1 %.not266, label %.backedge, label %302

302:                                              ; preds = %299
  store i16 %.5243, ptr %7, align 2, !tbaa !5
  br label %.backedge

.backedge:                                        ; preds = %302, %299
  br label %67, !llvm.loop !42

303:                                              ; preds = %67
  %304 = load i16, ptr %9, align 2, !tbaa !5
  %305 = icmp eq i16 %304, -1
  %306 = icmp ne ptr %6, null
  %or.cond36 = and i1 %306, %305
  br i1 %or.cond36, label %307, label %.loopexit271

307:                                              ; preds = %303
  %308 = add i16 %.0238, -1
  store i16 %308, ptr %6, align 2, !tbaa !5
  br label %.loopexit271

.loopexit271:                                     ; preds = %297, %243, %295, %303, %41, %307, %190, %162, %123, %95, %54
  %.0 = phi i64 [ 0, %190 ], [ 0, %162 ], [ 0, %123 ], [ 0, %95 ], [ 0, %307 ], [ 0, %54 ], [ -9223372036854775794, %41 ], [ -9223372036854775794, %303 ], [ %spec.select, %295 ], [ -9223372036854775794, %297 ], [ -9223372036854775799, %243 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  ret i64 %.0
}

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

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

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

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

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


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