; LLVM IR from jrouwe/JoltPhysics :: TestFramework/UI/UIStaticText.ll (ZNK12UIStaticText10DrawCustomEN3JPH5ColorE)

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

%"class.JPH::Color" = type { %union.anon.7 }
%union.anon.7 = type { i32 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_string_view" = type { i64, ptr }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%"class.JPH::Float2" = type { float, float }
%"struct.JPH::AssertLastParam" = type { i8 }
%class.UIStaticText = type <{ %class.UIElement, %"class.JPH::RefConst", %"class.std::__cxx11::basic_string", %"class.JPH::Color", %"class.JPH::Color", i32, i32, i32, i32, i32, i8, [3 x i8] }>
%class.UIElement = type { %class.UIEventListener, i32, ptr, %"class.JPH::Array", %"class.UIElement::Position", %"class.UIElement::Position", %"class.UIElement::Size", %"class.UIElement::Size", %"class.UIElement::Size", %"class.UIElement::Size", i8, i8, i8, i8, i8, i8, i8, %"class.JPH::Array.2", ptr }
%class.UIEventListener = type { ptr }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.UIElement::Position" = type { i32, %"class.UIElement::Size" }
%"class.UIElement::Size" = type { i32, i32 }
%"class.JPH::Array.2" = type { i64, i64, ptr }
%"class.JPH::RefConst" = type { ptr }

@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [86 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK12UIStaticText10DrawCustomEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(213) %0, i32 %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::Color", align 4
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::basic_string_view", align 8
  %10 = alloca %"class.JPH::Color", align 4
  %11 = alloca %"class.JPH::Array.13", align 8
  %12 = alloca %"class.std::basic_string_view", align 8
  %13 = alloca %"class.std::basic_string_view", align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"class.JPH::Float2", align 4
  %20 = alloca %"class.std::basic_string_view", align 8
  %21 = alloca i32, align 4
  %22 = alloca %"class.std::basic_string_view", align 8
  %23 = alloca %"class.JPH::Color", align 4
  %24 = alloca %"struct.JPH::AssertLastParam", align 1
  %25 = alloca %"class.JPH::Array.13", align 8
  %26 = alloca %"class.std::basic_string_view", align 8
  %27 = alloca %"class.std::basic_string_view", align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.JPH::Float2", align 4
  %33 = alloca %"class.std::basic_string_view", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.std::basic_string_view", align 8
  %36 = alloca %"class.JPH::Color", align 4
  %37 = getelementptr inbounds %"class.JPH::Color", ptr %3, i32 0, i32 0
  %38 = getelementptr inbounds %union.anon.7, ptr %37, i32 0, i32 0
  store i32 %1, ptr %38, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  %39 = load ptr, ptr %4, align 8
  %40 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %41 = call noundef zeroext i1 @_ZNK3JPH8RefConstI4FontEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef null)
  br i1 %41, label %42, label %336

42:                                               ; preds = %2
  %43 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 2
  %44 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br i1 %44, label %336, label %45

45:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 32, ptr %5) #8
  call void @_ZNK12UIStaticText14GetWrappedTextB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull align 8 dereferenceable(213) %39)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  %46 = invoke noundef i32 @_ZNK9UIElement4GetYEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %47 unwind label %75

47:                                               ; preds = %45
  %48 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 7
  %49 = load i32, ptr %48, align 8, !tbaa !9
  %50 = add nsw i32 %46, %49
  store i32 %50, ptr %6, align 4, !tbaa !26
  %51 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 9
  %52 = load i32, ptr %51, align 8, !tbaa !27
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %54, label %83

54:                                               ; preds = %47
  %55 = invoke noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %56 unwind label %75

56:                                               ; preds = %54
  %57 = invoke noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %58 unwind label %75

58:                                               ; preds = %56
  %59 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 5
  %60 = load i32, ptr %59, align 8, !tbaa !28
  %61 = add nsw i32 %57, %60
  %62 = load i32, ptr %6, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  %63 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  %64 = getelementptr inbounds { i64, ptr }, ptr %9, i32 0, i32 0
  %65 = extractvalue { i64, ptr } %63, 0
  store i64 %65, ptr %64, align 8
  %66 = getelementptr inbounds { i64, ptr }, ptr %9, i32 0, i32 1
  %67 = extractvalue { i64, ptr } %63, 1
  store ptr %67, ptr %66, align 8
  %68 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %69 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %70 unwind label %79

70:                                               ; preds = %58
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %3, i64 4, i1 false), !tbaa.struct !29
  %71 = getelementptr inbounds %"class.JPH::Color", ptr %10, i32 0, i32 0
  %72 = getelementptr inbounds %union.anon.7, ptr %71, i32 0, i32 0
  %73 = load i32, ptr %72, align 4
  invoke void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248) %55, i32 noundef %61, i32 noundef %62, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef %69, i32 %73)
          to label %74 unwind label %79

