; LLVM IR from Eukky/TRender :: lib/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.stbtt_pack_context = type { ptr, ptr, i32, i32, i32, i32, i32, i32, ptr, ptr }
%struct.stbtt_aligned_quad = type { float, float, float, float, float, float, float, float }
%struct.ImFontAtlas = type <{ i32, [4 x i8], ptr, i32, i32, ptr, ptr, i32, i32, %struct.ImVec2, %struct.ImVec2, %class.ImVector.8, %class.ImVector.9, %class.ImVector.10, [1 x i32], [4 x i8] }>
%class.ImVector.8 = type { i32, i32, ptr }
%class.ImVector.9 = type { i32, i32, ptr }
%class.ImVector.10 = type { i32, i32, ptr }
%struct.ImFontConfig = type { ptr, i32, i8, i32, float, i32, i32, i8, %struct.ImVec2, %struct.ImVec2, ptr, float, float, i8, i32, float, [40 x i8], ptr }
%struct.ImFontTempBuildData = type { %struct.stbtt_fontinfo, ptr, i32, ptr, i32 }
%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.ImFont = type { float, float, %struct.ImVec2, %class.ImVector.6, %class.ImVector.7, %class.ImVector.0, ptr, float, i16, i16, ptr, ptr, float, float, i8, i32 }
%class.ImVector.6 = type { i32, i32, ptr }
%class.ImVector.7 = type { i32, i32, ptr }
%class.ImVector.0 = type { i32, i32, ptr }
%struct.stbtt_pack_range = type { float, i32, ptr, i32, ptr, i8, i8 }
%struct.stbtt_packedchar = type { i16, i16, i16, i16, float, float, float, float, float }
%struct.stbrp_rect = type { i32, i16, i16, i16, i16, i32 }

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

; 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: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL7ImClampIfET_S0_S0_S0_(float noundef, float noundef, 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) #7 align 2

declare void @_ZN5ImGui7MemFreeEPv(ptr noundef) #4

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

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

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

73:                                               ; preds = %1
  br label %76

74:                                               ; preds = %1
  call void @__assert_fail(ptr noundef @.str.23, ptr noundef @.str.1, i32 noundef 1696, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

75:                                               ; No predecessors!
  br label %76

76:                                               ; preds = %75, %73
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_Z42ImFontAtlasBuildRegisterDefaultCustomRectsP11ImFontAtlas(ptr noundef %77)
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.ImFontAtlas, ptr %78, i32 0, i32 2
  store ptr null, ptr %79, align 8, !tbaa !17
  %80 = load ptr, ptr %3, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.ImFontAtlas, ptr %80, i32 0, i32 8
  store i32 0, ptr %81, align 4, !tbaa !18
  %82 = load ptr, ptr %3, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.ImFontAtlas, ptr %82, i32 0, i32 7
  store i32 0, ptr %83, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %4, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.ImFontAtlas, ptr %84, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %85, ptr align 4 %4, i64 8, i1 false), !tbaa.struct !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %5, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.ImFontAtlas, ptr %86, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %87, ptr align 4 %5, i64 8, i1 false), !tbaa.struct !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #10
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZN11ImFontAtlas12ClearTexDataEv(ptr noundef nonnull align 8 dereferenceable(116) %88)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store i32 0, ptr %6, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  store i32 0, ptr %7, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store i32 0, ptr %8, align 4, !tbaa !22
  br label %89

89:                                               ; preds = %147, %76
  %90 = load i32, ptr %8, align 4, !tbaa !22
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ImFontAtlas, ptr %91, i32 0, i32 13
  %93 = getelementptr inbounds %class.ImVector.10, ptr %92, i32 0, i32 0
  %94 = load i32, ptr %93, align 8, !tbaa !9
  %95 = icmp slt i32 %90, %94
  br i1 %95, label %97, label %96

96:                                               ; preds = %89
  store i32 2, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %150

97:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #10
  %98 = load ptr, ptr %3, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.ImFontAtlas, ptr %98, i32 0, i32 13
  %100 = load i32, ptr %8, align 4, !tbaa !22
  %101 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %99, i32 noundef %100)
  store ptr %101, ptr %10, align 8, !tbaa !5
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.ImFontConfig, ptr %102, i32 0, i32 10
  %104 = load ptr, ptr %103, align 8, !tbaa !23
  %105 = icmp ne ptr %104, null
  br i1 %105, label %111, label %106

106:                                              ; preds = %97
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = call noundef ptr @_ZN11ImFontAtlas21GetGlyphRangesDefaultEv(ptr noundef nonnull align 8 dereferenceable(116) %107)
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.ImFontConfig, ptr %109, i32 0, i32 10
  store ptr %108, ptr %110, align 8, !tbaa !23
  br label %111

111:                                              ; preds = %106, %97
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  %112 = load ptr, ptr %10, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.ImFontConfig, ptr %112, i32 0, i32 10
  %114 = load ptr, ptr %113, align 8, !tbaa !23
  store ptr %114, ptr %11, align 8, !tbaa !5
  br label %115

115:                                              ; preds = %141, %111
  %116 = load ptr, ptr %11, align 8, !tbaa !5
  %117 = getelementptr inbounds i16, ptr %116, i64 0
  %118 = load i16, ptr %117, align 2, !tbaa !26
  %119 = icmp ne i16 %118, 0
  br i1 %119, label %120, label %125

120:                                              ; preds = %115
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds i16, ptr %121, i64 1
  %123 = load i16, ptr %122, align 2, !tbaa !26
  %124 = icmp ne i16 %123, 0
  br label %125

125:                                              ; preds = %120, %115
  %126 = phi i1 [ false, %115 ], [ %124, %120 ]
  br i1 %126, label %128, label %127

127:                                              ; preds = %125
  store i32 5, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  br label %146

128:                                              ; preds = %125
  %129 = load ptr, ptr %11, align 8, !tbaa !5
  %130 = getelementptr inbounds i16, ptr %129, i64 1
  %131 = load i16, ptr %130, align 2, !tbaa !26
  %132 = zext i16 %131 to i32
  %133 = load ptr, ptr %11, align 8, !tbaa !5
  %134 = getelementptr inbounds i16, ptr %133, i64 0
  %135 = load i16, ptr %134, align 2, !tbaa !26
  %136 = zext i16 %135 to i32
  %137 = sub nsw i32 %132, %136
  %138 = add nsw i32 %137, 1
  %139 = load i32, ptr %6, align 4, !tbaa !22
  %140 = add nsw i32 %139, %138
  store i32 %140, ptr %6, align 4, !tbaa !22
  br label %141

141:                                              ; preds = %128
  %142 = load ptr, ptr %11, align 8, !tbaa !5
  %143 = getelementptr inbounds i16, ptr %142, i64 2
  store ptr %143, ptr %11, align 8, !tbaa !5
  %144 = load i32, ptr %7, align 4, !tbaa !22
  %145 = add nsw i32 %144, 1
  store i32 %145, ptr %7, align 4, !tbaa !22
  br label %115, !llvm.loop !28

146:                                              ; preds = %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #10
  br label %147

147:                                              ; preds = %146
  %148 = load i32, ptr %8, align 4, !tbaa !22
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %8, align 4, !tbaa !22
  br label %89, !llvm.loop !30

150:                                              ; preds = %96
  %151 = load ptr, ptr %3, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.ImFontAtlas, ptr %151, i32 0, i32 3
  %153 = load i32, ptr %152, align 8, !tbaa !31
  %154 = icmp sgt i32 %153, 0
  br i1 %154, label %155, label %159

155:                                              ; preds = %150
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.ImFontAtlas, ptr %156, i32 0, i32 3
  %158 = load i32, ptr %157, align 8, !tbaa !31
  br label %176

159:                                              ; preds = %150
  %160 = load i32, ptr %6, align 4, !tbaa !22
  %161 = icmp sgt i32 %160, 4000
  br i1 %161, label %162, label %163

162:                                              ; preds = %159
  br label %174

163:                                              ; preds = %159
  %164 = load i32, ptr %6, align 4, !tbaa !22
  %165 = icmp sgt i32 %164, 2000
  br i1 %165, label %166, label %167

166:                                              ; preds = %163
  br label %172

167:                                              ; preds = %163
  %168 = load i32, ptr %6, align 4, !tbaa !22
  %169 = icmp sgt i32 %168, 1000
  %170 = zext i1 %169 to i64
  %171 = select i1 %169, i32 1024, i32 512
  br label %172

172:                                              ; preds = %167, %166
  %173 = phi i32 [ 2048, %166 ], [ %171, %167 ]
  br label %174

174:                                              ; preds = %172, %162
  %175 = phi i32 [ 4096, %162 ], [ %173, %172 ]
  br label %176

176:                                              ; preds = %174, %155
  %177 = phi i32 [ %158, %155 ], [ %175, %174 ]
  %178 = load ptr, ptr %3, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.ImFontAtlas, ptr %178, i32 0, i32 7
  store i32 %177, ptr %179, align 8, !tbaa !19
  %180 = load ptr, ptr %3, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.ImFontAtlas, ptr %180, i32 0, i32 8
  store i32 0, ptr %181, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  store i32 32768, ptr %12, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 56, ptr %13) #10
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 56, i1 false)
  %182 = load ptr, ptr %3, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.ImFontAtlas, ptr %182, i32 0, i32 7
  %184 = load i32, ptr %183, align 8, !tbaa !19
  %185 = load ptr, ptr %3, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.ImFontAtlas, ptr %185, i32 0, i32 4
  %187 = load i32, ptr %186, align 4, !tbaa !32
  %188 = call noundef i32 @_ZL15stbtt_PackBeginP18stbtt_pack_contextPhiiiiPv(ptr noundef %13, ptr noundef null, i32 noundef %184, i32 noundef 32768, i32 noundef 0, i32 noundef %187, ptr noundef null)
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %191, label %190

190:                                              ; preds = %176
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %1034

191:                                              ; preds = %176
  call void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef %13, i32 noundef 1, i32 noundef 1)
  %192 = load ptr, ptr %3, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.stbtt_pack_context, ptr %13, i32 0, i32 1
  %194 = load ptr, ptr %193, align 8, !tbaa !33
  call void @_Z31ImFontAtlasBuildPackCustomRectsP11ImFontAtlasPv(ptr noundef %192, ptr noundef %194)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  %195 = load ptr, ptr %3, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.ImFontAtlas, ptr %195, i32 0, i32 13
  %197 = getelementptr inbounds %class.ImVector.10, ptr %196, i32 0, i32 0
  %198 = load i32, ptr %197, align 8, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = mul i64 %199, 192
  %201 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %200)
  store ptr %201, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store i32 0, ptr %15, align 4, !tbaa !22
  br label %202

202:                                              ; preds = %278, %191
  %203 = load i32, ptr %15, align 4, !tbaa !22
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.ImFontAtlas, ptr %204, i32 0, i32 13
  %206 = getelementptr inbounds %class.ImVector.10, ptr %205, i32 0, i32 0
  %207 = load i32, ptr %206, align 8, !tbaa !9
  %208 = icmp slt i32 %203, %207
  br i1 %208, label %210, label %209

209:                                              ; preds = %202
  store i32 8, ptr %9, align 4
  br label %281

210:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  %211 = load ptr, ptr %3, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.ImFontAtlas, ptr %211, i32 0, i32 13
  %213 = load i32, ptr %15, align 4, !tbaa !22
  %214 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %212, i32 noundef %213)
  store ptr %214, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %215 = load ptr, ptr %14, align 8, !tbaa !5
  %216 = load i32, ptr %15, align 4, !tbaa !22
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %215, i64 %217
  store ptr %218, ptr %17, align 8, !tbaa !5
  %219 = load ptr, ptr %16, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.ImFontConfig, ptr %219, i32 0, i32 17
  %221 = load ptr, ptr %220, align 8, !tbaa !35
  %222 = icmp ne ptr %221, null
  br i1 %222, label %223, label %238

223:                                              ; preds = %210
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.ImFontConfig, ptr %224, i32 0, i32 17
  %226 = load ptr, ptr %225, align 8, !tbaa !35
  %227 = call noundef zeroext i1 @_ZNK6ImFont8IsLoadedEv(ptr noundef nonnull align 8 dereferenceable(112) %226)
  br i1 %227, label %228, label %236

228:                                              ; preds = %223
  %229 = load ptr, ptr %16, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.ImFontConfig, ptr %229, i32 0, i32 17
  %231 = load ptr, ptr %230, align 8, !tbaa !35
  %232 = getelementptr inbounds %struct.ImFont, ptr %231, i32 0, i32 11
  %233 = load ptr, ptr %232, align 8, !tbaa !36
  %234 = load ptr, ptr %3, align 8, !tbaa !5
  %235 = icmp eq ptr %233, %234
  br label %236

236:                                              ; preds = %228, %223
  %237 = phi i1 [ true, %223 ], [ %235, %228 ]
  br label %238

238:                                              ; preds = %236, %210
  %239 = phi i1 [ false, %210 ], [ %237, %236 ]
  br i1 %239, label %240, label %241

240:                                              ; preds = %238
  br label %243

241:                                              ; preds = %238
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.1, i32 noundef 1747, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

242:                                              ; No predecessors!
  br label %243

243:                                              ; preds = %242, %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  %244 = load ptr, ptr %16, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.ImFontConfig, ptr %244, i32 0, i32 0
  %246 = load ptr, ptr %245, align 8, !tbaa !41
  %247 = load ptr, ptr %16, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.ImFontConfig, ptr %247, i32 0, i32 3
  %249 = load i32, ptr %248, align 8, !tbaa !42
  %250 = call noundef i32 @_ZL27stbtt_GetFontOffsetForIndexPKhi(ptr noundef %246, i32 noundef %249)
  store i32 %250, ptr %18, align 4, !tbaa !22
  %251 = load i32, ptr %18, align 4, !tbaa !22
  %252 = icmp sge i32 %251, 0
  br i1 %252, label %253, label %254

253:                                              ; preds = %243
  br label %254

254:                                              ; preds = %253, %243
  %255 = phi i1 [ false, %243 ], [ true, %253 ]
  br i1 %255, label %256, label %257

256:                                              ; preds = %254
  br label %259

257:                                              ; preds = %254
  call void @__assert_fail(ptr noundef @.str.26, ptr noundef @.str.1, i32 noundef 1750, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

258:                                              ; No predecessors!
  br label %259

259:                                              ; preds = %258, %256
  %260 = load ptr, ptr %17, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %260, i32 0, i32 0
  %262 = load ptr, ptr %16, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.ImFontConfig, ptr %262, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !41
  %265 = load i32, ptr %18, align 4, !tbaa !22
  %266 = call noundef i32 @_ZL14stbtt_InitFontP14stbtt_fontinfoPKhi(ptr noundef %261, ptr noundef %264, i32 noundef %265)
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %274, label %268

268:                                              ; preds = %259
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.ImFontAtlas, ptr %269, i32 0, i32 8
  store i32 0, ptr %270, align 4, !tbaa !18
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.ImFontAtlas, ptr %271, i32 0, i32 7
  store i32 0, ptr %272, align 8, !tbaa !19
  %273 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %273)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %275

274:                                              ; preds = %259
  store i32 0, ptr %9, align 4
  br label %275

275:                                              ; preds = %274, %268
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  %276 = load i32, ptr %9, align 4
  switch i32 %276, label %281 [
    i32 0, label %277
  ]

277:                                              ; preds = %275
  br label %278

278:                                              ; preds = %277
  %279 = load i32, ptr %15, align 4, !tbaa !22
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %15, align 4, !tbaa !22
  br label %202, !llvm.loop !43

281:                                              ; preds = %275, %209
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  %282 = load i32, ptr %9, align 4
  switch i32 %282, label %1033 [
    i32 8, label %283
  ]

283:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  store i32 0, ptr %19, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  store i32 0, ptr %20, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  store i32 0, ptr %21, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %284 = load i32, ptr %6, align 4, !tbaa !22
  %285 = sext i32 %284 to i64
  %286 = mul i64 %285, 28
  %287 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %286)
  store ptr %287, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %288 = load i32, ptr %6, align 4, !tbaa !22
  %289 = sext i32 %288 to i64
  %290 = mul i64 %289, 16
  %291 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %290)
  store ptr %291, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %292 = load i32, ptr %7, align 4, !tbaa !22
  %293 = sext i32 %292 to i64
  %294 = mul i64 %293, 40
  %295 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %294)
  store ptr %295, ptr %24, align 8, !tbaa !5
  %296 = load ptr, ptr %22, align 8, !tbaa !5
  %297 = load i32, ptr %6, align 4, !tbaa !22
  %298 = sext i32 %297 to i64
  %299 = mul i64 %298, 28
  call void @llvm.memset.p0.i64(ptr align 4 %296, i8 0, i64 %299, i1 false)
  %300 = load ptr, ptr %23, align 8, !tbaa !5
  %301 = load i32, ptr %6, align 4, !tbaa !22
  %302 = sext i32 %301 to i64
  %303 = mul i64 %302, 16
  call void @llvm.memset.p0.i64(ptr align 4 %300, i8 0, i64 %303, i1 false)
  %304 = load ptr, ptr %24, align 8, !tbaa !5
  %305 = load i32, ptr %7, align 4, !tbaa !22
  %306 = sext i32 %305 to i64
  %307 = mul i64 %306, 40
  call void @llvm.memset.p0.i64(ptr align 8 %304, i8 0, i64 %307, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 0, ptr %25, align 4, !tbaa !22
  br label %308

308:                                              ; preds = %610, %283
  %309 = load i32, ptr %25, align 4, !tbaa !22
  %310 = load ptr, ptr %3, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.ImFontAtlas, ptr %310, i32 0, i32 13
  %312 = getelementptr inbounds %class.ImVector.10, ptr %311, i32 0, i32 0
  %313 = load i32, ptr %312, align 8, !tbaa !9
  %314 = icmp slt i32 %309, %313
  br i1 %314, label %316, label %315

315:                                              ; preds = %308
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %613

316:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %317 = load ptr, ptr %3, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ImFontAtlas, ptr %317, i32 0, i32 13
  %319 = load i32, ptr %25, align 4, !tbaa !22
  %320 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %318, i32 noundef %319)
  store ptr %320, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  %321 = load ptr, ptr %14, align 8, !tbaa !5
  %322 = load i32, ptr %25, align 4, !tbaa !22
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %321, i64 %323
  store ptr %324, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  store i32 0, ptr %28, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  store i32 0, ptr %29, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %325 = load ptr, ptr %26, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.ImFontConfig, ptr %325, i32 0, i32 10
  %327 = load ptr, ptr %326, align 8, !tbaa !23
  store ptr %327, ptr %30, align 8, !tbaa !5
  br label %328

328:                                              ; preds = %354, %316
  %329 = load ptr, ptr %30, align 8, !tbaa !5
  %330 = getelementptr inbounds i16, ptr %329, i64 0
  %331 = load i16, ptr %330, align 2, !tbaa !26
  %332 = icmp ne i16 %331, 0
  br i1 %332, label %333, label %338

333:                                              ; preds = %328
  %334 = load ptr, ptr %30, align 8, !tbaa !5
  %335 = getelementptr inbounds i16, ptr %334, i64 1
  %336 = load i16, ptr %335, align 2, !tbaa !26
  %337 = icmp ne i16 %336, 0
  br label %338

338:                                              ; preds = %333, %328
  %339 = phi i1 [ false, %328 ], [ %337, %333 ]
  br i1 %339, label %341, label %340

340:                                              ; preds = %338
  store i32 14, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %359

341:                                              ; preds = %338
  %342 = load ptr, ptr %30, align 8, !tbaa !5
  %343 = getelementptr inbounds i16, ptr %342, i64 1
  %344 = load i16, ptr %343, align 2, !tbaa !26
  %345 = zext i16 %344 to i32
  %346 = load ptr, ptr %30, align 8, !tbaa !5
  %347 = getelementptr inbounds i16, ptr %346, i64 0
  %348 = load i16, ptr %347, align 2, !tbaa !26
  %349 = zext i16 %348 to i32
  %350 = sub nsw i32 %345, %349
  %351 = add nsw i32 %350, 1
  %352 = load i32, ptr %28, align 4, !tbaa !22
  %353 = add nsw i32 %352, %351
  store i32 %353, ptr %28, align 4, !tbaa !22
  br label %354

354:                                              ; preds = %341
  %355 = load ptr, ptr %30, align 8, !tbaa !5
  %356 = getelementptr inbounds i16, ptr %355, i64 2
  store ptr %356, ptr %30, align 8, !tbaa !5
  %357 = load i32, ptr %29, align 4, !tbaa !22
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %29, align 4, !tbaa !22
  br label %328, !llvm.loop !44

359:                                              ; preds = %340
  %360 = load ptr, ptr %24, align 8, !tbaa !5
  %361 = load i32, ptr %21, align 4, !tbaa !22
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds %struct.stbtt_pack_range, ptr %360, i64 %362
  %364 = load ptr, ptr %27, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %364, i32 0, i32 3
  store ptr %363, ptr %365, align 8, !tbaa !45
  %366 = load i32, ptr %29, align 4, !tbaa !22
  %367 = load ptr, ptr %27, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %367, i32 0, i32 4
  store i32 %366, ptr %368, align 8, !tbaa !49
  %369 = load i32, ptr %29, align 4, !tbaa !22
  %370 = load i32, ptr %21, align 4, !tbaa !22
  %371 = add nsw i32 %370, %369
  store i32 %371, ptr %21, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store i32 0, ptr %31, align 4, !tbaa !22
  br label %372

372:                                              ; preds = %425, %359
  %373 = load i32, ptr %31, align 4, !tbaa !22
  %374 = load i32, ptr %29, align 4, !tbaa !22
  %375 = icmp slt i32 %373, %374
  br i1 %375, label %377, label %376

376:                                              ; preds = %372
  store i32 17, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %428

377:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %378 = load ptr, ptr %26, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.ImFontConfig, ptr %378, i32 0, i32 10
  %380 = load ptr, ptr %379, align 8, !tbaa !23
  %381 = load i32, ptr %31, align 4, !tbaa !22
  %382 = mul nsw i32 %381, 2
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds i16, ptr %380, i64 %383
  store ptr %384, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %385 = load ptr, ptr %27, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %385, i32 0, i32 3
  %387 = load ptr, ptr %386, align 8, !tbaa !45
  %388 = load i32, ptr %31, align 4, !tbaa !22
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds %struct.stbtt_pack_range, ptr %387, i64 %389
  store ptr %390, ptr %33, align 8, !tbaa !5
  %391 = load ptr, ptr %26, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.ImFontConfig, ptr %391, i32 0, i32 4
  %393 = load float, ptr %392, align 4, !tbaa !50
  %394 = load ptr, ptr %33, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.stbtt_pack_range, ptr %394, i32 0, i32 0
  store float %393, ptr %395, align 8, !tbaa !51
  %396 = load ptr, ptr %32, align 8, !tbaa !5
  %397 = getelementptr inbounds i16, ptr %396, i64 0
  %398 = load i16, ptr %397, align 2, !tbaa !26
  %399 = zext i16 %398 to i32
  %400 = load ptr, ptr %33, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.stbtt_pack_range, ptr %400, i32 0, i32 1
  store i32 %399, ptr %401, align 4, !tbaa !53
  %402 = load ptr, ptr %32, align 8, !tbaa !5
  %403 = getelementptr inbounds i16, ptr %402, i64 1
  %404 = load i16, ptr %403, align 2, !tbaa !26
  %405 = zext i16 %404 to i32
  %406 = load ptr, ptr %32, align 8, !tbaa !5
  %407 = getelementptr inbounds i16, ptr %406, i64 0
  %408 = load i16, ptr %407, align 2, !tbaa !26
  %409 = zext i16 %408 to i32
  %410 = sub nsw i32 %405, %409
  %411 = add nsw i32 %410, 1
  %412 = load ptr, ptr %33, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.stbtt_pack_range, ptr %412, i32 0, i32 3
  store i32 %411, ptr %413, align 8, !tbaa !54
  %414 = load ptr, ptr %22, align 8, !tbaa !5
  %415 = load i32, ptr %19, align 4, !tbaa !22
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds %struct.stbtt_packedchar, ptr %414, i64 %416
  %418 = load ptr, ptr %33, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.stbtt_pack_range, ptr %418, i32 0, i32 4
  store ptr %417, ptr %419, align 8, !tbaa !55
  %420 = load ptr, ptr %33, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.stbtt_pack_range, ptr %420, i32 0, i32 3
  %422 = load i32, ptr %421, align 8, !tbaa !54
  %423 = load i32, ptr %19, align 4, !tbaa !22
  %424 = add nsw i32 %423, %422
  store i32 %424, ptr %19, align 4, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  br label %425

425:                                              ; preds = %377
  %426 = load i32, ptr %31, align 4, !tbaa !22
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr %31, align 4, !tbaa !22
  br label %372, !llvm.loop !56

428:                                              ; preds = %376
  %429 = load ptr, ptr %23, align 8, !tbaa !5
  %430 = load i32, ptr %20, align 4, !tbaa !22
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds %struct.stbrp_rect, ptr %429, i64 %431
  %433 = load ptr, ptr %27, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %433, i32 0, i32 1
  store ptr %432, ptr %434, align 8, !tbaa !57
  %435 = load i32, ptr %28, align 4, !tbaa !22
  %436 = load ptr, ptr %27, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %436, i32 0, i32 2
  store i32 %435, ptr %437, align 8, !tbaa !58
  %438 = load i32, ptr %28, align 4, !tbaa !22
  %439 = load i32, ptr %20, align 4, !tbaa !22
  %440 = add nsw i32 %439, %438
  store i32 %440, ptr %20, align 4, !tbaa !22
  %441 = load ptr, ptr %26, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.ImFontConfig, ptr %441, i32 0, i32 5
  %443 = load i32, ptr %442, align 8, !tbaa !59
  %444 = load ptr, ptr %26, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.ImFontConfig, ptr %444, i32 0, i32 6
  %446 = load i32, ptr %445, align 4, !tbaa !60
  call void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef %13, i32 noundef %443, i32 noundef %446)
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  %447 = load ptr, ptr %27, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %447, i32 0, i32 0
  %449 = load ptr, ptr %27, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %449, i32 0, i32 3
  %451 = load ptr, ptr %450, align 8, !tbaa !45
  %452 = load ptr, ptr %27, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %452, i32 0, i32 4
  %454 = load i32, ptr %453, align 8, !tbaa !49
  %455 = load ptr, ptr %27, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %455, i32 0, i32 1
  %457 = load ptr, ptr %456, align 8, !tbaa !57
  %458 = call noundef i32 @_ZL31stbtt_PackFontRangesGatherRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef %13, ptr noundef %448, ptr noundef %451, i32 noundef %454, ptr noundef %457)
  store i32 %458, ptr %34, align 4, !tbaa !22
  %459 = load i32, ptr %34, align 4, !tbaa !22
  %460 = load i32, ptr %28, align 4, !tbaa !22
  %461 = icmp eq i32 %459, %460
  br i1 %461, label %462, label %463

462:                                              ; preds = %428
  br label %465

463:                                              ; preds = %428
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.1, i32 noundef 1799, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

464:                                              ; No predecessors!
  br label %465

465:                                              ; preds = %464, %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  store i32 0, ptr %35, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  store i32 0, ptr %36, align 4, !tbaa !22
  br label %466

466:                                              ; preds = %523, %465
  %467 = load i32, ptr %36, align 4, !tbaa !22
  %468 = load ptr, ptr %27, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %468, i32 0, i32 4
  %470 = load i32, ptr %469, align 8, !tbaa !49
  %471 = icmp slt i32 %467, %470
  br i1 %471, label %473, label %472

472:                                              ; preds = %466
  store i32 20, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  br label %526

473:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  store i32 0, ptr %37, align 4, !tbaa !22
  br label %474

474:                                              ; preds = %517, %473
  %475 = load i32, ptr %37, align 4, !tbaa !22
  %476 = load ptr, ptr %27, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %476, i32 0, i32 3
  %478 = load ptr, ptr %477, align 8, !tbaa !45
  %479 = load i32, ptr %36, align 4, !tbaa !22
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds %struct.stbtt_pack_range, ptr %478, i64 %480
  %482 = getelementptr inbounds %struct.stbtt_pack_range, ptr %481, i32 0, i32 3
  %483 = load i32, ptr %482, align 8, !tbaa !54
  %484 = icmp slt i32 %475, %483
  br i1 %484, label %486, label %485

485:                                              ; preds = %474
  store i32 23, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  br label %522

486:                                              ; preds = %474
  %487 = load ptr, ptr %27, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %487, i32 0, i32 0
  %489 = load ptr, ptr %27, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %489, i32 0, i32 3
  %491 = load ptr, ptr %490, align 8, !tbaa !45
  %492 = load i32, ptr %36, align 4, !tbaa !22
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds %struct.stbtt_pack_range, ptr %491, i64 %493
  %495 = getelementptr inbounds %struct.stbtt_pack_range, ptr %494, i32 0, i32 1
  %496 = load i32, ptr %495, align 4, !tbaa !53
  %497 = load i32, ptr %37, align 4, !tbaa !22
  %498 = add nsw i32 %496, %497
  %499 = call noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef %488, i32 noundef %498)
  %500 = icmp eq i32 %499, 0
  br i1 %500, label %501, label %516

501:                                              ; preds = %486
  %502 = load ptr, ptr %27, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %502, i32 0, i32 1
  %504 = load ptr, ptr %503, align 8, !tbaa !57
  %505 = load i32, ptr %35, align 4, !tbaa !22
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds %struct.stbrp_rect, ptr %504, i64 %506
  %508 = getelementptr inbounds %struct.stbrp_rect, ptr %507, i32 0, i32 2
  store i16 0, ptr %508, align 2, !tbaa !61
  %509 = load ptr, ptr %27, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %509, i32 0, i32 1
  %511 = load ptr, ptr %510, align 8, !tbaa !57
  %512 = load i32, ptr %35, align 4, !tbaa !22
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds %struct.stbrp_rect, ptr %511, i64 %513
  %515 = getelementptr inbounds %struct.stbrp_rect, ptr %514, i32 0, i32 1
  store i16 0, ptr %515, align 4, !tbaa !63
  br label %516

516:                                              ; preds = %501, %486
  br label %517

517:                                              ; preds = %516
  %518 = load i32, ptr %37, align 4, !tbaa !22
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %37, align 4, !tbaa !22
  %520 = load i32, ptr %35, align 4, !tbaa !22
  %521 = add nsw i32 %520, 1
  store i32 %521, ptr %35, align 4, !tbaa !22
  br label %474, !llvm.loop !64

522:                                              ; preds = %485
  br label %523

523:                                              ; preds = %522
  %524 = load i32, ptr %36, align 4, !tbaa !22
  %525 = add nsw i32 %524, 1
  store i32 %525, ptr %36, align 4, !tbaa !22
  br label %466, !llvm.loop !65

526:                                              ; preds = %472
  %527 = getelementptr inbounds %struct.stbtt_pack_context, ptr %13, i32 0, i32 1
  %528 = load ptr, ptr %527, align 8, !tbaa !33
  %529 = load ptr, ptr %27, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %529, i32 0, i32 1
  %531 = load ptr, ptr %530, align 8, !tbaa !57
  %532 = load i32, ptr %34, align 4, !tbaa !22
  %533 = call noundef i32 @_ZL16stbrp_pack_rectsP13stbrp_contextP10stbrp_recti(ptr noundef %528, ptr noundef %531, i32 noundef %532)
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #10
  store i32 0, ptr %38, align 4, !tbaa !22
  br label %534

534:                                              ; preds = %606, %526
  %535 = load i32, ptr %38, align 4, !tbaa !22
  %536 = load i32, ptr %34, align 4, !tbaa !22
  %537 = icmp slt i32 %535, %536
  br i1 %537, label %539, label %538

538:                                              ; preds = %534
  store i32 26, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  br label %609

