; LLVM IR from jrouwe/JoltPhysics :: TestFramework/Renderer/Font.ll (ZN4Font6CreateEPKci)

; 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.6 }
%union.anon.6 = type { i32 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"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.JPH::STLAllocator" = type { i8 }
%struct.stbtt_fontinfo = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf }
%struct.stbtt__buf = type { ptr, i32, i32 }
%"class.JPH::Ref.4" = type { ptr }
%"class.JPH::ScopeExit" = type <{ %class.anon, i8, [7 x i8] }>
%class.anon = type { ptr }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Ref.7" = type { ptr }
%"class.JPH::Ref.10" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.JPH::Ref" = type { ptr }
%class.Font = type { %"class.JPH::RefTarget", %"class.std::__cxx11::basic_string", i32, i32, i32, [224 x i16], [224 x i16], [224 x i8], [224 x [224 x i8]], ptr, %"class.JPH::Ref", %"class.std::unique_ptr" }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }

@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZN3JPH5Color6sBlackE = external global %"class.JPH::Color", align 4
@.str.9 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1
@__const._ZN4Font6CreateEPKci.vertex_desc = external hidden unnamed_addr constant [3 x i32], align 4
@.str.13 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [16 x i8], align 1
@_ZN3JPH5TraceE = external global ptr, align 8
@.str.15 = external hidden unnamed_addr constant [52 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: mustprogress uwtable
declare dso_local i32 @stbtt_GetCodepointKernAdvance(ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @stbtt_GetCodepointHMetrics(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @stbtt_GetFontVMetrics(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local float @stbtt_ScaleForPixelHeight(ptr noundef, float noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local ptr @stbtt_GetCodepointBitmap(ptr noundef, float noundef, float noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

; 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) #2

; Function Attrs: mustprogress uwtable
declare dso_local i32 @stbtt_InitFont(ptr noundef, ptr noundef, i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local i32 @stbtt_GetFontOffsetForIndex(ptr noundef, i32 noundef) #1

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Font6CreateEPKci(ptr noundef nonnull align 8 dereferenceable(51376) %0, ptr noundef %1, i32 noundef %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.JPH::Array", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.JPH::STLAllocator", align 1
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca %struct.stbtt_fontinfo, align 8
  %18 = alloca i32, align 4
  %19 = alloca float, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca %"class.JPH::Ref.4", align 8
  %23 = alloca %"class.JPH::Color", align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca %"class.JPH::ScopeExit", align 8
  %34 = alloca %class.anon, align 8
  %35 = alloca %"class.JPH::Color", align 4
  %36 = alloca %"struct.JPH::AssertLastParam", align 1
  %37 = alloca %"struct.JPH::AssertLastParam", align 1
  %38 = alloca %"struct.JPH::AssertLastParam", align 1
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca [3 x i32], align 4
  %49 = alloca %"class.JPH::Ref.7", align 8
  %50 = alloca %"class.JPH::Ref.10", align 8
  %51 = alloca %"class.std::unique_ptr", align 8
  %52 = alloca %"class.JPH::Ref", align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  %53 = load ptr, ptr %5, align 8
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 1
  %56 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef %54)
  %57 = load i32, ptr %7, align 4, !tbaa !9
  %58 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 2
  store i32 %57, ptr %58, align 8, !tbaa !11
  %59 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  store i32 64, ptr %59, align 4, !tbaa !26
  %60 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  store i32 64, ptr %60, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  store i32 2, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  store i32 2, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %14)
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZStplIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEENSt7__cxx1112basic_stringIT_T0_T1_EEOSA_PKS7_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef %61)
          to label %62 unwind label %76

62:                                               ; preds = %3
  invoke void @_ZStplIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEENSt7__cxx1112basic_stringIT_T0_T1_EEOSA_PKS7_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef @.str.8)
          to label %63 unwind label %80

63:                                               ; preds = %62
  %64 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %11) #11
  invoke void @_Z8ReadDataPKc(ptr dead_on_unwind writable sret(%"class.JPH::Array") align 8 %10, ptr noundef %64)
          to label %65 unwind label %84

65:                                               ; preds = %63
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #11
  call void @llvm.lifetime.start.p0(i64 160, ptr %17) #11
  %66 = invoke noundef ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %67 unwind label %90

67:                                               ; preds = %65
  %68 = invoke noundef ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %69 unwind label %90

69:                                               ; preds = %67
  %70 = invoke i32 @stbtt_GetFontOffsetForIndex(ptr noundef %68, i32 noundef 0)
          to label %71 unwind label %90

71:                                               ; preds = %69
  %72 = invoke i32 @stbtt_InitFont(ptr noundef %17, ptr noundef %66, i32 noundef %70)
          to label %73 unwind label %90

73:                                               ; preds = %71
  %74 = icmp ne i32 %72, 0
  br i1 %74, label %94, label %75

75:                                               ; preds = %73
  store i1 false, ptr %4, align 1
  store i32 1, ptr %18, align 4
  br label %488

76:                                               ; preds = %3
  %77 = landingpad { ptr, i32 }
          cleanup
  %78 = extractvalue { ptr, i32 } %77, 0
  store ptr %78, ptr %15, align 8
  %79 = extractvalue { ptr, i32 } %77, 1
  store i32 %79, ptr %16, align 4
  br label %89

80:                                               ; preds = %62
  %81 = landingpad { ptr, i32 }
          cleanup
  %82 = extractvalue { ptr, i32 } %81, 0
  store ptr %82, ptr %15, align 8
  %83 = extractvalue { ptr, i32 } %81, 1
  store i32 %83, ptr %16, align 4
  br label %88

84:                                               ; preds = %63
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %15, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #11
  br label %88

88:                                               ; preds = %84, %80
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #11
  br label %89

89:                                               ; preds = %88, %76
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #11
  br label %491

90:                                               ; preds = %71, %69, %67, %65
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %15, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %16, align 4
  br label %490

94:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #11
  %95 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 2
  %96 = load i32, ptr %95, align 8, !tbaa !11
  %97 = sitofp i32 %96 to float
  %98 = invoke float @stbtt_ScaleForPixelHeight(ptr noundef %17, float noundef %97)
          to label %99 unwind label %128

99:                                               ; preds = %94
  store float %98, ptr %19, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  invoke void @stbtt_GetFontVMetrics(ptr noundef %17, ptr noundef %20, ptr noundef null, ptr noundef null)
          to label %100 unwind label %132

100:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  %101 = load i32, ptr %20, align 4, !tbaa !9
  %102 = sitofp i32 %101 to float
  %103 = load float, ptr %19, align 4, !tbaa !28
  %104 = fmul float %102, %103
  %105 = fptosi float %104 to i32
  store i32 %105, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  %106 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 64) #12
          to label %107 unwind label %136

107:                                              ; preds = %100
  %108 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  %109 = load i32, ptr %108, align 4, !tbaa !26
  %110 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  %111 = load i32, ptr %110, align 8, !tbaa !27
  invoke void @_ZN15SoftwareSurfaceC1Eii14ESurfaceFormati(ptr noundef nonnull align 8 dereferenceable(64) %106, i32 noundef %109, i32 noundef %111, i32 noundef 1, i32 noundef 0)
          to label %112 unwind label %140

112:                                              ; preds = %107
  invoke void @_ZN3JPH3RefI15SoftwareSurfaceEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef %106)
          to label %113 unwind label %136

113:                                              ; preds = %112
  %114 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %115 unwind label %144

115:                                              ; preds = %113
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 @_ZN3JPH5Color6sBlackE, i64 4, i1 false), !tbaa.struct !30
  %116 = getelementptr inbounds %"class.JPH::Color", ptr %23, i32 0, i32 0
  %117 = getelementptr inbounds %union.anon.6, ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 4
  invoke void @_ZN7Surface5ClearEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(48) %114, i32 %118)
          to label %119 unwind label %144

