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

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

@.str = external hidden unnamed_addr constant [148 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [76 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
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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @SetStringWorker(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca i64, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i16, align 2
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i8, align 1
  %24 = alloca %struct._EFI_HII_SIBT_EXT2_BLOCK, align 1
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i16, align 2
  %28 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i16 %2, ptr %9, align 2, !tbaa !9
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 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 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 1, 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 2, ptr %27) #3
  store i16 0, ptr %27, align 2, !tbaa !9
  store i64 0, ptr %25, align 8, !tbaa !11
  br label %29

29:                                               ; preds = %5
  %30 = call zeroext i8 @DebugAssertEnabled()
  %31 = icmp ne i8 %30, 0
  br i1 %31, label %32, label %43

32:                                               ; preds = %29
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %35, label %41

35:                                               ; preds = %32
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = icmp ne ptr %36, null
  br i1 %37, label %38, label %41

38:                                               ; preds = %35
  %39 = load ptr, ptr %10, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %42, label %41

41:                                               ; preds = %38, %35, %32
  call void @DebugAssert(ptr noundef @.str, i64 noundef 903, ptr noundef @.str.12)
  br label %42

42:                                               ; preds = %41, %38
  br label %43

43:                                               ; preds = %42, %29
  br label %44

44:                                               ; preds = %43
  br label %45

45:                                               ; preds = %44
  br label %46

46:                                               ; preds = %45
  %47 = call zeroext i8 @DebugAssertEnabled()
  %48 = icmp ne i8 %47, 0
  br i1 %48, label %49, label %56

49:                                               ; preds = %46
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct._HII_DATABASE_PRIVATE_DATA, ptr %50, i32 0, i32 0
  %52 = load i64, ptr %51, align 8, !tbaa !13
  %53 = icmp eq i64 %52, 1883531592
  br i1 %53, label %55, label %54

54:                                               ; preds = %49
  call void @DebugAssert(ptr noundef @.str, i64 noundef 904, ptr noundef @.str.13)
  br label %55

55:                                               ; preds = %54, %49
  br label %56

56:                                               ; preds = %55, %46
  br label %57

57:                                               ; preds = %56
  br label %58

58:                                               ; preds = %57
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = load ptr, ptr %8, align 8, !tbaa !5
  %61 = load i16, ptr %9, align 2, !tbaa !9
  %62 = call i64 @FindStringBlock(ptr noundef %59, ptr noundef %60, i16 noundef zeroext %61, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef null, ptr noundef %27)
  store i64 %62, ptr %16, align 8, !tbaa !11
  %63 = load i64, ptr %16, align 8, !tbaa !11
  %64 = icmp slt i64 %63, 0
  br i1 %64, label %65, label %92

65:                                               ; preds = %58
  %66 = load i8, ptr %13, align 1, !tbaa !23
  %67 = zext i8 %66 to i32
  %68 = icmp eq i32 %67, 34
  br i1 %68, label %73, label %69

69:                                               ; preds = %65
  %70 = load i8, ptr %13, align 1, !tbaa !23
  %71 = zext i8 %70 to i32
  %72 = icmp eq i32 %71, 33
  br i1 %72, label %73, label %92

73:                                               ; preds = %69, %65
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  %75 = load i16, ptr %27, align 2, !tbaa !9
  %76 = load i16, ptr %9, align 2, !tbaa !9
  %77 = load ptr, ptr %11, align 8, !tbaa !5
  %78 = icmp ne ptr %77, null
  %79 = zext i1 %78 to i32
  %80 = trunc i32 %79 to i8
  %81 = call i64 @InsertLackStringBlock(ptr noundef %74, i16 noundef zeroext %75, i16 noundef zeroext %76, ptr noundef %13, ptr noundef %14, i8 noundef zeroext %80)
  store i64 %81, ptr %16, align 8, !tbaa !11
  %82 = load i64, ptr %16, align 8, !tbaa !11
  %83 = icmp slt i64 %82, 0
  br i1 %83, label %84, label %86

84:                                               ; preds = %73
  %85 = load i64, ptr %16, align 8, !tbaa !11
  store i64 %85, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

86:                                               ; preds = %73
  %87 = load ptr, ptr %11, align 8, !tbaa !5
  %88 = icmp ne ptr %87, null
  br i1 %88, label %89, label %90

89:                                               ; preds = %86
  store i64 2, ptr %15, align 8, !tbaa !11
  br label %91

90:                                               ; preds = %86
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %91

91:                                               ; preds = %90, %89
  br label %92

92:                                               ; preds = %91, %69, %58
  store ptr null, ptr %21, align 8, !tbaa !5
  store ptr null, ptr %22, align 8, !tbaa !5
  store i8 0, ptr %23, align 1, !tbaa !23
  %93 = load ptr, ptr %11, align 8, !tbaa !5
  %94 = icmp ne ptr %93, null
  br i1 %94, label %95, label %128

95:                                               ; preds = %92
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = load ptr, ptr %11, align 8, !tbaa !5
  %98 = call zeroext i8 @IsFontInfoExisted(ptr noundef %96, ptr noundef %97, ptr noundef null, ptr noundef null, ptr noundef %22)
  %99 = icmp ne i8 %98, 0
  br i1 %99, label %101, label %100

100:                                              ; preds = %95
  store i64 -9223372036854775806, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

101:                                              ; preds = %95
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = load ptr, ptr %8, align 8, !tbaa !5
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %104, i32 0, i32 5
  %106 = load i8, ptr %105, align 8, !tbaa !24
  %107 = load ptr, ptr %22, align 8, !tbaa !5
  %108 = call zeroext i8 @ReferFontInfoLocally(ptr noundef %102, ptr noundef %103, i8 noundef zeroext %106, i8 noundef zeroext 0, ptr noundef %107, ptr noundef %21)
  store i8 %108, ptr %23, align 1, !tbaa !23
  %109 = load i8, ptr %23, align 1, !tbaa !23
  %110 = icmp ne i8 %109, 0
  br i1 %110, label %116, label %111

111:                                              ; preds = %101
  %112 = load ptr, ptr %8, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %112, i32 0, i32 5
  %114 = load i8, ptr %113, align 8, !tbaa !24
  %115 = add i8 %114, 1
  store i8 %115, ptr %113, align 8, !tbaa !24
  br label %116

116:                                              ; preds = %111, %101
  br label %117

117:                                              ; preds = %116
  %118 = load i8, ptr %13, align 1, !tbaa !23
  %119 = zext i8 %118 to i32
  switch i32 %119, label %126 [
    i32 17, label %120
    i32 19, label %120
    i32 21, label %120
    i32 23, label %120
  ]

120:                                              ; preds = %117, %117, %117, %117
  %121 = load ptr, ptr %21, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct._HII_FONT_INFO, ptr %121, i32 0, i32 3
  %123 = load i8, ptr %122, align 8, !tbaa !26
  %124 = load ptr, ptr %14, align 8, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %124, i64 1
  store i8 %123, ptr %125, align 1, !tbaa !23
  br label %127

126:                                              ; preds = %117
  store i64 -9223372036854775805, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

127:                                              ; preds = %120
  br label %128

128:                                              ; preds = %127, %92
  %129 = load ptr, ptr %8, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %129, i32 0, i32 1
  %131 = load ptr, ptr %130, align 8, !tbaa !28
  %132 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %131, i32 0, i32 0
  %133 = load i32, ptr %132, align 1
  %134 = and i32 %133, 16777215
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %135, i32 0, i32 1
  %137 = load ptr, ptr %136, align 8, !tbaa !28
  %138 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %137, i32 0, i32 1
  %139 = load i32, ptr %138, align 1, !tbaa !29
  %140 = sub i32 %134, %139
  %141 = zext i32 %140 to i64
  store i64 %141, ptr %20, align 8, !tbaa !11
  %142 = load ptr, ptr %14, align 8, !tbaa !5
  %143 = load i64, ptr %15, align 8, !tbaa !11
  %144 = getelementptr inbounds i8, ptr %142, i64 %143
  store ptr %144, ptr %12, align 8, !tbaa !5
  %145 = load i8, ptr %13, align 1, !tbaa !23
  %146 = zext i8 %145 to i32
  switch i32 %146, label %320 [
    i32 16, label %147
    i32 17, label %147
    i32 18, label %147
    i32 19, label %147
    i32 20, label %238
    i32 21, label %238
    i32 22, label %238
    i32 23, label %238
  ]

147:                                              ; preds = %128, %128, %128, %128
  %148 = load i64, ptr %20, align 8, !tbaa !11
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = call i64 @StrLen(ptr noundef %149)
  %151 = add i64 %148, %150
  store i64 %151, ptr %19, align 8, !tbaa !11
  %152 = load ptr, ptr %12, align 8, !tbaa !5
  %153 = call i64 @AsciiStrSize(ptr noundef %152)
  %154 = load i64, ptr %19, align 8, !tbaa !11
  %155 = sub i64 %154, %153
  store i64 %155, ptr %19, align 8, !tbaa !11
  %156 = load i64, ptr %19, align 8, !tbaa !11
  %157 = call ptr @AllocateZeroPool(i64 noundef %156)
  store ptr %157, ptr %17, align 8, !tbaa !5
  %158 = load ptr, ptr %17, align 8, !tbaa !5
  %159 = icmp eq ptr %158, null
  br i1 %159, label %160, label %161

160:                                              ; preds = %147
  store i64 -9223372036854775799, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

161:                                              ; preds = %147
  %162 = load ptr, ptr %17, align 8, !tbaa !5
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %163, i32 0, i32 2
  %165 = load ptr, ptr %164, align 8, !tbaa !32
  %166 = load ptr, ptr %12, align 8, !tbaa !5
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %167, i32 0, i32 2
  %169 = load ptr, ptr %168, align 8, !tbaa !32
  %170 = ptrtoint ptr %166 to i64
  %171 = ptrtoint ptr %169 to i64
  %172 = sub i64 %170, %171
  %173 = call ptr @CopyMem(ptr noundef %162, ptr noundef %165, i64 noundef %172)
  %174 = load ptr, ptr %17, align 8, !tbaa !5
  %175 = load ptr, ptr %12, align 8, !tbaa !5
  %176 = load ptr, ptr %8, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %176, i32 0, i32 2
  %178 = load ptr, ptr %177, align 8, !tbaa !32
  %179 = ptrtoint ptr %175 to i64
  %180 = ptrtoint ptr %178 to i64
  %181 = sub i64 %179, %180
  %182 = getelementptr inbounds i8, ptr %174, i64 %181
  store ptr %182, ptr %18, align 8, !tbaa !5
  br label %183

183:                                              ; preds = %188, %161
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = load i16, ptr %184, align 2, !tbaa !9
  %186 = zext i16 %185 to i32
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %195

188:                                              ; preds = %183
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = getelementptr inbounds i16, ptr %189, i32 1
  store ptr %190, ptr %10, align 8, !tbaa !5
  %191 = load i16, ptr %189, align 2, !tbaa !9
  %192 = trunc i16 %191 to i8
  %193 = load ptr, ptr %18, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i32 1
  store ptr %194, ptr %18, align 8, !tbaa !5
  store i8 %192, ptr %193, align 1, !tbaa !23
  br label %183, !llvm.loop !33

195:                                              ; preds = %183
  %196 = load ptr, ptr %18, align 8, !tbaa !5
  %197 = getelementptr inbounds i8, ptr %196, i32 1
  store ptr %197, ptr %18, align 8, !tbaa !5
  store i8 0, ptr %196, align 1, !tbaa !23
  %198 = load i64, ptr %20, align 8, !tbaa !11
  %199 = load ptr, ptr %12, align 8, !tbaa !5
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %200, i32 0, i32 2
  %202 = load ptr, ptr %201, align 8, !tbaa !32
  %203 = ptrtoint ptr %199 to i64
  %204 = ptrtoint ptr %202 to i64
  %205 = sub i64 %203, %204
  %206 = sub i64 %198, %205
  %207 = load ptr, ptr %12, align 8, !tbaa !5
  %208 = call i64 @AsciiStrSize(ptr noundef %207)
  %209 = sub i64 %206, %208
  store i64 %209, ptr %26, align 8, !tbaa !11
  %210 = load ptr, ptr %18, align 8, !tbaa !5
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = load ptr, ptr %12, align 8, !tbaa !5
  %213 = call i64 @AsciiStrSize(ptr noundef %212)
  %214 = getelementptr inbounds i8, ptr %211, i64 %213
  %215 = load i64, ptr %26, align 8, !tbaa !11
  %216 = call ptr @CopyMem(ptr noundef %210, ptr noundef %214, i64 noundef %215)
  %217 = load ptr, ptr %8, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %217, i32 0, i32 2
  %219 = load ptr, ptr %218, align 8, !tbaa !32
  call void @FreePool(ptr noundef %219)
  %220 = load ptr, ptr %17, align 8, !tbaa !5
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %221, i32 0, i32 2
  store ptr %220, ptr %222, align 8, !tbaa !32
  %223 = load i64, ptr %19, align 8, !tbaa !11
  %224 = load i64, ptr %20, align 8, !tbaa !11
  %225 = sub i64 %223, %224
  %226 = trunc i64 %225 to i32
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %227, i32 0, i32 1
  %229 = load ptr, ptr %228, align 8, !tbaa !28
  %230 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %229, i32 0, i32 0
  %231 = load i32, ptr %230, align 1
  %232 = and i32 %231, 16777215
  %233 = add i32 %232, %226
  %234 = load i32, ptr %230, align 1
  %235 = and i32 %233, 16777215
  %236 = and i32 %234, -16777216
  %237 = or i32 %236, %235
  store i32 %237, ptr %230, align 1
  br label %321

238:                                              ; preds = %128, %128, %128, %128
  %239 = load ptr, ptr %12, align 8, !tbaa !5
  %240 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %239, ptr noundef %25)
  %241 = load i64, ptr %20, align 8, !tbaa !11
  %242 = load ptr, ptr %10, align 8, !tbaa !5
  %243 = call i64 @StrSize(ptr noundef %242)
  %244 = add i64 %241, %243
  %245 = load i64, ptr %25, align 8, !tbaa !11
  %246 = sub i64 %244, %245
  store i64 %246, ptr %19, align 8, !tbaa !11
  %247 = load i64, ptr %19, align 8, !tbaa !11
  %248 = call ptr @AllocateZeroPool(i64 noundef %247)
  store ptr %248, ptr %17, align 8, !tbaa !5
  %249 = load ptr, ptr %17, align 8, !tbaa !5
  %250 = icmp eq ptr %249, null
  br i1 %250, label %251, label %252

251:                                              ; preds = %238
  store i64 -9223372036854775799, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

252:                                              ; preds = %238
  %253 = load ptr, ptr %17, align 8, !tbaa !5
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %254, i32 0, i32 2
  %256 = load ptr, ptr %255, align 8, !tbaa !32
  %257 = load ptr, ptr %12, align 8, !tbaa !5
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %258, i32 0, i32 2
  %260 = load ptr, ptr %259, align 8, !tbaa !32
  %261 = ptrtoint ptr %257 to i64
  %262 = ptrtoint ptr %260 to i64
  %263 = sub i64 %261, %262
  %264 = call ptr @CopyMem(ptr noundef %253, ptr noundef %256, i64 noundef %263)
  %265 = load ptr, ptr %17, align 8, !tbaa !5
  %266 = load ptr, ptr %12, align 8, !tbaa !5
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %267, i32 0, i32 2
  %269 = load ptr, ptr %268, align 8, !tbaa !32
  %270 = ptrtoint ptr %266 to i64
  %271 = ptrtoint ptr %269 to i64
  %272 = sub i64 %270, %271
  %273 = getelementptr inbounds i8, ptr %265, i64 %272
  store ptr %273, ptr %18, align 8, !tbaa !5
  %274 = load ptr, ptr %18, align 8, !tbaa !5
  %275 = load ptr, ptr %10, align 8, !tbaa !5
  %276 = load ptr, ptr %10, align 8, !tbaa !5
  %277 = call i64 @StrSize(ptr noundef %276)
  %278 = call ptr @CopyMem(ptr noundef %274, ptr noundef %275, i64 noundef %277)
  %279 = load ptr, ptr %10, align 8, !tbaa !5
  %280 = call i64 @StrSize(ptr noundef %279)
  %281 = load ptr, ptr %18, align 8, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %281, i64 %280
  store ptr %282, ptr %18, align 8, !tbaa !5
  %283 = load ptr, ptr %18, align 8, !tbaa !5
  %284 = load ptr, ptr %12, align 8, !tbaa !5
  %285 = load i64, ptr %25, align 8, !tbaa !11
  %286 = getelementptr inbounds i8, ptr %284, i64 %285
  %287 = load i64, ptr %20, align 8, !tbaa !11
  %288 = load ptr, ptr %12, align 8, !tbaa !5
  %289 = load ptr, ptr %8, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %289, i32 0, i32 2
  %291 = load ptr, ptr %290, align 8, !tbaa !32
  %292 = ptrtoint ptr %288 to i64
  %293 = ptrtoint ptr %291 to i64
  %294 = sub i64 %292, %293
  %295 = sub i64 %287, %294
  %296 = load i64, ptr %25, align 8, !tbaa !11
  %297 = sub i64 %295, %296
  %298 = call ptr @CopyMem(ptr noundef %283, ptr noundef %286, i64 noundef %297)
  %299 = load ptr, ptr %8, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %299, i32 0, i32 2
  %301 = load ptr, ptr %300, align 8, !tbaa !32
  call void @FreePool(ptr noundef %301)
  %302 = load ptr, ptr %17, align 8, !tbaa !5
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %303, i32 0, i32 2
  store ptr %302, ptr %304, align 8, !tbaa !32
  %305 = load i64, ptr %19, align 8, !tbaa !11
  %306 = load i64, ptr %20, align 8, !tbaa !11
  %307 = sub i64 %305, %306
  %308 = trunc i64 %307 to i32
  %309 = load ptr, ptr %8, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %309, i32 0, i32 1
  %311 = load ptr, ptr %310, align 8, !tbaa !28
  %312 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %311, i32 0, i32 0
  %313 = load i32, ptr %312, align 1
  %314 = and i32 %313, 16777215
  %315 = add i32 %314, %308
  %316 = load i32, ptr %312, align 1
  %317 = and i32 %315, 16777215
  %318 = and i32 %316, -16777216
  %319 = or i32 %318, %317
  store i32 %319, ptr %312, align 1
  br label %321

320:                                              ; preds = %128
  store i64 -9223372036854775794, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

321:                                              ; preds = %252, %195
  %322 = load ptr, ptr %11, align 8, !tbaa !5
  %323 = icmp eq ptr %322, null
  br i1 %323, label %328, label %324

324:                                              ; preds = %321
  %325 = load i8, ptr %23, align 1, !tbaa !23
  %326 = zext i8 %325 to i32
  %327 = icmp ne i32 %326, 0
  br i1 %327, label %328, label %329

328:                                              ; preds = %324, %321
  store i64 0, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

329:                                              ; preds = %324
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %330, i32 0, i32 1
  %332 = load ptr, ptr %331, align 8, !tbaa !28
  %333 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %332, i32 0, i32 0
  %334 = load i32, ptr %333, align 1
  %335 = and i32 %334, 16777215
  %336 = load ptr, ptr %8, 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 !28
  %339 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %338, i32 0, i32 1
  %340 = load i32, ptr %339, align 1, !tbaa !29
  %341 = sub i32 %335, %340
  %342 = zext i32 %341 to i64
  store i64 %342, ptr %20, align 8, !tbaa !11
  %343 = load i64, ptr %20, align 8, !tbaa !11
  %344 = add i64 %343, 13
  %345 = sub i64 %344, 2
  %346 = load ptr, ptr %22, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct._HII_GLOBAL_FONT_INFO, ptr %346, i32 0, i32 4
  %348 = load ptr, ptr %347, align 8, !tbaa !35
  %349 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %348, i32 0, i32 2
  %350 = getelementptr inbounds [1 x i16], ptr %349, i64 0, i64 0
  %351 = call i64 @StrSize(ptr noundef %350)
  %352 = add i64 %345, %351
  store i64 %352, ptr %19, align 8, !tbaa !11
  %353 = load i64, ptr %19, align 8, !tbaa !11
  %354 = call ptr @AllocateZeroPool(i64 noundef %353)
  store ptr %354, ptr %17, align 8, !tbaa !5
  %355 = load ptr, ptr %17, align 8, !tbaa !5
  %356 = icmp eq ptr %355, null
  br i1 %356, label %357, label %358

357:                                              ; preds = %329
  store i64 -9223372036854775799, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

358:                                              ; preds = %329
  %359 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %359, ptr %18, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %24, i32 0, i32 0
  %361 = getelementptr inbounds %struct.EFI_HII_STRING_BLOCK, ptr %360, i32 0, i32 0
  store i8 49, ptr %361, align 1, !tbaa !37
  %362 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %24, i32 0, i32 1
  store i8 64, ptr %362, align 1, !tbaa !40
  %363 = load i64, ptr %19, align 8, !tbaa !11
  %364 = load i64, ptr %20, align 8, !tbaa !11
  %365 = sub i64 %363, %364
  %366 = trunc i64 %365 to i16
  %367 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %24, i32 0, i32 2
  store i16 %366, ptr %367, align 1, !tbaa !41
  %368 = load ptr, ptr %18, align 8, !tbaa !5
  %369 = call ptr @CopyMem(ptr noundef %368, ptr noundef %24, i64 noundef 4)
  %370 = load ptr, ptr %18, align 8, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %370, i64 4
  store ptr %371, ptr %18, align 8, !tbaa !5
  %372 = load ptr, ptr %21, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct._HII_FONT_INFO, ptr %372, i32 0, i32 3
  %374 = load i8, ptr %373, align 8, !tbaa !26
  %375 = load ptr, ptr %18, align 8, !tbaa !5
  store i8 %374, ptr %375, align 1, !tbaa !23
  %376 = load ptr, ptr %18, align 8, !tbaa !5
  %377 = getelementptr inbounds i8, ptr %376, i32 1
  store ptr %377, ptr %18, align 8, !tbaa !5
  %378 = load ptr, ptr %18, align 8, !tbaa !5
  %379 = load ptr, ptr %22, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct._HII_GLOBAL_FONT_INFO, ptr %379, i32 0, i32 4
  %381 = load ptr, ptr %380, align 8, !tbaa !35
  %382 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %381, i32 0, i32 1
  %383 = call ptr @CopyMem(ptr noundef %378, ptr noundef %382, i64 noundef 2)
  %384 = load ptr, ptr %18, align 8, !tbaa !5
  %385 = getelementptr inbounds i8, ptr %384, i64 2
  store ptr %385, ptr %18, align 8, !tbaa !5
  %386 = load ptr, ptr %18, align 8, !tbaa !5
  %387 = load ptr, ptr %22, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct._HII_GLOBAL_FONT_INFO, ptr %387, i32 0, i32 4
  %389 = load ptr, ptr %388, align 8, !tbaa !35
  %390 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %389, i32 0, i32 0
  %391 = call ptr @CopyMem(ptr noundef %386, ptr noundef %390, i64 noundef 4)
  %392 = load ptr, ptr %18, align 8, !tbaa !5
  %393 = getelementptr inbounds i8, ptr %392, i64 4
  store ptr %393, ptr %18, align 8, !tbaa !5
  %394 = load ptr, ptr %18, align 8, !tbaa !5
  %395 = load ptr, ptr %22, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct._HII_GLOBAL_FONT_INFO, ptr %395, i32 0, i32 4
  %397 = load ptr, ptr %396, align 8, !tbaa !35
  %398 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %397, i32 0, i32 2
  %399 = getelementptr inbounds [1 x i16], ptr %398, i64 0, i64 0
  %400 = load ptr, ptr %22, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct._HII_GLOBAL_FONT_INFO, ptr %400, i32 0, i32 4
  %402 = load ptr, ptr %401, align 8, !tbaa !35
  %403 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %402, i32 0, i32 2
  %404 = getelementptr inbounds [1 x i16], ptr %403, i64 0, i64 0
  %405 = call i64 @StrSize(ptr noundef %404)
  %406 = call ptr @CopyMem(ptr noundef %394, ptr noundef %399, i64 noundef %405)
  %407 = load ptr, ptr %22, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct._HII_GLOBAL_FONT_INFO, ptr %407, i32 0, i32 4
  %409 = load ptr, ptr %408, align 8, !tbaa !35
  %410 = getelementptr inbounds %struct.EFI_FONT_INFO, ptr %409, i32 0, i32 2
  %411 = getelementptr inbounds [1 x i16], ptr %410, i64 0, i64 0
  %412 = call i64 @StrSize(ptr noundef %411)
  %413 = load ptr, ptr %18, align 8, !tbaa !5
  %414 = getelementptr inbounds i8, ptr %413, i64 %412
  store ptr %414, ptr %18, align 8, !tbaa !5
  %415 = load ptr, ptr %18, align 8, !tbaa !5
  %416 = load ptr, ptr %8, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %416, i32 0, i32 2
  %418 = load ptr, ptr %417, align 8, !tbaa !32
  %419 = load i64, ptr %20, align 8, !tbaa !11
  %420 = call ptr @CopyMem(ptr noundef %415, ptr noundef %418, i64 noundef %419)
  %421 = load ptr, ptr %8, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %421, i32 0, i32 2
  %423 = load ptr, ptr %422, align 8, !tbaa !32
  call void @FreePool(ptr noundef %423)
  %424 = load ptr, ptr %17, align 8, !tbaa !5
  %425 = load ptr, ptr %8, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %425, i32 0, i32 2
  store ptr %424, ptr %426, align 8, !tbaa !32
  %427 = getelementptr inbounds %struct._EFI_HII_SIBT_EXT2_BLOCK, ptr %24, i32 0, i32 2
  %428 = load i16, ptr %427, align 1, !tbaa !41
  %429 = zext i16 %428 to i32
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct._HII_STRING_PACKAGE_INSTANCE, ptr %430, i32 0, i32 1
  %432 = load ptr, ptr %431, align 8, !tbaa !28
  %433 = getelementptr inbounds %struct._EFI_HII_STRING_PACKAGE_HDR, ptr %432, i32 0, i32 0
  %434 = load i32, ptr %433, align 1
  %435 = and i32 %434, 16777215
  %436 = add nsw i32 %435, %429
  %437 = load i32, ptr %433, align 1
  %438 = and i32 %436, 16777215
  %439 = and i32 %437, -16777216
  %440 = or i32 %439, %438
  store i32 %440, ptr %433, align 1
  store i64 0, ptr %6, align 8
  store i32 1, ptr %28, align 4
  br label %441

441:                                              ; preds = %358, %357, %328, %320, %251, %160, %126, %100, %84
  call void @llvm.lifetime.end.p0(i64 2, 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 1, 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 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  %442 = load i64, ptr %6, align 8
  ret i64 %442
}

declare i64 @StrLen(ptr noundef) #2

declare i64 @StrSize(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, !12, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!14, !12, i64 0}
!14 = !{!"_HII_DATABASE_PRIVATE_DATA", !12, i64 0, !15, i64 8, !15, i64 24, !16, i64 40, !17, i64 72, !18, i64 112, !19, i64 152, !20, i64 240, !15, i64 288, !12, i64 304, !15, i64 312, !12, i64 328, !21, i64 336, !6, i64 352}
!15 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!16 = !{!"_EFI_HII_FONT_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!"_EFI_HII_IMAGE_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!18 = !{!"_EFI_HII_STRING_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!19 = !{!"_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}
!20 = !{!"_EFI_HII_CONFIG_ROUTING_PROTOCOL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!21 = !{!"", !22, i64 0, !10, i64 4, !10, i64 6, !7, i64 8}
!22 = !{!"int", !7, i64 0}
!23 = !{!7, !7, i64 0}
!24 = !{!25, !7, i64 56}
!25 = !{!"_HII_STRING_PACKAGE_INSTANCE", !12, i64 0, !6, i64 8, !6, i64 16, !15, i64 24, !15, i64 40, !7, i64 56, !10, i64 58}
!26 = !{!27, !7, i64 32}
!27 = !{!"_HII_FONT_INFO", !12, i64 0, !15, i64 8, !6, i64 24, !7, i64 32}
!28 = !{!25, !6, i64 8}
!29 = !{!30, !22, i64 4}
!30 = !{!"_EFI_HII_STRING_PACKAGE_HDR", !31, i64 0, !22, i64 4, !22, i64 8, !7, i64 12, !10, i64 44, !7, i64 46}
!31 = !{!"", !22, i64 0, !22, i64 3}
!32 = !{!25, !6, i64 16}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !6, i64 40}
!36 = !{!"_HII_GLOBAL_FONT_INFO", !12, i64 0, !15, i64 8, !6, i64 24, !12, i64 32, !6, i64 40}
!37 = !{!38, !7, i64 0}
!38 = !{!"_EFI_HII_SIBT_EXT2_BLOCK", !39, i64 0, !7, i64 1, !10, i64 2}
!39 = !{!"", !7, i64 0}
!40 = !{!38, !7, i64 1}
!41 = !{!38, !10, i64 2}


; 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.12 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [76 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
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

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

; Function Attrs: nounwind uwtable
define dso_local range(i64 -9223372036854775808, 1) i64 @SetStringWorker(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 {
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %struct._EFI_HII_SIBT_EXT2_BLOCK, align 1
  %12 = alloca i64, align 8
  %13 = alloca i16, align 2
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #3
  store i16 0, ptr %13, align 2, !tbaa !5
  store i64 0, ptr %12, align 8, !tbaa !9
  %14 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not = icmp eq i8 %14, 0
  br i1 %.not, label %20, label %15

15:                                               ; preds = %5
  %16 = icmp ne ptr %0, null
  %17 = icmp ne ptr %1, null
  %or.cond = and i1 %16, %17
  %18 = icmp ne ptr %3, null
  %or.cond3 = and i1 %or.cond, %18
  br i1 %or.cond3, label %20, label %19

19:                                               ; preds = %15
  tail call void @DebugAssert(ptr noundef nonnull @.str, i64 noundef 903, ptr noundef nonnull @.str.12) #3
  br label %20

20:                                               ; preds = %5, %15, %19
  %21 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not127 = icmp eq i8 %21, 0
  br i1 %.not127, label %26, label %22

22:                                               ; preds = %20
  %23 = load i64, ptr %0, align 8, !tbaa !11
  %24 = icmp eq i64 %23, 1883531592
  br i1 %24, label %26, label %25

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

26:                                               ; preds = %22, %25, %20
  %27 = call i64 @FindStringBlock(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef null, ptr noundef nonnull %13)
  %28 = icmp slt i64 %27, 0
  br i1 %28, label %29, label %39

29:                                               ; preds = %26
  %30 = load i8, ptr %6, align 1
  %31 = add i8 %30, -33
  %or.cond6 = icmp ult i8 %31, 2
  br i1 %or.cond6, label %32, label %39

32:                                               ; preds = %29
  %33 = load i16, ptr %13, align 2, !tbaa !5
  %34 = icmp ne ptr %4, null
  %35 = zext i1 %34 to i8
  %36 = call i64 @InsertLackStringBlock(ptr noundef %1, i16 noundef zeroext %33, i16 noundef zeroext %2, ptr noundef nonnull %6, ptr noundef nonnull %7, i8 noundef zeroext %35)
  %37 = icmp slt i64 %36, 0
  br i1 %37, label %211, label %38

38:                                               ; preds = %32
  br i1 %34, label %.thread134, label %.thread

.thread134:                                       ; preds = %38
  store i64 2, ptr %8, align 8, !tbaa !9
  store ptr null, ptr %9, align 8, !tbaa !22
  store ptr null, ptr %10, align 8, !tbaa !22
  br label %40

.thread:                                          ; preds = %38
  store i64 1, ptr %8, align 8, !tbaa !9
  store ptr null, ptr %9, align 8, !tbaa !22
  store ptr null, ptr %10, align 8, !tbaa !22
  br label %59

39:                                               ; preds = %29, %26
  store ptr null, ptr %9, align 8, !tbaa !22
  store ptr null, ptr %10, align 8, !tbaa !22
  %.not128 = icmp eq ptr %4, null
  br i1 %.not128, label %59, label %40

40:                                               ; preds = %.thread134, %39
  %41 = call zeroext i8 @IsFontInfoExisted(ptr noundef %0, ptr noundef nonnull %4, ptr noundef null, ptr noundef null, ptr noundef nonnull %10) #3
  %.not129 = icmp eq i8 %41, 0
  br i1 %.not129, label %211, label %42

42:                                               ; preds = %40
  %43 = getelementptr inbounds i8, ptr %1, i64 56
  %44 = load i8, ptr %43, align 8, !tbaa !23
  %45 = load ptr, ptr %10, align 8, !tbaa !22
  %46 = call zeroext i8 @ReferFontInfoLocally(ptr noundef %0, ptr noundef %1, i8 noundef zeroext %44, i8 noundef zeroext 0, ptr noundef %45, ptr noundef nonnull %9)
  %.not130 = icmp eq i8 %46, 0
  br i1 %.not130, label %47, label %50

47:                                               ; preds = %42
  %48 = load i8, ptr %43, align 8, !tbaa !23
  %49 = add i8 %48, 1
  store i8 %49, ptr %43, align 8, !tbaa !23
  br label %50

50:                                               ; preds = %42, %47
  %51 = load i8, ptr %6, align 1, !tbaa !25
  switch i8 %51, label %211 [
    i8 17, label %52
    i8 19, label %52
    i8 21, label %52
    i8 23, label %52
  ]

52:                                               ; preds = %50, %50, %50, %50
  %53 = load ptr, ptr %9, align 8, !tbaa !22
  %54 = getelementptr inbounds i8, ptr %53, i64 32
  %55 = load i8, ptr %54, align 8, !tbaa !26
  %56 = load ptr, ptr %7, align 8, !tbaa !22
  %57 = getelementptr inbounds i8, ptr %56, i64 1
  store i8 %55, ptr %57, align 1, !tbaa !25
  %58 = icmp ne i8 %46, 0
  br label %59

59:                                               ; preds = %.thread, %52, %39
  %.not128133 = phi i1 [ false, %52 ], [ true, %39 ], [ true, %.thread ]
  %.0119 = phi i1 [ %58, %52 ], [ false, %39 ], [ false, %.thread ]
  %60 = getelementptr inbounds i8, ptr %1, i64 8
  %61 = load ptr, ptr %60, align 8, !tbaa !28
  %62 = load i32, ptr %61, align 1
  %63 = and i32 %62, 16777215
  %64 = getelementptr inbounds i8, ptr %61, i64 4
  %65 = load i32, ptr %64, align 1, !tbaa !29
  %66 = sub i32 %63, %65
  %67 = zext i32 %66 to i64
  %68 = load ptr, ptr %7, align 8, !tbaa !22
  %69 = load i64, ptr %8, align 8, !tbaa !9
  %70 = getelementptr inbounds i8, ptr %68, i64 %69
  %71 = load i8, ptr %6, align 1, !tbaa !25
  switch i8 %71, label %211 [
    i8 16, label %72
    i8 17, label %72
    i8 18, label %72
    i8 19, label %72
    i8 20, label %107
    i8 21, label %107
    i8 22, label %107
    i8 23, label %107
  ]

72:                                               ; preds = %59, %59, %59, %59
  %73 = call i64 @StrLen(ptr noundef %3) #3
  %74 = add i64 %73, %67
  %75 = call i64 @AsciiStrSize(ptr noundef %70) #3
  %76 = sub i64 %74, %75
  %77 = call ptr @AllocateZeroPool(i64 noundef %76) #3
  %78 = icmp eq ptr %77, null
  br i1 %78, label %211, label %79

79:                                               ; preds = %72
  %80 = getelementptr inbounds i8, ptr %1, i64 16
  %81 = load ptr, ptr %80, align 8, !tbaa !32
  %82 = ptrtoint ptr %70 to i64
  %83 = ptrtoint ptr %81 to i64
  %84 = sub i64 %82, %83
  %85 = call ptr @CopyMem(ptr noundef nonnull %77, ptr noundef %81, i64 noundef %84) #3
  %86 = load ptr, ptr %80, align 8, !tbaa !32
  %87 = ptrtoint ptr %86 to i64
  %88 = sub i64 %82, %87
  %89 = getelementptr inbounds i8, ptr %77, i64 %88
  %90 = load i16, ptr %3, align 2, !tbaa !5
  %.not131145 = icmp eq i16 %90, 0
  br i1 %.not131145, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %79, %.lr.ph
  %91 = phi i16 [ %95, %.lr.ph ], [ %90, %79 ]
  %.0120147 = phi ptr [ %94, %.lr.ph ], [ %89, %79 ]
  %.0121146 = phi ptr [ %92, %.lr.ph ], [ %3, %79 ]
  %92 = getelementptr inbounds i8, ptr %.0121146, i64 2
  %93 = trunc i16 %91 to i8
  %94 = getelementptr inbounds i8, ptr %.0120147, i64 1
  store i8 %93, ptr %.0120147, align 1, !tbaa !25
  %95 = load i16, ptr %92, align 2, !tbaa !5
  %.not131 = icmp eq i16 %95, 0
  br i1 %.not131, label %._crit_edge, label %.lr.ph, !llvm.loop !33

._crit_edge:                                      ; preds = %.lr.ph, %79
  %.0120.lcssa = phi ptr [ %89, %79 ], [ %94, %.lr.ph ]
  %96 = getelementptr inbounds i8, ptr %.0120.lcssa, i64 1
  store i8 0, ptr %.0120.lcssa, align 1, !tbaa !25
  %97 = load ptr, ptr %80, align 8, !tbaa !32
  %98 = ptrtoint ptr %97 to i64
  %99 = call i64 @AsciiStrSize(ptr noundef %70) #3
  %100 = add i64 %67, %98
  %101 = add i64 %99, %82
  %102 = sub i64 %100, %101
  %103 = call i64 @AsciiStrSize(ptr noundef %70) #3
  %104 = getelementptr inbounds i8, ptr %70, i64 %103
  %105 = call ptr @CopyMem(ptr noundef nonnull %96, ptr noundef %104, i64 noundef %102) #3
  %106 = load ptr, ptr %80, align 8, !tbaa !32
  call void @FreePool(ptr noundef %106) #3
  store ptr %77, ptr %80, align 8, !tbaa !32
  br label %139

107:                                              ; preds = %59, %59, %59, %59
  %108 = call i64 @GetUnicodeStringTextOrSize(ptr noundef null, ptr noundef %70, ptr noundef nonnull %12)
  %109 = call i64 @StrSize(ptr noundef %3) #3
  %110 = add i64 %109, %67
  %111 = load i64, ptr %12, align 8, !tbaa !9
  %112 = sub i64 %110, %111
  %113 = call ptr @AllocateZeroPool(i64 noundef %112) #3
  %114 = icmp eq ptr %113, null
  br i1 %114, label %211, label %115

115:                                              ; preds = %107
  %116 = getelementptr inbounds i8, ptr %1, i64 16
  %117 = load ptr, ptr %116, align 8, !tbaa !32
  %118 = ptrtoint ptr %70 to i64
  %119 = ptrtoint ptr %117 to i64
  %120 = sub i64 %118, %119
  %121 = call ptr @CopyMem(ptr noundef nonnull %113, ptr noundef %117, i64 noundef %120) #3
  %122 = load ptr, ptr %116, align 8, !tbaa !32
  %123 = ptrtoint ptr %122 to i64
  %124 = sub i64 %118, %123
  %125 = getelementptr inbounds i8, ptr %113, i64 %124
  %126 = call i64 @StrSize(ptr noundef %3) #3
  %127 = call ptr @CopyMem(ptr noundef nonnull %125, ptr noundef %3, i64 noundef %126) #3
  %128 = call i64 @StrSize(ptr noundef %3) #3
  %129 = getelementptr inbounds i8, ptr %125, i64 %128
  %130 = load i64, ptr %12, align 8, !tbaa !9
  %131 = getelementptr inbounds i8, ptr %70, i64 %130
  %132 = load ptr, ptr %116, align 8, !tbaa !32
  %133 = ptrtoint ptr %132 to i64
  %134 = add i64 %130, %118
  %135 = sub i64 %67, %134
  %136 = add i64 %135, %133
  %137 = call ptr @CopyMem(ptr noundef nonnull %129, ptr noundef %131, i64 noundef %136) #3
  %138 = load ptr, ptr %116, align 8, !tbaa !32
  call void @FreePool(ptr noundef %138) #3
  store ptr %113, ptr %116, align 8, !tbaa !32
  br label %139

139:                                              ; preds = %115, %._crit_edge
  %.sink155 = phi i64 [ %112, %115 ], [ %76, %._crit_edge ]
  %140 = trunc i64 %.sink155 to i32
  %141 = sub i32 %140, %66
  %142 = load ptr, ptr %60, align 8, !tbaa !28
  %143 = load i32, ptr %142, align 1
  %144 = add i32 %141, %143
  %145 = and i32 %144, 16777215
  %146 = and i32 %143, -16777216
  %147 = or disjoint i32 %145, %146
  store i32 %147, ptr %142, align 1
  %or.cond9 = or i1 %.not128133, %.0119
  br i1 %or.cond9, label %211, label %148

148:                                              ; preds = %139
  %149 = load ptr, ptr %60, align 8, !tbaa !28
  %150 = load i32, ptr %149, align 1
  %151 = and i32 %150, 16777215
  %152 = getelementptr inbounds i8, ptr %149, i64 4
  %153 = load i32, ptr %152, align 1, !tbaa !29
  %154 = sub i32 %151, %153
  %155 = zext i32 %154 to i64
  %156 = add nuw nsw i64 %155, 11
  %157 = load ptr, ptr %10, align 8, !tbaa !22
  %158 = getelementptr inbounds i8, ptr %157, i64 40
  %159 = load ptr, ptr %158, align 8, !tbaa !35
  %160 = getelementptr inbounds i8, ptr %159, i64 6
  %161 = call i64 @StrSize(ptr noundef nonnull %160) #3
  %162 = add i64 %156, %161
  %163 = call ptr @AllocateZeroPool(i64 noundef %162) #3
  %164 = icmp eq ptr %163, null
  br i1 %164, label %211, label %165

165:                                              ; preds = %148
  store i8 49, ptr %11, align 1, !tbaa !37
  %166 = getelementptr inbounds i8, ptr %11, i64 1
  store i8 64, ptr %166, align 1, !tbaa !40
  %167 = sub i64 %162, %155
  %168 = trunc i64 %167 to i16
  %169 = getelementptr inbounds i8, ptr %11, i64 2
  store i16 %168, ptr %169, align 1, !tbaa !41
  %170 = call ptr @CopyMem(ptr noundef nonnull %163, ptr noundef nonnull %11, i64 noundef 4) #3
  %171 = getelementptr inbounds i8, ptr %163, i64 4
  %172 = load ptr, ptr %9, align 8, !tbaa !22
  %173 = getelementptr inbounds i8, ptr %172, i64 32
  %174 = load i8, ptr %173, align 8, !tbaa !26
  store i8 %174, ptr %171, align 1, !tbaa !25
  %175 = getelementptr inbounds i8, ptr %163, i64 5
  %176 = load ptr, ptr %10, align 8, !tbaa !22
  %177 = getelementptr inbounds i8, ptr %176, i64 40
  %178 = load ptr, ptr %177, align 8, !tbaa !35
  %179 = getelementptr inbounds i8, ptr %178, i64 4
  %180 = call ptr @CopyMem(ptr noundef nonnull %175, ptr noundef nonnull %179, i64 noundef 2) #3
  %181 = getelementptr inbounds i8, ptr %163, i64 7
  %182 = load ptr, ptr %10, align 8, !tbaa !22
  %183 = getelementptr inbounds i8, ptr %182, i64 40
  %184 = load ptr, ptr %183, align 8, !tbaa !35
  %185 = call ptr @CopyMem(ptr noundef nonnull %181, ptr noundef %184, i64 noundef 4) #3
  %186 = getelementptr inbounds i8, ptr %163, i64 11
  %187 = load ptr, ptr %10, align 8, !tbaa !22
  %188 = getelementptr inbounds i8, ptr %187, i64 40
  %189 = load ptr, ptr %188, align 8, !tbaa !35
  %190 = getelementptr inbounds i8, ptr %189, i64 6
  %191 = call i64 @StrSize(ptr noundef nonnull %190) #3
  %192 = call ptr @CopyMem(ptr noundef nonnull %186, ptr noundef nonnull %190, i64 noundef %191) #3
  %193 = load ptr, ptr %10, align 8, !tbaa !22
  %194 = getelementptr inbounds i8, ptr %193, i64 40
  %195 = load ptr, ptr %194, align 8, !tbaa !35
  %196 = getelementptr inbounds i8, ptr %195, i64 6
  %197 = call i64 @StrSize(ptr noundef nonnull %196) #3
  %198 = getelementptr inbounds i8, ptr %186, i64 %197
  %199 = getelementptr inbounds i8, ptr %1, i64 16
  %200 = load ptr, ptr %199, align 8, !tbaa !32
  %201 = call ptr @CopyMem(ptr noundef nonnull %198, ptr noundef %200, i64 noundef %155) #3
  %202 = load ptr, ptr %199, align 8, !tbaa !32
  call void @FreePool(ptr noundef %202) #3
  store ptr %163, ptr %199, align 8, !tbaa !32
  %203 = load i16, ptr %169, align 1, !tbaa !41
  %204 = zext i16 %203 to i32
  %205 = load ptr, ptr %60, align 8, !tbaa !28
  %206 = load i32, ptr %205, align 1
  %207 = add i32 %206, %204
  %208 = and i32 %207, 16777215
  %209 = and i32 %206, -16777216
  %210 = or disjoint i32 %208, %209
  store i32 %210, ptr %205, align 1
  br label %211

211:                                              ; preds = %148, %139, %59, %107, %72, %50, %40, %32, %165
  %.0 = phi i64 [ 0, %165 ], [ %36, %32 ], [ -9223372036854775806, %40 ], [ -9223372036854775805, %50 ], [ -9223372036854775799, %72 ], [ -9223372036854775799, %107 ], [ -9223372036854775794, %59 ], [ 0, %139 ], [ -9223372036854775799, %148 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 4, 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 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #3
  ret i64 %.0
}

declare i64 @StrLen(ptr noundef) local_unnamed_addr #2

declare i64 @StrSize(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, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_HII_DATABASE_PRIVATE_DATA", !10, i64 0, !13, i64 8, !13, i64 24, !15, i64 40, !16, i64 72, !17, i64 112, !18, i64 152, !19, i64 240, !13, i64 288, !10, i64 304, !13, i64 312, !10, i64 328, !20, i64 336, !14, i64 352}
!13 = !{!"_LIST_ENTRY", !14, i64 0, !14, i64 8}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"_EFI_HII_FONT_PROTOCOL", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!16 = !{!"_EFI_HII_IMAGE_PROTOCOL", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32}
!17 = !{!"_EFI_HII_STRING_PROTOCOL", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32}
!18 = !{!"_EFI_HII_DATABASE_PROTOCOL", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80}
!19 = !{!"_EFI_HII_CONFIG_ROUTING_PROTOCOL", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40}
!20 = !{!"", !21, i64 0, !6, i64 4, !6, i64 6, !7, i64 8}
!21 = !{!"int", !7, i64 0}
!22 = !{!14, !14, i64 0}
!23 = !{!24, !7, i64 56}
!24 = !{!"_HII_STRING_PACKAGE_INSTANCE", !10, i64 0, !14, i64 8, !14, i64 16, !13, i64 24, !13, i64 40, !7, i64 56, !6, i64 58}
!25 = !{!7, !7, i64 0}
!26 = !{!27, !7, i64 32}
!27 = !{!"_HII_FONT_INFO", !10, i64 0, !13, i64 8, !14, i64 24, !7, i64 32}
!28 = !{!24, !14, i64 8}
!29 = !{!30, !21, i64 4}
!30 = !{!"_EFI_HII_STRING_PACKAGE_HDR", !31, i64 0, !21, i64 4, !21, i64 8, !7, i64 12, !6, i64 44, !7, i64 46}
!31 = !{!"", !21, i64 0, !21, i64 3}
!32 = !{!24, !14, i64 16}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !14, i64 40}
!36 = !{!"_HII_GLOBAL_FONT_INFO", !10, i64 0, !13, i64 8, !14, i64 24, !10, i64 32, !14, i64 40}
!37 = !{!38, !7, i64 0}
!38 = !{!"_EFI_HII_SIBT_EXT2_BLOCK", !39, i64 0, !7, i64 1, !6, i64 2}
!39 = !{!"", !7, i64 0}
!40 = !{!38, !7, i64 1}
!41 = !{!38, !6, i64 2}


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