74:                                               ; preds = %70
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  br label %334

75:                                               ; preds = %216, %56, %54, %45
  %76 = landingpad { ptr, i32 }
          cleanup
  %77 = extractvalue { ptr, i32 } %76, 0
  store ptr %77, ptr %7, align 8
  %78 = extractvalue { ptr, i32 } %76, 1
  store i32 %78, ptr %8, align 4
  br label %335

79:                                               ; preds = %70, %58
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %7, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  br label %335

83:                                               ; preds = %47
  %84 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 9
  %85 = load i32, ptr %84, align 8, !tbaa !27
  %86 = icmp eq i32 %85, 2
  br i1 %86, label %87, label %211

87:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #8
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #8
  %88 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  %89 = getelementptr inbounds { i64, ptr }, ptr %12, i32 0, i32 0
  %90 = extractvalue { i64, ptr } %88, 0
  store i64 %90, ptr %89, align 8
  %91 = getelementptr inbounds { i64, ptr }, ptr %12, i32 0, i32 1
  %92 = extractvalue { i64, ptr } %88, 1
  store ptr %92, ptr %91, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #8
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef @.str.1) #8
  invoke void @_ZN3JPH14StringToVectorERKSt17basic_string_viewIcSt11char_traitsIcEERNS_5ArrayINSt7__cxx1112basic_stringIcS2_NS_12STLAllocatorIcEEEENS9_ISB_EEEES5_b(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(16) %13, i1 noundef zeroext true)
          to label %93 unwind label %113

93:                                               ; preds = %87
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %94 = invoke noundef i32 @_ZNK9UIElement8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %95 unwind label %117

95:                                               ; preds = %93
  %96 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 5
  %97 = load i32, ptr %96, align 8, !tbaa !28
  %98 = sub nsw i32 %94, %97
  %99 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 6
  %100 = load i32, ptr %99, align 4, !tbaa !31
  %101 = sub nsw i32 %98, %100
  store i32 %101, ptr %14, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store ptr %11, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %102 = load ptr, ptr %15, align 8, !tbaa !5
  %103 = invoke noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %102)
          to label %104 unwind label %121

104:                                              ; preds = %95
  store ptr %103, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %105 = load ptr, ptr %15, align 8, !tbaa !5
  %106 = invoke noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %105)
          to label %107 unwind label %125

107:                                              ; preds = %104
  store ptr %106, ptr %17, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %185, %107
  %109 = load ptr, ptr %16, align 8, !tbaa !5
  %110 = load ptr, ptr %17, align 8, !tbaa !5
  %111 = icmp ne ptr %109, %110
  br i1 %111, label %129, label %112

112:                                              ; preds = %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %208

113:                                              ; preds = %87
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %7, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #8
  br label %210

117:                                              ; preds = %93
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %7, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %8, align 4
  br label %209

121:                                              ; preds = %95
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %7, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %8, align 4
  br label %207

125:                                              ; preds = %104
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %7, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %8, align 4
  br label %206

129:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %130 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %130, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %131 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %132 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %133 unwind label %188

133:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #8
  %134 = load ptr, ptr %18, align 8, !tbaa !5
  %135 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %134) #8
  %136 = getelementptr inbounds { i64, ptr }, ptr %20, i32 0, i32 0
  %137 = extractvalue { i64, ptr } %135, 0
  store i64 %137, ptr %136, align 8
  %138 = getelementptr inbounds { i64, ptr }, ptr %20, i32 0, i32 1
  %139 = extractvalue { i64, ptr } %135, 1
  store ptr %139, ptr %138, align 8
  %140 = invoke <2 x float> @_ZNK4Font11MeasureTextERKSt17basic_string_viewIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(51376) %132, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %141 unwind label %192

141:                                              ; preds = %133
  store <2 x float> %140, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %142 = getelementptr inbounds %"class.JPH::Float2", ptr %19, i32 0, i32 0
  %143 = load float, ptr %142, align 4, !tbaa !32
  %144 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %145 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %146 unwind label %196

146:                                              ; preds = %141
  %147 = invoke noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %145)
          to label %148 unwind label %196

148:                                              ; preds = %146
  %149 = sitofp i32 %147 to float
  %150 = fmul float %143, %149
  %151 = fptosi float %150 to i32
  store i32 %151, ptr %21, align 4, !tbaa !26
  %152 = invoke noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %153 unwind label %196

153:                                              ; preds = %148
  %154 = invoke noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %155 unwind label %196

