; LLVM IR from erwincoumans/tiny-differentiable-simulator :: third_party/dear_imgui/imgui_draw.ll (Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas)

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

%struct.ImVec2 = type { float, float }
%struct.ImVector.11 = type { i32, i32, ptr }
%struct.ImVector.12 = type { i32, i32, ptr }
%struct.ImVector.15 = type { i32, i32, ptr }
%struct.ImVector.16 = type { i32, i32, ptr }
%struct.stbtt_pack_context = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, ptr, ptr }
%struct.stbtt_aligned_quad = type { float, float, float, float, float, float, float, float }
%struct.ImFontAtlas = type { i8, i32, ptr, i32, i32, ptr, ptr, i32, i32, %struct.ImVec2, %struct.ImVec2, %struct.ImVector.8, %struct.ImVector.9, %struct.ImVector.10, [64 x %struct.ImVec4], i32, i32 }
%struct.ImVector.8 = type { i32, i32, ptr }
%struct.ImVector.9 = type { i32, i32, ptr }
%struct.ImVector.10 = type { i32, i32, ptr }
%struct.ImVec4 = type { float, float, float, float }
%struct.ImFontConfig = type { ptr, i32, i8, i32, float, i32, i32, i8, %struct.ImVec2, %struct.ImVec2, ptr, float, float, i8, i32, float, i16, [40 x i8], ptr }
%struct.ImFont = type <{ %struct.ImVector.6, float, float, %struct.ImVector.0, %struct.ImVector.7, ptr, %struct.ImVec2, ptr, ptr, i16, i16, i16, i8, i8, float, float, float, i32, [2 x i8], [6 x i8] }>
%struct.ImVector.6 = type { i32, i32, ptr }
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImVector.7 = type { i32, i32, ptr }
%struct.ImFontBuildSrcData = type { %struct.stbtt_fontinfo, %struct.stbtt_pack_range, ptr, ptr, ptr, i32, i32, i32, %struct.ImBitVector, %struct.ImVector.14 }
%struct.stbtt_fontinfo = type { ptr, ptr, 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 }
%struct.stbtt_pack_range = type { float, i32, ptr, i32, ptr, i8, i8 }
%struct.ImBitVector = type { %struct.ImVector.13 }
%struct.ImVector.13 = type { i32, i32, ptr }
%struct.ImVector.14 = type { i32, i32, ptr }
%struct.ImFontBuildDstData = type { i32, i32, i32, %struct.ImBitVector }
%struct.stbrp_rect = type { i32, i16, i16, i16, i16, i32 }
%struct.stbtt_packedchar = type { i16, i16, i16, i16, float, float, float, float, float }

@.str.1 = external hidden unnamed_addr constant [114 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas = external hidden unnamed_addr constant [52 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [25 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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

declare noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef) #4

declare i32 @__gxx_personality_v0(...)

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

; Function Attrs: nounwind
declare float @sqrtf(float noundef) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #8 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImFontAtlas12ClearTexDataEv(ptr noundef nonnull align 8 dereferenceable(1144)) #9 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas(ptr noundef %0) #9 personality ptr @__gxx_personality_v0 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  %4 = alloca %struct.ImVec2, align 4
  %5 = alloca %struct.ImVec2, align 4
  %6 = alloca %struct.ImVector.11, align 8
  %7 = alloca %struct.ImVector.12, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca %struct.ImVector.15, align 8
  %28 = alloca %struct.ImVector.16, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca float, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca %struct.stbtt_pack_context, align 8
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca %struct.ImVec2, align 4
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca [256 x i8], align 16
  %54 = alloca ptr, align 8
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca float, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca float, align 4
  %65 = alloca float, align 4
  %66 = alloca float, align 4
  %67 = alloca float, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca ptr, align 8
  %71 = alloca %struct.stbtt_aligned_quad, align 4
  %72 = alloca float, align 4
  %73 = alloca float, align 4
  %74 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.ImFontAtlas, ptr %75, i32 0, i32 13
  %77 = getelementptr inbounds %struct.ImVector.10, ptr %76, i32 0, i32 0
  %78 = load i32, ptr %77, align 8, !tbaa !9
  %79 = icmp sgt i32 %78, 0
  br i1 %79, label %80, label %81

80:                                               ; preds = %1
  br label %83

81:                                               ; preds = %1
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.1, i32 noundef 2080, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #11
  unreachable

82:                                               ; No predecessors!
  br label %83

83:                                               ; preds = %82, %80
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_Z20ImFontAtlasBuildInitP11ImFontAtlas(ptr noundef %84)
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.ImFontAtlas, ptr %85, i32 0, i32 2
  store ptr null, ptr %86, align 8, !tbaa !18
  %87 = load ptr, ptr %3, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.ImFontAtlas, ptr %87, i32 0, i32 8
  store i32 0, ptr %88, align 4, !tbaa !19
  %89 = load ptr, ptr %3, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.ImFontAtlas, ptr %89, i32 0, i32 7
  store i32 0, ptr %90, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #12
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %4, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ImFontAtlas, ptr %91, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %92, ptr align 4 %4, i64 8, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #12
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %5, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.ImFontAtlas, ptr %93, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %94, ptr align 4 %5, i64 8, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #12
  %95 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZN11ImFontAtlas12ClearTexDataEv(ptr noundef nonnull align 8 dereferenceable(1144) %95)
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #12
  call void @_ZN8ImVectorI18ImFontBuildSrcDataEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6)
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #12
  invoke void @_ZN8ImVectorI18ImFontBuildDstDataEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %96 unwind label %125

96:                                               ; preds = %83
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.ImFontAtlas, ptr %97, i32 0, i32 13
  %99 = getelementptr inbounds %struct.ImVector.10, ptr %98, i32 0, i32 0
  %100 = load i32, ptr %99, align 8, !tbaa !9
  invoke void @_ZN8ImVectorI18ImFontBuildSrcDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %100)
          to label %101 unwind label %129

101:                                              ; preds = %96
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.ImFontAtlas, ptr %102, i32 0, i32 11
  %104 = getelementptr inbounds %struct.ImVector.8, ptr %103, i32 0, i32 0
  %105 = load i32, ptr %104, align 8, !tbaa !23
  invoke void @_ZN8ImVectorI18ImFontBuildDstDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %7, i32 noundef %105)
          to label %106 unwind label %129

106:                                              ; preds = %101
  %107 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 2
  %108 = load ptr, ptr %107, align 8, !tbaa !24
  %109 = invoke noundef i32 @_ZNK8ImVectorI18ImFontBuildSrcDataE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %110 unwind label %129

110:                                              ; preds = %106
  %111 = sext i32 %109 to i64
  call void @llvm.memset.p0.i64(ptr align 8 %108, i8 0, i64 %111, i1 false)
  %112 = getelementptr inbounds %struct.ImVector.12, ptr %7, i32 0, i32 2
  %113 = load ptr, ptr %112, align 8, !tbaa !26
  %114 = invoke noundef i32 @_ZNK8ImVectorI18ImFontBuildDstDataE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %115 unwind label %129

115:                                              ; preds = %110
  %116 = sext i32 %114 to i64
  call void @llvm.memset.p0.i64(ptr align 8 %113, i8 0, i64 %116, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #12
  store i32 0, ptr %10, align 4, !tbaa !28
  br label %117

117:                                              ; preds = %342, %115
  %118 = load i32, ptr %10, align 4, !tbaa !28
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.ImFontAtlas, ptr %119, i32 0, i32 13
  %121 = getelementptr inbounds %struct.ImVector.10, ptr %120, i32 0, i32 0
  %122 = load i32, ptr %121, align 8, !tbaa !9
  %123 = icmp slt i32 %118, %122
  br i1 %123, label %133, label %124

124:                                              ; preds = %117
  store i32 2, ptr %11, align 4
  br label %349

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

129:                                              ; preds = %110, %106, %101, %96
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %8, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %9, align 4
  br label %1355

133:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #12
  %134 = load i32, ptr %10, align 4, !tbaa !28
  %135 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %134)
          to label %136 unwind label %166

136:                                              ; preds = %133
  store ptr %135, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #12
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.ImFontAtlas, ptr %137, i32 0, i32 13
  %139 = load i32, ptr %10, align 4, !tbaa !28
  %140 = invoke noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %138, i32 noundef %139)
          to label %141 unwind label %170

141:                                              ; preds = %136
  store ptr %140, ptr %13, align 8, !tbaa !5
  %142 = load ptr, ptr %13, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.ImFontConfig, ptr %142, i32 0, i32 18
  %144 = load ptr, ptr %143, align 8, !tbaa !29
  %145 = icmp ne ptr %144, null
  br i1 %145, label %146, label %162

146:                                              ; preds = %141
  %147 = load ptr, ptr %13, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.ImFontConfig, ptr %147, i32 0, i32 18
  %149 = load ptr, ptr %148, align 8, !tbaa !29
  %150 = invoke noundef zeroext i1 @_ZNK6ImFont8IsLoadedEv(ptr noundef nonnull align 8 dereferenceable(114) %149)
          to label %151 unwind label %170

151:                                              ; preds = %146
  br i1 %150, label %152, label %160

152:                                              ; preds = %151
  %153 = load ptr, ptr %13, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.ImFontConfig, ptr %153, i32 0, i32 18
  %155 = load ptr, ptr %154, align 8, !tbaa !29
  %156 = getelementptr inbounds %struct.ImFont, ptr %155, i32 0, i32 7
  %157 = load ptr, ptr %156, align 8, !tbaa !32
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = icmp eq ptr %157, %158
  br label %160

160:                                              ; preds = %152, %151
  %161 = phi i1 [ true, %151 ], [ %159, %152 ]
  br label %162

162:                                              ; preds = %160, %141
  %163 = phi i1 [ false, %141 ], [ %161, %160 ]
  br i1 %163, label %164, label %165

164:                                              ; preds = %162
  br label %175

165:                                              ; preds = %162
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.1, i32 noundef 2104, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #11
  unreachable

166:                                              ; preds = %133
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %8, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %9, align 4
  br label %348

170:                                              ; preds = %146, %136
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %8, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %9, align 4
  br label %347

174:                                              ; No predecessors!
  br label %175

175:                                              ; preds = %174, %164
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %176, i32 0, i32 5
  store i32 -1, ptr %177, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #12
  store i32 0, ptr %14, align 4, !tbaa !28
  br label %178

178:                                              ; preds = %213, %175
  %179 = load i32, ptr %14, align 4, !tbaa !28
  %180 = load ptr, ptr %3, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.ImFontAtlas, ptr %180, i32 0, i32 11
  %182 = getelementptr inbounds %struct.ImVector.8, ptr %181, i32 0, i32 0
  %183 = load i32, ptr %182, align 8, !tbaa !23
  %184 = icmp slt i32 %179, %183
  br i1 %184, label %185, label %190

185:                                              ; preds = %178
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %186, i32 0, i32 5
  %188 = load i32, ptr %187, align 8, !tbaa !37
  %189 = icmp eq i32 %188, -1
  br label %190

190:                                              ; preds = %185, %178
  %191 = phi i1 [ false, %178 ], [ %189, %185 ]
  br i1 %191, label %193, label %192

192:                                              ; preds = %190
  store i32 5, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  br label %216

193:                                              ; preds = %190
  %194 = load ptr, ptr %13, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.ImFontConfig, ptr %194, i32 0, i32 18
  %196 = load ptr, ptr %195, align 8, !tbaa !29
  %197 = load ptr, ptr %3, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.ImFontAtlas, ptr %197, i32 0, i32 11
  %199 = load i32, ptr %14, align 4, !tbaa !28
  %200 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN8ImVectorIP6ImFontEixEi(ptr noundef nonnull align 8 dereferenceable(16) %198, i32 noundef %199)
          to label %201 unwind label %208

201:                                              ; preds = %193
  %202 = load ptr, ptr %200, align 8, !tbaa !5
  %203 = icmp eq ptr %196, %202
  br i1 %203, label %204, label %212

204:                                              ; preds = %201
  %205 = load i32, ptr %14, align 4, !tbaa !28
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %206, i32 0, i32 5
  store i32 %205, ptr %207, align 8, !tbaa !37
  br label %212

208:                                              ; preds = %193
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %8, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  br label %347

212:                                              ; preds = %204, %201
  br label %213

213:                                              ; preds = %212
  %214 = load i32, ptr %14, align 4, !tbaa !28
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %14, align 4, !tbaa !28
  br label %178, !llvm.loop !45

216:                                              ; preds = %192
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %217, i32 0, i32 5
  %219 = load i32, ptr %218, align 8, !tbaa !37
  %220 = icmp ne i32 %219, -1
  br i1 %220, label %221, label %222

221:                                              ; preds = %216
  br label %224

222:                                              ; preds = %216
  call void @__assert_fail(ptr noundef @.str.26, ptr noundef @.str.1, i32 noundef 2111, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #11
  unreachable

223:                                              ; No predecessors!
  br label %224

224:                                              ; preds = %223, %221
  %225 = load ptr, ptr %12, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %225, i32 0, i32 5
  %227 = load i32, ptr %226, align 8, !tbaa !37
  %228 = icmp eq i32 %227, -1
  br i1 %228, label %229, label %230

229:                                              ; preds = %224
  store i1 false, ptr %2, align 1
  store i32 1, ptr %11, align 4
  br label %339

230:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #12
  %231 = load ptr, ptr %13, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.ImFontConfig, ptr %231, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !47
  %234 = load ptr, ptr %13, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.ImFontConfig, ptr %234, i32 0, i32 3
  %236 = load i32, ptr %235, align 8, !tbaa !48
  %237 = invoke noundef i32 @_ZL27stbtt_GetFontOffsetForIndexPKhi(ptr noundef %233, i32 noundef %236)
          to label %238 unwind label %246

238:                                              ; preds = %230
  store i32 %237, ptr %15, align 4, !tbaa !28
  %239 = load i32, ptr %15, align 4, !tbaa !28
  %240 = icmp sge i32 %239, 0
  br i1 %240, label %241, label %242

241:                                              ; preds = %238
  br label %242

242:                                              ; preds = %241, %238
  %243 = phi i1 [ false, %238 ], [ true, %241 ]
  br i1 %243, label %244, label %245

244:                                              ; preds = %242
  br label %251

245:                                              ; preds = %242
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.1, i32 noundef 2117, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #11
  unreachable

246:                                              ; preds = %251, %230
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %8, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %9, align 4
  br label %346

250:                                              ; No predecessors!
  br label %251

251:                                              ; preds = %250, %244
  %252 = load ptr, ptr %12, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %252, i32 0, i32 0
  %254 = load ptr, ptr %13, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.ImFontConfig, ptr %254, i32 0, i32 0
  %256 = load ptr, ptr %255, align 8, !tbaa !47
  %257 = load i32, ptr %15, align 4, !tbaa !28
  %258 = invoke noundef i32 @_ZL14stbtt_InitFontP14stbtt_fontinfoPKhi(ptr noundef %253, ptr noundef %256, i32 noundef %257)
          to label %259 unwind label %246

259:                                              ; preds = %251
  %260 = icmp ne i32 %258, 0
  br i1 %260, label %262, label %261

261:                                              ; preds = %259
  store i1 false, ptr %2, align 1
  store i32 1, ptr %11, align 4
  br label %338

262:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #12
  %263 = load ptr, ptr %12, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %263, i32 0, i32 5
  %265 = load i32, ptr %264, align 8, !tbaa !37
  %266 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %7, i32 noundef %265)
          to label %267 unwind label %300

267:                                              ; preds = %262
  store ptr %266, ptr %16, align 8, !tbaa !5
  %268 = load ptr, ptr %13, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.ImFontConfig, ptr %268, i32 0, i32 10
  %270 = load ptr, ptr %269, align 8, !tbaa !49
  %271 = icmp ne ptr %270, null
  br i1 %271, label %272, label %276

272:                                              ; preds = %267
  %273 = load ptr, ptr %13, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.ImFontConfig, ptr %273, i32 0, i32 10
  %275 = load ptr, ptr %274, align 8, !tbaa !49
  br label %280

276:                                              ; preds = %267
  %277 = load ptr, ptr %3, align 8, !tbaa !5
  %278 = invoke noundef ptr @_ZN11ImFontAtlas21GetGlyphRangesDefaultEv(ptr noundef nonnull align 8 dereferenceable(1144) %277)
          to label %279 unwind label %300

279:                                              ; preds = %276
  br label %280

280:                                              ; preds = %279, %272
  %281 = phi ptr [ %275, %272 ], [ %278, %279 ]
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %282, i32 0, i32 4
  store ptr %281, ptr %283, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #12
  %284 = load ptr, ptr %12, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %284, i32 0, i32 4
  %286 = load ptr, ptr %285, align 8, !tbaa !50
  store ptr %286, ptr %17, align 8, !tbaa !5
  br label %287

287:                                              ; preds = %316, %280
  %288 = load ptr, ptr %17, align 8, !tbaa !5
  %289 = getelementptr inbounds i16, ptr %288, i64 0
  %290 = load i16, ptr %289, align 2, !tbaa !51
  %291 = icmp ne i16 %290, 0
  br i1 %291, label %292, label %297

292:                                              ; preds = %287
  %293 = load ptr, ptr %17, align 8, !tbaa !5
  %294 = getelementptr inbounds i16, ptr %293, i64 1
  %295 = load i16, ptr %294, align 2, !tbaa !51
  %296 = icmp ne i16 %295, 0
  br label %297

297:                                              ; preds = %292, %287
  %298 = phi i1 [ false, %287 ], [ %296, %292 ]
  br i1 %298, label %304, label %299

299:                                              ; preds = %297
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  br label %323

300:                                              ; preds = %323, %276, %262
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %8, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %9, align 4
  br label %345

304:                                              ; preds = %297
  %305 = load ptr, ptr %12, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %305, i32 0, i32 6
  %307 = load i32, ptr %306, align 4, !tbaa !52
  %308 = load ptr, ptr %17, align 8, !tbaa !5
  %309 = getelementptr inbounds i16, ptr %308, i64 1
  %310 = load i16, ptr %309, align 2, !tbaa !51
  %311 = zext i16 %310 to i32
  %312 = invoke noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %307, i32 noundef %311)
          to label %313 unwind label %319

313:                                              ; preds = %304
  %314 = load ptr, ptr %12, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %314, i32 0, i32 6
  store i32 %312, ptr %315, align 4, !tbaa !52
  br label %316

316:                                              ; preds = %313
  %317 = load ptr, ptr %17, align 8, !tbaa !5
  %318 = getelementptr inbounds i16, ptr %317, i64 2
  store ptr %318, ptr %17, align 8, !tbaa !5
  br label %287, !llvm.loop !53

319:                                              ; preds = %304
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %8, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  br label %345

323:                                              ; preds = %299
  %324 = load ptr, ptr %16, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %324, i32 0, i32 0
  %326 = load i32, ptr %325, align 8, !tbaa !54
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %325, align 8, !tbaa !54
  %328 = load ptr, ptr %16, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %328, i32 0, i32 1
  %330 = load i32, ptr %329, align 4, !tbaa !56
  %331 = load ptr, ptr %12, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %331, i32 0, i32 6
  %333 = load i32, ptr %332, align 4, !tbaa !52
  %334 = invoke noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %330, i32 noundef %333)
          to label %335 unwind label %300

335:                                              ; preds = %323
  %336 = load ptr, ptr %16, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %336, i32 0, i32 1
  store i32 %334, ptr %337, align 4, !tbaa !56
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  store i32 0, ptr %11, align 4
  br label %338

338:                                              ; preds = %335, %261
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  br label %339

339:                                              ; preds = %338, %229
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #12
  %340 = load i32, ptr %11, align 4
  switch i32 %340, label %349 [
    i32 0, label %341
  ]

341:                                              ; preds = %339
  br label %342

342:                                              ; preds = %341
  %343 = load i32, ptr %10, align 4, !tbaa !28
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %10, align 4, !tbaa !28
  br label %117, !llvm.loop !57

345:                                              ; preds = %319, %300
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  br label %346

346:                                              ; preds = %345, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  br label %347

347:                                              ; preds = %346, %208, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #12
  br label %348

348:                                              ; preds = %347, %166
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  br label %1355

349:                                              ; preds = %339, %124
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  %350 = load i32, ptr %11, align 4
  switch i32 %350, label %1353 [
    i32 2, label %351
  ]

351:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #12
  store i32 0, ptr %18, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #12
  store i32 0, ptr %19, align 4, !tbaa !28
  br label %352

352:                                              ; preds = %471, %351
  %353 = load i32, ptr %19, align 4, !tbaa !28
  %354 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %355 = load i32, ptr %354, align 8, !tbaa !58
  %356 = icmp slt i32 %353, %355
  br i1 %356, label %358, label %357

357:                                              ; preds = %352
  store i32 11, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #12
  br label %476

358:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #12
  %359 = load i32, ptr %19, align 4, !tbaa !28
  %360 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %359)
          to label %361 unwind label %387