119:                                              ; preds = %115
  %120 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %121 unwind label %144

121:                                              ; preds = %119
  invoke void @_ZNK7Surface4LockE16ESurfaceLockMode(ptr noundef nonnull align 8 dereferenceable(48) %120, i32 noundef 2)
          to label %122 unwind label %144

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %480, %122
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store i32 0, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  store i32 33, ptr %26, align 4, !tbaa !9
  br label %124

124:                                              ; preds = %340, %123
  %125 = load i32, ptr %26, align 4, !tbaa !9
  %126 = icmp slt i32 %125, 256
  br i1 %126, label %148, label %127

127:                                              ; preds = %124
  store i32 3, ptr %18, align 4
  br label %346

128:                                              ; preds = %94
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %15, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %16, align 4
  br label %487

132:                                              ; preds = %99
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %15, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %16, align 4
  br label %486

136:                                              ; preds = %112, %100
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %15, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %16, align 4
  br label %485

140:                                              ; preds = %107
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %15, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %106, i64 noundef 64) #13
  br label %485

144:                                              ; preds = %121, %119, %115, %113
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %15, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %16, align 4
  br label %484

148:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #11
  %149 = load i32, ptr %26, align 4, !tbaa !9
  %150 = sub nsw i32 %149, 32
  store i32 %150, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #11
  %151 = load float, ptr %19, align 4, !tbaa !28
  %152 = load i32, ptr %26, align 4, !tbaa !9
  %153 = invoke ptr @stbtt_GetCodepointBitmap(ptr noundef %17, float noundef 0.000000e+00, float noundef %151, i32 noundef %152, ptr noundef %28, ptr noundef %29, ptr noundef %30, ptr noundef %31)
          to label %154 unwind label %195

154:                                              ; preds = %148
  store ptr %153, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #11
  %155 = getelementptr inbounds %class.anon, ptr %34, i32 0, i32 0
  %156 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %156, ptr %155, align 8, !tbaa !32
  invoke void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0EC2EOS4_"(ptr noundef nonnull align 8 dereferenceable(9) %33, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %157 unwind label %199

157:                                              ; preds = %154
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  %158 = load i32, ptr %21, align 4, !tbaa !9
  %159 = load i32, ptr %31, align 4, !tbaa !9
  %160 = add nsw i32 %158, %159
  store i32 %160, ptr %31, align 4, !tbaa !9
  %161 = load i32, ptr %24, align 4, !tbaa !9
  %162 = load i32, ptr %30, align 4, !tbaa !9
  %163 = add nsw i32 %161, %162
  %164 = load i32, ptr %28, align 4, !tbaa !9
  %165 = add nsw i32 %163, %164
  %166 = add nsw i32 %165, 2
  %167 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  %168 = load i32, ptr %167, align 4, !tbaa !26
  %169 = icmp sgt i32 %166, %168
  br i1 %169, label %170, label %238

170:                                              ; preds = %157
  store i32 0, ptr %24, align 4, !tbaa !9
  %171 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 2
  %172 = load i32, ptr %171, align 8, !tbaa !11
  %173 = add nsw i32 %172, 2
  %174 = load i32, ptr %25, align 4, !tbaa !9
  %175 = add nsw i32 %174, %173
  store i32 %175, ptr %25, align 4, !tbaa !9
  %176 = load i32, ptr %25, align 4, !tbaa !9
  %177 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 2
  %178 = load i32, ptr %177, align 8, !tbaa !11
  %179 = add nsw i32 %176, %178
  %180 = add nsw i32 %179, 2
  %181 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  %182 = load i32, ptr %181, align 8, !tbaa !27
  %183 = icmp sgt i32 %180, %182
  br i1 %183, label %184, label %237

184:                                              ; preds = %170
  %185 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  %186 = load i32, ptr %185, align 4, !tbaa !26
  %187 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  %188 = load i32, ptr %187, align 8, !tbaa !27
  %189 = mul nsw i32 2, %188
  %190 = icmp slt i32 %186, %189
  br i1 %190, label %191, label %203

191:                                              ; preds = %184
  %192 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  %193 = load i32, ptr %192, align 4, !tbaa !26
  %194 = shl i32 %193, 1
  store i32 %194, ptr %192, align 4, !tbaa !26
  br label %207

195:                                              ; preds = %148
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %15, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %16, align 4
  br label %345

199:                                              ; preds = %154
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %15, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  br label %344

203:                                              ; preds = %184
  %204 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  %205 = load i32, ptr %204, align 8, !tbaa !27
  %206 = shl i32 %205, 1
  store i32 %206, ptr %204, align 8, !tbaa !27
  br label %207

207:                                              ; preds = %203, %191
  %208 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %209 unwind label %229

209:                                              ; preds = %207
  invoke void @_ZNK7Surface6UnLockEv(ptr noundef nonnull align 8 dereferenceable(48) %208)
          to label %210 unwind label %229

210:                                              ; preds = %209
  %211 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 64) #12
          to label %212 unwind label %229

212:                                              ; preds = %210
  %213 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  %214 = load i32, ptr %213, align 4, !tbaa !26
  %215 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  %216 = load i32, ptr %215, align 8, !tbaa !27
  invoke void @_ZN15SoftwareSurfaceC1Eii14ESurfaceFormati(ptr noundef nonnull align 8 dereferenceable(64) %211, i32 noundef %214, i32 noundef %216, i32 noundef 1, i32 noundef 0)
          to label %217 unwind label %233

217:                                              ; preds = %212
  %218 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15SoftwareSurfaceEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef %211)
          to label %219 unwind label %229

219:                                              ; preds = %217
  %220 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %221 unwind label %229

221:                                              ; preds = %219
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 @_ZN3JPH5Color6sBlackE, i64 4, i1 false), !tbaa.struct !30
  %222 = getelementptr inbounds %"class.JPH::Color", ptr %35, i32 0, i32 0
  %223 = getelementptr inbounds %union.anon.6, ptr %222, i32 0, i32 0
  %224 = load i32, ptr %223, align 4
  invoke void @_ZN7Surface5ClearEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(48) %220, i32 %224)
          to label %225 unwind label %229

225:                                              ; preds = %221
  %226 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %227 unwind label %229

227:                                              ; preds = %225
  invoke void @_ZNK7Surface4LockE16ESurfaceLockMode(ptr noundef nonnull align 8 dereferenceable(48) %226, i32 noundef 2)
          to label %228 unwind label %229

228:                                              ; preds = %227
  store i32 2, ptr %18, align 4
  br label %337

229:                                              ; preds = %268, %258, %245, %227, %225, %221, %219, %217, %210, %209, %207
  %230 = landingpad { ptr, i32 }
          cleanup
  %231 = extractvalue { ptr, i32 } %230, 0
  store ptr %231, ptr %15, align 8
  %232 = extractvalue { ptr, i32 } %230, 1
  store i32 %232, ptr %16, align 4
  br label %343

233:                                              ; preds = %212
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %15, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %211, i64 noundef 64) #13
  br label %343

237:                                              ; preds = %170
  br label %238

238:                                              ; preds = %237, %157
  br label %239

239:                                              ; preds = %238
  %240 = load i32, ptr %24, align 4, !tbaa !9
  %241 = icmp sge i32 %240, 0
  br i1 %241, label %242, label %245

242:                                              ; preds = %239
  %243 = load i32, ptr %24, align 4, !tbaa !9
  %244 = icmp sle i32 %243, 65535
  br i1 %244, label %249, label %245

245:                                              ; preds = %242, %239
  %246 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 104)
          to label %247 unwind label %229

247:                                              ; preds = %245
  br i1 %246, label %248, label %249

248:                                              ; preds = %247
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !34
  br label %249

249:                                              ; preds = %248, %247, %242
  br label %250

250:                                              ; preds = %249
  br label %251

251:                                              ; preds = %250
  br label %252