539:                                              ; preds = %534
  %540 = load ptr, ptr %27, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %540, i32 0, i32 1
  %542 = load ptr, ptr %541, align 8, !tbaa !57
  %543 = load i32, ptr %38, align 4, !tbaa !22
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds %struct.stbrp_rect, ptr %542, i64 %544
  %546 = getelementptr inbounds %struct.stbrp_rect, ptr %545, i32 0, i32 1
  %547 = load i16, ptr %546, align 4, !tbaa !63
  %548 = zext i16 %547 to i32
  %549 = icmp eq i32 %548, 0
  br i1 %549, label %550, label %569

550:                                              ; preds = %539
  %551 = load ptr, ptr %27, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %551, i32 0, i32 1
  %553 = load ptr, ptr %552, align 8, !tbaa !57
  %554 = load i32, ptr %38, align 4, !tbaa !22
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds %struct.stbrp_rect, ptr %553, i64 %555
  %557 = getelementptr inbounds %struct.stbrp_rect, ptr %556, i32 0, i32 2
  %558 = load i16, ptr %557, align 2, !tbaa !61
  %559 = zext i16 %558 to i32
  %560 = icmp eq i32 %559, 0
  br i1 %560, label %561, label %569

561:                                              ; preds = %550
  %562 = load ptr, ptr %27, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %562, i32 0, i32 1
  %564 = load ptr, ptr %563, align 8, !tbaa !57
  %565 = load i32, ptr %38, align 4, !tbaa !22
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds %struct.stbrp_rect, ptr %564, i64 %566
  %568 = getelementptr inbounds %struct.stbrp_rect, ptr %567, i32 0, i32 5
  store i32 0, ptr %568, align 4, !tbaa !66
  br label %569

569:                                              ; preds = %561, %550, %539
  %570 = load ptr, ptr %27, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %570, i32 0, i32 1
  %572 = load ptr, ptr %571, align 8, !tbaa !57
  %573 = load i32, ptr %38, align 4, !tbaa !22
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds %struct.stbrp_rect, ptr %572, i64 %574
  %576 = getelementptr inbounds %struct.stbrp_rect, ptr %575, i32 0, i32 5
  %577 = load i32, ptr %576, align 4, !tbaa !66
  %578 = icmp ne i32 %577, 0
  br i1 %578, label %579, label %605

579:                                              ; preds = %569
  %580 = load ptr, ptr %3, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.ImFontAtlas, ptr %580, i32 0, i32 8
  %582 = load i32, ptr %581, align 4, !tbaa !18
  %583 = load ptr, ptr %27, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %583, i32 0, i32 1
  %585 = load ptr, ptr %584, align 8, !tbaa !57
  %586 = load i32, ptr %38, align 4, !tbaa !22
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds %struct.stbrp_rect, ptr %585, i64 %587
  %589 = getelementptr inbounds %struct.stbrp_rect, ptr %588, i32 0, i32 4
  %590 = load i16, ptr %589, align 2, !tbaa !67
  %591 = zext i16 %590 to i32
  %592 = load ptr, ptr %27, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %592, i32 0, i32 1
  %594 = load ptr, ptr %593, align 8, !tbaa !57
  %595 = load i32, ptr %38, align 4, !tbaa !22
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.stbrp_rect, ptr %594, i64 %596
  %598 = getelementptr inbounds %struct.stbrp_rect, ptr %597, i32 0, i32 2
  %599 = load i16, ptr %598, align 2, !tbaa !61
  %600 = zext i16 %599 to i32
  %601 = add nsw i32 %591, %600
  %602 = call noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %582, i32 noundef %601)
  %603 = load ptr, ptr %3, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.ImFontAtlas, ptr %603, i32 0, i32 8
  store i32 %602, ptr %604, align 4, !tbaa !18
  br label %605

605:                                              ; preds = %579, %569
  br label %606

606:                                              ; preds = %605
  %607 = load i32, ptr %38, align 4, !tbaa !22
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %38, align 4, !tbaa !22
  br label %534, !llvm.loop !68

609:                                              ; preds = %538
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %610

610:                                              ; preds = %609
  %611 = load i32, ptr %25, align 4, !tbaa !22
  %612 = add nsw i32 %611, 1
  store i32 %612, ptr %25, align 4, !tbaa !22
  br label %308, !llvm.loop !69

613:                                              ; preds = %315
  %614 = load i32, ptr %20, align 4, !tbaa !22
  %615 = load i32, ptr %6, align 4, !tbaa !22
  %616 = icmp eq i32 %614, %615
  br i1 %616, label %617, label %618

617:                                              ; preds = %613
  br label %620

618:                                              ; preds = %613
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.1, i32 noundef 1822, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

619:                                              ; No predecessors!
  br label %620

620:                                              ; preds = %619, %617
  %621 = load i32, ptr %19, align 4, !tbaa !22
  %622 = load i32, ptr %6, align 4, !tbaa !22
  %623 = icmp eq i32 %621, %622
  br i1 %623, label %624, label %625

624:                                              ; preds = %620
  br label %627

625:                                              ; preds = %620
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.1, i32 noundef 1823, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

626:                                              ; No predecessors!
  br label %627

627:                                              ; preds = %626, %624
  %628 = load i32, ptr %21, align 4, !tbaa !22
  %629 = load i32, ptr %7, align 4, !tbaa !22
  %630 = icmp eq i32 %628, %629
  br i1 %630, label %631, label %632

631:                                              ; preds = %627
  br label %634

632:                                              ; preds = %627
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.1, i32 noundef 1824, ptr noundef @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #9
  unreachable

633:                                              ; No predecessors!
  br label %634

634:                                              ; preds = %633, %631
  %635 = load ptr, ptr %3, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.ImFontAtlas, ptr %635, i32 0, i32 0
  %637 = load i32, ptr %636, align 8, !tbaa !70
  %638 = and i32 %637, 1
  %639 = icmp ne i32 %638, 0
  br i1 %639, label %640, label %645

640:                                              ; preds = %634
  %641 = load ptr, ptr %3, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.ImFontAtlas, ptr %641, i32 0, i32 8
  %643 = load i32, ptr %642, align 4, !tbaa !18
  %644 = add nsw i32 %643, 1
  br label %650

645:                                              ; preds = %634
  %646 = load ptr, ptr %3, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.ImFontAtlas, ptr %646, i32 0, i32 8
  %648 = load i32, ptr %647, align 4, !tbaa !18
  %649 = call noundef i32 @_ZL17ImUpperPowerOfTwoi(i32 noundef %648)
  br label %650

650:                                              ; preds = %645, %640
  %651 = phi i32 [ %644, %640 ], [ %649, %645 ]
  %652 = load ptr, ptr %3, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.ImFontAtlas, ptr %652, i32 0, i32 8
  store i32 %651, ptr %653, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %654 = load ptr, ptr %3, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.ImFontAtlas, ptr %654, i32 0, i32 7
  %656 = load i32, ptr %655, align 8, !tbaa !19
  %657 = sitofp i32 %656 to float
  %658 = fdiv float 1.000000e+00, %657
  %659 = load ptr, ptr %3, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.ImFontAtlas, ptr %659, i32 0, i32 8
  %661 = load i32, ptr %660, align 4, !tbaa !18
  %662 = sitofp i32 %661 to float
  %663 = fdiv float 1.000000e+00, %662
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %39, float noundef %658, float noundef %663)
  %664 = load ptr, ptr %3, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.ImFontAtlas, ptr %664, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %665, ptr align 4 %39, i64 8, i1 false), !tbaa.struct !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  %666 = load ptr, ptr %3, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.ImFontAtlas, ptr %666, i32 0, i32 7
  %668 = load i32, ptr %667, align 8, !tbaa !19
  %669 = load ptr, ptr %3, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.ImFontAtlas, ptr %669, i32 0, i32 8
  %671 = load i32, ptr %670, align 4, !tbaa !18
  %672 = mul nsw i32 %668, %671
  %673 = sext i32 %672 to i64
  %674 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %673)
  %675 = load ptr, ptr %3, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.ImFontAtlas, ptr %675, i32 0, i32 5
  store ptr %674, ptr %676, align 8, !tbaa !71
  %677 = load ptr, ptr %3, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.ImFontAtlas, ptr %677, i32 0, i32 5
  %679 = load ptr, ptr %678, align 8, !tbaa !71
  %680 = load ptr, ptr %3, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.ImFontAtlas, ptr %680, i32 0, i32 7
  %682 = load i32, ptr %681, align 8, !tbaa !19
  %683 = load ptr, ptr %3, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.ImFontAtlas, ptr %683, i32 0, i32 8
  %685 = load i32, ptr %684, align 4, !tbaa !18
  %686 = mul nsw i32 %682, %685
  %687 = sext i32 %686 to i64
  call void @llvm.memset.p0.i64(ptr align 1 %679, i8 0, i64 %687, i1 false)
  %688 = load ptr, ptr %3, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.ImFontAtlas, ptr %688, i32 0, i32 5
  %690 = load ptr, ptr %689, align 8, !tbaa !71
  %691 = getelementptr inbounds %struct.stbtt_pack_context, ptr %13, i32 0, i32 8
  store ptr %690, ptr %691, align 8, !tbaa !72
  %692 = load ptr, ptr %3, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.ImFontAtlas, ptr %692, i32 0, i32 8
  %694 = load i32, ptr %693, align 4, !tbaa !18
  %695 = getelementptr inbounds %struct.stbtt_pack_context, ptr %13, i32 0, i32 3
  store i32 %694, ptr %695, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #10
  store i32 0, ptr %40, align 4, !tbaa !22
  br label %696

696:                                              ; preds = %790, %650
  %697 = load i32, ptr %40, align 4, !tbaa !22
  %698 = load ptr, ptr %3, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.ImFontAtlas, ptr %698, i32 0, i32 13
  %700 = getelementptr inbounds %class.ImVector.10, ptr %699, i32 0, i32 0
  %701 = load i32, ptr %700, align 8, !tbaa !9
  %702 = icmp slt i32 %697, %701
  br i1 %702, label %704, label %703

703:                                              ; preds = %696
  store i32 29, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #10
  br label %793

704:                                              ; preds = %696
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %705 = load ptr, ptr %3, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.ImFontAtlas, ptr %705, i32 0, i32 13
  %707 = load i32, ptr %40, align 4, !tbaa !22
  %708 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %706, i32 noundef %707)
  store ptr %708, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %709 = load ptr, ptr %14, align 8, !tbaa !5
  %710 = load i32, ptr %40, align 4, !tbaa !22
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %709, i64 %711
  store ptr %712, ptr %42, align 8, !tbaa !5
  %713 = load ptr, ptr %41, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.ImFontConfig, ptr %713, i32 0, i32 5
  %715 = load i32, ptr %714, align 8, !tbaa !59
  %716 = load ptr, ptr %41, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.ImFontConfig, ptr %716, i32 0, i32 6
  %718 = load i32, ptr %717, align 4, !tbaa !60
  call void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef %13, i32 noundef %715, i32 noundef %718)
  %719 = load ptr, ptr %42, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %719, i32 0, i32 0
  %721 = load ptr, ptr %42, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %721, i32 0, i32 3
  %723 = load ptr, ptr %722, align 8, !tbaa !45
  %724 = load ptr, ptr %42, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %724, i32 0, i32 4
  %726 = load i32, ptr %725, align 8, !tbaa !49
  %727 = load ptr, ptr %42, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %727, i32 0, i32 1
  %729 = load ptr, ptr %728, align 8, !tbaa !57
  %730 = call noundef i32 @_ZL35stbtt_PackFontRangesRenderIntoRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef %13, ptr noundef %720, ptr noundef %723, i32 noundef %726, ptr noundef %729)
  %731 = load ptr, ptr %41, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.ImFontConfig, ptr %731, i32 0, i32 15
  %733 = load float, ptr %732, align 8, !tbaa !74
  %734 = fcmp une float %733, 1.000000e+00
  br i1 %734, label %735, label %787

735:                                              ; preds = %704
  call void @llvm.lifetime.start.p0(i64 256, ptr %43) #10
  %736 = getelementptr inbounds [256 x i8], ptr %43, i64 0, i64 0
  %737 = load ptr, ptr %41, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.ImFontConfig, ptr %737, i32 0, i32 15
  %739 = load float, ptr %738, align 8, !tbaa !74
  call void @_Z39ImFontAtlasBuildMultiplyCalcLookupTablePhf(ptr noundef %736, float noundef %739)
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %740 = load ptr, ptr %42, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %740, i32 0, i32 1
  %742 = load ptr, ptr %741, align 8, !tbaa !57
  store ptr %742, ptr %44, align 8, !tbaa !5
  br label %743

743:                                              ; preds = %783, %735
  %744 = load ptr, ptr %44, align 8, !tbaa !5
  %745 = load ptr, ptr %42, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %745, i32 0, i32 1
  %747 = load ptr, ptr %746, align 8, !tbaa !57
  %748 = load ptr, ptr %42, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %748, i32 0, i32 2
  %750 = load i32, ptr %749, align 8, !tbaa !58
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds %struct.stbrp_rect, ptr %747, i64 %751
  %753 = icmp ne ptr %744, %752
  br i1 %753, label %755, label %754

754:                                              ; preds = %743
  store i32 32, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %786

755:                                              ; preds = %743
  %756 = load ptr, ptr %44, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.stbrp_rect, ptr %756, i32 0, i32 5
  %758 = load i32, ptr %757, align 4, !tbaa !66
  %759 = icmp ne i32 %758, 0
  br i1 %759, label %760, label %782

760:                                              ; preds = %755
  %761 = getelementptr inbounds [256 x i8], ptr %43, i64 0, i64 0
  %762 = getelementptr inbounds %struct.stbtt_pack_context, ptr %13, i32 0, i32 8
  %763 = load ptr, ptr %762, align 8, !tbaa !72
  %764 = load ptr, ptr %44, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.stbrp_rect, ptr %764, i32 0, i32 3
  %766 = load i16, ptr %765, align 4, !tbaa !75
  %767 = zext i16 %766 to i32
  %768 = load ptr, ptr %44, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.stbrp_rect, ptr %768, i32 0, i32 4
  %770 = load i16, ptr %769, align 2, !tbaa !67
  %771 = zext i16 %770 to i32
  %772 = load ptr, ptr %44, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.stbrp_rect, ptr %772, i32 0, i32 1
  %774 = load i16, ptr %773, align 4, !tbaa !63
  %775 = zext i16 %774 to i32
  %776 = load ptr, ptr %44, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.stbrp_rect, ptr %776, i32 0, i32 2
  %778 = load i16, ptr %777, align 2, !tbaa !61
  %779 = zext i16 %778 to i32
  %780 = getelementptr inbounds %struct.stbtt_pack_context, ptr %13, i32 0, i32 4
  %781 = load i32, ptr %780, align 8, !tbaa !76
  call void @_Z34ImFontAtlasBuildMultiplyRectAlpha8PKhPhiiiii(ptr noundef %761, ptr noundef %763, i32 noundef %767, i32 noundef %771, i32 noundef %775, i32 noundef %779, i32 noundef %781)
  br label %782

782:                                              ; preds = %760, %755
  br label %783

783:                                              ; preds = %782
  %784 = load ptr, ptr %44, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.stbrp_rect, ptr %784, i32 1
  store ptr %785, ptr %44, align 8, !tbaa !5
  br label %743, !llvm.loop !77

786:                                              ; preds = %754
  call void @llvm.lifetime.end.p0(i64 256, ptr %43) #10
  br label %787

787:                                              ; preds = %786, %704
  %788 = load ptr, ptr %42, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %788, i32 0, i32 1
  store ptr null, ptr %789, align 8, !tbaa !57
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %790

790:                                              ; preds = %787
  %791 = load i32, ptr %40, align 4, !tbaa !22
  %792 = add nsw i32 %791, 1
  store i32 %792, ptr %40, align 4, !tbaa !22
  br label %696, !llvm.loop !78

793:                                              ; preds = %703
  call void @_ZL13stbtt_PackEndP18stbtt_pack_context(ptr noundef %13)
  %794 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %794)
  store ptr null, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #10
  store i32 0, ptr %45, align 4, !tbaa !22
  br label %795

795:                                              ; preds = %1025, %793
  %796 = load i32, ptr %45, align 4, !tbaa !22
  %797 = load ptr, ptr %3, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.ImFontAtlas, ptr %797, i32 0, i32 13
  %799 = getelementptr inbounds %class.ImVector.10, ptr %798, i32 0, i32 0
  %800 = load i32, ptr %799, align 8, !tbaa !9
  %801 = icmp slt i32 %796, %800
  br i1 %801, label %803, label %802