155:                                              ; preds = %153
  %156 = load i32, ptr %14, align 4, !tbaa !26
  %157 = load i32, ptr %21, align 4, !tbaa !26
  %158 = sub nsw i32 %156, %157
  %159 = sdiv i32 %158, 2
  %160 = add nsw i32 %154, %159
  %161 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 5
  %162 = load i32, ptr %161, align 8, !tbaa !28
  %163 = add nsw i32 %160, %162
  %164 = load i32, ptr %6, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #8
  %165 = load ptr, ptr %18, align 8, !tbaa !5
  %166 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %165) #8
  %167 = getelementptr inbounds { i64, ptr }, ptr %22, i32 0, i32 0
  %168 = extractvalue { i64, ptr } %166, 0
  store i64 %168, ptr %167, align 8
  %169 = getelementptr inbounds { i64, ptr }, ptr %22, i32 0, i32 1
  %170 = extractvalue { i64, ptr } %166, 1
  store ptr %170, ptr %169, align 8
  %171 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %172 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %171)
          to label %173 unwind label %200

173:                                              ; preds = %155
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 %3, i64 4, i1 false), !tbaa.struct !29
  %174 = getelementptr inbounds %"class.JPH::Color", ptr %23, i32 0, i32 0
  %175 = getelementptr inbounds %union.anon.7, ptr %174, i32 0, i32 0
  %176 = load i32, ptr %175, align 4
  invoke void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248) %152, i32 noundef %163, i32 noundef %164, ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef %172, i32 %176)
          to label %177 unwind label %200

177:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #8
  %178 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %179 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %178)
          to label %180 unwind label %196

180:                                              ; preds = %177
  %181 = invoke noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %179)
          to label %182 unwind label %196

182:                                              ; preds = %180
  %183 = load i32, ptr %6, align 4, !tbaa !26
  %184 = add nsw i32 %183, %181
  store i32 %184, ptr %6, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %185

185:                                              ; preds = %182
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %186, i32 1
  store ptr %187, ptr %16, align 8, !tbaa !5
  br label %108

188:                                              ; preds = %129
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %7, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %8, align 4
  br label %205

192:                                              ; preds = %133
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %7, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #8
  br label %205

196:                                              ; preds = %180, %177, %153, %148, %146, %141
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %7, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %8, align 4
  br label %204

200:                                              ; preds = %173, %155
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %7, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #8
  br label %204

204:                                              ; preds = %200, %196
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %205

205:                                              ; preds = %204, %192, %188
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %206

206:                                              ; preds = %205, %125
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %207

207:                                              ; preds = %206, %121
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %209

208:                                              ; preds = %112
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  br label %333

209:                                              ; preds = %207, %117
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  br label %210

210:                                              ; preds = %209, %113
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  br label %335

211:                                              ; preds = %83
  br label %212

212:                                              ; preds = %211
  %213 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 9
  %214 = load i32, ptr %213, align 8, !tbaa !27
  %215 = icmp eq i32 %214, 3
  br i1 %215, label %220, label %216

216:                                              ; preds = %212
  %217 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.2, ptr noundef @.str.3, i32 noundef 152)
          to label %218 unwind label %75

218:                                              ; preds = %216
  br i1 %217, label %219, label %220

219:                                              ; preds = %218
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !35
  br label %220

220:                                              ; preds = %219, %218, %212
  br label %221

221:                                              ; preds = %220
  br label %222

222:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #8
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #8
  %223 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  %224 = getelementptr inbounds { i64, ptr }, ptr %26, i32 0, i32 0
  %225 = extractvalue { i64, ptr } %223, 0
  store i64 %225, ptr %224, align 8
  %226 = getelementptr inbounds { i64, ptr }, ptr %26, i32 0, i32 1
  %227 = extractvalue { i64, ptr } %223, 1
  store ptr %227, ptr %226, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #8
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef @.str.1) #8
  invoke void @_ZN3JPH14StringToVectorERKSt17basic_string_viewIcSt11char_traitsIcEERNS_5ArrayINSt7__cxx1112basic_stringIcS2_NS_12STLAllocatorIcEEEENS9_ISB_EEEES5_b(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(16) %27, i1 noundef zeroext true)
          to label %228 unwind label %240

228:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  store ptr %25, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %229 = load ptr, ptr %28, align 8, !tbaa !5
  %230 = invoke noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %229)
          to label %231 unwind label %244

231:                                              ; preds = %228
  store ptr %230, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %232 = load ptr, ptr %28, align 8, !tbaa !5
  %233 = invoke noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %232)
          to label %234 unwind label %248

234:                                              ; preds = %231
  store ptr %233, ptr %30, align 8, !tbaa !5
  br label %235

235:                                              ; preds = %308, %234
  %236 = load ptr, ptr %29, align 8, !tbaa !5
  %237 = load ptr, ptr %30, align 8, !tbaa !5
  %238 = icmp ne ptr %236, %237
  br i1 %238, label %252, label %239