252:                                              ; preds = %251
  %253 = load i32, ptr %25, align 4, !tbaa !9
  %254 = icmp sge i32 %253, 0
  br i1 %254, label %255, label %258

255:                                              ; preds = %252
  %256 = load i32, ptr %25, align 4, !tbaa !9
  %257 = icmp sle i32 %256, 65535
  br i1 %257, label %262, label %258

258:                                              ; preds = %255, %252
  %259 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.11, ptr noundef @.str.10, i32 noundef 105)
          to label %260 unwind label %229

260:                                              ; preds = %258
  br i1 %259, label %261, label %262

261:                                              ; preds = %260
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !35
  br label %262

262:                                              ; preds = %261, %260, %255
  br label %263

263:                                              ; preds = %262
  br label %264

264:                                              ; preds = %263
  br label %265

265:                                              ; preds = %264
  %266 = load i32, ptr %28, align 4, !tbaa !9
  %267 = icmp sle i32 %266, 255
  br i1 %267, label %272, label %268

268:                                              ; preds = %265
  %269 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.12, ptr noundef @.str.10, i32 noundef 106)
          to label %270 unwind label %229

270:                                              ; preds = %268
  br i1 %269, label %271, label %272

271:                                              ; preds = %270
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !36
  br label %272

272:                                              ; preds = %271, %270, %265
  br label %273

273:                                              ; preds = %272
  br label %274

274:                                              ; preds = %273
  %275 = load i32, ptr %24, align 4, !tbaa !9
  %276 = trunc i32 %275 to i16
  %277 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 5
  %278 = load i32, ptr %27, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds [224 x i16], ptr %277, i64 0, i64 %279
  store i16 %276, ptr %280, align 2, !tbaa !37
  %281 = load i32, ptr %25, align 4, !tbaa !9
  %282 = trunc i32 %281 to i16
  %283 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 6
  %284 = load i32, ptr %27, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds [224 x i16], ptr %283, i64 0, i64 %285
  store i16 %282, ptr %286, align 2, !tbaa !37
  %287 = load i32, ptr %28, align 4, !tbaa !9
  %288 = add nsw i32 %287, 1
  %289 = trunc i32 %288 to i8
  %290 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 7
  %291 = load i32, ptr %27, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [224 x i8], ptr %290, i64 0, i64 %292
  store i8 %289, ptr %293, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %294

294:                                              ; preds = %325, %274
  %295 = load i32, ptr %39, align 4, !tbaa !9
  %296 = load i32, ptr %29, align 4, !tbaa !9
  %297 = icmp slt i32 %295, %296
  br i1 %297, label %299, label %298

298:                                              ; preds = %294
  store i32 12, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %332

299:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  %300 = load ptr, ptr %32, align 8, !tbaa !5
  %301 = load i32, ptr %39, align 4, !tbaa !9
  %302 = load i32, ptr %28, align 4, !tbaa !9
  %303 = mul nsw i32 %301, %302
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i8, ptr %300, i64 %304
  store ptr %305, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %306 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %307 unwind label %328

307:                                              ; preds = %299
  %308 = load i32, ptr %25, align 4, !tbaa !9
  %309 = load i32, ptr %31, align 4, !tbaa !9
  %310 = add nsw i32 %308, %309
  %311 = load i32, ptr %39, align 4, !tbaa !9
  %312 = add nsw i32 %310, %311
  %313 = invoke noundef ptr @_ZN7Surface11GetScanLineEi(ptr noundef nonnull align 8 dereferenceable(48) %306, i32 noundef %312)
          to label %314 unwind label %328

314:                                              ; preds = %307
  %315 = load i32, ptr %24, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i8, ptr %313, i64 %316
  %318 = load i32, ptr %30, align 4, !tbaa !9
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds i8, ptr %317, i64 %319
  store ptr %320, ptr %41, align 8, !tbaa !5
  %321 = load ptr, ptr %41, align 8, !tbaa !5
  %322 = load ptr, ptr %40, align 8, !tbaa !5
  %323 = load i32, ptr %28, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %321, ptr align 1 %322, i64 %324, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %325

325:                                              ; preds = %314
  %326 = load i32, ptr %39, align 4, !tbaa !9
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %39, align 4, !tbaa !9
  br label %294, !llvm.loop !39

328:                                              ; preds = %307, %299
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %15, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %343

332:                                              ; preds = %298
  %333 = load i32, ptr %28, align 4, !tbaa !9
  %334 = add nsw i32 %333, 2
  %335 = load i32, ptr %24, align 4, !tbaa !9
  %336 = add nsw i32 %335, %334
  store i32 %336, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %18, align 4
  br label %337

337:                                              ; preds = %332, %228
  call void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9) %33) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #11
  %338 = load i32, ptr %18, align 4
  switch i32 %338, label %346 [
    i32 0, label %339
  ]

339:                                              ; preds = %337
  br label %340

340:                                              ; preds = %339
  %341 = load i32, ptr %26, align 4, !tbaa !9
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %26, align 4, !tbaa !9
  br label %124, !llvm.loop !41

343:                                              ; preds = %328, %233, %229
  call void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9) %33) #11
  br label %344

344:                                              ; preds = %343, %199
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #11
  br label %345

345:                                              ; preds = %344, %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  br label %482

346:                                              ; preds = %337, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  %347 = load i32, ptr %18, align 4
  switch i32 %347, label %480 [
    i32 3, label %348
  ]

348:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %349

349:                                              ; preds = %399, %348
  %350 = load i32, ptr %42, align 4, !tbaa !9
  %351 = icmp slt i32 %350, 224
  br i1 %351, label %353, label %352

352:                                              ; preds = %349
  store i32 15, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  br label %402

353:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #11
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %354

354:                                              ; preds = %386, %353
  %355 = load i32, ptr %43, align 4, !tbaa !9
  %356 = icmp slt i32 %355, 224
  br i1 %356, label %358, label %357

357:                                              ; preds = %354
  store i32 18, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  br label %398

358:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  %359 = load i32, ptr %42, align 4, !tbaa !9
  %360 = add nsw i32 32, %359
  store i32 %360, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #11
  %361 = load i32, ptr %43, align 4, !tbaa !9
  %362 = add nsw i32 32, %361
  store i32 %362, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  %363 = load i32, ptr %44, align 4, !tbaa !9
  invoke void @stbtt_GetCodepointHMetrics(ptr noundef %17, i32 noundef %363, ptr noundef %46, ptr noundef null)
          to label %364 unwind label %389

364:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #11
  %365 = load float, ptr %19, align 4, !tbaa !28
  %366 = load i32, ptr %46, align 4, !tbaa !9
  %367 = load i32, ptr %44, align 4, !tbaa !9
  %368 = load i32, ptr %45, align 4, !tbaa !9
  %369 = invoke i32 @stbtt_GetCodepointKernAdvance(ptr noundef %17, i32 noundef %367, i32 noundef %368)
          to label %370 unwind label %393

370:                                              ; preds = %364
  %371 = add nsw i32 %366, %369
  %372 = sitofp i32 %371 to float
  %373 = fmul float %365, %372
  %374 = fptosi float %373 to i32
  %375 = invoke noundef i32 @_ZN3JPH5ClampIiEET_S1_S1_S1_(i32 noundef %374, i32 noundef 0, i32 noundef 255)
          to label %376 unwind label %393

376:                                              ; preds = %370
  store i32 %375, ptr %47, align 4, !tbaa !9
  %377 = load i32, ptr %47, align 4, !tbaa !9
  %378 = trunc i32 %377 to i8
  %379 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 8
  %380 = load i32, ptr %42, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds [224 x [224 x i8]], ptr %379, i64 0, i64 %381
  %383 = load i32, ptr %43, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds [224 x i8], ptr %382, i64 0, i64 %384
  store i8 %378, ptr %385, align 1, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %386

386:                                              ; preds = %376
  %387 = load i32, ptr %43, align 4, !tbaa !9
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %43, align 4, !tbaa !9
  br label %354, !llvm.loop !42

389:                                              ; preds = %358
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %15, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %16, align 4
  br label %397

393:                                              ; preds = %370, %364
  %394 = landingpad { ptr, i32 }
          cleanup
  %395 = extractvalue { ptr, i32 } %394, 0
  store ptr %395, ptr %15, align 8
  %396 = extractvalue { ptr, i32 } %394, 1
  store i32 %396, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  br label %397

397:                                              ; preds = %393, %389
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  br label %482

398:                                              ; preds = %357
  br label %399

399:                                              ; preds = %398
  %400 = load i32, ptr %42, align 4, !tbaa !9
  %401 = add nsw i32 %400, 1
  store i32 %401, ptr %42, align 4, !tbaa !9
  br label %349, !llvm.loop !43

402:                                              ; preds = %352
  %403 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %404 unwind label %453

404:                                              ; preds = %402
  invoke void @_ZNK7Surface6UnLockEv(ptr noundef nonnull align 8 dereferenceable(48) %403)
          to label %405 unwind label %453

405:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 12, ptr %48) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 4 @__const._ZN4Font6CreateEPKci.vertex_desc, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #11
  %406 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 9
  %407 = load ptr, ptr %406, align 8, !tbaa !44
  %408 = load ptr, ptr %407, align 16, !tbaa !45
  %409 = getelementptr inbounds ptr, ptr %408, i64 9
  %410 = load ptr, ptr %409, align 8
  invoke void %410(ptr dead_on_unwind writable sret(%"class.JPH::Ref.7") align 8 %49, ptr noundef nonnull align 16 dereferenceable(832) %407, ptr noundef @.str.13)
          to label %411 unwind label %457

411:                                              ; preds = %405
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %412 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 9
  %413 = load ptr, ptr %412, align 8, !tbaa !44
  %414 = load ptr, ptr %413, align 16, !tbaa !45
  %415 = getelementptr inbounds ptr, ptr %414, i64 10
  %416 = load ptr, ptr %415, align 8
  invoke void %416(ptr dead_on_unwind writable sret(%"class.JPH::Ref.10") align 8 %50, ptr noundef nonnull align 16 dereferenceable(832) %413, ptr noundef @.str.14)
          to label %417 unwind label %461

417:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  %418 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 9
  %419 = load ptr, ptr %418, align 8, !tbaa !44
  %420 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %421 unwind label %465

421:                                              ; preds = %417
  %422 = getelementptr inbounds [3 x i32], ptr %48, i64 0, i64 0
  %423 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm3EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(12) %48) #11
  %424 = trunc i64 %423 to i32
  %425 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %426 unwind label %465

426:                                              ; preds = %421
  %427 = load ptr, ptr %419, align 16, !tbaa !45
  %428 = getelementptr inbounds ptr, ptr %427, i64 11
  %429 = load ptr, ptr %428, align 8
  invoke void %429(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %51, ptr noundef nonnull align 16 dereferenceable(832) %419, ptr noundef %420, ptr noundef %422, i32 noundef %424, ptr noundef %425, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0)
          to label %430 unwind label %465

430:                                              ; preds = %426
  %431 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 11
  %432 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %431, ptr noundef nonnull align 8 dereferenceable(8) %51) #11
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %51) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  %433 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 9
  %434 = load ptr, ptr %433, align 8, !tbaa !44
  %435 = invoke noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %436 unwind label %469

436:                                              ; preds = %430
  %437 = load ptr, ptr %434, align 16, !tbaa !45
  %438 = getelementptr inbounds ptr, ptr %437, i64 8
  %439 = load ptr, ptr %438, align 8
  invoke void %439(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8 %52, ptr noundef nonnull align 16 dereferenceable(832) %434, ptr noundef %435)
          to label %440 unwind label %469

440:                                              ; preds = %436
  %441 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 10
  %442 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI7TextureEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(8) %441, ptr noundef nonnull align 8 dereferenceable(8) %52) #11
  call void @_ZN3JPH3RefI7TextureED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  %443 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !5
  %444 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 1
  %445 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %444) #11
  %446 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 2
  %447 = load i32, ptr %446, align 8, !tbaa !11
  %448 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 3
  %449 = load i32, ptr %448, align 4, !tbaa !26
  %450 = getelementptr inbounds %class.Font, ptr %53, i32 0, i32 4
  %451 = load i32, ptr %450, align 8, !tbaa !27
  invoke void (ptr, ...) %443(ptr noundef @.str.15, ptr noundef %445, i32 noundef %447, i32 noundef %449, i32 noundef %451)
          to label %452 unwind label %473

452:                                              ; preds = %440
  store i1 true, ptr %4, align 1
  store i32 1, ptr %18, align 4
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #11
  br label %480

453:                                              ; preds = %404, %402
  %454 = landingpad { ptr, i32 }
          cleanup
  %455 = extractvalue { ptr, i32 } %454, 0
  store ptr %455, ptr %15, align 8
  %456 = extractvalue { ptr, i32 } %454, 1
  store i32 %456, ptr %16, align 4
  br label %482

457:                                              ; preds = %405
  %458 = landingpad { ptr, i32 }
          cleanup
  %459 = extractvalue { ptr, i32 } %458, 0
  store ptr %459, ptr %15, align 8
  %460 = extractvalue { ptr, i32 } %458, 1
  store i32 %460, ptr %16, align 4
  br label %479

461:                                              ; preds = %411
  %462 = landingpad { ptr, i32 }
          cleanup
  %463 = extractvalue { ptr, i32 } %462, 0
  store ptr %463, ptr %15, align 8
  %464 = extractvalue { ptr, i32 } %462, 1
  store i32 %464, ptr %16, align 4
  br label %478

465:                                              ; preds = %426, %421, %417
  %466 = landingpad { ptr, i32 }
          cleanup
  %467 = extractvalue { ptr, i32 } %466, 0
  store ptr %467, ptr %15, align 8
  %468 = extractvalue { ptr, i32 } %466, 1
  store i32 %468, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %477

469:                                              ; preds = %436, %430
  %470 = landingpad { ptr, i32 }
          cleanup
  %471 = extractvalue { ptr, i32 } %470, 0
  store ptr %471, ptr %15, align 8
  %472 = extractvalue { ptr, i32 } %470, 1
  store i32 %472, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  br label %477

473:                                              ; preds = %440
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %15, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %16, align 4
  br label %477

477:                                              ; preds = %473, %469, %465
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #11
  br label %478

478:                                              ; preds = %477, %461
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #11
  br label %479

479:                                              ; preds = %478, %457
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #11
  br label %482

480:                                              ; preds = %452, %346
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  %481 = load i32, ptr %18, align 4
  switch i32 %481, label %483 [
    i32 2, label %123
  ]

482:                                              ; preds = %479, %453, %397, %345
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  br label %484

483:                                              ; preds = %480
  call void @_ZN3JPH3RefI15SoftwareSurfaceED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  br label %488

484:                                              ; preds = %482, %144
  call void @_ZN3JPH3RefI15SoftwareSurfaceED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  br label %485

485:                                              ; preds = %484, %140, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  br label %486

486:                                              ; preds = %485, %132
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  br label %487

487:                                              ; preds = %486, %128
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  br label %490

488:                                              ; preds = %483, %75
  call void @llvm.lifetime.end.p0(i64 160, ptr %17) #11
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  %489 = load i1, ptr %4, align 1
  ret i1 %489

490:                                              ; preds = %487, %90
  call void @llvm.lifetime.end.p0(i64 160, ptr %17) #11
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  br label %491

491:                                              ; preds = %490, %89
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  br label %492

492:                                              ; preds = %491
  %493 = load ptr, ptr %15, align 8
  %494 = load i32, ptr %16, align 4
  %495 = insertvalue { ptr, i32 } poison, ptr %493, 0
  %496 = insertvalue { ptr, i32 } %495, i32 %494, 1
  resume { ptr, i32 } %496
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1 align 2

declare void @_Z8ReadDataPKc(ptr dead_on_unwind writable sret(%"class.JPH::Array") align 8, ptr noundef) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #7

declare void @_ZN15SoftwareSurfaceC1Eii14ESurfaceFormati(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #8

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

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

declare void @_ZN7Surface5ClearEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(48), i32) #4

declare void @_ZNK7Surface4LockE16ESurfaceLockMode(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef) #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0EC2EOS4_"(ptr noundef nonnull align 8 dereferenceable(9), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #9 align 2

declare void @_ZNK7Surface6UnLockEv(ptr noundef nonnull align 8 dereferenceable(48)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15SoftwareSurfaceEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN7Surface11GetScanLineEi(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef) #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9)) unnamed_addr #9 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef i32 @_ZN3JPH5ClampIiEET_S1_S1_S1_(i32 noundef, i32 noundef, i32 noundef) #10

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm3EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(12)) #3

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 = { 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 #6 = { 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 #7 = { nobuiltin allocsize(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 = { nobuiltin nounwind "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 #9 = { alwaysinline 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 #10 = { alwaysinline 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 #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 40}
!12 = !{!"_ZTS4Font", !13, i64 0, !16, i64 8, !10, i64 40, !10, i64 44, !10, i64 48, !7, i64 52, !7, i64 500, !7, i64 948, !7, i64 1172, !6, i64 51352, !19, i64 51360, !20, i64 51368}
!13 = !{!"_ZTSN3JPH9RefTargetI4FontEE", !14, i64 0}
!14 = !{!"_ZTSSt6atomicIjE", !15, i64 0}
!15 = !{!"_ZTSSt13__atomic_baseIjE", !10, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTSN3JPH3RefI7TextureEE", !6, i64 0}
!20 = !{!"_ZTSSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EE", !21, i64 0}
!21 = !{!"_ZTSSt15__uniq_ptr_dataI13PipelineStateSt14default_deleteIS0_ELb1ELb1EE", !22, i64 0}
!22 = !{!"_ZTSSt15__uniq_ptr_implI13PipelineStateSt14default_deleteIS0_EE", !23, i64 0}
!23 = !{!"_ZTSSt5tupleIJP13PipelineStateSt14default_deleteIS0_EEE", !24, i64 0}
!24 = !{!"_ZTSSt11_Tuple_implILm0EJP13PipelineStateSt14default_deleteIS0_EEE", !25, i64 0}
!25 = !{!"_ZTSSt10_Head_baseILm0EP13PipelineStateLb0EE", !6, i64 0}
!26 = !{!12, !10, i64 44}
!27 = !{!12, !10, i64 48}
!28 = !{!29, !29, i64 0}
!29 = !{!"float", !7, i64 0}
!30 = !{i64 0, i64 4, !31}
!31 = !{!7, !7, i64 0}
!32 = !{!33, !6, i64 0}
!33 = !{!"_ZTSZN4Font6CreateEPKciE3$_0", !6, i64 0}
!34 = !{i64 2158435037}
!35 = !{i64 2158435371}
!36 = !{i64 2158435681}
!37 = !{!38, !38, i64 0}
!38 = !{!"short", !7, i64 0}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = distinct !{!42, !40}
!43 = distinct !{!43, !40}
!44 = !{!12, !6, i64 51352}
!45 = !{!46, !46, i64 0}
!46 = !{!"vtable pointer", !8, i64 0}


; 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.JPH::Color" = type { %union.anon.6 }
%union.anon.6 = type { i32 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"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.JPH::STLAllocator" = type { i8 }
%struct.stbtt_fontinfo = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf }
%struct.stbtt__buf = type { ptr, i32, i32 }
%"class.JPH::Ref.4" = type { ptr }
%"class.JPH::ScopeExit" = type <{ %class.anon, i8, [7 x i8] }>
%class.anon = type { ptr }
%"class.JPH::Ref.7" = type { ptr }
%"class.JPH::Ref.10" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.JPH::Ref" = type { ptr }

@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZN3JPH5Color6sBlackE = external local_unnamed_addr global %"class.JPH::Color", align 4
@.str.9 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1
@__const._ZN4Font6CreateEPKci.vertex_desc = external hidden unnamed_addr constant [3 x i32], align 4
@.str.13 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [16 x i8], align 1
@_ZN3JPH5TraceE = external local_unnamed_addr global ptr, align 8
@.str.15 = external hidden unnamed_addr constant [52 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
declare dso_local i32 @stbtt_GetCodepointKernAdvance(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @stbtt_GetCodepointHMetrics(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @stbtt_GetFontVMetrics(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local float @stbtt_ScaleForPixelHeight(ptr noundef, float noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local ptr @stbtt_GetCodepointBitmap(ptr noundef, float noundef, float noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress 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) #2

; Function Attrs: mustprogress uwtable
declare dso_local i32 @stbtt_InitFont(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local i32 @stbtt_GetFontOffsetForIndex(ptr noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Font6CreateEPKci(ptr noundef nonnull align 8 dereferenceable(51376) %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.JPH::Array", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.JPH::STLAllocator", align 1
  %9 = alloca %struct.stbtt_fontinfo, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.JPH::Ref.4", align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"class.JPH::ScopeExit", align 8
  %17 = alloca %class.anon, align 8
  %18 = alloca i32, align 4
  %19 = alloca [3 x i32], align 4
  %20 = alloca %"class.JPH::Ref.7", align 8
  %21 = alloca %"class.JPH::Ref.10", align 8
  %22 = alloca %"class.std::unique_ptr", align 8
  %23 = alloca %"class.JPH::Ref", align 8
  %24 = getelementptr inbounds i8, ptr %0, i64 8
  %25 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef %1)
  %26 = getelementptr inbounds i8, ptr %0, i64 40
  store i32 %2, ptr %26, align 8, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %0, i64 44
  store i32 64, ptr %27, align 4, !tbaa !24
  %28 = getelementptr inbounds i8, ptr %0, i64 48
  store i32 64, ptr %28, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %8)
  invoke void @_ZStplIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEENSt7__cxx1112basic_stringIT_T0_T1_EEOSA_PKS7_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef %1)
          to label %29 unwind label %39

29:                                               ; preds = %3
  invoke void @_ZStplIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEENSt7__cxx1112basic_stringIT_T0_T1_EEOSA_PKS7_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.8)
          to label %30 unwind label %41

30:                                               ; preds = %29
  %31 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %5) #11
  invoke void @_Z8ReadDataPKc(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Array") align 8 %4, ptr noundef %31)
          to label %32 unwind label %43

32:                                               ; preds = %30
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #11
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %9) #11
  %33 = call noundef ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %34 = call noundef ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %35 = invoke i32 @stbtt_GetFontOffsetForIndex(ptr noundef %34, i32 noundef 0)
          to label %36 unwind label %47

36:                                               ; preds = %32
  %37 = invoke i32 @stbtt_InitFont(ptr noundef nonnull %9, ptr noundef %33, i32 noundef %35)
          to label %38 unwind label %47

38:                                               ; preds = %36
  %.not = icmp ne i32 %37, 0
  br i1 %.not, label %49, label %263

39:                                               ; preds = %3
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %46

41:                                               ; preds = %29
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %45

43:                                               ; preds = %30
  %44 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #11
  br label %45

45:                                               ; preds = %43, %41
  %.pn = phi { ptr, i32 } [ %44, %43 ], [ %42, %41 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #11
  br label %46

46:                                               ; preds = %45, %39
  %.pn.pn = phi { ptr, i32 } [ %.pn, %45 ], [ %40, %39 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #11
  br label %265

47:                                               ; preds = %36, %32
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %264

49:                                               ; preds = %38
  %50 = load i32, ptr %26, align 8, !tbaa !5
  %51 = sitofp i32 %50 to float
  %52 = invoke float @stbtt_ScaleForPixelHeight(ptr noundef nonnull %9, float noundef %51)
          to label %53 unwind label %72

53:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #11
  invoke void @stbtt_GetFontVMetrics(ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef null, ptr noundef null)
          to label %54 unwind label %74

54:                                               ; preds = %53
  %55 = load i32, ptr %10, align 4, !tbaa !26
  %56 = sitofp i32 %55 to float
  %57 = fmul float %52, %56
  %58 = fptosi float %57 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #11
  %59 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #12
          to label %60 unwind label %76

60:                                               ; preds = %54
  %61 = load i32, ptr %27, align 4, !tbaa !24
  %62 = load i32, ptr %28, align 8, !tbaa !25
  invoke void @_ZN15SoftwareSurfaceC1Eii14ESurfaceFormati(ptr noundef nonnull align 8 dereferenceable(64) %59, i32 noundef %61, i32 noundef %62, i32 noundef 1, i32 noundef 0)
          to label %63 unwind label %78

63:                                               ; preds = %60
  invoke void @_ZN3JPH3RefI15SoftwareSurfaceEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull %59)
          to label %64 unwind label %76

64:                                               ; preds = %63
  %65 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  %.sroa.043.0.copyload = load i32, ptr @_ZN3JPH5Color6sBlackE, align 4, !tbaa !27
  invoke void @_ZN7Surface5ClearEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(48) %65, i32 %.sroa.043.0.copyload)
          to label %66 unwind label %80

66:                                               ; preds = %64
  %67 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  invoke void @_ZNK7Surface4LockE16ESurfaceLockMode(ptr noundef nonnull align 8 dereferenceable(48) %67, i32 noundef 2)
          to label %.preheader128 unwind label %80

.preheader128:                                    ; preds = %66
  %68 = getelementptr inbounds i8, ptr %0, i64 52
  %69 = getelementptr inbounds i8, ptr %0, i64 500
  %70 = getelementptr inbounds i8, ptr %0, i64 948
  br label %82

.preheader127:                                    ; preds = %._crit_edge
  %71 = getelementptr inbounds i8, ptr %0, i64 1172
  br label %.preheader

72:                                               ; preds = %49
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %264

74:                                               ; preds = %53
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %262

76:                                               ; preds = %63, %54
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %261

78:                                               ; preds = %60
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %59, i64 noundef 64) #13
  br label %261

80:                                               ; preds = %66, %64
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %260

82:                                               ; preds = %.backedge, %.preheader128
  %indvars.iv = phi i64 [ 33, %.preheader128 ], [ %indvars.iv.be, %.backedge ]
  %.081136 = phi i32 [ 0, %.preheader128 ], [ %.081136.be, %.backedge ]
  %.085135 = phi i32 [ 0, %.preheader128 ], [ %.085135.be, %.backedge ]
  %83 = add nsw i64 %indvars.iv, -32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #11
  %84 = trunc nuw nsw i64 %indvars.iv to i32
  %85 = invoke ptr @stbtt_GetCodepointBitmap(ptr noundef nonnull %9, float noundef 0.000000e+00, float noundef %52, i32 noundef %84, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %15)
          to label %86 unwind label %109

86:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #11
  store ptr %85, ptr %17, align 8, !tbaa !28
  call void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0EC2EOS4_"(ptr noundef nonnull align 8 dereferenceable(9) %16, ptr noundef nonnull align 8 dereferenceable(8) %17)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  %87 = load i32, ptr %15, align 4, !tbaa !26
  %88 = add nsw i32 %87, %58
  store i32 %88, ptr %15, align 4, !tbaa !26
  %89 = load i32, ptr %14, align 4, !tbaa !26
  %90 = load i32, ptr %12, align 4, !tbaa !26
  %91 = add i32 %.081136, 2
  %92 = add i32 %91, %89
  %93 = add i32 %92, %90
  %94 = load i32, ptr %27, align 4, !tbaa !24
  %95 = icmp sgt i32 %93, %94
  br i1 %95, label %96, label %127

96:                                               ; preds = %86
  %97 = load i32, ptr %26, align 8, !tbaa !5
  %98 = add i32 %.085135, 2
  %99 = add i32 %98, %97
  %100 = add i32 %97, 2
  %101 = add i32 %100, %99
  %102 = load i32, ptr %28, align 8, !tbaa !25
  %103 = icmp sgt i32 %101, %102
  br i1 %103, label %104, label %.thread

104:                                              ; preds = %96
  %105 = shl nsw i32 %102, 1
  %106 = icmp slt i32 %94, %105
  br i1 %106, label %107, label %111

107:                                              ; preds = %104
  %108 = shl i32 %94, 1
  store i32 %108, ptr %27, align 4, !tbaa !24
  br label %112

109:                                              ; preds = %82
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %181

111:                                              ; preds = %104
  store i32 %105, ptr %28, align 8, !tbaa !25
  br label %112

112:                                              ; preds = %111, %107
  %113 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  invoke void @_ZNK7Surface6UnLockEv(ptr noundef nonnull align 8 dereferenceable(48) %113)
          to label %114 unwind label %.loopexit.split-lp

114:                                              ; preds = %112
  %115 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #12
          to label %116 unwind label %.loopexit.split-lp

116:                                              ; preds = %114
  %117 = load i32, ptr %27, align 4, !tbaa !24
  %118 = load i32, ptr %28, align 8, !tbaa !25
  invoke void @_ZN15SoftwareSurfaceC1Eii14ESurfaceFormati(ptr noundef nonnull align 8 dereferenceable(64) %115, i32 noundef %117, i32 noundef %118, i32 noundef 1, i32 noundef 0)
          to label %119 unwind label %125

119:                                              ; preds = %116
  %120 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15SoftwareSurfaceEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull %115)
          to label %121 unwind label %.loopexit.split-lp

121:                                              ; preds = %119
  %122 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  %.sroa.0.0.copyload = load i32, ptr @_ZN3JPH5Color6sBlackE, align 4, !tbaa !27
  invoke void @_ZN7Surface5ClearEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(48) %122, i32 %.sroa.0.0.copyload)
          to label %123 unwind label %.loopexit.split-lp

123:                                              ; preds = %121
  %124 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  invoke void @_ZNK7Surface4LockE16ESurfaceLockMode(ptr noundef nonnull align 8 dereferenceable(48) %124, i32 noundef 2)
          to label %258 unwind label %.loopexit.split-lp

.loopexit:                                        ; preds = %128, %132, %139
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %180

.loopexit.split-lp:                               ; preds = %112, %114, %119, %121, %123
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %180

125:                                              ; preds = %116
  %126 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %115, i64 noundef 64) #13
  br label %180

127:                                              ; preds = %86
  %or.cond = icmp ult i32 %.081136, 65536
  br i1 %or.cond, label %.thread, label %128

128:                                              ; preds = %127
  %129 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, i32 noundef 104)
          to label %130 unwind label %.loopexit

130:                                              ; preds = %128
  br i1 %129, label %131, label %.thread

131:                                              ; preds = %130
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !30
  br label %.thread

.thread:                                          ; preds = %96, %130, %131, %127
  %.182113 = phi i32 [ %.081136, %130 ], [ %.081136, %131 ], [ %.081136, %127 ], [ 0, %96 ]
  %.186112 = phi i32 [ %.085135, %130 ], [ %.085135, %131 ], [ %.085135, %127 ], [ %99, %96 ]
  %or.cond5 = icmp ult i32 %.186112, 65536
  br i1 %or.cond5, label %136, label %132

132:                                              ; preds = %.thread
  %133 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.10, i32 noundef 105)
          to label %134 unwind label %.loopexit

134:                                              ; preds = %132
  br i1 %133, label %135, label %136

135:                                              ; preds = %134
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !31
  br label %136

136:                                              ; preds = %134, %135, %.thread
  %137 = load i32, ptr %12, align 4, !tbaa !26
  %138 = icmp slt i32 %137, 256
  br i1 %138, label %143, label %139

139:                                              ; preds = %136
  %140 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.10, i32 noundef 106)
          to label %141 unwind label %.loopexit

141:                                              ; preds = %139
  br i1 %140, label %142, label %143

142:                                              ; preds = %141
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !32
  br label %143

143:                                              ; preds = %142, %141, %136
  %144 = trunc i32 %.182113 to i16
  %145 = getelementptr inbounds [224 x i16], ptr %68, i64 0, i64 %83
  store i16 %144, ptr %145, align 2, !tbaa !33
  %146 = trunc i32 %.186112 to i16
  %147 = getelementptr inbounds [224 x i16], ptr %69, i64 0, i64 %83
  store i16 %146, ptr %147, align 2, !tbaa !33
  %148 = load i32, ptr %12, align 4, !tbaa !26
  %149 = trunc i32 %148 to i8
  %150 = add i8 %149, 1
  %151 = getelementptr inbounds [224 x i8], ptr %70, i64 0, i64 %83
  store i8 %150, ptr %151, align 1, !tbaa !27
  %152 = load i32, ptr %13, align 4, !tbaa !26
  %153 = icmp sgt i32 %152, 0
  br i1 %153, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %143
  %154 = sext i32 %.182113 to i64
  br label %155

155:                                              ; preds = %.lr.ph, %162
  %.084133 = phi i32 [ 0, %.lr.ph ], [ %172, %162 ]
  %156 = load i32, ptr %12, align 4, !tbaa !26
  %157 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  %158 = load i32, ptr %15, align 4, !tbaa !26
  %159 = add i32 %.084133, %.186112
  %160 = add i32 %159, %158
  %161 = invoke noundef ptr @_ZN7Surface11GetScanLineEi(ptr noundef nonnull align 8 dereferenceable(48) %157, i32 noundef %160)
          to label %162 unwind label %175

162:                                              ; preds = %155
  %163 = mul nsw i32 %156, %.084133
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i8, ptr %85, i64 %164
  %166 = getelementptr inbounds i8, ptr %161, i64 %154
  %167 = load i32, ptr %14, align 4, !tbaa !26
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i8, ptr %166, i64 %168
  %170 = load i32, ptr %12, align 4, !tbaa !26
  %171 = sext i32 %170 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %169, ptr align 1 %165, i64 %171, i1 false)
  %172 = add nuw nsw i32 %.084133, 1
  %173 = load i32, ptr %13, align 4, !tbaa !26
  %174 = icmp slt i32 %172, %173
  br i1 %174, label %155, label %._crit_edge.loopexit, !llvm.loop !35

175:                                              ; preds = %155
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %180

._crit_edge.loopexit:                             ; preds = %162
  %.pre = load i32, ptr %12, align 4, !tbaa !26
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %143
  %177 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %148, %143 ]
  %178 = add i32 %.182113, 2
  %179 = add i32 %178, %177
  call void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9) %16) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 256
  br i1 %exitcond.not, label %.preheader127, label %.backedge

.backedge:                                        ; preds = %._crit_edge, %258
  %indvars.iv.be = phi i64 [ %indvars.iv.next, %._crit_edge ], [ 33, %258 ]
  %.081136.be = phi i32 [ %179, %._crit_edge ], [ 0, %258 ]
  %.085135.be = phi i32 [ %.186112, %._crit_edge ], [ 0, %258 ]
  br label %82, !llvm.loop !37

180:                                              ; preds = %.loopexit, %.loopexit.split-lp, %175, %125
  %.pn93 = phi { ptr, i32 } [ %126, %125 ], [ %176, %175 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9) %16) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #11
  br label %181

181:                                              ; preds = %180, %109
  %.pn93.pn = phi { ptr, i32 } [ %.pn93, %180 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  br label %260

.preheader:                                       ; preds = %.preheader127, %186
  %indvars.iv149 = phi i64 [ 0, %.preheader127 ], [ %indvars.iv.next150, %186 ]
  %182 = trunc i64 %indvars.iv149 to i32
  %183 = add i32 %182, 32
  br label %187

184:                                              ; preds = %186
  %185 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  invoke void @_ZNK7Surface6UnLockEv(ptr noundef nonnull align 8 dereferenceable(48) %185)
          to label %207 unwind label %243

186:                                              ; preds = %199
  %indvars.iv.next150 = add nuw nsw i64 %indvars.iv149, 1
  %exitcond152.not = icmp eq i64 %indvars.iv.next150, 224
  br i1 %exitcond152.not, label %184, label %.preheader, !llvm.loop !38

187:                                              ; preds = %.preheader, %199
  %indvars.iv145 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next146, %199 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #11
  invoke void @stbtt_GetCodepointHMetrics(ptr noundef nonnull %9, i32 noundef %183, ptr noundef nonnull %18, ptr noundef null)
          to label %188 unwind label %202

188:                                              ; preds = %187
  %189 = load i32, ptr %18, align 4, !tbaa !26
  %190 = trunc i64 %indvars.iv145 to i32
  %191 = add i32 %190, 32
  %192 = invoke i32 @stbtt_GetCodepointKernAdvance(ptr noundef nonnull %9, i32 noundef %183, i32 noundef %191)
          to label %193 unwind label %204

193:                                              ; preds = %188
  %194 = add nsw i32 %192, %189
  %195 = sitofp i32 %194 to float
  %196 = fmul float %52, %195
  %197 = fptosi float %196 to i32
  %198 = invoke noundef i32 @_ZN3JPH5ClampIiEET_S1_S1_S1_(i32 noundef %197, i32 noundef 0, i32 noundef 255)
          to label %199 unwind label %204

199:                                              ; preds = %193
  %200 = trunc i32 %198 to i8
  %201 = getelementptr inbounds [224 x [224 x i8]], ptr %71, i64 0, i64 %indvars.iv149, i64 %indvars.iv145
  store i8 %200, ptr %201, align 1, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #11
  %indvars.iv.next146 = add nuw nsw i64 %indvars.iv145, 1
  %exitcond148.not = icmp eq i64 %indvars.iv.next146, 224
  br i1 %exitcond148.not, label %186, label %187, !llvm.loop !39

202:                                              ; preds = %187
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %206

204:                                              ; preds = %193, %188
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %206

206:                                              ; preds = %204, %202
  %.pn100 = phi { ptr, i32 } [ %205, %204 ], [ %203, %202 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #11
  br label %260

207:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %19) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %19, ptr noundef nonnull align 4 dereferenceable(12) @__const._ZN4Font6CreateEPKci.vertex_desc, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #11
  %208 = getelementptr inbounds i8, ptr %0, i64 51352
  %209 = load ptr, ptr %208, align 8, !tbaa !40
  %210 = load ptr, ptr %209, align 16, !tbaa !41
  %211 = getelementptr inbounds i8, ptr %210, i64 72
  %212 = load ptr, ptr %211, align 8
  invoke void %212(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.7") align 8 %20, ptr noundef nonnull align 16 dereferenceable(832) %209, ptr noundef nonnull @.str.13)
          to label %213 unwind label %245

213:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #11
  %214 = load ptr, ptr %208, align 8, !tbaa !40
  %215 = load ptr, ptr %214, align 16, !tbaa !41
  %216 = getelementptr inbounds i8, ptr %215, i64 80
  %217 = load ptr, ptr %216, align 8
  invoke void %217(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.10") align 8 %21, ptr noundef nonnull align 16 dereferenceable(832) %214, ptr noundef nonnull @.str.14)
          to label %218 unwind label %247

218:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #11
  %219 = load ptr, ptr %208, align 8, !tbaa !40
  %220 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %221 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm3EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(12) %19) #11
  %222 = trunc i64 %221 to i32
  %223 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %224 = load ptr, ptr %219, align 16, !tbaa !41
  %225 = getelementptr inbounds i8, ptr %224, i64 88
  %226 = load ptr, ptr %225, align 8
  invoke void %226(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %22, ptr noundef nonnull align 16 dereferenceable(832) %219, ptr noundef %220, ptr noundef nonnull %19, i32 noundef %222, ptr noundef %223, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0)
          to label %227 unwind label %249

227:                                              ; preds = %218
  %228 = getelementptr inbounds i8, ptr %0, i64 51368
  %229 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %228, ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #11
  %230 = load ptr, ptr %208, align 8, !tbaa !40
  %231 = call noundef ptr @_ZNK3JPH3RefI15SoftwareSurfaceEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
  %232 = load ptr, ptr %230, align 16, !tbaa !41
  %233 = getelementptr inbounds i8, ptr %232, i64 64
  %234 = load ptr, ptr %233, align 8
  invoke void %234(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref") align 8 %23, ptr noundef nonnull align 16 dereferenceable(832) %230, ptr noundef %231)
          to label %235 unwind label %251

235:                                              ; preds = %227
  %236 = getelementptr inbounds i8, ptr %0, i64 51360
  %237 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI7TextureEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  call void @_ZN3JPH3RefI7TextureED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #11
  %238 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !43
  %239 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #11
  %240 = load i32, ptr %26, align 8, !tbaa !5
  %241 = load i32, ptr %27, align 4, !tbaa !24
  %242 = load i32, ptr %28, align 8, !tbaa !25
  invoke void (ptr, ...) %238(ptr noundef nonnull @.str.15, ptr noundef %239, i32 noundef %240, i32 noundef %241, i32 noundef %242)
          to label %259 unwind label %253

243:                                              ; preds = %184
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %260

245:                                              ; preds = %207
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %257

247:                                              ; preds = %213
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %256

249:                                              ; preds = %218
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  br label %255

251:                                              ; preds = %227
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #11
  br label %255

253:                                              ; preds = %235
  %254 = landingpad { ptr, i32 }
          cleanup
  br label %255

255:                                              ; preds = %253, %251, %249
  %.pn96 = phi { ptr, i32 } [ %254, %253 ], [ %252, %251 ], [ %250, %249 ]
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  br label %256

256:                                              ; preds = %255, %247
  %.pn96.pn = phi { ptr, i32 } [ %.pn96, %255 ], [ %248, %247 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #11
  br label %257

257:                                              ; preds = %256, %245
  %.pn96.pn.pn = phi { ptr, i32 } [ %.pn96.pn, %256 ], [ %246, %245 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #11
  br label %260

258:                                              ; preds = %123
  call void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9) %16) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  br label %.backedge

259:                                              ; preds = %235
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #11
  call void @_ZN3JPH3RefI15SoftwareSurfaceED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  br label %263

260:                                              ; preds = %181, %206, %243, %257, %80
  %.pn100.pn.pn = phi { ptr, i32 } [ %81, %80 ], [ %.pn100, %206 ], [ %.pn96.pn.pn, %257 ], [ %244, %243 ], [ %.pn93.pn, %181 ]
  call void @_ZN3JPH3RefI15SoftwareSurfaceED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #11
  br label %261

261:                                              ; preds = %260, %78, %76
  %.pn100.pn.pn.pn = phi { ptr, i32 } [ %.pn100.pn.pn, %260 ], [ %77, %76 ], [ %79, %78 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #11
  br label %262

262:                                              ; preds = %261, %74
  %.pn100.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn100.pn.pn.pn, %261 ], [ %75, %74 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  br label %264

263:                                              ; preds = %38, %259
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %9) #11
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  ret i1 %.not

264:                                              ; preds = %72, %262, %47
  %.pn100.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %48, %47 ], [ %.pn100.pn.pn.pn.pn, %262 ], [ %73, %72 ]
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %9) #11
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  br label %265

265:                                              ; preds = %264, %46
  %.pn100.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn100.pn.pn.pn.pn.pn.pn, %264 ], [ %.pn.pn, %46 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn100.pn.pn.pn.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #1 align 2

declare void @_Z8ReadDataPKc(ptr dead_on_unwind writable sret(%"class.JPH::Array") align 8, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #7

declare void @_ZN15SoftwareSurfaceC1Eii14ESurfaceFormati(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #8

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

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

declare void @_ZN7Surface5ClearEN3JPH5ColorE(ptr noundef nonnull align 8 dereferenceable(48), i32) local_unnamed_addr #4

declare void @_ZNK7Surface4LockE16ESurfaceLockMode(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef) local_unnamed_addr #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0EC2EOS4_"(ptr noundef nonnull align 8 dereferenceable(9), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #9 align 2

declare void @_ZNK7Surface6UnLockEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15SoftwareSurfaceEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #5 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 #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN7Surface11GetScanLineEi(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZN4Font6CreateEPKciE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(9)) unnamed_addr #9 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef i32 @_ZN3JPH5ClampIiEET_S1_S1_S1_(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #10

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm3EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 = { 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 #6 = { 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 #7 = { nobuiltin allocsize(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 = { nobuiltin nounwind "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 #9 = { alwaysinline 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 #10 = { alwaysinline 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 #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin 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, !10, i64 40}
!6 = !{!"_ZTS4Font", !7, i64 0, !13, i64 8, !10, i64 40, !10, i64 44, !10, i64 48, !11, i64 52, !11, i64 500, !11, i64 948, !11, i64 1172, !15, i64 51352, !17, i64 51360, !18, i64 51368}
!7 = !{!"_ZTSN3JPH9RefTargetI4FontEE", !8, i64 0}
!8 = !{!"_ZTSSt6atomicIjE", !9, i64 0}
!9 = !{!"_ZTSSt13__atomic_baseIjE", !10, i64 0}
!10 = !{!"int", !11, i64 0}
!11 = !{!"omnipotent char", !12, i64 0}
!12 = !{!"Simple C++ TBAA"}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !14, i64 0, !16, i64 8, !11, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !15, i64 0}
!15 = !{!"any pointer", !11, i64 0}
!16 = !{!"long", !11, i64 0}
!17 = !{!"_ZTSN3JPH3RefI7TextureEE", !15, i64 0}
!18 = !{!"_ZTSSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EE", !19, i64 0}
!19 = !{!"_ZTSSt15__uniq_ptr_dataI13PipelineStateSt14default_deleteIS0_ELb1ELb1EE", !20, i64 0}
!20 = !{!"_ZTSSt15__uniq_ptr_implI13PipelineStateSt14default_deleteIS0_EE", !21, i64 0}
!21 = !{!"_ZTSSt5tupleIJP13PipelineStateSt14default_deleteIS0_EEE", !22, i64 0}
!22 = !{!"_ZTSSt11_Tuple_implILm0EJP13PipelineStateSt14default_deleteIS0_EEE", !23, i64 0}
!23 = !{!"_ZTSSt10_Head_baseILm0EP13PipelineStateLb0EE", !15, i64 0}
!24 = !{!6, !10, i64 44}
!25 = !{!6, !10, i64 48}
!26 = !{!10, !10, i64 0}
!27 = !{!11, !11, i64 0}
!28 = !{!29, !15, i64 0}
!29 = !{!"_ZTSZN4Font6CreateEPKciE3$_0", !15, i64 0}
!30 = !{i64 2158435037}
!31 = !{i64 2158435371}
!32 = !{i64 2158435681}
!33 = !{!34, !34, i64 0}
!34 = !{!"short", !11, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}
!38 = distinct !{!38, !36}
!39 = distinct !{!39, !36}
!40 = !{!6, !15, i64 51352}
!41 = !{!42, !42, i64 0}
!42 = !{!"vtable pointer", !12, i64 0}
!43 = !{!15, !15, i64 0}


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