; LLVM IR from Angelo1211/HybridRenderingEngine :: libs/imgui/imgui_draw.ll (ZNK6ImFont10RenderTextEP10ImDrawListf6ImVec2jRK6ImVec4PKcS7_fb)

; 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.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.ImVec4 = type { float, float, float, float }
%struct.ImDrawList = type { %class.ImVector, %class.ImVector.0, %class.ImVector.1, i32, ptr, ptr, i32, ptr, ptr, %class.ImVector.2, %class.ImVector.3, %class.ImVector.4, i32, i32, %class.ImVector.5 }
%class.ImVector = type { i32, i32, ptr }
%class.ImVector.1 = type { i32, i32, ptr }
%class.ImVector.2 = type { i32, i32, ptr }
%class.ImVector.3 = type { i32, i32, ptr }
%class.ImVector.4 = type { i32, i32, ptr }
%class.ImVector.5 = type { i32, i32, ptr }
%struct.ImFontGlyph = type { i16, float, float, float, float, float, float, float, float, float }
%struct.ImDrawVert = type { %struct.ImVec2, %struct.ImVec2, i32 }
%struct.ImDrawCmd = type { i32, %struct.ImVec4, ptr, ptr, ptr }

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6ImFont10RenderTextEP10ImDrawListf6ImVec2jRK6ImVec4PKcS7_fb(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef %1, float noundef %2, <2 x float> %3, i32 noundef %4, ptr noundef nonnull align 4 dereferenceable(16) %5, ptr noundef %6, ptr noundef %7, float noundef %8, i1 noundef zeroext %9) #5 align 2 {
  %11 = alloca %struct.ImVec2, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca float, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca float, align 4
  %20 = alloca i8, align 1
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca i32, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca float, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i8, align 1
  %38 = alloca i32, align 4
  %39 = alloca float, align 4
  %40 = alloca ptr, align 8
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  store <2 x float> %3, ptr %11, align 4
  store ptr %0, ptr %12, align 8, !tbaa !5
  store ptr %1, ptr %13, align 8, !tbaa !5
  store float %2, ptr %14, align 4, !tbaa !9
  store i32 %4, ptr %15, align 4, !tbaa !11
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store float %8, ptr %19, align 4, !tbaa !9
  %49 = zext i1 %9 to i8
  store i8 %49, ptr %20, align 1, !tbaa !13
  %50 = load ptr, ptr %12, align 8
  %51 = load ptr, ptr %18, align 8, !tbaa !5
  %52 = icmp ne ptr %51, null
  br i1 %52, label %58, label %53

53:                                               ; preds = %10
  %54 = load ptr, ptr %17, align 8, !tbaa !5
  %55 = load ptr, ptr %17, align 8, !tbaa !5
  %56 = call i64 @strlen(ptr noundef %55) #8
  %57 = getelementptr inbounds i8, ptr %54, i64 %56
  store ptr %57, ptr %18, align 8, !tbaa !5
  br label %58

58:                                               ; preds = %53, %10
  %59 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %60 = load float, ptr %59, align 4, !tbaa !15
  %61 = fptosi float %60 to i32
  %62 = sitofp i32 %61 to float
  %63 = getelementptr inbounds %struct.ImFont, ptr %50, i32 0, i32 2
  %64 = getelementptr inbounds %struct.ImVec2, ptr %63, i32 0, i32 0
  %65 = load float, ptr %64, align 8, !tbaa !17
  %66 = fadd float %62, %65
  %67 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  store float %66, ptr %67, align 4, !tbaa !15
  %68 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 1
  %69 = load float, ptr %68, align 4, !tbaa !23
  %70 = fptosi float %69 to i32
  %71 = sitofp i32 %70 to float
  %72 = getelementptr inbounds %struct.ImFont, ptr %50, i32 0, i32 2
  %73 = getelementptr inbounds %struct.ImVec2, ptr %72, i32 0, i32 1
  %74 = load float, ptr %73, align 4, !tbaa !24
  %75 = fadd float %71, %74
  %76 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 1
  store float %75, ptr %76, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %77 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %78 = load float, ptr %77, align 4, !tbaa !15
  store float %78, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %79 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 1
  %80 = load float, ptr %79, align 4, !tbaa !23
  store float %80, ptr %22, align 4, !tbaa !9
  %81 = load float, ptr %22, align 4, !tbaa !9
  %82 = load ptr, ptr %16, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.ImVec4, ptr %82, i32 0, i32 3
  %84 = load float, ptr %83, align 4, !tbaa !25
  %85 = fcmp ogt float %81, %84
  br i1 %85, label %86, label %87

86:                                               ; preds = %58
  store i32 1, ptr %23, align 4
  br label %695

87:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %88 = load float, ptr %14, align 4, !tbaa !9
  %89 = getelementptr inbounds %struct.ImFont, ptr %50, i32 0, i32 0
  %90 = load float, ptr %89, align 8, !tbaa !27
  %91 = fdiv float %88, %90
  store float %91, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %92 = getelementptr inbounds %struct.ImFont, ptr %50, i32 0, i32 0
  %93 = load float, ptr %92, align 8, !tbaa !27
  %94 = load float, ptr %24, align 4, !tbaa !9
  %95 = fmul float %93, %94
  store float %95, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #9
  %96 = load float, ptr %19, align 4, !tbaa !9
  %97 = fcmp ogt float %96, 0.000000e+00
  %98 = zext i1 %97 to i8
  store i8 %98, ptr %26, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  store ptr null, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %99 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %99, ptr %28, align 8, !tbaa !5
  %100 = load float, ptr %22, align 4, !tbaa !9
  %101 = load float, ptr %25, align 4, !tbaa !9
  %102 = fadd float %100, %101
  %103 = load ptr, ptr %16, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.ImVec4, ptr %103, i32 0, i32 1
  %105 = load float, ptr %104, align 4, !tbaa !28
  %106 = fcmp olt float %102, %105
  br i1 %106, label %107, label %137

107:                                              ; preds = %87
  %108 = load i8, ptr %26, align 1, !tbaa !13, !range !29, !noundef !30
  %109 = trunc i8 %108 to i1
  br i1 %109, label %137, label %110

110:                                              ; preds = %107
  br label %111

111:                                              ; preds = %132, %110
  %112 = load float, ptr %22, align 4, !tbaa !9
  %113 = load float, ptr %25, align 4, !tbaa !9
  %114 = fadd float %112, %113
  %115 = load ptr, ptr %16, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.ImVec4, ptr %115, i32 0, i32 1
  %117 = load float, ptr %116, align 4, !tbaa !28
  %118 = fcmp olt float %114, %117
  br i1 %118, label %119, label %136

119:                                              ; preds = %111
  br label %120

120:                                              ; preds = %131, %119
  %121 = load ptr, ptr %28, align 8, !tbaa !5
  %122 = load ptr, ptr %18, align 8, !tbaa !5
  %123 = icmp ult ptr %121, %122
  br i1 %123, label %124, label %132

124:                                              ; preds = %120
  %125 = load ptr, ptr %28, align 8, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %125, i32 1
  store ptr %126, ptr %28, align 8, !tbaa !5
  %127 = load i8, ptr %125, align 1, !tbaa !31
  %128 = sext i8 %127 to i32
  %129 = icmp eq i32 %128, 10
  br i1 %129, label %130, label %131

130:                                              ; preds = %124
  br label %132

131:                                              ; preds = %124
  br label %120, !llvm.loop !32

132:                                              ; preds = %130, %120
  %133 = load float, ptr %25, align 4, !tbaa !9
  %134 = load float, ptr %22, align 4, !tbaa !9
  %135 = fadd float %134, %133
  store float %135, ptr %22, align 4, !tbaa !9
  br label %111, !llvm.loop !34

136:                                              ; preds = %111
  br label %137

137:                                              ; preds = %136, %107, %87
  %138 = load ptr, ptr %18, align 8, !tbaa !5
  %139 = load ptr, ptr %28, align 8, !tbaa !5
  %140 = ptrtoint ptr %138 to i64
  %141 = ptrtoint ptr %139 to i64
  %142 = sub i64 %140, %141
  %143 = icmp sgt i64 %142, 10000
  br i1 %143, label %144, label %175

144:                                              ; preds = %137
  %145 = load i8, ptr %26, align 1, !tbaa !13, !range !29, !noundef !30
  %146 = trunc i8 %145 to i1
  br i1 %146, label %175, label %147

147:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %148 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %148, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %149 = load float, ptr %22, align 4, !tbaa !9
  store float %149, ptr %30, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %169, %147
  %151 = load float, ptr %30, align 4, !tbaa !9
  %152 = load ptr, ptr %16, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.ImVec4, ptr %152, i32 0, i32 3
  %154 = load float, ptr %153, align 4, !tbaa !25
  %155 = fcmp olt float %151, %154
  br i1 %155, label %156, label %173

156:                                              ; preds = %150
  br label %157

157:                                              ; preds = %168, %156
  %158 = load ptr, ptr %29, align 8, !tbaa !5
  %159 = load ptr, ptr %18, align 8, !tbaa !5
  %160 = icmp ult ptr %158, %159
  br i1 %160, label %161, label %169

161:                                              ; preds = %157
  %162 = load ptr, ptr %29, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i32 1
  store ptr %163, ptr %29, align 8, !tbaa !5
  %164 = load i8, ptr %162, align 1, !tbaa !31
  %165 = sext i8 %164 to i32
  %166 = icmp eq i32 %165, 10
  br i1 %166, label %167, label %168

167:                                              ; preds = %161
  br label %169

168:                                              ; preds = %161
  br label %157, !llvm.loop !35

169:                                              ; preds = %167, %157
  %170 = load float, ptr %25, align 4, !tbaa !9
  %171 = load float, ptr %30, align 4, !tbaa !9
  %172 = fadd float %171, %170
  store float %172, ptr %30, align 4, !tbaa !9
  br label %150, !llvm.loop !36

173:                                              ; preds = %150
  %174 = load ptr, ptr %29, align 8, !tbaa !5
  store ptr %174, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %175