239:                                              ; preds = %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %331

240:                                              ; preds = %222
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %7, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #8
  br label %332

244:                                              ; preds = %228
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %7, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %8, align 4
  br label %330

248:                                              ; preds = %231
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %7, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %8, align 4
  br label %329

252:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %253 = load ptr, ptr %29, align 8, !tbaa !5
  store ptr %253, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %254 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %255 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %254)
          to label %256 unwind label %311

256:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #8
  %257 = load ptr, ptr %31, align 8, !tbaa !5
  %258 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %257) #8
  %259 = getelementptr inbounds { i64, ptr }, ptr %33, i32 0, i32 0
  %260 = extractvalue { i64, ptr } %258, 0
  store i64 %260, ptr %259, align 8
  %261 = getelementptr inbounds { i64, ptr }, ptr %33, i32 0, i32 1
  %262 = extractvalue { i64, ptr } %258, 1
  store ptr %262, ptr %261, align 8
  %263 = invoke <2 x float> @_ZNK4Font11MeasureTextERKSt17basic_string_viewIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(51376) %255, ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %264 unwind label %315

264:                                              ; preds = %256
  store <2 x float> %263, ptr %32, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  %265 = getelementptr inbounds %"class.JPH::Float2", ptr %32, i32 0, i32 0
  %266 = load float, ptr %265, align 4, !tbaa !32
  %267 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %268 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %267)
          to label %269 unwind label %319

269:                                              ; preds = %264
  %270 = invoke noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %268)
          to label %271 unwind label %319

271:                                              ; preds = %269
  %272 = sitofp i32 %270 to float
  %273 = fmul float %266, %272
  %274 = fptosi float %273 to i32
  store i32 %274, ptr %34, align 4, !tbaa !26
  %275 = invoke noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %276 unwind label %319

276:                                              ; preds = %271
  %277 = invoke noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %278 unwind label %319

278:                                              ; preds = %276
  %279 = invoke noundef i32 @_ZNK9UIElement8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(144) %39)
          to label %280 unwind label %319

280:                                              ; preds = %278
  %281 = add nsw i32 %277, %279
  %282 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 6
  %283 = load i32, ptr %282, align 4, !tbaa !31
  %284 = sub nsw i32 %281, %283
  %285 = load i32, ptr %34, align 4, !tbaa !26
  %286 = sub nsw i32 %284, %285
  %287 = load i32, ptr %6, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #8
  %288 = load ptr, ptr %31, align 8, !tbaa !5
  %289 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %288) #8
  %290 = getelementptr inbounds { i64, ptr }, ptr %35, i32 0, i32 0
  %291 = extractvalue { i64, ptr } %289, 0
  store i64 %291, ptr %290, align 8
  %292 = getelementptr inbounds { i64, ptr }, ptr %35, i32 0, i32 1
  %293 = extractvalue { i64, ptr } %289, 1
  store ptr %293, ptr %292, align 8
  %294 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %295 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %294)
          to label %296 unwind label %323

296:                                              ; preds = %280
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %3, i64 4, i1 false), !tbaa.struct !29
  %297 = getelementptr inbounds %"class.JPH::Color", ptr %36, i32 0, i32 0
  %298 = getelementptr inbounds %union.anon.7, ptr %297, i32 0, i32 0
  %299 = load i32, ptr %298, align 4
  invoke void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248) %275, i32 noundef %286, i32 noundef %287, ptr noundef nonnull align 8 dereferenceable(16) %35, ptr noundef %295, i32 %299)
          to label %300 unwind label %323

300:                                              ; preds = %296
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  %301 = getelementptr inbounds %class.UIStaticText, ptr %39, i32 0, i32 1
  %302 = invoke noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %301)
          to label %303 unwind label %319

303:                                              ; preds = %300
  %304 = invoke noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %302)
          to label %305 unwind label %319

305:                                              ; preds = %303
  %306 = load i32, ptr %6, align 4, !tbaa !26
  %307 = add nsw i32 %306, %304
  store i32 %307, ptr %6, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %308

308:                                              ; preds = %305
  %309 = load ptr, ptr %29, align 8, !tbaa !5
  %310 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %309, i32 1
  store ptr %310, ptr %29, align 8, !tbaa !5
  br label %235

311:                                              ; preds = %252
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %7, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %8, align 4
  br label %328

315:                                              ; preds = %256
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %7, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  br label %328

319:                                              ; preds = %303, %300, %278, %276, %271, %269, %264
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %7, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %8, align 4
  br label %327

323:                                              ; preds = %296, %280
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %7, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  br label %327

327:                                              ; preds = %323, %319
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %328

328:                                              ; preds = %327, %315, %311
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %329

329:                                              ; preds = %328, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %330

