; LLVM IR from Eukky/TRender :: lib/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 i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i8, align 1
  %36 = alloca i32, align 4
  %37 = alloca float, align 4
  %38 = alloca ptr, align 8
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %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
  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
  %47 = zext i1 %9 to i8
  store i8 %47, ptr %20, align 1, !tbaa !13
  %48 = load ptr, ptr %12, align 8
  %49 = load ptr, ptr %18, align 8, !tbaa !5
  %50 = icmp ne ptr %49, null
  br i1 %50, label %56, label %51

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

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

84:                                               ; preds = %56
  store i32 1, ptr %23, align 4
  br label %671

85:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %86 = load float, ptr %14, align 4, !tbaa !9
  %87 = getelementptr inbounds %struct.ImFont, ptr %48, i32 0, i32 0
  %88 = load float, ptr %87, align 8, !tbaa !27
  %89 = fdiv float %86, %88
  store float %89, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %90 = getelementptr inbounds %struct.ImFont, ptr %48, i32 0, i32 0
  %91 = load float, ptr %90, align 8, !tbaa !27
  %92 = load float, ptr %24, align 4, !tbaa !9
  %93 = fmul float %91, %92
  store float %93, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #9
  %94 = load float, ptr %19, align 4, !tbaa !9
  %95 = fcmp ogt float %94, 0.000000e+00
  %96 = zext i1 %95 to i8
  store i8 %96, 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
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %97, ptr %28, align 8, !tbaa !5
  %98 = load i8, ptr %26, align 1, !tbaa !13, !range !28, !noundef !29
  %99 = trunc i8 %98 to i1
  br i1 %99, label %124, label %100

100:                                              ; preds = %85
  %101 = load float, ptr %22, align 4, !tbaa !9
  %102 = load float, ptr %25, align 4, !tbaa !9
  %103 = fadd float %101, %102
  %104 = load ptr, ptr %16, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.ImVec4, ptr %104, i32 0, i32 1
  %106 = load float, ptr %105, align 4, !tbaa !30
  %107 = fcmp olt float %103, %106
  br i1 %107, label %108, label %124

108:                                              ; preds = %100
  br label %109

109:                                              ; preds = %120, %108
  %110 = load ptr, ptr %28, align 8, !tbaa !5
  %111 = load ptr, ptr %18, align 8, !tbaa !5
  %112 = icmp ult ptr %110, %111
  br i1 %112, label %113, label %118

113:                                              ; preds = %109
  %114 = load ptr, ptr %28, align 8, !tbaa !5
  %115 = load i8, ptr %114, align 1, !tbaa !31
  %116 = sext i8 %115 to i32
  %117 = icmp ne i32 %116, 10
  br label %118

118:                                              ; preds = %113, %109
  %119 = phi i1 [ false, %109 ], [ %117, %113 ]
  br i1 %119, label %120, label %123

120:                                              ; preds = %118
  %121 = load ptr, ptr %28, align 8, !tbaa !5
  %122 = getelementptr inbounds i8, ptr %121, i32 1
  store ptr %122, ptr %28, align 8, !tbaa !5
  br label %109, !llvm.loop !32

123:                                              ; preds = %118
  br label %124

124:                                              ; preds = %123, %100, %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %125 = load ptr, ptr %18, align 8, !tbaa !5
  %126 = load ptr, ptr %28, align 8, !tbaa !5
  %127 = ptrtoint ptr %125 to i64
  %128 = ptrtoint ptr %126 to i64
  %129 = sub i64 %127, %128
  %130 = trunc i64 %129 to i32
  %131 = mul nsw i32 %130, 4
  store i32 %131, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %132 = load ptr, ptr %18, align 8, !tbaa !5
  %133 = load ptr, ptr %28, align 8, !tbaa !5
  %134 = ptrtoint ptr %132 to i64
  %135 = ptrtoint ptr %133 to i64
  %136 = sub i64 %134, %135
  %137 = trunc i64 %136 to i32
  %138 = mul nsw i32 %137, 6
  store i32 %138, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %139 = load ptr, ptr %13, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.ImDrawList, ptr %139, i32 0, i32 1
  %141 = getelementptr inbounds %class.ImVector.0, ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 8, !tbaa !34
  %143 = load i32, ptr %30, align 4, !tbaa !11
  %144 = add nsw i32 %142, %143
  store i32 %144, ptr %31, align 4, !tbaa !11
  %145 = load ptr, ptr %13, align 8, !tbaa !5
  %146 = load i32, ptr %30, align 4, !tbaa !11
  %147 = load i32, ptr %29, align 4, !tbaa !11
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %145, i32 noundef %146, i32 noundef %147)
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %148 = load ptr, ptr %13, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.ImDrawList, ptr %148, i32 0, i32 7
  %150 = load ptr, ptr %149, align 8, !tbaa !42
  store ptr %150, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %151 = load ptr, ptr %13, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.ImDrawList, ptr %151, i32 0, i32 8
  %153 = load ptr, ptr %152, align 8, !tbaa !43
  store ptr %153, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %154 = load ptr, ptr %13, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.ImDrawList, ptr %154, i32 0, i32 6
  %156 = load i32, ptr %155, align 8, !tbaa !44
  store i32 %156, ptr %34, align 4, !tbaa !11
  br label %157

157:                                              ; preds = %616, %614, %219, %124
  %158 = load ptr, ptr %28, 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 %617

161:                                              ; preds = %157
  %162 = load i8, ptr %26, align 1, !tbaa !13, !range !28, !noundef !29
  %163 = trunc i8 %162 to i1
  br i1 %163, label %164, label %221

164:                                              ; preds = %161
  %165 = load ptr, ptr %27, align 8, !tbaa !5
  %166 = icmp ne ptr %165, null
  br i1 %166, label %185, label %167

167:                                              ; preds = %164
  %168 = load float, ptr %24, align 4, !tbaa !9
  %169 = load ptr, ptr %28, align 8, !tbaa !5
  %170 = load ptr, ptr %18, align 8, !tbaa !5
  %171 = load float, ptr %19, align 4, !tbaa !9
  %172 = load float, ptr %21, align 4, !tbaa !9
  %173 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %174 = load float, ptr %173, align 4, !tbaa !15
  %175 = fsub float %172, %174
  %176 = fsub float %171, %175
  %177 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(112) %48, float noundef %168, ptr noundef %169, ptr noundef %170, float noundef %176)
  store ptr %177, ptr %27, align 8, !tbaa !5
  %178 = load ptr, ptr %27, align 8, !tbaa !5
  %179 = load ptr, ptr %28, align 8, !tbaa !5
  %180 = icmp eq ptr %178, %179
  br i1 %180, label %181, label %184

181:                                              ; preds = %167
  %182 = load ptr, ptr %27, align 8, !tbaa !5
  %183 = getelementptr inbounds i8, ptr %182, i32 1
  store ptr %183, ptr %27, align 8, !tbaa !5
  br label %184

184:                                              ; preds = %181, %167
  br label %185

185:                                              ; preds = %184, %164
  %186 = load ptr, ptr %28, align 8, !tbaa !5
  %187 = load ptr, ptr %27, align 8, !tbaa !5
  %188 = icmp uge ptr %186, %187
  br i1 %188, label %189, label %220

189:                                              ; preds = %185
  %190 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %191 = load float, ptr %190, align 4, !tbaa !15
  store float %191, ptr %21, align 4, !tbaa !9
  %192 = load float, ptr %25, align 4, !tbaa !9
  %193 = load float, ptr %22, align 4, !tbaa !9
  %194 = fadd float %193, %192
  store float %194, ptr %22, align 4, !tbaa !9
  store ptr null, ptr %27, align 8, !tbaa !5
  br label %195

195:                                              ; preds = %218, %189
  %196 = load ptr, ptr %28, align 8, !tbaa !5
  %197 = load ptr, ptr %18, align 8, !tbaa !5
  %198 = icmp ult ptr %196, %197
  br i1 %198, label %199, label %219

199:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #9
  %200 = load ptr, ptr %28, align 8, !tbaa !5
  %201 = load i8, ptr %200, align 1, !tbaa !31
  store i8 %201, ptr %35, align 1, !tbaa !31
  %202 = load i8, ptr %35, align 1, !tbaa !31
  %203 = call noundef zeroext i1 @_ZL14ImCharIsBlankAc(i8 noundef signext %202)
  br i1 %203, label %204, label %207

204:                                              ; preds = %199
  %205 = load ptr, ptr %28, align 8, !tbaa !5
  %206 = getelementptr inbounds i8, ptr %205, i32 1
  store ptr %206, ptr %28, align 8, !tbaa !5
  br label %215

207:                                              ; preds = %199
  %208 = load i8, ptr %35, align 1, !tbaa !31
  %209 = sext i8 %208 to i32
  %210 = icmp eq i32 %209, 10
  br i1 %210, label %211, label %214

