; LLVM IR from l1mey112/yr11-physics-applied :: cimgui/imgui (imgui_draw)

; 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.ImVec4 = type { float, float, float, float }
%struct.ImFont = type <{ %struct.ImVector.6, float, float, %struct.ImVector.1, %struct.ImVector.7, ptr, ptr, ptr, i16, i16, i16, i16, i8, [3 x i8], float, float, float, i32, [2 x i8], [2 x i8] }>
%struct.ImVector.6 = type { i32, i32, ptr }
%struct.ImVector.1 = type { i32, i32, ptr }
%struct.ImVector.7 = type { i32, i32, ptr }
%struct.ImDrawList = type <{ %struct.ImVector.0, %struct.ImVector.1, %struct.ImVector.2, i32, i32, ptr, ptr, ptr, ptr, %struct.ImVector.3, %struct.ImVector.4, %struct.ImVector, %struct.ImDrawCmdHeader, %struct.ImDrawListSplitter, float, [4 x i8] }>
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImVector.2 = type { i32, i32, ptr }
%struct.ImVector.3 = type { i32, i32, ptr }
%struct.ImVector.4 = type { i32, i32, ptr }
%struct.ImVector = type { i32, i32, ptr }
%struct.ImDrawCmdHeader = type <{ %struct.ImVec4, ptr, i32, [4 x i8] }>
%struct.ImDrawListSplitter = type { i32, i32, %struct.ImVector.5 }
%struct.ImVector.5 = type { i32, i32, ptr }
%struct.ImFontGlyph = type { i32, float, float, float, float, float, float, float, float, float }
%struct.ImDrawVert = type { %struct.ImVec2, %struct.ImVec2, i32 }
%struct.ImDrawCmd = type { %struct.ImVec4, ptr, i32, i32, i32, 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: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196), i32 noundef, i32 noundef) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6ImFont10RenderTextEP10ImDrawListfRK6ImVec2jRK6ImVec4PKcS9_fb(ptr noundef nonnull align 8 dereferenceable(110) %0, ptr noundef %1, float noundef %2, ptr noundef nonnull align 4 dereferenceable(8) %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) #1 align 2 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca float, align 4
  %14 = alloca ptr, align 8
  %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 float, align 4
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca float, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %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
  %49 = alloca float, align 4
  %50 = alloca float, align 4
  %51 = alloca float, align 4
  %52 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store float %2, ptr %13, align 4, !tbaa !9
  store ptr %3, ptr %14, align 8, !tbaa !5
  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
  %53 = zext i1 %9 to i8
  store i8 %53, ptr %20, align 1, !tbaa !13
  %54 = load ptr, ptr %11, align 8
  %55 = load ptr, ptr %18, align 8, !tbaa !5
  %56 = icmp ne ptr %55, null
  br i1 %56, label %62, label %57

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

62:                                               ; preds = %57, %10
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %63 = load ptr, ptr %14, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.ImVec2, ptr %63, i32 0, i32 0
  %65 = load float, ptr %64, align 4, !tbaa !15
  %66 = fptosi float %65 to i32
  %67 = sitofp i32 %66 to float
  store float %67, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %68 = load ptr, ptr %14, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 1
  %70 = load float, ptr %69, align 4, !tbaa !17
  %71 = fptosi float %70 to i32
  %72 = sitofp i32 %71 to float
  store float %72, ptr %22, align 4, !tbaa !9
  %73 = load float, ptr %22, align 4, !tbaa !9
  %74 = load ptr, ptr %16, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.ImVec4, ptr %74, i32 0, i32 3
  %76 = load float, ptr %75, align 4, !tbaa !18
  %77 = fcmp ogt float %73, %76
  br i1 %77, label %78, label %79

78:                                               ; preds = %62
  store i32 1, ptr %23, align 4
  br label %700

79:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %80 = load float, ptr %21, align 4, !tbaa !9
  store float %80, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %81 = load float, ptr %13, align 4, !tbaa !9
  %82 = getelementptr inbounds %struct.ImFont, ptr %54, i32 0, i32 2
  %83 = load float, ptr %82, align 4, !tbaa !20
  %84 = fdiv float %81, %83
  store float %84, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %85 = getelementptr inbounds %struct.ImFont, ptr %54, i32 0, i32 2
  %86 = load float, ptr %85, align 4, !tbaa !20
  %87 = load float, ptr %25, align 4, !tbaa !9
  %88 = fmul float %86, %87
  store float %88, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #9
  %89 = load float, ptr %19, align 4, !tbaa !9
  %90 = fcmp ogt float %89, 0.000000e+00
  %91 = zext i1 %90 to i8
  store i8 %91, ptr %27, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %92 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %92, ptr %28, align 8, !tbaa !5
  %93 = load float, ptr %22, align 4, !tbaa !9
  %94 = load float, ptr %26, align 4, !tbaa !9
  %95 = fadd float %93, %94
  %96 = load ptr, ptr %16, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.ImVec4, ptr %96, i32 0, i32 1
  %98 = load float, ptr %97, align 4, !tbaa !26
  %99 = fcmp olt float %95, %98
  br i1 %99, label %100, label %150

100:                                              ; preds = %79
  br label %101

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

109:                                              ; preds = %101
  %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 label %113

113:                                              ; preds = %109, %101
  %114 = phi i1 [ false, %101 ], [ %112, %109 ]
  br i1 %114, label %115, label %149

115:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %116 = load ptr, ptr %28, align 8, !tbaa !5
  %117 = load ptr, ptr %18, align 8, !tbaa !5
  %118 = load ptr, ptr %28, align 8, !tbaa !5
  %119 = ptrtoint ptr %117 to i64
  %120 = ptrtoint ptr %118 to i64
  %121 = sub i64 %119, %120
  %122 = call noundef ptr @memchr(ptr noundef %116, i32 noundef 10, i64 noundef %121) #8
  store ptr %122, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %123 = load ptr, ptr %29, align 8, !tbaa !5
  %124 = icmp ne ptr %123, null
  br i1 %124, label %125, label %128

125:                                              ; preds = %115
  %126 = load ptr, ptr %29, align 8, !tbaa !5
  %127 = getelementptr inbounds i8, ptr %126, i64 1
  br label %130

128:                                              ; preds = %115
  %129 = load ptr, ptr %18, align 8, !tbaa !5
  br label %130

130:                                              ; preds = %128, %125
  %131 = phi ptr [ %127, %125 ], [ %129, %128 ]
  store ptr %131, ptr %30, align 8, !tbaa !5
  %132 = load i8, ptr %27, align 1, !tbaa !13, !range !27, !noundef !28
  %133 = trunc i8 %132 to i1
  br i1 %133, label %134, label %143

134:                                              ; preds = %130
  %135 = load float, ptr %25, align 4, !tbaa !9
  %136 = load ptr, ptr %28, align 8, !tbaa !5
  %137 = load ptr, ptr %30, align 8, !tbaa !5
  %138 = load float, ptr %19, align 4, !tbaa !9
  %139 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(110) %54, float noundef %135, ptr noundef %136, ptr noundef %137, float noundef %138)
  store ptr %139, ptr %28, align 8, !tbaa !5
  %140 = load ptr, ptr %28, align 8, !tbaa !5
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = call noundef ptr @_ZL26CalcWordWrapNextLineStartAPKcS0_(ptr noundef %140, ptr noundef %141)
  store ptr %142, ptr %28, align 8, !tbaa !5
  br label %145

143:                                              ; preds = %130
  %144 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %144, ptr %28, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %143, %134
  %146 = load float, ptr %26, align 4, !tbaa !9
  %147 = load float, ptr %22, align 4, !tbaa !9
  %148 = fadd float %147, %146
  store float %148, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %101, !llvm.loop !29

149:                                              ; preds = %113
  br label %150

150:                                              ; preds = %149, %79
  %151 = load ptr, ptr %18, align 8, !tbaa !5
  %152 = load ptr, ptr %28, align 8, !tbaa !5
  %153 = ptrtoint ptr %151 to i64
  %154 = ptrtoint ptr %152 to i64
  %155 = sub i64 %153, %154
  %156 = icmp sgt i64 %155, 10000
  br i1 %156, label %157, label %197

157:                                              ; preds = %150
  %158 = load i8, ptr %27, align 1, !tbaa !13, !range !27, !noundef !28
  %159 = trunc i8 %158 to i1
  br i1 %159, label %197, label %160

160:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %161 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %161, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %162 = load float, ptr %22, align 4, !tbaa !9
  store float %162, ptr %32, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %190, %160
  %164 = load float, ptr %32, align 4, !tbaa !9
  %165 = load ptr, ptr %16, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.ImVec4, ptr %165, i32 0, i32 3
  %167 = load float, ptr %166, align 4, !tbaa !18
  %168 = fcmp olt float %164, %167
  br i1 %168, label %169, label %173

169:                                              ; preds = %163
  %170 = load ptr, ptr %31, align 8, !tbaa !5
  %171 = load ptr, ptr %18, align 8, !tbaa !5
  %172 = icmp ult ptr %170, %171
  br label %173

173:                                              ; preds = %169, %163
  %174 = phi i1 [ false, %163 ], [ %172, %169 ]
  br i1 %174, label %175, label %195

175:                                              ; preds = %173
  %176 = load ptr, ptr %31, align 8, !tbaa !5
  %177 = load ptr, ptr %18, align 8, !tbaa !5
  %178 = load ptr, ptr %31, align 8, !tbaa !5
  %179 = ptrtoint ptr %177 to i64
  %180 = ptrtoint ptr %178 to i64
  %181 = sub i64 %179, %180
  %182 = call noundef ptr @memchr(ptr noundef %176, i32 noundef 10, i64 noundef %181) #8
  store ptr %182, ptr %31, align 8, !tbaa !5
  %183 = load ptr, ptr %31, align 8, !tbaa !5
  %184 = icmp ne ptr %183, null
  br i1 %184, label %185, label %188

185:                                              ; preds = %175
  %186 = load ptr, ptr %31, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %186, i64 1
  br label %190

188:                                              ; preds = %175
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  br label %190

190:                                              ; preds = %188, %185
  %191 = phi ptr [ %187, %185 ], [ %189, %188 ]
  store ptr %191, ptr %31, align 8, !tbaa !5
  %192 = load float, ptr %26, align 4, !tbaa !9
  %193 = load float, ptr %32, align 4, !tbaa !9
  %194 = fadd float %193, %192
  store float %194, ptr %32, align 4, !tbaa !9
  br label %163, !llvm.loop !31

195:                                              ; preds = %173
  %196 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %196, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %197

197:                                              ; preds = %195, %157, %150
  %198 = load ptr, ptr %28, align 8, !tbaa !5
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = icmp eq ptr %198, %199
  br i1 %200, label %201, label %202

201:                                              ; preds = %197
  store i32 1, ptr %23, align 4
  br label %699

202:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %203 = load ptr, ptr %18, align 8, !tbaa !5
  %204 = load ptr, ptr %28, align 8, !tbaa !5
  %205 = ptrtoint ptr %203 to i64
  %206 = ptrtoint ptr %204 to i64
  %207 = sub i64 %205, %206
  %208 = trunc i64 %207 to i32
  %209 = mul nsw i32 %208, 4
  store i32 %209, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %210 = load ptr, ptr %18, align 8, !tbaa !5
  %211 = load ptr, ptr %28, align 8, !tbaa !5
  %212 = ptrtoint ptr %210 to i64
  %213 = ptrtoint ptr %211 to i64
  %214 = sub i64 %212, %213
  %215 = trunc i64 %214 to i32
  %216 = mul nsw i32 %215, 6
  store i32 %216, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.ImDrawList, ptr %217, i32 0, i32 1
  %219 = getelementptr inbounds %struct.ImVector.1, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !32
  %221 = load i32, ptr %34, align 4, !tbaa !11
  %222 = add nsw i32 %220, %221
  store i32 %222, ptr %35, align 4, !tbaa !11
  %223 = load ptr, ptr %12, align 8, !tbaa !5
  %224 = load i32, ptr %34, align 4, !tbaa !11
  %225 = load i32, ptr %33, align 4, !tbaa !11
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %223, i32 noundef %224, i32 noundef %225)
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %226 = load ptr, ptr %12, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.ImDrawList, ptr %226, i32 0, i32 7
  %228 = load ptr, ptr %227, align 8, !tbaa !42
  store ptr %228, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %229 = load ptr, ptr %12, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.ImDrawList, ptr %229, i32 0, i32 8
  %231 = load ptr, ptr %230, align 8, !tbaa !43
  store ptr %231, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.ImDrawList, ptr %232, i32 0, i32 4
  %234 = load i32, ptr %233, align 4, !tbaa !44
  store i32 %234, ptr %38, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  %235 = load i32, ptr %15, align 4, !tbaa !11
  %236 = or i32 %235, 16777215
  store i32 %236, ptr %39, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  store ptr null, ptr %40, align 8, !tbaa !5
  br label %237

237:                                              ; preds = %645, %643, %261, %202
  %238 = load ptr, ptr %28, align 8, !tbaa !5
  %239 = load ptr, ptr %18, align 8, !tbaa !5
  %240 = icmp ult ptr %238, %239
  br i1 %240, label %241, label %646

241:                                              ; preds = %237
  %242 = load i8, ptr %27, align 1, !tbaa !13, !range !27, !noundef !28
  %243 = trunc i8 %242 to i1
  br i1 %243, label %244, label %270

244:                                              ; preds = %241
  %245 = load ptr, ptr %40, align 8, !tbaa !5
  %246 = icmp ne ptr %245, null
  br i1 %246, label %257, label %247

247:                                              ; preds = %244
  %248 = load float, ptr %25, align 4, !tbaa !9
  %249 = load ptr, ptr %28, align 8, !tbaa !5
  %250 = load ptr, ptr %18, align 8, !tbaa !5
  %251 = load float, ptr %19, align 4, !tbaa !9
  %252 = load float, ptr %21, align 4, !tbaa !9
  %253 = load float, ptr %24, align 4, !tbaa !9
  %254 = fsub float %252, %253
  %255 = fsub float %251, %254
  %256 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(110) %54, float noundef %248, ptr noundef %249, ptr noundef %250, float noundef %255)
  store ptr %256, ptr %40, align 8, !tbaa !5
  br label %257

257:                                              ; preds = %247, %244
  %258 = load ptr, ptr %28, align 8, !tbaa !5
  %259 = load ptr, ptr %40, align 8, !tbaa !5
  %260 = icmp uge ptr %258, %259
  br i1 %260, label %261, label %269

261:                                              ; preds = %257
  %262 = load float, ptr %24, align 4, !tbaa !9
  store float %262, ptr %21, align 4, !tbaa !9
  %263 = load float, ptr %26, align 4, !tbaa !9
  %264 = load float, ptr %22, align 4, !tbaa !9
  %265 = fadd float %264, %263
  store float %265, ptr %22, align 4, !tbaa !9
  store ptr null, ptr %40, align 8, !tbaa !5
  %266 = load ptr, ptr %28, align 8, !tbaa !5
  %267 = load ptr, ptr %18, align 8, !tbaa !5
  %268 = call noundef ptr @_ZL26CalcWordWrapNextLineStartAPKcS0_(ptr noundef %266, ptr noundef %267)
  store ptr %268, ptr %28, align 8, !tbaa !5
  br label %237, !llvm.loop !45

269:                                              ; preds = %257
  br label %270

270:                                              ; preds = %269, %241
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %271 = load ptr, ptr %28, align 8, !tbaa !5
  %272 = load i8, ptr %271, align 1, !tbaa !46
  %273 = sext i8 %272 to i32
  store i32 %273, ptr %41, align 4, !tbaa !11
  %274 = load i32, ptr %41, align 4, !tbaa !11
  %275 = icmp ult i32 %274, 128
  br i1 %275, label %276, label %279

276:                                              ; preds = %270
  %277 = load ptr, ptr %28, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %277, i64 1
  store ptr %278, ptr %28, align 8, !tbaa !5
  br label %290

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

288:                                              ; preds = %279
  store i32 7, ptr %23, align 4
  br label %643

289:                                              ; preds = %279
  br label %290

290:                                              ; preds = %289, %276
  %291 = load i32, ptr %41, align 4, !tbaa !11
  %292 = icmp ult i32 %291, 32
  br i1 %292, label %293, label %313

293:                                              ; preds = %290
  %294 = load i32, ptr %41, align 4, !tbaa !11
  %295 = icmp eq i32 %294, 10
  br i1 %295, label %296, label %308

296:                                              ; preds = %293
  %297 = load float, ptr %24, align 4, !tbaa !9
  store float %297, ptr %21, align 4, !tbaa !9
  %298 = load float, ptr %26, align 4, !tbaa !9
  %299 = load float, ptr %22, align 4, !tbaa !9
  %300 = fadd float %299, %298
  store float %300, ptr %22, align 4, !tbaa !9
  %301 = load float, ptr %22, align 4, !tbaa !9
  %302 = load ptr, ptr %16, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.ImVec4, ptr %302, i32 0, i32 3
  %304 = load float, ptr %303, align 4, !tbaa !18
  %305 = fcmp ogt float %301, %304
  br i1 %305, label %306, label %307

306:                                              ; preds = %296
  store i32 7, ptr %23, align 4
  br label %643

307:                                              ; preds = %296
  store i32 6, ptr %23, align 4
  br label %643, !llvm.loop !45

308:                                              ; preds = %293
  %309 = load i32, ptr %41, align 4, !tbaa !11
  %310 = icmp eq i32 %309, 13
  br i1 %310, label %311, label %312

311:                                              ; preds = %308
  store i32 6, ptr %23, align 4
  br label %643, !llvm.loop !45

312:                                              ; preds = %308
  br label %313

313:                                              ; preds = %312, %290
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %314 = load i32, ptr %41, align 4, !tbaa !11
  %315 = trunc i32 %314 to i16
  %316 = call noundef ptr @_ZNK6ImFont9FindGlyphEt(ptr noundef nonnull align 8 dereferenceable(110) %54, i16 noundef zeroext %315)
  store ptr %316, ptr %42, align 8, !tbaa !5
  %317 = load ptr, ptr %42, align 8, !tbaa !5
  %318 = icmp eq ptr %317, null
  br i1 %318, label %319, label %320

319:                                              ; preds = %313
  store i32 6, ptr %23, align 4
  br label %642, !llvm.loop !45

320:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %321 = load ptr, ptr %42, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.ImFontGlyph, ptr %321, i32 0, i32 1
  %323 = load float, ptr %322, align 4, !tbaa !47
  %324 = load float, ptr %25, align 4, !tbaa !9
  %325 = fmul float %323, %324
  store float %325, ptr %43, align 4, !tbaa !9
  %326 = load ptr, ptr %42, align 8, !tbaa !5
  %327 = load i32, ptr %326, align 4
  %328 = lshr i32 %327, 1
  %329 = and i32 %328, 1
  %330 = icmp ne i32 %329, 0
  br i1 %330, label %331, label %637

331:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %332 = load float, ptr %21, align 4, !tbaa !9
  %333 = load ptr, ptr %42, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.ImFontGlyph, ptr %333, i32 0, i32 2
  %335 = load float, ptr %334, align 4, !tbaa !49
  %336 = load float, ptr %25, align 4, !tbaa !9
  %337 = call float @llvm.fmuladd.f32(float %335, float %336, float %332)
  store float %337, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %338 = load float, ptr %21, align 4, !tbaa !9
  %339 = load ptr, ptr %42, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.ImFontGlyph, ptr %339, i32 0, i32 4
  %341 = load float, ptr %340, align 4, !tbaa !50
  %342 = load float, ptr %25, align 4, !tbaa !9
  %343 = call float @llvm.fmuladd.f32(float %341, float %342, float %338)
  store float %343, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %344 = load float, ptr %22, align 4, !tbaa !9
  %345 = load ptr, ptr %42, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.ImFontGlyph, ptr %345, i32 0, i32 3
  %347 = load float, ptr %346, align 4, !tbaa !51
  %348 = load float, ptr %25, align 4, !tbaa !9
  %349 = call float @llvm.fmuladd.f32(float %347, float %348, float %344)
  store float %349, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %350 = load float, ptr %22, align 4, !tbaa !9
  %351 = load ptr, ptr %42, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.ImFontGlyph, ptr %351, i32 0, i32 5
  %353 = load float, ptr %352, align 4, !tbaa !52
  %354 = load float, ptr %25, align 4, !tbaa !9
  %355 = call float @llvm.fmuladd.f32(float %353, float %354, float %350)
  store float %355, ptr %47, align 4, !tbaa !9
  %356 = load float, ptr %44, align 4, !tbaa !9
  %357 = load ptr, ptr %16, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.ImVec4, ptr %357, i32 0, i32 2
  %359 = load float, ptr %358, align 4, !tbaa !53
  %360 = fcmp ole float %356, %359
  br i1 %360, label %361, label %633

361:                                              ; preds = %331
  %362 = load float, ptr %45, align 4, !tbaa !9
  %363 = load ptr, ptr %16, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.ImVec4, ptr %363, i32 0, i32 0
  %365 = load float, ptr %364, align 4, !tbaa !54
  %366 = fcmp oge float %362, %365
  br i1 %366, label %367, label %633

367:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %368 = load ptr, ptr %42, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.ImFontGlyph, ptr %368, i32 0, i32 6
  %370 = load float, ptr %369, align 4, !tbaa !55
  store float %370, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %371 = load ptr, ptr %42, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.ImFontGlyph, ptr %371, i32 0, i32 7
  %373 = load float, ptr %372, align 4, !tbaa !56
  store float %373, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %374 = load ptr, ptr %42, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.ImFontGlyph, ptr %374, i32 0, i32 8
  %376 = load float, ptr %375, align 4, !tbaa !57
  store float %376, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  %377 = load ptr, ptr %42, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.ImFontGlyph, ptr %377, i32 0, i32 9
  %379 = load float, ptr %378, align 4, !tbaa !58
  store float %379, ptr %51, align 4, !tbaa !9
  %380 = load i8, ptr %20, align 1, !tbaa !13, !range !27, !noundef !28
  %381 = trunc i8 %380 to i1
  br i1 %381, label %382, label %489

382:                                              ; preds = %367
  %383 = load float, ptr %44, align 4, !tbaa !9
  %384 = load ptr, ptr %16, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.ImVec4, ptr %384, i32 0, i32 0
  %386 = load float, ptr %385, align 4, !tbaa !54
  %387 = fcmp olt float %383, %386
  br i1 %387, label %388, label %407

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

407:                                              ; preds = %388, %382
  %408 = load float, ptr %46, align 4, !tbaa !9
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.ImVec4, ptr %409, i32 0, i32 1
  %411 = load float, ptr %410, align 4, !tbaa !26
  %412 = fcmp olt float %408, %411
  br i1 %412, label %413, label %432

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

432:                                              ; preds = %413, %407
  %433 = load float, ptr %45, align 4, !tbaa !9
  %434 = load ptr, ptr %16, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.ImVec4, ptr %434, i32 0, i32 2
  %436 = load float, ptr %435, align 4, !tbaa !53
  %437 = fcmp ogt float %433, %436
  br i1 %437, label %438, label %456

438:                                              ; preds = %432
  %439 = load float, ptr %48, align 4, !tbaa !9
  %440 = load ptr, ptr %16, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.ImVec4, ptr %440, i32 0, i32 2
  %442 = load float, ptr %441, align 4, !tbaa !53
  %443 = load float, ptr %44, align 4, !tbaa !9
  %444 = fsub float %442, %443
  %445 = load float, ptr %45, align 4, !tbaa !9
  %446 = load float, ptr %44, align 4, !tbaa !9
  %447 = fsub float %445, %446
  %448 = fdiv float %444, %447
  %449 = load float, ptr %50, align 4, !tbaa !9
  %450 = load float, ptr %48, align 4, !tbaa !9
  %451 = fsub float %449, %450
  %452 = call float @llvm.fmuladd.f32(float %448, float %451, float %439)
  store float %452, ptr %50, align 4, !tbaa !9
  %453 = load ptr, ptr %16, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.ImVec4, ptr %453, i32 0, i32 2
  %455 = load float, ptr %454, align 4, !tbaa !53
  store float %455, ptr %45, align 4, !tbaa !9
  br label %456

456:                                              ; preds = %438, %432
  %457 = load float, ptr %47, align 4, !tbaa !9
  %458 = load ptr, ptr %16, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.ImVec4, ptr %458, i32 0, i32 3
  %460 = load float, ptr %459, align 4, !tbaa !18
  %461 = fcmp ogt float %457, %460
  br i1 %461, label %462, label %480

462:                                              ; preds = %456
  %463 = load float, ptr %49, align 4, !tbaa !9
  %464 = load ptr, ptr %16, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.ImVec4, ptr %464, i32 0, i32 3
  %466 = load float, ptr %465, align 4, !tbaa !18
  %467 = load float, ptr %46, align 4, !tbaa !9
  %468 = fsub float %466, %467
  %469 = load float, ptr %47, align 4, !tbaa !9
  %470 = load float, ptr %46, align 4, !tbaa !9
  %471 = fsub float %469, %470
  %472 = fdiv float %468, %471
  %473 = load float, ptr %51, align 4, !tbaa !9
  %474 = load float, ptr %49, align 4, !tbaa !9
  %475 = fsub float %473, %474
  %476 = call float @llvm.fmuladd.f32(float %472, float %475, float %463)
  store float %476, ptr %51, align 4, !tbaa !9
  %477 = load ptr, ptr %16, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.ImVec4, ptr %477, i32 0, i32 3
  %479 = load float, ptr %478, align 4, !tbaa !18
  store float %479, ptr %47, align 4, !tbaa !9
  br label %480

480:                                              ; preds = %462, %456
  %481 = load float, ptr %46, align 4, !tbaa !9
  %482 = load float, ptr %47, align 4, !tbaa !9
  %483 = fcmp oge float %481, %482
  br i1 %483, label %484, label %488

484:                                              ; preds = %480
  %485 = load float, ptr %43, align 4, !tbaa !9
  %486 = load float, ptr %21, align 4, !tbaa !9
  %487 = fadd float %486, %485
  store float %487, ptr %21, align 4, !tbaa !9
  store i32 6, ptr %23, align 4
  br label %630, !llvm.loop !45

488:                                              ; preds = %480
  br label %489

489:                                              ; preds = %488, %367
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  %490 = load ptr, ptr %42, align 8, !tbaa !5
  %491 = load i32, ptr %490, align 4
  %492 = and i32 %491, 1
  %493 = icmp ne i32 %492, 0
  br i1 %493, label %494, label %496

494:                                              ; preds = %489
  %495 = load i32, ptr %39, align 4, !tbaa !11
  br label %498

496:                                              ; preds = %489
  %497 = load i32, ptr %15, align 4, !tbaa !11
  br label %498

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

630:                                              ; preds = %498, %484
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  %631 = load i32, ptr %23, align 4
  switch i32 %631, label %634 [
    i32 0, label %632
  ]

632:                                              ; preds = %630
  br label %633

633:                                              ; preds = %632, %361, %331
  store i32 0, ptr %23, align 4
  br label %634

634:                                              ; preds = %633, %630
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  %635 = load i32, ptr %23, align 4
  switch i32 %635, label %641 [
    i32 0, label %636
  ]

636:                                              ; preds = %634
  br label %637

637:                                              ; preds = %636, %320
  %638 = load float, ptr %43, align 4, !tbaa !9
  %639 = load float, ptr %21, align 4, !tbaa !9
  %640 = fadd float %639, %638
  store float %640, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %23, align 4
  br label %641

641:                                              ; preds = %637, %634
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %642

642:                                              ; preds = %641, %319
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %643

643:                                              ; preds = %642, %311, %307, %306, %288
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  %644 = load i32, ptr %23, align 4
  switch i32 %644, label %703 [
    i32 0, label %645
    i32 7, label %646
    i32 6, label %237
  ]

645:                                              ; preds = %643
  br label %237, !llvm.loop !45

646:                                              ; preds = %643, %237
  %647 = load ptr, ptr %36, align 8, !tbaa !5
  %648 = load ptr, ptr %12, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.ImDrawList, ptr %648, i32 0, i32 2
  %650 = getelementptr inbounds %struct.ImVector.2, ptr %649, i32 0, i32 2
  %651 = load ptr, ptr %650, align 8, !tbaa !66
  %652 = ptrtoint ptr %647 to i64
  %653 = ptrtoint ptr %651 to i64
  %654 = sub i64 %652, %653
  %655 = sdiv exact i64 %654, 20
  %656 = trunc i64 %655 to i32
  %657 = load ptr, ptr %12, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.ImDrawList, ptr %657, i32 0, i32 2
  %659 = getelementptr inbounds %struct.ImVector.2, ptr %658, i32 0, i32 0
  store i32 %656, ptr %659, align 8, !tbaa !67
  %660 = load ptr, ptr %37, align 8, !tbaa !5
  %661 = load ptr, ptr %12, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.ImDrawList, ptr %661, i32 0, i32 1
  %663 = getelementptr inbounds %struct.ImVector.1, ptr %662, i32 0, i32 2
  %664 = load ptr, ptr %663, align 8, !tbaa !68
  %665 = ptrtoint ptr %660 to i64
  %666 = ptrtoint ptr %664 to i64
  %667 = sub i64 %665, %666
  %668 = sdiv exact i64 %667, 2
  %669 = trunc i64 %668 to i32
  %670 = load ptr, ptr %12, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.ImDrawList, ptr %670, i32 0, i32 1
  %672 = getelementptr inbounds %struct.ImVector.1, ptr %671, i32 0, i32 0
  store i32 %669, ptr %672, align 8, !tbaa !32
  %673 = load i32, ptr %35, align 4, !tbaa !11
  %674 = load ptr, ptr %12, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.ImDrawList, ptr %674, i32 0, i32 1
  %676 = getelementptr inbounds %struct.ImVector.1, ptr %675, i32 0, i32 0
  %677 = load i32, ptr %676, align 8, !tbaa !32
  %678 = sub nsw i32 %673, %677
  %679 = load ptr, ptr %12, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.ImDrawList, ptr %679, i32 0, i32 0
  %681 = load ptr, ptr %12, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.ImDrawList, ptr %681, i32 0, i32 0
  %683 = getelementptr inbounds %struct.ImVector.0, ptr %682, i32 0, i32 0
  %684 = load i32, ptr %683, align 8, !tbaa !69
  %685 = sub nsw i32 %684, 1
  %686 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN8ImVectorI9ImDrawCmdEixEi(ptr noundef nonnull align 8 dereferenceable(16) %680, i32 noundef %685)
  %687 = getelementptr inbounds %struct.ImDrawCmd, ptr %686, i32 0, i32 4
  %688 = load i32, ptr %687, align 8, !tbaa !70
  %689 = sub i32 %688, %678
  store i32 %689, ptr %687, align 8, !tbaa !70
  %690 = load ptr, ptr %36, align 8, !tbaa !5
  %691 = load ptr, ptr %12, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.ImDrawList, ptr %691, i32 0, i32 7
  store ptr %690, ptr %692, align 8, !tbaa !42
  %693 = load ptr, ptr %37, align 8, !tbaa !5
  %694 = load ptr, ptr %12, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.ImDrawList, ptr %694, i32 0, i32 8
  store ptr %693, ptr %695, align 8, !tbaa !43
  %696 = load i32, ptr %38, align 4, !tbaa !11
  %697 = load ptr, ptr %12, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.ImDrawList, ptr %697, i32 0, i32 4
  store i32 %696, ptr %698, align 4, !tbaa !44
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  store i32 0, ptr %23, align 4
  br label %699

699:                                              ; preds = %646, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %700

700:                                              ; preds = %699, %78
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  %701 = load i32, ptr %23, align 4
  switch i32 %701, label %703 [
    i32 0, label %702
    i32 1, label %702
  ]

702:                                              ; preds = %700, %700
  ret void

703:                                              ; preds = %700, %643
  unreachable
}

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @_ZL26CalcWordWrapNextLineStartAPKcS0_(ptr noundef, ptr noundef) #7

; Function Attrs: nounwind willreturn memory(read)
declare noundef ptr @memchr(ptr noundef, i32 noundef, i64 noundef) #3

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


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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6ImFont10RenderTextEP10ImDrawListfRK6ImVec2jRK6ImVec4PKcS9_fb(ptr noundef nonnull align 8 dereferenceable(110) %0, ptr noundef %1, float noundef %2, ptr nocapture noundef nonnull readonly align 4 dereferenceable(8) %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 #1 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
  %.0 = phi ptr [ %7, %10 ], [ %14, %12 ]
  %16 = load float, ptr %3, align 4, !tbaa !5
  %17 = fptosi float %16 to i32
  %18 = sitofp i32 %17 to float
  %19 = getelementptr inbounds i8, ptr %3, i64 4
  %20 = load float, ptr %19, align 4, !tbaa !10
  %21 = fptosi float %20 to i32
  %22 = sitofp i32 %21 to float
  %23 = getelementptr inbounds i8, ptr %5, i64 12
  %24 = load float, ptr %23, align 4, !tbaa !11
  %25 = fcmp olt float %24, %22
  br i1 %25, label %263, label %26

26:                                               ; preds = %15
  %27 = getelementptr inbounds i8, ptr %0, i64 20
  %28 = load float, ptr %27, align 4, !tbaa !13
  %29 = fdiv float %2, %28
  %30 = fmul float %28, %29
  %31 = fcmp ogt float %8, 0.000000e+00
  %32 = fadd float %30, %22
  %33 = getelementptr inbounds i8, ptr %5, i64 4
  %34 = load float, ptr %33, align 4, !tbaa !22
  %35 = fcmp olt float %32, %34
  %36 = icmp ugt ptr %.0, %6
  %or.cond = select i1 %35, i1 %36, i1 false
  br i1 %or.cond, label %.lr.ph, label %.loopexit372

.lr.ph:                                           ; preds = %26
  %37 = ptrtoint ptr %.0 to i64
  br i1 %31, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %38 = phi float [ %46, %.lr.ph.split.us ], [ %32, %.lr.ph ]
  %.0301383.us = phi ptr [ %45, %.lr.ph.split.us ], [ %6, %.lr.ph ]
  %39 = ptrtoint ptr %.0301383.us to i64
  %40 = sub i64 %37, %39
  %41 = tail call noundef ptr @memchr(ptr noundef %.0301383.us, i32 noundef 10, i64 noundef %40) #8
  %.not333.us = icmp eq ptr %41, null
  %42 = getelementptr inbounds i8, ptr %41, i64 1
  %43 = select i1 %.not333.us, ptr %.0, ptr %42
  %44 = tail call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(110) %0, float noundef %29, ptr noundef %.0301383.us, ptr noundef nonnull %43, float noundef %8)
  %45 = tail call noundef ptr @_ZL26CalcWordWrapNextLineStartAPKcS0_(ptr noundef %44, ptr noundef nonnull %.0)
  %46 = fadd float %30, %38
  %47 = load float, ptr %33, align 4, !tbaa !22
  %48 = fcmp olt float %46, %47
  %49 = icmp ult ptr %45, %.0
  %50 = select i1 %48, i1 %49, i1 false
  br i1 %50, label %.lr.ph.split.us, label %.loopexit372, !llvm.loop !23

.lr.ph.split:                                     ; preds = %.lr.ph, %.lr.ph.split
  %51 = phi float [ %57, %.lr.ph.split ], [ %32, %.lr.ph ]
  %.0301383 = phi ptr [ %56, %.lr.ph.split ], [ %6, %.lr.ph ]
  %52 = ptrtoint ptr %.0301383 to i64
  %53 = sub i64 %37, %52
  %54 = tail call noundef ptr @memchr(ptr noundef %.0301383, i32 noundef 10, i64 noundef %53) #8
  %.not333 = icmp eq ptr %54, null
  %55 = getelementptr inbounds i8, ptr %54, i64 1
  %56 = select i1 %.not333, ptr %.0, ptr %55
  %57 = fadd float %30, %51
  %58 = fcmp olt float %57, %34
  %59 = icmp ult ptr %56, %.0
  %60 = select i1 %58, i1 %59, i1 false
  br i1 %60, label %.lr.ph.split, label %.loopexit372, !llvm.loop !23

.loopexit372:                                     ; preds = %.lr.ph.split, %.lr.ph.split.us, %26
  %.2303 = phi ptr [ %6, %26 ], [ %45, %.lr.ph.split.us ], [ %56, %.lr.ph.split ]
  %.1264 = phi float [ %22, %26 ], [ %38, %.lr.ph.split.us ], [ %51, %.lr.ph.split ]
  %61 = ptrtoint ptr %.0 to i64
  %62 = ptrtoint ptr %.2303 to i64
  %63 = sub i64 %61, %62
  %64 = icmp slt i64 %63, 10001
  %brmerge = or i1 %31, %64
  br i1 %brmerge, label %.loopexit370, label %.preheader

.preheader:                                       ; preds = %.loopexit372
  %65 = load float, ptr %23, align 4, !tbaa !11
  %66 = fcmp olt float %.1264, %65
  %67 = icmp ult ptr %.2303, %.0
  %68 = select i1 %66, i1 %67, i1 false
  br i1 %68, label %.lr.ph388, label %.loopexit370

.lr.ph388:                                        ; preds = %.preheader, %.lr.ph388
  %.0307387 = phi ptr [ %73, %.lr.ph388 ], [ %.2303, %.preheader ]
  %.0308386 = phi float [ %74, %.lr.ph388 ], [ %.1264, %.preheader ]
  %69 = ptrtoint ptr %.0307387 to i64
  %70 = sub i64 %61, %69
  %71 = tail call noundef ptr @memchr(ptr noundef %.0307387, i32 noundef 10, i64 noundef %70) #8
  %.not328 = icmp eq ptr %71, null
  %72 = getelementptr inbounds i8, ptr %71, i64 1
  %73 = select i1 %.not328, ptr %.0, ptr %72
  %74 = fadd float %30, %.0308386
  %75 = fcmp olt float %74, %65
  %76 = icmp ult ptr %73, %.0
  %77 = select i1 %75, i1 %76, i1 false
  br i1 %77, label %.lr.ph388, label %.loopexit370, !llvm.loop !25

.loopexit370:                                     ; preds = %.lr.ph388, %.preheader, %.loopexit372
  %.1 = phi ptr [ %.0, %.loopexit372 ], [ %.2303, %.preheader ], [ %73, %.lr.ph388 ]
  %78 = icmp eq ptr %.2303, %.1
  br i1 %78, label %263, label %79

79:                                               ; preds = %.loopexit370
  %80 = ptrtoint ptr %.1 to i64
  %81 = sub i64 %80, %62
  %82 = trunc i64 %81 to i32
  %83 = shl nsw i32 %82, 2
  %84 = mul nsw i32 %82, 6
  %85 = getelementptr inbounds i8, ptr %1, i64 16
  %86 = load i32, ptr %85, align 8, !tbaa !26
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %1, i32 noundef %84, i32 noundef %83)
  %87 = getelementptr inbounds i8, ptr %1, i64 72
  %88 = load ptr, ptr %87, align 8, !tbaa !36
  %89 = getelementptr inbounds i8, ptr %1, i64 80
  %90 = load ptr, ptr %89, align 8, !tbaa !37
  %91 = getelementptr inbounds i8, ptr %1, i64 52
  %92 = load i32, ptr %91, align 4, !tbaa !38
  %93 = or i32 %4, 16777215
  %94 = getelementptr inbounds i8, ptr %5, i64 8
  %95 = fsub float %18, %18
  %96 = fadd float %95, %8
  br label %.outer.outer

.outer.outer:                                     ; preds = %79, %.loopexit430
  %.3304.ph.ph = phi ptr [ %.2303, %79 ], [ %.4305, %.loopexit430 ]
  %.0292.ph.ph = phi ptr [ %88, %79 ], [ %.7299, %.loopexit430 ]
  %.0283.ph.ph = phi ptr [ %90, %79 ], [ %.7290, %.loopexit430 ]
  %.0275.ph.ph = phi i32 [ %92, %79 ], [ %.7282, %.loopexit430 ]
  %.0267.ph.ph = phi ptr [ null, %79 ], [ %.us-phi404, %.loopexit430 ]
  %.2265.ph.ph = phi float [ %.1264, %79 ], [ %.us-phi402, %.loopexit430 ]
  %.0261.ph.ph = phi float [ %18, %79 ], [ %.7, %.loopexit430 ]
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %125
  %.3304.ph = phi ptr [ %.4305, %125 ], [ %.3304.ph.ph, %.outer.outer ]
  %.0267.ph = phi ptr [ %.us-phi404, %125 ], [ %.0267.ph.ph, %.outer.outer ]
  %.2265.ph = phi float [ %126, %125 ], [ %.2265.ph.ph, %.outer.outer ]
  %.0261.ph = phi float [ %18, %125 ], [ %.0261.ph.ph, %.outer.outer ]
  %97 = icmp ult ptr %.3304.ph, %.1
  br i1 %97, label %.lr.ph394, label %.loopexit

.lr.ph394:                                        ; preds = %.outer
  br i1 %31, label %.lr.ph394.split.us.preheader, label %.split.us

.lr.ph394.split.us.preheader:                     ; preds = %.lr.ph394
  %.not329.us.peel = icmp eq ptr %.0267.ph, null
  br i1 %.not329.us.peel, label %98, label %102

98:                                               ; preds = %.lr.ph394.split.us.preheader
  %99 = fsub float %18, %.0261.ph
  %100 = fadd float %99, %8
  %101 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(110) %0, float noundef %29, ptr noundef %.3304.ph, ptr noundef nonnull %.1, float noundef %100)
  br label %102

102:                                              ; preds = %98, %.lr.ph394.split.us.preheader
  %.1268.us.peel = phi ptr [ %.0267.ph, %.lr.ph394.split.us.preheader ], [ %101, %98 ]
  %.not330.us.peel = icmp ult ptr %.3304.ph, %.1268.us.peel
  br i1 %.not330.us.peel, label %.split.us, label %103

103:                                              ; preds = %102
  %104 = call noundef ptr @_ZL26CalcWordWrapNextLineStartAPKcS0_(ptr noundef %.3304.ph, ptr noundef nonnull %.1)
  %105 = icmp ult ptr %104, %.1
  br i1 %105, label %.lr.ph394.split.us.peel.next, label %.loopexit

.lr.ph394.split.us.peel.next:                     ; preds = %103, %107
  %.2265392.us.pn = phi float [ %.2265392.us, %107 ], [ %.2265.ph, %103 ]
  %.3304390.us = phi ptr [ %108, %107 ], [ %104, %103 ]
  %.2265392.us = fadd float %30, %.2265392.us.pn
  %106 = call noundef ptr @_ZNK6ImFont21CalcWordWrapPositionAEfPKcS1_f(ptr noundef nonnull align 8 dereferenceable(110) %0, float noundef %29, ptr noundef %.3304390.us, ptr noundef nonnull %.1, float noundef %96)
  %.not330.us = icmp ult ptr %.3304390.us, %106
  br i1 %.not330.us, label %.split.us, label %107

107:                                              ; preds = %.lr.ph394.split.us.peel.next
  %108 = call noundef ptr @_ZL26CalcWordWrapNextLineStartAPKcS0_(ptr noundef %.3304390.us, ptr noundef nonnull %.1)
  %109 = icmp ult ptr %108, %.1
  br i1 %109, label %.lr.ph394.split.us.peel.next, label %.loopexit, !llvm.loop !39

.split.us:                                        ; preds = %.lr.ph394.split.us.peel.next, %102, %.lr.ph394
  %.us-phi401 = phi ptr [ %.3304.ph, %.lr.ph394 ], [ %.3304.ph, %102 ], [ %.3304390.us, %.lr.ph394.split.us.peel.next ]
  %.us-phi402 = phi float [ %.2265.ph, %.lr.ph394 ], [ %.2265.ph, %102 ], [ %.2265392.us, %.lr.ph394.split.us.peel.next ]
  %.us-phi403 = phi float [ %.0261.ph, %.lr.ph394 ], [ %.0261.ph, %102 ], [ %18, %.lr.ph394.split.us.peel.next ]
  %.us-phi404 = phi ptr [ %.0267.ph, %.lr.ph394 ], [ %.1268.us.peel, %102 ], [ %106, %.lr.ph394.split.us.peel.next ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #9
  %110 = load i8, ptr %.us-phi401, align 1, !tbaa !41
  %111 = sext i8 %110 to i32
  store i32 %111, ptr %11, align 4, !tbaa !42
  %112 = icmp sgt i8 %110, -1
  br i1 %112, label %113, label %115

113:                                              ; preds = %.split.us
  %114 = getelementptr inbounds i8, ptr %.us-phi401, i64 1
  br label %121

115:                                              ; preds = %.split.us
  %116 = call noundef i32 @_Z18ImTextCharFromUtf8PjPKcS1_(ptr noundef nonnull %11, ptr noundef nonnull %.us-phi401, ptr noundef nonnull %.1)
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds i8, ptr %.us-phi401, i64 %117
  %119 = load i32, ptr %11, align 4, !tbaa !42
  %120 = icmp eq i32 %119, 0
  br i1 %120, label %.thread356, label %121

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

121:                                              ; preds = %115, %113
  %122 = phi i32 [ %119, %115 ], [ %111, %113 ]
  %.4305 = phi ptr [ %118, %115 ], [ %114, %113 ]
  %123 = icmp ult i32 %122, 32
  br i1 %123, label %124, label %129

124:                                              ; preds = %121
  switch i32 %122, label %129 [
    i32 10, label %125
    i32 13, label %.loopexit430
  ], !llvm.loop !43

125:                                              ; preds = %124
  %126 = fadd float %30, %.us-phi402
  %127 = load float, ptr %23, align 4, !tbaa !11
  %128 = fcmp ogt float %126, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  br i1 %128, label %.loopexit, label %.outer

129:                                              ; preds = %124, %121
  %130 = trunc i32 %122 to i16
  %131 = call noundef ptr @_ZNK6ImFont9FindGlyphEt(ptr noundef nonnull align 8 dereferenceable(110) %0, i16 noundef zeroext %130)
  %132 = icmp eq ptr %131, null
  br i1 %132, label %.loopexit430, label %133, !llvm.loop !43

133:                                              ; preds = %129
  %134 = getelementptr inbounds i8, ptr %131, i64 4
  %135 = load float, ptr %134, align 4, !tbaa !44
  %136 = fmul float %29, %135
  %137 = load i32, ptr %131, align 4
  %138 = and i32 %137, 2
  %.not331 = icmp eq i32 %138, 0
  br i1 %.not331, label %.thread349, label %139

139:                                              ; preds = %133
  %140 = getelementptr inbounds i8, ptr %131, i64 8
  %141 = load float, ptr %140, align 4, !tbaa !46
  %142 = call float @llvm.fmuladd.f32(float %141, float %29, float %.us-phi403)
  %143 = getelementptr inbounds i8, ptr %131, i64 16
  %144 = load float, ptr %143, align 4, !tbaa !47
  %145 = call float @llvm.fmuladd.f32(float %144, float %29, float %.us-phi403)
  %146 = getelementptr inbounds i8, ptr %131, i64 12
  %147 = load float, ptr %146, align 4, !tbaa !48
  %148 = call float @llvm.fmuladd.f32(float %147, float %29, float %.us-phi402)
  %149 = getelementptr inbounds i8, ptr %131, i64 20
  %150 = load float, ptr %149, align 4, !tbaa !49
  %151 = call float @llvm.fmuladd.f32(float %150, float %29, float %.us-phi402)
  %152 = load float, ptr %94, align 4, !tbaa !50
  %153 = fcmp ugt float %142, %152
  br i1 %153, label %.thread349, label %154

154:                                              ; preds = %139
  %155 = load float, ptr %5, align 4, !tbaa !51
  %156 = fcmp ult float %145, %155
  br i1 %156, label %.thread349, label %157

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %131, i64 24
  %159 = load float, ptr %158, align 4, !tbaa !52
  %160 = getelementptr inbounds i8, ptr %131, i64 28
  %161 = load float, ptr %160, align 4, !tbaa !53
  %162 = getelementptr inbounds i8, ptr %131, i64 32
  %163 = load float, ptr %162, align 4, !tbaa !54
  %164 = getelementptr inbounds i8, ptr %131, i64 36
  %165 = load float, ptr %164, align 4, !tbaa !55
  br i1 %9, label %166, label %204

166:                                              ; preds = %157
  %167 = fcmp olt float %142, %155
  br i1 %167, label %168, label %175

168:                                              ; preds = %166
  %169 = fsub float %145, %155
  %170 = fsub float %145, %142
  %171 = fdiv float %169, %170
  %172 = fsub float 1.000000e+00, %171
  %173 = fsub float %163, %159
  %174 = call float @llvm.fmuladd.f32(float %172, float %173, float %159)
  br label %175

175:                                              ; preds = %168, %166
  %.0259 = phi float [ %155, %168 ], [ %142, %166 ]
  %.0251 = phi float [ %174, %168 ], [ %159, %166 ]
  %176 = load float, ptr %33, align 4, !tbaa !22
  %177 = fcmp olt float %148, %176
  br i1 %177, label %178, label %185

178:                                              ; preds = %175
  %179 = fsub float %151, %176
  %180 = fsub float %151, %148
  %181 = fdiv float %179, %180
  %182 = fsub float 1.000000e+00, %181
  %183 = fsub float %165, %161
  %184 = call float @llvm.fmuladd.f32(float %182, float %183, float %161)
  br label %185

185:                                              ; preds = %178, %175
  %.0255 = phi float [ %176, %178 ], [ %148, %175 ]
  %.0249 = phi float [ %184, %178 ], [ %161, %175 ]
  %186 = fcmp ogt float %145, %152
  br i1 %186, label %187, label %193

187:                                              ; preds = %185
  %188 = fsub float %152, %.0259
  %189 = fsub float %145, %.0259
  %190 = fdiv float %188, %189
  %191 = fsub float %163, %.0251
  %192 = call float @llvm.fmuladd.f32(float %190, float %191, float %.0251)
  br label %193

193:                                              ; preds = %187, %185
  %.0257 = phi float [ %152, %187 ], [ %145, %185 ]
  %.0247 = phi float [ %192, %187 ], [ %163, %185 ]
  %194 = load float, ptr %23, align 4, !tbaa !11
  %195 = fcmp ogt float %151, %194
  br i1 %195, label %196, label %202

196:                                              ; preds = %193
  %197 = fsub float %194, %.0255
  %198 = fsub float %151, %.0255
  %199 = fdiv float %197, %198
  %200 = fsub float %165, %.0249
  %201 = call float @llvm.fmuladd.f32(float %199, float %200, float %.0249)
  br label %202

202:                                              ; preds = %196, %193
  %.0253 = phi float [ %194, %196 ], [ %151, %193 ]
  %.0245 = phi float [ %201, %196 ], [ %165, %193 ]
  %203 = fcmp ult float %.0255, %.0253
  br i1 %203, label %204, label %238

204:                                              ; preds = %157, %202
  %.1260 = phi float [ %.0259, %202 ], [ %142, %157 ]
  %.1258 = phi float [ %.0257, %202 ], [ %145, %157 ]
  %.1256 = phi float [ %.0255, %202 ], [ %148, %157 ]
  %.1254 = phi float [ %.0253, %202 ], [ %151, %157 ]
  %.1252 = phi float [ %.0251, %202 ], [ %159, %157 ]
  %.1250 = phi float [ %.0249, %202 ], [ %161, %157 ]
  %.1248 = phi float [ %.0247, %202 ], [ %163, %157 ]
  %.1246 = phi float [ %.0245, %202 ], [ %165, %157 ]
  %205 = and i32 %137, 1
  %.not332 = icmp eq i32 %205, 0
  %206 = select i1 %.not332, i32 %4, i32 %93
  %207 = trunc i32 %.0275.ph.ph to i16
  store i16 %207, ptr %.0283.ph.ph, align 2, !tbaa !56
  %208 = add i16 %207, 1
  %209 = getelementptr inbounds i8, ptr %.0283.ph.ph, i64 2
  store i16 %208, ptr %209, align 2, !tbaa !56
  %210 = add i16 %207, 2
  %211 = getelementptr inbounds i8, ptr %.0283.ph.ph, i64 4
  store i16 %210, ptr %211, align 2, !tbaa !56
  %212 = getelementptr inbounds i8, ptr %.0283.ph.ph, i64 6
  store i16 %207, ptr %212, align 2, !tbaa !56
  %213 = getelementptr inbounds i8, ptr %.0283.ph.ph, i64 8
  store i16 %210, ptr %213, align 2, !tbaa !56
  %214 = add i16 %207, 3
  %215 = getelementptr inbounds i8, ptr %.0283.ph.ph, i64 10
  store i16 %214, ptr %215, align 2, !tbaa !56
  store float %.1260, ptr %.0292.ph.ph, align 4, !tbaa !57
  %216 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 4
  store float %.1256, ptr %216, align 4, !tbaa !59
  %217 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 16
  store i32 %206, ptr %217, align 4, !tbaa !60
  %218 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 8
  store float %.1252, ptr %218, align 4, !tbaa !61
  %219 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 12
  store float %.1250, ptr %219, align 4, !tbaa !62
  %220 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 20
  store float %.1258, ptr %220, align 4, !tbaa !57
  %221 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 24
  store float %.1256, ptr %221, align 4, !tbaa !59
  %222 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 36
  store i32 %206, ptr %222, align 4, !tbaa !60
  %223 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 28
  store float %.1248, ptr %223, align 4, !tbaa !61
  %224 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 32
  store float %.1250, ptr %224, align 4, !tbaa !62
  %225 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 40
  store float %.1258, ptr %225, align 4, !tbaa !57
  %226 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 44
  store float %.1254, ptr %226, align 4, !tbaa !59
  %227 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 56
  store i32 %206, ptr %227, align 4, !tbaa !60
  %228 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 48
  store float %.1248, ptr %228, align 4, !tbaa !61
  %229 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 52
  store float %.1246, ptr %229, align 4, !tbaa !62
  %230 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 60
  store float %.1260, ptr %230, align 4, !tbaa !57
  %231 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 64
  store float %.1254, ptr %231, align 4, !tbaa !59
  %232 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 76
  store i32 %206, ptr %232, align 4, !tbaa !60
  %233 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 68
  store float %.1252, ptr %233, align 4, !tbaa !61
  %234 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 72
  store float %.1246, ptr %234, align 4, !tbaa !62
  %235 = getelementptr inbounds i8, ptr %.0292.ph.ph, i64 80
  %236 = add i32 %.0275.ph.ph, 4
  %237 = getelementptr inbounds i8, ptr %.0283.ph.ph, i64 12
  br label %.thread349

238:                                              ; preds = %202
  %239 = fadd float %.us-phi403, %136
  br label %.loopexit430

.thread349:                                       ; preds = %204, %139, %154, %133
  %.4296 = phi ptr [ %.0292.ph.ph, %133 ], [ %235, %204 ], [ %.0292.ph.ph, %139 ], [ %.0292.ph.ph, %154 ]
  %.4287 = phi ptr [ %.0283.ph.ph, %133 ], [ %237, %204 ], [ %.0283.ph.ph, %139 ], [ %.0283.ph.ph, %154 ]
  %.4279 = phi i32 [ %.0275.ph.ph, %133 ], [ %236, %204 ], [ %.0275.ph.ph, %139 ], [ %.0275.ph.ph, %154 ]
  %240 = fadd float %.us-phi403, %136
  br label %.loopexit430

.loopexit430:                                     ; preds = %124, %238, %129, %.thread349
  %.7299 = phi ptr [ %.0292.ph.ph, %129 ], [ %.4296, %.thread349 ], [ %.0292.ph.ph, %238 ], [ %.0292.ph.ph, %124 ]
  %.7290 = phi ptr [ %.0283.ph.ph, %129 ], [ %.4287, %.thread349 ], [ %.0283.ph.ph, %238 ], [ %.0283.ph.ph, %124 ]
  %.7282 = phi i32 [ %.0275.ph.ph, %129 ], [ %.4279, %.thread349 ], [ %.0275.ph.ph, %238 ], [ %.0275.ph.ph, %124 ]
  %.7 = phi float [ %.us-phi403, %129 ], [ %240, %.thread349 ], [ %239, %238 ], [ %.us-phi403, %124 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  br label %.outer.outer

.loopexit:                                        ; preds = %.outer, %125, %103, %107, %.thread356
  %241 = getelementptr inbounds i8, ptr %1, i64 32
  %242 = getelementptr inbounds i8, ptr %1, i64 40
  %243 = load ptr, ptr %242, align 8, !tbaa !63
  %244 = ptrtoint ptr %.0292.ph.ph to i64
  %245 = ptrtoint ptr %243 to i64
  %246 = sub i64 %244, %245
  %247 = sdiv exact i64 %246, 20
  %248 = trunc i64 %247 to i32
  store i32 %248, ptr %241, align 8, !tbaa !64
  %249 = getelementptr inbounds i8, ptr %1, i64 24
  %250 = load ptr, ptr %249, align 8, !tbaa !65
  %251 = ptrtoint ptr %.0283.ph.ph to i64
  %252 = ptrtoint ptr %250 to i64
  %253 = sub i64 %251, %252
  %254 = lshr exact i64 %253, 1
  %255 = trunc i64 %254 to i32
  store i32 %255, ptr %85, align 8, !tbaa !26
  %256 = add i32 %86, %84
  %.neg = sub i32 %255, %256
  %257 = load i32, ptr %1, align 8, !tbaa !66
  %258 = add nsw i32 %257, -1
  %259 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN8ImVectorI9ImDrawCmdEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1, i32 noundef %258)
  %260 = getelementptr inbounds i8, ptr %259, i64 32
  %261 = load i32, ptr %260, align 8, !tbaa !67
  %262 = add i32 %.neg, %261
  store i32 %262, ptr %260, align 8, !tbaa !67
  store ptr %.0292.ph.ph, ptr %87, align 8, !tbaa !36
  store ptr %.0283.ph.ph, ptr %89, align 8, !tbaa !37
  store i32 %.0275.ph.ph, ptr %91, align 4, !tbaa !38
  br label %263

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

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare noundef ptr @memchr(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #3

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


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