330:                                              ; preds = %329, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %332

331:                                              ; preds = %239
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #8
  br label %333

332:                                              ; preds = %330, %240
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #8
  br label %335

333:                                              ; preds = %331, %208
  br label %334

334:                                              ; preds = %333, %74
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %5) #8
  br label %336

335:                                              ; preds = %332, %210, %79, %75
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %5) #8
  br label %337

336:                                              ; preds = %334, %42, %2
  ret void

337:                                              ; preds = %335
  %338 = load ptr, ptr %7, align 8
  %339 = load i32, ptr %8, align 4
  %340 = insertvalue { ptr, i32 } poison, ptr %338, 0
  %341 = insertvalue { ptr, i32 } %340, i32 %339, 1
  resume { ptr, i32 } %341
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH8RefConstI4FontEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

declare <2 x float> @_ZNK4Font11MeasureTextERKSt17basic_string_viewIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(51376), ptr noundef nonnull align 8 dereferenceable(16)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK12UIStaticText14GetWrappedTextB5cxx11Ev(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(213)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9UIElement8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(144)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9UIElement4GetYEv(ptr noundef nonnull align 8 dereferenceable(144)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144)) #5 align 2

declare void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

declare void @_ZN3JPH14StringToVectorERKSt17basic_string_viewIcSt11char_traitsIcEERNS_5ArrayINSt7__cxx1112basic_stringIcS2_NS_12STLAllocatorIcEEEENS9_ISB_EEEES5_b(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) #7

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="64" "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 = { inlinehint mustprogress 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 #4 = { "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 #5 = { mustprogress 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 #6 = { mustprogress 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 #7 = { inlinehint mustprogress 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 #8 = { 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++ TBAA"}
!9 = !{!10, !13, i64 200}
!10 = !{!"_ZTS12UIStaticText", !11, i64 0, !22, i64 144, !23, i64 152, !25, i64 184, !25, i64 188, !13, i64 192, !13, i64 196, !13, i64 200, !13, i64 204, !17, i64 208, !20, i64 212}
!11 = !{!"_ZTS9UIElement", !12, i64 0, !13, i64 8, !6, i64 16, !14, i64 24, !16, i64 48, !16, i64 60, !18, i64 72, !18, i64 80, !18, i64 88, !18, i64 96, !20, i64 104, !20, i64 105, !20, i64 106, !20, i64 107, !20, i64 108, !20, i64 109, !20, i64 110, !21, i64 112, !6, i64 136}
!12 = !{!"_ZTS15UIEventListener"}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSN3JPH5ArrayIP9UIElementNS_12STLAllocatorIS2_EEEE", !15, i64 0, !15, i64 8, !6, i64 16}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSN9UIElement8PositionE", !17, i64 0, !18, i64 4}
!17 = !{!"_ZTSN9UIElement10EAlignmentE", !7, i64 0}
!18 = !{!"_ZTSN9UIElement4SizeE", !13, i64 0, !19, i64 4}
!19 = !{!"_ZTSN9UIElement6EUnitsE", !7, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{!"_ZTSN3JPH5ArrayIP11UIAnimationNS_12STLAllocatorIS2_EEEE", !15, i64 0, !15, i64 8, !6, i64 16}
!22 = !{!"_ZTSN3JPH8RefConstI4FontEE", !6, i64 0}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !24, i64 0, !15, i64 8, !7, i64 16}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!25 = !{!"_ZTSN3JPH5ColorE", !7, i64 0}
!26 = !{!13, !13, i64 0}
!27 = !{!10, !17, i64 208}
!28 = !{!10, !13, i64 192}
!29 = !{i64 0, i64 4, !30}
!30 = !{!7, !7, i64 0}
!31 = !{!10, !13, i64 196}
!32 = !{!33, !34, i64 0}
!33 = !{!"_ZTSN3JPH6Float2E", !34, i64 0, !34, i64 4}
!34 = !{!"float", !7, i64 0}
!35 = !{i64 2157841467}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_string_view" = type { i64, ptr }
%"class.JPH::Array.13" = type { i64, i64, ptr }

@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [86 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK12UIStaticText10DrawCustomEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(213) %0, i32 %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::__cxx11::basic_string", align 8
  %4 = alloca %"class.std::basic_string_view", align 8
  %5 = alloca %"class.JPH::Array.13", align 8
  %6 = alloca %"class.std::basic_string_view", align 8
  %7 = alloca %"class.std::basic_string_view", align 8
  %8 = alloca %"class.std::basic_string_view", align 8
  %9 = alloca %"class.std::basic_string_view", align 8
  %10 = alloca %"class.JPH::Array.13", align 8
  %11 = alloca %"class.std::basic_string_view", align 8
  %12 = alloca %"class.std::basic_string_view", align 8
  %13 = alloca %"class.std::basic_string_view", align 8
  %14 = alloca %"class.std::basic_string_view", align 8
  %15 = getelementptr inbounds i8, ptr %0, i64 144
  %16 = tail call noundef zeroext i1 @_ZNK3JPH8RefConstI4FontEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef null)
  br i1 %16, label %17, label %159