211:                                              ; preds = %207
  %212 = load ptr, ptr %28, align 8, !tbaa !5
  %213 = getelementptr inbounds i8, ptr %212, i32 1
  store ptr %213, ptr %28, align 8, !tbaa !5
  store i32 7, ptr %23, align 4
  br label %216

214:                                              ; preds = %207
  store i32 7, ptr %23, align 4
  br label %216

215:                                              ; preds = %204
  store i32 0, ptr %23, align 4
  br label %216

216:                                              ; preds = %215, %214, %211
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #9
  %217 = load i32, ptr %23, align 4
  switch i32 %217, label %674 [
    i32 0, label %218
    i32 7, label %219
  ]

218:                                              ; preds = %216
  br label %195, !llvm.loop !45

219:                                              ; preds = %216, %195
  br label %157, !llvm.loop !46

220:                                              ; preds = %185
  br label %221

221:                                              ; preds = %220, %161
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %222 = load ptr, ptr %28, align 8, !tbaa !5
  %223 = load i8, ptr %222, align 1, !tbaa !31
  %224 = sext i8 %223 to i32
  store i32 %224, ptr %36, align 4, !tbaa !11
  %225 = load i32, ptr %36, align 4, !tbaa !11
  %226 = icmp ult i32 %225, 128
  br i1 %226, label %227, label %230

227:                                              ; preds = %221
  %228 = load ptr, ptr %28, align 8, !tbaa !5
  %229 = getelementptr inbounds i8, ptr %228, i64 1
  store ptr %229, ptr %28, align 8, !tbaa !5
  br label %241

230:                                              ; preds = %221
  %231 = load ptr, ptr %28, align 8, !tbaa !5
  %232 = load ptr, ptr %18, align 8, !tbaa !5
  %233 = call noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef %36, ptr noundef %231, ptr noundef %232)
  %234 = load ptr, ptr %28, align 8, !tbaa !5
  %235 = sext i32 %233 to i64
  %236 = getelementptr inbounds i8, ptr %234, i64 %235
  store ptr %236, ptr %28, align 8, !tbaa !5
  %237 = load i32, ptr %36, align 4, !tbaa !11
  %238 = icmp eq i32 %237, 0
  br i1 %238, label %239, label %240

239:                                              ; preds = %230
  store i32 5, ptr %23, align 4
  br label %614

240:                                              ; preds = %230
  br label %241

241:                                              ; preds = %240, %227
  %242 = load i32, ptr %36, align 4, !tbaa !11
  %243 = icmp ult i32 %242, 32
  br i1 %243, label %244, label %292

244:                                              ; preds = %241
  %245 = load i32, ptr %36, align 4, !tbaa !11
  %246 = icmp eq i32 %245, 10
  br i1 %246, label %247, label %287

247:                                              ; preds = %244
  %248 = getelementptr inbounds %struct.ImVec2, ptr %11, i32 0, i32 0
  %249 = load float, ptr %248, align 4, !tbaa !15
  store float %249, ptr %21, align 4, !tbaa !9
  %250 = load float, ptr %25, align 4, !tbaa !9
  %251 = load float, ptr %22, align 4, !tbaa !9
  %252 = fadd float %251, %250
  store float %252, ptr %22, align 4, !tbaa !9
  %253 = load float, ptr %22, align 4, !tbaa !9
  %254 = load ptr, ptr %16, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.ImVec4, ptr %254, i32 0, i32 3
  %256 = load float, ptr %255, align 4, !tbaa !25
  %257 = fcmp ogt float %253, %256
  br i1 %257, label %258, label %259

258:                                              ; preds = %247
  store i32 5, ptr %23, align 4
  br label %614

259:                                              ; preds = %247
  %260 = load i8, ptr %26, align 1, !tbaa !13, !range !28, !noundef !29
  %261 = trunc i8 %260 to i1
  br i1 %261, label %286, label %262

262:                                              ; preds = %259
  %263 = load float, ptr %22, align 4, !tbaa !9
  %264 = load float, ptr %25, align 4, !tbaa !9
  %265 = fadd float %263, %264
  %266 = load ptr, ptr %16, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.ImVec4, ptr %266, i32 0, i32 1
  %268 = load float, ptr %267, align 4, !tbaa !30
  %269 = fcmp olt float %265, %268
  br i1 %269, label %270, label %286

270:                                              ; preds = %262
  br label %271

271:                                              ; preds = %282, %270
  %272 = load ptr, ptr %28, align 8, !tbaa !5
  %273 = load ptr, ptr %18, align 8, !tbaa !5
  %274 = icmp ult ptr %272, %273
  br i1 %274, label %275, label %280

275:                                              ; preds = %271
  %276 = load ptr, ptr %28, align 8, !tbaa !5
  %277 = load i8, ptr %276, align 1, !tbaa !31
  %278 = sext i8 %277 to i32
  %279 = icmp ne i32 %278, 10
  br label %280

280:                                              ; preds = %275, %271
  %281 = phi i1 [ false, %271 ], [ %279, %275 ]
  br i1 %281, label %282, label %285

282:                                              ; preds = %280
  %283 = load ptr, ptr %28, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i32 1
  store ptr %284, ptr %28, align 8, !tbaa !5
  br label %271, !llvm.loop !47

285:                                              ; preds = %280
  br label %286

286:                                              ; preds = %285, %262, %259
  store i32 4, ptr %23, align 4
  br label %614, !llvm.loop !46

287:                                              ; preds = %244
  %288 = load i32, ptr %36, align 4, !tbaa !11
  %289 = icmp eq i32 %288, 13
  br i1 %289, label %290, label %291

290:                                              ; preds = %287
  store i32 4, ptr %23, align 4
  br label %614, !llvm.loop !46

291:                                              ; preds = %287
  br label %292

292:                                              ; preds = %291, %241
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  store float 0.000000e+00, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %293 = load i32, ptr %36, align 4, !tbaa !11
  %294 = trunc i32 %293 to i16
  %295 = call noundef ptr @_ZNK6ImFont9FindGlyphEt(ptr noundef nonnull align 8 dereferenceable(112) %48, i16 noundef zeroext %294)
  store ptr %295, ptr %38, align 8, !tbaa !5
  %296 = load ptr, ptr %38, align 8, !tbaa !5
  %297 = icmp ne ptr %296, null
  br i1 %297, label %298, label %606

298:                                              ; preds = %292
  %299 = load ptr, ptr %38, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.ImFontGlyph, ptr %299, i32 0, i32 1
  %301 = load float, ptr %300, align 4, !tbaa !48
  %302 = load float, ptr %24, align 4, !tbaa !9
  %303 = fmul float %301, %302
  store float %303, ptr %37, align 4, !tbaa !9
  %304 = load i32, ptr %36, align 4, !tbaa !11
  %305 = icmp ne i32 %304, 32
  br i1 %305, label %306, label %605

306:                                              ; preds = %298
  %307 = load i32, ptr %36, align 4, !tbaa !11
  %308 = icmp ne i32 %307, 9
  br i1 %308, label %309, label %605

309:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  %310 = load float, ptr %21, align 4, !tbaa !9
  %311 = load ptr, ptr %38, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.ImFontGlyph, ptr %311, i32 0, i32 2
  %313 = load float, ptr %312, align 4, !tbaa !50
  %314 = load float, ptr %24, align 4, !tbaa !9
  %315 = call float @llvm.fmuladd.f32(float %313, float %314, float %310)
  store float %315, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %316 = load float, ptr %21, align 4, !tbaa !9
  %317 = load ptr, ptr %38, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ImFontGlyph, ptr %317, i32 0, i32 4
  %319 = load float, ptr %318, align 4, !tbaa !51
  %320 = load float, ptr %24, align 4, !tbaa !9
  %321 = call float @llvm.fmuladd.f32(float %319, float %320, float %316)
  store float %321, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %322 = load float, ptr %22, align 4, !tbaa !9
  %323 = load ptr, ptr %38, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.ImFontGlyph, ptr %323, i32 0, i32 3
  %325 = load float, ptr %324, align 4, !tbaa !52
  %326 = load float, ptr %24, align 4, !tbaa !9
  %327 = call float @llvm.fmuladd.f32(float %325, float %326, float %322)
  store float %327, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %328 = load float, ptr %22, align 4, !tbaa !9
  %329 = load ptr, ptr %38, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.ImFontGlyph, ptr %329, i32 0, i32 5
  %331 = load float, ptr %330, align 4, !tbaa !53
  %332 = load float, ptr %24, align 4, !tbaa !9
  %333 = call float @llvm.fmuladd.f32(float %331, float %332, float %328)
  store float %333, ptr %42, align 4, !tbaa !9
  %334 = load float, ptr %39, align 4, !tbaa !9
  %335 = load ptr, ptr %16, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ImVec4, ptr %335, i32 0, i32 2
  %337 = load float, ptr %336, align 4, !tbaa !54
  %338 = fcmp ole float %334, %337
  br i1 %338, label %339, label %601