175:                                              ; preds = %173, %144, %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %176 = load ptr, ptr %18, align 8, !tbaa !5
  %177 = load ptr, ptr %28, align 8, !tbaa !5
  %178 = ptrtoint ptr %176 to i64
  %179 = ptrtoint ptr %177 to i64
  %180 = sub i64 %178, %179
  %181 = trunc i64 %180 to i32
  %182 = mul nsw i32 %181, 4
  store i32 %182, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %183 = load ptr, ptr %18, align 8, !tbaa !5
  %184 = load ptr, ptr %28, align 8, !tbaa !5
  %185 = ptrtoint ptr %183 to i64
  %186 = ptrtoint ptr %184 to i64
  %187 = sub i64 %185, %186
  %188 = trunc i64 %187 to i32
  %189 = mul nsw i32 %188, 6
  store i32 %189, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %190 = load ptr, ptr %13, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.ImDrawList, ptr %190, i32 0, i32 1
  %192 = getelementptr inbounds %class.ImVector.0, ptr %191, i32 0, i32 0
  %193 = load i32, ptr %192, align 8, !tbaa !37
  %194 = load i32, ptr %32, align 4, !tbaa !11
  %195 = add nsw i32 %193, %194
  store i32 %195, ptr %33, align 4, !tbaa !11
  %196 = load ptr, ptr %13, align 8, !tbaa !5
  %197 = load i32, ptr %32, align 4, !tbaa !11
  %198 = load i32, ptr %31, align 4, !tbaa !11
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %196, i32 noundef %197, i32 noundef %198)
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %199 = load ptr, ptr %13, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.ImDrawList, ptr %199, i32 0, i32 7
  %201 = load ptr, ptr %200, align 8, !tbaa !45
  store ptr %201, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %202 = load ptr, ptr %13, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.ImDrawList, ptr %202, i32 0, i32 8
  %204 = load ptr, ptr %203, align 8, !tbaa !46
  store ptr %204, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.ImDrawList, ptr %205, i32 0, i32 6
  %207 = load i32, ptr %206, align 8, !tbaa !47
  store i32 %207, ptr %36, align 4, !tbaa !11
  br label %208

208:                                              ; preds = %640, %638, %270, %175
  %209 = load ptr, ptr %28, align 8, !tbaa !5
  %210 = load ptr, ptr %18, align 8, !tbaa !5
  %211 = icmp ult ptr %209, %210
  br i1 %211, label %212, label %641

212:                                              ; preds = %208
  %213 = load i8, ptr %26, align 1, !tbaa !13, !range !29, !noundef !30
  %214 = trunc i8 %213 to i1
  br i1 %214, label %215, label %272

215:                                              ; preds = %212
  %216 = load ptr, ptr %27, align 8, !tbaa !5
  %217 = icmp ne ptr %216, null
  br i1 %217, label %236, label %218

218:                                              ; preds = %215
  %219 = load float, ptr %24, align 4, !tbaa !9
  %220 = load ptr, ptr %28, align 8, !tbaa !5
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = load float, ptr %19, align 4, !tbaa !9
  %223 = load float, ptr %21, align 4, !tbaa !9
  %224 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %225 = load float, ptr %224, align 4, !tbaa !15
  %226 = fsub float %223, %225
  %227 = fsub float %222, %226
  %228 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(112) %50, float noundef %219, ptr noundef %220, ptr noundef %221, float noundef %227)
  store ptr %228, ptr %27, align 8, !tbaa !5
  %229 = load ptr, ptr %27, align 8, !tbaa !5
  %230 = load ptr, ptr %28, align 8, !tbaa !5
  %231 = icmp eq ptr %229, %230
  br i1 %231, label %232, label %235

232:                                              ; preds = %218
  %233 = load ptr, ptr %27, align 8, !tbaa !5
  %234 = getelementptr inbounds i8, ptr %233, i32 1
  store ptr %234, ptr %27, align 8, !tbaa !5
  br label %235

235:                                              ; preds = %232, %218
  br label %236

236:                                              ; preds = %235, %215
  %237 = load ptr, ptr %28, align 8, !tbaa !5
  %238 = load ptr, ptr %27, align 8, !tbaa !5
  %239 = icmp uge ptr %237, %238
  br i1 %239, label %240, label %271

240:                                              ; preds = %236
  %241 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %242 = load float, ptr %241, align 4, !tbaa !15
  store float %242, ptr %21, align 4, !tbaa !9
  %243 = load float, ptr %25, align 4, !tbaa !9
  %244 = load float, ptr %22, align 4, !tbaa !9
  %245 = fadd float %244, %243
  store float %245, ptr %22, align 4, !tbaa !9
  store ptr null, ptr %27, align 8, !tbaa !5
  br label %246

246:                                              ; preds = %269, %240
  %247 = load ptr, ptr %28, align 8, !tbaa !5
  %248 = load ptr, ptr %18, align 8, !tbaa !5
  %249 = icmp ult ptr %247, %248
  br i1 %249, label %250, label %270

250:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #9
  %251 = load ptr, ptr %28, align 8, !tbaa !5
  %252 = load i8, ptr %251, align 1, !tbaa !31
  store i8 %252, ptr %37, align 1, !tbaa !31
  %253 = load i8, ptr %37, align 1, !tbaa !31
  %254 = call noundef zeroext i1 @_ZL14ImCharIsBlankAc(i8 noundef signext %253)
  br i1 %254, label %255, label %258

255:                                              ; preds = %250
  %256 = load ptr, ptr %28, align 8, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %256, i32 1
  store ptr %257, ptr %28, align 8, !tbaa !5
  br label %266

258:                                              ; preds = %250
  %259 = load i8, ptr %37, align 1, !tbaa !31
  %260 = sext i8 %259 to i32
  %261 = icmp eq i32 %260, 10
  br i1 %261, label %262, label %265

262:                                              ; preds = %258
  %263 = load ptr, ptr %28, align 8, !tbaa !5
  %264 = getelementptr inbounds i8, ptr %263, i32 1
  store ptr %264, ptr %28, align 8, !tbaa !5
  store i32 13, ptr %23, align 4
  br label %267

265:                                              ; preds = %258
  store i32 13, ptr %23, align 4
  br label %267

266:                                              ; preds = %255
  store i32 0, ptr %23, align 4
  br label %267

267:                                              ; preds = %266, %265, %262
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  %268 = load i32, ptr %23, align 4
  switch i32 %268, label %698 [
    i32 0, label %269
    i32 13, label %270
  ]

269:                                              ; preds = %267
  br label %246, !llvm.loop !48

270:                                              ; preds = %267, %246
  br label %208, !llvm.loop !49

271:                                              ; preds = %236
  br label %272

272:                                              ; preds = %271, %212
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %273 = load ptr, ptr %28, align 8, !tbaa !5
  %274 = load i8, ptr %273, align 1, !tbaa !31
  %275 = sext i8 %274 to i32
  store i32 %275, ptr %38, align 4, !tbaa !11
  %276 = load i32, ptr %38, align 4, !tbaa !11
  %277 = icmp ult i32 %276, 128
  br i1 %277, label %278, label %281

278:                                              ; preds = %272
  %279 = load ptr, ptr %28, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 1
  store ptr %280, ptr %28, align 8, !tbaa !5
  br label %292

281:                                              ; preds = %272
  %282 = load ptr, ptr %28, align 8, !tbaa !5
  %283 = load ptr, ptr %18, align 8, !tbaa !5
  %284 = call noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef %38, ptr noundef %282, ptr noundef %283)
  %285 = load ptr, ptr %28, align 8, !tbaa !5
  %286 = sext i32 %284 to i64
  %287 = getelementptr inbounds i8, ptr %285, i64 %286
  store ptr %287, ptr %28, align 8, !tbaa !5
  %288 = load i32, ptr %38, align 4, !tbaa !11
  %289 = icmp eq i32 %288, 0
  br i1 %289, label %290, label %291

290:                                              ; preds = %281
  store i32 11, ptr %23, align 4
  br label %638

291:                                              ; preds = %281
  br label %292

292:                                              ; preds = %291, %278
  %293 = load i32, ptr %38, align 4, !tbaa !11
  %294 = icmp ult i32 %293, 32
  br i1 %294, label %295, label %316

295:                                              ; preds = %292
  %296 = load i32, ptr %38, align 4, !tbaa !11
  %297 = icmp eq i32 %296, 10
  br i1 %297, label %298, label %311

298:                                              ; preds = %295
  %299 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %300 = load float, ptr %299, align 4, !tbaa !15
  store float %300, ptr %21, align 4, !tbaa !9
  %301 = load float, ptr %25, align 4, !tbaa !9
  %302 = load float, ptr %22, align 4, !tbaa !9
  %303 = fadd float %302, %301
  store float %303, ptr %22, align 4, !tbaa !9
  %304 = load float, ptr %22, align 4, !tbaa !9
  %305 = load ptr, ptr %16, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.ImVec4, ptr %305, i32 0, i32 3
  %307 = load float, ptr %306, align 4, !tbaa !25
  %308 = fcmp ogt float %304, %307
  br i1 %308, label %309, label %310

309:                                              ; preds = %298
  store i32 11, ptr %23, align 4
  br label %638

310:                                              ; preds = %298
  store i32 10, ptr %23, align 4
  br label %638, !llvm.loop !49

311:                                              ; preds = %295
  %312 = load i32, ptr %38, align 4, !tbaa !11
  %313 = icmp eq i32 %312, 13
  br i1 %313, label %314, label %315

314:                                              ; preds = %311
  store i32 10, ptr %23, align 4
  br label %638, !llvm.loop !49

315:                                              ; preds = %311
  br label %316

316:                                              ; preds = %315, %292
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  store float 0.000000e+00, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %317 = load i32, ptr %38, align 4, !tbaa !11
  %318 = trunc i32 %317 to i16
  %319 = call noundef ptr @_ZNK6ImFont9FindGlyphEt(ptr noundef nonnull align 8 dereferenceable(112) %50, i16 noundef zeroext %318)
  store ptr %319, ptr %40, align 8, !tbaa !5
  %320 = load ptr, ptr %40, align 8, !tbaa !5
  %321 = icmp ne ptr %320, null
  br i1 %321, label %322, label %630

322:                                              ; preds = %316
  %323 = load ptr, ptr %40, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.ImFontGlyph, ptr %323, i32 0, i32 1
  %325 = load float, ptr %324, align 4, !tbaa !50
  %326 = load float, ptr %24, align 4, !tbaa !9
  %327 = fmul float %325, %326
  store float %327, ptr %39, align 4, !tbaa !9
  %328 = load i32, ptr %38, align 4, !tbaa !11
  %329 = icmp ne i32 %328, 32
  br i1 %329, label %330, label %629

330:                                              ; preds = %322
  %331 = load i32, ptr %38, align 4, !tbaa !11
  %332 = icmp ne i32 %331, 9
  br i1 %332, label %333, label %629

333:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %334 = load float, ptr %21, align 4, !tbaa !9
  %335 = load ptr, ptr %40, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ImFontGlyph, ptr %335, i32 0, i32 2
  %337 = load float, ptr %336, align 4, !tbaa !52
  %338 = load float, ptr %24, align 4, !tbaa !9
  %339 = call float @llvm.fmuladd.f32(float %337, float %338, float %334)
  store float %339, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %340 = load float, ptr %21, align 4, !tbaa !9
  %341 = load ptr, ptr %40, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.ImFontGlyph, ptr %341, i32 0, i32 4
  %343 = load float, ptr %342, align 4, !tbaa !53
  %344 = load float, ptr %24, align 4, !tbaa !9
  %345 = call float @llvm.fmuladd.f32(float %343, float %344, float %340)
  store float %345, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %346 = load float, ptr %22, align 4, !tbaa !9
  %347 = load ptr, ptr %40, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.ImFontGlyph, ptr %347, i32 0, i32 3
  %349 = load float, ptr %348, align 4, !tbaa !54
  %350 = load float, ptr %24, align 4, !tbaa !9
  %351 = call float @llvm.fmuladd.f32(float %349, float %350, float %346)
  store float %351, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %352 = load float, ptr %22, align 4, !tbaa !9
  %353 = load ptr, ptr %40, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.ImFontGlyph, ptr %353, i32 0, i32 5
  %355 = load float, ptr %354, align 4, !tbaa !55
  %356 = load float, ptr %24, align 4, !tbaa !9
  %357 = call float @llvm.fmuladd.f32(float %355, float %356, float %352)
  store float %357, ptr %44, align 4, !tbaa !9
  %358 = load float, ptr %41, align 4, !tbaa !9
  %359 = load ptr, ptr %16, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.ImVec4, ptr %359, i32 0, i32 2
  %361 = load float, ptr %360, align 4, !tbaa !56
  %362 = fcmp ole float %358, %361
  br i1 %362, label %363, label %625

363:                                              ; preds = %333
  %364 = load float, ptr %42, align 4, !tbaa !9
  %365 = load ptr, ptr %16, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.ImVec4, ptr %365, i32 0, i32 0
  %367 = load float, ptr %366, align 4, !tbaa !57
  %368 = fcmp oge float %364, %367
  br i1 %368, label %369, label %625

369:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %370 = load ptr, ptr %40, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.ImFontGlyph, ptr %370, i32 0, i32 6
  %372 = load float, ptr %371, align 4, !tbaa !58
  store float %372, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %373 = load ptr, ptr %40, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.ImFontGlyph, ptr %373, i32 0, i32 7
  %375 = load float, ptr %374, align 4, !tbaa !59
  store float %375, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %376 = load ptr, ptr %40, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.ImFontGlyph, ptr %376, i32 0, i32 8
  %378 = load float, ptr %377, align 4, !tbaa !60
  store float %378, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %379 = load ptr, ptr %40, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.ImFontGlyph, ptr %379, i32 0, i32 9
  %381 = load float, ptr %380, align 4, !tbaa !61
  store float %381, ptr %48, align 4, !tbaa !9
  %382 = load i8, ptr %20, align 1, !tbaa !13, !range !29, !noundef !30
  %383 = trunc i8 %382 to i1
  br i1 %383, label %384, label %491

384:                                              ; preds = %369
  %385 = load float, ptr %41, align 4, !tbaa !9
  %386 = load ptr, ptr %16, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.ImVec4, ptr %386, i32 0, i32 0
  %388 = load float, ptr %387, align 4, !tbaa !57
  %389 = fcmp olt float %385, %388
  br i1 %389, label %390, label %409

390:                                              ; preds = %384
  %391 = load float, ptr %45, align 4, !tbaa !9
  %392 = load float, ptr %42, align 4, !tbaa !9
  %393 = load ptr, ptr %16, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.ImVec4, ptr %393, i32 0, i32 0
  %395 = load float, ptr %394, align 4, !tbaa !57
  %396 = fsub float %392, %395
  %397 = load float, ptr %42, align 4, !tbaa !9
  %398 = load float, ptr %41, align 4, !tbaa !9
  %399 = fsub float %397, %398
  %400 = fdiv float %396, %399
  %401 = fsub float 1.000000e+00, %400
  %402 = load float, ptr %47, align 4, !tbaa !9
  %403 = load float, ptr %45, align 4, !tbaa !9
  %404 = fsub float %402, %403
  %405 = call float @llvm.fmuladd.f32(float %401, float %404, float %391)
  store float %405, ptr %45, align 4, !tbaa !9
  %406 = load ptr, ptr %16, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.ImVec4, ptr %406, i32 0, i32 0
  %408 = load float, ptr %407, align 4, !tbaa !57
  store float %408, ptr %41, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %390, %384
  %410 = load float, ptr %43, align 4, !tbaa !9
  %411 = load ptr, ptr %16, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.ImVec4, ptr %411, i32 0, i32 1
  %413 = load float, ptr %412, align 4, !tbaa !28
  %414 = fcmp olt float %410, %413
  br i1 %414, label %415, label %434

415:                                              ; preds = %409
  %416 = load float, ptr %46, align 4, !tbaa !9
  %417 = load float, ptr %44, align 4, !tbaa !9
  %418 = load ptr, ptr %16, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.ImVec4, ptr %418, i32 0, i32 1
  %420 = load float, ptr %419, align 4, !tbaa !28
  %421 = fsub float %417, %420
  %422 = load float, ptr %44, align 4, !tbaa !9
  %423 = load float, ptr %43, align 4, !tbaa !9
  %424 = fsub float %422, %423
  %425 = fdiv float %421, %424
  %426 = fsub float 1.000000e+00, %425
  %427 = load float, ptr %48, align 4, !tbaa !9
  %428 = load float, ptr %46, align 4, !tbaa !9
  %429 = fsub float %427, %428
  %430 = call float @llvm.fmuladd.f32(float %426, float %429, float %416)
  store float %430, ptr %46, align 4, !tbaa !9
  %431 = load ptr, ptr %16, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.ImVec4, ptr %431, i32 0, i32 1
  %433 = load float, ptr %432, align 4, !tbaa !28
  store float %433, ptr %43, align 4, !tbaa !9
  br label %434

434:                                              ; preds = %415, %409
  %435 = load float, ptr %42, align 4, !tbaa !9
  %436 = load ptr, ptr %16, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.ImVec4, ptr %436, i32 0, i32 2
  %438 = load float, ptr %437, align 4, !tbaa !56
  %439 = fcmp ogt float %435, %438
  br i1 %439, label %440, label %458

440:                                              ; preds = %434
  %441 = load float, ptr %45, align 4, !tbaa !9
  %442 = load ptr, ptr %16, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.ImVec4, ptr %442, i32 0, i32 2
  %444 = load float, ptr %443, align 4, !tbaa !56
  %445 = load float, ptr %41, align 4, !tbaa !9
  %446 = fsub float %444, %445
  %447 = load float, ptr %42, align 4, !tbaa !9
  %448 = load float, ptr %41, align 4, !tbaa !9
  %449 = fsub float %447, %448
  %450 = fdiv float %446, %449
  %451 = load float, ptr %47, align 4, !tbaa !9
  %452 = load float, ptr %45, align 4, !tbaa !9
  %453 = fsub float %451, %452
  %454 = call float @llvm.fmuladd.f32(float %450, float %453, float %441)
  store float %454, ptr %47, align 4, !tbaa !9
  %455 = load ptr, ptr %16, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.ImVec4, ptr %455, i32 0, i32 2
  %457 = load float, ptr %456, align 4, !tbaa !56
  store float %457, ptr %42, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %440, %434
  %459 = load float, ptr %44, align 4, !tbaa !9
  %460 = load ptr, ptr %16, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.ImVec4, ptr %460, i32 0, i32 3
  %462 = load float, ptr %461, align 4, !tbaa !25
  %463 = fcmp ogt float %459, %462
  br i1 %463, label %464, label %482

464:                                              ; preds = %458
  %465 = load float, ptr %46, align 4, !tbaa !9
  %466 = load ptr, ptr %16, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.ImVec4, ptr %466, i32 0, i32 3
  %468 = load float, ptr %467, align 4, !tbaa !25
  %469 = load float, ptr %43, align 4, !tbaa !9
  %470 = fsub float %468, %469
  %471 = load float, ptr %44, align 4, !tbaa !9
  %472 = load float, ptr %43, align 4, !tbaa !9
  %473 = fsub float %471, %472
  %474 = fdiv float %470, %473
  %475 = load float, ptr %48, align 4, !tbaa !9
  %476 = load float, ptr %46, align 4, !tbaa !9
  %477 = fsub float %475, %476
  %478 = call float @llvm.fmuladd.f32(float %474, float %477, float %465)
  store float %478, ptr %48, align 4, !tbaa !9
  %479 = load ptr, ptr %16, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.ImVec4, ptr %479, i32 0, i32 3
  %481 = load float, ptr %480, align 4, !tbaa !25
  store float %481, ptr %44, align 4, !tbaa !9
  br label %482

482:                                              ; preds = %464, %458
  %483 = load float, ptr %43, align 4, !tbaa !9
  %484 = load float, ptr %44, align 4, !tbaa !9
  %485 = fcmp oge float %483, %484
  br i1 %485, label %486, label %490

486:                                              ; preds = %482
  %487 = load float, ptr %39, align 4, !tbaa !9
  %488 = load float, ptr %21, align 4, !tbaa !9
  %489 = fadd float %488, %487
  store float %489, ptr %21, align 4, !tbaa !9
  store i32 10, ptr %23, align 4
  br label %622, !llvm.loop !49

490:                                              ; preds = %482
  br label %491

491:                                              ; preds = %490, %369
  %492 = load i32, ptr %36, align 4, !tbaa !11
  %493 = trunc i32 %492 to i16
  %494 = load ptr, ptr %35, align 8, !tbaa !5
  %495 = getelementptr inbounds i16, ptr %494, i64 0
  store i16 %493, ptr %495, align 2, !tbaa !62
  %496 = load i32, ptr %36, align 4, !tbaa !11
  %497 = add i32 %496, 1
  %498 = trunc i32 %497 to i16
  %499 = load ptr, ptr %35, align 8, !tbaa !5
  %500 = getelementptr inbounds i16, ptr %499, i64 1
  store i16 %498, ptr %500, align 2, !tbaa !62
  %501 = load i32, ptr %36, align 4, !tbaa !11
  %502 = add i32 %501, 2
  %503 = trunc i32 %502 to i16
  %504 = load ptr, ptr %35, align 8, !tbaa !5
  %505 = getelementptr inbounds i16, ptr %504, i64 2
  store i16 %503, ptr %505, align 2, !tbaa !62
  %506 = load i32, ptr %36, align 4, !tbaa !11
  %507 = trunc i32 %506 to i16
  %508 = load ptr, ptr %35, align 8, !tbaa !5
  %509 = getelementptr inbounds i16, ptr %508, i64 3
  store i16 %507, ptr %509, align 2, !tbaa !62
  %510 = load i32, ptr %36, align 4, !tbaa !11
  %511 = add i32 %510, 2
  %512 = trunc i32 %511 to i16
  %513 = load ptr, ptr %35, align 8, !tbaa !5
  %514 = getelementptr inbounds i16, ptr %513, i64 4
  store i16 %512, ptr %514, align 2, !tbaa !62
  %515 = load i32, ptr %36, align 4, !tbaa !11
  %516 = add i32 %515, 3
  %517 = trunc i32 %516 to i16
  %518 = load ptr, ptr %35, align 8, !tbaa !5
  %519 = getelementptr inbounds i16, ptr %518, i64 5
  store i16 %517, ptr %519, align 2, !tbaa !62
  %520 = load float, ptr %41, align 4, !tbaa !9
  %521 = load ptr, ptr %34, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.ImDrawVert, ptr %521, i64 0
  %523 = getelementptr inbounds %struct.ImDrawVert, ptr %522, i32 0, i32 0
  %524 = getelementptr inbounds %struct.ImVec2, ptr %523, i32 0, i32 0
  store float %520, ptr %524, align 4, !tbaa !63
  %525 = load float, ptr %43, align 4, !tbaa !9
  %526 = load ptr, ptr %34, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.ImDrawVert, ptr %526, i64 0
  %528 = getelementptr inbounds %struct.ImDrawVert, ptr %527, i32 0, i32 0
  %529 = getelementptr inbounds %struct.ImVec2, ptr %528, i32 0, i32 1
  store float %525, ptr %529, align 4, !tbaa !65
  %530 = load i32, ptr %15, align 4, !tbaa !11
  %531 = load ptr, ptr %34, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.ImDrawVert, ptr %531, i64 0
  %533 = getelementptr inbounds %struct.ImDrawVert, ptr %532, i32 0, i32 2
  store i32 %530, ptr %533, align 4, !tbaa !66
  %534 = load float, ptr %45, align 4, !tbaa !9
  %535 = load ptr, ptr %34, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.ImDrawVert, ptr %535, i64 0
  %537 = getelementptr inbounds %struct.ImDrawVert, ptr %536, i32 0, i32 1
  %538 = getelementptr inbounds %struct.ImVec2, ptr %537, i32 0, i32 0
  store float %534, ptr %538, align 4, !tbaa !67
  %539 = load float, ptr %46, align 4, !tbaa !9
  %540 = load ptr, ptr %34, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.ImDrawVert, ptr %540, i64 0
  %542 = getelementptr inbounds %struct.ImDrawVert, ptr %541, i32 0, i32 1
  %543 = getelementptr inbounds %struct.ImVec2, ptr %542, i32 0, i32 1
  store float %539, ptr %543, align 4, !tbaa !68
  %544 = load float, ptr %42, align 4, !tbaa !9
  %545 = load ptr, ptr %34, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.ImDrawVert, ptr %545, i64 1
  %547 = getelementptr inbounds %struct.ImDrawVert, ptr %546, i32 0, i32 0
  %548 = getelementptr inbounds %struct.ImVec2, ptr %547, i32 0, i32 0
  store float %544, ptr %548, align 4, !tbaa !63
  %549 = load float, ptr %43, align 4, !tbaa !9
  %550 = load ptr, ptr %34, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.ImDrawVert, ptr %550, i64 1
  %552 = getelementptr inbounds %struct.ImDrawVert, ptr %551, i32 0, i32 0
  %553 = getelementptr inbounds %struct.ImVec2, ptr %552, i32 0, i32 1
  store float %549, ptr %553, align 4, !tbaa !65
  %554 = load i32, ptr %15, align 4, !tbaa !11
  %555 = load ptr, ptr %34, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.ImDrawVert, ptr %555, i64 1
  %557 = getelementptr inbounds %struct.ImDrawVert, ptr %556, i32 0, i32 2
  store i32 %554, ptr %557, align 4, !tbaa !66
  %558 = load float, ptr %47, align 4, !tbaa !9
  %559 = load ptr, ptr %34, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.ImDrawVert, ptr %559, i64 1
  %561 = getelementptr inbounds %struct.ImDrawVert, ptr %560, i32 0, i32 1
  %562 = getelementptr inbounds %struct.ImVec2, ptr %561, i32 0, i32 0
  store float %558, ptr %562, align 4, !tbaa !67
  %563 = load float, ptr %46, align 4, !tbaa !9
  %564 = load ptr, ptr %34, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.ImDrawVert, ptr %564, i64 1
  %566 = getelementptr inbounds %struct.ImDrawVert, ptr %565, i32 0, i32 1
  %567 = getelementptr inbounds %struct.ImVec2, ptr %566, i32 0, i32 1
  store float %563, ptr %567, align 4, !tbaa !68
  %568 = load float, ptr %42, align 4, !tbaa !9
  %569 = load ptr, ptr %34, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.ImDrawVert, ptr %569, i64 2
  %571 = getelementptr inbounds %struct.ImDrawVert, ptr %570, i32 0, i32 0
  %572 = getelementptr inbounds %struct.ImVec2, ptr %571, i32 0, i32 0
  store float %568, ptr %572, align 4, !tbaa !63
  %573 = load float, ptr %44, align 4, !tbaa !9
  %574 = load ptr, ptr %34, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.ImDrawVert, ptr %574, i64 2
  %576 = getelementptr inbounds %struct.ImDrawVert, ptr %575, i32 0, i32 0
  %577 = getelementptr inbounds %struct.ImVec2, ptr %576, i32 0, i32 1
  store float %573, ptr %577, align 4, !tbaa !65
  %578 = load i32, ptr %15, align 4, !tbaa !11
  %579 = load ptr, ptr %34, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.ImDrawVert, ptr %579, i64 2
  %581 = getelementptr inbounds %struct.ImDrawVert, ptr %580, i32 0, i32 2
  store i32 %578, ptr %581, align 4, !tbaa !66
  %582 = load float, ptr %47, align 4, !tbaa !9
  %583 = load ptr, ptr %34, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.ImDrawVert, ptr %583, i64 2
  %585 = getelementptr inbounds %struct.ImDrawVert, ptr %584, i32 0, i32 1
  %586 = getelementptr inbounds %struct.ImVec2, ptr %585, i32 0, i32 0
  store float %582, ptr %586, align 4, !tbaa !67
  %587 = load float, ptr %48, align 4, !tbaa !9
  %588 = load ptr, ptr %34, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.ImDrawVert, ptr %588, i64 2
  %590 = getelementptr inbounds %struct.ImDrawVert, ptr %589, i32 0, i32 1
  %591 = getelementptr inbounds %struct.ImVec2, ptr %590, i32 0, i32 1
  store float %587, ptr %591, align 4, !tbaa !68
  %592 = load float, ptr %41, align 4, !tbaa !9
  %593 = load ptr, ptr %34, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.ImDrawVert, ptr %593, i64 3
  %595 = getelementptr inbounds %struct.ImDrawVert, ptr %594, i32 0, i32 0
  %596 = getelementptr inbounds %struct.ImVec2, ptr %595, i32 0, i32 0
  store float %592, ptr %596, align 4, !tbaa !63
  %597 = load float, ptr %44, align 4, !tbaa !9
  %598 = load ptr, ptr %34, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.ImDrawVert, ptr %598, i64 3
  %600 = getelementptr inbounds %struct.ImDrawVert, ptr %599, i32 0, i32 0
  %601 = getelementptr inbounds %struct.ImVec2, ptr %600, i32 0, i32 1
  store float %597, ptr %601, align 4, !tbaa !65
  %602 = load i32, ptr %15, align 4, !tbaa !11
  %603 = load ptr, ptr %34, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.ImDrawVert, ptr %603, i64 3
  %605 = getelementptr inbounds %struct.ImDrawVert, ptr %604, i32 0, i32 2
  store i32 %602, ptr %605, align 4, !tbaa !66
  %606 = load float, ptr %45, align 4, !tbaa !9
  %607 = load ptr, ptr %34, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.ImDrawVert, ptr %607, i64 3
  %609 = getelementptr inbounds %struct.ImDrawVert, ptr %608, i32 0, i32 1
  %610 = getelementptr inbounds %struct.ImVec2, ptr %609, i32 0, i32 0
  store float %606, ptr %610, align 4, !tbaa !67
  %611 = load float, ptr %48, align 4, !tbaa !9
  %612 = load ptr, ptr %34, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.ImDrawVert, ptr %612, i64 3
  %614 = getelementptr inbounds %struct.ImDrawVert, ptr %613, i32 0, i32 1
  %615 = getelementptr inbounds %struct.ImVec2, ptr %614, i32 0, i32 1
  store float %611, ptr %615, align 4, !tbaa !68
  %616 = load ptr, ptr %34, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.ImDrawVert, ptr %616, i64 4
  store ptr %617, ptr %34, align 8, !tbaa !5
  %618 = load i32, ptr %36, align 4, !tbaa !11
  %619 = add i32 %618, 4
  store i32 %619, ptr %36, align 4, !tbaa !11
  %620 = load ptr, ptr %35, align 8, !tbaa !5
  %621 = getelementptr inbounds i16, ptr %620, i64 6
  store ptr %621, ptr %35, align 8, !tbaa !5
  store i32 0, ptr %23, align 4
  br label %622

622:                                              ; preds = %491, %486
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  %623 = load i32, ptr %23, align 4
  switch i32 %623, label %626 [
    i32 0, label %624
  ]

624:                                              ; preds = %622
  br label %625

625:                                              ; preds = %624, %363, %333
  store i32 0, ptr %23, align 4
  br label %626

626:                                              ; preds = %625, %622
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  %627 = load i32, ptr %23, align 4
  switch i32 %627, label %631 [
    i32 0, label %628
  ]

628:                                              ; preds = %626
  br label %629

629:                                              ; preds = %628, %330, %322
  br label %630

630:                                              ; preds = %629, %316
  store i32 0, ptr %23, align 4
  br label %631

631:                                              ; preds = %630, %626
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  %632 = load i32, ptr %23, align 4
  switch i32 %632, label %637 [
    i32 0, label %633
  ]

633:                                              ; preds = %631
  %634 = load float, ptr %39, align 4, !tbaa !9
  %635 = load float, ptr %21, align 4, !tbaa !9
  %636 = fadd float %635, %634
  store float %636, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %23, align 4
  br label %637

637:                                              ; preds = %633, %631
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %638

638:                                              ; preds = %637, %314, %310, %309, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  %639 = load i32, ptr %23, align 4
  switch i32 %639, label %698 [
    i32 0, label %640
    i32 11, label %641
    i32 10, label %208
  ]

640:                                              ; preds = %638
  br label %208, !llvm.loop !49

641:                                              ; preds = %638, %208
  %642 = load ptr, ptr %13, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.ImDrawList, ptr %642, i32 0, i32 2
  %644 = load ptr, ptr %34, align 8, !tbaa !5
  %645 = load ptr, ptr %13, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.ImDrawList, ptr %645, i32 0, i32 2
  %647 = getelementptr inbounds %class.ImVector.1, ptr %646, i32 0, i32 2
  %648 = load ptr, ptr %647, align 8, !tbaa !69
  %649 = ptrtoint ptr %644 to i64
  %650 = ptrtoint ptr %648 to i64
  %651 = sub i64 %649, %650
  %652 = sdiv exact i64 %651, 20
  %653 = trunc i64 %652 to i32
  call void @_ZN8ImVectorI10ImDrawVertE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %643, i32 noundef %653)
  %654 = load ptr, ptr %13, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.ImDrawList, ptr %654, i32 0, i32 1
  %656 = load ptr, ptr %35, align 8, !tbaa !5
  %657 = load ptr, ptr %13, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.ImDrawList, ptr %657, i32 0, i32 1
  %659 = getelementptr inbounds %class.ImVector.0, ptr %658, i32 0, i32 2
  %660 = load ptr, ptr %659, align 8, !tbaa !70
  %661 = ptrtoint ptr %656 to i64
  %662 = ptrtoint ptr %660 to i64
  %663 = sub i64 %661, %662
  %664 = sdiv exact i64 %663, 2
  %665 = trunc i64 %664 to i32
  call void @_ZN8ImVectorItE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %655, i32 noundef %665)
  %666 = load i32, ptr %33, align 4, !tbaa !11
  %667 = load ptr, ptr %13, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.ImDrawList, ptr %667, i32 0, i32 1
  %669 = getelementptr inbounds %class.ImVector.0, ptr %668, i32 0, i32 0
  %670 = load i32, ptr %669, align 8, !tbaa !37
  %671 = sub nsw i32 %666, %670
  %672 = load ptr, ptr %13, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.ImDrawList, ptr %672, i32 0, i32 0
  %674 = load ptr, ptr %13, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.ImDrawList, ptr %674, i32 0, i32 0
  %676 = getelementptr inbounds %class.ImVector, ptr %675, i32 0, i32 0
  %677 = load i32, ptr %676, align 8, !tbaa !71
  %678 = sub nsw i32 %677, 1
  %679 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN8ImVectorI9ImDrawCmdEixEi(ptr noundef nonnull align 8 dereferenceable(16) %673, i32 noundef %678)
  %680 = getelementptr inbounds %struct.ImDrawCmd, ptr %679, i32 0, i32 0
  %681 = load i32, ptr %680, align 8, !tbaa !72
  %682 = sub i32 %681, %671
  store i32 %682, ptr %680, align 8, !tbaa !72
  %683 = load ptr, ptr %34, align 8, !tbaa !5
  %684 = load ptr, ptr %13, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.ImDrawList, ptr %684, i32 0, i32 7
  store ptr %683, ptr %685, align 8, !tbaa !45
  %686 = load ptr, ptr %35, align 8, !tbaa !5
  %687 = load ptr, ptr %13, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.ImDrawList, ptr %687, i32 0, i32 8
  store ptr %686, ptr %688, align 8, !tbaa !46
  %689 = load ptr, ptr %13, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.ImDrawList, ptr %689, i32 0, i32 2
  %691 = getelementptr inbounds %class.ImVector.1, ptr %690, i32 0, i32 0
  %692 = load i32, ptr %691, align 8, !tbaa !74
  %693 = load ptr, ptr %13, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.ImDrawList, ptr %693, i32 0, i32 6
  store i32 %692, ptr %694, align 8, !tbaa !47
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  store i32 0, ptr %23, align 4
  br label %695

695:                                              ; preds = %641, %86
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  %696 = load i32, ptr %23, align 4
  switch i32 %696, label %698 [
    i32 0, label %697
    i32 1, label %697
  ]

697:                                              ; preds = %695, %695
  ret void

698:                                              ; preds = %695, %638, %267
  unreachable
}

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

declare noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef, ptr noundef, ptr noundef) #7

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL14ImCharIsBlankAc(i8 noundef signext) #6

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind willreturn memory(read) }
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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !10, i64 0}
!16 = !{!"_ZTS6ImVec2", !10, i64 0, !10, i64 4}
!17 = !{!18, !10, i64 8}
!18 = !{!"_ZTS6ImFont", !10, i64 0, !10, i64 4, !16, i64 8, !19, i64 16, !20, i64 32, !21, i64 48, !6, i64 64, !10, i64 72, !22, i64 76, !22, i64 78, !6, i64 80, !6, i64 88, !10, i64 96, !10, i64 100, !14, i64 104, !12, i64 108}
!19 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !12, i64 0, !12, i64 4, !6, i64 8}
!20 = !{!"_ZTS8ImVectorIfE", !12, i64 0, !12, i64 4, !6, i64 8}
!21 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!22 = !{!"short", !7, i64 0}
!23 = !{!16, !10, i64 4}
!24 = !{!18, !10, i64 12}
!25 = !{!26, !10, i64 12}
!26 = !{!"_ZTS6ImVec4", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!27 = !{!18, !10, i64 0}
!28 = !{!26, !10, i64 4}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!7, !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}
!37 = !{!38, !12, i64 16}
!38 = !{!"_ZTS10ImDrawList", !39, i64 0, !21, i64 16, !40, i64 32, !12, i64 48, !6, i64 56, !6, i64 64, !12, i64 72, !6, i64 80, !6, i64 88, !41, i64 96, !42, i64 112, !43, i64 128, !12, i64 144, !12, i64 148, !44, i64 152}
!39 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !12, i64 0, !12, i64 4, !6, i64 8}
!40 = !{!"_ZTS8ImVectorI10ImDrawVertE", !12, i64 0, !12, i64 4, !6, i64 8}
!41 = !{!"_ZTS8ImVectorI6ImVec4E", !12, i64 0, !12, i64 4, !6, i64 8}
!42 = !{!"_ZTS8ImVectorIPvE", !12, i64 0, !12, i64 4, !6, i64 8}
!43 = !{!"_ZTS8ImVectorI6ImVec2E", !12, i64 0, !12, i64 4, !6, i64 8}
!44 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !12, i64 0, !12, i64 4, !6, i64 8}
!45 = !{!38, !6, i64 80}
!46 = !{!38, !6, i64 88}
!47 = !{!38, !12, i64 72}
!48 = distinct !{!48, !33}
!49 = distinct !{!49, !33}
!50 = !{!51, !10, i64 4}
!51 = !{!"_ZTS11ImFontGlyph", !22, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36}
!52 = !{!51, !10, i64 8}
!53 = !{!51, !10, i64 16}
!54 = !{!51, !10, i64 12}
!55 = !{!51, !10, i64 20}
!56 = !{!26, !10, i64 8}
!57 = !{!26, !10, i64 0}
!58 = !{!51, !10, i64 24}
!59 = !{!51, !10, i64 28}
!60 = !{!51, !10, i64 32}
!61 = !{!51, !10, i64 36}
!62 = !{!22, !22, i64 0}
!63 = !{!64, !10, i64 0}
!64 = !{!"_ZTS10ImDrawVert", !16, i64 0, !16, i64 8, !12, i64 16}
!65 = !{!64, !10, i64 4}
!66 = !{!64, !12, i64 16}
!67 = !{!64, !10, i64 8}
!68 = !{!64, !10, i64 12}
!69 = !{!38, !6, i64 40}
!70 = !{!38, !6, i64 24}
!71 = !{!38, !12, i64 0}
!72 = !{!73, !12, i64 0}
!73 = !{!"_ZTS9ImDrawCmd", !12, i64 0, !26, i64 4, !6, i64 24, !6, i64 32, !6, i64 40}
!74 = !{!38, !12, i64 32}


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

; 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorItE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6ImFont10RenderTextEP10ImDrawListf6ImVec2jRK6ImVec4PKcS7_fb(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef %1, float noundef %2, <2 x float> %3, i32 noundef %4, ptr nocapture noundef nonnull readonly align 4 dereferenceable(16) %5, ptr noundef %6, ptr noundef %7, float noundef %8, i1 noundef zeroext %9) local_unnamed_addr #5 align 2 {
  %11 = alloca i32, align 4
  %.not = icmp eq ptr %7, null
  br i1 %.not, label %12, label %15

12:                                               ; preds = %10
  %13 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %6) #8
  %14 = getelementptr inbounds i8, ptr %6, i64 %13
  br label %15

15:                                               ; preds = %12, %10
  %.0255 = phi ptr [ %7, %10 ], [ %14, %12 ]
  %.sroa.0.0.vec.extract = extractelement <2 x float> %3, i64 0
  %16 = fptosi float %.sroa.0.0.vec.extract to i32
  %17 = sitofp i32 %16 to float
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = load float, ptr %18, align 8, !tbaa !5
  %20 = fadd float %19, %17
  %.sroa.0.4.vec.extract = extractelement <2 x float> %3, i64 1
  %21 = fptosi float %.sroa.0.4.vec.extract to i32
  %22 = sitofp i32 %21 to float
  %23 = getelementptr inbounds i8, ptr %0, i64 12
  %24 = load float, ptr %23, align 4, !tbaa !18
  %25 = fadd float %24, %22
  %26 = getelementptr inbounds i8, ptr %5, i64 12
  %27 = load float, ptr %26, align 4, !tbaa !19
  %28 = fcmp ogt float %25, %27
  br i1 %28, label %243, label %29

29:                                               ; preds = %15
  %30 = load float, ptr %0, align 8, !tbaa !21
  %31 = fdiv float %2, %30
  %32 = fmul float %30, %31
  %33 = fcmp ogt float %8, 0.000000e+00
  %34 = fadd float %25, %32
  %35 = getelementptr inbounds i8, ptr %5, i64 4
  %36 = load float, ptr %35, align 4, !tbaa !22
  %37 = fcmp uge float %34, %36
  %or.cond.not = or i1 %37, %33
  br i1 %or.cond.not, label %.loopexit394, label %.preheader392

.preheader392:                                    ; preds = %29, %45
  %38 = phi float [ %46, %45 ], [ %34, %29 ]
  %.0296403 = phi ptr [ %.2298, %45 ], [ %6, %29 ]
  br label %39

39:                                               ; preds = %.preheader392, %41
  %.1297 = phi ptr [ %42, %41 ], [ %.0296403, %.preheader392 ]
  %40 = icmp ult ptr %.1297, %.0255
  br i1 %40, label %41, label %45

41:                                               ; preds = %39
  %42 = getelementptr inbounds i8, ptr %.1297, i64 1
  %43 = load i8, ptr %.1297, align 1, !tbaa !23
  %44 = icmp eq i8 %43, 10
  br i1 %44, label %45, label %39, !llvm.loop !24

45:                                               ; preds = %41, %39
  %.2298 = phi ptr [ %42, %41 ], [ %.1297, %39 ]
  %46 = fadd float %32, %38
  %47 = fcmp olt float %46, %36
  br i1 %47, label %.preheader392, label %.loopexit394, !llvm.loop !26

.loopexit394:                                     ; preds = %45, %29
  %.3299 = phi ptr [ %6, %29 ], [ %.2298, %45 ]
  %.1283 = phi float [ %25, %29 ], [ %38, %45 ]
  %48 = ptrtoint ptr %.0255 to i64
  %49 = ptrtoint ptr %.3299 to i64
  %50 = sub i64 %48, %49
  %51 = icmp slt i64 %50, 10001
  %brmerge331 = or i1 %33, %51
  br i1 %brmerge331, label %.loopexit391, label %.preheader390

.preheader390:                                    ; preds = %.loopexit394
  %52 = fcmp olt float %.1283, %27
  br i1 %52, label %.preheader, label %.loopexit391

.preheader:                                       ; preds = %.preheader390, %59
  %.0292406 = phi float [ %60, %59 ], [ %.1283, %.preheader390 ]
  %.0293405 = phi ptr [ %.2295, %59 ], [ %.3299, %.preheader390 ]
  br label %53

53:                                               ; preds = %.preheader, %55
  %.1294 = phi ptr [ %56, %55 ], [ %.0293405, %.preheader ]
  %54 = icmp ult ptr %.1294, %.0255
  br i1 %54, label %55, label %59

55:                                               ; preds = %53
  %56 = getelementptr inbounds i8, ptr %.1294, i64 1
  %57 = load i8, ptr %.1294, align 1, !tbaa !23
  %58 = icmp eq i8 %57, 10
  br i1 %58, label %59, label %53, !llvm.loop !27

59:                                               ; preds = %55, %53
  %.2295 = phi ptr [ %56, %55 ], [ %.1294, %53 ]
  %60 = fadd float %32, %.0292406
  %61 = fcmp olt float %60, %27
  br i1 %61, label %.preheader, label %.loopexit391.loopexit, !llvm.loop !28

.loopexit391.loopexit:                            ; preds = %59
  %.pre = ptrtoint ptr %.2295 to i64
  br label %.loopexit391

.loopexit391:                                     ; preds = %.loopexit391.loopexit, %.preheader390, %.loopexit394
  %.pre-phi = phi i64 [ %.pre, %.loopexit391.loopexit ], [ %49, %.preheader390 ], [ %48, %.loopexit394 ]
  %.1256 = phi ptr [ %.2295, %.loopexit391.loopexit ], [ %.3299, %.preheader390 ], [ %.0255, %.loopexit394 ]
  %62 = sub i64 %.pre-phi, %49
  %63 = trunc i64 %62 to i32
  %64 = shl nsw i32 %63, 2
  %65 = mul nsw i32 %63, 6
  %66 = getelementptr inbounds i8, ptr %1, i64 16
  %67 = load i32, ptr %66, align 8, !tbaa !29
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %1, i32 noundef %65, i32 noundef %64)
  %68 = getelementptr inbounds i8, ptr %1, i64 80
  %69 = load ptr, ptr %68, align 8, !tbaa !37
  %70 = getelementptr inbounds i8, ptr %1, i64 88
  %71 = load ptr, ptr %70, align 8, !tbaa !38
  %72 = getelementptr inbounds i8, ptr %1, i64 72
  %73 = load i32, ptr %72, align 8, !tbaa !39
  %74 = getelementptr inbounds i8, ptr %5, i64 8
  br label %.outer.outer

.outer.outer:                                     ; preds = %.loopexit391, %.loopexit440
  %.0304.ph.ph = phi ptr [ null, %.loopexit391 ], [ %.us-phi422, %.loopexit440 ]
  %.4300.ph.ph = phi ptr [ %.3299, %.loopexit391 ], [ %.8, %.loopexit440 ]
  %.2284.ph.ph = phi float [ %.1283, %.loopexit391 ], [ %.us-phi420, %.loopexit440 ]
  %.0274.ph.ph = phi float [ %20, %.loopexit391 ], [ %.7281, %.loopexit440 ]
  %.0266.ph.ph = phi ptr [ %69, %.loopexit391 ], [ %.6272, %.loopexit440 ]
  %.0259.ph.ph = phi ptr [ %71, %.loopexit391 ], [ %.6265, %.loopexit440 ]
  %.0257.ph.ph = phi i32 [ %73, %.loopexit391 ], [ %.6, %.loopexit440 ]
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %107
  %.0304.ph = phi ptr [ %.us-phi422, %107 ], [ %.0304.ph.ph, %.outer.outer ]
  %.4300.ph = phi ptr [ %.8, %107 ], [ %.4300.ph.ph, %.outer.outer ]
  %.2284.ph = phi float [ %108, %107 ], [ %.2284.ph.ph, %.outer.outer ]
  %.0274.ph = phi float [ %20, %107 ], [ %.0274.ph.ph, %.outer.outer ]
  %75 = icmp ult ptr %.4300.ph, %.1256
  br i1 %75, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.outer
  br i1 %33, label %.lr.ph.split.us, label %.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.split.loop.exit408.us
  %.0274415.us = phi float [ %20, %.split.loop.exit408.us ], [ %.0274.ph, %.lr.ph ]
  %.2284414.us = phi float [ %83, %.split.loop.exit408.us ], [ %.2284.ph, %.lr.ph ]
  %.4300413.us = phi ptr [ %.7303.us, %.split.loop.exit408.us ], [ %.4300.ph, %.lr.ph ]
  %.0304412.us = phi ptr [ null, %.split.loop.exit408.us ], [ %.0304.ph, %.lr.ph ]
  %.not326.us = icmp eq ptr %.0304412.us, null
  br i1 %.not326.us, label %76, label %81

76:                                               ; preds = %.lr.ph.split.us
  %77 = fsub float %20, %.0274415.us
  %78 = fadd float %77, %8
  %79 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef %31, ptr noundef %.4300413.us, ptr noundef nonnull %.1256, float noundef %78)
  %80 = icmp eq ptr %79, %.4300413.us
  %spec.select.idx.us = zext i1 %80 to i64
  %spec.select.us = getelementptr inbounds i8, ptr %79, i64 %spec.select.idx.us
  br label %81

81:                                               ; preds = %76, %.lr.ph.split.us
  %.1305.us = phi ptr [ %.0304412.us, %.lr.ph.split.us ], [ %spec.select.us, %76 ]
  %.not327.us = icmp ult ptr %.4300413.us, %.1305.us
  br i1 %.not327.us, label %.split.us, label %82

82:                                               ; preds = %81
  %83 = fadd float %32, %.2284414.us
  br label %84

84:                                               ; preds = %86, %82
  %.5301.us = phi ptr [ %.4300413.us, %82 ], [ %89, %86 ]
  %85 = icmp ult ptr %.5301.us, %.1256
  br i1 %85, label %86, label %.split.loop.exit408.us

86:                                               ; preds = %84
  %87 = load i8, ptr %.5301.us, align 1, !tbaa !23
  %88 = call noundef zeroext i1 @_ZL14ImCharIsBlankAc(i8 noundef signext %87)
  %89 = getelementptr inbounds i8, ptr %.5301.us, i64 1
  br i1 %88, label %84, label %.split.loop.exit.us

.split.loop.exit408.us:                           ; preds = %84, %.split.loop.exit.us
  %.7303.us = phi ptr [ %spec.select334.le.us, %.split.loop.exit.us ], [ %.5301.us, %84 ]
  %90 = icmp ult ptr %.7303.us, %.1256
  br i1 %90, label %.lr.ph.split.us, label %.loopexit, !llvm.loop !40

.split.loop.exit.us:                              ; preds = %86
  %91 = icmp eq i8 %87, 10
  %spec.select334.le.us = select i1 %91, ptr %89, ptr %.5301.us
  br label %.split.loop.exit408.us

.split.us:                                        ; preds = %81, %.lr.ph
  %.us-phi = phi ptr [ %.4300.ph, %.lr.ph ], [ %.4300413.us, %81 ]
  %.us-phi420 = phi float [ %.2284.ph, %.lr.ph ], [ %.2284414.us, %81 ]
  %.us-phi421 = phi float [ %.0274.ph, %.lr.ph ], [ %.0274415.us, %81 ]
  %.us-phi422 = phi ptr [ %.0304.ph, %.lr.ph ], [ %.1305.us, %81 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #9
  %92 = load i8, ptr %.us-phi, align 1, !tbaa !23
  %93 = sext i8 %92 to i32
  store i32 %93, ptr %11, align 4, !tbaa !41
  %94 = icmp sgt i8 %92, -1
  br i1 %94, label %95, label %97

95:                                               ; preds = %.split.us
  %96 = getelementptr inbounds i8, ptr %.us-phi, i64 1
  br label %103

97:                                               ; preds = %.split.us
  %98 = call noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef nonnull %11, ptr noundef nonnull %.us-phi, ptr noundef nonnull %.1256)
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds i8, ptr %.us-phi, i64 %99
  %101 = load i32, ptr %11, align 4, !tbaa !41
  %102 = icmp eq i32 %101, 0
  br i1 %102, label %.thread376, label %103

.thread376:                                       ; preds = %97
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  br label %.loopexit

103:                                              ; preds = %97, %95
  %104 = phi i32 [ %101, %97 ], [ %93, %95 ]
  %.8 = phi ptr [ %100, %97 ], [ %96, %95 ]
  %105 = icmp ult i32 %104, 32
  br i1 %105, label %106, label %111

106:                                              ; preds = %103
  switch i32 %104, label %111 [
    i32 10, label %107
    i32 13, label %.loopexit440
  ], !llvm.loop !40

107:                                              ; preds = %106
  %108 = fadd float %32, %.us-phi420
  %109 = load float, ptr %26, align 4, !tbaa !19
  %110 = fcmp ogt float %108, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  br i1 %110, label %.loopexit, label %.outer

111:                                              ; preds = %106, %103
  %112 = trunc i32 %104 to i16
  %113 = call noundef ptr @_ZNK6ImFont9FindGlyphEt(ptr noundef nonnull align 8 dereferenceable(112) %0, i16 noundef zeroext %112)
  %.not328 = icmp eq ptr %113, null
  br i1 %.not328, label %.thread351, label %114

114:                                              ; preds = %111
  %115 = getelementptr inbounds i8, ptr %113, i64 4
  %116 = load float, ptr %115, align 4, !tbaa !42
  %117 = fmul float %31, %116
  %118 = load i32, ptr %11, align 4
  switch i32 %118, label %119 [
    i32 32, label %.thread351
    i32 9, label %.thread351
  ]

119:                                              ; preds = %114
  %120 = getelementptr inbounds i8, ptr %113, i64 8
  %121 = load float, ptr %120, align 4, !tbaa !44
  %122 = call float @llvm.fmuladd.f32(float %121, float %31, float %.us-phi421)
  %123 = getelementptr inbounds i8, ptr %113, i64 16
  %124 = load float, ptr %123, align 4, !tbaa !45
  %125 = call float @llvm.fmuladd.f32(float %124, float %31, float %.us-phi421)
  %126 = getelementptr inbounds i8, ptr %113, i64 12
  %127 = load float, ptr %126, align 4, !tbaa !46
  %128 = call float @llvm.fmuladd.f32(float %127, float %31, float %.us-phi420)
  %129 = getelementptr inbounds i8, ptr %113, i64 20
  %130 = load float, ptr %129, align 4, !tbaa !47
  %131 = call float @llvm.fmuladd.f32(float %130, float %31, float %.us-phi420)
  %132 = load float, ptr %74, align 4, !tbaa !48
  %133 = fcmp ugt float %122, %132
  br i1 %133, label %.thread368, label %134

134:                                              ; preds = %119
  %135 = load float, ptr %5, align 4, !tbaa !49
  %136 = fcmp ult float %125, %135
  br i1 %136, label %.thread368, label %137

137:                                              ; preds = %134
  %138 = getelementptr inbounds i8, ptr %113, i64 24
  %139 = load float, ptr %138, align 4, !tbaa !50
  %140 = getelementptr inbounds i8, ptr %113, i64 28
  %141 = load float, ptr %140, align 4, !tbaa !51
  %142 = getelementptr inbounds i8, ptr %113, i64 32
  %143 = load float, ptr %142, align 4, !tbaa !52
  %144 = getelementptr inbounds i8, ptr %113, i64 36
  %145 = load float, ptr %144, align 4, !tbaa !53
  br i1 %9, label %146, label %184

146:                                              ; preds = %137
  %147 = fcmp olt float %122, %135
  br i1 %147, label %148, label %155

148:                                              ; preds = %146
  %149 = fsub float %125, %135
  %150 = fsub float %125, %122
  %151 = fdiv float %149, %150
  %152 = fsub float 1.000000e+00, %151
  %153 = fsub float %143, %139
  %154 = call float @llvm.fmuladd.f32(float %152, float %153, float %139)
  br label %155

155:                                              ; preds = %148, %146
  %.0251 = phi float [ %135, %148 ], [ %122, %146 ]
  %.0243 = phi float [ %154, %148 ], [ %139, %146 ]
  %156 = load float, ptr %35, align 4, !tbaa !22
  %157 = fcmp olt float %128, %156
  br i1 %157, label %158, label %165

158:                                              ; preds = %155
  %159 = fsub float %131, %156
  %160 = fsub float %131, %128
  %161 = fdiv float %159, %160
  %162 = fsub float 1.000000e+00, %161
  %163 = fsub float %145, %141
  %164 = call float @llvm.fmuladd.f32(float %162, float %163, float %141)
  br label %165

165:                                              ; preds = %158, %155
  %.0247 = phi float [ %156, %158 ], [ %128, %155 ]
  %.0241 = phi float [ %164, %158 ], [ %141, %155 ]
  %166 = fcmp ogt float %125, %132
  br i1 %166, label %167, label %173

167:                                              ; preds = %165
  %168 = fsub float %132, %.0251
  %169 = fsub float %125, %.0251
  %170 = fdiv float %168, %169
  %171 = fsub float %143, %.0243
  %172 = call float @llvm.fmuladd.f32(float %170, float %171, float %.0243)
  br label %173

173:                                              ; preds = %167, %165
  %.0249 = phi float [ %132, %167 ], [ %125, %165 ]
  %.0239 = phi float [ %172, %167 ], [ %143, %165 ]
  %174 = load float, ptr %26, align 4, !tbaa !19
  %175 = fcmp ogt float %131, %174
  br i1 %175, label %176, label %182

176:                                              ; preds = %173
  %177 = fsub float %174, %.0247
  %178 = fsub float %131, %.0247
  %179 = fdiv float %177, %178
  %180 = fsub float %145, %.0241
  %181 = call float @llvm.fmuladd.f32(float %179, float %180, float %.0241)
  br label %182

182:                                              ; preds = %176, %173
  %.0245 = phi float [ %174, %176 ], [ %131, %173 ]
  %.0 = phi float [ %181, %176 ], [ %145, %173 ]
  %183 = fcmp ult float %.0247, %.0245
  br i1 %183, label %184, label %218

184:                                              ; preds = %137, %182
  %.1252 = phi float [ %.0251, %182 ], [ %122, %137 ]
  %.1250 = phi float [ %.0249, %182 ], [ %125, %137 ]
  %.1248 = phi float [ %.0247, %182 ], [ %128, %137 ]
  %.1246 = phi float [ %.0245, %182 ], [ %131, %137 ]
  %.1244 = phi float [ %.0243, %182 ], [ %139, %137 ]
  %.1242 = phi float [ %.0241, %182 ], [ %141, %137 ]
  %.1240 = phi float [ %.0239, %182 ], [ %143, %137 ]
  %.1 = phi float [ %.0, %182 ], [ %145, %137 ]
  %185 = trunc i32 %.0257.ph.ph to i16
  store i16 %185, ptr %.0259.ph.ph, align 2, !tbaa !54
  %186 = add i16 %185, 1
  %187 = getelementptr inbounds i8, ptr %.0259.ph.ph, i64 2
  store i16 %186, ptr %187, align 2, !tbaa !54
  %188 = add i16 %185, 2
  %189 = getelementptr inbounds i8, ptr %.0259.ph.ph, i64 4
  store i16 %188, ptr %189, align 2, !tbaa !54
  %190 = getelementptr inbounds i8, ptr %.0259.ph.ph, i64 6
  store i16 %185, ptr %190, align 2, !tbaa !54
  %191 = getelementptr inbounds i8, ptr %.0259.ph.ph, i64 8
  store i16 %188, ptr %191, align 2, !tbaa !54
  %192 = add i16 %185, 3
  %193 = getelementptr inbounds i8, ptr %.0259.ph.ph, i64 10
  store i16 %192, ptr %193, align 2, !tbaa !54
  store float %.1252, ptr %.0266.ph.ph, align 4, !tbaa !55
  %194 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 4
  store float %.1248, ptr %194, align 4, !tbaa !57
  %195 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 16
  store i32 %4, ptr %195, align 4, !tbaa !58
  %196 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 8
  store float %.1244, ptr %196, align 4, !tbaa !59
  %197 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 12
  store float %.1242, ptr %197, align 4, !tbaa !60
  %198 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 20
  store float %.1250, ptr %198, align 4, !tbaa !55
  %199 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 24
  store float %.1248, ptr %199, align 4, !tbaa !57
  %200 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 36
  store i32 %4, ptr %200, align 4, !tbaa !58
  %201 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 28
  store float %.1240, ptr %201, align 4, !tbaa !59
  %202 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 32
  store float %.1242, ptr %202, align 4, !tbaa !60
  %203 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 40
  store float %.1250, ptr %203, align 4, !tbaa !55
  %204 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 44
  store float %.1246, ptr %204, align 4, !tbaa !57
  %205 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 56
  store i32 %4, ptr %205, align 4, !tbaa !58
  %206 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 48
  store float %.1240, ptr %206, align 4, !tbaa !59
  %207 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 52
  store float %.1, ptr %207, align 4, !tbaa !60
  %208 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 60
  store float %.1252, ptr %208, align 4, !tbaa !55
  %209 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 64
  store float %.1246, ptr %209, align 4, !tbaa !57
  %210 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 76
  store i32 %4, ptr %210, align 4, !tbaa !58
  %211 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 68
  store float %.1244, ptr %211, align 4, !tbaa !59
  %212 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 72
  store float %.1, ptr %212, align 4, !tbaa !60
  %213 = getelementptr inbounds i8, ptr %.0266.ph.ph, i64 80
  %214 = add i32 %.0257.ph.ph, 4
  %215 = getelementptr inbounds i8, ptr %.0259.ph.ph, i64 12
  br label %.thread368

.thread351:                                       ; preds = %114, %114, %111
  %.1254.ph = phi float [ %117, %114 ], [ 0.000000e+00, %111 ], [ %117, %114 ]
  %216 = fadd float %.us-phi421, %.1254.ph
  br label %.loopexit440

.thread368:                                       ; preds = %134, %119, %184
  %.3269.ph = phi ptr [ %213, %184 ], [ %.0266.ph.ph, %119 ], [ %.0266.ph.ph, %134 ]
  %.3262.ph = phi ptr [ %215, %184 ], [ %.0259.ph.ph, %119 ], [ %.0259.ph.ph, %134 ]
  %.3.ph = phi i32 [ %214, %184 ], [ %.0257.ph.ph, %119 ], [ %.0257.ph.ph, %134 ]
  %217 = fadd float %.us-phi421, %117
  br label %.loopexit440

218:                                              ; preds = %182
  %219 = fadd float %.us-phi421, %117
  br label %.loopexit440

.loopexit440:                                     ; preds = %106, %218, %.thread368, %.thread351
  %.7281 = phi float [ %219, %218 ], [ %217, %.thread368 ], [ %216, %.thread351 ], [ %.us-phi421, %106 ]
  %.6272 = phi ptr [ %.0266.ph.ph, %218 ], [ %.3269.ph, %.thread368 ], [ %.0266.ph.ph, %.thread351 ], [ %.0266.ph.ph, %106 ]
  %.6265 = phi ptr [ %.0259.ph.ph, %218 ], [ %.3262.ph, %.thread368 ], [ %.0259.ph.ph, %.thread351 ], [ %.0259.ph.ph, %106 ]
  %.6 = phi i32 [ %.0257.ph.ph, %218 ], [ %.3.ph, %.thread368 ], [ %.0257.ph.ph, %.thread351 ], [ %.0257.ph.ph, %106 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  br label %.outer.outer

.loopexit:                                        ; preds = %.outer, %107, %.split.loop.exit408.us, %.thread376
  %220 = getelementptr inbounds i8, ptr %1, i64 32
  %221 = getelementptr inbounds i8, ptr %1, i64 40
  %222 = load ptr, ptr %221, align 8, !tbaa !61
  %223 = ptrtoint ptr %.0266.ph.ph to i64
  %224 = ptrtoint ptr %222 to i64
  %225 = sub i64 %223, %224
  %226 = sdiv exact i64 %225, 20
  %227 = trunc i64 %226 to i32
  call void @_ZN8ImVectorI10ImDrawVertE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %220, i32 noundef %227)
  %228 = getelementptr inbounds i8, ptr %1, i64 24
  %229 = load ptr, ptr %228, align 8, !tbaa !62
  %230 = ptrtoint ptr %.0259.ph.ph to i64
  %231 = ptrtoint ptr %229 to i64
  %232 = sub i64 %230, %231
  %233 = lshr exact i64 %232, 1
  %234 = trunc i64 %233 to i32
  call void @_ZN8ImVectorItE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %66, i32 noundef %234)
  %235 = load i32, ptr %66, align 8, !tbaa !29
  %236 = add i32 %65, %67
  %.neg = sub i32 %235, %236
  %237 = load i32, ptr %1, align 8, !tbaa !63
  %238 = add nsw i32 %237, -1
  %239 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN8ImVectorI9ImDrawCmdEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1, i32 noundef %238)
  %240 = load i32, ptr %239, align 8, !tbaa !64
  %241 = add i32 %.neg, %240
  store i32 %241, ptr %239, align 8, !tbaa !64
  store ptr %.0266.ph.ph, ptr %68, align 8, !tbaa !37
  store ptr %.0259.ph.ph, ptr %70, align 8, !tbaa !38
  %242 = load i32, ptr %220, align 8, !tbaa !66
  store i32 %242, ptr %72, align 8, !tbaa !39
  br label %243

243:                                              ; preds = %15, %.loopexit
  ret void
}

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

declare noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(112), float noundef, ptr noundef, ptr noundef, float noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL14ImCharIsBlankAc(i8 noundef signext) local_unnamed_addr #6

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind willreturn memory(read) }
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 8}
!6 = !{!"_ZTS6ImFont", !7, i64 0, !7, i64 4, !10, i64 8, !11, i64 16, !14, i64 32, !15, i64 48, !13, i64 64, !7, i64 72, !16, i64 76, !16, i64 78, !13, i64 80, !13, i64 88, !7, i64 96, !7, i64 100, !17, i64 104, !12, i64 108}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS6ImVec2", !7, i64 0, !7, i64 4}
!11 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !12, i64 0, !12, i64 4, !13, i64 8}
!12 = !{!"int", !8, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"_ZTS8ImVectorIfE", !12, i64 0, !12, i64 4, !13, i64 8}
!15 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !13, i64 8}
!16 = !{!"short", !8, i64 0}
!17 = !{!"bool", !8, i64 0}
!18 = !{!6, !7, i64 12}
!19 = !{!20, !7, i64 12}
!20 = !{!"_ZTS6ImVec4", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12}
!21 = !{!6, !7, i64 0}
!22 = !{!20, !7, i64 4}
!23 = !{!8, !8, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = !{!30, !12, i64 16}
!30 = !{!"_ZTS10ImDrawList", !31, i64 0, !15, i64 16, !32, i64 32, !12, i64 48, !13, i64 56, !13, i64 64, !12, i64 72, !13, i64 80, !13, i64 88, !33, i64 96, !34, i64 112, !35, i64 128, !12, i64 144, !12, i64 148, !36, i64 152}
!31 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !12, i64 0, !12, i64 4, !13, i64 8}
!32 = !{!"_ZTS8ImVectorI10ImDrawVertE", !12, i64 0, !12, i64 4, !13, i64 8}
!33 = !{!"_ZTS8ImVectorI6ImVec4E", !12, i64 0, !12, i64 4, !13, i64 8}
!34 = !{!"_ZTS8ImVectorIPvE", !12, i64 0, !12, i64 4, !13, i64 8}
!35 = !{!"_ZTS8ImVectorI6ImVec2E", !12, i64 0, !12, i64 4, !13, i64 8}
!36 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !12, i64 0, !12, i64 4, !13, i64 8}
!37 = !{!30, !13, i64 80}
!38 = !{!30, !13, i64 88}
!39 = !{!30, !12, i64 72}
!40 = distinct !{!40, !25}
!41 = !{!12, !12, i64 0}
!42 = !{!43, !7, i64 4}
!43 = !{!"_ZTS11ImFontGlyph", !16, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36}
!44 = !{!43, !7, i64 8}
!45 = !{!43, !7, i64 16}
!46 = !{!43, !7, i64 12}
!47 = !{!43, !7, i64 20}
!48 = !{!20, !7, i64 8}
!49 = !{!20, !7, i64 0}
!50 = !{!43, !7, i64 24}
!51 = !{!43, !7, i64 28}
!52 = !{!43, !7, i64 32}
!53 = !{!43, !7, i64 36}
!54 = !{!16, !16, i64 0}
!55 = !{!56, !7, i64 0}
!56 = !{!"_ZTS10ImDrawVert", !10, i64 0, !10, i64 8, !12, i64 16}
!57 = !{!56, !7, i64 4}
!58 = !{!56, !12, i64 16}
!59 = !{!56, !7, i64 8}
!60 = !{!56, !7, i64 12}
!61 = !{!30, !13, i64 40}
!62 = !{!30, !13, i64 24}
!63 = !{!30, !12, i64 0}
!64 = !{!65, !12, i64 0}
!65 = !{!"_ZTS9ImDrawCmd", !12, i64 0, !20, i64 4, !13, i64 24, !13, i64 32, !13, i64 40}
!66 = !{!30, !12, i64 32}


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