17:                                               ; preds = %2
  %18 = getelementptr inbounds i8, ptr %0, i64 152
  %19 = tail call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br i1 %19, label %159, label %20

20:                                               ; preds = %17
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #7
  call void @_ZNK12UIStaticText14GetWrappedTextB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %3, ptr noundef nonnull align 8 dereferenceable(213) %0)
  %21 = invoke noundef i32 @_ZNK9UIElement4GetYEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
          to label %22 unwind label %41

22:                                               ; preds = %20
  %23 = getelementptr inbounds i8, ptr %0, i64 200
  %24 = load i32, ptr %23, align 8, !tbaa !5
  %25 = add nsw i32 %24, %21
  %26 = getelementptr inbounds i8, ptr %0, i64 208
  %27 = load i32, ptr %26, align 8, !tbaa !25
  switch i32 %27, label %103 [
    i32 0, label %28
    i32 2, label %45
    i32 3, label %107
  ]

28:                                               ; preds = %22
  %29 = call noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
  %30 = invoke noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
          to label %31 unwind label %41

31:                                               ; preds = %28
  %32 = getelementptr inbounds i8, ptr %0, i64 192
  %33 = load i32, ptr %32, align 8, !tbaa !26
  %34 = add nsw i32 %33, %30
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #7
  %35 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %36 = extractvalue { i64, ptr } %35, 0
  store i64 %36, ptr %4, align 8
  %37 = getelementptr inbounds i8, ptr %4, i64 8
  %38 = extractvalue { i64, ptr } %35, 1
  store ptr %38, ptr %37, align 8
  %39 = call noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  invoke void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248) %29, i32 noundef %34, i32 noundef %25, ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef %39, i32 %1)
          to label %40 unwind label %43

40:                                               ; preds = %31
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #7
  br label %157

41:                                               ; preds = %103, %28, %20
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %158

43:                                               ; preds = %31
  %44 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #7
  br label %158

45:                                               ; preds = %22
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #7
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #7
  %46 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %47 = extractvalue { i64, ptr } %46, 0
  store i64 %47, ptr %6, align 8
  %48 = getelementptr inbounds i8, ptr %6, i64 8
  %49 = extractvalue { i64, ptr } %46, 1
  store ptr %49, ptr %48, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef @.str.1) #7
  invoke void @_ZN3JPH14StringToVectorERKSt17basic_string_viewIcSt11char_traitsIcEERNS_5ArrayINSt7__cxx1112basic_stringIcS2_NS_12STLAllocatorIcEEEENS9_ISB_EEEES5_b(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(16) %7, i1 noundef zeroext true)
          to label %50 unwind label %62

50:                                               ; preds = %45
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  %51 = invoke noundef i32 @_ZNK9UIElement8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
          to label %52 unwind label %64

52:                                               ; preds = %50
  %53 = getelementptr inbounds i8, ptr %0, i64 192
  %54 = load i32, ptr %53, align 8, !tbaa !26
  %55 = getelementptr inbounds i8, ptr %0, i64 196
  %56 = load i32, ptr %55, align 4, !tbaa !27
  %57 = call noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %58 = call noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %.not4964 = icmp eq ptr %57, %58
  br i1 %.not4964, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %52
  %59 = getelementptr inbounds i8, ptr %8, i64 8
  %60 = add i32 %54, %56
  %61 = getelementptr inbounds i8, ptr %9, i64 8
  br label %66

._crit_edge:                                      ; preds = %91, %52
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  br label %157

62:                                               ; preds = %45
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  br label %102

64:                                               ; preds = %50
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %102

66:                                               ; preds = %.lr.ph, %91
  %.066 = phi i32 [ %25, %.lr.ph ], [ %94, %91 ]
  %.04365 = phi ptr [ %57, %.lr.ph ], [ %95, %91 ]
  %67 = call noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #7
  %68 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %.04365) #7
  %69 = extractvalue { i64, ptr } %68, 0
  store i64 %69, ptr %8, align 8
  %70 = extractvalue { i64, ptr } %68, 1
  store ptr %70, ptr %59, align 8
  %71 = invoke <2 x float> @_ZNK4Font11MeasureTextERKSt17basic_string_viewIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(51376) %67, ptr noundef nonnull align 8 dereferenceable(16) %8)
          to label %72 unwind label %96

72:                                               ; preds = %66
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  %73 = call noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %74 = call noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %73)
  %75 = call noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
  %76 = invoke noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
          to label %77 unwind label %98