339:                                              ; preds = %309
  %340 = load float, ptr %40, align 4, !tbaa !9
  %341 = load ptr, ptr %16, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.ImVec4, ptr %341, i32 0, i32 0
  %343 = load float, ptr %342, align 4, !tbaa !55
  %344 = fcmp oge float %340, %343
  br i1 %344, label %345, label %601

345:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %346 = load ptr, ptr %38, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.ImFontGlyph, ptr %346, i32 0, i32 6
  %348 = load float, ptr %347, align 4, !tbaa !56
  store float %348, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %349 = load ptr, ptr %38, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.ImFontGlyph, ptr %349, i32 0, i32 7
  %351 = load float, ptr %350, align 4, !tbaa !57
  store float %351, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %352 = load ptr, ptr %38, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.ImFontGlyph, ptr %352, i32 0, i32 8
  %354 = load float, ptr %353, align 4, !tbaa !58
  store float %354, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %355 = load ptr, ptr %38, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.ImFontGlyph, ptr %355, i32 0, i32 9
  %357 = load float, ptr %356, align 4, !tbaa !59
  store float %357, ptr %46, align 4, !tbaa !9
  %358 = load i8, ptr %20, align 1, !tbaa !13, !range !28, !noundef !29
  %359 = trunc i8 %358 to i1
  br i1 %359, label %360, label %467

360:                                              ; preds = %345
  %361 = load float, ptr %39, align 4, !tbaa !9
  %362 = load ptr, ptr %16, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.ImVec4, ptr %362, i32 0, i32 0
  %364 = load float, ptr %363, align 4, !tbaa !55
  %365 = fcmp olt float %361, %364
  br i1 %365, label %366, label %385

366:                                              ; preds = %360
  %367 = load float, ptr %43, align 4, !tbaa !9
  %368 = load float, ptr %40, align 4, !tbaa !9
  %369 = load ptr, ptr %16, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.ImVec4, ptr %369, i32 0, i32 0
  %371 = load float, ptr %370, align 4, !tbaa !55
  %372 = fsub float %368, %371
  %373 = load float, ptr %40, align 4, !tbaa !9
  %374 = load float, ptr %39, align 4, !tbaa !9
  %375 = fsub float %373, %374
  %376 = fdiv float %372, %375
  %377 = fsub float 1.000000e+00, %376
  %378 = load float, ptr %45, align 4, !tbaa !9
  %379 = load float, ptr %43, align 4, !tbaa !9
  %380 = fsub float %378, %379
  %381 = call float @llvm.fmuladd.f32(float %377, float %380, float %367)
  store float %381, ptr %43, align 4, !tbaa !9
  %382 = load ptr, ptr %16, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.ImVec4, ptr %382, i32 0, i32 0
  %384 = load float, ptr %383, align 4, !tbaa !55
  store float %384, ptr %39, align 4, !tbaa !9
  br label %385

385:                                              ; preds = %366, %360
  %386 = load float, ptr %41, align 4, !tbaa !9
  %387 = load ptr, ptr %16, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.ImVec4, ptr %387, i32 0, i32 1
  %389 = load float, ptr %388, align 4, !tbaa !30
  %390 = fcmp olt float %386, %389
  br i1 %390, label %391, label %410

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

410:                                              ; preds = %391, %385
  %411 = load float, ptr %40, align 4, !tbaa !9
  %412 = load ptr, ptr %16, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.ImVec4, ptr %412, i32 0, i32 2
  %414 = load float, ptr %413, align 4, !tbaa !54
  %415 = fcmp ogt float %411, %414
  br i1 %415, label %416, label %434

416:                                              ; preds = %410
  %417 = load float, ptr %43, align 4, !tbaa !9
  %418 = load ptr, ptr %16, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.ImVec4, ptr %418, i32 0, i32 2
  %420 = load float, ptr %419, align 4, !tbaa !54
  %421 = load float, ptr %39, align 4, !tbaa !9
  %422 = fsub float %420, %421
  %423 = load float, ptr %40, align 4, !tbaa !9
  %424 = load float, ptr %39, align 4, !tbaa !9
  %425 = fsub float %423, %424
  %426 = fdiv float %422, %425
  %427 = load float, ptr %45, align 4, !tbaa !9
  %428 = load float, ptr %43, align 4, !tbaa !9
  %429 = fsub float %427, %428
  %430 = call float @llvm.fmuladd.f32(float %426, float %429, float %417)
  store float %430, ptr %45, align 4, !tbaa !9
  %431 = load ptr, ptr %16, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.ImVec4, ptr %431, i32 0, i32 2
  %433 = load float, ptr %432, align 4, !tbaa !54
  store float %433, ptr %40, align 4, !tbaa !9
  br label %434

434:                                              ; preds = %416, %410
  %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 3
  %438 = load float, ptr %437, align 4, !tbaa !25
  %439 = fcmp ogt float %435, %438
  br i1 %439, label %440, label %458

440:                                              ; preds = %434
  %441 = load float, ptr %44, align 4, !tbaa !9
  %442 = load ptr, ptr %16, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.ImVec4, ptr %442, i32 0, i32 3
  %444 = load float, ptr %443, align 4, !tbaa !25
  %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 %46, align 4, !tbaa !9
  %452 = load float, ptr %44, 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 %46, align 4, !tbaa !9
  %455 = load ptr, ptr %16, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.ImVec4, ptr %455, i32 0, i32 3
  %457 = load float, ptr %456, align 4, !tbaa !25
  store float %457, ptr %42, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %440, %434
  %459 = load float, ptr %41, align 4, !tbaa !9
  %460 = load float, ptr %42, align 4, !tbaa !9
  %461 = fcmp oge float %459, %460
  br i1 %461, label %462, label %466

462:                                              ; preds = %458
  %463 = load float, ptr %37, align 4, !tbaa !9
  %464 = load float, ptr %21, align 4, !tbaa !9
  %465 = fadd float %464, %463
  store float %465, ptr %21, align 4, !tbaa !9
  store i32 4, ptr %23, align 4
  br label %598, !llvm.loop !46

466:                                              ; preds = %458
  br label %467

467:                                              ; preds = %466, %345
  %468 = load i32, ptr %34, align 4, !tbaa !11
  %469 = trunc i32 %468 to i16
  %470 = load ptr, ptr %33, align 8, !tbaa !5
  %471 = getelementptr inbounds i16, ptr %470, i64 0
  store i16 %469, ptr %471, align 2, !tbaa !60
  %472 = load i32, ptr %34, align 4, !tbaa !11
  %473 = add i32 %472, 1
  %474 = trunc i32 %473 to i16
  %475 = load ptr, ptr %33, align 8, !tbaa !5
  %476 = getelementptr inbounds i16, ptr %475, i64 1
  store i16 %474, ptr %476, align 2, !tbaa !60
  %477 = load i32, ptr %34, align 4, !tbaa !11
  %478 = add i32 %477, 2
  %479 = trunc i32 %478 to i16
  %480 = load ptr, ptr %33, align 8, !tbaa !5
  %481 = getelementptr inbounds i16, ptr %480, i64 2
  store i16 %479, ptr %481, align 2, !tbaa !60
  %482 = load i32, ptr %34, align 4, !tbaa !11
  %483 = trunc i32 %482 to i16
  %484 = load ptr, ptr %33, align 8, !tbaa !5
  %485 = getelementptr inbounds i16, ptr %484, i64 3
  store i16 %483, ptr %485, align 2, !tbaa !60
  %486 = load i32, ptr %34, align 4, !tbaa !11
  %487 = add i32 %486, 2
  %488 = trunc i32 %487 to i16
  %489 = load ptr, ptr %33, align 8, !tbaa !5
  %490 = getelementptr inbounds i16, ptr %489, i64 4
  store i16 %488, ptr %490, align 2, !tbaa !60
  %491 = load i32, ptr %34, align 4, !tbaa !11
  %492 = add i32 %491, 3
  %493 = trunc i32 %492 to i16
  %494 = load ptr, ptr %33, align 8, !tbaa !5
  %495 = getelementptr inbounds i16, ptr %494, i64 5
  store i16 %493, ptr %495, align 2, !tbaa !60
  %496 = load float, ptr %39, align 4, !tbaa !9
  %497 = load ptr, ptr %32, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.ImDrawVert, ptr %497, i64 0
  %499 = getelementptr inbounds %struct.ImDrawVert, ptr %498, i32 0, i32 0
  %500 = getelementptr inbounds %struct.ImVec2, ptr %499, i32 0, i32 0
  store float %496, ptr %500, align 4, !tbaa !61
  %501 = load float, ptr %41, align 4, !tbaa !9
  %502 = load ptr, ptr %32, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.ImDrawVert, ptr %502, i64 0
  %504 = getelementptr inbounds %struct.ImDrawVert, ptr %503, i32 0, i32 0
  %505 = getelementptr inbounds %struct.ImVec2, ptr %504, i32 0, i32 1
  store float %501, ptr %505, align 4, !tbaa !63
  %506 = load i32, ptr %15, align 4, !tbaa !11
  %507 = load ptr, ptr %32, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.ImDrawVert, ptr %507, i64 0
  %509 = getelementptr inbounds %struct.ImDrawVert, ptr %508, i32 0, i32 2
  store i32 %506, ptr %509, align 4, !tbaa !64
  %510 = load float, ptr %43, align 4, !tbaa !9
  %511 = load ptr, ptr %32, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.ImDrawVert, ptr %511, i64 0
  %513 = getelementptr inbounds %struct.ImDrawVert, ptr %512, i32 0, i32 1
  %514 = getelementptr inbounds %struct.ImVec2, ptr %513, i32 0, i32 0
  store float %510, ptr %514, align 4, !tbaa !65
  %515 = load float, ptr %44, align 4, !tbaa !9
  %516 = load ptr, ptr %32, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.ImDrawVert, ptr %516, i64 0
  %518 = getelementptr inbounds %struct.ImDrawVert, ptr %517, i32 0, i32 1
  %519 = getelementptr inbounds %struct.ImVec2, ptr %518, i32 0, i32 1
  store float %515, ptr %519, align 4, !tbaa !66
  %520 = load float, ptr %40, align 4, !tbaa !9
  %521 = load ptr, ptr %32, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.ImDrawVert, ptr %521, i64 1
  %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 !61
  %525 = load float, ptr %41, align 4, !tbaa !9
  %526 = load ptr, ptr %32, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.ImDrawVert, ptr %526, i64 1
  %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 !63
  %530 = load i32, ptr %15, align 4, !tbaa !11
  %531 = load ptr, ptr %32, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.ImDrawVert, ptr %531, i64 1
  %533 = getelementptr inbounds %struct.ImDrawVert, ptr %532, i32 0, i32 2
  store i32 %530, ptr %533, align 4, !tbaa !64
  %534 = load float, ptr %45, align 4, !tbaa !9
  %535 = load ptr, ptr %32, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.ImDrawVert, ptr %535, i64 1
  %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 !65
  %539 = load float, ptr %44, align 4, !tbaa !9
  %540 = load ptr, ptr %32, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.ImDrawVert, ptr %540, i64 1
  %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 !66
  %544 = load float, ptr %40, align 4, !tbaa !9
  %545 = load ptr, ptr %32, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.ImDrawVert, ptr %545, i64 2
  %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 !61
  %549 = load float, ptr %42, align 4, !tbaa !9
  %550 = load ptr, ptr %32, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.ImDrawVert, ptr %550, i64 2
  %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 !63
  %554 = load i32, ptr %15, align 4, !tbaa !11
  %555 = load ptr, ptr %32, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.ImDrawVert, ptr %555, i64 2
  %557 = getelementptr inbounds %struct.ImDrawVert, ptr %556, i32 0, i32 2
  store i32 %554, ptr %557, align 4, !tbaa !64
  %558 = load float, ptr %45, align 4, !tbaa !9
  %559 = load ptr, ptr %32, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.ImDrawVert, ptr %559, i64 2
  %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 !65
  %563 = load float, ptr %46, align 4, !tbaa !9
  %564 = load ptr, ptr %32, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.ImDrawVert, ptr %564, i64 2
  %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 !66
  %568 = load float, ptr %39, align 4, !tbaa !9
  %569 = load ptr, ptr %32, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.ImDrawVert, ptr %569, i64 3
  %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 !61
  %573 = load float, ptr %42, align 4, !tbaa !9
  %574 = load ptr, ptr %32, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.ImDrawVert, ptr %574, i64 3
  %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 !63
  %578 = load i32, ptr %15, align 4, !tbaa !11
  %579 = load ptr, ptr %32, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.ImDrawVert, ptr %579, i64 3
  %581 = getelementptr inbounds %struct.ImDrawVert, ptr %580, i32 0, i32 2
  store i32 %578, ptr %581, align 4, !tbaa !64
  %582 = load float, ptr %43, align 4, !tbaa !9
  %583 = load ptr, ptr %32, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.ImDrawVert, ptr %583, i64 3
  %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 !65
  %587 = load float, ptr %46, align 4, !tbaa !9
  %588 = load ptr, ptr %32, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.ImDrawVert, ptr %588, i64 3
  %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 !66
  %592 = load ptr, ptr %32, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.ImDrawVert, ptr %592, i64 4
  store ptr %593, ptr %32, align 8, !tbaa !5
  %594 = load i32, ptr %34, align 4, !tbaa !11
  %595 = add i32 %594, 4
  store i32 %595, ptr %34, align 4, !tbaa !11
  %596 = load ptr, ptr %33, align 8, !tbaa !5
  %597 = getelementptr inbounds i16, ptr %596, i64 6
  store ptr %597, ptr %33, align 8, !tbaa !5
  store i32 0, ptr %23, align 4
  br label %598

598:                                              ; preds = %467, %462
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  %599 = load i32, ptr %23, align 4
  switch i32 %599, label %602 [
    i32 0, label %600
  ]

600:                                              ; preds = %598
  br label %601

601:                                              ; preds = %600, %339, %309
  store i32 0, ptr %23, align 4
  br label %602

602:                                              ; preds = %601, %598
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  %603 = load i32, ptr %23, align 4
  switch i32 %603, label %607 [
    i32 0, label %604
  ]

604:                                              ; preds = %602
  br label %605

605:                                              ; preds = %604, %306, %298
  br label %606

606:                                              ; preds = %605, %292
  store i32 0, ptr %23, align 4
  br label %607

607:                                              ; preds = %606, %602
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  %608 = load i32, ptr %23, align 4
  switch i32 %608, label %613 [
    i32 0, label %609
  ]

609:                                              ; preds = %607
  %610 = load float, ptr %37, align 4, !tbaa !9
  %611 = load float, ptr %21, align 4, !tbaa !9
  %612 = fadd float %611, %610
  store float %612, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %23, align 4
  br label %613

613:                                              ; preds = %609, %607
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  br label %614

614:                                              ; preds = %613, %290, %286, %258, %239
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  %615 = load i32, ptr %23, align 4
  switch i32 %615, label %674 [
    i32 0, label %616
    i32 5, label %617
    i32 4, label %157
  ]

616:                                              ; preds = %614
  br label %157, !llvm.loop !46

617:                                              ; preds = %614, %157
  %618 = load ptr, ptr %13, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.ImDrawList, ptr %618, i32 0, i32 2
  %620 = load ptr, ptr %32, align 8, !tbaa !5
  %621 = load ptr, ptr %13, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.ImDrawList, ptr %621, i32 0, i32 2
  %623 = getelementptr inbounds %class.ImVector.1, ptr %622, i32 0, i32 2
  %624 = load ptr, ptr %623, align 8, !tbaa !67
  %625 = ptrtoint ptr %620 to i64
  %626 = ptrtoint ptr %624 to i64
  %627 = sub i64 %625, %626
  %628 = sdiv exact i64 %627, 20
  %629 = trunc i64 %628 to i32
  call void @_ZN8ImVectorI10ImDrawVertE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %619, i32 noundef %629)
  %630 = load ptr, ptr %13, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.ImDrawList, ptr %630, i32 0, i32 1
  %632 = load ptr, ptr %33, align 8, !tbaa !5
  %633 = load ptr, ptr %13, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.ImDrawList, ptr %633, i32 0, i32 1
  %635 = getelementptr inbounds %class.ImVector.0, ptr %634, i32 0, i32 2
  %636 = load ptr, ptr %635, align 8, !tbaa !68
  %637 = ptrtoint ptr %632 to i64
  %638 = ptrtoint ptr %636 to i64
  %639 = sub i64 %637, %638
  %640 = sdiv exact i64 %639, 2
  %641 = trunc i64 %640 to i32
  call void @_ZN8ImVectorItE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %631, i32 noundef %641)
  %642 = load i32, ptr %31, align 4, !tbaa !11
  %643 = load ptr, ptr %13, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.ImDrawList, ptr %643, i32 0, i32 1
  %645 = getelementptr inbounds %class.ImVector.0, ptr %644, i32 0, i32 0
  %646 = load i32, ptr %645, align 8, !tbaa !34
  %647 = sub nsw i32 %642, %646
  %648 = load ptr, ptr %13, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.ImDrawList, ptr %648, i32 0, i32 0
  %650 = load ptr, ptr %13, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.ImDrawList, ptr %650, i32 0, i32 0
  %652 = getelementptr inbounds %class.ImVector, ptr %651, i32 0, i32 0
  %653 = load i32, ptr %652, align 8, !tbaa !69
  %654 = sub nsw i32 %653, 1
  %655 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN8ImVectorI9ImDrawCmdEixEi(ptr noundef nonnull align 8 dereferenceable(16) %649, i32 noundef %654)
  %656 = getelementptr inbounds %struct.ImDrawCmd, ptr %655, i32 0, i32 0
  %657 = load i32, ptr %656, align 8, !tbaa !70
  %658 = sub i32 %657, %647
  store i32 %658, ptr %656, align 8, !tbaa !70
  %659 = load ptr, ptr %32, align 8, !tbaa !5
  %660 = load ptr, ptr %13, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.ImDrawList, ptr %660, i32 0, i32 7
  store ptr %659, ptr %661, align 8, !tbaa !42
  %662 = load ptr, ptr %33, align 8, !tbaa !5
  %663 = load ptr, ptr %13, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.ImDrawList, ptr %663, i32 0, i32 8
  store ptr %662, ptr %664, align 8, !tbaa !43
  %665 = load ptr, ptr %13, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.ImDrawList, ptr %665, i32 0, i32 2
  %667 = getelementptr inbounds %class.ImVector.1, ptr %666, i32 0, i32 0
  %668 = load i32, ptr %667, align 8, !tbaa !72
  %669 = load ptr, ptr %13, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.ImDrawList, ptr %669, i32 0, i32 6
  store i32 %668, ptr %670, align 8, !tbaa !44
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #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 %671

671:                                              ; preds = %617, %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  %672 = load i32, ptr %23, align 4
  switch i32 %672, label %674 [
    i32 0, label %673
    i32 1, label %673
  ]

673:                                              ; preds = %671, %671
  ret void

674:                                              ; preds = %671, %614, %216
  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 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!26, !10, i64 4}
!31 = !{!7, !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!35, !12, i64 16}
!35 = !{!"_ZTS10ImDrawList", !36, i64 0, !21, i64 16, !37, i64 32, !12, i64 48, !6, i64 56, !6, i64 64, !12, i64 72, !6, i64 80, !6, i64 88, !38, i64 96, !39, i64 112, !40, i64 128, !12, i64 144, !12, i64 148, !41, i64 152}
!36 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !12, i64 0, !12, i64 4, !6, i64 8}
!37 = !{!"_ZTS8ImVectorI10ImDrawVertE", !12, i64 0, !12, i64 4, !6, i64 8}
!38 = !{!"_ZTS8ImVectorI6ImVec4E", !12, i64 0, !12, i64 4, !6, i64 8}
!39 = !{!"_ZTS8ImVectorIPvE", !12, i64 0, !12, i64 4, !6, i64 8}
!40 = !{!"_ZTS8ImVectorI6ImVec2E", !12, i64 0, !12, i64 4, !6, i64 8}
!41 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !12, i64 0, !12, i64 4, !6, i64 8}
!42 = !{!35, !6, i64 80}
!43 = !{!35, !6, i64 88}
!44 = !{!35, !12, i64 72}
!45 = distinct !{!45, !33}
!46 = distinct !{!46, !33}
!47 = distinct !{!47, !33}
!48 = !{!49, !10, i64 4}
!49 = !{!"_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}
!50 = !{!49, !10, i64 8}
!51 = !{!49, !10, i64 16}
!52 = !{!49, !10, i64 12}
!53 = !{!49, !10, i64 20}
!54 = !{!26, !10, i64 8}
!55 = !{!26, !10, i64 0}
!56 = !{!49, !10, i64 24}
!57 = !{!49, !10, i64 28}
!58 = !{!49, !10, i64 32}
!59 = !{!49, !10, i64 36}
!60 = !{!22, !22, i64 0}
!61 = !{!62, !10, i64 0}
!62 = !{!"_ZTS10ImDrawVert", !16, i64 0, !16, i64 8, !12, i64 16}
!63 = !{!62, !10, i64 4}
!64 = !{!62, !12, i64 16}
!65 = !{!62, !10, i64 8}
!66 = !{!62, !10, i64 12}
!67 = !{!35, !6, i64 40}
!68 = !{!35, !6, i64 24}
!69 = !{!35, !12, i64 0}
!70 = !{!71, !12, i64 0}
!71 = !{!"_ZTS9ImDrawCmd", !12, i64 0, !26, i64 4, !6, i64 24, !6, i64 32, !6, i64 40}
!72 = !{!35, !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 = ptrtoint ptr %6 to i64
  %12 = alloca i32, align 4
  %.not = icmp eq ptr %7, null
  br i1 %.not, label %13, label %16

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

16:                                               ; preds = %13, %10
  %.0248 = phi ptr [ %7, %10 ], [ %15, %13 ]
  %.0248428 = ptrtoint ptr %.0248 to i64
  %17 = getelementptr inbounds i8, ptr %0, i64 8
  %18 = fptosi <2 x float> %3 to <2 x i32>
  %19 = sitofp <2 x i32> %18 to <2 x float>
  %20 = load <2 x float>, ptr %17, align 8, !tbaa !5
  %21 = fadd <2 x float> %20, %19
  %22 = getelementptr inbounds i8, ptr %5, i64 12
  %23 = load float, ptr %22, align 4, !tbaa !9
  %24 = extractelement <2 x float> %21, i64 1
  %25 = fcmp ogt float %24, %23
  br i1 %25, label %257, label %26

26:                                               ; preds = %16
  %27 = load float, ptr %0, align 8, !tbaa !11
  %28 = fdiv float %2, %27
  %29 = fmul float %27, %28
  %30 = fcmp ogt float %8, 0.000000e+00
  br i1 %30, label %.critedge, label %31

31:                                               ; preds = %26
  %32 = fadd float %24, %29
  %33 = getelementptr inbounds i8, ptr %5, i64 4
  %34 = load float, ptr %33, align 4, !tbaa !21
  %35 = fcmp olt float %32, %34
  %36 = icmp ugt ptr %.0248, %6
  %or.cond = select i1 %35, i1 %36, i1 false
  br i1 %or.cond, label %.lr.ph.preheader, label %.critedge

.lr.ph.preheader:                                 ; preds = %31
  %37 = sub i64 %.0248428, %11
  %scevgep = getelementptr i8, ptr %6, i64 %37
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %39
  %.0282381 = phi ptr [ %40, %39 ], [ %6, %.lr.ph.preheader ]
  %38 = load i8, ptr %.0282381, align 1, !tbaa !22
  %.not312 = icmp eq i8 %38, 10
  br i1 %.not312, label %.critedge.loopexit, label %39

39:                                               ; preds = %.lr.ph
  %40 = getelementptr inbounds i8, ptr %.0282381, i64 1
  %exitcond.not = icmp eq ptr %40, %.0248
  br i1 %exitcond.not, label %.critedge.loopexit, label %.lr.ph, !llvm.loop !23

.critedge.loopexit:                               ; preds = %.lr.ph, %39
  %.1283.ph = phi ptr [ %.0282381, %.lr.ph ], [ %scevgep, %39 ]
  %.pre = ptrtoint ptr %.1283.ph to i64
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %31, %26
  %.pre-phi = phi i64 [ %.pre, %.critedge.loopexit ], [ %11, %31 ], [ %11, %26 ]
  %.1283 = phi ptr [ %.1283.ph, %.critedge.loopexit ], [ %6, %31 ], [ %6, %26 ]
  %41 = sub i64 %.0248428, %.pre-phi
  %42 = trunc i64 %41 to i32
  %43 = shl nsw i32 %42, 2
  %44 = mul nsw i32 %42, 6
  %45 = getelementptr inbounds i8, ptr %1, i64 16
  %46 = load i32, ptr %45, align 8, !tbaa !25
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %1, i32 noundef %44, i32 noundef %43)
  %47 = getelementptr inbounds i8, ptr %1, i64 80
  %48 = load ptr, ptr %47, align 8, !tbaa !33
  %49 = getelementptr inbounds i8, ptr %1, i64 88
  %50 = load ptr, ptr %49, align 8, !tbaa !34
  %51 = getelementptr inbounds i8, ptr %1, i64 72
  %52 = icmp ult ptr %.1283, %.0248
  br i1 %52, label %.lr.ph392.lr.ph, label %.loopexit

.lr.ph392.lr.ph:                                  ; preds = %.critedge
  %53 = load i32, ptr %51, align 8, !tbaa !35
  %54 = getelementptr inbounds i8, ptr %5, i64 4
  %55 = getelementptr inbounds i8, ptr %5, i64 8
  %56 = insertelement <4 x float> poison, float %28, i64 0
  %57 = shufflevector <4 x float> %56, <4 x float> poison, <4 x i32> zeroinitializer
  br label %.lr.ph392

.lr.ph392:                                        ; preds = %.lr.ph392.lr.ph, %.critedge4
  %.0249.ph413 = phi i32 [ %53, %.lr.ph392.lr.ph ], [ %.6, %.critedge4 ]
  %.0251.ph412 = phi ptr [ %50, %.lr.ph392.lr.ph ], [ %.6257, %.critedge4 ]
  %.0258.ph411 = phi ptr [ %48, %.lr.ph392.lr.ph ], [ %.6264, %.critedge4 ]
  %.2284.ph408 = phi ptr [ %.1283, %.lr.ph392.lr.ph ], [ %.9, %.critedge4 ]
  %.0290.ph407 = phi ptr [ null, %.lr.ph392.lr.ph ], [ %.us-phi399, %.critedge4 ]
  %58 = phi <2 x float> [ %21, %.lr.ph392.lr.ph ], [ %232, %.critedge4 ]
  br i1 %30, label %.lr.ph392.split.us, label %.split.us

.lr.ph392.split.us:                               ; preds = %.lr.ph392, %.split.loop.exit384.us
  %.2284389.us = phi ptr [ %.5287.us, %.split.loop.exit384.us ], [ %.2284.ph408, %.lr.ph392 ]
  %.0290388.us = phi ptr [ null, %.split.loop.exit384.us ], [ %.0290.ph407, %.lr.ph392 ]
  %59 = phi <2 x float> [ %77, %.split.loop.exit384.us ], [ %58, %.lr.ph392 ]
  %.not313.us = icmp eq ptr %.0290388.us, null
  br i1 %.not313.us, label %60, label %66

60:                                               ; preds = %.lr.ph392.split.us
  %61 = fsub <2 x float> %21, %59
  %62 = extractelement <2 x float> %61, i64 0
  %63 = fadd float %62, %8
  %64 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef %28, ptr noundef %.2284389.us, ptr noundef nonnull %.0248, float noundef %63)
  %65 = icmp eq ptr %64, %.2284389.us
  %spec.select.idx.us = zext i1 %65 to i64
  %spec.select.us = getelementptr inbounds i8, ptr %64, i64 %spec.select.idx.us
  br label %66

66:                                               ; preds = %60, %.lr.ph392.split.us
  %.1291.us = phi ptr [ %.0290388.us, %.lr.ph392.split.us ], [ %spec.select.us, %60 ]
  %.not314.us = icmp ult ptr %.2284389.us, %.1291.us
  br i1 %.not314.us, label %.split.us, label %67

67:                                               ; preds = %66
  %68 = extractelement <2 x float> %59, i64 1
  %69 = fadd float %29, %68
  br label %70

70:                                               ; preds = %72, %67
  %.3285.us = phi ptr [ %.2284389.us, %67 ], [ %75, %72 ]
  %71 = icmp ult ptr %.3285.us, %.0248
  br i1 %71, label %72, label %.split.loop.exit384.us

72:                                               ; preds = %70
  %73 = load i8, ptr %.3285.us, align 1, !tbaa !22
  %74 = call noundef zeroext i1 @_ZL14ImCharIsBlankAc(i8 noundef signext %73)
  %75 = getelementptr inbounds i8, ptr %.3285.us, i64 1
  br i1 %74, label %70, label %.split.loop.exit.us

.split.loop.exit384.us:                           ; preds = %70, %.split.loop.exit.us
  %.5287.us = phi ptr [ %spec.select318.le.us, %.split.loop.exit.us ], [ %.3285.us, %70 ]
  %76 = icmp ult ptr %.5287.us, %.0248
  %77 = insertelement <2 x float> %21, float %69, i64 1
  br i1 %76, label %.lr.ph392.split.us, label %.loopexit, !llvm.loop !36

.split.loop.exit.us:                              ; preds = %72
  %78 = icmp eq i8 %73, 10
  %spec.select318.le.us = select i1 %78, ptr %75, ptr %.3285.us
  br label %.split.loop.exit384.us

.split.us:                                        ; preds = %66, %.lr.ph392
  %.us-phi = phi ptr [ %.2284.ph408, %.lr.ph392 ], [ %.2284389.us, %66 ]
  %.us-phi399 = phi ptr [ %.0290.ph407, %.lr.ph392 ], [ %.1291.us, %66 ]
  %79 = phi <2 x float> [ %58, %.lr.ph392 ], [ %59, %66 ]
  %80 = shufflevector <2 x float> %79, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #10
  %81 = load i8, ptr %.us-phi, align 1, !tbaa !22
  %82 = sext i8 %81 to i32
  store i32 %82, ptr %12, align 4, !tbaa !37
  %83 = icmp sgt i8 %81, -1
  br i1 %83, label %84, label %86

84:                                               ; preds = %.split.us
  %85 = getelementptr inbounds i8, ptr %.us-phi, i64 1
  br label %92

86:                                               ; preds = %.split.us
  %87 = call noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef nonnull %12, ptr noundef nonnull %.us-phi, ptr noundef nonnull %.0248)
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %.us-phi, i64 %88
  %90 = load i32, ptr %12, align 4, !tbaa !37
  %91 = icmp eq i32 %90, 0
  br i1 %91, label %.critedge4.thread, label %92

92:                                               ; preds = %86, %84
  %93 = phi i32 [ %90, %86 ], [ %82, %84 ]
  %.6288 = phi ptr [ %89, %86 ], [ %85, %84 ]
  %.6288430 = ptrtoint ptr %.6288 to i64
  %94 = icmp ult i32 %93, 32
  br i1 %94, label %95, label %112

95:                                               ; preds = %92
  switch i32 %93, label %112 [
    i32 10, label %96
    i32 13, label %.critedge4
  ], !llvm.loop !36

96:                                               ; preds = %95
  %97 = extractelement <2 x float> %79, i64 1
  %98 = fadd float %29, %97
  %99 = load float, ptr %22, align 4, !tbaa !9
  %100 = fcmp ogt float %98, %99
  br i1 %100, label %.critedge4.thread, label %101

101:                                              ; preds = %96
  %102 = insertelement <2 x float> %21, float %98, i64 1
  br i1 %30, label %.critedge4, label %103, !llvm.loop !36

103:                                              ; preds = %101
  %104 = fadd float %29, %98
  %105 = load float, ptr %54, align 4, !tbaa !21
  %106 = fcmp olt float %104, %105
  %107 = icmp ult ptr %.6288, %.0248
  %or.cond416 = select i1 %106, i1 %107, i1 false
  br i1 %or.cond416, label %.lr.ph403.preheader, label %.critedge4, !llvm.loop !36

.lr.ph403.preheader:                              ; preds = %103
  %scevgep429 = getelementptr i8, ptr %.6288, i64 %.0248428
  %108 = sub i64 0, %.6288430
  %scevgep431 = getelementptr i8, ptr %scevgep429, i64 %108
  br label %.lr.ph403

.lr.ph403:                                        ; preds = %.lr.ph403.preheader, %110
  %.7289402 = phi ptr [ %111, %110 ], [ %.6288, %.lr.ph403.preheader ]
  %109 = load i8, ptr %.7289402, align 1, !tbaa !22
  %.not316 = icmp eq i8 %109, 10
  br i1 %.not316, label %.critedge4, label %110, !llvm.loop !36

110:                                              ; preds = %.lr.ph403
  %111 = getelementptr inbounds i8, ptr %.7289402, i64 1
  %exitcond432.not = icmp eq ptr %111, %scevgep431
  br i1 %exitcond432.not, label %.critedge4, label %.lr.ph403, !llvm.loop !38

112:                                              ; preds = %95, %92
  %113 = trunc i32 %93 to i16
  %114 = call noundef ptr @_ZNK6ImFont9FindGlyphEt(ptr noundef nonnull align 8 dereferenceable(112) %0, i16 noundef zeroext %113)
  %.not315 = icmp eq ptr %114, null
  br i1 %.not315, label %.thread335, label %115

115:                                              ; preds = %112
  %116 = getelementptr inbounds i8, ptr %114, i64 4
  %117 = load float, ptr %116, align 4, !tbaa !39
  %118 = fmul float %28, %117
  %119 = load i32, ptr %12, align 4
  switch i32 %119, label %120 [
    i32 32, label %.thread335
    i32 9, label %.thread335
  ]

120:                                              ; preds = %115
  %121 = getelementptr inbounds i8, ptr %114, i64 8
  %122 = load <4 x float>, ptr %121, align 4, !tbaa !5
  %123 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %122, <4 x float> %57, <4 x float> %80)
  %124 = load float, ptr %55, align 4, !tbaa !41
  %125 = extractelement <4 x float> %123, i64 0
  %126 = fcmp ugt float %125, %124
  br i1 %126, label %.thread352, label %127

127:                                              ; preds = %120
  %128 = load float, ptr %5, align 4, !tbaa !42
  %129 = extractelement <4 x float> %123, i64 2
  %130 = fcmp ult float %129, %128
  br i1 %130, label %.thread352, label %131

131:                                              ; preds = %127
  %132 = getelementptr inbounds i8, ptr %114, i64 24
  %133 = load float, ptr %132, align 4, !tbaa !43
  %134 = getelementptr inbounds i8, ptr %114, i64 28
  %135 = load float, ptr %134, align 4, !tbaa !44
  %136 = getelementptr inbounds i8, ptr %114, i64 32
  %137 = load float, ptr %136, align 4, !tbaa !45
  %138 = getelementptr inbounds i8, ptr %114, i64 36
  %139 = load float, ptr %138, align 4, !tbaa !46
  br i1 %9, label %140, label %185

140:                                              ; preds = %131
  %141 = fcmp olt float %125, %128
  br i1 %141, label %142, label %149

142:                                              ; preds = %140
  %143 = fsub float %129, %128
  %144 = fsub float %129, %125
  %145 = fdiv float %143, %144
  %146 = fsub float 1.000000e+00, %145
  %147 = fsub float %137, %133
  %148 = call float @llvm.fmuladd.f32(float %146, float %147, float %133)
  br label %149

149:                                              ; preds = %142, %140
  %.0244 = phi float [ %128, %142 ], [ %125, %140 ]
  %.0236 = phi float [ %148, %142 ], [ %133, %140 ]
  %150 = load float, ptr %54, align 4, !tbaa !21
  %151 = extractelement <4 x float> %123, i64 1
  %152 = fcmp olt float %151, %150
  br i1 %152, label %153, label %161

153:                                              ; preds = %149
  %154 = extractelement <4 x float> %123, i64 3
  %155 = fsub float %154, %150
  %156 = fsub float %154, %151
  %157 = fdiv float %155, %156
  %158 = fsub float 1.000000e+00, %157
  %159 = fsub float %139, %135
  %160 = call float @llvm.fmuladd.f32(float %158, float %159, float %135)
  br label %161

161:                                              ; preds = %153, %149
  %.0240 = phi float [ %150, %153 ], [ %151, %149 ]
  %.0234 = phi float [ %160, %153 ], [ %135, %149 ]
  %162 = fcmp ogt float %129, %124
  br i1 %162, label %163, label %169

163:                                              ; preds = %161
  %164 = fsub float %124, %.0244
  %165 = fsub float %129, %.0244
  %166 = fdiv float %164, %165
  %167 = fsub float %137, %.0236
  %168 = call float @llvm.fmuladd.f32(float %166, float %167, float %.0236)
  br label %169

169:                                              ; preds = %163, %161
  %.0242 = phi float [ %124, %163 ], [ %129, %161 ]
  %.0232 = phi float [ %168, %163 ], [ %137, %161 ]
  %170 = load float, ptr %22, align 4, !tbaa !9
  %171 = extractelement <4 x float> %123, i64 3
  %172 = fcmp ogt float %171, %170
  br i1 %172, label %173, label %179

173:                                              ; preds = %169
  %174 = fsub float %170, %.0240
  %175 = fsub float %171, %.0240
  %176 = fdiv float %174, %175
  %177 = fsub float %139, %.0234
  %178 = call float @llvm.fmuladd.f32(float %176, float %177, float %.0234)
  br label %179

179:                                              ; preds = %173, %169
  %.0238 = phi float [ %170, %173 ], [ %171, %169 ]
  %.0 = phi float [ %178, %173 ], [ %139, %169 ]
  %180 = fcmp ult float %.0240, %.0238
  %181 = insertelement <4 x float> poison, float %.0244, i64 0
  %182 = insertelement <4 x float> %181, float %.0240, i64 1
  %183 = insertelement <4 x float> %182, float %.0242, i64 2
  %184 = insertelement <4 x float> %183, float %.0238, i64 3
  br i1 %180, label %185, label %228

185:                                              ; preds = %131, %179
  %.1237 = phi float [ %.0236, %179 ], [ %133, %131 ]
  %.1235 = phi float [ %.0234, %179 ], [ %135, %131 ]
  %.1233 = phi float [ %.0232, %179 ], [ %137, %131 ]
  %.1 = phi float [ %.0, %179 ], [ %139, %131 ]
  %186 = phi <4 x float> [ %184, %179 ], [ %123, %131 ]
  %187 = trunc i32 %.0249.ph413 to i16
  store i16 %187, ptr %.0251.ph412, align 2, !tbaa !47
  %188 = add i16 %187, 1
  %189 = getelementptr inbounds i8, ptr %.0251.ph412, i64 2
  store i16 %188, ptr %189, align 2, !tbaa !47
  %190 = add i16 %187, 2
  %191 = getelementptr inbounds i8, ptr %.0251.ph412, i64 4
  store i16 %190, ptr %191, align 2, !tbaa !47
  %192 = getelementptr inbounds i8, ptr %.0251.ph412, i64 6
  store i16 %187, ptr %192, align 2, !tbaa !47
  %193 = getelementptr inbounds i8, ptr %.0251.ph412, i64 8
  store i16 %190, ptr %193, align 2, !tbaa !47
  %194 = add i16 %187, 3
  %195 = getelementptr inbounds i8, ptr %.0251.ph412, i64 10
  store i16 %194, ptr %195, align 2, !tbaa !47
  %196 = extractelement <4 x float> %186, i64 0
  store float %196, ptr %.0258.ph411, align 4, !tbaa !48
  %197 = getelementptr inbounds i8, ptr %.0258.ph411, i64 4
  %198 = extractelement <4 x float> %186, i64 1
  store float %198, ptr %197, align 4, !tbaa !50
  %199 = getelementptr inbounds i8, ptr %.0258.ph411, i64 16
  store i32 %4, ptr %199, align 4, !tbaa !51
  %200 = getelementptr inbounds i8, ptr %.0258.ph411, i64 8
  store float %.1237, ptr %200, align 4, !tbaa !52
  %201 = getelementptr inbounds i8, ptr %.0258.ph411, i64 12
  store float %.1235, ptr %201, align 4, !tbaa !53
  %202 = getelementptr inbounds i8, ptr %.0258.ph411, i64 20
  %203 = extractelement <4 x float> %186, i64 2
  store float %203, ptr %202, align 4, !tbaa !48
  %204 = getelementptr inbounds i8, ptr %.0258.ph411, i64 24
  store float %198, ptr %204, align 4, !tbaa !50
  %205 = getelementptr inbounds i8, ptr %.0258.ph411, i64 36
  store i32 %4, ptr %205, align 4, !tbaa !51
  %206 = getelementptr inbounds i8, ptr %.0258.ph411, i64 28
  store float %.1233, ptr %206, align 4, !tbaa !52
  %207 = getelementptr inbounds i8, ptr %.0258.ph411, i64 32
  store float %.1235, ptr %207, align 4, !tbaa !53
  %208 = getelementptr inbounds i8, ptr %.0258.ph411, i64 40
  store float %203, ptr %208, align 4, !tbaa !48
  %209 = getelementptr inbounds i8, ptr %.0258.ph411, i64 44
  %210 = extractelement <4 x float> %186, i64 3
  store float %210, ptr %209, align 4, !tbaa !50
  %211 = getelementptr inbounds i8, ptr %.0258.ph411, i64 56
  store i32 %4, ptr %211, align 4, !tbaa !51
  %212 = getelementptr inbounds i8, ptr %.0258.ph411, i64 48
  store float %.1233, ptr %212, align 4, !tbaa !52
  %213 = getelementptr inbounds i8, ptr %.0258.ph411, i64 52
  store float %.1, ptr %213, align 4, !tbaa !53
  %214 = getelementptr inbounds i8, ptr %.0258.ph411, i64 60
  store float %196, ptr %214, align 4, !tbaa !48
  %215 = getelementptr inbounds i8, ptr %.0258.ph411, i64 64
  store float %210, ptr %215, align 4, !tbaa !50
  %216 = getelementptr inbounds i8, ptr %.0258.ph411, i64 76
  store i32 %4, ptr %216, align 4, !tbaa !51
  %217 = getelementptr inbounds i8, ptr %.0258.ph411, i64 68
  store float %.1237, ptr %217, align 4, !tbaa !52
  %218 = getelementptr inbounds i8, ptr %.0258.ph411, i64 72
  store float %.1, ptr %218, align 4, !tbaa !53
  %219 = getelementptr inbounds i8, ptr %.0258.ph411, i64 80
  %220 = add i32 %.0249.ph413, 4
  %221 = getelementptr inbounds i8, ptr %.0251.ph412, i64 12
  br label %.thread352

.thread335:                                       ; preds = %115, %115, %112
  %.1247.ph = phi float [ %118, %115 ], [ 0.000000e+00, %112 ], [ %118, %115 ]
  %222 = extractelement <2 x float> %79, i64 0
  %223 = fadd float %222, %.1247.ph
  %224 = insertelement <2 x float> %79, float %223, i64 0
  br label %.critedge4

.thread352:                                       ; preds = %127, %120, %185
  %.3261.ph = phi ptr [ %219, %185 ], [ %.0258.ph411, %120 ], [ %.0258.ph411, %127 ]
  %.3254.ph = phi ptr [ %221, %185 ], [ %.0251.ph412, %120 ], [ %.0251.ph412, %127 ]
  %.3.ph = phi i32 [ %220, %185 ], [ %.0249.ph413, %120 ], [ %.0249.ph413, %127 ]
  %225 = extractelement <2 x float> %79, i64 0
  %226 = fadd float %225, %118
  %227 = insertelement <2 x float> %79, float %226, i64 0
  br label %.critedge4

228:                                              ; preds = %179
  %229 = extractelement <2 x float> %79, i64 0
  %230 = fadd float %229, %118
  %231 = insertelement <2 x float> %79, float %230, i64 0
  br label %.critedge4

.critedge4.thread:                                ; preds = %86, %96
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #10
  br label %.loopexit

.critedge4:                                       ; preds = %.lr.ph403, %110, %228, %.thread352, %.thread335, %95, %101, %103
  %.9 = phi ptr [ %.6288, %101 ], [ %.6288, %103 ], [ %.6288, %95 ], [ %.6288, %.thread335 ], [ %.6288, %.thread352 ], [ %.6288, %228 ], [ %.7289402, %.lr.ph403 ], [ %scevgep431, %110 ]
  %.6264 = phi ptr [ %.0258.ph411, %101 ], [ %.0258.ph411, %103 ], [ %.0258.ph411, %95 ], [ %.0258.ph411, %.thread335 ], [ %.3261.ph, %.thread352 ], [ %.0258.ph411, %228 ], [ %.0258.ph411, %110 ], [ %.0258.ph411, %.lr.ph403 ]
  %.6257 = phi ptr [ %.0251.ph412, %101 ], [ %.0251.ph412, %103 ], [ %.0251.ph412, %95 ], [ %.0251.ph412, %.thread335 ], [ %.3254.ph, %.thread352 ], [ %.0251.ph412, %228 ], [ %.0251.ph412, %110 ], [ %.0251.ph412, %.lr.ph403 ]
  %.6 = phi i32 [ %.0249.ph413, %101 ], [ %.0249.ph413, %103 ], [ %.0249.ph413, %95 ], [ %.0249.ph413, %.thread335 ], [ %.3.ph, %.thread352 ], [ %.0249.ph413, %228 ], [ %.0249.ph413, %110 ], [ %.0249.ph413, %.lr.ph403 ]
  %232 = phi <2 x float> [ %102, %101 ], [ %102, %103 ], [ %79, %95 ], [ %224, %.thread335 ], [ %227, %.thread352 ], [ %231, %228 ], [ %102, %110 ], [ %102, %.lr.ph403 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #10
  %233 = icmp ult ptr %.9, %.0248
  br i1 %233, label %.lr.ph392, label %.loopexit

.loopexit:                                        ; preds = %.critedge4, %.split.loop.exit384.us, %.critedge, %.critedge4.thread
  %.0258.ph380 = phi ptr [ %.0258.ph411, %.critedge4.thread ], [ %48, %.critedge ], [ %.0258.ph411, %.split.loop.exit384.us ], [ %.6264, %.critedge4 ]
  %.0251.ph378 = phi ptr [ %.0251.ph412, %.critedge4.thread ], [ %50, %.critedge ], [ %.0251.ph412, %.split.loop.exit384.us ], [ %.6257, %.critedge4 ]
  %234 = getelementptr inbounds i8, ptr %1, i64 32
  %235 = getelementptr inbounds i8, ptr %1, i64 40
  %236 = load ptr, ptr %235, align 8, !tbaa !54
  %237 = ptrtoint ptr %.0258.ph380 to i64
  %238 = ptrtoint ptr %236 to i64
  %239 = sub i64 %237, %238
  %240 = sdiv exact i64 %239, 20
  %241 = trunc i64 %240 to i32
  call void @_ZN8ImVectorI10ImDrawVertE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %234, i32 noundef %241)
  %242 = getelementptr inbounds i8, ptr %1, i64 24
  %243 = load ptr, ptr %242, align 8, !tbaa !55
  %244 = ptrtoint ptr %.0251.ph378 to i64
  %245 = ptrtoint ptr %243 to i64
  %246 = sub i64 %244, %245
  %247 = lshr exact i64 %246, 1
  %248 = trunc i64 %247 to i32
  call void @_ZN8ImVectorItE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %45, i32 noundef %248)
  %249 = load i32, ptr %45, align 8, !tbaa !25
  %250 = add i32 %44, %46
  %.neg = sub i32 %249, %250
  %251 = load i32, ptr %1, align 8, !tbaa !56
  %252 = add nsw i32 %251, -1
  %253 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN8ImVectorI9ImDrawCmdEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1, i32 noundef %252)
  %254 = load i32, ptr %253, align 8, !tbaa !57
  %255 = add i32 %.neg, %254
  store i32 %255, ptr %253, align 8, !tbaa !57
  store ptr %.0258.ph380, ptr %47, align 8, !tbaa !33
  store ptr %.0251.ph378, ptr %49, align 8, !tbaa !34
  %256 = load i32, ptr %234, align 8, !tbaa !59
  store i32 %256, ptr %51, align 8, !tbaa !35
  br label %257

257:                                              ; preds = %16, %.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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #8

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind willreturn memory(read) }
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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 12}
!10 = !{!"_ZTS6ImVec4", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTS6ImFont", !6, i64 0, !6, i64 4, !13, i64 8, !14, i64 16, !17, i64 32, !18, i64 48, !16, i64 64, !6, i64 72, !19, i64 76, !19, i64 78, !16, i64 80, !16, i64 88, !6, i64 96, !6, i64 100, !20, i64 104, !15, i64 108}
!13 = !{!"_ZTS6ImVec2", !6, i64 0, !6, i64 4}
!14 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !15, i64 0, !15, i64 4, !16, i64 8}
!15 = !{!"int", !7, i64 0}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"_ZTS8ImVectorIfE", !15, i64 0, !15, i64 4, !16, i64 8}
!18 = !{!"_ZTS8ImVectorItE", !15, i64 0, !15, i64 4, !16, i64 8}
!19 = !{!"short", !7, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{!10, !6, i64 4}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!26, !15, i64 16}
!26 = !{!"_ZTS10ImDrawList", !27, i64 0, !18, i64 16, !28, i64 32, !15, i64 48, !16, i64 56, !16, i64 64, !15, i64 72, !16, i64 80, !16, i64 88, !29, i64 96, !30, i64 112, !31, i64 128, !15, i64 144, !15, i64 148, !32, i64 152}
!27 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !15, i64 0, !15, i64 4, !16, i64 8}
!28 = !{!"_ZTS8ImVectorI10ImDrawVertE", !15, i64 0, !15, i64 4, !16, i64 8}
!29 = !{!"_ZTS8ImVectorI6ImVec4E", !15, i64 0, !15, i64 4, !16, i64 8}
!30 = !{!"_ZTS8ImVectorIPvE", !15, i64 0, !15, i64 4, !16, i64 8}
!31 = !{!"_ZTS8ImVectorI6ImVec2E", !15, i64 0, !15, i64 4, !16, i64 8}
!32 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !15, i64 0, !15, i64 4, !16, i64 8}
!33 = !{!26, !16, i64 80}
!34 = !{!26, !16, i64 88}
!35 = !{!26, !15, i64 72}
!36 = distinct !{!36, !24}
!37 = !{!15, !15, i64 0}
!38 = distinct !{!38, !24}
!39 = !{!40, !6, i64 4}
!40 = !{!"_ZTS11ImFontGlyph", !19, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36}
!41 = !{!10, !6, i64 8}
!42 = !{!10, !6, i64 0}
!43 = !{!40, !6, i64 24}
!44 = !{!40, !6, i64 28}
!45 = !{!40, !6, i64 32}
!46 = !{!40, !6, i64 36}
!47 = !{!19, !19, i64 0}
!48 = !{!49, !6, i64 0}
!49 = !{!"_ZTS10ImDrawVert", !13, i64 0, !13, i64 8, !15, i64 16}
!50 = !{!49, !6, i64 4}
!51 = !{!49, !15, i64 16}
!52 = !{!49, !6, i64 8}
!53 = !{!49, !6, i64 12}
!54 = !{!26, !16, i64 40}
!55 = !{!26, !16, i64 24}
!56 = !{!26, !15, i64 0}
!57 = !{!58, !15, i64 0}
!58 = !{!"_ZTS9ImDrawCmd", !15, i64 0, !10, i64 4, !16, i64 24, !16, i64 32, !16, i64 40}
!59 = !{!26, !15, i64 32}


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