802:                                              ; preds = %795
  store i32 35, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  br label %1028

803:                                              ; preds = %795
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %804 = load ptr, ptr %3, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.ImFontAtlas, ptr %804, i32 0, i32 13
  %806 = load i32, ptr %45, align 4, !tbaa !22
  %807 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %805, i32 noundef %806)
  store ptr %807, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  %808 = load ptr, ptr %14, align 8, !tbaa !5
  %809 = load i32, ptr %45, align 4, !tbaa !22
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %808, i64 %810
  store ptr %811, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %812 = load ptr, ptr %46, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.ImFontConfig, ptr %812, i32 0, i32 17
  %814 = load ptr, ptr %813, align 8, !tbaa !35
  store ptr %814, ptr %48, align 8, !tbaa !5
  %815 = load ptr, ptr %46, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.ImFontConfig, ptr %815, i32 0, i32 13
  %817 = load i8, ptr %816, align 8, !tbaa !79, !range !80, !noundef !81
  %818 = trunc i8 %817 to i1
  br i1 %818, label %819, label %821

819:                                              ; preds = %803
  %820 = load ptr, ptr %48, align 8, !tbaa !5
  call void @_ZN6ImFont16BuildLookupTableEv(ptr noundef nonnull align 8 dereferenceable(112) %820)
  br label %821

821:                                              ; preds = %819, %803
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #10
  %822 = load ptr, ptr %47, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %822, i32 0, i32 0
  %824 = load ptr, ptr %46, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.ImFontConfig, ptr %824, i32 0, i32 4
  %826 = load float, ptr %825, align 4, !tbaa !50
  %827 = call noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef %823, float noundef %826)
  store float %827, ptr %49, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  %828 = load ptr, ptr %47, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %828, i32 0, i32 0
  call void @_ZL21stbtt_GetFontVMetricsPK14stbtt_fontinfoPiS2_S2_(ptr noundef %829, ptr noundef %50, ptr noundef %51, ptr noundef %52)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #10
  %830 = load i32, ptr %50, align 4, !tbaa !22
  %831 = sitofp i32 %830 to float
  %832 = load float, ptr %49, align 4, !tbaa !21
  %833 = load i32, ptr %50, align 4, !tbaa !22
  %834 = sitofp i32 %833 to float
  %835 = fcmp ogt float %834, 0.000000e+00
  %836 = zext i1 %835 to i64
  %837 = select i1 %835, i32 1, i32 -1
  %838 = sitofp i32 %837 to float
  %839 = call float @llvm.fmuladd.f32(float %831, float %832, float %838)
  %840 = call noundef float @_ZL7ImFloorf(float noundef %839)
  store float %840, ptr %53, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  %841 = load i32, ptr %51, align 4, !tbaa !22
  %842 = sitofp i32 %841 to float
  %843 = load float, ptr %49, align 4, !tbaa !21
  %844 = load i32, ptr %51, align 4, !tbaa !22
  %845 = sitofp i32 %844 to float
  %846 = fcmp ogt float %845, 0.000000e+00
  %847 = zext i1 %846 to i64
  %848 = select i1 %846, i32 1, i32 -1
  %849 = sitofp i32 %848 to float
  %850 = call float @llvm.fmuladd.f32(float %842, float %843, float %849)
  %851 = call noundef float @_ZL7ImFloorf(float noundef %850)
  store float %851, ptr %54, align 4, !tbaa !21
  %852 = load ptr, ptr %3, align 8, !tbaa !5
  %853 = load ptr, ptr %48, align 8, !tbaa !5
  %854 = load ptr, ptr %46, align 8, !tbaa !5
  %855 = load float, ptr %53, align 4, !tbaa !21
  %856 = load float, ptr %54, align 4, !tbaa !21
  call void @_Z25ImFontAtlasBuildSetupFontP11ImFontAtlasP6ImFontP12ImFontConfigff(ptr noundef %852, ptr noundef %853, ptr noundef %854, float noundef %855, float noundef %856)
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #10
  %857 = load ptr, ptr %46, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.ImFontConfig, ptr %857, i32 0, i32 9
  %859 = getelementptr inbounds %struct.ImVec2, ptr %858, i32 0, i32 0
  %860 = load float, ptr %859, align 4, !tbaa !82
  store float %860, ptr %55, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #10
  %861 = load ptr, ptr %46, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.ImFontConfig, ptr %861, i32 0, i32 9
  %863 = getelementptr inbounds %struct.ImVec2, ptr %862, i32 0, i32 1
  %864 = load float, ptr %863, align 4, !tbaa !83
  %865 = load ptr, ptr %48, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.ImFont, ptr %865, i32 0, i32 12
  %867 = load float, ptr %866, align 8, !tbaa !84
  %868 = fadd float %867, 5.000000e-01
  %869 = fptosi float %868 to i32
  %870 = sitofp i32 %869 to float
  %871 = fadd float %864, %870
  store float %871, ptr %56, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  store i32 0, ptr %57, align 4, !tbaa !22
  br label %872

872:                                              ; preds = %1021, %821
  %873 = load i32, ptr %57, align 4, !tbaa !22
  %874 = load ptr, ptr %47, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %874, i32 0, i32 4
  %876 = load i32, ptr %875, align 8, !tbaa !49
  %877 = icmp slt i32 %873, %876
  br i1 %877, label %879, label %878

878:                                              ; preds = %872
  store i32 38, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  br label %1024

879:                                              ; preds = %872
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  %880 = load ptr, ptr %47, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %880, i32 0, i32 3
  %882 = load ptr, ptr %881, align 8, !tbaa !45
  %883 = load i32, ptr %57, align 4, !tbaa !22
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.stbtt_pack_range, ptr %882, i64 %884
  store ptr %885, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #10
  store i32 0, ptr %59, align 4, !tbaa !22
  br label %886

886:                                              ; preds = %1017, %879
  %887 = load i32, ptr %59, align 4, !tbaa !22
  %888 = load ptr, ptr %58, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.stbtt_pack_range, ptr %888, i32 0, i32 3
  %890 = load i32, ptr %889, align 8, !tbaa !54
  %891 = icmp slt i32 %887, %890
  br i1 %891, label %893, label %892

892:                                              ; preds = %886
  store i32 41, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  br label %1020

893:                                              ; preds = %886
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #10
  %894 = load ptr, ptr %58, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.stbtt_pack_range, ptr %894, i32 0, i32 4
  %896 = load ptr, ptr %895, align 8, !tbaa !55
  %897 = load i32, ptr %59, align 4, !tbaa !22
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %struct.stbtt_packedchar, ptr %896, i64 %898
  store ptr %899, ptr %60, align 8, !tbaa !5
  %900 = load ptr, ptr %60, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.stbtt_packedchar, ptr %900, i32 0, i32 0
  %902 = load i16, ptr %901, align 4, !tbaa !85
  %903 = icmp ne i16 %902, 0
  br i1 %903, label %920, label %904

904:                                              ; preds = %893
  %905 = load ptr, ptr %60, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.stbtt_packedchar, ptr %905, i32 0, i32 2
  %907 = load i16, ptr %906, align 4, !tbaa !87
  %908 = icmp ne i16 %907, 0
  br i1 %908, label %920, label %909

909:                                              ; preds = %904
  %910 = load ptr, ptr %60, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.stbtt_packedchar, ptr %910, i32 0, i32 1
  %912 = load i16, ptr %911, align 2, !tbaa !88
  %913 = icmp ne i16 %912, 0
  br i1 %913, label %920, label %914

914:                                              ; preds = %909
  %915 = load ptr, ptr %60, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.stbtt_packedchar, ptr %915, i32 0, i32 3
  %917 = load i16, ptr %916, align 2, !tbaa !89
  %918 = icmp ne i16 %917, 0
  br i1 %918, label %920, label %919

919:                                              ; preds = %914
  store i32 43, ptr %9, align 4
  br label %1014

920:                                              ; preds = %914, %909, %904, %893
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #10
  %921 = load ptr, ptr %58, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.stbtt_pack_range, ptr %921, i32 0, i32 1
  %923 = load i32, ptr %922, align 4, !tbaa !53
  %924 = load i32, ptr %59, align 4, !tbaa !22
  %925 = add nsw i32 %923, %924
  store i32 %925, ptr %61, align 4, !tbaa !22
  %926 = load ptr, ptr %46, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.ImFontConfig, ptr %926, i32 0, i32 13
  %928 = load i8, ptr %927, align 8, !tbaa !79, !range !80, !noundef !81
  %929 = trunc i8 %928 to i1
  br i1 %929, label %930, label %937

930:                                              ; preds = %920
  %931 = load ptr, ptr %48, align 8, !tbaa !5
  %932 = load i32, ptr %61, align 4, !tbaa !22
  %933 = trunc i32 %932 to i16
  %934 = call noundef ptr @_ZNK6ImFont19FindGlyphNoFallbackEt(ptr noundef nonnull align 8 dereferenceable(112) %931, i16 noundef zeroext %933)
  %935 = icmp ne ptr %934, null
  br i1 %935, label %936, label %937

936:                                              ; preds = %930
  store i32 43, ptr %9, align 4
  br label %1013

937:                                              ; preds = %930, %920
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #10
  %938 = load ptr, ptr %60, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.stbtt_packedchar, ptr %938, i32 0, i32 6
  %940 = load float, ptr %939, align 4, !tbaa !90
  store float %940, ptr %62, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #10
  %941 = load float, ptr %62, align 4, !tbaa !21
  %942 = load ptr, ptr %46, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.ImFontConfig, ptr %942, i32 0, i32 11
  %944 = load float, ptr %943, align 8, !tbaa !91
  %945 = load ptr, ptr %46, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.ImFontConfig, ptr %945, i32 0, i32 12
  %947 = load float, ptr %946, align 4, !tbaa !92
  %948 = call noundef float @_ZL7ImClampIfET_S0_S0_S0_(float noundef %941, float noundef %944, float noundef %947)
  store float %948, ptr %63, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #10
  %949 = load float, ptr %55, align 4, !tbaa !21
  store float %949, ptr %64, align 4, !tbaa !21
  %950 = load float, ptr %62, align 4, !tbaa !21
  %951 = load float, ptr %63, align 4, !tbaa !21
  %952 = fcmp une float %950, %951
  br i1 %952, label %953, label %974

953:                                              ; preds = %937
  %954 = load ptr, ptr %46, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.ImFontConfig, ptr %954, i32 0, i32 7
  %956 = load i8, ptr %955, align 8, !tbaa !93, !range !80, !noundef !81
  %957 = trunc i8 %956 to i1
  br i1 %957, label %958, label %965

958:                                              ; preds = %953
  %959 = load float, ptr %63, align 4, !tbaa !21
  %960 = load float, ptr %62, align 4, !tbaa !21
  %961 = fsub float %959, %960
  %962 = fmul float %961, 5.000000e-01
  %963 = fptosi float %962 to i32
  %964 = sitofp i32 %963 to float
  br label %970

965:                                              ; preds = %953
  %966 = load float, ptr %63, align 4, !tbaa !21
  %967 = load float, ptr %62, align 4, !tbaa !21
  %968 = fsub float %966, %967
  %969 = fmul float %968, 5.000000e-01
  br label %970

970:                                              ; preds = %965, %958
  %971 = phi float [ %964, %958 ], [ %969, %965 ]
  %972 = load float, ptr %64, align 4, !tbaa !21
  %973 = fadd float %972, %971
  store float %973, ptr %64, align 4, !tbaa !21
  br label %974

974:                                              ; preds = %970, %937
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #10
  store float 0.000000e+00, ptr %66, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #10
  store float 0.000000e+00, ptr %67, align 4, !tbaa !21
  %975 = load ptr, ptr %58, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.stbtt_pack_range, ptr %975, i32 0, i32 4
  %977 = load ptr, ptr %976, align 8, !tbaa !55
  %978 = load ptr, ptr %3, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.ImFontAtlas, ptr %978, i32 0, i32 7
  %980 = load i32, ptr %979, align 8, !tbaa !19
  %981 = load ptr, ptr %3, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.ImFontAtlas, ptr %981, i32 0, i32 8
  %983 = load i32, ptr %982, align 4, !tbaa !18
  %984 = load i32, ptr %59, align 4, !tbaa !22
  call void @_ZL19stbtt_GetPackedQuadPK16stbtt_packedchariiiPfS2_P18stbtt_aligned_quadi(ptr noundef %977, i32 noundef %980, i32 noundef %983, i32 noundef %984, ptr noundef %66, ptr noundef %67, ptr noundef %65, i32 noundef 0)
  %985 = load ptr, ptr %48, align 8, !tbaa !5
  %986 = load i32, ptr %61, align 4, !tbaa !22
  %987 = trunc i32 %986 to i16
  %988 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 0
  %989 = load float, ptr %988, align 4, !tbaa !94
  %990 = load float, ptr %64, align 4, !tbaa !21
  %991 = fadd float %989, %990
  %992 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 1
  %993 = load float, ptr %992, align 4, !tbaa !96
  %994 = load float, ptr %56, align 4, !tbaa !21
  %995 = fadd float %993, %994
  %996 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 4
  %997 = load float, ptr %996, align 4, !tbaa !97
  %998 = load float, ptr %64, align 4, !tbaa !21
  %999 = fadd float %997, %998
  %1000 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 5
  %1001 = load float, ptr %1000, align 4, !tbaa !98
  %1002 = load float, ptr %56, align 4, !tbaa !21
  %1003 = fadd float %1001, %1002
  %1004 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 2
  %1005 = load float, ptr %1004, align 4, !tbaa !99
  %1006 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 3
  %1007 = load float, ptr %1006, align 4, !tbaa !100
  %1008 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 6
  %1009 = load float, ptr %1008, align 4, !tbaa !101
  %1010 = getelementptr inbounds %struct.stbtt_aligned_quad, ptr %65, i32 0, i32 7
  %1011 = load float, ptr %1010, align 4, !tbaa !102
  %1012 = load float, ptr %63, align 4, !tbaa !21
  call void @_ZN6ImFont8AddGlyphEtfffffffff(ptr noundef nonnull align 8 dereferenceable(112) %985, i16 noundef zeroext %987, float noundef %991, float noundef %995, float noundef %999, float noundef %1003, float noundef %1005, float noundef %1007, float noundef %1009, float noundef %1011, float noundef %1012)
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #10
  store i32 0, ptr %9, align 4
  br label %1013

1013:                                             ; preds = %974, %936
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #10
  br label %1014

1014:                                             ; preds = %1013, %919
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  %1015 = load i32, ptr %9, align 4
  switch i32 %1015, label %1036 [
    i32 0, label %1016
    i32 43, label %1017
  ]

1016:                                             ; preds = %1014
  br label %1017

1017:                                             ; preds = %1016, %1014
  %1018 = load i32, ptr %59, align 4, !tbaa !22
  %1019 = add nsw i32 %1018, 1
  store i32 %1019, ptr %59, align 4, !tbaa !22
  br label %886, !llvm.loop !103

1020:                                             ; preds = %892
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %1021

1021:                                             ; preds = %1020
  %1022 = load i32, ptr %57, align 4, !tbaa !22
  %1023 = add nsw i32 %1022, 1
  store i32 %1023, ptr %57, align 4, !tbaa !22
  br label %872, !llvm.loop !104

1024:                                             ; preds = %878
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  br label %1025

1025:                                             ; preds = %1024
  %1026 = load i32, ptr %45, align 4, !tbaa !22
  %1027 = add nsw i32 %1026, 1
  store i32 %1027, ptr %45, align 4, !tbaa !22
  br label %795, !llvm.loop !105

1028:                                             ; preds = %802
  %1029 = load ptr, ptr %22, align 8, !tbaa !5
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %1029)
  %1030 = load ptr, ptr %24, align 8, !tbaa !5
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %1030)
  %1031 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %1031)
  %1032 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef %1032)
  store i1 true, ptr %2, align 1
  store i32 1, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  br label %1033

1033:                                             ; preds = %1028, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  br label %1034

1034:                                             ; preds = %1033, %190
  call void @llvm.lifetime.end.p0(i64 56, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  %1035 = load i1, ptr %2, align 1
  ret i1 %1035

1036:                                             ; preds = %1014
  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 @_Z42ImFontAtlasBuildRegisterDefaultCustomRectsP11ImFontAtlas(ptr noundef) #8

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6ImFont16BuildLookupTableEv(ptr noundef nonnull align 8 dereferenceable(112)) #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 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) #7

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK6ImFont19FindGlyphNoFallbackEt(ptr noundef nonnull align 8 dereferenceable(112), i16 noundef zeroext) #8 align 2

; 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 @_ZN6ImFont8AddGlyphEtfffffffff(ptr noundef nonnull align 8 dereferenceable(112), i16 noundef zeroext, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef) #8 align 2

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

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 = { 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 #8 = { 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 = { noreturn nounwind }
attributes #10 = { 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, !11, i64 96}
!10 = !{!"_ZTS11ImFontAtlas", !11, i64 0, !6, i64 8, !11, i64 16, !11, i64 20, !6, i64 24, !6, i64 32, !11, i64 40, !11, i64 44, !12, i64 48, !12, i64 56, !14, i64 64, !15, i64 80, !16, i64 96, !7, i64 112}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTS6ImVec2", !13, i64 0, !13, i64 4}
!13 = !{!"float", !7, i64 0}
!14 = !{!"_ZTS8ImVectorIP6ImFontE", !11, i64 0, !11, i64 4, !6, i64 8}
!15 = !{!"_ZTS8ImVectorIN11ImFontAtlas10CustomRectEE", !11, i64 0, !11, i64 4, !6, i64 8}
!16 = !{!"_ZTS8ImVectorI12ImFontConfigE", !11, i64 0, !11, i64 4, !6, i64 8}
!17 = !{!10, !6, i64 8}
!18 = !{!10, !11, i64 44}
!19 = !{!10, !11, i64 40}
!20 = !{i64 0, i64 4, !21, i64 4, i64 4, !21}
!21 = !{!13, !13, i64 0}
!22 = !{!11, !11, i64 0}
!23 = !{!24, !6, i64 56}
!24 = !{!"_ZTS12ImFontConfig", !6, i64 0, !11, i64 8, !25, i64 12, !11, i64 16, !13, i64 20, !11, i64 24, !11, i64 28, !25, i64 32, !12, i64 36, !12, i64 44, !6, i64 56, !13, i64 64, !13, i64 68, !25, i64 72, !11, i64 76, !13, i64 80, !7, i64 84, !6, i64 128}
!25 = !{!"bool", !7, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"short", !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = !{!10, !11, i64 16}
!32 = !{!10, !11, i64 20}
!33 = !{!34, !6, i64 8}
!34 = !{!"_ZTS18stbtt_pack_context", !6, i64 0, !6, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !6, i64 40, !6, i64 48}
!35 = !{!24, !6, i64 128}
!36 = !{!37, !6, i64 88}
!37 = !{!"_ZTS6ImFont", !13, i64 0, !13, i64 4, !12, i64 8, !38, i64 16, !39, i64 32, !40, i64 48, !6, i64 64, !13, i64 72, !27, i64 76, !27, i64 78, !6, i64 80, !6, i64 88, !13, i64 96, !13, i64 100, !25, i64 104, !11, i64 108}
!38 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !11, i64 0, !11, i64 4, !6, i64 8}
!39 = !{!"_ZTS8ImVectorIfE", !11, i64 0, !11, i64 4, !6, i64 8}
!40 = !{!"_ZTS8ImVectorItE", !11, i64 0, !11, i64 4, !6, i64 8}
!41 = !{!24, !6, i64 0}
!42 = !{!24, !11, i64 16}
!43 = distinct !{!43, !29}
!44 = distinct !{!44, !29}
!45 = !{!46, !6, i64 176}
!46 = !{!"_ZTSZ31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlasE19ImFontTempBuildData", !47, i64 0, !6, i64 160, !11, i64 168, !6, i64 176, !11, i64 184}
!47 = !{!"_ZTS14stbtt_fontinfo", !6, i64 0, !6, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !48, i64 64, !48, i64 80, !48, i64 96, !48, i64 112, !48, i64 128, !48, i64 144}
!48 = !{!"_ZTS10stbtt__buf", !6, i64 0, !11, i64 8, !11, i64 12}
!49 = !{!46, !11, i64 184}
!50 = !{!24, !13, i64 20}
!51 = !{!52, !13, i64 0}
!52 = !{!"_ZTS16stbtt_pack_range", !13, i64 0, !11, i64 4, !6, i64 8, !11, i64 16, !6, i64 24, !7, i64 32, !7, i64 33}
!53 = !{!52, !11, i64 4}
!54 = !{!52, !11, i64 16}
!55 = !{!52, !6, i64 24}
!56 = distinct !{!56, !29}
!57 = !{!46, !6, i64 160}
!58 = !{!46, !11, i64 168}
!59 = !{!24, !11, i64 24}
!60 = !{!24, !11, i64 28}
!61 = !{!62, !27, i64 6}
!62 = !{!"_ZTS10stbrp_rect", !11, i64 0, !27, i64 4, !27, i64 6, !27, i64 8, !27, i64 10, !11, i64 12}
!63 = !{!62, !27, i64 4}
!64 = distinct !{!64, !29}
!65 = distinct !{!65, !29}
!66 = !{!62, !11, i64 12}
!67 = !{!62, !27, i64 10}
!68 = distinct !{!68, !29}
!69 = distinct !{!69, !29}
!70 = !{!10, !11, i64 0}
!71 = !{!10, !6, i64 24}
!72 = !{!34, !6, i64 40}
!73 = !{!34, !11, i64 20}
!74 = !{!24, !13, i64 80}
!75 = !{!62, !27, i64 8}
!76 = !{!34, !11, i64 24}
!77 = distinct !{!77, !29}
!78 = distinct !{!78, !29}
!79 = !{!24, !25, i64 72}
!80 = !{i8 0, i8 2}
!81 = !{}
!82 = !{!24, !13, i64 44}
!83 = !{!24, !13, i64 48}
!84 = !{!37, !13, i64 96}
!85 = !{!86, !27, i64 0}
!86 = !{!"_ZTS16stbtt_packedchar", !27, i64 0, !27, i64 2, !27, i64 4, !27, i64 6, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24}
!87 = !{!86, !27, i64 4}
!88 = !{!86, !27, i64 2}
!89 = !{!86, !27, i64 6}
!90 = !{!86, !13, i64 16}
!91 = !{!24, !13, i64 64}
!92 = !{!24, !13, i64 68}
!93 = !{!24, !25, i64 32}
!94 = !{!95, !13, i64 0}
!95 = !{!"_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}
!96 = !{!95, !13, i64 4}
!97 = !{!95, !13, i64 16}
!98 = !{!95, !13, i64 20}
!99 = !{!95, !13, i64 8}
!100 = !{!95, !13, i64 12}
!101 = !{!95, !13, i64 24}
!102 = !{!95, !13, i64 28}
!103 = distinct !{!103, !29}
!104 = distinct !{!104, !29}
!105 = distinct !{!105, !29}


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

%struct.ImVec2 = type { float, float }
%struct.stbtt_pack_context = type { ptr, ptr, i32, i32, i32, i32, i32, i32, ptr, ptr }
%struct.stbtt_aligned_quad = type { float, float, float, float, float, float, float, float }
%struct.ImFontTempBuildData = type { %struct.stbtt_fontinfo, ptr, i32, ptr, i32 }
%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.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 [72 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas = external hidden unnamed_addr constant [52 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [35 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

; 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 hidden noundef float @_ZL7ImClampIfET_S0_S0_S0_(float noundef, float noundef, float noundef) local_unnamed_addr #6

; 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

declare void @_ZN5ImGui7MemFreeEPv(ptr noundef) local_unnamed_addr #3

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

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

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

16:                                               ; preds = %1
  tail call void @__assert_fail(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.1, i32 noundef 1696, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

17:                                               ; preds = %1
  tail call void @_Z42ImFontAtlasBuildRegisterDefaultCustomRectsP11ImFontAtlas(ptr noundef nonnull %0)
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr null, ptr %18, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %0, i64 44
  store i32 0, ptr %19, align 4, !tbaa !17
  %20 = getelementptr inbounds i8, ptr %0, i64 40
  store i32 0, ptr %20, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %2, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %21 = getelementptr inbounds i8, ptr %0, i64 48
  %22 = load i64, ptr %2, align 8
  store i64 %22, ptr %21, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %3, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %23 = getelementptr inbounds i8, ptr %0, i64 56
  %24 = load i64, ptr %3, align 8
  store i64 %24, ptr %23, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  call void @_ZN11ImFontAtlas12ClearTexDataEv(ptr noundef nonnull align 8 dereferenceable(116) %0)
  %25 = load i32, ptr %13, align 8, !tbaa !5
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph359, label %._crit_edge.thread

._crit_edge:                                      ; preds = %.critedge
  %27 = getelementptr inbounds i8, ptr %0, i64 16
  %28 = load i32, ptr %27, align 8, !tbaa !19
  %29 = icmp sgt i32 %28, 0
  br i1 %29, label %.thread480, label %56

._crit_edge.thread:                               ; preds = %17
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  %31 = load i32, ptr %30, align 8, !tbaa !19
  %32 = icmp sgt i32 %31, 0
  %spec.select = select i1 %32, i32 %31, i32 512
  br label %.thread480

.lr.ph359:                                        ; preds = %17, %.critedge
  %.0283358 = phi i32 [ %.1284.lcssa.fr, %.critedge ], [ 0, %17 ]
  %.0285357 = phi i32 [ %.1286.lcssa, %.critedge ], [ 0, %17 ]
  %.0287356 = phi i32 [ %44, %.critedge ], [ 0, %17 ]
  %33 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %.0287356)
  %34 = getelementptr inbounds i8, ptr %33, i64 56
  %35 = load ptr, ptr %34, align 8, !tbaa !20
  %.not336 = icmp eq ptr %35, null
  br i1 %.not336, label %36, label %38

36:                                               ; preds = %.lr.ph359
  %37 = call noundef ptr @_ZN11ImFontAtlas21GetGlyphRangesDefaultEv(ptr noundef nonnull align 8 dereferenceable(116) %0)
  store ptr %37, ptr %34, align 8, !tbaa !20
  br label %38

38:                                               ; preds = %36, %.lr.ph359
  %39 = phi ptr [ %37, %36 ], [ %35, %.lr.ph359 ]
  %40 = load i16, ptr %39, align 2, !tbaa !23
  %.not337348 = icmp eq i16 %40, 0
  br i1 %.not337348, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %38, %47
  %41 = phi i16 [ %55, %47 ], [ %40, %38 ]
  %.1284351 = phi i32 [ %52, %47 ], [ %.0283358, %38 ]
  %.1286350 = phi i32 [ %54, %47 ], [ %.0285357, %38 ]
  %.0292349 = phi ptr [ %53, %47 ], [ %39, %38 ]
  %42 = getelementptr inbounds i8, ptr %.0292349, i64 2
  %43 = load i16, ptr %42, align 2, !tbaa !23
  %.not338 = icmp eq i16 %43, 0
  br i1 %.not338, label %.critedge, label %47

.critedge:                                        ; preds = %.lr.ph, %47, %38
  %.1286.lcssa = phi i32 [ %.0285357, %38 ], [ %54, %47 ], [ %.1286350, %.lr.ph ]
  %.1284.lcssa = phi i32 [ %.0283358, %38 ], [ %52, %47 ], [ %.1284351, %.lr.ph ]
  %.1284.lcssa.fr = freeze i32 %.1284.lcssa
  %44 = add nuw nsw i32 %.0287356, 1
  %45 = load i32, ptr %13, align 8, !tbaa !5
  %46 = icmp slt i32 %44, %45
  br i1 %46, label %.lr.ph359, label %._crit_edge, !llvm.loop !25

47:                                               ; preds = %.lr.ph
  %48 = zext i16 %43 to i32
  %49 = zext i16 %41 to i32
  %50 = add i32 %.1284351, 1
  %51 = sub i32 %50, %49
  %52 = add i32 %51, %48
  %53 = getelementptr inbounds i8, ptr %.0292349, i64 4
  %54 = add nsw i32 %.1286350, 1
  %55 = load i16, ptr %53, align 2, !tbaa !23
  %.not337 = icmp eq i16 %55, 0
  br i1 %.not337, label %.critedge, label %.lr.ph, !llvm.loop !27

56:                                               ; preds = %._crit_edge
  %57 = icmp sgt i32 %.1284.lcssa.fr, 4000
  br i1 %57, label %.thread480, label %58

58:                                               ; preds = %56
  %59 = icmp sgt i32 %.1284.lcssa.fr, 2000
  br i1 %59, label %.thread480, label %60

60:                                               ; preds = %58
  %61 = icmp sgt i32 %.1284.lcssa.fr, 1000
  %spec.select506 = select i1 %61, i32 1024, i32 512
  br label %.thread480

.thread480:                                       ; preds = %60, %._crit_edge.thread, %._crit_edge, %56, %58
  %.0283.lcssa470 = phi i32 [ %.1284.lcssa.fr, %56 ], [ %.1284.lcssa.fr, %58 ], [ %.1284.lcssa.fr, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.1284.lcssa.fr, %60 ]
  %.0285.lcssa468 = phi i32 [ %.1286.lcssa, %56 ], [ %.1286.lcssa, %58 ], [ %.1286.lcssa, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.1286.lcssa, %60 ]
  %62 = phi i32 [ 4096, %56 ], [ 2048, %58 ], [ %28, %._crit_edge ], [ %spec.select, %._crit_edge.thread ], [ %spec.select506, %60 ]
  store i32 %62, ptr %20, align 8, !tbaa !18
  store i32 0, ptr %19, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %4) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %4, i8 0, i64 56, i1 false)
  %63 = getelementptr inbounds i8, ptr %0, i64 20
  %64 = load i32, ptr %63, align 4, !tbaa !28
  %65 = call noundef i32 @_ZL15stbtt_PackBeginP18stbtt_pack_contextPhiiiiPv(ptr noundef nonnull %4, ptr noundef null, i32 noundef %62, i32 noundef 32768, i32 noundef 0, i32 noundef %64, ptr noundef null)
  %.not = icmp eq i32 %65, 0
  br i1 %.not, label %460, label %66

66:                                               ; preds = %.thread480
  call void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef nonnull %4, i32 noundef 1, i32 noundef 1)
  %67 = getelementptr inbounds i8, ptr %4, i64 8
  %68 = load ptr, ptr %67, align 8, !tbaa !29
  call void @_Z31ImFontAtlasBuildPackCustomRectsP11ImFontAtlasPv(ptr noundef nonnull %0, ptr noundef %68)
  %69 = load i32, ptr %13, align 8, !tbaa !5
  %70 = sext i32 %69 to i64
  %71 = mul nsw i64 %70, 192
  %72 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %71)
  %73 = load i32, ptr %13, align 8, !tbaa !5
  %.not323362 = icmp slt i32 %73, 1
  br i1 %.not323362, label %.critedge342, label %.lr.ph365

74:                                               ; preds = %.critedge340
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %75 = load i32, ptr %13, align 8, !tbaa !5
  %76 = sext i32 %75 to i64
  %.not323.not = icmp slt i64 %indvars.iv.next, %76
  br i1 %.not323.not, label %.lr.ph365, label %.critedge342, !llvm.loop !31

.lr.ph365:                                        ; preds = %66, %74
  %indvars.iv = phi i64 [ %indvars.iv.next, %74 ], [ 0, %66 ]
  %77 = trunc nuw nsw i64 %indvars.iv to i32
  %78 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %77)
  %79 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %72, i64 %indvars.iv
  %80 = getelementptr inbounds i8, ptr %78, i64 128
  %81 = load ptr, ptr %80, align 8, !tbaa !32
  %.not321 = icmp eq ptr %81, null
  br i1 %.not321, label %.critedge3, label %82

82:                                               ; preds = %.lr.ph365
  %83 = call noundef zeroext i1 @_ZNK6ImFont8IsLoadedEv(ptr noundef nonnull align 8 dereferenceable(112) %81)
  br i1 %83, label %84, label %.critedge5

84:                                               ; preds = %82
  %85 = load ptr, ptr %80, align 8, !tbaa !32
  %86 = getelementptr inbounds i8, ptr %85, i64 88
  %87 = load ptr, ptr %86, align 8, !tbaa !33
  %88 = icmp eq ptr %87, %0
  br i1 %88, label %.critedge5, label %.critedge3

.critedge3:                                       ; preds = %.lr.ph365, %84
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.1, i32 noundef 1747, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

.critedge5:                                       ; preds = %82, %84
  %89 = load ptr, ptr %78, align 8, !tbaa !38
  %90 = getelementptr inbounds i8, ptr %78, i64 16
  %91 = load i32, ptr %90, align 8, !tbaa !39
  %92 = call noundef i32 @_ZL27stbtt_GetFontOffsetForIndexPKhi(ptr noundef %89, i32 noundef %91)
  %93 = icmp sgt i32 %92, -1
  br i1 %93, label %.critedge340, label %94

94:                                               ; preds = %.critedge5
  call void @__assert_fail(ptr noundef nonnull @.str.26, ptr noundef nonnull @.str.1, i32 noundef 1750, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

.critedge340:                                     ; preds = %.critedge5
  %95 = load ptr, ptr %78, align 8, !tbaa !38
  %96 = call noundef i32 @_ZL14stbtt_InitFontP14stbtt_fontinfoPKhi(ptr noundef %79, ptr noundef %95, i32 noundef %92)
  %.not322.not = icmp eq i32 %96, 0
  br i1 %.not322.not, label %97, label %74

97:                                               ; preds = %.critedge340
  store i32 0, ptr %19, align 4, !tbaa !17
  store i32 0, ptr %20, align 8, !tbaa !18
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %72)
  br label %460

.critedge342:                                     ; preds = %74, %66
  %98 = sext i32 %.0283.lcssa470 to i64
  %99 = mul nsw i64 %98, 28
  %100 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %99)
  %101 = shl nsw i64 %98, 4
  %102 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %101)
  %103 = sext i32 %.0285.lcssa468 to i64
  %104 = mul nsw i64 %103, 40
  %105 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %104)
  call void @llvm.memset.p0.i64(ptr align 4 %100, i8 0, i64 %99, i1 false)
  call void @llvm.memset.p0.i64(ptr align 4 %102, i8 0, i64 %101, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %105, i8 0, i64 %104, i1 false)
  %106 = load i32, ptr %13, align 8, !tbaa !5
  %107 = icmp sgt i32 %106, 0
  br i1 %107, label %.lr.ph398, label %._crit_edge399

._crit_edge399:                                   ; preds = %._crit_edge393, %.critedge342
  %.0297.lcssa = phi i32 [ 0, %.critedge342 ], [ %148, %._crit_edge393 ]
  %.0296.lcssa = phi i32 [ 0, %.critedge342 ], [ %155, %._crit_edge393 ]
  %.0294.lcssa = phi i32 [ 0, %.critedge342 ], [ %.1295.lcssa, %._crit_edge393 ]
  %108 = icmp eq i32 %.0296.lcssa, %.0283.lcssa470
  br i1 %108, label %244, label %243

.lr.ph398:                                        ; preds = %.critedge342, %._crit_edge393
  %indvars.iv446 = phi i64 [ %indvars.iv.next447, %._crit_edge393 ], [ 0, %.critedge342 ]
  %.0294397 = phi i32 [ %.1295.lcssa, %._crit_edge393 ], [ 0, %.critedge342 ]
  %.0296396 = phi i32 [ %155, %._crit_edge393 ], [ 0, %.critedge342 ]
  %.0297395 = phi i32 [ %148, %._crit_edge393 ], [ 0, %.critedge342 ]
  %109 = trunc nuw nsw i64 %indvars.iv446 to i32
  %110 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %109)
  %111 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %72, i64 %indvars.iv446
  %112 = getelementptr inbounds i8, ptr %110, i64 56
  %113 = load ptr, ptr %112, align 8, !tbaa !20
  %114 = load i16, ptr %113, align 2, !tbaa !23
  %.not333366 = icmp eq i16 %114, 0
  br i1 %.not333366, label %.critedge7.thread, label %.lr.ph371

.critedge7.thread:                                ; preds = %.lr.ph398
  %115 = zext nneg i32 %.0297395 to i64
  %116 = getelementptr inbounds %struct.stbtt_pack_range, ptr %105, i64 %115
  %117 = getelementptr inbounds i8, ptr %111, i64 176
  store ptr %116, ptr %117, align 8, !tbaa !40
  %118 = getelementptr inbounds i8, ptr %111, i64 184
  store i32 0, ptr %118, align 8, !tbaa !44
  br label %._crit_edge380

.lr.ph371:                                        ; preds = %.lr.ph398, %134
  %119 = phi i16 [ %142, %134 ], [ %114, %.lr.ph398 ]
  %.0299369 = phi i32 [ %139, %134 ], [ 0, %.lr.ph398 ]
  %.0302368 = phi i32 [ %141, %134 ], [ 0, %.lr.ph398 ]
  %.0303367 = phi ptr [ %140, %134 ], [ %113, %.lr.ph398 ]
  %120 = getelementptr inbounds i8, ptr %.0303367, i64 2
  %121 = load i16, ptr %120, align 2, !tbaa !23
  %.not334 = icmp eq i16 %121, 0
  br i1 %.not334, label %.critedge7, label %134

.critedge7:                                       ; preds = %.lr.ph371
  %122 = zext nneg i32 %.0297395 to i64
  %123 = getelementptr inbounds %struct.stbtt_pack_range, ptr %105, i64 %122
  %124 = getelementptr inbounds i8, ptr %111, i64 176
  store ptr %123, ptr %124, align 8, !tbaa !40
  %125 = getelementptr inbounds i8, ptr %111, i64 184
  store i32 %.0302368, ptr %125, align 8, !tbaa !44
  %126 = add nuw nsw i32 %.0302368, %.0297395
  %.not424 = icmp eq i32 %.0302368, 0
  br i1 %.not424, label %._crit_edge380, label %.lr.ph379

.lr.ph379:                                        ; preds = %.critedge7.thread490, %.critedge7
  %127 = phi i32 [ %147, %.critedge7.thread490 ], [ %126, %.critedge7 ]
  %128 = phi ptr [ %146, %.critedge7.thread490 ], [ %125, %.critedge7 ]
  %129 = phi ptr [ %145, %.critedge7.thread490 ], [ %124, %.critedge7 ]
  %130 = phi i64 [ %143, %.critedge7.thread490 ], [ %122, %.critedge7 ]
  %.0299.lcssa495 = phi i32 [ %139, %.critedge7.thread490 ], [ %.0299369, %.critedge7 ]
  %.0302.lcssa494 = phi i32 [ %141, %.critedge7.thread490 ], [ %.0302368, %.critedge7 ]
  %131 = getelementptr inbounds i8, ptr %110, i64 20
  %132 = load float, ptr %131, align 4, !tbaa !45
  %wide.trip.count = zext i32 %.0302.lcssa494 to i64
  %133 = getelementptr inbounds %struct.stbtt_pack_range, ptr %105, i64 %130
  br label %167

134:                                              ; preds = %.lr.ph371
  %135 = zext i16 %121 to i32
  %136 = zext i16 %119 to i32
  %137 = add i32 %.0299369, 1
  %138 = sub i32 %137, %136
  %139 = add i32 %138, %135
  %140 = getelementptr inbounds i8, ptr %.0303367, i64 4
  %141 = add nuw nsw i32 %.0302368, 1
  %142 = load i16, ptr %140, align 2, !tbaa !23
  %.not333 = icmp eq i16 %142, 0
  br i1 %.not333, label %.critedge7.thread490, label %.lr.ph371, !llvm.loop !46

.critedge7.thread490:                             ; preds = %134
  %143 = zext nneg i32 %.0297395 to i64
  %144 = getelementptr inbounds %struct.stbtt_pack_range, ptr %105, i64 %143
  %145 = getelementptr inbounds i8, ptr %111, i64 176
  store ptr %144, ptr %145, align 8, !tbaa !40
  %146 = getelementptr inbounds i8, ptr %111, i64 184
  store i32 %141, ptr %146, align 8, !tbaa !44
  %147 = add nuw nsw i32 %141, %.0297395
  br label %.lr.ph379

._crit_edge380:                                   ; preds = %167, %.critedge7.thread, %.critedge7
  %148 = phi i32 [ %126, %.critedge7 ], [ %.0297395, %.critedge7.thread ], [ %127, %167 ]
  %149 = phi ptr [ %125, %.critedge7 ], [ %118, %.critedge7.thread ], [ %128, %167 ]
  %150 = phi ptr [ %124, %.critedge7 ], [ %117, %.critedge7.thread ], [ %129, %167 ]
  %.0299.lcssa489 = phi i32 [ %.0299369, %.critedge7 ], [ 0, %.critedge7.thread ], [ %.0299.lcssa495, %167 ]
  %.1295.lcssa = phi i32 [ %.0294397, %.critedge7 ], [ %.0294397, %.critedge7.thread ], [ %182, %167 ]
  %151 = sext i32 %.0296396 to i64
  %152 = getelementptr inbounds %struct.stbrp_rect, ptr %102, i64 %151
  %153 = getelementptr inbounds i8, ptr %111, i64 160
  store ptr %152, ptr %153, align 8, !tbaa !47
  %154 = getelementptr inbounds i8, ptr %111, i64 168
  store i32 %.0299.lcssa489, ptr %154, align 8, !tbaa !48
  %155 = add nsw i32 %.0299.lcssa489, %.0296396
  %156 = getelementptr inbounds i8, ptr %110, i64 24
  %157 = load i32, ptr %156, align 8, !tbaa !49
  %158 = getelementptr inbounds i8, ptr %110, i64 28
  %159 = load i32, ptr %158, align 4, !tbaa !50
  call void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef nonnull %4, i32 noundef %157, i32 noundef %159)
  %160 = load ptr, ptr %150, align 8, !tbaa !40
  %161 = load i32, ptr %149, align 8, !tbaa !44
  %162 = load ptr, ptr %153, align 8, !tbaa !47
  %163 = call noundef i32 @_ZL31stbtt_PackFontRangesGatherRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef nonnull %4, ptr noundef %111, ptr noundef %160, i32 noundef %161, ptr noundef %162)
  %164 = icmp eq i32 %163, %.0299.lcssa489
  br i1 %164, label %.preheader344, label %183

.preheader344:                                    ; preds = %._crit_edge380
  %165 = load i32, ptr %149, align 8, !tbaa !44
  %166 = icmp sgt i32 %165, 0
  br i1 %166, label %.preheader.preheader, label %._crit_edge389

.preheader.preheader:                             ; preds = %.preheader344
  %.pre = load ptr, ptr %150, align 8, !tbaa !40
  br label %.preheader

167:                                              ; preds = %.lr.ph379, %167
  %indvars.iv432 = phi i64 [ 0, %.lr.ph379 ], [ %indvars.iv.next433, %167 ]
  %.1295378 = phi i32 [ %.0294397, %.lr.ph379 ], [ %182, %167 ]
  %.idx = shl nsw i64 %indvars.iv432, 2
  %168 = getelementptr inbounds i8, ptr %113, i64 %.idx
  %169 = getelementptr inbounds %struct.stbtt_pack_range, ptr %133, i64 %indvars.iv432
  store float %132, ptr %169, align 8, !tbaa !51
  %170 = load i16, ptr %168, align 2, !tbaa !23
  %171 = zext i16 %170 to i32
  %172 = getelementptr inbounds i8, ptr %169, i64 4
  store i32 %171, ptr %172, align 4, !tbaa !53
  %173 = getelementptr inbounds i8, ptr %168, i64 2
  %174 = load i16, ptr %173, align 2, !tbaa !23
  %175 = zext i16 %174 to i32
  %176 = sub nsw i32 %175, %171
  %177 = add nsw i32 %176, 1
  %178 = getelementptr inbounds i8, ptr %169, i64 16
  store i32 %177, ptr %178, align 8, !tbaa !54
  %179 = sext i32 %.1295378 to i64
  %180 = getelementptr inbounds %struct.stbtt_packedchar, ptr %100, i64 %179
  %181 = getelementptr inbounds i8, ptr %169, i64 24
  store ptr %180, ptr %181, align 8, !tbaa !55
  %182 = add nsw i32 %177, %.1295378
  %indvars.iv.next433 = add nuw nsw i64 %indvars.iv432, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next433, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge380, label %167, !llvm.loop !56

183:                                              ; preds = %._crit_edge380
  call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.1, i32 noundef 1799, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge385
  %184 = phi i32 [ %165, %.preheader.preheader ], [ %195, %._crit_edge385 ]
  %185 = phi ptr [ %.pre, %.preheader.preheader ], [ %196, %._crit_edge385 ]
  %indvars.iv438 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next439, %._crit_edge385 ]
  %.0308387 = phi i32 [ 0, %.preheader.preheader ], [ %.1309.lcssa, %._crit_edge385 ]
  %186 = getelementptr inbounds %struct.stbtt_pack_range, ptr %185, i64 %indvars.iv438, i32 3
  %187 = load i32, ptr %186, align 8, !tbaa !54
  %188 = icmp sgt i32 %187, 0
  br i1 %188, label %.lr.ph384.preheader, label %._crit_edge385

.lr.ph384.preheader:                              ; preds = %.preheader
  %189 = sext i32 %.0308387 to i64
  br label %.lr.ph384

._crit_edge389:                                   ; preds = %._crit_edge385, %.preheader344
  %190 = load ptr, ptr %67, align 8, !tbaa !29
  %191 = load ptr, ptr %153, align 8, !tbaa !47
  %192 = call noundef i32 @_ZL16stbrp_pack_rectsP13stbrp_contextP10stbrp_recti(ptr noundef %190, ptr noundef %191, i32 noundef %.0299.lcssa489)
  %193 = icmp sgt i32 %.0299.lcssa489, 0
  br i1 %193, label %.lr.ph392.preheader, label %._crit_edge393

.lr.ph392.preheader:                              ; preds = %._crit_edge389
  %wide.trip.count444 = zext nneg i32 %.0299.lcssa489 to i64
  br label %.lr.ph392

._crit_edge385.loopexit:                          ; preds = %209
  %194 = trunc nsw i64 %indvars.iv.next436 to i32
  %.pre461 = load i32, ptr %149, align 8, !tbaa !44
  br label %._crit_edge385

._crit_edge385:                                   ; preds = %._crit_edge385.loopexit, %.preheader
  %195 = phi i32 [ %184, %.preheader ], [ %.pre461, %._crit_edge385.loopexit ]
  %196 = phi ptr [ %185, %.preheader ], [ %211, %._crit_edge385.loopexit ]
  %.1309.lcssa = phi i32 [ %.0308387, %.preheader ], [ %194, %._crit_edge385.loopexit ]
  %indvars.iv.next439 = add nuw nsw i64 %indvars.iv438, 1
  %197 = sext i32 %195 to i64
  %198 = icmp slt i64 %indvars.iv.next439, %197
  br i1 %198, label %.preheader, label %._crit_edge389, !llvm.loop !57

.lr.ph384:                                        ; preds = %.lr.ph384.preheader, %209
  %indvars.iv435 = phi i64 [ %189, %.lr.ph384.preheader ], [ %indvars.iv.next436, %209 ]
  %199 = phi ptr [ %185, %.lr.ph384.preheader ], [ %211, %209 ]
  %.0306383 = phi i32 [ 0, %.lr.ph384.preheader ], [ %210, %209 ]
  %200 = getelementptr inbounds %struct.stbtt_pack_range, ptr %199, i64 %indvars.iv438, i32 1
  %201 = load i32, ptr %200, align 4, !tbaa !53
  %202 = add nsw i32 %201, %.0306383
  %203 = call noundef i32 @_ZL20stbtt_FindGlyphIndexPK14stbtt_fontinfoi(ptr noundef nonnull %111, i32 noundef %202)
  %204 = icmp eq i32 %203, 0
  br i1 %204, label %205, label %209

205:                                              ; preds = %.lr.ph384
  %206 = load ptr, ptr %153, align 8, !tbaa !47
  %207 = getelementptr inbounds %struct.stbrp_rect, ptr %206, i64 %indvars.iv435, i32 2
  store i16 0, ptr %207, align 2, !tbaa !58
  %208 = getelementptr inbounds %struct.stbrp_rect, ptr %206, i64 %indvars.iv435, i32 1
  store i16 0, ptr %208, align 4, !tbaa !60
  br label %209

209:                                              ; preds = %.lr.ph384, %205
  %210 = add nuw nsw i32 %.0306383, 1
  %indvars.iv.next436 = add nsw i64 %indvars.iv435, 1
  %211 = load ptr, ptr %150, align 8, !tbaa !40
  %212 = getelementptr inbounds %struct.stbtt_pack_range, ptr %211, i64 %indvars.iv438, i32 3
  %213 = load i32, ptr %212, align 8, !tbaa !54
  %214 = icmp slt i32 %210, %213
  br i1 %214, label %.lr.ph384, label %._crit_edge385.loopexit, !llvm.loop !61

._crit_edge393:                                   ; preds = %242, %._crit_edge389
  %indvars.iv.next447 = add nuw nsw i64 %indvars.iv446, 1
  %215 = load i32, ptr %13, align 8, !tbaa !5
  %216 = sext i32 %215 to i64
  %217 = icmp slt i64 %indvars.iv.next447, %216
  br i1 %217, label %.lr.ph398, label %._crit_edge399, !llvm.loop !62

.lr.ph392:                                        ; preds = %.lr.ph392.preheader, %242
  %indvars.iv441 = phi i64 [ 0, %.lr.ph392.preheader ], [ %indvars.iv.next442, %242 ]
  %218 = load ptr, ptr %153, align 8, !tbaa !47
  %219 = getelementptr inbounds %struct.stbrp_rect, ptr %218, i64 %indvars.iv441
  %220 = getelementptr inbounds i8, ptr %219, i64 4
  %221 = load i16, ptr %220, align 4, !tbaa !60
  %222 = icmp eq i16 %221, 0
  br i1 %222, label %223, label %229

223:                                              ; preds = %.lr.ph392
  %224 = getelementptr inbounds i8, ptr %219, i64 6
  %225 = load i16, ptr %224, align 2, !tbaa !58
  %226 = icmp eq i16 %225, 0
  br i1 %226, label %227, label %229

227:                                              ; preds = %223
  %228 = getelementptr inbounds i8, ptr %219, i64 12
  store i32 0, ptr %228, align 4, !tbaa !63
  br label %229

229:                                              ; preds = %227, %223, %.lr.ph392
  %230 = getelementptr inbounds i8, ptr %219, i64 12
  %231 = load i32, ptr %230, align 4, !tbaa !63
  %.not335 = icmp eq i32 %231, 0
  br i1 %.not335, label %242, label %232

232:                                              ; preds = %229
  %233 = load i32, ptr %19, align 4, !tbaa !17
  %234 = getelementptr inbounds i8, ptr %219, i64 10
  %235 = load i16, ptr %234, align 2, !tbaa !64
  %236 = zext i16 %235 to i32
  %237 = getelementptr inbounds i8, ptr %219, i64 6
  %238 = load i16, ptr %237, align 2, !tbaa !58
  %239 = zext i16 %238 to i32
  %240 = add nuw nsw i32 %239, %236
  %241 = call noundef i32 @_ZL5ImMaxIiET_S0_S0_(i32 noundef %233, i32 noundef %240)
  store i32 %241, ptr %19, align 4, !tbaa !17
  br label %242

242:                                              ; preds = %229, %232
  %indvars.iv.next442 = add nuw nsw i64 %indvars.iv441, 1
  %exitcond445.not = icmp eq i64 %indvars.iv.next442, %wide.trip.count444
  br i1 %exitcond445.not, label %._crit_edge393, label %.lr.ph392, !llvm.loop !65

243:                                              ; preds = %._crit_edge399
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.1, i32 noundef 1822, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

244:                                              ; preds = %._crit_edge399
  %245 = icmp eq i32 %.0294.lcssa, %.0283.lcssa470
  br i1 %245, label %247, label %246

246:                                              ; preds = %244
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.1, i32 noundef 1823, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

247:                                              ; preds = %244
  %248 = icmp eq i32 %.0297.lcssa, %.0285.lcssa468
  br i1 %248, label %250, label %249

249:                                              ; preds = %247
  call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.1, i32 noundef 1824, ptr noundef nonnull @__PRETTY_FUNCTION__._Z31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlas) #8
  unreachable

250:                                              ; preds = %247
  %251 = load i32, ptr %0, align 8, !tbaa !66
  %252 = and i32 %251, 1
  %.not324 = icmp eq i32 %252, 0
  %253 = load i32, ptr %19, align 4, !tbaa !17
  br i1 %.not324, label %256, label %254

254:                                              ; preds = %250
  %255 = add nsw i32 %253, 1
  br label %258

256:                                              ; preds = %250
  %257 = call noundef i32 @_ZL17ImUpperPowerOfTwoi(i32 noundef %253)
  br label %258

258:                                              ; preds = %256, %254
  %259 = phi i32 [ %255, %254 ], [ %257, %256 ]
  store i32 %259, ptr %19, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  %260 = load i32, ptr %20, align 8, !tbaa !18
  %261 = sitofp i32 %260 to float
  %262 = fdiv float 1.000000e+00, %261
  %263 = sitofp i32 %259 to float
  %264 = fdiv float 1.000000e+00, %263
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %5, float noundef %262, float noundef %264)
  %265 = load i64, ptr %5, align 8
  store i64 %265, ptr %21, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  %266 = load i32, ptr %20, align 8, !tbaa !18
  %267 = load i32, ptr %19, align 4, !tbaa !17
  %268 = mul nsw i32 %267, %266
  %269 = sext i32 %268 to i64
  %270 = call noundef ptr @_ZN5ImGui8MemAllocEm(i64 noundef %269)
  %271 = getelementptr inbounds i8, ptr %0, i64 24
  store ptr %270, ptr %271, align 8, !tbaa !67
  %272 = load i32, ptr %20, align 8, !tbaa !18
  %273 = load i32, ptr %19, align 4, !tbaa !17
  %274 = mul nsw i32 %273, %272
  %275 = sext i32 %274 to i64
  call void @llvm.memset.p0.i64(ptr align 1 %270, i8 0, i64 %275, i1 false)
  %276 = load ptr, ptr %271, align 8, !tbaa !67
  %277 = getelementptr inbounds i8, ptr %4, i64 40
  store ptr %276, ptr %277, align 8, !tbaa !68
  %278 = load i32, ptr %19, align 4, !tbaa !17
  %279 = getelementptr inbounds i8, ptr %4, i64 20
  store i32 %278, ptr %279, align 4, !tbaa !69
  %280 = load i32, ptr %13, align 8, !tbaa !5
  %281 = icmp sgt i32 %280, 0
  br i1 %281, label %.lr.ph410, label %._crit_edge411

.lr.ph410:                                        ; preds = %258
  %282 = getelementptr inbounds i8, ptr %4, i64 24
  br label %292

._crit_edge411:                                   ; preds = %339, %258
  call void @_ZL13stbtt_PackEndP18stbtt_pack_context(ptr noundef nonnull %4)
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %102)
  %283 = load i32, ptr %13, align 8, !tbaa !5
  %284 = icmp sgt i32 %283, 0
  br i1 %284, label %.lr.ph422, label %._crit_edge423

.lr.ph422:                                        ; preds = %._crit_edge411
  %285 = getelementptr inbounds i8, ptr %10, i64 4
  %286 = getelementptr inbounds i8, ptr %10, i64 16
  %287 = getelementptr inbounds i8, ptr %10, i64 20
  %288 = getelementptr inbounds i8, ptr %10, i64 8
  %289 = getelementptr inbounds i8, ptr %10, i64 12
  %290 = getelementptr inbounds i8, ptr %10, i64 24
  %291 = getelementptr inbounds i8, ptr %10, i64 28
  br label %343

292:                                              ; preds = %.lr.ph410, %339
  %indvars.iv449 = phi i64 [ 0, %.lr.ph410 ], [ %indvars.iv.next450, %339 ]
  %293 = trunc nuw nsw i64 %indvars.iv449 to i32
  %294 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %293)
  %295 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %72, i64 %indvars.iv449
  %296 = getelementptr inbounds i8, ptr %294, i64 24
  %297 = load i32, ptr %296, align 8, !tbaa !49
  %298 = getelementptr inbounds i8, ptr %294, i64 28
  %299 = load i32, ptr %298, align 4, !tbaa !50
  call void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef nonnull %4, i32 noundef %297, i32 noundef %299)
  %300 = getelementptr inbounds i8, ptr %295, i64 176
  %301 = load ptr, ptr %300, align 8, !tbaa !40
  %302 = getelementptr inbounds i8, ptr %295, i64 184
  %303 = load i32, ptr %302, align 8, !tbaa !44
  %304 = getelementptr inbounds i8, ptr %295, i64 160
  %305 = load ptr, ptr %304, align 8, !tbaa !47
  %306 = call noundef i32 @_ZL35stbtt_PackFontRangesRenderIntoRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef nonnull %4, ptr noundef %295, ptr noundef %301, i32 noundef %303, ptr noundef %305)
  %307 = getelementptr inbounds i8, ptr %294, i64 80
  %308 = load float, ptr %307, align 8, !tbaa !70
  %309 = fcmp une float %308, 1.000000e+00
  br i1 %309, label %310, label %339

310:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %6) #9
  call void @_Z39ImFontAtlasBuildMultiplyCalcLookupTablePhf(ptr noundef nonnull %6, float noundef %308)
  %311 = getelementptr inbounds i8, ptr %295, i64 168
  %312 = load i32, ptr %311, align 8, !tbaa !48
  %.not331403 = icmp eq i32 %312, 0
  br i1 %.not331403, label %._crit_edge407, label %.lr.ph406.preheader

.lr.ph406.preheader:                              ; preds = %310
  %313 = load ptr, ptr %304, align 8, !tbaa !47
  br label %.lr.ph406

._crit_edge407:                                   ; preds = %333, %310
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %6) #9
  br label %339

.lr.ph406:                                        ; preds = %.lr.ph406.preheader, %333
  %314 = phi i32 [ %334, %333 ], [ %312, %.lr.ph406.preheader ]
  %315 = phi ptr [ %335, %333 ], [ %313, %.lr.ph406.preheader ]
  %.0301404 = phi ptr [ %336, %333 ], [ %313, %.lr.ph406.preheader ]
  %316 = getelementptr inbounds i8, ptr %.0301404, i64 12
  %317 = load i32, ptr %316, align 4, !tbaa !63
  %.not332 = icmp eq i32 %317, 0
  br i1 %.not332, label %333, label %318

318:                                              ; preds = %.lr.ph406
  %319 = load ptr, ptr %277, align 8, !tbaa !68
  %320 = getelementptr inbounds i8, ptr %.0301404, i64 8
  %321 = load i16, ptr %320, align 4, !tbaa !71
  %322 = zext i16 %321 to i32
  %323 = getelementptr inbounds i8, ptr %.0301404, i64 10
  %324 = load i16, ptr %323, align 2, !tbaa !64
  %325 = zext i16 %324 to i32
  %326 = getelementptr inbounds i8, ptr %.0301404, i64 4
  %327 = load i16, ptr %326, align 4, !tbaa !60
  %328 = zext i16 %327 to i32
  %329 = getelementptr inbounds i8, ptr %.0301404, i64 6
  %330 = load i16, ptr %329, align 2, !tbaa !58
  %331 = zext i16 %330 to i32
  %332 = load i32, ptr %282, align 8, !tbaa !72
  call void @_Z34ImFontAtlasBuildMultiplyRectAlpha8PKhPhiiiii(ptr noundef nonnull %6, ptr noundef %319, i32 noundef %322, i32 noundef %325, i32 noundef %328, i32 noundef %331, i32 noundef %332)
  %.pre462 = load ptr, ptr %304, align 8, !tbaa !47
  %.pre463 = load i32, ptr %311, align 8, !tbaa !48
  br label %333

333:                                              ; preds = %.lr.ph406, %318
  %334 = phi i32 [ %314, %.lr.ph406 ], [ %.pre463, %318 ]
  %335 = phi ptr [ %315, %.lr.ph406 ], [ %.pre462, %318 ]
  %336 = getelementptr inbounds i8, ptr %.0301404, i64 16
  %337 = sext i32 %334 to i64
  %338 = getelementptr inbounds %struct.stbrp_rect, ptr %335, i64 %337
  %.not331 = icmp eq ptr %336, %338
  br i1 %.not331, label %._crit_edge407, label %.lr.ph406, !llvm.loop !73

339:                                              ; preds = %._crit_edge407, %292
  store ptr null, ptr %304, align 8, !tbaa !47
  %indvars.iv.next450 = add nuw nsw i64 %indvars.iv449, 1
  %340 = load i32, ptr %13, align 8, !tbaa !5
  %341 = sext i32 %340 to i64
  %342 = icmp slt i64 %indvars.iv.next450, %341
  br i1 %342, label %292, label %._crit_edge411, !llvm.loop !74

._crit_edge423:                                   ; preds = %._crit_edge419, %._crit_edge411
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %100)
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %105)
  call void @_ZN5ImGui7MemFreeEPv(ptr noundef %72)
  call void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef nonnull %0)
  br label %460

343:                                              ; preds = %.lr.ph422, %._crit_edge419
  %indvars.iv458 = phi i64 [ 0, %.lr.ph422 ], [ %indvars.iv.next459, %._crit_edge419 ]
  %344 = trunc nuw nsw i64 %indvars.iv458 to i32
  %345 = call noundef nonnull align 8 dereferenceable(136) ptr @_ZN8ImVectorI12ImFontConfigEixEi(ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %344)
  %346 = getelementptr inbounds %struct.ImFontTempBuildData, ptr %72, i64 %indvars.iv458
  %347 = getelementptr inbounds i8, ptr %345, i64 128
  %348 = load ptr, ptr %347, align 8, !tbaa !32
  %349 = getelementptr inbounds i8, ptr %345, i64 72
  %350 = load i8, ptr %349, align 8, !tbaa !75, !range !76, !noundef !77
  %351 = trunc nuw i8 %350 to i1
  br i1 %351, label %352, label %353

352:                                              ; preds = %343
  call void @_ZN6ImFont16BuildLookupTableEv(ptr noundef nonnull align 8 dereferenceable(112) %348)
  br label %353

353:                                              ; preds = %352, %343
  %354 = getelementptr inbounds i8, ptr %345, i64 20
  %355 = load float, ptr %354, align 4, !tbaa !45
  %356 = call noundef float @_ZL25stbtt_ScaleForPixelHeightPK14stbtt_fontinfof(ptr noundef %346, float noundef %355)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #9
  call void @_ZL21stbtt_GetFontVMetricsPK14stbtt_fontinfoPiS2_S2_(ptr noundef %346, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9)
  %357 = load i32, ptr %7, align 4, !tbaa !78
  %358 = sitofp i32 %357 to float
  %.inv = icmp slt i32 %357, 1
  %359 = select i1 %.inv, i32 -1, i32 1
  %360 = sitofp i32 %359 to float
  %361 = call float @llvm.fmuladd.f32(float %358, float %356, float %360)
  %362 = call noundef float @_ZL7ImFloorf(float noundef %361)
  %363 = load i32, ptr %8, align 4, !tbaa !78
  %364 = sitofp i32 %363 to float
  %.inv325 = icmp slt i32 %363, 1
  %365 = select i1 %.inv325, i32 -1, i32 1
  %366 = sitofp i32 %365 to float
  %367 = call float @llvm.fmuladd.f32(float %364, float %356, float %366)
  %368 = call noundef float @_ZL7ImFloorf(float noundef %367)
  call void @_Z25ImFontAtlasBuildSetupFontP11ImFontAtlasP6ImFontP12ImFontConfigff(ptr noundef nonnull %0, ptr noundef %348, ptr noundef nonnull %345, float noundef %362, float noundef %368)
  %369 = getelementptr inbounds i8, ptr %345, i64 44
  %370 = load float, ptr %369, align 4, !tbaa !79
  %371 = getelementptr inbounds i8, ptr %345, i64 48
  %372 = load float, ptr %371, align 8, !tbaa !80
  %373 = getelementptr inbounds i8, ptr %348, i64 96
  %374 = load float, ptr %373, align 8, !tbaa !81
  %375 = fadd float %374, 5.000000e-01
  %376 = fptosi float %375 to i32
  %377 = sitofp i32 %376 to float
  %378 = fadd float %372, %377
  %379 = getelementptr inbounds i8, ptr %346, i64 184
  %380 = load i32, ptr %379, align 8, !tbaa !44
  %381 = icmp sgt i32 %380, 0
  br i1 %381, label %.lr.ph418, label %._crit_edge419

.lr.ph418:                                        ; preds = %353
  %382 = getelementptr inbounds i8, ptr %346, i64 176
  %383 = getelementptr inbounds i8, ptr %345, i64 64
  %384 = getelementptr inbounds i8, ptr %345, i64 68
  %385 = getelementptr inbounds i8, ptr %345, i64 32
  br label %389

._crit_edge419:                                   ; preds = %._crit_edge415, %353
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  %indvars.iv.next459 = add nuw nsw i64 %indvars.iv458, 1
  %386 = load i32, ptr %13, align 8, !tbaa !5
  %387 = sext i32 %386 to i64
  %388 = icmp slt i64 %indvars.iv.next459, %387
  br i1 %388, label %343, label %._crit_edge423, !llvm.loop !82

389:                                              ; preds = %.lr.ph418, %._crit_edge415
  %390 = phi i32 [ %380, %.lr.ph418 ], [ %398, %._crit_edge415 ]
  %indvars.iv455 = phi i64 [ 0, %.lr.ph418 ], [ %indvars.iv.next456, %._crit_edge415 ]
  %391 = load ptr, ptr %382, align 8, !tbaa !40
  %392 = getelementptr inbounds %struct.stbtt_pack_range, ptr %391, i64 %indvars.iv455
  %393 = getelementptr inbounds i8, ptr %392, i64 16
  %394 = load i32, ptr %393, align 8, !tbaa !54
  %395 = icmp sgt i32 %394, 0
  br i1 %395, label %.lr.ph414, label %._crit_edge415

.lr.ph414:                                        ; preds = %389
  %396 = getelementptr inbounds i8, ptr %392, i64 24
  %397 = getelementptr inbounds i8, ptr %392, i64 4
  br label %401

._crit_edge415.loopexit:                          ; preds = %456
  %.pre464 = load i32, ptr %379, align 8, !tbaa !44
  br label %._crit_edge415

._crit_edge415:                                   ; preds = %._crit_edge415.loopexit, %389
  %398 = phi i32 [ %.pre464, %._crit_edge415.loopexit ], [ %390, %389 ]
  %indvars.iv.next456 = add nuw nsw i64 %indvars.iv455, 1
  %399 = sext i32 %398 to i64
  %400 = icmp slt i64 %indvars.iv.next456, %399
  br i1 %400, label %389, label %._crit_edge419, !llvm.loop !83

401:                                              ; preds = %.lr.ph414, %456
  %indvars.iv452 = phi i64 [ 0, %.lr.ph414 ], [ %indvars.iv.next453, %456 ]
  %402 = load ptr, ptr %396, align 8, !tbaa !55
  %403 = getelementptr inbounds %struct.stbtt_packedchar, ptr %402, i64 %indvars.iv452
  %404 = load i16, ptr %403, align 4, !tbaa !84
  %.not326 = icmp eq i16 %404, 0
  br i1 %.not326, label %405, label %414

405:                                              ; preds = %401
  %406 = getelementptr inbounds i8, ptr %403, i64 4
  %407 = load i16, ptr %406, align 4, !tbaa !86
  %.not327 = icmp eq i16 %407, 0
  br i1 %.not327, label %408, label %414

408:                                              ; preds = %405
  %409 = getelementptr inbounds i8, ptr %403, i64 2
  %410 = load i16, ptr %409, align 2, !tbaa !87
  %.not328 = icmp eq i16 %410, 0
  br i1 %.not328, label %411, label %414

411:                                              ; preds = %408
  %412 = getelementptr inbounds i8, ptr %403, i64 6
  %413 = load i16, ptr %412, align 2, !tbaa !88
  %.not329 = icmp eq i16 %413, 0
  br i1 %.not329, label %456, label %414

414:                                              ; preds = %411, %408, %405, %401
  %415 = load i32, ptr %397, align 4, !tbaa !53
  %416 = trunc nuw nsw i64 %indvars.iv452 to i32
  %417 = add nsw i32 %415, %416
  %418 = load i8, ptr %349, align 8, !tbaa !75, !range !76, !noundef !77
  %419 = trunc nuw i8 %418 to i1
  br i1 %419, label %420, label %423

420:                                              ; preds = %414
  %421 = trunc i32 %417 to i16
  %422 = call noundef ptr @_ZNK6ImFont19FindGlyphNoFallbackEt(ptr noundef nonnull align 8 dereferenceable(112) %348, i16 noundef zeroext %421)
  %.not330 = icmp eq ptr %422, null
  br i1 %.not330, label %423, label %456

423:                                              ; preds = %420, %414
  %424 = getelementptr inbounds i8, ptr %403, i64 16
  %425 = load float, ptr %424, align 4, !tbaa !89
  %426 = load float, ptr %383, align 8, !tbaa !90
  %427 = load float, ptr %384, align 4, !tbaa !91
  %428 = call noundef float @_ZL7ImClampIfET_S0_S0_S0_(float noundef %425, float noundef %426, float noundef %427)
  %429 = fcmp une float %425, %428
  br i1 %429, label %430, label %439

430:                                              ; preds = %423
  %431 = load i8, ptr %385, align 8, !tbaa !92, !range !76, !noundef !77
  %432 = trunc nuw i8 %431 to i1
  %433 = fsub float %428, %425
  %434 = fmul float %433, 5.000000e-01
  %435 = fptosi float %434 to i32
  %436 = sitofp i32 %435 to float
  %437 = select i1 %432, float %436, float %434
  %438 = fadd float %370, %437
  br label %439

439:                                              ; preds = %430, %423
  %.0 = phi float [ %438, %430 ], [ %370, %423 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #9
  store float 0.000000e+00, ptr %11, align 4, !tbaa !93
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #9
  store float 0.000000e+00, ptr %12, align 4, !tbaa !93
  %440 = load ptr, ptr %396, align 8, !tbaa !55
  %441 = load i32, ptr %20, align 8, !tbaa !18
  %442 = load i32, ptr %19, align 4, !tbaa !17
  call void @_ZL19stbtt_GetPackedQuadPK16stbtt_packedchariiiPfS2_P18stbtt_aligned_quadi(ptr noundef %440, i32 noundef %441, i32 noundef %442, i32 noundef %416, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %10, i32 noundef 0)
  %443 = trunc i32 %417 to i16
  %444 = load float, ptr %10, align 4, !tbaa !94
  %445 = fadd float %.0, %444
  %446 = load float, ptr %285, align 4, !tbaa !96
  %447 = fadd float %378, %446
  %448 = load float, ptr %286, align 4, !tbaa !97
  %449 = fadd float %.0, %448
  %450 = load float, ptr %287, align 4, !tbaa !98
  %451 = fadd float %378, %450
  %452 = load float, ptr %288, align 4, !tbaa !99
  %453 = load float, ptr %289, align 4, !tbaa !100
  %454 = load float, ptr %290, align 4, !tbaa !101
  %455 = load float, ptr %291, align 4, !tbaa !102
  call void @_ZN6ImFont8AddGlyphEtfffffffff(ptr noundef nonnull align 8 dereferenceable(112) %348, i16 noundef zeroext %443, float noundef %445, float noundef %447, float noundef %449, float noundef %451, float noundef %452, float noundef %453, float noundef %454, float noundef %455, float noundef %428)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9
  br label %456

456:                                              ; preds = %439, %420, %411
  %indvars.iv.next453 = add nuw nsw i64 %indvars.iv452, 1
  %457 = load i32, ptr %393, align 8, !tbaa !54
  %458 = sext i32 %457 to i64
  %459 = icmp slt i64 %indvars.iv.next453, %458
  br i1 %459, label %401, label %._crit_edge415.loopexit, !llvm.loop !103

460:                                              ; preds = %97, %._crit_edge423, %.thread480
  %.4 = phi i1 [ false, %.thread480 ], [ false, %97 ], [ true, %._crit_edge423 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %4) #9
  ret i1 %.4
}

; 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 @_Z42ImFontAtlasBuildRegisterDefaultCustomRectsP11ImFontAtlas(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 nounwind uwtable
declare hidden void @_ZL25stbtt_PackSetOversamplingP18stbtt_pack_contextjj(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6ImFont8IsLoadedEv(ptr noundef nonnull align 8 dereferenceable(112)) 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: mustprogress uwtable
declare hidden noundef i32 @_ZL31stbtt_PackFontRangesGatherRectsP18stbtt_pack_contextPK14stbtt_fontinfoP16stbtt_pack_rangeiP10stbrp_rect(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

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

; 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 @_ZL5ImMaxIiET_S0_S0_(i32 noundef, i32 noundef) local_unnamed_addr #6

; 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: mustprogress uwtable
declare dso_local void @_ZN6ImFont16BuildLookupTableEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #7 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 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 uwtable
declare dso_local noundef ptr @_ZNK6ImFont19FindGlyphNoFallbackEt(ptr noundef nonnull align 8 dereferenceable(112), i16 noundef zeroext) local_unnamed_addr #7 align 2

; 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 @_ZN6ImFont8AddGlyphEtfffffffff(ptr noundef nonnull align 8 dereferenceable(112), 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: mustprogress uwtable
declare dso_local void @_Z22ImFontAtlasBuildFinishP11ImFontAtlas(ptr noundef) local_unnamed_addr #7

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 = { noreturn nounwind }
attributes #9 = { 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, !7, i64 96}
!6 = !{!"_ZTS11ImFontAtlas", !7, i64 0, !10, i64 8, !7, i64 16, !7, i64 20, !10, i64 24, !10, i64 32, !7, i64 40, !7, i64 44, !11, i64 48, !11, i64 56, !13, i64 64, !14, i64 80, !15, i64 96, !8, i64 112}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_ZTS6ImVec2", !12, i64 0, !12, i64 4}
!12 = !{!"float", !8, i64 0}
!13 = !{!"_ZTS8ImVectorIP6ImFontE", !7, i64 0, !7, i64 4, !10, i64 8}
!14 = !{!"_ZTS8ImVectorIN11ImFontAtlas10CustomRectEE", !7, i64 0, !7, i64 4, !10, i64 8}
!15 = !{!"_ZTS8ImVectorI12ImFontConfigE", !7, i64 0, !7, i64 4, !10, i64 8}
!16 = !{!6, !10, i64 8}
!17 = !{!6, !7, i64 44}
!18 = !{!6, !7, i64 40}
!19 = !{!6, !7, i64 16}
!20 = !{!21, !10, i64 56}
!21 = !{!"_ZTS12ImFontConfig", !10, i64 0, !7, i64 8, !22, i64 12, !7, i64 16, !12, i64 20, !7, i64 24, !7, i64 28, !22, i64 32, !11, i64 36, !11, i64 44, !10, i64 56, !12, i64 64, !12, i64 68, !22, i64 72, !7, i64 76, !12, i64 80, !8, i64 84, !10, i64 128}
!22 = !{!"bool", !8, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"short", !8, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!6, !7, i64 20}
!29 = !{!30, !10, i64 8}
!30 = !{!"_ZTS18stbtt_pack_context", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !10, i64 40, !10, i64 48}
!31 = distinct !{!31, !26}
!32 = !{!21, !10, i64 128}
!33 = !{!34, !10, i64 88}
!34 = !{!"_ZTS6ImFont", !12, i64 0, !12, i64 4, !11, i64 8, !35, i64 16, !36, i64 32, !37, i64 48, !10, i64 64, !12, i64 72, !24, i64 76, !24, i64 78, !10, i64 80, !10, i64 88, !12, i64 96, !12, i64 100, !22, i64 104, !7, i64 108}
!35 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !7, i64 0, !7, i64 4, !10, i64 8}
!36 = !{!"_ZTS8ImVectorIfE", !7, i64 0, !7, i64 4, !10, i64 8}
!37 = !{!"_ZTS8ImVectorItE", !7, i64 0, !7, i64 4, !10, i64 8}
!38 = !{!21, !10, i64 0}
!39 = !{!21, !7, i64 16}
!40 = !{!41, !10, i64 176}
!41 = !{!"_ZTSZ31ImFontAtlasBuildWithStbTruetypeP11ImFontAtlasE19ImFontTempBuildData", !42, i64 0, !10, i64 160, !7, i64 168, !10, i64 176, !7, i64 184}
!42 = !{!"_ZTS14stbtt_fontinfo", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !43, i64 64, !43, i64 80, !43, i64 96, !43, i64 112, !43, i64 128, !43, i64 144}
!43 = !{!"_ZTS10stbtt__buf", !10, i64 0, !7, i64 8, !7, i64 12}
!44 = !{!41, !7, i64 184}
!45 = !{!21, !12, i64 20}
!46 = distinct !{!46, !26}
!47 = !{!41, !10, i64 160}
!48 = !{!41, !7, i64 168}
!49 = !{!21, !7, i64 24}
!50 = !{!21, !7, i64 28}
!51 = !{!52, !12, i64 0}
!52 = !{!"_ZTS16stbtt_pack_range", !12, i64 0, !7, i64 4, !10, i64 8, !7, i64 16, !10, i64 24, !8, i64 32, !8, i64 33}
!53 = !{!52, !7, i64 4}
!54 = !{!52, !7, i64 16}
!55 = !{!52, !10, i64 24}
!56 = distinct !{!56, !26}
!57 = distinct !{!57, !26}
!58 = !{!59, !24, i64 6}
!59 = !{!"_ZTS10stbrp_rect", !7, i64 0, !24, i64 4, !24, i64 6, !24, i64 8, !24, i64 10, !7, i64 12}
!60 = !{!59, !24, i64 4}
!61 = distinct !{!61, !26}
!62 = distinct !{!62, !26}
!63 = !{!59, !7, i64 12}
!64 = !{!59, !24, i64 10}
!65 = distinct !{!65, !26}
!66 = !{!6, !7, i64 0}
!67 = !{!6, !10, i64 24}
!68 = !{!30, !10, i64 40}
!69 = !{!30, !7, i64 20}
!70 = !{!21, !12, i64 80}
!71 = !{!59, !24, i64 8}
!72 = !{!30, !7, i64 24}
!73 = distinct !{!73, !26}
!74 = distinct !{!74, !26}
!75 = !{!21, !22, i64 72}
!76 = !{i8 0, i8 2}
!77 = !{}
!78 = !{!7, !7, i64 0}
!79 = !{!21, !12, i64 44}
!80 = !{!21, !12, i64 48}
!81 = !{!34, !12, i64 96}
!82 = distinct !{!82, !26}
!83 = distinct !{!83, !26}
!84 = !{!85, !24, i64 0}
!85 = !{!"_ZTS16stbtt_packedchar", !24, i64 0, !24, i64 2, !24, i64 4, !24, i64 6, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24}
!86 = !{!85, !24, i64 4}
!87 = !{!85, !24, i64 2}
!88 = !{!85, !24, i64 6}
!89 = !{!85, !12, i64 16}
!90 = !{!21, !12, i64 64}
!91 = !{!21, !12, i64 68}
!92 = !{!21, !22, i64 32}
!93 = !{!12, !12, i64 0}
!94 = !{!95, !12, i64 0}
!95 = !{!"_ZTS18stbtt_aligned_quad", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!96 = !{!95, !12, i64 4}
!97 = !{!95, !12, i64 16}
!98 = !{!95, !12, i64 20}
!99 = !{!95, !12, i64 8}
!100 = !{!95, !12, i64 12}
!101 = !{!95, !12, i64 24}
!102 = !{!95, !12, i64 28}
!103 = distinct !{!103, !26}


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