77:                                               ; preds = %72
  %.sroa.011.0.vec.extract = extractelement <2 x float> %71, i64 0
  %78 = sitofp i32 %74 to float
  %79 = fmul float %.sroa.011.0.vec.extract, %78
  %80 = fptosi float %79 to i32
  %81 = add i32 %60, %80
  %82 = sub i32 %51, %81
  %83 = sdiv i32 %82, 2
  %84 = add nsw i32 %83, %76
  %85 = load i32, ptr %53, align 8, !tbaa !26
  %86 = add nsw i32 %84, %85
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #7
  %87 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %.04365) #7
  %88 = extractvalue { i64, ptr } %87, 0
  store i64 %88, ptr %9, align 8
  %89 = extractvalue { i64, ptr } %87, 1
  store ptr %89, ptr %61, align 8
  %90 = call noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  invoke void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248) %75, i32 noundef %86, i32 noundef %.066, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef %90, i32 %1)
          to label %91 unwind label %100

91:                                               ; preds = %77
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #7
  %92 = call noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %93 = call noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %92)
  %94 = add nsw i32 %93, %.066
  %95 = getelementptr inbounds i8, ptr %.04365, i64 32
  %.not49 = icmp eq ptr %95, %58
  br i1 %.not49, label %._crit_edge, label %66

96:                                               ; preds = %66
  %97 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  br label %102

98:                                               ; preds = %72
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %102

100:                                              ; preds = %77
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #7
  br label %102

102:                                              ; preds = %64, %98, %100, %96, %62
  %.pn50.pn.pn.pn = phi { ptr, i32 } [ %63, %62 ], [ %65, %64 ], [ %97, %96 ], [ %101, %100 ], [ %99, %98 ]
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  br label %158

103:                                              ; preds = %22
  %104 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, i32 noundef 152)
          to label %105 unwind label %41

105:                                              ; preds = %103
  br i1 %104, label %106, label %107

106:                                              ; preds = %105
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !28
  br label %107

107:                                              ; preds = %22, %106, %105
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #7
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  %108 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %109 = extractvalue { i64, ptr } %108, 0
  store i64 %109, ptr %11, align 8
  %110 = getelementptr inbounds i8, ptr %11, i64 8
  %111 = extractvalue { i64, ptr } %108, 1
  store ptr %111, ptr %110, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #7
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef @.str.1) #7
  invoke void @_ZN3JPH14StringToVectorERKSt17basic_string_viewIcSt11char_traitsIcEERNS_5ArrayINSt7__cxx1112basic_stringIcS2_NS_12STLAllocatorIcEEEENS9_ISB_EEEES5_b(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(16) %12, i1 noundef zeroext true)
          to label %112 unwind label %118

112:                                              ; preds = %107
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  %113 = call noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %114 = call noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %.not67 = icmp eq ptr %113, %114
  br i1 %.not67, label %._crit_edge72, label %.lr.ph71

.lr.ph71:                                         ; preds = %112
  %115 = getelementptr inbounds i8, ptr %13, i64 8
  %116 = getelementptr inbounds i8, ptr %0, i64 196
  %117 = getelementptr inbounds i8, ptr %14, i64 8
  br label %120

._crit_edge72:                                    ; preds = %145, %112
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  br label %157

118:                                              ; preds = %107
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  br label %156

120:                                              ; preds = %.lr.ph71, %145
  %.169 = phi i32 [ %25, %.lr.ph71 ], [ %148, %145 ]
  %.04468 = phi ptr [ %113, %.lr.ph71 ], [ %149, %145 ]
  %121 = call noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #7
  %122 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %.04468) #7
  %123 = extractvalue { i64, ptr } %122, 0
  store i64 %123, ptr %13, align 8
  %124 = extractvalue { i64, ptr } %122, 1
  store ptr %124, ptr %115, align 8
  %125 = invoke <2 x float> @_ZNK4Font11MeasureTextERKSt17basic_string_viewIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(51376) %121, ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %126 unwind label %150

126:                                              ; preds = %120
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #7
  %.sroa.01.0.vec.extract = extractelement <2 x float> %125, i64 0
  %127 = call noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %128 = call noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %127)
  %129 = sitofp i32 %128 to float
  %130 = fmul float %.sroa.01.0.vec.extract, %129
  %131 = fptosi float %130 to i32
  %132 = call noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
  %133 = invoke noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
          to label %134 unwind label %152

134:                                              ; preds = %126
  %135 = invoke noundef i32 @_ZNK9UIElement8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(144) %0)
          to label %136 unwind label %152