361:                                              ; preds = %358
  store ptr %360, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #12
  %362 = load ptr, ptr %20, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %362, i32 0, i32 5
  %364 = load i32, ptr %363, align 8, !tbaa !37
  %365 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %7, i32 noundef %364)
          to label %366 unwind label %391

366:                                              ; preds = %361
  store ptr %365, ptr %21, align 8, !tbaa !5
  %367 = load ptr, ptr %20, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %367, i32 0, i32 8
  %369 = load ptr, ptr %20, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %369, i32 0, i32 6
  %371 = load i32, ptr %370, align 4, !tbaa !52
  %372 = add nsw i32 %371, 1
  invoke void @_ZN11ImBitVector6CreateEi(ptr noundef nonnull align 8 dereferenceable(16) %368, i32 noundef %372)
          to label %373 unwind label %391

373:                                              ; preds = %366
  %374 = load ptr, ptr %21, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %374, i32 0, i32 3
  %376 = getelementptr inbounds %struct.ImBitVector, ptr %375, i32 0, i32 0
  %377 = invoke noundef zeroext i1 @_ZNK8ImVectorIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %376)
          to label %378 unwind label %391

378:                                              ; preds = %373
  br i1 %377, label %379, label %395

379:                                              ; preds = %378
  %380 = load ptr, ptr %21, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %380, i32 0, i32 3
  %382 = load ptr, ptr %21, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %382, i32 0, i32 1
  %384 = load i32, ptr %383, align 4, !tbaa !56
  %385 = add nsw i32 %384, 1
  invoke void @_ZN11ImBitVector6CreateEi(ptr noundef nonnull align 8 dereferenceable(16) %381, i32 noundef %385)
          to label %386 unwind label %391

386:                                              ; preds = %379
  br label %395

387:                                              ; preds = %358
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %8, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %9, align 4
  br label %475

391:                                              ; preds = %379, %373, %366, %361
  %392 = landingpad { ptr, i32 }
          cleanup
  %393 = extractvalue { ptr, i32 } %392, 0
  store ptr %393, ptr %8, align 8
  %394 = extractvalue { ptr, i32 } %392, 1
  store i32 %394, ptr %9, align 4
  br label %474

395:                                              ; preds = %386, %378
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #12
  %396 = load ptr, ptr %20, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %396, i32 0, i32 4
  %398 = load ptr, ptr %397, align 8, !tbaa !50
  store ptr %398, ptr %22, align 8, !tbaa !5
  br label %399

399:                                              ; preds = %467, %395
  %400 = load ptr, ptr %22, align 8, !tbaa !5
  %401 = getelementptr inbounds i16, ptr %400, i64 0
  %402 = load i16, ptr %401, align 2, !tbaa !51
  %403 = icmp ne i16 %402, 0
  br i1 %403, label %404, label %409

404:                                              ; preds = %399
  %405 = load ptr, ptr %22, align 8, !tbaa !5
  %406 = getelementptr inbounds i16, ptr %405, i64 1
  %407 = load i16, ptr %406, align 2, !tbaa !51
  %408 = icmp ne i16 %407, 0
  br label %409

409:                                              ; preds = %404, %399
  %410 = phi i1 [ false, %399 ], [ %408, %404 ]
  br i1 %410, label %412, label %411

411:                                              ; preds = %409
  store i32 14, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #12
  br label %470

412:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #12
  %413 = load ptr, ptr %22, align 8, !tbaa !5
  %414 = getelementptr inbounds i16, ptr %413, i64 0
  %415 = load i16, ptr %414, align 2, !tbaa !51
  %416 = zext i16 %415 to i32
  store i32 %416, ptr %23, align 4, !tbaa !28
  br label %417

417:                                              ; preds = %463, %412
  %418 = load i32, ptr %23, align 4, !tbaa !28
  %419 = load ptr, ptr %22, align 8, !tbaa !5
  %420 = getelementptr inbounds i16, ptr %419, i64 1
  %421 = load i16, ptr %420, align 2, !tbaa !51
  %422 = zext i16 %421 to i32
  %423 = icmp ule i32 %418, %422
  br i1 %423, label %425, label %424

424:                                              ; preds = %417
  store i32 17, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #12
  br label %466

425:                                              ; preds = %417
  %426 = load ptr, ptr %21, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %426, i32 0, i32 3
  %428 = load i32, ptr %23, align 4, !tbaa !28
  %429 = invoke noundef zeroext i1 @_ZNK11ImBitVector7TestBitEi(ptr noundef nonnull align 8 dereferenceable(16) %427, i32 noundef %428)
          to label %430 unwind label %432

430:                                              ; preds = %425
  br i1 %429, label %431, label %436

431:                                              ; preds = %430
  br label %463

432:                                              ; preds = %456, %444, %436, %425
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %8, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #12
  br label %474

436:                                              ; preds = %430
  %437 = load ptr, ptr %20, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %437, i32 0, i32 0
  %439 = load i32, ptr %23, align 4, !tbaa !28
  %440 = invoke noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef %438, i32 noundef %439)
          to label %441 unwind label %432

441:                                              ; preds = %436
  %442 = icmp ne i32 %440, 0
  br i1 %442, label %444, label %443

443:                                              ; preds = %441
  br label %463

444:                                              ; preds = %441
  %445 = load ptr, ptr %20, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %445, i32 0, i32 7
  %447 = load i32, ptr %446, align 8, !tbaa !59
  %448 = add nsw i32 %447, 1
  store i32 %448, ptr %446, align 8, !tbaa !59
  %449 = load ptr, ptr %21, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %449, i32 0, i32 2
  %451 = load i32, ptr %450, align 8, !tbaa !60
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %450, align 8, !tbaa !60
  %453 = load ptr, ptr %20, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %453, i32 0, i32 8
  %455 = load i32, ptr %23, align 4, !tbaa !28
  invoke void @_ZN11ImBitVector6SetBitEi(ptr noundef nonnull align 8 dereferenceable(16) %454, i32 noundef %455)
          to label %456 unwind label %432

456:                                              ; preds = %444
  %457 = load ptr, ptr %21, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %457, i32 0, i32 3
  %459 = load i32, ptr %23, align 4, !tbaa !28
  invoke void @_ZN11ImBitVector6SetBitEi(ptr noundef nonnull align 8 dereferenceable(16) %458, i32 noundef %459)
          to label %460 unwind label %432

460:                                              ; preds = %456
  %461 = load i32, ptr %18, align 4, !tbaa !28
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %18, align 4, !tbaa !28
  br label %463

463:                                              ; preds = %460, %443, %431
  %464 = load i32, ptr %23, align 4, !tbaa !28
  %465 = add i32 %464, 1
  store i32 %465, ptr %23, align 4, !tbaa !28
  br label %417, !llvm.loop !61

466:                                              ; preds = %424
  br label %467

467:                                              ; preds = %466
  %468 = load ptr, ptr %22, align 8, !tbaa !5
  %469 = getelementptr inbounds i16, ptr %468, i64 2
  store ptr %469, ptr %22, align 8, !tbaa !5
  br label %399, !llvm.loop !62

470:                                              ; preds = %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  br label %471

471:                                              ; preds = %470
  %472 = load i32, ptr %19, align 4, !tbaa !28
  %473 = add nsw i32 %472, 1
  store i32 %473, ptr %19, align 4, !tbaa !28
  br label %352, !llvm.loop !63

474:                                              ; preds = %432, %391
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  br label %475

475:                                              ; preds = %474, %387
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #12
  br label %1352

476:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #12
  store i32 0, ptr %24, align 4, !tbaa !28
  br label %477

477:                                              ; preds = %517, %476
  %478 = load i32, ptr %24, align 4, !tbaa !28
  %479 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %480 = load i32, ptr %479, align 8, !tbaa !58
  %481 = icmp slt i32 %478, %480
  br i1 %481, label %483, label %482

482:                                              ; preds = %477
  store i32 20, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  br label %520

483:                                              ; preds = %477
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  %484 = load i32, ptr %24, align 4, !tbaa !28
  %485 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %484)
          to label %486 unwind label %511

486:                                              ; preds = %483
  store ptr %485, ptr %25, align 8, !tbaa !5
  %487 = load ptr, ptr %25, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %487, i32 0, i32 9
  %489 = load ptr, ptr %25, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %489, i32 0, i32 7
  %491 = load i32, ptr %490, align 8, !tbaa !59
  invoke void @_ZN8ImVectorIiE7reserveEi(ptr noundef nonnull align 8 dereferenceable(16) %488, i32 noundef %491)
          to label %492 unwind label %511

492:                                              ; preds = %486
  %493 = load ptr, ptr %25, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %493, i32 0, i32 8
  %495 = load ptr, ptr %25, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %495, i32 0, i32 9
  invoke void @_ZL30UnpackBitVectorToFlatIndexListPK11ImBitVectorP8ImVectorIiE(ptr noundef %494, ptr noundef %496)
          to label %497 unwind label %511

497:                                              ; preds = %492
  %498 = load ptr, ptr %25, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %498, i32 0, i32 8
  invoke void @_ZN11ImBitVector5ClearEv(ptr noundef nonnull align 8 dereferenceable(16) %499)
          to label %500 unwind label %511

500:                                              ; preds = %497
  %501 = load ptr, ptr %25, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %501, i32 0, i32 9
  %503 = getelementptr inbounds %struct.ImVector.14, ptr %502, i32 0, i32 0
  %504 = load i32, ptr %503, align 8, !tbaa !64
  %505 = load ptr, ptr %25, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %505, i32 0, i32 7
  %507 = load i32, ptr %506, align 8, !tbaa !59
  %508 = icmp eq i32 %504, %507
  br i1 %508, label %509, label %510

509:                                              ; preds = %500
  br label %516

510:                                              ; preds = %500
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.1, i32 noundef 2164, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #11
  unreachable

511:                                              ; preds = %497, %492, %486, %483
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %8, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  br label %1352

515:                                              ; No predecessors!
  br label %516

516:                                              ; preds = %515, %509
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  br label %517

517:                                              ; preds = %516
  %518 = load i32, ptr %24, align 4, !tbaa !28
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %24, align 4, !tbaa !28
  br label %477, !llvm.loop !65

520:                                              ; preds = %482
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #12
  store i32 0, ptr %26, align 4, !tbaa !28
  br label %521

521:                                              ; preds = %533, %520
  %522 = load i32, ptr %26, align 4, !tbaa !28
  %523 = getelementptr inbounds %struct.ImVector.12, ptr %7, i32 0, i32 0
  %524 = load i32, ptr %523, align 8, !tbaa !66
  %525 = icmp slt i32 %522, %524
  br i1 %525, label %527, label %526

526:                                              ; preds = %521
  store i32 23, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #12
  br label %540

527:                                              ; preds = %521
  %528 = load i32, ptr %26, align 4, !tbaa !28
  %529 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %7, i32 noundef %528)
          to label %530 unwind label %536

530:                                              ; preds = %527
  %531 = getelementptr inbounds %struct.ImFontBuildDstData, ptr %529, i32 0, i32 3
  invoke void @_ZN11ImBitVector5ClearEv(ptr noundef nonnull align 8 dereferenceable(16) %531)
          to label %532 unwind label %536

532:                                              ; preds = %530
  br label %533

533:                                              ; preds = %532
  %534 = load i32, ptr %26, align 4, !tbaa !28
  %535 = add nsw i32 %534, 1
  store i32 %535, ptr %26, align 4, !tbaa !28
  br label %521, !llvm.loop !67

536:                                              ; preds = %530, %527
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %8, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #12
  br label %1352

540:                                              ; preds = %526
  invoke void @_ZN8ImVectorI18ImFontBuildDstDataE5clearEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %541 unwind label %564

541:                                              ; preds = %540
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #12
  invoke void @_ZN8ImVectorI10stbrp_rectEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %542 unwind label %568

542:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #12
  invoke void @_ZN8ImVectorI16stbtt_packedcharEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28)
          to label %543 unwind label %572

543:                                              ; preds = %542
  %544 = load i32, ptr %18, align 4, !tbaa !28
  invoke void @_ZN8ImVectorI10stbrp_rectE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %27, i32 noundef %544)
          to label %545 unwind label %576

545:                                              ; preds = %543
  %546 = load i32, ptr %18, align 4, !tbaa !28
  invoke void @_ZN8ImVectorI16stbtt_packedcharE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %546)
          to label %547 unwind label %576

547:                                              ; preds = %545
  %548 = getelementptr inbounds %struct.ImVector.15, ptr %27, i32 0, i32 2
  %549 = load ptr, ptr %548, align 8, !tbaa !68
  %550 = invoke noundef i32 @_ZNK8ImVectorI10stbrp_rectE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %551 unwind label %576

551:                                              ; preds = %547
  %552 = sext i32 %550 to i64
  call void @llvm.memset.p0.i64(ptr align 4 %549, i8 0, i64 %552, i1 false)
  %553 = getelementptr inbounds %struct.ImVector.16, ptr %28, i32 0, i32 2
  %554 = load ptr, ptr %553, align 8, !tbaa !70
  %555 = invoke noundef i32 @_ZNK8ImVectorI16stbtt_packedcharE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %28)
          to label %556 unwind label %576

556:                                              ; preds = %551
  %557 = sext i32 %555 to i64
  call void @llvm.memset.p0.i64(ptr align 4 %554, i8 0, i64 %557, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #12
  store i32 0, ptr %29, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #12
  store i32 0, ptr %30, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #12
  store i32 0, ptr %31, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #12
  store i32 0, ptr %32, align 4, !tbaa !28
  br label %558

558:                                              ; preds = %805, %556
  %559 = load i32, ptr %32, align 4, !tbaa !28
  %560 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %561 = load i32, ptr %560, align 8, !tbaa !58
  %562 = icmp slt i32 %559, %561
  br i1 %562, label %580, label %563

563:                                              ; preds = %558
  store i32 26, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  br label %811

564:                                              ; preds = %540
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %8, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %9, align 4
  br label %1352

568:                                              ; preds = %541
  %569 = landingpad { ptr, i32 }
          cleanup
  %570 = extractvalue { ptr, i32 } %569, 0
  store ptr %570, ptr %8, align 8
  %571 = extractvalue { ptr, i32 } %569, 1
  store i32 %571, ptr %9, align 4
  br label %1351

572:                                              ; preds = %542
  %573 = landingpad { ptr, i32 }
          cleanup
  %574 = extractvalue { ptr, i32 } %573, 0
  store ptr %574, ptr %8, align 8
  %575 = extractvalue { ptr, i32 } %573, 1
  store i32 %575, ptr %9, align 4
  br label %1350

576:                                              ; preds = %551, %547, %545, %543
  %577 = landingpad { ptr, i32 }
          cleanup
  %578 = extractvalue { ptr, i32 } %577, 0
  store ptr %578, ptr %8, align 8
  %579 = extractvalue { ptr, i32 } %577, 1
  store i32 %579, ptr %9, align 4
  br label %1349

580:                                              ; preds = %558
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #12
  %581 = load i32, ptr %32, align 4, !tbaa !28
  %582 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %581)
          to label %583 unwind label %589

583:                                              ; preds = %580
  store ptr %582, ptr %33, align 8, !tbaa !5
  %584 = load ptr, ptr %33, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %584, i32 0, i32 7
  %586 = load i32, ptr %585, align 8, !tbaa !59
  %587 = icmp eq i32 %586, 0
  br i1 %587, label %588, label %593

588:                                              ; preds = %583
  store i32 28, ptr %11, align 4
  br label %802

589:                                              ; preds = %596, %593, %580
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %8, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %9, align 4
  br label %810

593:                                              ; preds = %583
  %594 = load i32, ptr %30, align 4, !tbaa !28
  %595 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImVectorI10stbrp_rectEixEi(ptr noundef nonnull align 8 dereferenceable(16) %27, i32 noundef %594)
          to label %596 unwind label %589

596:                                              ; preds = %593
  %597 = load ptr, ptr %33, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %597, i32 0, i32 2
  store ptr %595, ptr %598, align 8, !tbaa !72
  %599 = load i32, ptr %31, align 4, !tbaa !28
  %600 = invoke noundef nonnull align 4 dereferenceable(28) ptr @_ZN8ImVectorI16stbtt_packedcharEixEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %599)
          to label %601 unwind label %589

601:                                              ; preds = %596
  %602 = load ptr, ptr %33, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %602, i32 0, i32 3
  store ptr %600, ptr %603, align 8, !tbaa !73
  %604 = load ptr, ptr %33, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %604, i32 0, i32 7
  %606 = load i32, ptr %605, align 8, !tbaa !59
  %607 = load i32, ptr %30, align 4, !tbaa !28
  %608 = add nsw i32 %607, %606
  store i32 %608, ptr %30, align 4, !tbaa !28
  %609 = load ptr, ptr %33, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %609, i32 0, i32 7
  %611 = load i32, ptr %610, align 8, !tbaa !59
  %612 = load i32, ptr %31, align 4, !tbaa !28
  %613 = add nsw i32 %612, %611
  store i32 %613, ptr %31, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #12
  %614 = load ptr, ptr %3, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.ImFontAtlas, ptr %614, i32 0, i32 13
  %616 = load i32, ptr %32, align 4, !tbaa !28
  %617 = invoke noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %615, i32 noundef %616)
          to label %618 unwind label %696

618:                                              ; preds = %601
  store ptr %617, ptr %34, align 8, !tbaa !5
  %619 = load ptr, ptr %34, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.ImFontConfig, ptr %619, i32 0, i32 4
  %621 = load float, ptr %620, align 4, !tbaa !74
  %622 = load ptr, ptr %33, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %622, i32 0, i32 1
  %624 = getelementptr inbounds %struct.stbtt_pack_range, ptr %623, i32 0, i32 0
  store float %621, ptr %624, align 8, !tbaa !75
  %625 = load ptr, ptr %33, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %625, i32 0, i32 1
  %627 = getelementptr inbounds %struct.stbtt_pack_range, ptr %626, i32 0, i32 1
  store i32 0, ptr %627, align 4, !tbaa !76
  %628 = load ptr, ptr %33, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %628, i32 0, i32 9
  %630 = getelementptr inbounds %struct.ImVector.14, ptr %629, i32 0, i32 2
  %631 = load ptr, ptr %630, align 8, !tbaa !77
  %632 = load ptr, ptr %33, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %632, i32 0, i32 1
  %634 = getelementptr inbounds %struct.stbtt_pack_range, ptr %633, i32 0, i32 2
  store ptr %631, ptr %634, align 8, !tbaa !78
  %635 = load ptr, ptr %33, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %635, i32 0, i32 9
  %637 = getelementptr inbounds %struct.ImVector.14, ptr %636, i32 0, i32 0
  %638 = load i32, ptr %637, align 8, !tbaa !64
  %639 = load ptr, ptr %33, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %639, i32 0, i32 1
  %641 = getelementptr inbounds %struct.stbtt_pack_range, ptr %640, i32 0, i32 3
  store i32 %638, ptr %641, align 8, !tbaa !79
  %642 = load ptr, ptr %33, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %642, i32 0, i32 3
  %644 = load ptr, ptr %643, align 8, !tbaa !73
  %645 = load ptr, ptr %33, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %645, i32 0, i32 1
  %647 = getelementptr inbounds %struct.stbtt_pack_range, ptr %646, i32 0, i32 4
  store ptr %644, ptr %647, align 8, !tbaa !80
  %648 = load ptr, ptr %34, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.ImFontConfig, ptr %648, i32 0, i32 5
  %650 = load i32, ptr %649, align 8, !tbaa !81
  %651 = trunc i32 %650 to i8
  %652 = load ptr, ptr %33, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %652, i32 0, i32 1
  %654 = getelementptr inbounds %struct.stbtt_pack_range, ptr %653, i32 0, i32 5
  store i8 %651, ptr %654, align 8, !tbaa !82
  %655 = load ptr, ptr %34, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.ImFontConfig, ptr %655, i32 0, i32 6
  %657 = load i32, ptr %656, align 4, !tbaa !83
  %658 = trunc i32 %657 to i8
  %659 = load ptr, ptr %33, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %659, i32 0, i32 1
  %661 = getelementptr inbounds %struct.stbtt_pack_range, ptr %660, i32 0, i32 6
  store i8 %658, ptr %661, align 1, !tbaa !84
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #12
  %662 = load ptr, ptr %34, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.ImFontConfig, ptr %662, i32 0, i32 4
  %664 = load float, ptr %663, align 4, !tbaa !74
  %665 = fcmp ogt float %664, 0.000000e+00
  br i1 %665, label %666, label %674

666:                                              ; preds = %618
  %667 = load ptr, ptr %33, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %667, i32 0, i32 0
  %669 = load ptr, ptr %34, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.ImFontConfig, ptr %669, i32 0, i32 4
  %671 = load float, ptr %670, align 4, !tbaa !74
  %672 = invoke noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef %668, float noundef %671)
          to label %673 unwind label %700

673:                                              ; preds = %666
  br label %683

674:                                              ; preds = %618
  %675 = load ptr, ptr %33, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %675, i32 0, i32 0
  %677 = load ptr, ptr %34, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.ImFontConfig, ptr %677, i32 0, i32 4
  %679 = load float, ptr %678, align 4, !tbaa !74
  %680 = fneg float %679
  %681 = invoke noundef float @_ZL31stbtt_ScaleForMappingEmToPixelsPK14stbtt_fontinfof(ptr noundef %676, float noundef %680)
          to label %682 unwind label %700

682:                                              ; preds = %674
  br label %683

683:                                              ; preds = %682, %673
  %684 = phi float [ %672, %673 ], [ %681, %682 ]
  store float %684, ptr %35, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #12
  %685 = load ptr, ptr %3, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.ImFontAtlas, ptr %685, i32 0, i32 4
  %687 = load i32, ptr %686, align 4, !tbaa !85
  store i32 %687, ptr %36, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #12
  store i32 0, ptr %37, align 4, !tbaa !28
  br label %688

688:                                              ; preds = %798, %683
  %689 = load i32, ptr %37, align 4, !tbaa !28
  %690 = load ptr, ptr %33, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %690, i32 0, i32 9
  %692 = getelementptr inbounds %struct.ImVector.14, ptr %691, i32 0, i32 0
  %693 = load i32, ptr %692, align 8, !tbaa !64
  %694 = icmp slt i32 %689, %693
  br i1 %694, label %704, label %695

695:                                              ; preds = %688
  store i32 29, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  br label %801

696:                                              ; preds = %601
  %697 = landingpad { ptr, i32 }
          cleanup
  %698 = extractvalue { ptr, i32 } %697, 0
  store ptr %698, ptr %8, align 8
  %699 = extractvalue { ptr, i32 } %697, 1
  store i32 %699, ptr %9, align 4
  br label %809

700:                                              ; preds = %674, %666
  %701 = landingpad { ptr, i32 }
          cleanup
  %702 = extractvalue { ptr, i32 } %701, 0
  store ptr %702, ptr %8, align 8
  %703 = extractvalue { ptr, i32 } %701, 1
  store i32 %703, ptr %9, align 4
  br label %808

704:                                              ; preds = %688
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #12
  %705 = load ptr, ptr %33, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %705, i32 0, i32 0
  %707 = load ptr, ptr %33, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %707, i32 0, i32 9
  %709 = load i32, ptr %37, align 4, !tbaa !28
  %710 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN8ImVectorIiEixEi(ptr noundef nonnull align 8 dereferenceable(16) %708, i32 noundef %709)
          to label %711 unwind label %719

711:                                              ; preds = %704
  %712 = load i32, ptr %710, align 4, !tbaa !28
  %713 = invoke noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef %706, i32 noundef %712)
          to label %714 unwind label %719

714:                                              ; preds = %711
  store i32 %713, ptr %42, align 4, !tbaa !28
  %715 = load i32, ptr %42, align 4, !tbaa !28
  %716 = icmp ne i32 %715, 0
  br i1 %716, label %717, label %718

717:                                              ; preds = %714
  br label %724

718:                                              ; preds = %714
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.1, i32 noundef 2211, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #11
  unreachable

719:                                              ; preds = %724, %711, %704
  %720 = landingpad { ptr, i32 }
          cleanup
  %721 = extractvalue { ptr, i32 } %720, 0
  store ptr %721, ptr %8, align 8
  %722 = extractvalue { ptr, i32 } %720, 1
  store i32 %722, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #12
  br label %808

723:                                              ; No predecessors!
  br label %724

724:                                              ; preds = %723, %717
  %725 = load ptr, ptr %33, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %725, i32 0, i32 0
  %727 = load i32, ptr %42, align 4, !tbaa !28
  %728 = load float, ptr %35, align 4, !tbaa !22
  %729 = load ptr, ptr %34, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.ImFontConfig, ptr %729, i32 0, i32 5
  %731 = load i32, ptr %730, align 8, !tbaa !81
  %732 = sitofp i32 %731 to float
  %733 = fmul float %728, %732
  %734 = load float, ptr %35, align 4, !tbaa !22
  %735 = load ptr, ptr %34, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.ImFontConfig, ptr %735, i32 0, i32 6
  %737 = load i32, ptr %736, align 4, !tbaa !83
  %738 = sitofp i32 %737 to float
  %739 = fmul float %734, %738
  invoke void @_ZL31stbtt_GetGlyphBitmapBoxSubpixelPK14stbtt_fontinfoiffffPiS2_S2_S2_(ptr noundef %726, i32 noundef %727, float noundef %733, float noundef %739, float noundef 0.000000e+00, float noundef 0.000000e+00, ptr noundef %38, ptr noundef %39, ptr noundef %40, ptr noundef %41)
          to label %740 unwind label %719

740:                                              ; preds = %724
  %741 = load i32, ptr %40, align 4, !tbaa !28
  %742 = load i32, ptr %38, align 4, !tbaa !28
  %743 = sub nsw i32 %741, %742
  %744 = load i32, ptr %36, align 4, !tbaa !28
  %745 = add nsw i32 %743, %744
  %746 = load ptr, ptr %34, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.ImFontConfig, ptr %746, i32 0, i32 5
  %748 = load i32, ptr %747, align 8, !tbaa !81
  %749 = add nsw i32 %745, %748
  %750 = sub nsw i32 %749, 1
  %751 = trunc i32 %750 to i16
  %752 = load ptr, ptr %33, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %752, i32 0, i32 2
  %754 = load ptr, ptr %753, align 8, !tbaa !72
  %755 = load i32, ptr %37, align 4, !tbaa !28
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds %struct.stbrp_rect, ptr %754, i64 %756
  %758 = getelementptr inbounds %struct.stbrp_rect, ptr %757, i32 0, i32 1
  store i16 %751, ptr %758, align 4, !tbaa !86
  %759 = load i32, ptr %41, align 4, !tbaa !28
  %760 = load i32, ptr %39, align 4, !tbaa !28
  %761 = sub nsw i32 %759, %760
  %762 = load i32, ptr %36, align 4, !tbaa !28
  %763 = add nsw i32 %761, %762
  %764 = load ptr, ptr %34, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.ImFontConfig, ptr %764, i32 0, i32 6
  %766 = load i32, ptr %765, align 4, !tbaa !83
  %767 = add nsw i32 %763, %766
  %768 = sub nsw i32 %767, 1
  %769 = trunc i32 %768 to i16
  %770 = load ptr, ptr %33, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %770, i32 0, i32 2
  %772 = load ptr, ptr %771, align 8, !tbaa !72
  %773 = load i32, ptr %37, align 4, !tbaa !28
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds %struct.stbrp_rect, ptr %772, i64 %774
  %776 = getelementptr inbounds %struct.stbrp_rect, ptr %775, i32 0, i32 2
  store i16 %769, ptr %776, align 2, !tbaa !88
  %777 = load ptr, ptr %33, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %777, i32 0, i32 2
  %779 = load ptr, ptr %778, align 8, !tbaa !72
  %780 = load i32, ptr %37, align 4, !tbaa !28
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds %struct.stbrp_rect, ptr %779, i64 %781
  %783 = getelementptr inbounds %struct.stbrp_rect, ptr %782, i32 0, i32 1
  %784 = load i16, ptr %783, align 4, !tbaa !86
  %785 = zext i16 %784 to i32
  %786 = load ptr, ptr %33, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %786, i32 0, i32 2
  %788 = load ptr, ptr %787, align 8, !tbaa !72
  %789 = load i32, ptr %37, align 4, !tbaa !28
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds %struct.stbrp_rect, ptr %788, i64 %790
  %792 = getelementptr inbounds %struct.stbrp_rect, ptr %791, i32 0, i32 2
  %793 = load i16, ptr %792, align 2, !tbaa !88
  %794 = zext i16 %793 to i32
  %795 = mul nsw i32 %785, %794
  %796 = load i32, ptr %29, align 4, !tbaa !28
  %797 = add nsw i32 %796, %795
  store i32 %797, ptr %29, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %798

798:                                              ; preds = %740
  %799 = load i32, ptr %37, align 4, !tbaa !28
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %37, align 4, !tbaa !28
  br label %688, !llvm.loop !89

801:                                              ; preds = %695
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #12
  store i32 0, ptr %11, align 4
  br label %802

802:                                              ; preds = %801, %588
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  %803 = load i32, ptr %11, align 4
  switch i32 %803, label %1362 [
    i32 0, label %804
    i32 28, label %805
  ]

804:                                              ; preds = %802
  br label %805

805:                                              ; preds = %804, %802
  %806 = load i32, ptr %32, align 4, !tbaa !28
  %807 = add nsw i32 %806, 1
  store i32 %807, ptr %32, align 4, !tbaa !28
  br label %558, !llvm.loop !90

808:                                              ; preds = %719, %700
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  br label %809

809:                                              ; preds = %808, %696
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #12
  br label %810

810:                                              ; preds = %809, %589
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  br label %1348

811:                                              ; preds = %563
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #12
  %812 = load i32, ptr %29, align 4, !tbaa !28
  %813 = sitofp i32 %812 to float
  %814 = call float @sqrtf(float noundef %813) #12
  %815 = fptosi float %814 to i32
  %816 = add nsw i32 %815, 1
  store i32 %816, ptr %43, align 4, !tbaa !28
  %817 = load ptr, ptr %3, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.ImFontAtlas, ptr %817, i32 0, i32 8
  store i32 0, ptr %818, align 4, !tbaa !19
  %819 = load ptr, ptr %3, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.ImFontAtlas, ptr %819, i32 0, i32 3
  %821 = load i32, ptr %820, align 8, !tbaa !91
  %822 = icmp sgt i32 %821, 0
  br i1 %822, label %823, label %829

823:                                              ; preds = %811
  %824 = load ptr, ptr %3, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.ImFontAtlas, ptr %824, i32 0, i32 3
  %826 = load i32, ptr %825, align 8, !tbaa !91
  %827 = load ptr, ptr %3, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.ImFontAtlas, ptr %827, i32 0, i32 7
  store i32 %826, ptr %828, align 8, !tbaa !20
  br label %851

829:                                              ; preds = %811
  %830 = load i32, ptr %43, align 4, !tbaa !28
  %831 = sitofp i32 %830 to float
  %832 = fcmp oge float %831, 0x40A6666660000000
  br i1 %832, label %833, label %834

833:                                              ; preds = %829
  br label %847

834:                                              ; preds = %829
  %835 = load i32, ptr %43, align 4, !tbaa !28
  %836 = sitofp i32 %835 to float
  %837 = fcmp oge float %836, 0x4096666660000000
  br i1 %837, label %838, label %839

838:                                              ; preds = %834
  br label %845

839:                                              ; preds = %834
  %840 = load i32, ptr %43, align 4, !tbaa !28
  %841 = sitofp i32 %840 to float
  %842 = fcmp oge float %841, 0x4086666660000000
  %843 = zext i1 %842 to i64
  %844 = select i1 %842, i32 1024, i32 512
  br label %845

845:                                              ; preds = %839, %838
  %846 = phi i32 [ 2048, %838 ], [ %844, %839 ]
  br label %847

847:                                              ; preds = %845, %833
  %848 = phi i32 [ 4096, %833 ], [ %846, %845 ]
  %849 = load ptr, ptr %3, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.ImFontAtlas, ptr %849, i32 0, i32 7
  store i32 %848, ptr %850, align 8, !tbaa !20
  br label %851

851:                                              ; preds = %847, %823
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #12
  store i32 32768, ptr %44, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #12
  call void @llvm.memset.p0.i64(ptr align 8 %45, i8 0, i64 64, i1 false)
  %852 = load ptr, ptr %3, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.ImFontAtlas, ptr %852, i32 0, i32 7
  %854 = load i32, ptr %853, align 8, !tbaa !20
  %855 = load ptr, ptr %3, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.ImFontAtlas, ptr %855, i32 0, i32 4
  %857 = load i32, ptr %856, align 4, !tbaa !85
  %858 = invoke noundef i32 @_ZL15stbtt_PackBeginP18stbtt_pack_contextPhiiiiPv(ptr noundef %45, ptr noundef null, i32 noundef %854, i32 noundef 32768, i32 noundef 0, i32 noundef %857, ptr noundef null)
          to label %859 unwind label %870

859:                                              ; preds = %851
  %860 = load ptr, ptr %3, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.stbtt_pack_context, ptr %45, i32 0, i32 1
  %862 = load ptr, ptr %861, align 8, !tbaa !92
  invoke void @_Z31ImFontAtlasBuildPackCustomRectsP11ImFontAtlasPv(ptr noundef %860, ptr noundef %862)
          to label %863 unwind label %870

863:                                              ; preds = %859
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #12
  store i32 0, ptr %46, align 4, !tbaa !28
  br label %864

864:                                              ; preds = %954, %863
  %865 = load i32, ptr %46, align 4, !tbaa !28
  %866 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %867 = load i32, ptr %866, align 8, !tbaa !58
  %868 = icmp slt i32 %865, %867
  br i1 %868, label %874, label %869

869:                                              ; preds = %864
  store i32 32, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %958

870:                                              ; preds = %1344, %1133, %1132, %989, %969, %859, %851
  %871 = landingpad { ptr, i32 }
          cleanup
  %872 = extractvalue { ptr, i32 } %871, 0
  store ptr %872, ptr %8, align 8
  %873 = extractvalue { ptr, i32 } %871, 1
  store i32 %873, ptr %9, align 4
  br label %1347

874:                                              ; preds = %864
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #12
  %875 = load i32, ptr %46, align 4, !tbaa !28
  %876 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %875)
          to label %877 unwind label %883

877:                                              ; preds = %874
  store ptr %876, ptr %47, align 8, !tbaa !5
  %878 = load ptr, ptr %47, align 8, !tbaa !5
  %879 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %878, i32 0, i32 7
  %880 = load i32, ptr %879, align 8, !tbaa !59
  %881 = icmp eq i32 %880, 0
  br i1 %881, label %882, label %887

882:                                              ; preds = %877
  store i32 34, ptr %11, align 4
  br label %951

883:                                              ; preds = %887, %874
  %884 = landingpad { ptr, i32 }
          cleanup
  %885 = extractvalue { ptr, i32 } %884, 0
  store ptr %885, ptr %8, align 8
  %886 = extractvalue { ptr, i32 } %884, 1
  store i32 %886, ptr %9, align 4
  br label %957

887:                                              ; preds = %877
  %888 = getelementptr inbounds %struct.stbtt_pack_context, ptr %45, i32 0, i32 1
  %889 = load ptr, ptr %888, align 8, !tbaa !92
  %890 = load ptr, ptr %47, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %890, i32 0, i32 2
  %892 = load ptr, ptr %891, align 8, !tbaa !72
  %893 = load ptr, ptr %47, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %893, i32 0, i32 7
  %895 = load i32, ptr %894, align 8, !tbaa !59
  %896 = invoke noundef i32 @_ZL16stbrp_pack_rectsP13stbrp_contextP10stbrp_recti(ptr noundef %889, ptr noundef %892, i32 noundef %895)
          to label %897 unwind label %883

897:                                              ; preds = %887
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #12
  store i32 0, ptr %48, align 4, !tbaa !28
  br label %898

898:                                              ; preds = %947, %897
  %899 = load i32, ptr %48, align 4, !tbaa !28
  %900 = load ptr, ptr %47, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %900, i32 0, i32 7
  %902 = load i32, ptr %901, align 8, !tbaa !59
  %903 = icmp slt i32 %899, %902
  br i1 %903, label %905, label %904

904:                                              ; preds = %898
  store i32 35, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #12
  br label %950

905:                                              ; preds = %898
  %906 = load ptr, ptr %47, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %906, i32 0, i32 2
  %908 = load ptr, ptr %907, align 8, !tbaa !72
  %909 = load i32, ptr %48, align 4, !tbaa !28
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds %struct.stbrp_rect, ptr %908, i64 %910
  %912 = getelementptr inbounds %struct.stbrp_rect, ptr %911, i32 0, i32 5
  %913 = load i32, ptr %912, align 4, !tbaa !94
  %914 = icmp ne i32 %913, 0
  br i1 %914, label %915, label %946

915:                                              ; preds = %905
  %916 = load ptr, ptr %3, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.ImFontAtlas, ptr %916, i32 0, i32 8
  %918 = load i32, ptr %917, align 4, !tbaa !19
  %919 = load ptr, ptr %47, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %919, i32 0, i32 2
  %921 = load ptr, ptr %920, align 8, !tbaa !72
  %922 = load i32, ptr %48, align 4, !tbaa !28
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds %struct.stbrp_rect, ptr %921, i64 %923
  %925 = getelementptr inbounds %struct.stbrp_rect, ptr %924, i32 0, i32 4
  %926 = load i16, ptr %925, align 2, !tbaa !95
  %927 = zext i16 %926 to i32
  %928 = load ptr, ptr %47, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %928, i32 0, i32 2
  %930 = load ptr, ptr %929, align 8, !tbaa !72
  %931 = load i32, ptr %48, align 4, !tbaa !28
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds %struct.stbrp_rect, ptr %930, i64 %932
  %934 = getelementptr inbounds %struct.stbrp_rect, ptr %933, i32 0, i32 2
  %935 = load i16, ptr %934, align 2, !tbaa !88
  %936 = zext i16 %935 to i32
  %937 = add nsw i32 %927, %936
  %938 = invoke noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %918, i32 noundef %937)
          to label %939 unwind label %942

939:                                              ; preds = %915
  %940 = load ptr, ptr %3, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.ImFontAtlas, ptr %940, i32 0, i32 8
  store i32 %938, ptr %941, align 4, !tbaa !19
  br label %946

942:                                              ; preds = %915
  %943 = landingpad { ptr, i32 }
          cleanup
  %944 = extractvalue { ptr, i32 } %943, 0
  store ptr %944, ptr %8, align 8
  %945 = extractvalue { ptr, i32 } %943, 1
  store i32 %945, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #12
  br label %957

946:                                              ; preds = %939, %905
  br label %947

947:                                              ; preds = %946
  %948 = load i32, ptr %48, align 4, !tbaa !28
  %949 = add nsw i32 %948, 1
  store i32 %949, ptr %48, align 4, !tbaa !28
  br label %898, !llvm.loop !96

950:                                              ; preds = %904
  store i32 0, ptr %11, align 4
  br label %951

951:                                              ; preds = %950, %882
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #12
  %952 = load i32, ptr %11, align 4
  switch i32 %952, label %1362 [
    i32 0, label %953
    i32 34, label %954
  ]

953:                                              ; preds = %951
  br label %954

954:                                              ; preds = %953, %951
  %955 = load i32, ptr %46, align 4, !tbaa !28
  %956 = add nsw i32 %955, 1
  store i32 %956, ptr %46, align 4, !tbaa !28
  br label %864, !llvm.loop !97

957:                                              ; preds = %942, %883
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %1347

958:                                              ; preds = %869
  %959 = load ptr, ptr %3, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.ImFontAtlas, ptr %959, i32 0, i32 1
  %961 = load i32, ptr %960, align 4, !tbaa !98
  %962 = and i32 %961, 1
  %963 = icmp ne i32 %962, 0
  br i1 %963, label %964, label %969

964:                                              ; preds = %958
  %965 = load ptr, ptr %3, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.ImFontAtlas, ptr %965, i32 0, i32 8
  %967 = load i32, ptr %966, align 4, !tbaa !19
  %968 = add nsw i32 %967, 1
  br label %975

969:                                              ; preds = %958
  %970 = load ptr, ptr %3, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.ImFontAtlas, ptr %970, i32 0, i32 8
  %972 = load i32, ptr %971, align 4, !tbaa !19
  %973 = invoke noundef i32 @_ZL17ImUpperPowerOfTwoi(i32 noundef %972)
          to label %974 unwind label %870

974:                                              ; preds = %969
  br label %975

975:                                              ; preds = %974, %964
  %976 = phi i32 [ %968, %964 ], [ %973, %974 ]
  %977 = load ptr, ptr %3, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.ImFontAtlas, ptr %977, i32 0, i32 8
  store i32 %976, ptr %978, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #12
  %979 = load ptr, ptr %3, align 8, !tbaa !5
  %980 = getelementptr inbounds %struct.ImFontAtlas, ptr %979, i32 0, i32 7
  %981 = load i32, ptr %980, align 8, !tbaa !20
  %982 = sitofp i32 %981 to float
  %983 = fdiv float 1.000000e+00, %982
  %984 = load ptr, ptr %3, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.ImFontAtlas, ptr %984, i32 0, i32 8
  %986 = load i32, ptr %985, align 4, !tbaa !19
  %987 = sitofp i32 %986 to float
  %988 = fdiv float 1.000000e+00, %987
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %49, float noundef %983, float noundef %988)
          to label %989 unwind label %1029

989:                                              ; preds = %975
  %990 = load ptr, ptr %3, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.ImFontAtlas, ptr %990, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %991, ptr align 4 %49, i64 8, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  %992 = load ptr, ptr %3, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.ImFontAtlas, ptr %992, i32 0, i32 7
  %994 = load i32, ptr %993, align 8, !tbaa !20
  %995 = load ptr, ptr %3, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.ImFontAtlas, ptr %995, i32 0, i32 8
  %997 = load i32, ptr %996, align 4, !tbaa !19
  %998 = mul nsw i32 %994, %997
  %999 = sext i32 %998 to i64
  %1000 = invoke noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %999)
          to label %1001 unwind label %870

1001:                                             ; preds = %989
  %1002 = load ptr, ptr %3, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.ImFontAtlas, ptr %1002, i32 0, i32 5
  store ptr %1000, ptr %1003, align 8, !tbaa !99
  %1004 = load ptr, ptr %3, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.ImFontAtlas, ptr %1004, i32 0, i32 5
  %1006 = load ptr, ptr %1005, align 8, !tbaa !99
  %1007 = load ptr, ptr %3, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.ImFontAtlas, ptr %1007, i32 0, i32 7
  %1009 = load i32, ptr %1008, align 8, !tbaa !20
  %1010 = load ptr, ptr %3, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.ImFontAtlas, ptr %1010, i32 0, i32 8
  %1012 = load i32, ptr %1011, align 4, !tbaa !19
  %1013 = mul nsw i32 %1009, %1012
  %1014 = sext i32 %1013 to i64
  call void @llvm.memset.p0.i64(ptr align 1 %1006, i8 0, i64 %1014, i1 false)
  %1015 = load ptr, ptr %3, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.ImFontAtlas, ptr %1015, i32 0, i32 5
  %1017 = load ptr, ptr %1016, align 8, !tbaa !99
  %1018 = getelementptr inbounds %struct.stbtt_pack_context, ptr %45, i32 0, i32 9
  store ptr %1017, ptr %1018, align 8, !tbaa !100
  %1019 = load ptr, ptr %3, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct.ImFontAtlas, ptr %1019, i32 0, i32 8
  %1021 = load i32, ptr %1020, align 4, !tbaa !19
  %1022 = getelementptr inbounds %struct.stbtt_pack_context, ptr %45, i32 0, i32 3
  store i32 %1021, ptr %1022, align 4, !tbaa !101
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #12
  store i32 0, ptr %50, align 4, !tbaa !28
  br label %1023

1023:                                             ; preds = %1128, %1001
  %1024 = load i32, ptr %50, align 4, !tbaa !28
  %1025 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %1026 = load i32, ptr %1025, align 8, !tbaa !58
  %1027 = icmp slt i32 %1024, %1026
  br i1 %1027, label %1033, label %1028

1028:                                             ; preds = %1023
  store i32 38, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  br label %1132

1029:                                             ; preds = %975
  %1030 = landingpad { ptr, i32 }
          cleanup
  %1031 = extractvalue { ptr, i32 } %1030, 0
  store ptr %1031, ptr %8, align 8
  %1032 = extractvalue { ptr, i32 } %1030, 1
  store i32 %1032, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  br label %1347

1033:                                             ; preds = %1023
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #12
  %1034 = load ptr, ptr %3, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.ImFontAtlas, ptr %1034, i32 0, i32 13
  %1036 = load i32, ptr %50, align 4, !tbaa !28
  %1037 = invoke noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1035, i32 noundef %1036)
          to label %1038 unwind label %1047

1038:                                             ; preds = %1033
  store ptr %1037, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #12
  %1039 = load i32, ptr %50, align 4, !tbaa !28
  %1040 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %1039)
          to label %1041 unwind label %1051

1041:                                             ; preds = %1038
  store ptr %1040, ptr %52, align 8, !tbaa !5
  %1042 = load ptr, ptr %52, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1042, i32 0, i32 7
  %1044 = load i32, ptr %1043, align 8, !tbaa !59
  %1045 = icmp eq i32 %1044, 0
  br i1 %1045, label %1046, label %1055

1046:                                             ; preds = %1041
  store i32 40, ptr %11, align 4
  br label %1125

1047:                                             ; preds = %1033
  %1048 = landingpad { ptr, i32 }
          cleanup
  %1049 = extractvalue { ptr, i32 } %1048, 0
  store ptr %1049, ptr %8, align 8
  %1050 = extractvalue { ptr, i32 } %1048, 1
  store i32 %1050, ptr %9, align 4
  br label %1131

1051:                                             ; preds = %1055, %1038
  %1052 = landingpad { ptr, i32 }
          cleanup
  %1053 = extractvalue { ptr, i32 } %1052, 0
  store ptr %1053, ptr %8, align 8
  %1054 = extractvalue { ptr, i32 } %1052, 1
  store i32 %1054, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  br label %1131

1055:                                             ; preds = %1041
  %1056 = load ptr, ptr %52, align 8, !tbaa !5
  %1057 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1056, i32 0, i32 0
  %1058 = load ptr, ptr %52, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1058, i32 0, i32 1
  %1060 = load ptr, ptr %52, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1060, i32 0, i32 2
  %1062 = load ptr, ptr %1061, align 8, !tbaa !72
  %1063 = invoke noundef i32 @_ZL35stbtt_PackFontRangesRenderIntoRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef %45, ptr noundef %1057, ptr noundef %1059, i32 noundef 1, ptr noundef %1062)
          to label %1064 unwind label %1051

1064:                                             ; preds = %1055
  %1065 = load ptr, ptr %51, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.ImFontConfig, ptr %1065, i32 0, i32 15
  %1067 = load float, ptr %1066, align 8, !tbaa !102
  %1068 = fcmp une float %1067, 1.000000e+00
  br i1 %1068, label %1069, label %1122

1069:                                             ; preds = %1064
  call void @llvm.lifetime.start.p0(i64 256, ptr %53) #12
  %1070 = getelementptr inbounds [256 x i8], ptr %53, i64 0, i64 0
  %1071 = load ptr, ptr %51, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.ImFontConfig, ptr %1071, i32 0, i32 15
  %1073 = load float, ptr %1072, align 8, !tbaa !102
  call void @_Z39ImFontAtlasBuildMultiplyCalcLookupTablePhf(ptr noundef %1070, float noundef %1073)
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #12
  %1074 = load ptr, ptr %52, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1074, i32 0, i32 2
  %1076 = load ptr, ptr %1075, align 8, !tbaa !72
  %1077 = getelementptr inbounds %struct.stbrp_rect, ptr %1076, i64 0
  store ptr %1077, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #12
  store i32 0, ptr %55, align 4, !tbaa !28
  br label %1078

1078:                                             ; preds = %1116, %1069
  %1079 = load i32, ptr %55, align 4, !tbaa !28
  %1080 = load ptr, ptr %52, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1080, i32 0, i32 7
  %1082 = load i32, ptr %1081, align 8, !tbaa !59
  %1083 = icmp slt i32 %1079, %1082
  br i1 %1083, label %1085, label %1084

1084:                                             ; preds = %1078
  store i32 41, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  br label %1121

1085:                                             ; preds = %1078
  %1086 = load ptr, ptr %54, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.stbrp_rect, ptr %1086, i32 0, i32 5
  %1088 = load i32, ptr %1087, align 4, !tbaa !94
  %1089 = icmp ne i32 %1088, 0
  br i1 %1089, label %1090, label %1115

1090:                                             ; preds = %1085
  %1091 = getelementptr inbounds [256 x i8], ptr %53, i64 0, i64 0
  %1092 = load ptr, ptr %3, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.ImFontAtlas, ptr %1092, i32 0, i32 5
  %1094 = load ptr, ptr %1093, align 8, !tbaa !99
  %1095 = load ptr, ptr %54, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.stbrp_rect, ptr %1095, i32 0, i32 3
  %1097 = load i16, ptr %1096, align 4, !tbaa !103
  %1098 = zext i16 %1097 to i32
  %1099 = load ptr, ptr %54, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.stbrp_rect, ptr %1099, i32 0, i32 4
  %1101 = load i16, ptr %1100, align 2, !tbaa !95
  %1102 = zext i16 %1101 to i32
  %1103 = load ptr, ptr %54, align 8, !tbaa !5
  %1104 = getelementptr inbounds %struct.stbrp_rect, ptr %1103, i32 0, i32 1
  %1105 = load i16, ptr %1104, align 4, !tbaa !86
  %1106 = zext i16 %1105 to i32
  %1107 = load ptr, ptr %54, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.stbrp_rect, ptr %1107, i32 0, i32 2
  %1109 = load i16, ptr %1108, align 2, !tbaa !88
  %1110 = zext i16 %1109 to i32
  %1111 = load ptr, ptr %3, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.ImFontAtlas, ptr %1111, i32 0, i32 7
  %1113 = load i32, ptr %1112, align 8, !tbaa !20
  %1114 = mul nsw i32 %1113, 1
  call void @_Z34ImFontAtlasBuildMultiplyRectAlpha8PKhPhiiiii(ptr noundef %1091, ptr noundef %1094, i32 noundef %1098, i32 noundef %1102, i32 noundef %1106, i32 noundef %1110, i32 noundef %1114)
  br label %1115

1115:                                             ; preds = %1090, %1085
  br label %1116

1116:                                             ; preds = %1115
  %1117 = load i32, ptr %55, align 4, !tbaa !28
  %1118 = add nsw i32 %1117, 1
  store i32 %1118, ptr %55, align 4, !tbaa !28
  %1119 = load ptr, ptr %54, align 8, !tbaa !5
  %1120 = getelementptr inbounds %struct.stbrp_rect, ptr %1119, i32 1
  store ptr %1120, ptr %54, align 8, !tbaa !5
  br label %1078, !llvm.loop !104

1121:                                             ; preds = %1084
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr %53) #12
  br label %1122

1122:                                             ; preds = %1121, %1064
  %1123 = load ptr, ptr %52, align 8, !tbaa !5
  %1124 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1123, i32 0, i32 2
  store ptr null, ptr %1124, align 8, !tbaa !72
  store i32 0, ptr %11, align 4
  br label %1125

1125:                                             ; preds = %1122, %1046
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #12
  %1126 = load i32, ptr %11, align 4
  switch i32 %1126, label %1362 [
    i32 0, label %1127
    i32 40, label %1128
  ]

1127:                                             ; preds = %1125
  br label %1128

1128:                                             ; preds = %1127, %1125
  %1129 = load i32, ptr %50, align 4, !tbaa !28
  %1130 = add nsw i32 %1129, 1
  store i32 %1130, ptr %50, align 4, !tbaa !28
  br label %1023, !llvm.loop !105

1131:                                             ; preds = %1051, %1047
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  br label %1347

1132:                                             ; preds = %1028
  invoke void @_ZL13stbtt_PackEndP18stbtt_pack_context(ptr noundef %45)
          to label %1133 unwind label %870

1133:                                             ; preds = %1132
  invoke void @_ZN8ImVectorI10stbrp_rectE5clearEv(ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %1134 unwind label %870

1134:                                             ; preds = %1133
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #12
  store i32 0, ptr %56, align 4, !tbaa !28
  br label %1135

1135:                                             ; preds = %1317, %1134
  %1136 = load i32, ptr %56, align 4, !tbaa !28
  %1137 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %1138 = load i32, ptr %1137, align 8, !tbaa !58
  %1139 = icmp slt i32 %1136, %1138
  br i1 %1139, label %1141, label %1140

1140:                                             ; preds = %1135
  store i32 44, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  br label %1326

1141:                                             ; preds = %1135
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #12
  %1142 = load i32, ptr %56, align 4, !tbaa !28
  %1143 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %1142)
          to label %1144 unwind label %1150

1144:                                             ; preds = %1141
  store ptr %1143, ptr %57, align 8, !tbaa !5
  %1145 = load ptr, ptr %57, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1145, i32 0, i32 7
  %1147 = load i32, ptr %1146, align 8, !tbaa !59
  %1148 = icmp eq i32 %1147, 0
  br i1 %1148, label %1149, label %1154

1149:                                             ; preds = %1144
  store i32 46, ptr %11, align 4
  br label %1314

1150:                                             ; preds = %1141
  %1151 = landingpad { ptr, i32 }
          cleanup
  %1152 = extractvalue { ptr, i32 } %1151, 0
  store ptr %1152, ptr %8, align 8
  %1153 = extractvalue { ptr, i32 } %1151, 1
  store i32 %1153, ptr %9, align 4
  br label %1325

1154:                                             ; preds = %1144
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #12
  %1155 = load ptr, ptr %3, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.ImFontAtlas, ptr %1155, i32 0, i32 13
  %1157 = load i32, ptr %56, align 4, !tbaa !28
  %1158 = invoke noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1156, i32 noundef %1157)
          to label %1159 unwind label %1225

1159:                                             ; preds = %1154
  store ptr %1158, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #12
  %1160 = load ptr, ptr %58, align 8, !tbaa !5
  %1161 = getelementptr inbounds %struct.ImFontConfig, ptr %1160, i32 0, i32 18
  %1162 = load ptr, ptr %1161, align 8, !tbaa !29
  store ptr %1162, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #12
  %1163 = load ptr, ptr %57, align 8, !tbaa !5
  %1164 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1163, i32 0, i32 0
  %1165 = load ptr, ptr %58, align 8, !tbaa !5
  %1166 = getelementptr inbounds %struct.ImFontConfig, ptr %1165, i32 0, i32 4
  %1167 = load float, ptr %1166, align 4, !tbaa !74
  %1168 = invoke noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef %1164, float noundef %1167)
          to label %1169 unwind label %1229

1169:                                             ; preds = %1159
  store float %1168, ptr %60, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #12
  %1170 = load ptr, ptr %57, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1170, i32 0, i32 0
  invoke void @_ZL21stbtt_GetFontVMetricsPK14stbtt_fontinfoPiS2_S2_(ptr noundef %1171, ptr noundef %61, ptr noundef %62, ptr noundef %63)
          to label %1172 unwind label %1233

1172:                                             ; preds = %1169
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #12
  %1173 = load i32, ptr %61, align 4, !tbaa !28
  %1174 = sitofp i32 %1173 to float
  %1175 = load float, ptr %60, align 4, !tbaa !22
  %1176 = load i32, ptr %61, align 4, !tbaa !28
  %1177 = sitofp i32 %1176 to float
  %1178 = fcmp ogt float %1177, 0.000000e+00
  %1179 = zext i1 %1178 to i64
  %1180 = select i1 %1178, i32 1, i32 -1
  %1181 = sitofp i32 %1180 to float
  %1182 = call float @llvm.fmuladd.f32(float %1174, float %1175, float %1181)
  %1183 = invoke noundef float @_ZL7ImFloorf(float noundef %1182)
          to label %1184 unwind label %1237

1184:                                             ; preds = %1172
  store float %1183, ptr %64, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #12
  %1185 = load i32, ptr %62, align 4, !tbaa !28
  %1186 = sitofp i32 %1185 to float
  %1187 = load float, ptr %60, align 4, !tbaa !22
  %1188 = load i32, ptr %62, align 4, !tbaa !28
  %1189 = sitofp i32 %1188 to float
  %1190 = fcmp ogt float %1189, 0.000000e+00
  %1191 = zext i1 %1190 to i64
  %1192 = select i1 %1190, i32 1, i32 -1
  %1193 = sitofp i32 %1192 to float
  %1194 = call float @llvm.fmuladd.f32(float %1186, float %1187, float %1193)
  %1195 = invoke noundef float @_ZL7ImFloorf(float noundef %1194)
          to label %1196 unwind label %1241

1196:                                             ; preds = %1184
  store float %1195, ptr %65, align 4, !tbaa !22
  %1197 = load ptr, ptr %3, align 8, !tbaa !5
  %1198 = load ptr, ptr %59, align 8, !tbaa !5
  %1199 = load ptr, ptr %58, align 8, !tbaa !5
  %1200 = load float, ptr %64, align 4, !tbaa !22
  %1201 = load float, ptr %65, align 4, !tbaa !22
  invoke void @_Z25ImFontAtlasBuildSetupFontP11ImFontAtlasP6ImFontP12ImFontConfigff(ptr noundef %1197, ptr noundef %1198, ptr noundef %1199, float noundef %1200, float noundef %1201)
          to label %1202 unwind label %1241

1202:                                             ; preds = %1196
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #12
  %1203 = load ptr, ptr %58, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct.ImFontConfig, ptr %1203, i32 0, i32 9
  %1205 = getelementptr inbounds %struct.ImVec2, ptr %1204, i32 0, i32 0
  %1206 = load float, ptr %1205, align 4, !tbaa !106
  store float %1206, ptr %66, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #12
  %1207 = load ptr, ptr %58, align 8, !tbaa !5
  %1208 = getelementptr inbounds %struct.ImFontConfig, ptr %1207, i32 0, i32 9
  %1209 = getelementptr inbounds %struct.ImVec2, ptr %1208, i32 0, i32 1
  %1210 = load float, ptr %1209, align 4, !tbaa !107
  %1211 = load ptr, ptr %59, align 8, !tbaa !5
  %1212 = getelementptr inbounds %struct.ImFont, ptr %1211, i32 0, i32 15
  %1213 = load float, ptr %1212, align 4, !tbaa !108
  %1214 = fadd float %1213, 5.000000e-01
  %1215 = fptosi float %1214 to i32
  %1216 = sitofp i32 %1215 to float
  %1217 = fadd float %1210, %1216
  store float %1217, ptr %67, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #12
  store i32 0, ptr %68, align 4, !tbaa !28
  br label %1218

1218:                                             ; preds = %1301, %1202
  %1219 = load i32, ptr %68, align 4, !tbaa !28
  %1220 = load ptr, ptr %57, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1220, i32 0, i32 7
  %1222 = load i32, ptr %1221, align 8, !tbaa !59
  %1223 = icmp slt i32 %1219, %1222
  br i1 %1223, label %1245, label %1224

1224:                                             ; preds = %1218
  store i32 47, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #12
  br label %1313

1225:                                             ; preds = %1154
  %1226 = landingpad { ptr, i32 }
          cleanup
  %1227 = extractvalue { ptr, i32 } %1226, 0
  store ptr %1227, ptr %8, align 8
  %1228 = extractvalue { ptr, i32 } %1226, 1
  store i32 %1228, ptr %9, align 4
  br label %1324

1229:                                             ; preds = %1159
  %1230 = landingpad { ptr, i32 }
          cleanup
  %1231 = extractvalue { ptr, i32 } %1230, 0
  store ptr %1231, ptr %8, align 8
  %1232 = extractvalue { ptr, i32 } %1230, 1
  store i32 %1232, ptr %9, align 4
  br label %1323

1233:                                             ; preds = %1169
  %1234 = landingpad { ptr, i32 }
          cleanup
  %1235 = extractvalue { ptr, i32 } %1234, 0
  store ptr %1235, ptr %8, align 8
  %1236 = extractvalue { ptr, i32 } %1234, 1
  store i32 %1236, ptr %9, align 4
  br label %1322

1237:                                             ; preds = %1172
  %1238 = landingpad { ptr, i32 }
          cleanup
  %1239 = extractvalue { ptr, i32 } %1238, 0
  store ptr %1239, ptr %8, align 8
  %1240 = extractvalue { ptr, i32 } %1238, 1
  store i32 %1240, ptr %9, align 4
  br label %1321

1241:                                             ; preds = %1196, %1184
  %1242 = landingpad { ptr, i32 }
          cleanup
  %1243 = extractvalue { ptr, i32 } %1242, 0
  store ptr %1243, ptr %8, align 8
  %1244 = extractvalue { ptr, i32 } %1242, 1
  store i32 %1244, ptr %9, align 4
  br label %1320

1245:                                             ; preds = %1218
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #12
  %1246 = load ptr, ptr %57, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1246, i32 0, i32 9
  %1248 = load i32, ptr %68, align 4, !tbaa !28
  %1249 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN8ImVectorIiEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1247, i32 noundef %1248)
          to label %1250 unwind label %1304

1250:                                             ; preds = %1245
  %1251 = load i32, ptr %1249, align 4, !tbaa !28
  store i32 %1251, ptr %69, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #12
  %1252 = load ptr, ptr %57, align 8, !tbaa !5
  %1253 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1252, i32 0, i32 3
  %1254 = load ptr, ptr %1253, align 8, !tbaa !73
  %1255 = load i32, ptr %68, align 4, !tbaa !28
  %1256 = sext i32 %1255 to i64
  %1257 = getelementptr inbounds %struct.stbtt_packedchar, ptr %1254, i64 %1256
  store ptr %1257, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #12
  store float 0.000000e+00, ptr %72, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #12
  store float 0.000000e+00, ptr %73, align 4, !tbaa !22
  %1258 = load ptr, ptr %57, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.ImFontBuildSrcData, ptr %1258, i32 0, i32 3
  %1260 = load ptr, ptr %1259, align 8, !tbaa !73
  %1261 = load ptr, ptr %3, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.ImFontAtlas, ptr %1261, i32 0, i32 7
  %1263 = load i32, ptr %1262, align 8, !tbaa !20
  %1264 = load ptr, ptr %3, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.ImFontAtlas, ptr %1264, i32 0, i32 8
  %1266 = load i32, ptr %1265, align 4, !tbaa !19
  %1267 = load i32, ptr %68, align 4, !tbaa !28
  invoke void @_ZL19stbtt_GetPackedQuadPK16stbtt_packedchariiiPfS2_P18stbtt_aligned_quadi(ptr noundef %1260, i32 noundef %1263, i32 noundef %1266, i32 noundef %1267, ptr noundef %72, ptr noundef %73, ptr noundef %71, i32 noundef 0)
          to label %1268 unwind label %1308

1268:                                             ; preds = %1250
  %1269 = load ptr, ptr %59, align 8, !tbaa !5
  %1270 = load ptr, ptr %58, align 8, !tbaa !5
  %1271 = load i32, ptr %69, align 4, !tbaa !28
  %1272 = trunc i32 %1271 to i16
  %1273 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 0
  %1274 = load float, ptr %1273, align 4, !tbaa !109
  %1275 = load float, ptr %66, align 4, !tbaa !22
  %1276 = fadd float %1274, %1275
  %1277 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 1
  %1278 = load float, ptr %1277, align 4, !tbaa !111
  %1279 = load float, ptr %67, align 4, !tbaa !22
  %1280 = fadd float %1278, %1279
  %1281 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 4
  %1282 = load float, ptr %1281, align 4, !tbaa !112
  %1283 = load float, ptr %66, align 4, !tbaa !22
  %1284 = fadd float %1282, %1283
  %1285 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 5
  %1286 = load float, ptr %1285, align 4, !tbaa !113
  %1287 = load float, ptr %67, align 4, !tbaa !22
  %1288 = fadd float %1286, %1287
  %1289 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 2
  %1290 = load float, ptr %1289, align 4, !tbaa !114
  %1291 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 3
  %1292 = load float, ptr %1291, align 4, !tbaa !115
  %1293 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 6
  %1294 = load float, ptr %1293, align 4, !tbaa !116
  %1295 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %71, i32 0, i32 7
  %1296 = load float, ptr %1295, align 4, !tbaa !117
  %1297 = load ptr, ptr %70, align 8, !tbaa !5
  %1298 = getelementptr inbounds %struct.stbtt_packedchar, ptr %1297, i32 0, i32 6
  %1299 = load float, ptr %1298, align 4, !tbaa !118
  invoke void @_ZN6ImFont8AddGlyphEP12ImFontConfigtfffffffff(ptr noundef nonnull align 8 dereferenceable(114) %1269, ptr noundef %1270, i16 noundef zeroext %1272, float noundef %1276, float noundef %1280, float noundef %1284, float noundef %1288, float noundef %1290, float noundef %1292, float noundef %1294, float noundef %1296, float noundef %1299)
          to label %1300 unwind label %1308

1300:                                             ; preds = %1268
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #12
  br label %1301

1301:                                             ; preds = %1300
  %1302 = load i32, ptr %68, align 4, !tbaa !28
  %1303 = add nsw i32 %1302, 1
  store i32 %1303, ptr %68, align 4, !tbaa !28
  br label %1218, !llvm.loop !120

1304:                                             ; preds = %1245
  %1305 = landingpad { ptr, i32 }
          cleanup
  %1306 = extractvalue { ptr, i32 } %1305, 0
  store ptr %1306, ptr %8, align 8
  %1307 = extractvalue { ptr, i32 } %1305, 1
  store i32 %1307, ptr %9, align 4
  br label %1312

1308:                                             ; preds = %1268, %1250
  %1309 = landingpad { ptr, i32 }
          cleanup
  %1310 = extractvalue { ptr, i32 } %1309, 0
  store ptr %1310, ptr %8, align 8
  %1311 = extractvalue { ptr, i32 } %1309, 1
  store i32 %1311, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #12
  br label %1312

1312:                                             ; preds = %1308, %1304
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #12
  br label %1320

1313:                                             ; preds = %1224
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #12
  store i32 0, ptr %11, align 4
  br label %1314

1314:                                             ; preds = %1313, %1149
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #12
  %1315 = load i32, ptr %11, align 4
  switch i32 %1315, label %1362 [
    i32 0, label %1316
    i32 46, label %1317
  ]

1316:                                             ; preds = %1314
  br label %1317

1317:                                             ; preds = %1316, %1314
  %1318 = load i32, ptr %56, align 4, !tbaa !28
  %1319 = add nsw i32 %1318, 1
  store i32 %1319, ptr %56, align 4, !tbaa !28
  br label %1135, !llvm.loop !121

1320:                                             ; preds = %1312, %1241
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #12
  br label %1321

1321:                                             ; preds = %1320, %1237
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #12
  br label %1322

1322:                                             ; preds = %1321, %1233
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  br label %1323

1323:                                             ; preds = %1322, %1229
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #12
  br label %1324

1324:                                             ; preds = %1323, %1225
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #12
  br label %1325

1325:                                             ; preds = %1324, %1150
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  br label %1347

1326:                                             ; preds = %1140
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #12
  store i32 0, ptr %74, align 4, !tbaa !28
  br label %1327

1327:                                             ; preds = %1337, %1326
  %1328 = load i32, ptr %74, align 4, !tbaa !28
  %1329 = getelementptr inbounds %struct.ImVector.11, ptr %6, i32 0, i32 0
  %1330 = load i32, ptr %1329, align 8, !tbaa !58
  %1331 = icmp slt i32 %1328, %1330
  br i1 %1331, label %1333, label %1332

1332:                                             ; preds = %1327
  store i32 50, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #12
  br label %1344

1333:                                             ; preds = %1327
  %1334 = load i32, ptr %74, align 4, !tbaa !28
  %1335 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %1334)
          to label %1336 unwind label %1340

1336:                                             ; preds = %1333
  call void @_ZN18ImFontBuildSrcDataD2Ev(ptr noundef nonnull align 8 dereferenceable(272) %1335) #12
  br label %1337

1337:                                             ; preds = %1336
  %1338 = load i32, ptr %74, align 4, !tbaa !28
  %1339 = add nsw i32 %1338, 1
  store i32 %1339, ptr %74, align 4, !tbaa !28
  br label %1327, !llvm.loop !122

1340:                                             ; preds = %1333
  %1341 = landingpad { ptr, i32 }
          cleanup
  %1342 = extractvalue { ptr, i32 } %1341, 0
  store ptr %1342, ptr %8, align 8
  %1343 = extractvalue { ptr, i32 } %1341, 1
  store i32 %1343, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #12
  br label %1347

1344:                                             ; preds = %1332
  %1345 = load ptr, ptr %3, align 8, !tbaa !5
  invoke void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef %1345)
          to label %1346 unwind label %870

1346:                                             ; preds = %1344
  store i1 true, ptr %2, align 1
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #12
  call void @_ZN8ImVectorI16stbtt_packedcharED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #12
  call void @_ZN8ImVectorI10stbrp_rectED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #12
  br label %1353

1347:                                             ; preds = %1340, %1325, %1131, %1029, %957, %870
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  br label %1348

1348:                                             ; preds = %1347, %810
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #12
  br label %1349

1349:                                             ; preds = %1348, %576
  call void @_ZN8ImVectorI16stbtt_packedcharED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #12
  br label %1350

1350:                                             ; preds = %1349, %572
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #12
  call void @_ZN8ImVectorI10stbrp_rectED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #12
  br label %1351

1351:                                             ; preds = %1350, %568
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #12
  br label %1352

1352:                                             ; preds = %1351, %564, %536, %511, %475
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #12
  br label %1355

1353:                                             ; preds = %1346, %349
  call void @_ZN8ImVectorI18ImFontBuildDstDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #12
  call void @_ZN8ImVectorI18ImFontBuildSrcDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #12
  %1354 = load i1, ptr %2, align 1
  ret i1 %1354

1355:                                             ; preds = %1352, %348, %129
  call void @_ZN8ImVectorI18ImFontBuildDstDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #12
  br label %1356

1356:                                             ; preds = %1355, %125
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #12
  call void @_ZN8ImVectorI18ImFontBuildSrcDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #12
  br label %1357

1357:                                             ; preds = %1356
  %1358 = load ptr, ptr %8, align 8
  %1359 = load i32, ptr %9, align 4
  %1360 = insertvalue { ptr, i32 } poison, ptr %1358, 0
  %1361 = insertvalue { ptr, i32 } %1360, i32 %1359, 1
  resume { ptr, i32 } %1361

1362:                                             ; preds = %1314, %1125, %951, %802
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z39ImFontAtlasBuildMultiplyCalcLookupTablePhf(ptr noundef, float noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z34ImFontAtlasBuildMultiplyRectAlpha8PKhPhiiiii(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z20ImFontAtlasBuildInitP11ImFontAtlas(ptr noundef) #9

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI18ImFontBuildSrcDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI18ImFontBuildDstDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #10 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #8 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL27stbtt_GetFontOffsetForIndexPKhi(ptr noundef, i32 noundef) #9

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL14stbtt_InitFontP14stbtt_fontinfoPKhi(ptr noundef, ptr noundef, i32 noundef) #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef, i32 noundef) #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImBitVector6CreateEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #9 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11ImBitVector7TestBitEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #9 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef, i32 noundef) #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImBitVector6SetBitEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorIiE7reserveEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #10 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL30UnpackBitVectorToFlatIndexListPK11ImBitVectorP8ImVectorIiE(ptr noundef, ptr noundef) #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImBitVector5ClearEv(ptr noundef nonnull align 8 dereferenceable(16)) #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI18ImFontBuildDstDataE5clearEv(ptr noundef nonnull align 8 dereferenceable(16)) #10 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI10stbrp_rectE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI16stbtt_packedcharE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #10 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImVectorI10stbrp_rectEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(28) ptr @_ZN8ImVectorI16stbtt_packedcharEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef, float noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZL31stbtt_ScaleForMappingEmToPixelsPK14stbtt_fontinfof(ptr noundef, float noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN8ImVectorIiEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #8 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL31stbtt_GetGlyphBitmapBoxSubpixelPK14stbtt_fontinfoiffffPiS2_S2_S2_(ptr noundef, i32 noundef, float noundef, float noundef, float noundef, float noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #9

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL15stbtt_PackBeginP18stbtt_pack_contextPhiiiiPv(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #9

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL16stbrp_pack_rectsP13stbrp_contextP10stbrp_recti(ptr noundef, ptr noundef, i32 noundef) #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL17ImUpperPowerOfTwoi(i32 noundef) #8

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL35stbtt_PackFontRangesRenderIntoRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #9

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL13stbtt_PackEndP18stbtt_pack_context(ptr noundef) #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI10stbrp_rectE5clearEv(ptr noundef nonnull align 8 dereferenceable(16)) #10 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL21stbtt_GetFontVMetricsPK14stbtt_fontinfoPiS2_S2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL7ImFloorf(float noundef) #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z25ImFontAtlasBuildSetupFontP11ImFontAtlasP6ImFontP12ImFontConfigff(ptr noundef, ptr noundef, ptr noundef, float noundef, float noundef) #9

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL19stbtt_GetPackedQuadPK16stbtt_packedchariiiPfS2_P18stbtt_aligned_quadi(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6ImFont8AddGlyphEP12ImFontConfigtfffffffff(ptr noundef nonnull align 8 dereferenceable(114), ptr noundef, i16 noundef zeroext, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef) #9 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef) #9

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { noreturn 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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 #8 = { 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 #9 = { 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 #10 = { 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 #11 = { noreturn nounwind }
attributes #12 = { 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, !12, i64 96}
!10 = !{!"_ZTS11ImFontAtlas", !11, i64 0, !12, i64 4, !6, i64 8, !12, i64 16, !12, i64 20, !6, i64 24, !6, i64 32, !12, i64 40, !12, i64 44, !13, i64 48, !13, i64 56, !15, i64 64, !16, i64 80, !17, i64 96, !7, i64 112, !12, i64 1136, !12, i64 1140}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTS6ImVec2", !14, i64 0, !14, i64 4}
!14 = !{!"float", !7, i64 0}
!15 = !{!"_ZTS8ImVectorIP6ImFontE", !12, i64 0, !12, i64 4, !6, i64 8}
!16 = !{!"_ZTS8ImVectorI21ImFontAtlasCustomRectE", !12, i64 0, !12, i64 4, !6, i64 8}
!17 = !{!"_ZTS8ImVectorI12ImFontConfigE", !12, i64 0, !12, i64 4, !6, i64 8}
!18 = !{!10, !6, i64 8}
!19 = !{!10, !12, i64 44}
!20 = !{!10, !12, i64 40}
!21 = !{i64 0, i64 4, !22, i64 4, i64 4, !22}
!22 = !{!14, !14, i64 0}
!23 = !{!10, !12, i64 64}
!24 = !{!25, !6, i64 8}
!25 = !{!"_ZTS8ImVectorI18ImFontBuildSrcDataE", !12, i64 0, !12, i64 4, !6, i64 8}
!26 = !{!27, !6, i64 8}
!27 = !{!"_ZTS8ImVectorI18ImFontBuildDstDataE", !12, i64 0, !12, i64 4, !6, i64 8}
!28 = !{!12, !12, i64 0}
!29 = !{!30, !6, i64 128}
!30 = !{!"_ZTS12ImFontConfig", !6, i64 0, !12, i64 8, !11, i64 12, !12, i64 16, !14, i64 20, !12, i64 24, !12, i64 28, !11, i64 32, !13, i64 36, !13, i64 44, !6, i64 56, !14, i64 64, !14, i64 68, !11, i64 72, !12, i64 76, !14, i64 80, !31, i64 84, !7, i64 86, !6, i64 128}
!31 = !{!"short", !7, i64 0}
!32 = !{!33, !6, i64 72}
!33 = !{!"_ZTS6ImFont", !34, i64 0, !14, i64 16, !14, i64 20, !35, i64 24, !36, i64 40, !6, i64 56, !13, i64 64, !6, i64 72, !6, i64 80, !31, i64 88, !31, i64 90, !31, i64 92, !11, i64 94, !14, i64 96, !14, i64 100, !14, i64 104, !12, i64 108, !7, i64 112}
!34 = !{!"_ZTS8ImVectorIfE", !12, i64 0, !12, i64 4, !6, i64 8}
!35 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!36 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !12, i64 0, !12, i64 4, !6, i64 8}
!37 = !{!38, !12, i64 224}
!38 = !{!"_ZTS18ImFontBuildSrcData", !39, i64 0, !41, i64 160, !6, i64 200, !6, i64 208, !6, i64 216, !12, i64 224, !12, i64 228, !12, i64 232, !42, i64 240, !44, i64 256}
!39 = !{!"_ZTS14stbtt_fontinfo", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !40, i64 64, !40, i64 80, !40, i64 96, !40, i64 112, !40, i64 128, !40, i64 144}
!40 = !{!"_ZTS10stbtt__buf", !6, i64 0, !12, i64 8, !12, i64 12}
!41 = !{!"_ZTS16stbtt_pack_range", !14, i64 0, !12, i64 4, !6, i64 8, !12, i64 16, !6, i64 24, !7, i64 32, !7, i64 33}
!42 = !{!"_ZTS11ImBitVector", !43, i64 0}
!43 = !{!"_ZTS8ImVectorIjE", !12, i64 0, !12, i64 4, !6, i64 8}
!44 = !{!"_ZTS8ImVectorIiE", !12, i64 0, !12, i64 4, !6, i64 8}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.mustprogress"}
!47 = !{!30, !6, i64 0}
!48 = !{!30, !12, i64 16}
!49 = !{!30, !6, i64 56}
!50 = !{!38, !6, i64 216}
!51 = !{!31, !31, i64 0}
!52 = !{!38, !12, i64 228}
!53 = distinct !{!53, !46}
!54 = !{!55, !12, i64 0}
!55 = !{!"_ZTS18ImFontBuildDstData", !12, i64 0, !12, i64 4, !12, i64 8, !42, i64 16}
!56 = !{!55, !12, i64 4}
!57 = distinct !{!57, !46}
!58 = !{!25, !12, i64 0}
!59 = !{!38, !12, i64 232}
!60 = !{!55, !12, i64 8}
!61 = distinct !{!61, !46}
!62 = distinct !{!62, !46}
!63 = distinct !{!63, !46}
!64 = !{!38, !12, i64 256}
!65 = distinct !{!65, !46}
!66 = !{!27, !12, i64 0}
!67 = distinct !{!67, !46}
!68 = !{!69, !6, i64 8}
!69 = !{!"_ZTS8ImVectorI10stbrp_rectE", !12, i64 0, !12, i64 4, !6, i64 8}
!70 = !{!71, !6, i64 8}
!71 = !{!"_ZTS8ImVectorI16stbtt_packedcharE", !12, i64 0, !12, i64 4, !6, i64 8}
!72 = !{!38, !6, i64 200}
!73 = !{!38, !6, i64 208}
!74 = !{!30, !14, i64 20}
!75 = !{!38, !14, i64 160}
!76 = !{!38, !12, i64 164}
!77 = !{!38, !6, i64 264}
!78 = !{!38, !6, i64 168}
!79 = !{!38, !12, i64 176}
!80 = !{!38, !6, i64 184}
!81 = !{!30, !12, i64 24}
!82 = !{!38, !7, i64 192}
!83 = !{!30, !12, i64 28}
!84 = !{!38, !7, i64 193}
!85 = !{!10, !12, i64 20}
!86 = !{!87, !31, i64 4}
!87 = !{!"_ZTS10stbrp_rect", !12, i64 0, !31, i64 4, !31, i64 6, !31, i64 8, !31, i64 10, !12, i64 12}
!88 = !{!87, !31, i64 6}
!89 = distinct !{!89, !46}
!90 = distinct !{!90, !46}
!91 = !{!10, !12, i64 16}
!92 = !{!93, !6, i64 8}
!93 = !{!"_ZTS18stbtt_pack_context", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !6, i64 48, !6, i64 56}
!94 = !{!87, !12, i64 12}
!95 = !{!87, !31, i64 10}
!96 = distinct !{!96, !46}
!97 = distinct !{!97, !46}
!98 = !{!10, !12, i64 4}
!99 = !{!10, !6, i64 24}
!100 = !{!93, !6, i64 48}
!101 = !{!93, !12, i64 20}
!102 = !{!30, !14, i64 80}
!103 = !{!87, !31, i64 8}
!104 = distinct !{!104, !46}
!105 = distinct !{!105, !46}
!106 = !{!30, !14, i64 44}
!107 = !{!30, !14, i64 48}
!108 = !{!33, !14, i64 100}
!109 = !{!110, !14, i64 0}
!110 = !{!"_ZTS18stbtt_aligned_quad", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28}
!111 = !{!110, !14, i64 4}
!112 = !{!110, !14, i64 16}
!113 = !{!110, !14, i64 20}
!114 = !{!110, !14, i64 8}
!115 = !{!110, !14, i64 12}
!116 = !{!110, !14, i64 24}
!117 = !{!110, !14, i64 28}
!118 = !{!119, !14, i64 16}
!119 = !{!"_ZTS16stbtt_packedchar", !31, i64 0, !31, i64 2, !31, i64 4, !31, i64 6, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24}
!120 = distinct !{!120, !46}
!121 = distinct !{!121, !46}
!122 = distinct !{!122, !46}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.ImVec2 = type { float, float }
%struct.ImVector.11 = type { i32, i32, ptr }
%struct.ImVector.12 = type { i32, i32, ptr }
%struct.ImVector.15 = type { i32, i32, ptr }
%struct.ImVector.16 = type { i32, i32, ptr }
%struct.stbtt_pack_context = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, ptr, ptr }
%struct.stbtt_aligned_quad = type { float, float, float, float, float, float, float, float }
%struct.stbrp_rect = type { i32, i16, i16, i16, i16, i32 }
%struct.stbtt_packedchar = type { i16, i16, i16, i16, float, float, float, float, float }

@.str.1 = external hidden unnamed_addr constant [114 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas = external hidden unnamed_addr constant [52 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [25 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

; 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 nounwind uwtable
declare dso_local void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

declare noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef) local_unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImFontAtlas12ClearTexDataEv(ptr noundef nonnull align 8 dereferenceable(1144)) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas(ptr noundef %0) local_unnamed_addr #7 personality ptr @__gxx_personality_v0 {
  %2 = alloca %struct.ImVec2, align 8
  %3 = alloca %struct.ImVec2, align 8
  %4 = alloca %struct.ImVector.11, align 8
  %5 = alloca %struct.ImVector.12, align 8
  %6 = alloca %struct.ImVector.15, align 8
  %7 = alloca %struct.ImVector.16, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %struct.stbtt_pack_context, align 8
  %13 = alloca %struct.ImVec2, align 8
  %14 = alloca [256 x i8], align 16
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %struct.stbtt_aligned_quad, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = getelementptr inbounds i8, ptr %0, i64 96
  %22 = load i32, ptr %21, align 8, !tbaa !5
  %23 = icmp sgt i32 %22, 0
  br i1 %23, label %25, label %24

24:                                               ; preds = %1
  tail call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.1, i32 noundef 2080, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #10
  unreachable

25:                                               ; preds = %1
  tail call void @_Z20ImFontAtlasBuildInitP11ImFontAtlas(ptr noundef nonnull %0)
  %26 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr null, ptr %26, align 8, !tbaa !17
  %27 = getelementptr inbounds i8, ptr %0, i64 44
  store i32 0, ptr %27, align 4, !tbaa !18
  %28 = getelementptr inbounds i8, ptr %0, i64 40
  store i32 0, ptr %28, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %2, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %29 = getelementptr inbounds i8, ptr %0, i64 48
  %30 = load i64, ptr %2, align 8
  store i64 %30, ptr %29, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %3, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %31 = getelementptr inbounds i8, ptr %0, i64 56
  %32 = load i64, ptr %3, align 8
  store i64 %32, ptr %31, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #11
  call void @_ZN11ImFontAtlas12ClearTexDataEv(ptr noundef nonnull align 8 dereferenceable(1144) %0)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #11
  call void @_ZN8ImVectorI18ImFontBuildSrcDataEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #11
  call void @_ZN8ImVectorI18ImFontBuildDstDataEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %33 = load i32, ptr %21, align 8, !tbaa !5
  invoke void @_ZN8ImVectorI18ImFontBuildSrcDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %33)
          to label %34 unwind label %49

34:                                               ; preds = %25
  %35 = getelementptr inbounds i8, ptr %0, i64 64
  %36 = load i32, ptr %35, align 8, !tbaa !20
  invoke void @_ZN8ImVectorI18ImFontBuildDstDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %5, i32 noundef %36)
          to label %37 unwind label %49

37:                                               ; preds = %34
  %38 = getelementptr inbounds i8, ptr %4, i64 8
  %39 = load ptr, ptr %38, align 8, !tbaa !21
  %40 = call noundef i32 @_ZNK8ImVectorI18ImFontBuildSrcDataE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %4)
  %41 = sext i32 %40 to i64
  call void @llvm.memset.p0.i64(ptr align 8 %39, i8 0, i64 %41, i1 false)
  %42 = getelementptr inbounds i8, ptr %5, i64 8
  %43 = load ptr, ptr %42, align 8, !tbaa !23
  %44 = call noundef i32 @_ZNK8ImVectorI18ImFontBuildDstDataE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %45 = sext i32 %44 to i64
  call void @llvm.memset.p0.i64(ptr align 8 %43, i8 0, i64 %45, i1 false)
  %46 = load i32, ptr %21, align 8, !tbaa !5
  %.not340390 = icmp slt i32 %46, 1
  br i1 %.not340390, label %.critedge363.preheader, label %.lr.ph394

.critedge363.preheader:                           ; preds = %._crit_edge, %37
  %47 = load i32, ptr %4, align 8, !tbaa !25
  %48 = icmp sgt i32 %47, 0
  br i1 %48, label %.lr.ph413, label %.preheader369

49:                                               ; preds = %34, %25
  %50 = landingpad { ptr, i32 }
          cleanup
  br label %539

.lr.ph394:                                        ; preds = %37, %._crit_edge
  %.0294391 = phi i32 [ %116, %._crit_edge ], [ 0, %37 ]
  %51 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0294391)
  %52 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %21, i32 noundef %.0294391)
  %53 = getelementptr inbounds i8, ptr %52, i64 128
  %54 = load ptr, ptr %53, align 8, !tbaa !26
  %.not = icmp eq ptr %54, null
  br i1 %.not, label %.critedge, label %55

55:                                               ; preds = %.lr.ph394
  %56 = call noundef zeroext i1 @_ZNK6ImFont8IsLoadedEv(ptr noundef nonnull align 8 dereferenceable(114) %54)
  br i1 %56, label %57, label %.critedge3

57:                                               ; preds = %55
  %58 = load ptr, ptr %53, align 8, !tbaa !26
  %59 = getelementptr inbounds i8, ptr %58, i64 72
  %60 = load ptr, ptr %59, align 8, !tbaa !29
  %61 = icmp eq ptr %60, %0
  br i1 %61, label %.critedge3, label %.critedge

.critedge:                                        ; preds = %.lr.ph394, %57
  call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.1, i32 noundef 2104, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #10
  unreachable

.critedge3:                                       ; preds = %55, %57
  %62 = getelementptr inbounds i8, ptr %51, i64 224
  store i32 -1, ptr %62, align 8, !tbaa !34
  %63 = load i32, ptr %35, align 8, !tbaa !20
  %64 = icmp sgt i32 %63, 0
  br i1 %64, label %.lr.ph, label %.critedge456

.critedge5:                                       ; preds = %69
  br i1 %73, label %.critedge456, label %74

.lr.ph:                                           ; preds = %.critedge3, %69
  %.0298385 = phi i32 [ %70, %69 ], [ 0, %.critedge3 ]
  %65 = load ptr, ptr %53, align 8, !tbaa !26
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN8ImVectorIP6ImFontEixEi(ptr noundef nonnull align 8 dereferenceable(16) %35, i32 noundef %.0298385)
  %67 = load ptr, ptr %66, align 8, !tbaa !42
  %68 = icmp eq ptr %65, %67
  br i1 %68, label %.critedge5.thread, label %69

.critedge5.thread:                                ; preds = %.lr.ph
  store i32 %.0298385, ptr %62, align 8, !tbaa !34
  br label %74

69:                                               ; preds = %.lr.ph
  %.pr.pre = load i32, ptr %62, align 8
  %70 = add nuw nsw i32 %.0298385, 1
  %71 = load i32, ptr %35, align 8, !tbaa !20
  %72 = icmp slt i32 %70, %71
  %73 = icmp eq i32 %.pr.pre, -1
  %or.cond = select i1 %72, i1 %73, i1 false
  br i1 %or.cond, label %.lr.ph, label %.critedge5, !llvm.loop !43

.critedge456:                                     ; preds = %.critedge3, %.critedge5
  call void @__assert_fail(ptr noundef nonnull @.str.26, ptr noundef nonnull @.str.1, i32 noundef 2111, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #10
  unreachable

74:                                               ; preds = %.critedge5.thread, %.critedge5
  %75 = load ptr, ptr %52, align 8, !tbaa !45
  %76 = getelementptr inbounds i8, ptr %52, i64 16
  %77 = load i32, ptr %76, align 8, !tbaa !46
  %78 = invoke noundef i32 @_ZL27stbtt_GetFontOffsetForIndexPKhi(ptr noundef %75, i32 noundef %77)
          to label %79 unwind label %82

79:                                               ; preds = %74
  %80 = icmp sgt i32 %78, -1
  br i1 %80, label %84, label %81

81:                                               ; preds = %79
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.1, i32 noundef 2117, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #10
  unreachable

82:                                               ; preds = %84, %74
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %539

84:                                               ; preds = %79
  %85 = load ptr, ptr %52, align 8, !tbaa !45
  %86 = invoke noundef i32 @_ZL14stbtt_InitFontP14stbtt_fontinfoPKhi(ptr noundef nonnull %51, ptr noundef %85, i32 noundef %78)
          to label %87 unwind label %82

87:                                               ; preds = %84
  %.not336.not = icmp eq i32 %86, 0
  br i1 %.not336.not, label %.critedge362, label %88

88:                                               ; preds = %87
  %89 = load i32, ptr %62, align 8, !tbaa !34
  %90 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %5, i32 noundef %89)
  %91 = getelementptr inbounds i8, ptr %52, i64 56
  %92 = load ptr, ptr %91, align 8, !tbaa !47
  %.not337 = icmp eq ptr %92, null
  br i1 %.not337, label %93, label %95

93:                                               ; preds = %88
  %94 = call noundef ptr @_ZN11ImFontAtlas21GetGlyphRangesDefaultEv(ptr noundef nonnull align 8 dereferenceable(1144) %0)
  br label %95

95:                                               ; preds = %88, %93
  %96 = phi ptr [ %94, %93 ], [ %92, %88 ]
  %97 = getelementptr inbounds i8, ptr %51, i64 216
  store ptr %96, ptr %97, align 8, !tbaa !48
  %98 = load i16, ptr %96, align 2, !tbaa !49
  %.not338386 = icmp eq i16 %98, 0
  br i1 %.not338386, label %._crit_edge, label %.lr.ph388

.lr.ph388:                                        ; preds = %95
  %99 = getelementptr inbounds i8, ptr %51, i64 228
  br label %100

100:                                              ; preds = %.lr.ph388, %103
  %.0299387 = phi ptr [ %96, %.lr.ph388 ], [ %107, %103 ]
  %101 = getelementptr inbounds i8, ptr %.0299387, i64 2
  %102 = load i16, ptr %101, align 2, !tbaa !49
  %.not339 = icmp eq i16 %102, 0
  br i1 %.not339, label %._crit_edge, label %103

103:                                              ; preds = %100
  %104 = load i32, ptr %99, align 4, !tbaa !50
  %105 = zext i16 %102 to i32
  %106 = call noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %104, i32 noundef %105)
  store i32 %106, ptr %99, align 4, !tbaa !50
  %107 = getelementptr inbounds i8, ptr %.0299387, i64 4
  %108 = load i16, ptr %107, align 2, !tbaa !49
  %.not338 = icmp eq i16 %108, 0
  br i1 %.not338, label %._crit_edge, label %100, !llvm.loop !51

._crit_edge:                                      ; preds = %103, %100, %95
  %109 = load i32, ptr %90, align 8, !tbaa !52
  %110 = add nsw i32 %109, 1
  store i32 %110, ptr %90, align 8, !tbaa !52
  %111 = getelementptr inbounds i8, ptr %90, i64 4
  %112 = load i32, ptr %111, align 4, !tbaa !54
  %113 = getelementptr inbounds i8, ptr %51, i64 228
  %114 = load i32, ptr %113, align 4, !tbaa !50
  %115 = call noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %112, i32 noundef %114)
  store i32 %115, ptr %111, align 4, !tbaa !54
  %116 = add nuw nsw i32 %.0294391, 1
  %117 = load i32, ptr %21, align 8, !tbaa !5
  %.not340.not = icmp slt i32 %116, %117
  br i1 %.not340.not, label %.lr.ph394, label %.critedge363.preheader, !llvm.loop !55

.preheader370:                                    ; preds = %.critedge9
  %118 = icmp sgt i32 %147, 0
  br i1 %118, label %.lr.ph416, label %.preheader369

.lr.ph413:                                        ; preds = %.critedge363.preheader, %.critedge9
  %.0300412 = phi i32 [ %.1301.lcssa, %.critedge9 ], [ 0, %.critedge363.preheader ]
  %.0304411 = phi i32 [ %146, %.critedge9 ], [ 0, %.critedge363.preheader ]
  %119 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0304411)
  %120 = getelementptr inbounds i8, ptr %119, i64 224
  %121 = load i32, ptr %120, align 8, !tbaa !34
  %122 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %5, i32 noundef %121)
  %123 = getelementptr inbounds i8, ptr %119, i64 240
  %124 = getelementptr inbounds i8, ptr %119, i64 228
  %125 = load i32, ptr %124, align 4, !tbaa !50
  %126 = add nsw i32 %125, 1
  invoke void @_ZN11ImBitVector6CreateEi(ptr noundef nonnull align 8 dereferenceable(16) %123, i32 noundef %126)
          to label %127 unwind label %134

127:                                              ; preds = %.lr.ph413
  %128 = getelementptr inbounds i8, ptr %122, i64 16
  %129 = call noundef zeroext i1 @_ZNK8ImVectorIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %128)
  br i1 %129, label %130, label %136

130:                                              ; preds = %127
  %131 = getelementptr inbounds i8, ptr %122, i64 4
  %132 = load i32, ptr %131, align 4, !tbaa !54
  %133 = add nsw i32 %132, 1
  invoke void @_ZN11ImBitVector6CreateEi(ptr noundef nonnull align 8 dereferenceable(16) %128, i32 noundef %133)
          to label %136 unwind label %134

134:                                              ; preds = %130, %.lr.ph413
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %539

136:                                              ; preds = %130, %127
  %137 = getelementptr inbounds i8, ptr %119, i64 216
  %138 = load ptr, ptr %137, align 8, !tbaa !48
  %139 = load i16, ptr %138, align 2, !tbaa !49
  %.not352403 = icmp eq i16 %139, 0
  br i1 %.not352403, label %.critedge9, label %.lr.ph407

.lr.ph407:                                        ; preds = %136
  %140 = getelementptr inbounds i8, ptr %119, i64 232
  %141 = getelementptr inbounds i8, ptr %122, i64 8
  br label %142

142:                                              ; preds = %.lr.ph407, %._crit_edge401
  %143 = phi i16 [ %139, %.lr.ph407 ], [ %152, %._crit_edge401 ]
  %.1301405 = phi i32 [ %.0300412, %.lr.ph407 ], [ %.2302.lcssa, %._crit_edge401 ]
  %.0305404 = phi ptr [ %138, %.lr.ph407 ], [ %151, %._crit_edge401 ]
  %144 = getelementptr inbounds i8, ptr %.0305404, i64 2
  %145 = load i16, ptr %144, align 2, !tbaa !49
  %.not353 = icmp eq i16 %145, 0
  br i1 %.not353, label %.critedge9, label %149

.critedge9:                                       ; preds = %142, %._crit_edge401, %136
  %.1301.lcssa = phi i32 [ %.0300412, %136 ], [ %.2302.lcssa, %._crit_edge401 ], [ %.1301405, %142 ]
  %146 = add nuw nsw i32 %.0304411, 1
  %147 = load i32, ptr %4, align 8, !tbaa !25
  %148 = icmp slt i32 %146, %147
  br i1 %148, label %.lr.ph413, label %.preheader370, !llvm.loop !56

149:                                              ; preds = %142
  %.not354396 = icmp ugt i16 %143, %145
  br i1 %.not354396, label %._crit_edge401, label %.lr.ph400.preheader

.lr.ph400.preheader:                              ; preds = %149
  %150 = zext i16 %143 to i32
  br label %.lr.ph400

._crit_edge401:                                   ; preds = %168, %149
  %.2302.lcssa = phi i32 [ %.1301405, %149 ], [ %.3303, %168 ]
  %151 = getelementptr inbounds i8, ptr %.0305404, i64 4
  %152 = load i16, ptr %151, align 2, !tbaa !49
  %.not352 = icmp eq i16 %152, 0
  br i1 %.not352, label %.critedge9, label %142, !llvm.loop !57

.lr.ph400:                                        ; preds = %.lr.ph400.preheader, %168
  %.2302398 = phi i32 [ %.3303, %168 ], [ %.1301405, %.lr.ph400.preheader ]
  %.0309397 = phi i32 [ %169, %168 ], [ %150, %.lr.ph400.preheader ]
  %153 = invoke noundef zeroext i1 @_ZNK11ImBitVector7TestBitEi(ptr noundef nonnull align 8 dereferenceable(16) %128, i32 noundef %.0309397)
          to label %154 unwind label %155

154:                                              ; preds = %.lr.ph400
  br i1 %153, label %168, label %157

155:                                              ; preds = %165, %160, %157, %.lr.ph400
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %539

157:                                              ; preds = %154
  %158 = invoke noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef nonnull %119, i32 noundef %.0309397)
          to label %159 unwind label %155

159:                                              ; preds = %157
  %.not355 = icmp eq i32 %158, 0
  br i1 %.not355, label %168, label %160

160:                                              ; preds = %159
  %161 = load i32, ptr %140, align 8, !tbaa !58
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %140, align 8, !tbaa !58
  %163 = load i32, ptr %141, align 8, !tbaa !59
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %141, align 8, !tbaa !59
  invoke void @_ZN11ImBitVector6SetBitEi(ptr noundef nonnull align 8 dereferenceable(16) %123, i32 noundef %.0309397)
          to label %165 unwind label %155

165:                                              ; preds = %160
  invoke void @_ZN11ImBitVector6SetBitEi(ptr noundef nonnull align 8 dereferenceable(16) %128, i32 noundef %.0309397)
          to label %166 unwind label %155

166:                                              ; preds = %165
  %167 = add nsw i32 %.2302398, 1
  br label %168

168:                                              ; preds = %159, %154, %166
  %.3303 = phi i32 [ %.2302398, %154 ], [ %167, %166 ], [ %.2302398, %159 ]
  %169 = add nuw nsw i32 %.0309397, 1
  %170 = load i16, ptr %144, align 2, !tbaa !49
  %171 = zext i16 %170 to i32
  %.not354.not = icmp ult i32 %.0309397, %171
  br i1 %.not354.not, label %.lr.ph400, label %._crit_edge401, !llvm.loop !60

172:                                              ; preds = %185
  %173 = add nuw nsw i32 %.0310415, 1
  %174 = load i32, ptr %4, align 8, !tbaa !25
  %175 = icmp slt i32 %173, %174
  br i1 %175, label %.lr.ph416, label %.preheader369, !llvm.loop !61

.preheader369:                                    ; preds = %172, %.critedge363.preheader, %.preheader370
  %.0300.lcssa476 = phi i32 [ %.1301.lcssa, %.preheader370 ], [ 0, %.critedge363.preheader ], [ %.1301.lcssa, %172 ]
  %176 = load i32, ptr %5, align 8, !tbaa !62
  %177 = icmp sgt i32 %176, 0
  br i1 %177, label %.lr.ph418, label %._crit_edge419

.lr.ph416:                                        ; preds = %.preheader370, %172
  %.0310415 = phi i32 [ %173, %172 ], [ 0, %.preheader370 ]
  %178 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0310415)
  %179 = getelementptr inbounds i8, ptr %178, i64 256
  %180 = getelementptr inbounds i8, ptr %178, i64 232
  %181 = load i32, ptr %180, align 8, !tbaa !58
  invoke void @_ZN8ImVectorIiE7reserveEi(ptr noundef nonnull align 8 dereferenceable(16) %179, i32 noundef %181)
          to label %182 unwind label %190

182:                                              ; preds = %.lr.ph416
  %183 = getelementptr inbounds i8, ptr %178, i64 240
  invoke void @_ZL30UnpackBitVectorToFlatIndexListPK11ImBitVectorP8ImVectorIiE(ptr noundef nonnull %183, ptr noundef nonnull %179)
          to label %184 unwind label %190

184:                                              ; preds = %182
  invoke void @_ZN11ImBitVector5ClearEv(ptr noundef nonnull align 8 dereferenceable(16) %183)
          to label %185 unwind label %190

185:                                              ; preds = %184
  %186 = load i32, ptr %179, align 8, !tbaa !63
  %187 = load i32, ptr %180, align 8, !tbaa !58
  %188 = icmp eq i32 %186, %187
  br i1 %188, label %172, label %189

189:                                              ; preds = %185
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.1, i32 noundef 2164, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #10
  unreachable

190:                                              ; preds = %184, %182, %.lr.ph416
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %539

._crit_edge419:                                   ; preds = %194, %.preheader369
  invoke void @_ZN8ImVectorI18ImFontBuildDstDataE5clearEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %200 unwind label %217

.lr.ph418:                                        ; preds = %.preheader369, %194
  %.0313417 = phi i32 [ %195, %194 ], [ 0, %.preheader369 ]
  %192 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN8ImVectorI18ImFontBuildDstDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %5, i32 noundef %.0313417)
  %193 = getelementptr inbounds i8, ptr %192, i64 16
  invoke void @_ZN11ImBitVector5ClearEv(ptr noundef nonnull align 8 dereferenceable(16) %193)
          to label %194 unwind label %198

194:                                              ; preds = %.lr.ph418
  %195 = add nuw nsw i32 %.0313417, 1
  %196 = load i32, ptr %5, align 8, !tbaa !62
  %197 = icmp slt i32 %195, %196
  br i1 %197, label %.lr.ph418, label %._crit_edge419, !llvm.loop !64

198:                                              ; preds = %.lr.ph418
  %199 = landingpad { ptr, i32 }
          cleanup
  br label %539

200:                                              ; preds = %._crit_edge419
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #11
  call void @_ZN8ImVectorI10stbrp_rectEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #11
  call void @_ZN8ImVectorI16stbtt_packedcharEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7)
  invoke void @_ZN8ImVectorI10stbrp_rectE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %.0300.lcssa476)
          to label %201 unwind label %219

201:                                              ; preds = %200
  invoke void @_ZN8ImVectorI16stbtt_packedcharE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %7, i32 noundef %.0300.lcssa476)
          to label %202 unwind label %219

202:                                              ; preds = %201
  %203 = getelementptr inbounds i8, ptr %6, i64 8
  %204 = load ptr, ptr %203, align 8, !tbaa !65
  %205 = call noundef i32 @_ZNK8ImVectorI10stbrp_rectE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %206 = sext i32 %205 to i64
  call void @llvm.memset.p0.i64(ptr align 4 %204, i8 0, i64 %206, i1 false)
  %207 = getelementptr inbounds i8, ptr %7, i64 8
  %208 = load ptr, ptr %207, align 8, !tbaa !67
  %209 = call noundef i32 @_ZNK8ImVectorI16stbtt_packedcharE13size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  %210 = sext i32 %209 to i64
  call void @llvm.memset.p0.i64(ptr align 4 %208, i8 0, i64 %210, i1 false)
  %211 = load i32, ptr %4, align 8, !tbaa !25
  %212 = icmp sgt i32 %211, 0
  br i1 %212, label %.lr.ph430, label %._crit_edge431

.lr.ph430:                                        ; preds = %202
  %213 = getelementptr inbounds i8, ptr %0, i64 20
  br label %221

._crit_edge431:                                   ; preds = %.loopexit368, %202
  %.0315.lcssa = phi i32 [ 0, %202 ], [ %.2317, %.loopexit368 ]
  store i32 0, ptr %27, align 4, !tbaa !18
  %214 = getelementptr inbounds i8, ptr %0, i64 16
  %215 = load i32, ptr %214, align 8, !tbaa !69
  %216 = icmp sgt i32 %215, 0
  br i1 %216, label %320, label %311

217:                                              ; preds = %._crit_edge419
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %539

219:                                              ; preds = %201, %200
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %538

221:                                              ; preds = %.lr.ph430, %.loopexit368
  %.0315428 = phi i32 [ 0, %.lr.ph430 ], [ %.2317, %.loopexit368 ]
  %.0318427 = phi i32 [ 0, %.lr.ph430 ], [ %.1319, %.loopexit368 ]
  %.0320426 = phi i32 [ 0, %.lr.ph430 ], [ %.1321, %.loopexit368 ]
  %.0323425 = phi i32 [ 0, %.lr.ph430 ], [ %308, %.loopexit368 ]
  %222 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0323425)
  %223 = getelementptr inbounds i8, ptr %222, i64 232
  %224 = load i32, ptr %223, align 8, !tbaa !58
  %225 = icmp eq i32 %224, 0
  br i1 %225, label %.loopexit368, label %226

226:                                              ; preds = %221
  %227 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImVectorI10stbrp_rectEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %.0318427)
  %228 = getelementptr inbounds i8, ptr %222, i64 200
  store ptr %227, ptr %228, align 8, !tbaa !70
  %229 = call noundef nonnull align 4 dereferenceable(28) ptr @_ZN8ImVectorI16stbtt_packedcharEixEi(ptr noundef nonnull align 8 dereferenceable(16) %7, i32 noundef %.0320426)
  %230 = getelementptr inbounds i8, ptr %222, i64 208
  store ptr %229, ptr %230, align 8, !tbaa !71
  %231 = load i32, ptr %223, align 8, !tbaa !58
  %232 = add nsw i32 %231, %.0318427
  %233 = add nsw i32 %231, %.0320426
  %234 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %21, i32 noundef %.0323425)
  %235 = getelementptr inbounds i8, ptr %234, i64 20
  %236 = load float, ptr %235, align 4, !tbaa !72
  %237 = getelementptr inbounds i8, ptr %222, i64 160
  store float %236, ptr %237, align 8, !tbaa !73
  %238 = getelementptr inbounds i8, ptr %222, i64 164
  store i32 0, ptr %238, align 4, !tbaa !74
  %239 = getelementptr inbounds i8, ptr %222, i64 256
  %240 = getelementptr inbounds i8, ptr %222, i64 264
  %241 = load ptr, ptr %240, align 8, !tbaa !75
  %242 = getelementptr inbounds i8, ptr %222, i64 168
  store ptr %241, ptr %242, align 8, !tbaa !76
  %243 = load i32, ptr %239, align 8, !tbaa !63
  %244 = getelementptr inbounds i8, ptr %222, i64 176
  store i32 %243, ptr %244, align 8, !tbaa !77
  %245 = load ptr, ptr %230, align 8, !tbaa !71
  %246 = getelementptr inbounds i8, ptr %222, i64 184
  store ptr %245, ptr %246, align 8, !tbaa !78
  %247 = getelementptr inbounds i8, ptr %234, i64 24
  %248 = load i32, ptr %247, align 8, !tbaa !79
  %249 = trunc i32 %248 to i8
  %250 = getelementptr inbounds i8, ptr %222, i64 192
  store i8 %249, ptr %250, align 8, !tbaa !80
  %251 = getelementptr inbounds i8, ptr %234, i64 28
  %252 = load i32, ptr %251, align 4, !tbaa !81
  %253 = trunc i32 %252 to i8
  %254 = getelementptr inbounds i8, ptr %222, i64 193
  store i8 %253, ptr %254, align 1, !tbaa !82
  %255 = fcmp ogt float %236, 0.000000e+00
  br i1 %255, label %256, label %258

256:                                              ; preds = %226
  %257 = call noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef nonnull %222, float noundef %236)
  br label %261

258:                                              ; preds = %226
  %259 = fneg float %236
  %260 = call noundef float @_ZL31stbtt_ScaleForMappingEmToPixelsPK14stbtt_fontinfof(ptr noundef nonnull %222, float noundef %259)
  br label %261

261:                                              ; preds = %258, %256
  %262 = phi float [ %257, %256 ], [ %260, %258 ]
  %263 = load i32, ptr %213, align 4, !tbaa !83
  %264 = load i32, ptr %239, align 8, !tbaa !63
  %265 = icmp sgt i32 %264, 0
  br i1 %265, label %.lr.ph423, label %.loopexit368

.lr.ph423:                                        ; preds = %261, %281
  %indvars.iv = phi i64 [ %indvars.iv.next, %281 ], [ 0, %261 ]
  %.1316421 = phi i32 [ %304, %281 ], [ %.0315428, %261 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #11
  %266 = trunc nuw nsw i64 %indvars.iv to i32
  %267 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8ImVectorIiEixEi(ptr noundef nonnull align 8 dereferenceable(16) %239, i32 noundef %266)
  %268 = load i32, ptr %267, align 4, !tbaa !84
  %269 = invoke noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef nonnull %222, i32 noundef %268)
          to label %270 unwind label %272

270:                                              ; preds = %.lr.ph423
  %.not348 = icmp eq i32 %269, 0
  br i1 %.not348, label %271, label %274

271:                                              ; preds = %270
  call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.1, i32 noundef 2211, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #10
  unreachable

272:                                              ; preds = %274, %.lr.ph423
  %273 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  br label %538

274:                                              ; preds = %270
  %275 = load i32, ptr %247, align 8, !tbaa !79
  %276 = sitofp i32 %275 to float
  %277 = fmul float %262, %276
  %278 = load i32, ptr %251, align 4, !tbaa !81
  %279 = sitofp i32 %278 to float
  %280 = fmul float %262, %279
  invoke void @_ZL31stbtt_GetGlyphBitmapBoxSubpixelPK14stbtt_fontinfoiffffPiS2_S2_S2_(ptr noundef nonnull %222, i32 noundef %269, float noundef %277, float noundef %280, float noundef 0.000000e+00, float noundef 0.000000e+00, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %11)
          to label %281 unwind label %272

281:                                              ; preds = %274
  %282 = load i32, ptr %10, align 4, !tbaa !84
  %283 = load i32, ptr %8, align 4, !tbaa !84
  %284 = load i32, ptr %247, align 8, !tbaa !79
  %285 = add i32 %282, %263
  %286 = sub i32 %285, %283
  %287 = add nsw i32 %286, %284
  %288 = trunc i32 %287 to i16
  %289 = add i16 %288, -1
  %290 = load ptr, ptr %228, align 8, !tbaa !70
  %291 = getelementptr inbounds %struct.stbrp_rect, ptr %290, i64 %indvars.iv, i32 1
  store i16 %289, ptr %291, align 4, !tbaa !85
  %292 = load i32, ptr %11, align 4, !tbaa !84
  %293 = load i32, ptr %9, align 4, !tbaa !84
  %294 = load i32, ptr %251, align 4, !tbaa !81
  %295 = add i32 %292, %263
  %296 = sub i32 %295, %293
  %297 = add nsw i32 %296, %294
  %298 = trunc i32 %297 to i16
  %299 = add i16 %298, -1
  %300 = getelementptr inbounds %struct.stbrp_rect, ptr %290, i64 %indvars.iv, i32 2
  store i16 %299, ptr %300, align 2, !tbaa !87
  %301 = zext i16 %289 to i32
  %302 = zext i16 %299 to i32
  %303 = mul nuw nsw i32 %302, %301
  %304 = add nuw nsw i32 %303, %.1316421
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %305 = load i32, ptr %239, align 8, !tbaa !63
  %306 = sext i32 %305 to i64
  %307 = icmp slt i64 %indvars.iv.next, %306
  br i1 %307, label %.lr.ph423, label %.loopexit368, !llvm.loop !88

.loopexit368:                                     ; preds = %281, %261, %221
  %.1321 = phi i32 [ %.0320426, %221 ], [ %233, %261 ], [ %233, %281 ]
  %.1319 = phi i32 [ %.0318427, %221 ], [ %232, %261 ], [ %232, %281 ]
  %.2317 = phi i32 [ %.0315428, %221 ], [ %.0315428, %261 ], [ %304, %281 ]
  %308 = add nuw nsw i32 %.0323425, 1
  %309 = load i32, ptr %4, align 8, !tbaa !25
  %310 = icmp slt i32 %308, %309
  br i1 %310, label %221, label %._crit_edge431, !llvm.loop !89

311:                                              ; preds = %._crit_edge431
  %312 = uitofp nneg i32 %.0315.lcssa to float
  %sqrt = call float @llvm.sqrt.f32(float %312)
  %313 = fptosi float %sqrt to i32
  %314 = icmp sgt i32 %313, 2866
  br i1 %314, label %320, label %315

315:                                              ; preds = %311
  %316 = icmp sgt i32 %313, 1432
  br i1 %316, label %320, label %317

317:                                              ; preds = %315
  %318 = icmp sgt i32 %313, 715
  %319 = select i1 %318, i32 1024, i32 512
  br label %320

320:                                              ; preds = %311, %315, %317, %._crit_edge431
  %storemerge = phi i32 [ %215, %._crit_edge431 ], [ 4096, %311 ], [ %319, %317 ], [ 2048, %315 ]
  store i32 %storemerge, ptr %28, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %12, i8 0, i64 64, i1 false)
  %321 = getelementptr inbounds i8, ptr %0, i64 20
  %322 = load i32, ptr %321, align 4, !tbaa !83
  %323 = invoke noundef i32 @_ZL15stbtt_PackBeginP18stbtt_pack_contextPhiiiiPv(ptr noundef nonnull %12, ptr noundef null, i32 noundef %storemerge, i32 noundef 32768, i32 noundef 0, i32 noundef %322, ptr noundef null)
          to label %324 unwind label %333

324:                                              ; preds = %320
  %325 = getelementptr inbounds i8, ptr %12, i64 8
  %326 = load ptr, ptr %325, align 8, !tbaa !90
  invoke void @_Z31ImFontAtlasBuildPackCustomRectsP11ImFontAtlasPv(ptr noundef nonnull %0, ptr noundef %326)
          to label %.preheader367 unwind label %333

.preheader367:                                    ; preds = %324
  %327 = load i32, ptr %4, align 8, !tbaa !25
  %328 = icmp sgt i32 %327, 0
  br i1 %328, label %.lr.ph436, label %._crit_edge437

._crit_edge437:                                   ; preds = %.loopexit, %.preheader367
  %329 = getelementptr inbounds i8, ptr %0, i64 4
  %330 = load i32, ptr %329, align 4, !tbaa !92
  %331 = and i32 %330, 1
  %.not341 = icmp eq i32 %331, 0
  %332 = load i32, ptr %27, align 4, !tbaa !18
  br i1 %.not341, label %372, label %370

333:                                              ; preds = %._crit_edge455, %447, %._crit_edge446, %374, %324, %320
  %334 = landingpad { ptr, i32 }
          cleanup
  br label %537

.lr.ph436:                                        ; preds = %.preheader367, %.loopexit
  %.0314435 = phi i32 [ %367, %.loopexit ], [ 0, %.preheader367 ]
  %335 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0314435)
  %336 = getelementptr inbounds i8, ptr %335, i64 232
  %337 = load i32, ptr %336, align 8, !tbaa !58
  %338 = icmp eq i32 %337, 0
  br i1 %338, label %.loopexit, label %341

339:                                              ; preds = %341
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %537

341:                                              ; preds = %.lr.ph436
  %342 = load ptr, ptr %325, align 8, !tbaa !90
  %343 = getelementptr inbounds i8, ptr %335, i64 200
  %344 = load ptr, ptr %343, align 8, !tbaa !70
  %345 = invoke noundef i32 @_ZL16stbrp_pack_rectsP13stbrp_contextP10stbrp_recti(ptr noundef %342, ptr noundef %344, i32 noundef %337)
          to label %.preheader366 unwind label %339

.preheader366:                                    ; preds = %341
  %346 = load i32, ptr %336, align 8, !tbaa !58
  %347 = icmp sgt i32 %346, 0
  br i1 %347, label %.lr.ph434, label %.loopexit

.lr.ph434:                                        ; preds = %.preheader366, %363
  %348 = phi i32 [ %364, %363 ], [ %346, %.preheader366 ]
  %indvars.iv465 = phi i64 [ %indvars.iv.next466, %363 ], [ 0, %.preheader366 ]
  %349 = load ptr, ptr %343, align 8, !tbaa !70
  %350 = getelementptr inbounds %struct.stbrp_rect, ptr %349, i64 %indvars.iv465
  %351 = getelementptr inbounds i8, ptr %350, i64 12
  %352 = load i32, ptr %351, align 4, !tbaa !93
  %.not347 = icmp eq i32 %352, 0
  br i1 %.not347, label %363, label %353

353:                                              ; preds = %.lr.ph434
  %354 = load i32, ptr %27, align 4, !tbaa !18
  %355 = getelementptr inbounds i8, ptr %350, i64 10
  %356 = load i16, ptr %355, align 2, !tbaa !94
  %357 = zext i16 %356 to i32
  %358 = getelementptr inbounds i8, ptr %350, i64 6
  %359 = load i16, ptr %358, align 2, !tbaa !87
  %360 = zext i16 %359 to i32
  %361 = add nuw nsw i32 %360, %357
  %362 = call noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %354, i32 noundef %361)
  store i32 %362, ptr %27, align 4, !tbaa !18
  %.pre = load i32, ptr %336, align 8, !tbaa !58
  br label %363

363:                                              ; preds = %.lr.ph434, %353
  %364 = phi i32 [ %348, %.lr.ph434 ], [ %.pre, %353 ]
  %indvars.iv.next466 = add nuw nsw i64 %indvars.iv465, 1
  %365 = sext i32 %364 to i64
  %366 = icmp slt i64 %indvars.iv.next466, %365
  br i1 %366, label %.lr.ph434, label %.loopexit, !llvm.loop !95

.loopexit:                                        ; preds = %363, %.preheader366, %.lr.ph436
  %367 = add nuw nsw i32 %.0314435, 1
  %368 = load i32, ptr %4, align 8, !tbaa !25
  %369 = icmp slt i32 %367, %368
  br i1 %369, label %.lr.ph436, label %._crit_edge437, !llvm.loop !96

370:                                              ; preds = %._crit_edge437
  %371 = add nsw i32 %332, 1
  br label %374

372:                                              ; preds = %._crit_edge437
  %373 = call noundef i32 @_ZL17ImUpperPowerOfTwoi(i32 noundef %332)
  br label %374

374:                                              ; preds = %372, %370
  %375 = phi i32 [ %371, %370 ], [ %373, %372 ]
  store i32 %375, ptr %27, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #11
  %376 = load i32, ptr %28, align 8, !tbaa !19
  %377 = sitofp i32 %376 to float
  %378 = fdiv float 1.000000e+00, %377
  %379 = sitofp i32 %375 to float
  %380 = fdiv float 1.000000e+00, %379
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef %378, float noundef %380)
  %381 = load i64, ptr %13, align 8
  store i64 %381, ptr %29, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #11
  %382 = load i32, ptr %28, align 8, !tbaa !19
  %383 = load i32, ptr %27, align 4, !tbaa !18
  %384 = mul nsw i32 %383, %382
  %385 = sext i32 %384 to i64
  %386 = invoke noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %385)
          to label %387 unwind label %333

387:                                              ; preds = %374
  %388 = getelementptr inbounds i8, ptr %0, i64 24
  store ptr %386, ptr %388, align 8, !tbaa !97
  %389 = load i32, ptr %28, align 8, !tbaa !19
  %390 = load i32, ptr %27, align 4, !tbaa !18
  %391 = mul nsw i32 %390, %389
  %392 = sext i32 %391 to i64
  call void @llvm.memset.p0.i64(ptr align 1 %386, i8 0, i64 %392, i1 false)
  %393 = load ptr, ptr %388, align 8, !tbaa !97
  %394 = getelementptr inbounds i8, ptr %12, i64 48
  store ptr %393, ptr %394, align 8, !tbaa !98
  %395 = load i32, ptr %27, align 4, !tbaa !18
  %396 = getelementptr inbounds i8, ptr %12, i64 20
  store i32 %395, ptr %396, align 4, !tbaa !99
  %397 = load i32, ptr %4, align 8, !tbaa !25
  %398 = icmp sgt i32 %397, 0
  br i1 %398, label %.lr.ph445, label %._crit_edge446

._crit_edge446:                                   ; preds = %443, %387
  invoke void @_ZL13stbtt_PackEndP18stbtt_pack_context(ptr noundef nonnull %12)
          to label %447 unwind label %333

.lr.ph445:                                        ; preds = %387, %443
  %.0311443 = phi i32 [ %444, %443 ], [ 0, %387 ]
  %399 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %21, i32 noundef %.0311443)
  %400 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0311443)
  %401 = getelementptr inbounds i8, ptr %400, i64 232
  %402 = load i32, ptr %401, align 8, !tbaa !58
  %403 = icmp eq i32 %402, 0
  br i1 %403, label %443, label %406

404:                                              ; preds = %406
  %405 = landingpad { ptr, i32 }
          cleanup
  br label %537

406:                                              ; preds = %.lr.ph445
  %407 = getelementptr inbounds i8, ptr %400, i64 160
  %408 = getelementptr inbounds i8, ptr %400, i64 200
  %409 = load ptr, ptr %408, align 8, !tbaa !70
  %410 = invoke noundef i32 @_ZL35stbtt_PackFontRangesRenderIntoRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef nonnull %12, ptr noundef nonnull %400, ptr noundef nonnull %407, i32 noundef 1, ptr noundef %409)
          to label %411 unwind label %404

411:                                              ; preds = %406
  %412 = getelementptr inbounds i8, ptr %399, i64 80
  %413 = load float, ptr %412, align 8, !tbaa !100
  %414 = fcmp une float %413, 1.000000e+00
  br i1 %414, label %415, label %442

415:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %14) #11
  call void @_Z39ImFontAtlasBuildMultiplyCalcLookupTablePhf(ptr noundef nonnull %14, float noundef %413)
  %416 = load i32, ptr %401, align 8, !tbaa !58
  %417 = icmp sgt i32 %416, 0
  br i1 %417, label %.lr.ph441.preheader, label %._crit_edge442

.lr.ph441.preheader:                              ; preds = %415
  %418 = load ptr, ptr %408, align 8, !tbaa !70
  br label %.lr.ph441

._crit_edge442:                                   ; preds = %437, %415
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #11
  br label %442

.lr.ph441:                                        ; preds = %.lr.ph441.preheader, %437
  %419 = phi i32 [ %438, %437 ], [ %416, %.lr.ph441.preheader ]
  %.0307439 = phi i32 [ %439, %437 ], [ 0, %.lr.ph441.preheader ]
  %.0308438 = phi ptr [ %440, %437 ], [ %418, %.lr.ph441.preheader ]
  %420 = getelementptr inbounds i8, ptr %.0308438, i64 12
  %421 = load i32, ptr %420, align 4, !tbaa !93
  %.not344 = icmp eq i32 %421, 0
  br i1 %.not344, label %437, label %422

422:                                              ; preds = %.lr.ph441
  %423 = load ptr, ptr %388, align 8, !tbaa !97
  %424 = getelementptr inbounds i8, ptr %.0308438, i64 8
  %425 = load i16, ptr %424, align 4, !tbaa !101
  %426 = zext i16 %425 to i32
  %427 = getelementptr inbounds i8, ptr %.0308438, i64 10
  %428 = load i16, ptr %427, align 2, !tbaa !94
  %429 = zext i16 %428 to i32
  %430 = getelementptr inbounds i8, ptr %.0308438, i64 4
  %431 = load i16, ptr %430, align 4, !tbaa !85
  %432 = zext i16 %431 to i32
  %433 = getelementptr inbounds i8, ptr %.0308438, i64 6
  %434 = load i16, ptr %433, align 2, !tbaa !87
  %435 = zext i16 %434 to i32
  %436 = load i32, ptr %28, align 8, !tbaa !19
  call void @_Z34ImFontAtlasBuildMultiplyRectAlpha8PKhPhiiiii(ptr noundef nonnull %14, ptr noundef %423, i32 noundef %426, i32 noundef %429, i32 noundef %432, i32 noundef %435, i32 noundef %436)
  %.pre472 = load i32, ptr %401, align 8, !tbaa !58
  br label %437

437:                                              ; preds = %.lr.ph441, %422
  %438 = phi i32 [ %419, %.lr.ph441 ], [ %.pre472, %422 ]
  %439 = add nuw nsw i32 %.0307439, 1
  %440 = getelementptr inbounds i8, ptr %.0308438, i64 16
  %441 = icmp slt i32 %439, %438
  br i1 %441, label %.lr.ph441, label %._crit_edge442, !llvm.loop !102

442:                                              ; preds = %._crit_edge442, %411
  store ptr null, ptr %408, align 8, !tbaa !70
  br label %443

443:                                              ; preds = %.lr.ph445, %442
  %444 = add nuw nsw i32 %.0311443, 1
  %445 = load i32, ptr %4, align 8, !tbaa !25
  %446 = icmp slt i32 %444, %445
  br i1 %446, label %.lr.ph445, label %._crit_edge446, !llvm.loop !103

447:                                              ; preds = %._crit_edge446
  invoke void @_ZN8ImVectorI10stbrp_rectE5clearEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %.preheader365 unwind label %333

.preheader365:                                    ; preds = %447
  %448 = load i32, ptr %4, align 8, !tbaa !25
  %449 = icmp sgt i32 %448, 0
  br i1 %449, label %.lr.ph452, label %._crit_edge455

.lr.ph452:                                        ; preds = %.preheader365
  %450 = getelementptr inbounds i8, ptr %18, i64 4
  %451 = getelementptr inbounds i8, ptr %18, i64 16
  %452 = getelementptr inbounds i8, ptr %18, i64 20
  %453 = getelementptr inbounds i8, ptr %18, i64 8
  %454 = getelementptr inbounds i8, ptr %18, i64 12
  %455 = getelementptr inbounds i8, ptr %18, i64 24
  %456 = getelementptr inbounds i8, ptr %18, i64 28
  br label %458

.preheader:                                       ; preds = %527
  %457 = icmp sgt i32 %529, 0
  br i1 %457, label %.lr.ph454, label %._crit_edge455

458:                                              ; preds = %.lr.ph452, %527
  %.0306451 = phi i32 [ 0, %.lr.ph452 ], [ %528, %527 ]
  %459 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0306451)
  %460 = getelementptr inbounds i8, ptr %459, i64 232
  %461 = load i32, ptr %460, align 8, !tbaa !58
  %462 = icmp eq i32 %461, 0
  br i1 %462, label %527, label %463

463:                                              ; preds = %458
  %464 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %21, i32 noundef %.0306451)
  %465 = getelementptr inbounds i8, ptr %464, i64 128
  %466 = load ptr, ptr %465, align 8, !tbaa !26
  %467 = getelementptr inbounds i8, ptr %464, i64 20
  %468 = load float, ptr %467, align 4, !tbaa !72
  %469 = call noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef nonnull %459, float noundef %468)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #11
  call void @_ZL21stbtt_GetFontVMetricsPK14stbtt_fontinfoPiS2_S2_(ptr noundef nonnull %459, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %17)
  %470 = load i32, ptr %15, align 4, !tbaa !84
  %471 = sitofp i32 %470 to float
  %.inv = icmp slt i32 %470, 1
  %472 = select i1 %.inv, i32 -1, i32 1
  %473 = sitofp i32 %472 to float
  %474 = call float @llvm.fmuladd.f32(float %471, float %469, float %473)
  %475 = call noundef float @_ZL7ImFloorf(float noundef %474)
  %476 = load i32, ptr %16, align 4, !tbaa !84
  %477 = sitofp i32 %476 to float
  %.inv342 = icmp slt i32 %476, 1
  %478 = select i1 %.inv342, i32 -1, i32 1
  %479 = sitofp i32 %478 to float
  %480 = call float @llvm.fmuladd.f32(float %477, float %469, float %479)
  %481 = call noundef float @_ZL7ImFloorf(float noundef %480)
  invoke void @_Z25ImFontAtlasBuildSetupFontP11ImFontAtlasP6ImFontP12ImFontConfigff(ptr noundef nonnull %0, ptr noundef %466, ptr noundef nonnull %464, float noundef %475, float noundef %481)
          to label %482 unwind label %497

482:                                              ; preds = %463
  %483 = getelementptr inbounds i8, ptr %464, i64 44
  %484 = load float, ptr %483, align 4, !tbaa !104
  %485 = getelementptr inbounds i8, ptr %464, i64 48
  %486 = load float, ptr %485, align 8, !tbaa !105
  %487 = getelementptr inbounds i8, ptr %466, i64 100
  %488 = load float, ptr %487, align 4, !tbaa !106
  %489 = fadd float %488, 5.000000e-01
  %490 = fptosi float %489 to i32
  %491 = sitofp i32 %490 to float
  %492 = fadd float %486, %491
  %493 = load i32, ptr %460, align 8, !tbaa !58
  %494 = icmp sgt i32 %493, 0
  br i1 %494, label %.lr.ph449, label %._crit_edge450

.lr.ph449:                                        ; preds = %482
  %495 = getelementptr inbounds i8, ptr %459, i64 256
  %496 = getelementptr inbounds i8, ptr %459, i64 208
  br label %499

._crit_edge450:                                   ; preds = %521, %482
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  br label %527

497:                                              ; preds = %463
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %531

499:                                              ; preds = %.lr.ph449, %521
  %indvars.iv468 = phi i64 [ 0, %.lr.ph449 ], [ %indvars.iv.next469, %521 ]
  %500 = trunc nuw nsw i64 %indvars.iv468 to i32
  %501 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8ImVectorIiEixEi(ptr noundef nonnull align 8 dereferenceable(16) %495, i32 noundef %500)
  %502 = load i32, ptr %501, align 4, !tbaa !84
  %503 = load ptr, ptr %496, align 8, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #11
  store float 0.000000e+00, ptr %19, align 4, !tbaa !107
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #11
  store float 0.000000e+00, ptr %20, align 4, !tbaa !107
  %504 = load i32, ptr %28, align 8, !tbaa !19
  %505 = load i32, ptr %27, align 4, !tbaa !18
  call void @_ZL19stbtt_GetPackedQuadPK16stbtt_packedchariiiPfS2_P18stbtt_aligned_quadi(ptr noundef %503, i32 noundef %504, i32 noundef %505, i32 noundef %500, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18, i32 noundef 0)
  %506 = trunc i32 %502 to i16
  %507 = load float, ptr %18, align 4, !tbaa !108
  %508 = fadd float %484, %507
  %509 = load float, ptr %450, align 4, !tbaa !110
  %510 = fadd float %492, %509
  %511 = load float, ptr %451, align 4, !tbaa !111
  %512 = fadd float %484, %511
  %513 = load float, ptr %452, align 4, !tbaa !112
  %514 = fadd float %492, %513
  %515 = load float, ptr %453, align 4, !tbaa !113
  %516 = load float, ptr %454, align 4, !tbaa !114
  %517 = load float, ptr %455, align 4, !tbaa !115
  %518 = load float, ptr %456, align 4, !tbaa !116
  %519 = getelementptr inbounds %struct.stbtt_packedchar, ptr %503, i64 %indvars.iv468, i32 6
  %520 = load float, ptr %519, align 4, !tbaa !117
  invoke void @_ZN6ImFont8AddGlyphEP12ImFontConfigtfffffffff(ptr noundef nonnull align 8 dereferenceable(114) %466, ptr noundef nonnull %464, i16 noundef zeroext %506, float noundef %508, float noundef %510, float noundef %512, float noundef %514, float noundef %515, float noundef %516, float noundef %517, float noundef %518, float noundef %520)
          to label %521 unwind label %525

521:                                              ; preds = %499
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #11
  %indvars.iv.next469 = add nuw nsw i64 %indvars.iv468, 1
  %522 = load i32, ptr %460, align 8, !tbaa !58
  %523 = sext i32 %522 to i64
  %524 = icmp slt i64 %indvars.iv.next469, %523
  br i1 %524, label %499, label %._crit_edge450, !llvm.loop !119

525:                                              ; preds = %499
  %526 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #11
  br label %531

527:                                              ; preds = %458, %._crit_edge450
  %528 = add nuw nsw i32 %.0306451, 1
  %529 = load i32, ptr %4, align 8, !tbaa !25
  %530 = icmp slt i32 %528, %529
  br i1 %530, label %458, label %.preheader, !llvm.loop !120

531:                                              ; preds = %525, %497
  %.pn = phi { ptr, i32 } [ %526, %525 ], [ %498, %497 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  br label %537

._crit_edge455:                                   ; preds = %.lr.ph454, %.preheader365, %.preheader
  invoke void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef nonnull %0)
          to label %536 unwind label %333

.lr.ph454:                                        ; preds = %.preheader, %.lr.ph454
  %.0453 = phi i32 [ %533, %.lr.ph454 ], [ 0, %.preheader ]
  %532 = call noundef nonnull align 8 dereferenceable(272) ptr @_ZN8ImVectorI18ImFontBuildSrcDataEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0453)
  call void @_ZN18ImFontBuildSrcDataD2Ev(ptr noundef nonnull align 8 dereferenceable(272) %532) #11
  %533 = add nuw nsw i32 %.0453, 1
  %534 = load i32, ptr %4, align 8, !tbaa !25
  %535 = icmp slt i32 %533, %534
  br i1 %535, label %.lr.ph454, label %._crit_edge455, !llvm.loop !121

536:                                              ; preds = %._crit_edge455
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #11
  call void @_ZN8ImVectorI16stbtt_packedcharED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #11
  call void @_ZN8ImVectorI10stbrp_rectED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #11
  br label %.critedge362

537:                                              ; preds = %531, %404, %339, %333
  %.pn345 = phi { ptr, i32 } [ %340, %339 ], [ %405, %404 ], [ %.pn, %531 ], [ %334, %333 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #11
  br label %538

538:                                              ; preds = %272, %537, %219
  %.pn349.pn = phi { ptr, i32 } [ %220, %219 ], [ %273, %272 ], [ %.pn345, %537 ]
  call void @_ZN8ImVectorI16stbtt_packedcharED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #11
  call void @_ZN8ImVectorI10stbrp_rectED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #11
  br label %539

.critedge362:                                     ; preds = %87, %536
  %.not340384 = phi i1 [ true, %536 ], [ false, %87 ]
  call void @_ZN8ImVectorI18ImFontBuildDstDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #11
  call void @_ZN8ImVectorI18ImFontBuildSrcDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #11
  ret i1 %.not340384

539:                                              ; preds = %190, %198, %217, %538, %155, %134, %82, %49
  %.pn356.pn.pn = phi { ptr, i32 } [ %83, %82 ], [ %50, %49 ], [ %191, %190 ], [ %199, %198 ], [ %.pn349.pn, %538 ], [ %218, %217 ], [ %156, %155 ], [ %135, %134 ]
  call void @_ZN8ImVectorI18ImFontBuildDstDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #11
  call void @_ZN8ImVectorI18ImFontBuildSrcDataED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn356.pn.pn
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z20ImFontAtlasBuildInitP11ImFontAtlas(ptr noundef) local_unnamed_addr #7

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI18ImFontBuildSrcDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI18ImFontBuildDstDataE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #8 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6ImFont8IsLoadedEv(ptr noundef nonnull align 8 dereferenceable(114)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL27stbtt_GetFontOffsetForIndexPKhi(ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL14stbtt_InitFontP14stbtt_fontinfoPKhi(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #7

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImBitVector6CreateEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11ImBitVector7TestBitEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImBitVector6SetBitEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorIiE7reserveEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL30UnpackBitVectorToFlatIndexListPK11ImBitVectorP8ImVectorIiE(ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11ImBitVector5ClearEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #7 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI10stbrp_rectE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI16stbtt_packedcharE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #8 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef, float noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZL31stbtt_ScaleForMappingEmToPixelsPK14stbtt_fontinfof(ptr noundef, float noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL31stbtt_GetGlyphBitmapBoxSubpixelPK14stbtt_fontinfoiffffPiS2_S2_S2_(ptr noundef, i32 noundef, float noundef, float noundef, float noundef, float noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL15stbtt_PackBeginP18stbtt_pack_contextPhiiiiPv(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL16stbrp_pack_rectsP13stbrp_contextP10stbrp_recti(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL17ImUpperPowerOfTwoi(i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL35stbtt_PackFontRangesRenderIntoRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL13stbtt_PackEndP18stbtt_pack_context(ptr noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL21stbtt_GetFontVMetricsPK14stbtt_fontinfoPiS2_S2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL7ImFloorf(float noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z25ImFontAtlasBuildSetupFontP11ImFontAtlasP6ImFontP12ImFontConfigff(ptr noundef, ptr noundef, ptr noundef, float noundef, float noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL19stbtt_GetPackedQuadPK16stbtt_packedchariiiPfS2_P18stbtt_aligned_quadi(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6ImFont8AddGlyphEP12ImFontConfigtfffffffff(ptr noundef nonnull align 8 dereferenceable(114), ptr noundef, i16 noundef zeroext, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef) local_unnamed_addr #7

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.sqrt.f32(float) #9

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn 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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { noreturn nounwind }
attributes #11 = { 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 96}
!6 = !{!"_ZTS11ImFontAtlas", !7, i64 0, !10, i64 4, !11, i64 8, !10, i64 16, !10, i64 20, !11, i64 24, !11, i64 32, !10, i64 40, !10, i64 44, !12, i64 48, !12, i64 56, !14, i64 64, !15, i64 80, !16, i64 96, !8, i64 112, !10, i64 1136, !10, i64 1140}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"_ZTS6ImVec2", !13, i64 0, !13, i64 4}
!13 = !{!"float", !8, i64 0}
!14 = !{!"_ZTS8ImVectorIP6ImFontE", !10, i64 0, !10, i64 4, !11, i64 8}
!15 = !{!"_ZTS8ImVectorI21ImFontAtlasCustomRectE", !10, i64 0, !10, i64 4, !11, i64 8}
!16 = !{!"_ZTS8ImVectorI12ImFontConfigE", !10, i64 0, !10, i64 4, !11, i64 8}
!17 = !{!6, !11, i64 8}
!18 = !{!6, !10, i64 44}
!19 = !{!6, !10, i64 40}
!20 = !{!6, !10, i64 64}
!21 = !{!22, !11, i64 8}
!22 = !{!"_ZTS8ImVectorI18ImFontBuildSrcDataE", !10, i64 0, !10, i64 4, !11, i64 8}
!23 = !{!24, !11, i64 8}
!24 = !{!"_ZTS8ImVectorI18ImFontBuildDstDataE", !10, i64 0, !10, i64 4, !11, i64 8}
!25 = !{!22, !10, i64 0}
!26 = !{!27, !11, i64 128}
!27 = !{!"_ZTS12ImFontConfig", !11, i64 0, !10, i64 8, !7, i64 12, !10, i64 16, !13, i64 20, !10, i64 24, !10, i64 28, !7, i64 32, !12, i64 36, !12, i64 44, !11, i64 56, !13, i64 64, !13, i64 68, !7, i64 72, !10, i64 76, !13, i64 80, !28, i64 84, !8, i64 86, !11, i64 128}
!28 = !{!"short", !8, i64 0}
!29 = !{!30, !11, i64 72}
!30 = !{!"_ZTS6ImFont", !31, i64 0, !13, i64 16, !13, i64 20, !32, i64 24, !33, i64 40, !11, i64 56, !12, i64 64, !11, i64 72, !11, i64 80, !28, i64 88, !28, i64 90, !28, i64 92, !7, i64 94, !13, i64 96, !13, i64 100, !13, i64 104, !10, i64 108, !8, i64 112}
!31 = !{!"_ZTS8ImVectorIfE", !10, i64 0, !10, i64 4, !11, i64 8}
!32 = !{!"_ZTS8ImVectorItE", !10, i64 0, !10, i64 4, !11, i64 8}
!33 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !10, i64 0, !10, i64 4, !11, i64 8}
!34 = !{!35, !10, i64 224}
!35 = !{!"_ZTS18ImFontBuildSrcData", !36, i64 0, !38, i64 160, !11, i64 200, !11, i64 208, !11, i64 216, !10, i64 224, !10, i64 228, !10, i64 232, !39, i64 240, !41, i64 256}
!36 = !{!"_ZTS14stbtt_fontinfo", !11, i64 0, !11, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !37, i64 64, !37, i64 80, !37, i64 96, !37, i64 112, !37, i64 128, !37, i64 144}
!37 = !{!"_ZTS10stbtt__buf", !11, i64 0, !10, i64 8, !10, i64 12}
!38 = !{!"_ZTS16stbtt_pack_range", !13, i64 0, !10, i64 4, !11, i64 8, !10, i64 16, !11, i64 24, !8, i64 32, !8, i64 33}
!39 = !{!"_ZTS11ImBitVector", !40, i64 0}
!40 = !{!"_ZTS8ImVectorIjE", !10, i64 0, !10, i64 4, !11, i64 8}
!41 = !{!"_ZTS8ImVectorIiE", !10, i64 0, !10, i64 4, !11, i64 8}
!42 = !{!11, !11, i64 0}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.mustprogress"}
!45 = !{!27, !11, i64 0}
!46 = !{!27, !10, i64 16}
!47 = !{!27, !11, i64 56}
!48 = !{!35, !11, i64 216}
!49 = !{!28, !28, i64 0}
!50 = !{!35, !10, i64 228}
!51 = distinct !{!51, !44}
!52 = !{!53, !10, i64 0}
!53 = !{!"_ZTS18ImFontBuildDstData", !10, i64 0, !10, i64 4, !10, i64 8, !39, i64 16}
!54 = !{!53, !10, i64 4}
!55 = distinct !{!55, !44}
!56 = distinct !{!56, !44}
!57 = distinct !{!57, !44}
!58 = !{!35, !10, i64 232}
!59 = !{!53, !10, i64 8}
!60 = distinct !{!60, !44}
!61 = distinct !{!61, !44}
!62 = !{!24, !10, i64 0}
!63 = !{!35, !10, i64 256}
!64 = distinct !{!64, !44}
!65 = !{!66, !11, i64 8}
!66 = !{!"_ZTS8ImVectorI10stbrp_rectE", !10, i64 0, !10, i64 4, !11, i64 8}
!67 = !{!68, !11, i64 8}
!68 = !{!"_ZTS8ImVectorI16stbtt_packedcharE", !10, i64 0, !10, i64 4, !11, i64 8}
!69 = !{!6, !10, i64 16}
!70 = !{!35, !11, i64 200}
!71 = !{!35, !11, i64 208}
!72 = !{!27, !13, i64 20}
!73 = !{!35, !13, i64 160}
!74 = !{!35, !10, i64 164}
!75 = !{!35, !11, i64 264}
!76 = !{!35, !11, i64 168}
!77 = !{!35, !10, i64 176}
!78 = !{!35, !11, i64 184}
!79 = !{!27, !10, i64 24}
!80 = !{!35, !8, i64 192}
!81 = !{!27, !10, i64 28}
!82 = !{!35, !8, i64 193}
!83 = !{!6, !10, i64 20}
!84 = !{!10, !10, i64 0}
!85 = !{!86, !28, i64 4}
!86 = !{!"_ZTS10stbrp_rect", !10, i64 0, !28, i64 4, !28, i64 6, !28, i64 8, !28, i64 10, !10, i64 12}
!87 = !{!86, !28, i64 6}
!88 = distinct !{!88, !44}
!89 = distinct !{!89, !44}
!90 = !{!91, !11, i64 8}
!91 = !{!"_ZTS18stbtt_pack_context", !11, i64 0, !11, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !11, i64 48, !11, i64 56}
!92 = !{!6, !10, i64 4}
!93 = !{!86, !10, i64 12}
!94 = !{!86, !28, i64 10}
!95 = distinct !{!95, !44}
!96 = distinct !{!96, !44}
!97 = !{!6, !11, i64 24}
!98 = !{!91, !11, i64 48}
!99 = !{!91, !10, i64 20}
!100 = !{!27, !13, i64 80}
!101 = !{!86, !28, i64 8}
!102 = distinct !{!102, !44}
!103 = distinct !{!103, !44}
!104 = !{!27, !13, i64 44}
!105 = !{!27, !13, i64 48}
!106 = !{!30, !13, i64 100}
!107 = !{!13, !13, i64 0}
!108 = !{!109, !13, i64 0}
!109 = !{!"_ZTS18stbtt_aligned_quad", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28}
!110 = !{!109, !13, i64 4}
!111 = !{!109, !13, i64 16}
!112 = !{!109, !13, i64 20}
!113 = !{!109, !13, i64 8}
!114 = !{!109, !13, i64 12}
!115 = !{!109, !13, i64 24}
!116 = !{!109, !13, i64 28}
!117 = !{!118, !13, i64 16}
!118 = !{!"_ZTS16stbtt_packedchar", !28, i64 0, !28, i64 2, !28, i64 4, !28, i64 6, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24}
!119 = distinct !{!119, !44}
!120 = distinct !{!120, !44}
!121 = distinct !{!121, !44}


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