136:                                              ; preds = %134
  %137 = load i32, ptr %116, align 4, !tbaa !27
  %138 = add i32 %133, %135
  %139 = add i32 %137, %131
  %140 = sub i32 %138, %139
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #7
  %141 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %.04468) #7
  %142 = extractvalue { i64, ptr } %141, 0
  store i64 %142, ptr %14, align 8
  %143 = extractvalue { i64, ptr } %141, 1
  store ptr %143, ptr %117, align 8
  %144 = call noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  invoke void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248) %132, i32 noundef %140, i32 noundef %.169, ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef %144, i32 %1)
          to label %145 unwind label %154

145:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  %146 = call noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %147 = call noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376) %146)
  %148 = add nsw i32 %147, %.169
  %149 = getelementptr inbounds i8, ptr %.04468, i64 32
  %.not = icmp eq ptr %149, %114
  br i1 %.not, label %._crit_edge72, label %120

150:                                              ; preds = %120
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #7
  br label %156

152:                                              ; preds = %134, %126
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %156

154:                                              ; preds = %136
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  br label %156

156:                                              ; preds = %150, %154, %152, %118
  %.pn.pn.pn = phi { ptr, i32 } [ %119, %118 ], [ %151, %150 ], [ %155, %154 ], [ %153, %152 ]
  call void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  br label %158

157:                                              ; preds = %._crit_edge, %._crit_edge72, %40
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #7
  br label %159

158:                                              ; preds = %156, %102, %43, %41
  %.pn55 = phi { ptr, i32 } [ %44, %43 ], [ %42, %41 ], [ %.pn50.pn.pn.pn, %102 ], [ %.pn.pn.pn, %156 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn55

159:                                              ; preds = %157, %17, %2
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH8RefConstI4FontEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstI4FontEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

declare <2 x float> @_ZNK4Font11MeasureTextERKSt17basic_string_viewIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(51376), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK12UIStaticText14GetWrappedTextB5cxx11Ev(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(213)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Font13GetCharHeightEv(ptr noundef nonnull align 8 dereferenceable(51376)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9UIElement8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9UIElement4GetYEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9UIElement10GetManagerEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #4 align 2

declare void @_ZN9UIManager8DrawTextEiiRKSt17basic_string_viewIcSt11char_traitsIcEEPK4FontN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(248), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9UIElement4GetXEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstI4FontEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

declare void @_ZN3JPH14StringToVectorERKSt17basic_string_viewIcSt11char_traitsIcEERNS_5ArrayINSt7__cxx1112basic_stringIcS2_NS_12STLAllocatorIcEEEENS9_ISB_EEEES5_b(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEENS5_IS7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 #4 = { mustprogress 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 #5 = { mustprogress 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 #6 = { inlinehint mustprogress 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 #7 = { 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, !9, i64 200}
!6 = !{!"_ZTS12UIStaticText", !7, i64 0, !21, i64 144, !22, i64 152, !24, i64 184, !24, i64 188, !9, i64 192, !9, i64 196, !9, i64 200, !9, i64 204, !16, i64 208, !19, i64 212}
!7 = !{!"_ZTS9UIElement", !8, i64 0, !9, i64 8, !12, i64 16, !13, i64 24, !15, i64 48, !15, i64 60, !17, i64 72, !17, i64 80, !17, i64 88, !17, i64 96, !19, i64 104, !19, i64 105, !19, i64 106, !19, i64 107, !19, i64 108, !19, i64 109, !19, i64 110, !20, i64 112, !12, i64 136}
!8 = !{!"_ZTS15UIEventListener"}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"any pointer", !10, i64 0}
!13 = !{!"_ZTSN3JPH5ArrayIP9UIElementNS_12STLAllocatorIS2_EEEE", !14, i64 0, !14, i64 8, !12, i64 16}
!14 = !{!"long", !10, i64 0}
!15 = !{!"_ZTSN9UIElement8PositionE", !16, i64 0, !17, i64 4}
!16 = !{!"_ZTSN9UIElement10EAlignmentE", !10, i64 0}
!17 = !{!"_ZTSN9UIElement4SizeE", !9, i64 0, !18, i64 4}
!18 = !{!"_ZTSN9UIElement6EUnitsE", !10, i64 0}
!19 = !{!"bool", !10, i64 0}
!20 = !{!"_ZTSN3JPH5ArrayIP11UIAnimationNS_12STLAllocatorIS2_EEEE", !14, i64 0, !14, i64 8, !12, i64 16}
!21 = !{!"_ZTSN3JPH8RefConstI4FontEE", !12, i64 0}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !23, i64 0, !14, i64 8, !10, i64 16}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !12, i64 0}
!24 = !{!"_ZTSN3JPH5ColorE", !10, i64 0}
!25 = !{!6, !16, i64 208}
!26 = !{!6, !9, i64 192}
!27 = !{!6, !9, i64 196}
!28 = !{i64 2157841467}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass