; LLVM IR from mateeeeeee/Adria-DX11 :: ThirdParty/ImGui/ImGui/imgui_draw.ll (ZN10ImDrawList11AddPolylineEPK6ImVec2ijif)

; 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.ImDrawList = type <{ %struct.ImVector, %struct.ImVector.0, %struct.ImVector.1, i32, i32, ptr, ptr, ptr, ptr, %struct.ImVector.2, %struct.ImVector.3, %struct.ImVector.4, %struct.ImDrawCmdHeader, %struct.ImDrawListSplitter, float, [4 x i8] }>
%struct.ImVector = type { i32, i32, ptr }
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImVector.1 = 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.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.ImDrawListSharedData = type { %struct.ImVec2, ptr, float, float, float, %struct.ImVec4, i32, [48 x %struct.ImVec2], float, [64 x i8], ptr }
%struct.ImDrawVert = type { %struct.ImVec2, %struct.ImVec2, i32 }

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL5ImMaxIfET_S0_S0_(float noundef, float noundef) #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijif(ptr noundef nonnull align 8 dereferenceable(196) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, float noundef %5) #5 align 2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca float, align 4
  %13 = alloca i8, align 1
  %14 = alloca %struct.ImVec2, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca float, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca i8, align 1
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca %struct.ImVec2, align 4
  %34 = alloca %struct.ImVec2, align 4
  %35 = alloca %struct.ImVec2, align 4
  %36 = alloca %struct.ImVec2, align 4
  %37 = alloca %struct.ImVec2, align 4
  %38 = alloca %struct.ImVec2, align 4
  %39 = alloca %struct.ImVec2, align 4
  %40 = alloca %struct.ImVec2, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  %49 = alloca ptr, align 8
  %50 = alloca %struct.ImVec4, align 4
  %51 = alloca %struct.ImVec2, align 4
  %52 = alloca %struct.ImVec2, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca float, align 4
  %56 = alloca i32, align 4
  %57 = alloca %struct.ImVec2, align 4
  %58 = alloca %struct.ImVec2, align 4
  %59 = alloca %struct.ImVec2, align 4
  %60 = alloca %struct.ImVec2, align 4
  %61 = alloca %struct.ImVec2, align 4
  %62 = alloca %struct.ImVec2, align 4
  %63 = alloca %struct.ImVec2, align 4
  %64 = alloca %struct.ImVec2, align 4
  %65 = alloca %struct.ImVec2, align 4
  %66 = alloca %struct.ImVec2, align 4
  %67 = alloca %struct.ImVec2, align 4
  %68 = alloca %struct.ImVec2, align 4
  %69 = alloca %struct.ImVec2, align 4
  %70 = alloca %struct.ImVec2, align 4
  %71 = alloca %struct.ImVec2, align 4
  %72 = alloca %struct.ImVec2, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca float, align 4
  %82 = alloca float, align 4
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca ptr, align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca ptr, align 8
  %92 = alloca ptr, align 8
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = alloca float, align 4
  %96 = alloca float, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  store float %5, ptr %12, align 4, !tbaa !11
  %97 = load ptr, ptr %7, align 8
  %98 = load i32, ptr %9, align 4, !tbaa !9
  %99 = icmp slt i32 %98, 2
  br i1 %99, label %100, label %101

100:                                              ; preds = %6
  br label %1562

101:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #9
  %102 = load i32, ptr %11, align 4, !tbaa !9
  %103 = and i32 %102, 1
  %104 = icmp ne i32 %103, 0
  %105 = zext i1 %104 to i8
  store i8 %105, ptr %13, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %106 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 5
  %107 = load ptr, ptr %106, align 8, !tbaa !15
  %108 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %107, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 8 %108, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %109 = load i8, ptr %13, align 1, !tbaa !13, !range !28, !noundef !29
  %110 = trunc i8 %109 to i1
  br i1 %110, label %111, label %113

111:                                              ; preds = %101
  %112 = load i32, ptr %9, align 4, !tbaa !9
  br label %116

113:                                              ; preds = %101
  %114 = load i32, ptr %9, align 4, !tbaa !9
  %115 = sub nsw i32 %114, 1
  br label %116

116:                                              ; preds = %113, %111
  %117 = phi i32 [ %112, %111 ], [ %115, %113 ]
  store i32 %117, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #9
  %118 = load float, ptr %12, align 4, !tbaa !11
  %119 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 14
  %120 = load float, ptr %119, align 8, !tbaa !30
  %121 = fcmp ogt float %118, %120
  %122 = zext i1 %121 to i8
  store i8 %122, ptr %16, align 1, !tbaa !13
  %123 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 3
  %124 = load i32, ptr %123, align 8, !tbaa !31
  %125 = and i32 %124, 1
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %127, label %1317

127:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  %128 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 14
  %129 = load float, ptr %128, align 8, !tbaa !30
  store float %129, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %130 = load i32, ptr %10, align 4, !tbaa !9
  %131 = and i32 %130, 16777215
  store i32 %131, ptr %18, align 4, !tbaa !9
  %132 = load float, ptr %12, align 4, !tbaa !11
  %133 = call noundef float @_ZL5ImMaxIfET_S0_S0_(float noundef %132, float noundef 1.000000e+00)
  store float %133, ptr %12, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %134 = load float, ptr %12, align 4, !tbaa !11
  %135 = fptosi float %134 to i32
  store i32 %135, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  %136 = load float, ptr %12, align 4, !tbaa !11
  %137 = load i32, ptr %19, align 4, !tbaa !9
  %138 = sitofp i32 %137 to float
  %139 = fsub float %136, %138
  store float %139, ptr %20, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #9
  %140 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 3
  %141 = load i32, ptr %140, align 8, !tbaa !31
  %142 = and i32 %141, 2
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %153

144:                                              ; preds = %127
  %145 = load i32, ptr %19, align 4, !tbaa !9
  %146 = icmp slt i32 %145, 63
  br i1 %146, label %147, label %153

147:                                              ; preds = %144
  %148 = load float, ptr %20, align 4, !tbaa !11
  %149 = fcmp ole float %148, 0x3EE4F8B580000000
  br i1 %149, label %150, label %153

150:                                              ; preds = %147
  %151 = load float, ptr %17, align 4, !tbaa !11
  %152 = fcmp oeq float %151, 1.000000e+00
  br label %153

153:                                              ; preds = %150, %147, %144, %127
  %154 = phi i1 [ false, %147 ], [ false, %144 ], [ false, %127 ], [ %152, %150 ]
  %155 = zext i1 %154 to i8
  store i8 %155, ptr %21, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %156 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %157 = trunc i8 %156 to i1
  br i1 %157, label %158, label %161

158:                                              ; preds = %153
  %159 = load i32, ptr %15, align 4, !tbaa !9
  %160 = mul nsw i32 %159, 6
  br label %172

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

164:                                              ; preds = %161
  %165 = load i32, ptr %15, align 4, !tbaa !9
  %166 = mul nsw i32 %165, 18
  br label %170

167:                                              ; preds = %161
  %168 = load i32, ptr %15, align 4, !tbaa !9
  %169 = mul nsw i32 %168, 12
  br label %170

170:                                              ; preds = %167, %164
  %171 = phi i32 [ %166, %164 ], [ %169, %167 ]
  br label %172

172:                                              ; preds = %170, %158
  %173 = phi i32 [ %160, %158 ], [ %171, %170 ]
  store i32 %173, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %174 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %175 = trunc i8 %174 to i1
  br i1 %175, label %176, label %179

176:                                              ; preds = %172
  %177 = load i32, ptr %9, align 4, !tbaa !9
  %178 = mul nsw i32 %177, 2
  br label %190

179:                                              ; preds = %172
  %180 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %181 = trunc i8 %180 to i1
  br i1 %181, label %182, label %185

182:                                              ; preds = %179
  %183 = load i32, ptr %9, align 4, !tbaa !9
  %184 = mul nsw i32 %183, 4
  br label %188

185:                                              ; preds = %179
  %186 = load i32, ptr %9, align 4, !tbaa !9
  %187 = mul nsw i32 %186, 3
  br label %188

188:                                              ; preds = %185, %182
  %189 = phi i32 [ %184, %182 ], [ %187, %185 ]
  br label %190

190:                                              ; preds = %188, %176
  %191 = phi i32 [ %178, %176 ], [ %189, %188 ]
  store i32 %191, ptr %23, align 4, !tbaa !9
  %192 = load i32, ptr %22, align 4, !tbaa !9
  %193 = load i32, ptr %23, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %97, i32 noundef %192, i32 noundef %193)
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %194 = load i32, ptr %9, align 4, !tbaa !9
  %195 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %196 = trunc i8 %195 to i1
  br i1 %196, label %201, label %197

197:                                              ; preds = %190
  %198 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %199 = trunc i8 %198 to i1
  %200 = xor i1 %199, true
  br label %201

201:                                              ; preds = %197, %190
  %202 = phi i1 [ true, %190 ], [ %200, %197 ]
  %203 = zext i1 %202 to i64
  %204 = select i1 %202, i32 3, i32 5
  %205 = mul nsw i32 %194, %204
  %206 = sext i32 %205 to i64
  %207 = mul i64 %206, 8
  %208 = alloca i8, i64 %207, align 16
  store ptr %208, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %209 = load ptr, ptr %24, align 8, !tbaa !5
  %210 = load i32, ptr %9, align 4, !tbaa !9
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds %struct.ImVec2, ptr %209, i64 %211
  store ptr %212, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %213

213:                                              ; preds = %290, %201
  %214 = load i32, ptr %26, align 4, !tbaa !9
  %215 = load i32, ptr %15, align 4, !tbaa !9
  %216 = icmp slt i32 %214, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %293

218:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %219 = load i32, ptr %26, align 4, !tbaa !9
  %220 = add nsw i32 %219, 1
  %221 = load i32, ptr %9, align 4, !tbaa !9
  %222 = icmp eq i32 %220, %221
  br i1 %222, label %223, label %224

223:                                              ; preds = %218
  br label %227

224:                                              ; preds = %218
  %225 = load i32, ptr %26, align 4, !tbaa !9
  %226 = add nsw i32 %225, 1
  br label %227

227:                                              ; preds = %224, %223
  %228 = phi i32 [ 0, %223 ], [ %226, %224 ]
  store i32 %228, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = load i32, ptr %27, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.ImVec2, ptr %229, i64 %231
  %233 = getelementptr inbounds %struct.ImVec2, ptr %232, i32 0, i32 0
  %234 = load float, ptr %233, align 4, !tbaa !32
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = load i32, ptr %26, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds %struct.ImVec2, ptr %235, i64 %237
  %239 = getelementptr inbounds %struct.ImVec2, ptr %238, i32 0, i32 0
  %240 = load float, ptr %239, align 4, !tbaa !32
  %241 = fsub float %234, %240
  store float %241, ptr %28, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = load i32, ptr %27, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds %struct.ImVec2, ptr %242, i64 %244
  %246 = getelementptr inbounds %struct.ImVec2, ptr %245, i32 0, i32 1
  %247 = load float, ptr %246, align 4, !tbaa !34
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = load i32, ptr %26, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds %struct.ImVec2, ptr %248, i64 %250
  %252 = getelementptr inbounds %struct.ImVec2, ptr %251, i32 0, i32 1
  %253 = load float, ptr %252, align 4, !tbaa !34
  %254 = fsub float %247, %253
  store float %254, ptr %29, align 4, !tbaa !11
  br label %255

255:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %256 = load float, ptr %28, align 4, !tbaa !11
  %257 = load float, ptr %28, align 4, !tbaa !11
  %258 = load float, ptr %29, align 4, !tbaa !11
  %259 = load float, ptr %29, align 4, !tbaa !11
  %260 = fmul float %258, %259
  %261 = call float @llvm.fmuladd.f32(float %256, float %257, float %260)
  store float %261, ptr %30, align 4, !tbaa !11
  %262 = load float, ptr %30, align 4, !tbaa !11
  %263 = fcmp ogt float %262, 0.000000e+00
  br i1 %263, label %264, label %274

264:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %265 = load float, ptr %30, align 4, !tbaa !11
  %266 = call float @sqrtf(float noundef %265) #9
  %267 = fdiv float 1.000000e+00, %266
  store float %267, ptr %31, align 4, !tbaa !11
  %268 = load float, ptr %31, align 4, !tbaa !11
  %269 = load float, ptr %28, align 4, !tbaa !11
  %270 = fmul float %269, %268
  store float %270, ptr %28, align 4, !tbaa !11
  %271 = load float, ptr %31, align 4, !tbaa !11
  %272 = load float, ptr %29, align 4, !tbaa !11
  %273 = fmul float %272, %271
  store float %273, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %274

274:                                              ; preds = %264, %255
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %275

275:                                              ; preds = %274
  br label %276

276:                                              ; preds = %275
  %277 = load float, ptr %29, align 4, !tbaa !11
  %278 = load ptr, ptr %24, align 8, !tbaa !5
  %279 = load i32, ptr %26, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds %struct.ImVec2, ptr %278, i64 %280
  %282 = getelementptr inbounds %struct.ImVec2, ptr %281, i32 0, i32 0
  store float %277, ptr %282, align 4, !tbaa !32
  %283 = load float, ptr %28, align 4, !tbaa !11
  %284 = fneg float %283
  %285 = load ptr, ptr %24, align 8, !tbaa !5
  %286 = load i32, ptr %26, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds %struct.ImVec2, ptr %285, i64 %287
  %289 = getelementptr inbounds %struct.ImVec2, ptr %288, i32 0, i32 1
  store float %284, ptr %289, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %290

290:                                              ; preds = %276
  %291 = load i32, ptr %26, align 4, !tbaa !9
  %292 = add nsw i32 %291, 1
  store i32 %292, ptr %26, align 4, !tbaa !9
  br label %213, !llvm.loop !35

293:                                              ; preds = %217
  %294 = load i8, ptr %13, align 1, !tbaa !13, !range !28, !noundef !29
  %295 = trunc i8 %294 to i1
  br i1 %295, label %307, label %296

296:                                              ; preds = %293
  %297 = load ptr, ptr %24, align 8, !tbaa !5
  %298 = load i32, ptr %9, align 4, !tbaa !9
  %299 = sub nsw i32 %298, 2
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds %struct.ImVec2, ptr %297, i64 %300
  %302 = load ptr, ptr %24, align 8, !tbaa !5
  %303 = load i32, ptr %9, align 4, !tbaa !9
  %304 = sub nsw i32 %303, 1
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds %struct.ImVec2, ptr %302, i64 %305
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %306, ptr align 4 %301, i64 8, i1 false), !tbaa.struct !27
  br label %307

307:                                              ; preds = %296, %293
  %308 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %309 = trunc i8 %308 to i1
  br i1 %309, label %313, label %310

310:                                              ; preds = %307
  %311 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %312 = trunc i8 %311 to i1
  br i1 %312, label %790, label %313

313:                                              ; preds = %310, %307
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %314 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %315 = trunc i8 %314 to i1
  br i1 %315, label %316, label %319

316:                                              ; preds = %313
  %317 = load float, ptr %12, align 4, !tbaa !11
  %318 = call float @llvm.fmuladd.f32(float %317, float 5.000000e-01, float 1.000000e+00)
  br label %321

319:                                              ; preds = %313
  %320 = load float, ptr %17, align 4, !tbaa !11
  br label %321

321:                                              ; preds = %319, %316
  %322 = phi float [ %318, %316 ], [ %320, %319 ]
  store float %322, ptr %32, align 4, !tbaa !11
  %323 = load i8, ptr %13, align 1, !tbaa !13, !range !28, !noundef !29
  %324 = trunc i8 %323 to i1
  br i1 %324, label %384, label %325

325:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.ImVec2, ptr %326, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %328 = load ptr, ptr %24, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.ImVec2, ptr %328, i64 0
  %330 = load float, ptr %32, align 4, !tbaa !11
  %331 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %329, float noundef %330)
  store <2 x float> %331, ptr %34, align 4
  %332 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %327, ptr noundef nonnull align 4 dereferenceable(8) %34)
  store <2 x float> %332, ptr %33, align 4
  %333 = load ptr, ptr %25, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.ImVec2, ptr %333, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %334, ptr align 4 %33, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %335 = load ptr, ptr %8, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ImVec2, ptr %335, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %337 = load ptr, ptr %24, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.ImVec2, ptr %337, i64 0
  %339 = load float, ptr %32, align 4, !tbaa !11
  %340 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %338, float noundef %339)
  store <2 x float> %340, ptr %36, align 4
  %341 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %336, ptr noundef nonnull align 4 dereferenceable(8) %36)
  store <2 x float> %341, ptr %35, align 4
  %342 = load ptr, ptr %25, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.ImVec2, ptr %342, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %343, ptr align 4 %35, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %344 = load ptr, ptr %8, align 8, !tbaa !5
  %345 = load i32, ptr %9, align 4, !tbaa !9
  %346 = sub nsw i32 %345, 1
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds %struct.ImVec2, ptr %344, i64 %347
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %349 = load ptr, ptr %24, align 8, !tbaa !5
  %350 = load i32, ptr %9, align 4, !tbaa !9
  %351 = sub nsw i32 %350, 1
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds %struct.ImVec2, ptr %349, i64 %352
  %354 = load float, ptr %32, align 4, !tbaa !11
  %355 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %353, float noundef %354)
  store <2 x float> %355, ptr %38, align 4
  %356 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %348, ptr noundef nonnull align 4 dereferenceable(8) %38)
  store <2 x float> %356, ptr %37, align 4
  %357 = load ptr, ptr %25, align 8, !tbaa !5
  %358 = load i32, ptr %9, align 4, !tbaa !9
  %359 = sub nsw i32 %358, 1
  %360 = mul nsw i32 %359, 2
  %361 = add nsw i32 %360, 0
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds %struct.ImVec2, ptr %357, i64 %362
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %363, ptr align 4 %37, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %364 = load ptr, ptr %8, align 8, !tbaa !5
  %365 = load i32, ptr %9, align 4, !tbaa !9
  %366 = sub nsw i32 %365, 1
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds %struct.ImVec2, ptr %364, i64 %367
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %369 = load ptr, ptr %24, align 8, !tbaa !5
  %370 = load i32, ptr %9, align 4, !tbaa !9
  %371 = sub nsw i32 %370, 1
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds %struct.ImVec2, ptr %369, i64 %372
  %374 = load float, ptr %32, align 4, !tbaa !11
  %375 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %373, float noundef %374)
  store <2 x float> %375, ptr %40, align 4
  %376 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %368, ptr noundef nonnull align 4 dereferenceable(8) %40)
  store <2 x float> %376, ptr %39, align 4
  %377 = load ptr, ptr %25, align 8, !tbaa !5
  %378 = load i32, ptr %9, align 4, !tbaa !9
  %379 = sub nsw i32 %378, 1
  %380 = mul nsw i32 %379, 2
  %381 = add nsw i32 %380, 1
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds %struct.ImVec2, ptr %377, i64 %382
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %383, ptr align 4 %39, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %384

384:                                              ; preds = %325, %321
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %385 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %386 = load i32, ptr %385, align 4, !tbaa !37
  store i32 %386, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %387

387:                                              ; preds = %647, %384
  %388 = load i32, ptr %42, align 4, !tbaa !9
  %389 = load i32, ptr %15, align 4, !tbaa !9
  %390 = icmp slt i32 %388, %389
  br i1 %390, label %392, label %391

391:                                              ; preds = %387
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %650

392:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %393 = load i32, ptr %42, align 4, !tbaa !9
  %394 = add nsw i32 %393, 1
  %395 = load i32, ptr %9, align 4, !tbaa !9
  %396 = icmp eq i32 %394, %395
  br i1 %396, label %397, label %398

397:                                              ; preds = %392
  br label %401

398:                                              ; preds = %392
  %399 = load i32, ptr %42, align 4, !tbaa !9
  %400 = add nsw i32 %399, 1
  br label %401

401:                                              ; preds = %398, %397
  %402 = phi i32 [ 0, %397 ], [ %400, %398 ]
  store i32 %402, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %403 = load i32, ptr %42, align 4, !tbaa !9
  %404 = add nsw i32 %403, 1
  %405 = load i32, ptr %9, align 4, !tbaa !9
  %406 = icmp eq i32 %404, %405
  br i1 %406, label %407, label %410

407:                                              ; preds = %401
  %408 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %409 = load i32, ptr %408, align 4, !tbaa !37
  br label %417

410:                                              ; preds = %401
  %411 = load i32, ptr %41, align 4, !tbaa !9
  %412 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %413 = trunc i8 %412 to i1
  %414 = zext i1 %413 to i64
  %415 = select i1 %413, i32 2, i32 3
  %416 = add i32 %411, %415
  br label %417

417:                                              ; preds = %410, %407
  %418 = phi i32 [ %409, %407 ], [ %416, %410 ]
  store i32 %418, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %419 = load ptr, ptr %24, align 8, !tbaa !5
  %420 = load i32, ptr %42, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds %struct.ImVec2, ptr %419, i64 %421
  %423 = getelementptr inbounds %struct.ImVec2, ptr %422, i32 0, i32 0
  %424 = load float, ptr %423, align 4, !tbaa !32
  %425 = load ptr, ptr %24, align 8, !tbaa !5
  %426 = load i32, ptr %43, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds %struct.ImVec2, ptr %425, i64 %427
  %429 = getelementptr inbounds %struct.ImVec2, ptr %428, i32 0, i32 0
  %430 = load float, ptr %429, align 4, !tbaa !32
  %431 = fadd float %424, %430
  %432 = fmul float %431, 5.000000e-01
  store float %432, ptr %45, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %433 = load ptr, ptr %24, align 8, !tbaa !5
  %434 = load i32, ptr %42, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds %struct.ImVec2, ptr %433, i64 %435
  %437 = getelementptr inbounds %struct.ImVec2, ptr %436, i32 0, i32 1
  %438 = load float, ptr %437, align 4, !tbaa !34
  %439 = load ptr, ptr %24, align 8, !tbaa !5
  %440 = load i32, ptr %43, align 4, !tbaa !9
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds %struct.ImVec2, ptr %439, i64 %441
  %443 = getelementptr inbounds %struct.ImVec2, ptr %442, i32 0, i32 1
  %444 = load float, ptr %443, align 4, !tbaa !34
  %445 = fadd float %438, %444
  %446 = fmul float %445, 5.000000e-01
  store float %446, ptr %46, align 4, !tbaa !11
  br label %447

447:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %448 = load float, ptr %45, align 4, !tbaa !11
  %449 = load float, ptr %45, align 4, !tbaa !11
  %450 = load float, ptr %46, align 4, !tbaa !11
  %451 = load float, ptr %46, align 4, !tbaa !11
  %452 = fmul float %450, %451
  %453 = call float @llvm.fmuladd.f32(float %448, float %449, float %452)
  store float %453, ptr %47, align 4, !tbaa !11
  %454 = load float, ptr %47, align 4, !tbaa !11
  %455 = fcmp ogt float %454, 0x3EB0C6F7A0000000
  br i1 %455, label %456, label %469

456:                                              ; preds = %447
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %457 = load float, ptr %47, align 4, !tbaa !11
  %458 = fdiv float 1.000000e+00, %457
  store float %458, ptr %48, align 4, !tbaa !11
  %459 = load float, ptr %48, align 4, !tbaa !11
  %460 = fcmp ogt float %459, 1.000000e+02
  br i1 %460, label %461, label %462

461:                                              ; preds = %456
  store float 1.000000e+02, ptr %48, align 4, !tbaa !11
  br label %462

462:                                              ; preds = %461, %456
  %463 = load float, ptr %48, align 4, !tbaa !11
  %464 = load float, ptr %45, align 4, !tbaa !11
  %465 = fmul float %464, %463
  store float %465, ptr %45, align 4, !tbaa !11
  %466 = load float, ptr %48, align 4, !tbaa !11
  %467 = load float, ptr %46, align 4, !tbaa !11
  %468 = fmul float %467, %466
  store float %468, ptr %46, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %469

469:                                              ; preds = %462, %447
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %470

470:                                              ; preds = %469
  br label %471

471:                                              ; preds = %470
  %472 = load float, ptr %32, align 4, !tbaa !11
  %473 = load float, ptr %45, align 4, !tbaa !11
  %474 = fmul float %473, %472
  store float %474, ptr %45, align 4, !tbaa !11
  %475 = load float, ptr %32, align 4, !tbaa !11
  %476 = load float, ptr %46, align 4, !tbaa !11
  %477 = fmul float %476, %475
  store float %477, ptr %46, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %478 = load ptr, ptr %25, align 8, !tbaa !5
  %479 = load i32, ptr %43, align 4, !tbaa !9
  %480 = mul nsw i32 %479, 2
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds %struct.ImVec2, ptr %478, i64 %481
  store ptr %482, ptr %49, align 8, !tbaa !5
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = load i32, ptr %43, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds %struct.ImVec2, ptr %483, i64 %485
  %487 = getelementptr inbounds %struct.ImVec2, ptr %486, i32 0, i32 0
  %488 = load float, ptr %487, align 4, !tbaa !32
  %489 = load float, ptr %45, align 4, !tbaa !11
  %490 = fadd float %488, %489
  %491 = load ptr, ptr %49, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.ImVec2, ptr %491, i64 0
  %493 = getelementptr inbounds %struct.ImVec2, ptr %492, i32 0, i32 0
  store float %490, ptr %493, align 4, !tbaa !32
  %494 = load ptr, ptr %8, align 8, !tbaa !5
  %495 = load i32, ptr %43, align 4, !tbaa !9
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds %struct.ImVec2, ptr %494, i64 %496
  %498 = getelementptr inbounds %struct.ImVec2, ptr %497, i32 0, i32 1
  %499 = load float, ptr %498, align 4, !tbaa !34
  %500 = load float, ptr %46, align 4, !tbaa !11
  %501 = fadd float %499, %500
  %502 = load ptr, ptr %49, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.ImVec2, ptr %502, i64 0
  %504 = getelementptr inbounds %struct.ImVec2, ptr %503, i32 0, i32 1
  store float %501, ptr %504, align 4, !tbaa !34
  %505 = load ptr, ptr %8, align 8, !tbaa !5
  %506 = load i32, ptr %43, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds %struct.ImVec2, ptr %505, i64 %507
  %509 = getelementptr inbounds %struct.ImVec2, ptr %508, i32 0, i32 0
  %510 = load float, ptr %509, align 4, !tbaa !32
  %511 = load float, ptr %45, align 4, !tbaa !11
  %512 = fsub float %510, %511
  %513 = load ptr, ptr %49, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.ImVec2, ptr %513, i64 1
  %515 = getelementptr inbounds %struct.ImVec2, ptr %514, i32 0, i32 0
  store float %512, ptr %515, align 4, !tbaa !32
  %516 = load ptr, ptr %8, align 8, !tbaa !5
  %517 = load i32, ptr %43, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds %struct.ImVec2, ptr %516, i64 %518
  %520 = getelementptr inbounds %struct.ImVec2, ptr %519, i32 0, i32 1
  %521 = load float, ptr %520, align 4, !tbaa !34
  %522 = load float, ptr %46, align 4, !tbaa !11
  %523 = fsub float %521, %522
  %524 = load ptr, ptr %49, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.ImVec2, ptr %524, i64 1
  %526 = getelementptr inbounds %struct.ImVec2, ptr %525, i32 0, i32 1
  store float %523, ptr %526, align 4, !tbaa !34
  %527 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %528 = trunc i8 %527 to i1
  br i1 %528, label %529, label %569

529:                                              ; preds = %471
  %530 = load i32, ptr %44, align 4, !tbaa !9
  %531 = add i32 %530, 0
  %532 = trunc i32 %531 to i16
  %533 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %534 = load ptr, ptr %533, align 8, !tbaa !38
  %535 = getelementptr inbounds i16, ptr %534, i64 0
  store i16 %532, ptr %535, align 2, !tbaa !39
  %536 = load i32, ptr %41, align 4, !tbaa !9
  %537 = add i32 %536, 0
  %538 = trunc i32 %537 to i16
  %539 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %540 = load ptr, ptr %539, align 8, !tbaa !38
  %541 = getelementptr inbounds i16, ptr %540, i64 1
  store i16 %538, ptr %541, align 2, !tbaa !39
  %542 = load i32, ptr %41, align 4, !tbaa !9
  %543 = add i32 %542, 1
  %544 = trunc i32 %543 to i16
  %545 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %546 = load ptr, ptr %545, align 8, !tbaa !38
  %547 = getelementptr inbounds i16, ptr %546, i64 2
  store i16 %544, ptr %547, align 2, !tbaa !39
  %548 = load i32, ptr %44, align 4, !tbaa !9
  %549 = add i32 %548, 1
  %550 = trunc i32 %549 to i16
  %551 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %552 = load ptr, ptr %551, align 8, !tbaa !38
  %553 = getelementptr inbounds i16, ptr %552, i64 3
  store i16 %550, ptr %553, align 2, !tbaa !39
  %554 = load i32, ptr %41, align 4, !tbaa !9
  %555 = add i32 %554, 1
  %556 = trunc i32 %555 to i16
  %557 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %558 = load ptr, ptr %557, align 8, !tbaa !38
  %559 = getelementptr inbounds i16, ptr %558, i64 4
  store i16 %556, ptr %559, align 2, !tbaa !39
  %560 = load i32, ptr %44, align 4, !tbaa !9
  %561 = add i32 %560, 0
  %562 = trunc i32 %561 to i16
  %563 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %564 = load ptr, ptr %563, align 8, !tbaa !38
  %565 = getelementptr inbounds i16, ptr %564, i64 5
  store i16 %562, ptr %565, align 2, !tbaa !39
  %566 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %567 = load ptr, ptr %566, align 8, !tbaa !38
  %568 = getelementptr inbounds i16, ptr %567, i64 6
  store ptr %568, ptr %566, align 8, !tbaa !38
  br label %645

569:                                              ; preds = %471
  %570 = load i32, ptr %44, align 4, !tbaa !9
  %571 = add i32 %570, 0
  %572 = trunc i32 %571 to i16
  %573 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %574 = load ptr, ptr %573, align 8, !tbaa !38
  %575 = getelementptr inbounds i16, ptr %574, i64 0
  store i16 %572, ptr %575, align 2, !tbaa !39
  %576 = load i32, ptr %41, align 4, !tbaa !9
  %577 = add i32 %576, 0
  %578 = trunc i32 %577 to i16
  %579 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %580 = load ptr, ptr %579, align 8, !tbaa !38
  %581 = getelementptr inbounds i16, ptr %580, i64 1
  store i16 %578, ptr %581, align 2, !tbaa !39
  %582 = load i32, ptr %41, align 4, !tbaa !9
  %583 = add i32 %582, 2
  %584 = trunc i32 %583 to i16
  %585 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %586 = load ptr, ptr %585, align 8, !tbaa !38
  %587 = getelementptr inbounds i16, ptr %586, i64 2
  store i16 %584, ptr %587, align 2, !tbaa !39
  %588 = load i32, ptr %41, align 4, !tbaa !9
  %589 = add i32 %588, 2
  %590 = trunc i32 %589 to i16
  %591 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %592 = load ptr, ptr %591, align 8, !tbaa !38
  %593 = getelementptr inbounds i16, ptr %592, i64 3
  store i16 %590, ptr %593, align 2, !tbaa !39
  %594 = load i32, ptr %44, align 4, !tbaa !9
  %595 = add i32 %594, 2
  %596 = trunc i32 %595 to i16
  %597 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %598 = load ptr, ptr %597, align 8, !tbaa !38
  %599 = getelementptr inbounds i16, ptr %598, i64 4
  store i16 %596, ptr %599, align 2, !tbaa !39
  %600 = load i32, ptr %44, align 4, !tbaa !9
  %601 = add i32 %600, 0
  %602 = trunc i32 %601 to i16
  %603 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %604 = load ptr, ptr %603, align 8, !tbaa !38
  %605 = getelementptr inbounds i16, ptr %604, i64 5
  store i16 %602, ptr %605, align 2, !tbaa !39
  %606 = load i32, ptr %44, align 4, !tbaa !9
  %607 = add i32 %606, 1
  %608 = trunc i32 %607 to i16
  %609 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %610 = load ptr, ptr %609, align 8, !tbaa !38
  %611 = getelementptr inbounds i16, ptr %610, i64 6
  store i16 %608, ptr %611, align 2, !tbaa !39
  %612 = load i32, ptr %41, align 4, !tbaa !9
  %613 = add i32 %612, 1
  %614 = trunc i32 %613 to i16
  %615 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %616 = load ptr, ptr %615, align 8, !tbaa !38
  %617 = getelementptr inbounds i16, ptr %616, i64 7
  store i16 %614, ptr %617, align 2, !tbaa !39
  %618 = load i32, ptr %41, align 4, !tbaa !9
  %619 = add i32 %618, 0
  %620 = trunc i32 %619 to i16
  %621 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %622 = load ptr, ptr %621, align 8, !tbaa !38
  %623 = getelementptr inbounds i16, ptr %622, i64 8
  store i16 %620, ptr %623, align 2, !tbaa !39
  %624 = load i32, ptr %41, align 4, !tbaa !9
  %625 = add i32 %624, 0
  %626 = trunc i32 %625 to i16
  %627 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %628 = load ptr, ptr %627, align 8, !tbaa !38
  %629 = getelementptr inbounds i16, ptr %628, i64 9
  store i16 %626, ptr %629, align 2, !tbaa !39
  %630 = load i32, ptr %44, align 4, !tbaa !9
  %631 = add i32 %630, 0
  %632 = trunc i32 %631 to i16
  %633 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %634 = load ptr, ptr %633, align 8, !tbaa !38
  %635 = getelementptr inbounds i16, ptr %634, i64 10
  store i16 %632, ptr %635, align 2, !tbaa !39
  %636 = load i32, ptr %44, align 4, !tbaa !9
  %637 = add i32 %636, 1
  %638 = trunc i32 %637 to i16
  %639 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %640 = load ptr, ptr %639, align 8, !tbaa !38
  %641 = getelementptr inbounds i16, ptr %640, i64 11
  store i16 %638, ptr %641, align 2, !tbaa !39
  %642 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %643 = load ptr, ptr %642, align 8, !tbaa !38
  %644 = getelementptr inbounds i16, ptr %643, i64 12
  store ptr %644, ptr %642, align 8, !tbaa !38
  br label %645

645:                                              ; preds = %569, %529
  %646 = load i32, ptr %44, align 4, !tbaa !9
  store i32 %646, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #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
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %647

647:                                              ; preds = %645
  %648 = load i32, ptr %42, align 4, !tbaa !9
  %649 = add nsw i32 %648, 1
  store i32 %649, ptr %42, align 4, !tbaa !9
  br label %387, !llvm.loop !41

650:                                              ; preds = %391
  %651 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %652 = trunc i8 %651 to i1
  br i1 %652, label %653, label %720

653:                                              ; preds = %650
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #9
  %654 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 5
  %655 = load ptr, ptr %654, align 8, !tbaa !15
  %656 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %655, i32 0, i32 10
  %657 = load ptr, ptr %656, align 8, !tbaa !42
  %658 = load i32, ptr %19, align 4, !tbaa !9
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds %struct.ImVec4, ptr %657, i64 %659
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %660, i64 16, i1 false), !tbaa.struct !44
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %661 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 0
  %662 = load float, ptr %661, align 4, !tbaa !45
  %663 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 1
  %664 = load float, ptr %663, align 4, !tbaa !46
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %51, float noundef %662, float noundef %664)
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %665 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 2
  %666 = load float, ptr %665, align 4, !tbaa !47
  %667 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 3
  %668 = load float, ptr %667, align 4, !tbaa !48
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %52, float noundef %666, float noundef %668)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %669

669:                                              ; preds = %716, %653
  %670 = load i32, ptr %53, align 4, !tbaa !9
  %671 = load i32, ptr %9, align 4, !tbaa !9
  %672 = icmp slt i32 %670, %671
  br i1 %672, label %674, label %673

673:                                              ; preds = %669
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %719

674:                                              ; preds = %669
  %675 = load ptr, ptr %25, align 8, !tbaa !5
  %676 = load i32, ptr %53, align 4, !tbaa !9
  %677 = mul nsw i32 %676, 2
  %678 = add nsw i32 %677, 0
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds %struct.ImVec2, ptr %675, i64 %679
  %681 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %682 = load ptr, ptr %681, align 8, !tbaa !49
  %683 = getelementptr inbounds %struct.ImDrawVert, ptr %682, i64 0
  %684 = getelementptr inbounds %struct.ImDrawVert, ptr %683, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %684, ptr align 4 %680, i64 8, i1 false), !tbaa.struct !27
  %685 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %686 = load ptr, ptr %685, align 8, !tbaa !49
  %687 = getelementptr inbounds %struct.ImDrawVert, ptr %686, i64 0
  %688 = getelementptr inbounds %struct.ImDrawVert, ptr %687, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %688, ptr align 4 %51, i64 8, i1 false), !tbaa.struct !27
  %689 = load i32, ptr %10, align 4, !tbaa !9
  %690 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %691 = load ptr, ptr %690, align 8, !tbaa !49
  %692 = getelementptr inbounds %struct.ImDrawVert, ptr %691, i64 0
  %693 = getelementptr inbounds %struct.ImDrawVert, ptr %692, i32 0, i32 2
  store i32 %689, ptr %693, align 4, !tbaa !50
  %694 = load ptr, ptr %25, align 8, !tbaa !5
  %695 = load i32, ptr %53, align 4, !tbaa !9
  %696 = mul nsw i32 %695, 2
  %697 = add nsw i32 %696, 1
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds %struct.ImVec2, ptr %694, i64 %698
  %700 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %701 = load ptr, ptr %700, align 8, !tbaa !49
  %702 = getelementptr inbounds %struct.ImDrawVert, ptr %701, i64 1
  %703 = getelementptr inbounds %struct.ImDrawVert, ptr %702, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %703, ptr align 4 %699, i64 8, i1 false), !tbaa.struct !27
  %704 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %705 = load ptr, ptr %704, align 8, !tbaa !49
  %706 = getelementptr inbounds %struct.ImDrawVert, ptr %705, i64 1
  %707 = getelementptr inbounds %struct.ImDrawVert, ptr %706, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %707, ptr align 4 %52, i64 8, i1 false), !tbaa.struct !27
  %708 = load i32, ptr %10, align 4, !tbaa !9
  %709 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %710 = load ptr, ptr %709, align 8, !tbaa !49
  %711 = getelementptr inbounds %struct.ImDrawVert, ptr %710, i64 1
  %712 = getelementptr inbounds %struct.ImDrawVert, ptr %711, i32 0, i32 2
  store i32 %708, ptr %712, align 4, !tbaa !50
  %713 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %714 = load ptr, ptr %713, align 8, !tbaa !49
  %715 = getelementptr inbounds %struct.ImDrawVert, ptr %714, i64 2
  store ptr %715, ptr %713, align 8, !tbaa !49
  br label %716

716:                                              ; preds = %674
  %717 = load i32, ptr %53, align 4, !tbaa !9
  %718 = add nsw i32 %717, 1
  store i32 %718, ptr %53, align 4, !tbaa !9
  br label %669, !llvm.loop !52

719:                                              ; preds = %673
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #9
  br label %789

720:                                              ; preds = %650
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %721

721:                                              ; preds = %785, %720
  %722 = load i32, ptr %54, align 4, !tbaa !9
  %723 = load i32, ptr %9, align 4, !tbaa !9
  %724 = icmp slt i32 %722, %723
  br i1 %724, label %726, label %725

725:                                              ; preds = %721
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %788

726:                                              ; preds = %721
  %727 = load ptr, ptr %8, align 8, !tbaa !5
  %728 = load i32, ptr %54, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds %struct.ImVec2, ptr %727, i64 %729
  %731 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %732 = load ptr, ptr %731, align 8, !tbaa !49
  %733 = getelementptr inbounds %struct.ImDrawVert, ptr %732, i64 0
  %734 = getelementptr inbounds %struct.ImDrawVert, ptr %733, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %734, ptr align 4 %730, i64 8, i1 false), !tbaa.struct !27
  %735 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %736 = load ptr, ptr %735, align 8, !tbaa !49
  %737 = getelementptr inbounds %struct.ImDrawVert, ptr %736, i64 0
  %738 = getelementptr inbounds %struct.ImDrawVert, ptr %737, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %738, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %739 = load i32, ptr %10, align 4, !tbaa !9
  %740 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %741 = load ptr, ptr %740, align 8, !tbaa !49
  %742 = getelementptr inbounds %struct.ImDrawVert, ptr %741, i64 0
  %743 = getelementptr inbounds %struct.ImDrawVert, ptr %742, i32 0, i32 2
  store i32 %739, ptr %743, align 4, !tbaa !50
  %744 = load ptr, ptr %25, align 8, !tbaa !5
  %745 = load i32, ptr %54, align 4, !tbaa !9
  %746 = mul nsw i32 %745, 2
  %747 = add nsw i32 %746, 0
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds %struct.ImVec2, ptr %744, i64 %748
  %750 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %751 = load ptr, ptr %750, align 8, !tbaa !49
  %752 = getelementptr inbounds %struct.ImDrawVert, ptr %751, i64 1
  %753 = getelementptr inbounds %struct.ImDrawVert, ptr %752, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %753, ptr align 4 %749, i64 8, i1 false), !tbaa.struct !27
  %754 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %755 = load ptr, ptr %754, align 8, !tbaa !49
  %756 = getelementptr inbounds %struct.ImDrawVert, ptr %755, i64 1
  %757 = getelementptr inbounds %struct.ImDrawVert, ptr %756, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %757, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %758 = load i32, ptr %18, align 4, !tbaa !9
  %759 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %760 = load ptr, ptr %759, align 8, !tbaa !49
  %761 = getelementptr inbounds %struct.ImDrawVert, ptr %760, i64 1
  %762 = getelementptr inbounds %struct.ImDrawVert, ptr %761, i32 0, i32 2
  store i32 %758, ptr %762, align 4, !tbaa !50
  %763 = load ptr, ptr %25, align 8, !tbaa !5
  %764 = load i32, ptr %54, align 4, !tbaa !9
  %765 = mul nsw i32 %764, 2
  %766 = add nsw i32 %765, 1
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds %struct.ImVec2, ptr %763, i64 %767
  %769 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %770 = load ptr, ptr %769, align 8, !tbaa !49
  %771 = getelementptr inbounds %struct.ImDrawVert, ptr %770, i64 2
  %772 = getelementptr inbounds %struct.ImDrawVert, ptr %771, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %772, ptr align 4 %768, i64 8, i1 false), !tbaa.struct !27
  %773 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %774 = load ptr, ptr %773, align 8, !tbaa !49
  %775 = getelementptr inbounds %struct.ImDrawVert, ptr %774, i64 2
  %776 = getelementptr inbounds %struct.ImDrawVert, ptr %775, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %776, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %777 = load i32, ptr %18, align 4, !tbaa !9
  %778 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %779 = load ptr, ptr %778, align 8, !tbaa !49
  %780 = getelementptr inbounds %struct.ImDrawVert, ptr %779, i64 2
  %781 = getelementptr inbounds %struct.ImDrawVert, ptr %780, i32 0, i32 2
  store i32 %777, ptr %781, align 4, !tbaa !50
  %782 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %783 = load ptr, ptr %782, align 8, !tbaa !49
  %784 = getelementptr inbounds %struct.ImDrawVert, ptr %783, i64 3
  store ptr %784, ptr %782, align 8, !tbaa !49
  br label %785

785:                                              ; preds = %726
  %786 = load i32, ptr %54, align 4, !tbaa !9
  %787 = add nsw i32 %786, 1
  store i32 %787, ptr %54, align 4, !tbaa !9
  br label %721, !llvm.loop !53

788:                                              ; preds = %725
  br label %789

789:                                              ; preds = %788, %719
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %1310

790:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %791 = load float, ptr %12, align 4, !tbaa !11
  %792 = load float, ptr %17, align 4, !tbaa !11
  %793 = fsub float %791, %792
  %794 = fmul float %793, 5.000000e-01
  store float %794, ptr %55, align 4, !tbaa !11
  %795 = load i8, ptr %13, align 1, !tbaa !13, !range !28, !noundef !29
  %796 = trunc i8 %795 to i1
  br i1 %796, label %912, label %797

797:                                              ; preds = %790
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %798 = load i32, ptr %9, align 4, !tbaa !9
  %799 = sub nsw i32 %798, 1
  store i32 %799, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.ImVec2, ptr %800, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %802 = load ptr, ptr %24, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.ImVec2, ptr %802, i64 0
  %804 = load float, ptr %55, align 4, !tbaa !11
  %805 = load float, ptr %17, align 4, !tbaa !11
  %806 = fadd float %804, %805
  %807 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %803, float noundef %806)
  store <2 x float> %807, ptr %58, align 4
  %808 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %801, ptr noundef nonnull align 4 dereferenceable(8) %58)
  store <2 x float> %808, ptr %57, align 4
  %809 = load ptr, ptr %25, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.ImVec2, ptr %809, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %810, ptr align 4 %57, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %811 = load ptr, ptr %8, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.ImVec2, ptr %811, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %813 = load ptr, ptr %24, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.ImVec2, ptr %813, i64 0
  %815 = load float, ptr %55, align 4, !tbaa !11
  %816 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %814, float noundef %815)
  store <2 x float> %816, ptr %60, align 4
  %817 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %812, ptr noundef nonnull align 4 dereferenceable(8) %60)
  store <2 x float> %817, ptr %59, align 4
  %818 = load ptr, ptr %25, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.ImVec2, ptr %818, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %819, ptr align 4 %59, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %820 = load ptr, ptr %8, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.ImVec2, ptr %820, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %822 = load ptr, ptr %24, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.ImVec2, ptr %822, i64 0
  %824 = load float, ptr %55, align 4, !tbaa !11
  %825 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %823, float noundef %824)
  store <2 x float> %825, ptr %62, align 4
  %826 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %821, ptr noundef nonnull align 4 dereferenceable(8) %62)
  store <2 x float> %826, ptr %61, align 4
  %827 = load ptr, ptr %25, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.ImVec2, ptr %827, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %828, ptr align 4 %61, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %829 = load ptr, ptr %8, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.ImVec2, ptr %829, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %831 = load ptr, ptr %24, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.ImVec2, ptr %831, i64 0
  %833 = load float, ptr %55, align 4, !tbaa !11
  %834 = load float, ptr %17, align 4, !tbaa !11
  %835 = fadd float %833, %834
  %836 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %832, float noundef %835)
  store <2 x float> %836, ptr %64, align 4
  %837 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %830, ptr noundef nonnull align 4 dereferenceable(8) %64)
  store <2 x float> %837, ptr %63, align 4
  %838 = load ptr, ptr %25, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.ImVec2, ptr %838, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %839, ptr align 4 %63, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %840 = load ptr, ptr %8, align 8, !tbaa !5
  %841 = load i32, ptr %56, align 4, !tbaa !9
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds %struct.ImVec2, ptr %840, i64 %842
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %844 = load ptr, ptr %24, align 8, !tbaa !5
  %845 = load i32, ptr %56, align 4, !tbaa !9
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds %struct.ImVec2, ptr %844, i64 %846
  %848 = load float, ptr %55, align 4, !tbaa !11
  %849 = load float, ptr %17, align 4, !tbaa !11
  %850 = fadd float %848, %849
  %851 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %847, float noundef %850)
  store <2 x float> %851, ptr %66, align 4
  %852 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %843, ptr noundef nonnull align 4 dereferenceable(8) %66)
  store <2 x float> %852, ptr %65, align 4
  %853 = load ptr, ptr %25, align 8, !tbaa !5
  %854 = load i32, ptr %56, align 4, !tbaa !9
  %855 = mul nsw i32 %854, 4
  %856 = add nsw i32 %855, 0
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds %struct.ImVec2, ptr %853, i64 %857
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %858, ptr align 4 %65, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %859 = load ptr, ptr %8, align 8, !tbaa !5
  %860 = load i32, ptr %56, align 4, !tbaa !9
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds %struct.ImVec2, ptr %859, i64 %861
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %863 = load ptr, ptr %24, align 8, !tbaa !5
  %864 = load i32, ptr %56, align 4, !tbaa !9
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds %struct.ImVec2, ptr %863, i64 %865
  %867 = load float, ptr %55, align 4, !tbaa !11
  %868 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %866, float noundef %867)
  store <2 x float> %868, ptr %68, align 4
  %869 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %862, ptr noundef nonnull align 4 dereferenceable(8) %68)
  store <2 x float> %869, ptr %67, align 4
  %870 = load ptr, ptr %25, align 8, !tbaa !5
  %871 = load i32, ptr %56, align 4, !tbaa !9
  %872 = mul nsw i32 %871, 4
  %873 = add nsw i32 %872, 1
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds %struct.ImVec2, ptr %870, i64 %874
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %875, ptr align 4 %67, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %876 = load ptr, ptr %8, align 8, !tbaa !5
  %877 = load i32, ptr %56, align 4, !tbaa !9
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds %struct.ImVec2, ptr %876, i64 %878
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %880 = load ptr, ptr %24, align 8, !tbaa !5
  %881 = load i32, ptr %56, align 4, !tbaa !9
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds %struct.ImVec2, ptr %880, i64 %882
  %884 = load float, ptr %55, align 4, !tbaa !11
  %885 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %883, float noundef %884)
  store <2 x float> %885, ptr %70, align 4
  %886 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %879, ptr noundef nonnull align 4 dereferenceable(8) %70)
  store <2 x float> %886, ptr %69, align 4
  %887 = load ptr, ptr %25, align 8, !tbaa !5
  %888 = load i32, ptr %56, align 4, !tbaa !9
  %889 = mul nsw i32 %888, 4
  %890 = add nsw i32 %889, 2
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds %struct.ImVec2, ptr %887, i64 %891
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %892, ptr align 4 %69, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %893 = load ptr, ptr %8, align 8, !tbaa !5
  %894 = load i32, ptr %56, align 4, !tbaa !9
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds %struct.ImVec2, ptr %893, i64 %895
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %897 = load ptr, ptr %24, align 8, !tbaa !5
  %898 = load i32, ptr %56, align 4, !tbaa !9
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds %struct.ImVec2, ptr %897, i64 %899
  %901 = load float, ptr %55, align 4, !tbaa !11
  %902 = load float, ptr %17, align 4, !tbaa !11
  %903 = fadd float %901, %902
  %904 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %900, float noundef %903)
  store <2 x float> %904, ptr %72, align 4
  %905 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %896, ptr noundef nonnull align 4 dereferenceable(8) %72)
  store <2 x float> %905, ptr %71, align 4
  %906 = load ptr, ptr %25, align 8, !tbaa !5
  %907 = load i32, ptr %56, align 4, !tbaa !9
  %908 = mul nsw i32 %907, 4
  %909 = add nsw i32 %908, 3
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds %struct.ImVec2, ptr %906, i64 %910
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %911, ptr align 4 %71, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %912

912:                                              ; preds = %797, %790
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  %913 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %914 = load i32, ptr %913, align 4, !tbaa !37
  store i32 %914, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %915

915:                                              ; preds = %1217, %912
  %916 = load i32, ptr %74, align 4, !tbaa !9
  %917 = load i32, ptr %15, align 4, !tbaa !9
  %918 = icmp slt i32 %916, %917
  br i1 %918, label %920, label %919

919:                                              ; preds = %915
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #9
  br label %1220

920:                                              ; preds = %915
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %921 = load i32, ptr %74, align 4, !tbaa !9
  %922 = add nsw i32 %921, 1
  %923 = load i32, ptr %9, align 4, !tbaa !9
  %924 = icmp eq i32 %922, %923
  br i1 %924, label %925, label %926

925:                                              ; preds = %920
  br label %929

926:                                              ; preds = %920
  %927 = load i32, ptr %74, align 4, !tbaa !9
  %928 = add nsw i32 %927, 1
  br label %929

929:                                              ; preds = %926, %925
  %930 = phi i32 [ 0, %925 ], [ %928, %926 ]
  store i32 %930, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %931 = load i32, ptr %74, align 4, !tbaa !9
  %932 = add nsw i32 %931, 1
  %933 = load i32, ptr %9, align 4, !tbaa !9
  %934 = icmp eq i32 %932, %933
  br i1 %934, label %935, label %938

935:                                              ; preds = %929
  %936 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %937 = load i32, ptr %936, align 4, !tbaa !37
  br label %941

938:                                              ; preds = %929
  %939 = load i32, ptr %73, align 4, !tbaa !9
  %940 = add i32 %939, 4
  br label %941

941:                                              ; preds = %938, %935
  %942 = phi i32 [ %937, %935 ], [ %940, %938 ]
  store i32 %942, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #9
  %943 = load ptr, ptr %24, align 8, !tbaa !5
  %944 = load i32, ptr %74, align 4, !tbaa !9
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds %struct.ImVec2, ptr %943, i64 %945
  %947 = getelementptr inbounds %struct.ImVec2, ptr %946, i32 0, i32 0
  %948 = load float, ptr %947, align 4, !tbaa !32
  %949 = load ptr, ptr %24, align 8, !tbaa !5
  %950 = load i32, ptr %75, align 4, !tbaa !9
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds %struct.ImVec2, ptr %949, i64 %951
  %953 = getelementptr inbounds %struct.ImVec2, ptr %952, i32 0, i32 0
  %954 = load float, ptr %953, align 4, !tbaa !32
  %955 = fadd float %948, %954
  %956 = fmul float %955, 5.000000e-01
  store float %956, ptr %77, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %957 = load ptr, ptr %24, align 8, !tbaa !5
  %958 = load i32, ptr %74, align 4, !tbaa !9
  %959 = sext i32 %958 to i64
  %960 = getelementptr inbounds %struct.ImVec2, ptr %957, i64 %959
  %961 = getelementptr inbounds %struct.ImVec2, ptr %960, i32 0, i32 1
  %962 = load float, ptr %961, align 4, !tbaa !34
  %963 = load ptr, ptr %24, align 8, !tbaa !5
  %964 = load i32, ptr %75, align 4, !tbaa !9
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds %struct.ImVec2, ptr %963, i64 %965
  %967 = getelementptr inbounds %struct.ImVec2, ptr %966, i32 0, i32 1
  %968 = load float, ptr %967, align 4, !tbaa !34
  %969 = fadd float %962, %968
  %970 = fmul float %969, 5.000000e-01
  store float %970, ptr %78, align 4, !tbaa !11
  br label %971

971:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %972 = load float, ptr %77, align 4, !tbaa !11
  %973 = load float, ptr %77, align 4, !tbaa !11
  %974 = load float, ptr %78, align 4, !tbaa !11
  %975 = load float, ptr %78, align 4, !tbaa !11
  %976 = fmul float %974, %975
  %977 = call float @llvm.fmuladd.f32(float %972, float %973, float %976)
  store float %977, ptr %79, align 4, !tbaa !11
  %978 = load float, ptr %79, align 4, !tbaa !11
  %979 = fcmp ogt float %978, 0x3EB0C6F7A0000000
  br i1 %979, label %980, label %993

980:                                              ; preds = %971
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %981 = load float, ptr %79, align 4, !tbaa !11
  %982 = fdiv float 1.000000e+00, %981
  store float %982, ptr %80, align 4, !tbaa !11
  %983 = load float, ptr %80, align 4, !tbaa !11
  %984 = fcmp ogt float %983, 1.000000e+02
  br i1 %984, label %985, label %986

985:                                              ; preds = %980
  store float 1.000000e+02, ptr %80, align 4, !tbaa !11
  br label %986

986:                                              ; preds = %985, %980
  %987 = load float, ptr %80, align 4, !tbaa !11
  %988 = load float, ptr %77, align 4, !tbaa !11
  %989 = fmul float %988, %987
  store float %989, ptr %77, align 4, !tbaa !11
  %990 = load float, ptr %80, align 4, !tbaa !11
  %991 = load float, ptr %78, align 4, !tbaa !11
  %992 = fmul float %991, %990
  store float %992, ptr %78, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  br label %993

993:                                              ; preds = %986, %971
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  br label %994

994:                                              ; preds = %993
  br label %995

995:                                              ; preds = %994
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  %996 = load float, ptr %77, align 4, !tbaa !11
  %997 = load float, ptr %55, align 4, !tbaa !11
  %998 = load float, ptr %17, align 4, !tbaa !11
  %999 = fadd float %997, %998
  %1000 = fmul float %996, %999
  store float %1000, ptr %81, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %1001 = load float, ptr %78, align 4, !tbaa !11
  %1002 = load float, ptr %55, align 4, !tbaa !11
  %1003 = load float, ptr %17, align 4, !tbaa !11
  %1004 = fadd float %1002, %1003
  %1005 = fmul float %1001, %1004
  store float %1005, ptr %82, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  %1006 = load float, ptr %77, align 4, !tbaa !11
  %1007 = load float, ptr %55, align 4, !tbaa !11
  %1008 = fmul float %1006, %1007
  store float %1008, ptr %83, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #9
  %1009 = load float, ptr %78, align 4, !tbaa !11
  %1010 = load float, ptr %55, align 4, !tbaa !11
  %1011 = fmul float %1009, %1010
  store float %1011, ptr %84, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  %1012 = load ptr, ptr %25, align 8, !tbaa !5
  %1013 = load i32, ptr %75, align 4, !tbaa !9
  %1014 = mul nsw i32 %1013, 4
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds %struct.ImVec2, ptr %1012, i64 %1015
  store ptr %1016, ptr %85, align 8, !tbaa !5
  %1017 = load ptr, ptr %8, align 8, !tbaa !5
  %1018 = load i32, ptr %75, align 4, !tbaa !9
  %1019 = sext i32 %1018 to i64
  %1020 = getelementptr inbounds %struct.ImVec2, ptr %1017, i64 %1019
  %1021 = getelementptr inbounds %struct.ImVec2, ptr %1020, i32 0, i32 0
  %1022 = load float, ptr %1021, align 4, !tbaa !32
  %1023 = load float, ptr %81, align 4, !tbaa !11
  %1024 = fadd float %1022, %1023
  %1025 = load ptr, ptr %85, align 8, !tbaa !5
  %1026 = getelementptr inbounds %struct.ImVec2, ptr %1025, i64 0
  %1027 = getelementptr inbounds %struct.ImVec2, ptr %1026, i32 0, i32 0
  store float %1024, ptr %1027, align 4, !tbaa !32
  %1028 = load ptr, ptr %8, align 8, !tbaa !5
  %1029 = load i32, ptr %75, align 4, !tbaa !9
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds %struct.ImVec2, ptr %1028, i64 %1030
  %1032 = getelementptr inbounds %struct.ImVec2, ptr %1031, i32 0, i32 1
  %1033 = load float, ptr %1032, align 4, !tbaa !34
  %1034 = load float, ptr %82, align 4, !tbaa !11
  %1035 = fadd float %1033, %1034
  %1036 = load ptr, ptr %85, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.ImVec2, ptr %1036, i64 0
  %1038 = getelementptr inbounds %struct.ImVec2, ptr %1037, i32 0, i32 1
  store float %1035, ptr %1038, align 4, !tbaa !34
  %1039 = load ptr, ptr %8, align 8, !tbaa !5
  %1040 = load i32, ptr %75, align 4, !tbaa !9
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds %struct.ImVec2, ptr %1039, i64 %1041
  %1043 = getelementptr inbounds %struct.ImVec2, ptr %1042, i32 0, i32 0
  %1044 = load float, ptr %1043, align 4, !tbaa !32
  %1045 = load float, ptr %83, align 4, !tbaa !11
  %1046 = fadd float %1044, %1045
  %1047 = load ptr, ptr %85, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.ImVec2, ptr %1047, i64 1
  %1049 = getelementptr inbounds %struct.ImVec2, ptr %1048, i32 0, i32 0
  store float %1046, ptr %1049, align 4, !tbaa !32
  %1050 = load ptr, ptr %8, align 8, !tbaa !5
  %1051 = load i32, ptr %75, align 4, !tbaa !9
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds %struct.ImVec2, ptr %1050, i64 %1052
  %1054 = getelementptr inbounds %struct.ImVec2, ptr %1053, i32 0, i32 1
  %1055 = load float, ptr %1054, align 4, !tbaa !34
  %1056 = load float, ptr %84, align 4, !tbaa !11
  %1057 = fadd float %1055, %1056
  %1058 = load ptr, ptr %85, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.ImVec2, ptr %1058, i64 1
  %1060 = getelementptr inbounds %struct.ImVec2, ptr %1059, i32 0, i32 1
  store float %1057, ptr %1060, align 4, !tbaa !34
  %1061 = load ptr, ptr %8, align 8, !tbaa !5
  %1062 = load i32, ptr %75, align 4, !tbaa !9
  %1063 = sext i32 %1062 to i64
  %1064 = getelementptr inbounds %struct.ImVec2, ptr %1061, i64 %1063
  %1065 = getelementptr inbounds %struct.ImVec2, ptr %1064, i32 0, i32 0
  %1066 = load float, ptr %1065, align 4, !tbaa !32
  %1067 = load float, ptr %83, align 4, !tbaa !11
  %1068 = fsub float %1066, %1067
  %1069 = load ptr, ptr %85, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.ImVec2, ptr %1069, i64 2
  %1071 = getelementptr inbounds %struct.ImVec2, ptr %1070, i32 0, i32 0
  store float %1068, ptr %1071, align 4, !tbaa !32
  %1072 = load ptr, ptr %8, align 8, !tbaa !5
  %1073 = load i32, ptr %75, align 4, !tbaa !9
  %1074 = sext i32 %1073 to i64
  %1075 = getelementptr inbounds %struct.ImVec2, ptr %1072, i64 %1074
  %1076 = getelementptr inbounds %struct.ImVec2, ptr %1075, i32 0, i32 1
  %1077 = load float, ptr %1076, align 4, !tbaa !34
  %1078 = load float, ptr %84, align 4, !tbaa !11
  %1079 = fsub float %1077, %1078
  %1080 = load ptr, ptr %85, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.ImVec2, ptr %1080, i64 2
  %1082 = getelementptr inbounds %struct.ImVec2, ptr %1081, i32 0, i32 1
  store float %1079, ptr %1082, align 4, !tbaa !34
  %1083 = load ptr, ptr %8, align 8, !tbaa !5
  %1084 = load i32, ptr %75, align 4, !tbaa !9
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds %struct.ImVec2, ptr %1083, i64 %1085
  %1087 = getelementptr inbounds %struct.ImVec2, ptr %1086, i32 0, i32 0
  %1088 = load float, ptr %1087, align 4, !tbaa !32
  %1089 = load float, ptr %81, align 4, !tbaa !11
  %1090 = fsub float %1088, %1089
  %1091 = load ptr, ptr %85, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.ImVec2, ptr %1091, i64 3
  %1093 = getelementptr inbounds %struct.ImVec2, ptr %1092, i32 0, i32 0
  store float %1090, ptr %1093, align 4, !tbaa !32
  %1094 = load ptr, ptr %8, align 8, !tbaa !5
  %1095 = load i32, ptr %75, align 4, !tbaa !9
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds %struct.ImVec2, ptr %1094, i64 %1096
  %1098 = getelementptr inbounds %struct.ImVec2, ptr %1097, i32 0, i32 1
  %1099 = load float, ptr %1098, align 4, !tbaa !34
  %1100 = load float, ptr %82, align 4, !tbaa !11
  %1101 = fsub float %1099, %1100
  %1102 = load ptr, ptr %85, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.ImVec2, ptr %1102, i64 3
  %1104 = getelementptr inbounds %struct.ImVec2, ptr %1103, i32 0, i32 1
  store float %1101, ptr %1104, align 4, !tbaa !34
  %1105 = load i32, ptr %76, align 4, !tbaa !9
  %1106 = add i32 %1105, 1
  %1107 = trunc i32 %1106 to i16
  %1108 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1109 = load ptr, ptr %1108, align 8, !tbaa !38
  %1110 = getelementptr inbounds i16, ptr %1109, i64 0
  store i16 %1107, ptr %1110, align 2, !tbaa !39
  %1111 = load i32, ptr %73, align 4, !tbaa !9
  %1112 = add i32 %1111, 1
  %1113 = trunc i32 %1112 to i16
  %1114 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1115 = load ptr, ptr %1114, align 8, !tbaa !38
  %1116 = getelementptr inbounds i16, ptr %1115, i64 1
  store i16 %1113, ptr %1116, align 2, !tbaa !39
  %1117 = load i32, ptr %73, align 4, !tbaa !9
  %1118 = add i32 %1117, 2
  %1119 = trunc i32 %1118 to i16
  %1120 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1121 = load ptr, ptr %1120, align 8, !tbaa !38
  %1122 = getelementptr inbounds i16, ptr %1121, i64 2
  store i16 %1119, ptr %1122, align 2, !tbaa !39
  %1123 = load i32, ptr %73, align 4, !tbaa !9
  %1124 = add i32 %1123, 2
  %1125 = trunc i32 %1124 to i16
  %1126 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1127 = load ptr, ptr %1126, align 8, !tbaa !38
  %1128 = getelementptr inbounds i16, ptr %1127, i64 3
  store i16 %1125, ptr %1128, align 2, !tbaa !39
  %1129 = load i32, ptr %76, align 4, !tbaa !9
  %1130 = add i32 %1129, 2
  %1131 = trunc i32 %1130 to i16
  %1132 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1133 = load ptr, ptr %1132, align 8, !tbaa !38
  %1134 = getelementptr inbounds i16, ptr %1133, i64 4
  store i16 %1131, ptr %1134, align 2, !tbaa !39
  %1135 = load i32, ptr %76, align 4, !tbaa !9
  %1136 = add i32 %1135, 1
  %1137 = trunc i32 %1136 to i16
  %1138 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1139 = load ptr, ptr %1138, align 8, !tbaa !38
  %1140 = getelementptr inbounds i16, ptr %1139, i64 5
  store i16 %1137, ptr %1140, align 2, !tbaa !39
  %1141 = load i32, ptr %76, align 4, !tbaa !9
  %1142 = add i32 %1141, 1
  %1143 = trunc i32 %1142 to i16
  %1144 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1145 = load ptr, ptr %1144, align 8, !tbaa !38
  %1146 = getelementptr inbounds i16, ptr %1145, i64 6
  store i16 %1143, ptr %1146, align 2, !tbaa !39
  %1147 = load i32, ptr %73, align 4, !tbaa !9
  %1148 = add i32 %1147, 1
  %1149 = trunc i32 %1148 to i16
  %1150 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1151 = load ptr, ptr %1150, align 8, !tbaa !38
  %1152 = getelementptr inbounds i16, ptr %1151, i64 7
  store i16 %1149, ptr %1152, align 2, !tbaa !39
  %1153 = load i32, ptr %73, align 4, !tbaa !9
  %1154 = add i32 %1153, 0
  %1155 = trunc i32 %1154 to i16
  %1156 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1157 = load ptr, ptr %1156, align 8, !tbaa !38
  %1158 = getelementptr inbounds i16, ptr %1157, i64 8
  store i16 %1155, ptr %1158, align 2, !tbaa !39
  %1159 = load i32, ptr %73, align 4, !tbaa !9
  %1160 = add i32 %1159, 0
  %1161 = trunc i32 %1160 to i16
  %1162 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1163 = load ptr, ptr %1162, align 8, !tbaa !38
  %1164 = getelementptr inbounds i16, ptr %1163, i64 9
  store i16 %1161, ptr %1164, align 2, !tbaa !39
  %1165 = load i32, ptr %76, align 4, !tbaa !9
  %1166 = add i32 %1165, 0
  %1167 = trunc i32 %1166 to i16
  %1168 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1169 = load ptr, ptr %1168, align 8, !tbaa !38
  %1170 = getelementptr inbounds i16, ptr %1169, i64 10
  store i16 %1167, ptr %1170, align 2, !tbaa !39
  %1171 = load i32, ptr %76, align 4, !tbaa !9
  %1172 = add i32 %1171, 1
  %1173 = trunc i32 %1172 to i16
  %1174 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1175 = load ptr, ptr %1174, align 8, !tbaa !38
  %1176 = getelementptr inbounds i16, ptr %1175, i64 11
  store i16 %1173, ptr %1176, align 2, !tbaa !39
  %1177 = load i32, ptr %76, align 4, !tbaa !9
  %1178 = add i32 %1177, 2
  %1179 = trunc i32 %1178 to i16
  %1180 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1181 = load ptr, ptr %1180, align 8, !tbaa !38
  %1182 = getelementptr inbounds i16, ptr %1181, i64 12
  store i16 %1179, ptr %1182, align 2, !tbaa !39
  %1183 = load i32, ptr %73, align 4, !tbaa !9
  %1184 = add i32 %1183, 2
  %1185 = trunc i32 %1184 to i16
  %1186 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1187 = load ptr, ptr %1186, align 8, !tbaa !38
  %1188 = getelementptr inbounds i16, ptr %1187, i64 13
  store i16 %1185, ptr %1188, align 2, !tbaa !39
  %1189 = load i32, ptr %73, align 4, !tbaa !9
  %1190 = add i32 %1189, 3
  %1191 = trunc i32 %1190 to i16
  %1192 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1193 = load ptr, ptr %1192, align 8, !tbaa !38
  %1194 = getelementptr inbounds i16, ptr %1193, i64 14
  store i16 %1191, ptr %1194, align 2, !tbaa !39
  %1195 = load i32, ptr %73, align 4, !tbaa !9
  %1196 = add i32 %1195, 3
  %1197 = trunc i32 %1196 to i16
  %1198 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1199 = load ptr, ptr %1198, align 8, !tbaa !38
  %1200 = getelementptr inbounds i16, ptr %1199, i64 15
  store i16 %1197, ptr %1200, align 2, !tbaa !39
  %1201 = load i32, ptr %76, align 4, !tbaa !9
  %1202 = add i32 %1201, 3
  %1203 = trunc i32 %1202 to i16
  %1204 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1205 = load ptr, ptr %1204, align 8, !tbaa !38
  %1206 = getelementptr inbounds i16, ptr %1205, i64 16
  store i16 %1203, ptr %1206, align 2, !tbaa !39
  %1207 = load i32, ptr %76, align 4, !tbaa !9
  %1208 = add i32 %1207, 2
  %1209 = trunc i32 %1208 to i16
  %1210 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1211 = load ptr, ptr %1210, align 8, !tbaa !38
  %1212 = getelementptr inbounds i16, ptr %1211, i64 17
  store i16 %1209, ptr %1212, align 2, !tbaa !39
  %1213 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1214 = load ptr, ptr %1213, align 8, !tbaa !38
  %1215 = getelementptr inbounds i16, ptr %1214, i64 18
  store ptr %1215, ptr %1213, align 8, !tbaa !38
  %1216 = load i32, ptr %76, align 4, !tbaa !9
  store i32 %1216, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1217

1217:                                             ; preds = %995
  %1218 = load i32, ptr %74, align 4, !tbaa !9
  %1219 = add nsw i32 %1218, 1
  store i32 %1219, ptr %74, align 4, !tbaa !9
  br label %915, !llvm.loop !54

1220:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #9
  store i32 0, ptr %86, align 4, !tbaa !9
  br label %1221

1221:                                             ; preds = %1306, %1220
  %1222 = load i32, ptr %86, align 4, !tbaa !9
  %1223 = load i32, ptr %9, align 4, !tbaa !9
  %1224 = icmp slt i32 %1222, %1223
  br i1 %1224, label %1226, label %1225

1225:                                             ; preds = %1221
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #9
  br label %1309

1226:                                             ; preds = %1221
  %1227 = load ptr, ptr %25, align 8, !tbaa !5
  %1228 = load i32, ptr %86, align 4, !tbaa !9
  %1229 = mul nsw i32 %1228, 4
  %1230 = add nsw i32 %1229, 0
  %1231 = sext i32 %1230 to i64
  %1232 = getelementptr inbounds %struct.ImVec2, ptr %1227, i64 %1231
  %1233 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1234 = load ptr, ptr %1233, align 8, !tbaa !49
  %1235 = getelementptr inbounds %struct.ImDrawVert, ptr %1234, i64 0
  %1236 = getelementptr inbounds %struct.ImDrawVert, ptr %1235, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1236, ptr align 4 %1232, i64 8, i1 false), !tbaa.struct !27
  %1237 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1238 = load ptr, ptr %1237, align 8, !tbaa !49
  %1239 = getelementptr inbounds %struct.ImDrawVert, ptr %1238, i64 0
  %1240 = getelementptr inbounds %struct.ImDrawVert, ptr %1239, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1240, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1241 = load i32, ptr %18, align 4, !tbaa !9
  %1242 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1243 = load ptr, ptr %1242, align 8, !tbaa !49
  %1244 = getelementptr inbounds %struct.ImDrawVert, ptr %1243, i64 0
  %1245 = getelementptr inbounds %struct.ImDrawVert, ptr %1244, i32 0, i32 2
  store i32 %1241, ptr %1245, align 4, !tbaa !50
  %1246 = load ptr, ptr %25, align 8, !tbaa !5
  %1247 = load i32, ptr %86, align 4, !tbaa !9
  %1248 = mul nsw i32 %1247, 4
  %1249 = add nsw i32 %1248, 1
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds %struct.ImVec2, ptr %1246, i64 %1250
  %1252 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1253 = load ptr, ptr %1252, align 8, !tbaa !49
  %1254 = getelementptr inbounds %struct.ImDrawVert, ptr %1253, i64 1
  %1255 = getelementptr inbounds %struct.ImDrawVert, ptr %1254, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1255, ptr align 4 %1251, i64 8, i1 false), !tbaa.struct !27
  %1256 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1257 = load ptr, ptr %1256, align 8, !tbaa !49
  %1258 = getelementptr inbounds %struct.ImDrawVert, ptr %1257, i64 1
  %1259 = getelementptr inbounds %struct.ImDrawVert, ptr %1258, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1259, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1260 = load i32, ptr %10, align 4, !tbaa !9
  %1261 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1262 = load ptr, ptr %1261, align 8, !tbaa !49
  %1263 = getelementptr inbounds %struct.ImDrawVert, ptr %1262, i64 1
  %1264 = getelementptr inbounds %struct.ImDrawVert, ptr %1263, i32 0, i32 2
  store i32 %1260, ptr %1264, align 4, !tbaa !50
  %1265 = load ptr, ptr %25, align 8, !tbaa !5
  %1266 = load i32, ptr %86, align 4, !tbaa !9
  %1267 = mul nsw i32 %1266, 4
  %1268 = add nsw i32 %1267, 2
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds %struct.ImVec2, ptr %1265, i64 %1269
  %1271 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1272 = load ptr, ptr %1271, align 8, !tbaa !49
  %1273 = getelementptr inbounds %struct.ImDrawVert, ptr %1272, i64 2
  %1274 = getelementptr inbounds %struct.ImDrawVert, ptr %1273, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1274, ptr align 4 %1270, i64 8, i1 false), !tbaa.struct !27
  %1275 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1276 = load ptr, ptr %1275, align 8, !tbaa !49
  %1277 = getelementptr inbounds %struct.ImDrawVert, ptr %1276, i64 2
  %1278 = getelementptr inbounds %struct.ImDrawVert, ptr %1277, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1278, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1279 = load i32, ptr %10, align 4, !tbaa !9
  %1280 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1281 = load ptr, ptr %1280, align 8, !tbaa !49
  %1282 = getelementptr inbounds %struct.ImDrawVert, ptr %1281, i64 2
  %1283 = getelementptr inbounds %struct.ImDrawVert, ptr %1282, i32 0, i32 2
  store i32 %1279, ptr %1283, align 4, !tbaa !50
  %1284 = load ptr, ptr %25, align 8, !tbaa !5
  %1285 = load i32, ptr %86, align 4, !tbaa !9
  %1286 = mul nsw i32 %1285, 4
  %1287 = add nsw i32 %1286, 3
  %1288 = sext i32 %1287 to i64
  %1289 = getelementptr inbounds %struct.ImVec2, ptr %1284, i64 %1288
  %1290 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1291 = load ptr, ptr %1290, align 8, !tbaa !49
  %1292 = getelementptr inbounds %struct.ImDrawVert, ptr %1291, i64 3
  %1293 = getelementptr inbounds %struct.ImDrawVert, ptr %1292, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1293, ptr align 4 %1289, i64 8, i1 false), !tbaa.struct !27
  %1294 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1295 = load ptr, ptr %1294, align 8, !tbaa !49
  %1296 = getelementptr inbounds %struct.ImDrawVert, ptr %1295, i64 3
  %1297 = getelementptr inbounds %struct.ImDrawVert, ptr %1296, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1297, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1298 = load i32, ptr %18, align 4, !tbaa !9
  %1299 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1300 = load ptr, ptr %1299, align 8, !tbaa !49
  %1301 = getelementptr inbounds %struct.ImDrawVert, ptr %1300, i64 3
  %1302 = getelementptr inbounds %struct.ImDrawVert, ptr %1301, i32 0, i32 2
  store i32 %1298, ptr %1302, align 4, !tbaa !50
  %1303 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1304 = load ptr, ptr %1303, align 8, !tbaa !49
  %1305 = getelementptr inbounds %struct.ImDrawVert, ptr %1304, i64 4
  store ptr %1305, ptr %1303, align 8, !tbaa !49
  br label %1306

1306:                                             ; preds = %1226
  %1307 = load i32, ptr %86, align 4, !tbaa !9
  %1308 = add nsw i32 %1307, 1
  store i32 %1308, ptr %86, align 4, !tbaa !9
  br label %1221, !llvm.loop !55

1309:                                             ; preds = %1225
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %1310

1310:                                             ; preds = %1309, %789
  %1311 = load i32, ptr %23, align 4, !tbaa !9
  %1312 = trunc i32 %1311 to i16
  %1313 = zext i16 %1312 to i32
  %1314 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1315 = load i32, ptr %1314, align 4, !tbaa !37
  %1316 = add i32 %1315, %1313
  store i32 %1316, ptr %1314, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %1561

1317:                                             ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #9
  %1318 = load i32, ptr %15, align 4, !tbaa !9
  %1319 = mul nsw i32 %1318, 6
  store i32 %1319, ptr %87, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #9
  %1320 = load i32, ptr %15, align 4, !tbaa !9
  %1321 = mul nsw i32 %1320, 4
  store i32 %1321, ptr %88, align 4, !tbaa !9
  %1322 = load i32, ptr %87, align 4, !tbaa !9
  %1323 = load i32, ptr %88, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %97, i32 noundef %1322, i32 noundef %1323)
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #9
  store i32 0, ptr %89, align 4, !tbaa !9
  br label %1324

1324:                                             ; preds = %1557, %1317
  %1325 = load i32, ptr %89, align 4, !tbaa !9
  %1326 = load i32, ptr %15, align 4, !tbaa !9
  %1327 = icmp slt i32 %1325, %1326
  br i1 %1327, label %1329, label %1328

1328:                                             ; preds = %1324
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #9
  br label %1560

1329:                                             ; preds = %1324
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #9
  %1330 = load i32, ptr %89, align 4, !tbaa !9
  %1331 = add nsw i32 %1330, 1
  %1332 = load i32, ptr %9, align 4, !tbaa !9
  %1333 = icmp eq i32 %1331, %1332
  br i1 %1333, label %1334, label %1335

1334:                                             ; preds = %1329
  br label %1338

1335:                                             ; preds = %1329
  %1336 = load i32, ptr %89, align 4, !tbaa !9
  %1337 = add nsw i32 %1336, 1
  br label %1338

1338:                                             ; preds = %1335, %1334
  %1339 = phi i32 [ 0, %1334 ], [ %1337, %1335 ]
  store i32 %1339, ptr %90, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %1340 = load ptr, ptr %8, align 8, !tbaa !5
  %1341 = load i32, ptr %89, align 4, !tbaa !9
  %1342 = sext i32 %1341 to i64
  %1343 = getelementptr inbounds %struct.ImVec2, ptr %1340, i64 %1342
  store ptr %1343, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #9
  %1344 = load ptr, ptr %8, align 8, !tbaa !5
  %1345 = load i32, ptr %90, align 4, !tbaa !9
  %1346 = sext i32 %1345 to i64
  %1347 = getelementptr inbounds %struct.ImVec2, ptr %1344, i64 %1346
  store ptr %1347, ptr %92, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #9
  %1348 = load ptr, ptr %92, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.ImVec2, ptr %1348, i32 0, i32 0
  %1350 = load float, ptr %1349, align 4, !tbaa !32
  %1351 = load ptr, ptr %91, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.ImVec2, ptr %1351, i32 0, i32 0
  %1353 = load float, ptr %1352, align 4, !tbaa !32
  %1354 = fsub float %1350, %1353
  store float %1354, ptr %93, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #9
  %1355 = load ptr, ptr %92, align 8, !tbaa !5
  %1356 = getelementptr inbounds %struct.ImVec2, ptr %1355, i32 0, i32 1
  %1357 = load float, ptr %1356, align 4, !tbaa !34
  %1358 = load ptr, ptr %91, align 8, !tbaa !5
  %1359 = getelementptr inbounds %struct.ImVec2, ptr %1358, i32 0, i32 1
  %1360 = load float, ptr %1359, align 4, !tbaa !34
  %1361 = fsub float %1357, %1360
  store float %1361, ptr %94, align 4, !tbaa !11
  br label %1362

1362:                                             ; preds = %1338
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  %1363 = load float, ptr %93, align 4, !tbaa !11
  %1364 = load float, ptr %93, align 4, !tbaa !11
  %1365 = load float, ptr %94, align 4, !tbaa !11
  %1366 = load float, ptr %94, align 4, !tbaa !11
  %1367 = fmul float %1365, %1366
  %1368 = call float @llvm.fmuladd.f32(float %1363, float %1364, float %1367)
  store float %1368, ptr %95, align 4, !tbaa !11
  %1369 = load float, ptr %95, align 4, !tbaa !11
  %1370 = fcmp ogt float %1369, 0.000000e+00
  br i1 %1370, label %1371, label %1381

1371:                                             ; preds = %1362
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #9
  %1372 = load float, ptr %95, align 4, !tbaa !11
  %1373 = call float @sqrtf(float noundef %1372) #9
  %1374 = fdiv float 1.000000e+00, %1373
  store float %1374, ptr %96, align 4, !tbaa !11
  %1375 = load float, ptr %96, align 4, !tbaa !11
  %1376 = load float, ptr %93, align 4, !tbaa !11
  %1377 = fmul float %1376, %1375
  store float %1377, ptr %93, align 4, !tbaa !11
  %1378 = load float, ptr %96, align 4, !tbaa !11
  %1379 = load float, ptr %94, align 4, !tbaa !11
  %1380 = fmul float %1379, %1378
  store float %1380, ptr %94, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #9
  br label %1381

1381:                                             ; preds = %1371, %1362
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1382

1382:                                             ; preds = %1381
  br label %1383

1383:                                             ; preds = %1382
  %1384 = load float, ptr %12, align 4, !tbaa !11
  %1385 = fmul float %1384, 5.000000e-01
  %1386 = load float, ptr %93, align 4, !tbaa !11
  %1387 = fmul float %1386, %1385
  store float %1387, ptr %93, align 4, !tbaa !11
  %1388 = load float, ptr %12, align 4, !tbaa !11
  %1389 = fmul float %1388, 5.000000e-01
  %1390 = load float, ptr %94, align 4, !tbaa !11
  %1391 = fmul float %1390, %1389
  store float %1391, ptr %94, align 4, !tbaa !11
  %1392 = load ptr, ptr %91, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.ImVec2, ptr %1392, i32 0, i32 0
  %1394 = load float, ptr %1393, align 4, !tbaa !32
  %1395 = load float, ptr %94, align 4, !tbaa !11
  %1396 = fadd float %1394, %1395
  %1397 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1398 = load ptr, ptr %1397, align 8, !tbaa !49
  %1399 = getelementptr inbounds %struct.ImDrawVert, ptr %1398, i64 0
  %1400 = getelementptr inbounds %struct.ImDrawVert, ptr %1399, i32 0, i32 0
  %1401 = getelementptr inbounds %struct.ImVec2, ptr %1400, i32 0, i32 0
  store float %1396, ptr %1401, align 4, !tbaa !56
  %1402 = load ptr, ptr %91, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.ImVec2, ptr %1402, i32 0, i32 1
  %1404 = load float, ptr %1403, align 4, !tbaa !34
  %1405 = load float, ptr %93, align 4, !tbaa !11
  %1406 = fsub float %1404, %1405
  %1407 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1408 = load ptr, ptr %1407, align 8, !tbaa !49
  %1409 = getelementptr inbounds %struct.ImDrawVert, ptr %1408, i64 0
  %1410 = getelementptr inbounds %struct.ImDrawVert, ptr %1409, i32 0, i32 0
  %1411 = getelementptr inbounds %struct.ImVec2, ptr %1410, i32 0, i32 1
  store float %1406, ptr %1411, align 4, !tbaa !57
  %1412 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1413 = load ptr, ptr %1412, align 8, !tbaa !49
  %1414 = getelementptr inbounds %struct.ImDrawVert, ptr %1413, i64 0
  %1415 = getelementptr inbounds %struct.ImDrawVert, ptr %1414, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1415, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1416 = load i32, ptr %10, align 4, !tbaa !9
  %1417 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1418 = load ptr, ptr %1417, align 8, !tbaa !49
  %1419 = getelementptr inbounds %struct.ImDrawVert, ptr %1418, i64 0
  %1420 = getelementptr inbounds %struct.ImDrawVert, ptr %1419, i32 0, i32 2
  store i32 %1416, ptr %1420, align 4, !tbaa !50
  %1421 = load ptr, ptr %92, align 8, !tbaa !5
  %1422 = getelementptr inbounds %struct.ImVec2, ptr %1421, i32 0, i32 0
  %1423 = load float, ptr %1422, align 4, !tbaa !32
  %1424 = load float, ptr %94, align 4, !tbaa !11
  %1425 = fadd float %1423, %1424
  %1426 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1427 = load ptr, ptr %1426, align 8, !tbaa !49
  %1428 = getelementptr inbounds %struct.ImDrawVert, ptr %1427, i64 1
  %1429 = getelementptr inbounds %struct.ImDrawVert, ptr %1428, i32 0, i32 0
  %1430 = getelementptr inbounds %struct.ImVec2, ptr %1429, i32 0, i32 0
  store float %1425, ptr %1430, align 4, !tbaa !56
  %1431 = load ptr, ptr %92, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.ImVec2, ptr %1431, i32 0, i32 1
  %1433 = load float, ptr %1432, align 4, !tbaa !34
  %1434 = load float, ptr %93, align 4, !tbaa !11
  %1435 = fsub float %1433, %1434
  %1436 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1437 = load ptr, ptr %1436, align 8, !tbaa !49
  %1438 = getelementptr inbounds %struct.ImDrawVert, ptr %1437, i64 1
  %1439 = getelementptr inbounds %struct.ImDrawVert, ptr %1438, i32 0, i32 0
  %1440 = getelementptr inbounds %struct.ImVec2, ptr %1439, i32 0, i32 1
  store float %1435, ptr %1440, align 4, !tbaa !57
  %1441 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1442 = load ptr, ptr %1441, align 8, !tbaa !49
  %1443 = getelementptr inbounds %struct.ImDrawVert, ptr %1442, i64 1
  %1444 = getelementptr inbounds %struct.ImDrawVert, ptr %1443, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1444, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1445 = load i32, ptr %10, align 4, !tbaa !9
  %1446 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1447 = load ptr, ptr %1446, align 8, !tbaa !49
  %1448 = getelementptr inbounds %struct.ImDrawVert, ptr %1447, i64 1
  %1449 = getelementptr inbounds %struct.ImDrawVert, ptr %1448, i32 0, i32 2
  store i32 %1445, ptr %1449, align 4, !tbaa !50
  %1450 = load ptr, ptr %92, align 8, !tbaa !5
  %1451 = getelementptr inbounds %struct.ImVec2, ptr %1450, i32 0, i32 0
  %1452 = load float, ptr %1451, align 4, !tbaa !32
  %1453 = load float, ptr %94, align 4, !tbaa !11
  %1454 = fsub float %1452, %1453
  %1455 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1456 = load ptr, ptr %1455, align 8, !tbaa !49
  %1457 = getelementptr inbounds %struct.ImDrawVert, ptr %1456, i64 2
  %1458 = getelementptr inbounds %struct.ImDrawVert, ptr %1457, i32 0, i32 0
  %1459 = getelementptr inbounds %struct.ImVec2, ptr %1458, i32 0, i32 0
  store float %1454, ptr %1459, align 4, !tbaa !56
  %1460 = load ptr, ptr %92, align 8, !tbaa !5
  %1461 = getelementptr inbounds %struct.ImVec2, ptr %1460, i32 0, i32 1
  %1462 = load float, ptr %1461, align 4, !tbaa !34
  %1463 = load float, ptr %93, align 4, !tbaa !11
  %1464 = fadd float %1462, %1463
  %1465 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1466 = load ptr, ptr %1465, align 8, !tbaa !49
  %1467 = getelementptr inbounds %struct.ImDrawVert, ptr %1466, i64 2
  %1468 = getelementptr inbounds %struct.ImDrawVert, ptr %1467, i32 0, i32 0
  %1469 = getelementptr inbounds %struct.ImVec2, ptr %1468, i32 0, i32 1
  store float %1464, ptr %1469, align 4, !tbaa !57
  %1470 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1471 = load ptr, ptr %1470, align 8, !tbaa !49
  %1472 = getelementptr inbounds %struct.ImDrawVert, ptr %1471, i64 2
  %1473 = getelementptr inbounds %struct.ImDrawVert, ptr %1472, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1473, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1474 = load i32, ptr %10, align 4, !tbaa !9
  %1475 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1476 = load ptr, ptr %1475, align 8, !tbaa !49
  %1477 = getelementptr inbounds %struct.ImDrawVert, ptr %1476, i64 2
  %1478 = getelementptr inbounds %struct.ImDrawVert, ptr %1477, i32 0, i32 2
  store i32 %1474, ptr %1478, align 4, !tbaa !50
  %1479 = load ptr, ptr %91, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.ImVec2, ptr %1479, i32 0, i32 0
  %1481 = load float, ptr %1480, align 4, !tbaa !32
  %1482 = load float, ptr %94, align 4, !tbaa !11
  %1483 = fsub float %1481, %1482
  %1484 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1485 = load ptr, ptr %1484, align 8, !tbaa !49
  %1486 = getelementptr inbounds %struct.ImDrawVert, ptr %1485, i64 3
  %1487 = getelementptr inbounds %struct.ImDrawVert, ptr %1486, i32 0, i32 0
  %1488 = getelementptr inbounds %struct.ImVec2, ptr %1487, i32 0, i32 0
  store float %1483, ptr %1488, align 4, !tbaa !56
  %1489 = load ptr, ptr %91, align 8, !tbaa !5
  %1490 = getelementptr inbounds %struct.ImVec2, ptr %1489, i32 0, i32 1
  %1491 = load float, ptr %1490, align 4, !tbaa !34
  %1492 = load float, ptr %93, align 4, !tbaa !11
  %1493 = fadd float %1491, %1492
  %1494 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1495 = load ptr, ptr %1494, align 8, !tbaa !49
  %1496 = getelementptr inbounds %struct.ImDrawVert, ptr %1495, i64 3
  %1497 = getelementptr inbounds %struct.ImDrawVert, ptr %1496, i32 0, i32 0
  %1498 = getelementptr inbounds %struct.ImVec2, ptr %1497, i32 0, i32 1
  store float %1493, ptr %1498, align 4, !tbaa !57
  %1499 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1500 = load ptr, ptr %1499, align 8, !tbaa !49
  %1501 = getelementptr inbounds %struct.ImDrawVert, ptr %1500, i64 3
  %1502 = getelementptr inbounds %struct.ImDrawVert, ptr %1501, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1502, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  %1503 = load i32, ptr %10, align 4, !tbaa !9
  %1504 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1505 = load ptr, ptr %1504, align 8, !tbaa !49
  %1506 = getelementptr inbounds %struct.ImDrawVert, ptr %1505, i64 3
  %1507 = getelementptr inbounds %struct.ImDrawVert, ptr %1506, i32 0, i32 2
  store i32 %1503, ptr %1507, align 4, !tbaa !50
  %1508 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1509 = load ptr, ptr %1508, align 8, !tbaa !49
  %1510 = getelementptr inbounds %struct.ImDrawVert, ptr %1509, i64 4
  store ptr %1510, ptr %1508, align 8, !tbaa !49
  %1511 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1512 = load i32, ptr %1511, align 4, !tbaa !37
  %1513 = trunc i32 %1512 to i16
  %1514 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1515 = load ptr, ptr %1514, align 8, !tbaa !38
  %1516 = getelementptr inbounds i16, ptr %1515, i64 0
  store i16 %1513, ptr %1516, align 2, !tbaa !39
  %1517 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1518 = load i32, ptr %1517, align 4, !tbaa !37
  %1519 = add i32 %1518, 1
  %1520 = trunc i32 %1519 to i16
  %1521 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1522 = load ptr, ptr %1521, align 8, !tbaa !38
  %1523 = getelementptr inbounds i16, ptr %1522, i64 1
  store i16 %1520, ptr %1523, align 2, !tbaa !39
  %1524 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1525 = load i32, ptr %1524, align 4, !tbaa !37
  %1526 = add i32 %1525, 2
  %1527 = trunc i32 %1526 to i16
  %1528 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1529 = load ptr, ptr %1528, align 8, !tbaa !38
  %1530 = getelementptr inbounds i16, ptr %1529, i64 2
  store i16 %1527, ptr %1530, align 2, !tbaa !39
  %1531 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1532 = load i32, ptr %1531, align 4, !tbaa !37
  %1533 = trunc i32 %1532 to i16
  %1534 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1535 = load ptr, ptr %1534, align 8, !tbaa !38
  %1536 = getelementptr inbounds i16, ptr %1535, i64 3
  store i16 %1533, ptr %1536, align 2, !tbaa !39
  %1537 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1538 = load i32, ptr %1537, align 4, !tbaa !37
  %1539 = add i32 %1538, 2
  %1540 = trunc i32 %1539 to i16
  %1541 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1542 = load ptr, ptr %1541, align 8, !tbaa !38
  %1543 = getelementptr inbounds i16, ptr %1542, i64 4
  store i16 %1540, ptr %1543, align 2, !tbaa !39
  %1544 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1545 = load i32, ptr %1544, align 4, !tbaa !37
  %1546 = add i32 %1545, 3
  %1547 = trunc i32 %1546 to i16
  %1548 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1549 = load ptr, ptr %1548, align 8, !tbaa !38
  %1550 = getelementptr inbounds i16, ptr %1549, i64 5
  store i16 %1547, ptr %1550, align 2, !tbaa !39
  %1551 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1552 = load ptr, ptr %1551, align 8, !tbaa !38
  %1553 = getelementptr inbounds i16, ptr %1552, i64 6
  store ptr %1553, ptr %1551, align 8, !tbaa !38
  %1554 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1555 = load i32, ptr %1554, align 4, !tbaa !37
  %1556 = add i32 %1555, 4
  store i32 %1556, ptr %1554, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  br label %1557

1557:                                             ; preds = %1383
  %1558 = load i32, ptr %89, align 4, !tbaa !9
  %1559 = add nsw i32 %1558, 1
  store i32 %1559, ptr %89, align 4, !tbaa !9
  br label %1324, !llvm.loop !58

1560:                                             ; preds = %1328
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  br label %1561

1561:                                             ; preds = %1560, %1310
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #9
  br label %1562

1562:                                             ; preds = %1561, %100
  ret void
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #8

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) #8

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #8

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { 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 #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { inlinehint mustprogress 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 #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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !6, i64 56}
!16 = !{!"_ZTS10ImDrawList", !17, i64 0, !18, i64 16, !19, i64 32, !10, i64 48, !10, i64 52, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !20, i64 88, !21, i64 104, !22, i64 120, !23, i64 136, !25, i64 168, !12, i64 192}
!17 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !10, i64 0, !10, i64 4, !6, i64 8}
!18 = !{!"_ZTS8ImVectorItE", !10, i64 0, !10, i64 4, !6, i64 8}
!19 = !{!"_ZTS8ImVectorI10ImDrawVertE", !10, i64 0, !10, i64 4, !6, i64 8}
!20 = !{!"_ZTS8ImVectorI6ImVec4E", !10, i64 0, !10, i64 4, !6, i64 8}
!21 = !{!"_ZTS8ImVectorIPvE", !10, i64 0, !10, i64 4, !6, i64 8}
!22 = !{!"_ZTS8ImVectorI6ImVec2E", !10, i64 0, !10, i64 4, !6, i64 8}
!23 = !{!"_ZTS15ImDrawCmdHeader", !24, i64 0, !6, i64 16, !10, i64 24}
!24 = !{!"_ZTS6ImVec4", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!25 = !{!"_ZTS18ImDrawListSplitter", !10, i64 0, !10, i64 4, !26, i64 8}
!26 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !10, i64 0, !10, i64 4, !6, i64 8}
!27 = !{i64 0, i64 4, !11, i64 4, i64 4, !11}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!16, !12, i64 192}
!31 = !{!16, !10, i64 48}
!32 = !{!33, !12, i64 0}
!33 = !{!"_ZTS6ImVec2", !12, i64 0, !12, i64 4}
!34 = !{!33, !12, i64 4}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!16, !10, i64 52}
!38 = !{!16, !6, i64 80}
!39 = !{!40, !40, i64 0}
!40 = !{!"short", !7, i64 0}
!41 = distinct !{!41, !36}
!42 = !{!43, !6, i64 504}
!43 = !{!"_ZTS20ImDrawListSharedData", !33, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !24, i64 28, !10, i64 44, !7, i64 48, !12, i64 432, !7, i64 436, !6, i64 504}
!44 = !{i64 0, i64 4, !11, i64 4, i64 4, !11, i64 8, i64 4, !11, i64 12, i64 4, !11}
!45 = !{!24, !12, i64 0}
!46 = !{!24, !12, i64 4}
!47 = !{!24, !12, i64 8}
!48 = !{!24, !12, i64 12}
!49 = !{!16, !6, i64 72}
!50 = !{!51, !10, i64 16}
!51 = !{!"_ZTS10ImDrawVert", !33, i64 0, !33, i64 8, !10, i64 16}
!52 = distinct !{!52, !36}
!53 = distinct !{!53, !36}
!54 = distinct !{!54, !36}
!55 = distinct !{!55, !36}
!56 = !{!51, !12, i64 0}
!57 = !{!51, !12, i64 4}
!58 = distinct !{!58, !36}


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

%struct.ImVec2 = type { float, float }
%struct.ImVec4 = type { float, float, float, float }

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL5ImMaxIfET_S0_S0_(float noundef, float noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijif(ptr noundef nonnull align 8 dereferenceable(196) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, float noundef %5) local_unnamed_addr #4 align 2 {
  %7 = alloca %struct.ImVec2, align 8
  %8 = alloca %struct.ImVec2, align 8
  %9 = alloca %struct.ImVec2, align 8
  %10 = alloca %struct.ImVec2, align 8
  %11 = alloca %struct.ImVec2, align 8
  %12 = alloca %struct.ImVec2, align 8
  %13 = alloca %struct.ImVec2, align 8
  %14 = alloca %struct.ImVec2, align 8
  %15 = alloca %struct.ImVec2, align 8
  %16 = alloca %struct.ImVec2, align 8
  %17 = alloca %struct.ImVec2, align 8
  %18 = alloca %struct.ImVec2, align 8
  %19 = alloca %struct.ImVec2, align 8
  %20 = alloca %struct.ImVec2, align 8
  %21 = icmp slt i32 %2, 2
  br i1 %21, label %.loopexit, label %22

22:                                               ; preds = %6
  %23 = and i32 %4, 1
  %.not = icmp eq i32 %23, 0
  %24 = getelementptr inbounds i8, ptr %0, i64 56
  %25 = load ptr, ptr %24, align 8, !tbaa !5
  %26 = load i64, ptr %25, align 8
  %27 = add nsw i32 %2, -1
  %28 = select i1 %.not, i32 %27, i32 %2
  %29 = getelementptr inbounds i8, ptr %0, i64 192
  %30 = load float, ptr %29, align 8, !tbaa !22
  %.fr = freeze float %30
  %31 = fcmp uge float %.fr, %5
  %32 = getelementptr inbounds i8, ptr %0, i64 48
  %33 = load i32, ptr %32, align 8, !tbaa !23
  %34 = and i32 %33, 1
  %.not441 = icmp eq i32 %34, 0
  br i1 %.not441, label %.lr.ph483, label %35

35:                                               ; preds = %22
  %36 = and i32 %3, 16777215
  %37 = tail call noundef float @_ZL5ImMaxIfET_S0_S0_(float noundef %5, float noundef 1.000000e+00)
  %38 = fptosi float %37 to i32
  %39 = sitofp i32 %38 to float
  %40 = fsub float %37, %39
  %41 = load i32, ptr %32, align 8, !tbaa !23
  %42 = and i32 %41, 2
  %43 = icmp ne i32 %42, 0
  %44 = icmp slt i32 %38, 63
  %or.cond = select i1 %43, i1 %44, i1 false
  %45 = fcmp ole float %40, 0x3EE4F8B580000000
  %or.cond3 = select i1 %or.cond, i1 %45, i1 false
  %46 = fcmp oeq float %.fr, 1.000000e+00
  %spec.select = and i1 %46, %or.cond3
  br i1 %spec.select, label %.thread, label %49

.thread:                                          ; preds = %35
  %47 = mul nsw i32 %28, 6
  %48 = shl nuw nsw i32 %2, 1
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %0, i32 noundef %47, i32 noundef %48)
  br label %.lr.ph.preheader

49:                                               ; preds = %35
  %.v = select i1 %31, i32 12, i32 18
  %50 = mul nsw i32 %.v, %28
  %51 = shl nsw i32 %2, 2
  %52 = mul nuw nsw i32 %2, 3
  %53 = select i1 %31, i32 %52, i32 %51
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %0, i32 noundef %50, i32 noundef %53)
  %spec.select457 = select i1 %31, i32 3, i32 5
  br label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.thread, %49
  %54 = phi i32 [ %48, %.thread ], [ %53, %49 ]
  %55 = phi i32 [ 3, %.thread ], [ %spec.select457, %49 ]
  %56 = mul nuw nsw i32 %55, %2
  %57 = zext nneg i32 %56 to i64
  %58 = shl nuw nsw i64 %57, 3
  %59 = alloca i8, i64 %58, align 16
  %60 = zext nneg i32 %2 to i64
  %61 = getelementptr %struct.ImVec2, ptr %59, i64 %60
  %wide.trip.count = zext nneg i32 %28 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %80
  br i1 %.not, label %87, label %.thread453

.lr.ph:                                           ; preds = %.lr.ph.preheader, %80
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %80 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %62 = icmp eq i64 %indvars.iv.next, %60
  %63 = and i64 %indvars.iv.next, 4294967295
  %64 = select i1 %62, i64 0, i64 %63
  %65 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %64
  %66 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv
  %67 = load <2 x float>, ptr %65, align 4, !tbaa !24
  %68 = load <2 x float>, ptr %66, align 4, !tbaa !24
  %69 = fsub <2 x float> %67, %68
  %70 = fmul <2 x float> %69, %69
  %71 = extractelement <2 x float> %70, i64 1
  %72 = extractelement <2 x float> %69, i64 0
  %73 = tail call float @llvm.fmuladd.f32(float %72, float %72, float %71)
  %74 = fcmp ogt float %73, 0.000000e+00
  br i1 %74, label %75, label %80

75:                                               ; preds = %.lr.ph
  %sqrt = tail call float @llvm.sqrt.f32(float %73)
  %76 = fdiv float 1.000000e+00, %sqrt
  %77 = insertelement <2 x float> poison, float %76, i64 0
  %78 = shufflevector <2 x float> %77, <2 x float> poison, <2 x i32> zeroinitializer
  %79 = fmul <2 x float> %69, %78
  br label %80

80:                                               ; preds = %75, %.lr.ph
  %81 = phi <2 x float> [ %79, %75 ], [ %69, %.lr.ph ]
  %82 = getelementptr inbounds %struct.ImVec2, ptr %59, i64 %indvars.iv
  %83 = extractelement <2 x float> %81, i64 1
  store float %83, ptr %82, align 8, !tbaa !25
  %84 = extractelement <2 x float> %81, i64 0
  %85 = fneg float %84
  %86 = getelementptr inbounds i8, ptr %82, i64 4
  store float %85, ptr %86, align 4, !tbaa !27
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

87:                                               ; preds = %._crit_edge
  %88 = getelementptr i8, ptr %61, i64 -16
  %89 = zext nneg i32 %27 to i64
  %90 = getelementptr inbounds %struct.ImVec2, ptr %59, i64 %89
  %91 = load i64, ptr %88, align 8
  store i64 %91, ptr %90, align 8
  %brmerge = or i1 %31, %spec.select
  br i1 %brmerge, label %96, label %235

.thread453:                                       ; preds = %._crit_edge
  %brmerge454 = or i1 %31, %spec.select
  br i1 %brmerge454, label %.thread455, label %.thread456

.thread456:                                       ; preds = %.thread453
  %92 = fsub float %37, %.fr
  %93 = fmul float %92, 5.000000e-01
  br label %.lr.ph466

.thread455:                                       ; preds = %.thread453
  %94 = tail call float @llvm.fmuladd.f32(float %37, float 5.000000e-01, float 1.000000e+00)
  %95 = select i1 %spec.select, float %94, float %.fr
  br label %.lr.ph472

96:                                               ; preds = %87
  %97 = tail call float @llvm.fmuladd.f32(float %37, float 5.000000e-01, float 1.000000e+00)
  %98 = select i1 %spec.select, float %97, float %.fr
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %99 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %59, float noundef %98)
  store <2 x float> %99, ptr %7, align 8
  %100 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %100, ptr %61, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %101 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %59, float noundef %98)
  store <2 x float> %101, ptr %8, align 8
  %102 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %8)
  %103 = getelementptr inbounds i8, ptr %61, i64 8
  store <2 x float> %102, ptr %103, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %104 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %89
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %105 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %90, float noundef %98)
  store <2 x float> %105, ptr %9, align 8
  %106 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %104, ptr noundef nonnull align 4 dereferenceable(8) %9)
  %107 = shl nuw nsw i32 %27, 1
  %108 = zext nneg i32 %107 to i64
  %109 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %108
  store <2 x float> %106, ptr %109, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %110 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %90, float noundef %98)
  store <2 x float> %110, ptr %10, align 8
  %111 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %104, ptr noundef nonnull align 4 dereferenceable(8) %10)
  %112 = or disjoint i32 %107, 1
  %113 = zext nneg i32 %112 to i64
  %114 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %113
  store <2 x float> %111, ptr %114, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %.lr.ph472

.lr.ph472:                                        ; preds = %96, %.thread455
  %115 = phi float [ %95, %.thread455 ], [ %98, %96 ]
  %116 = getelementptr inbounds i8, ptr %0, i64 52
  %117 = load i32, ptr %116, align 4, !tbaa !30
  %118 = select i1 %spec.select, i32 2, i32 3
  %119 = getelementptr inbounds i8, ptr %0, i64 80
  %.promoted474 = load ptr, ptr %119, align 8, !tbaa !31
  %wide.trip.count499 = zext nneg i32 %28 to i64
  %120 = insertelement <2 x float> poison, float %115, i64 0
  %121 = shufflevector <2 x float> %120, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.backedge

.lr.ph476:                                        ; preds = %.thread520
  %122 = getelementptr inbounds i8, ptr %0, i64 72
  %smax504 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count505 = zext nneg i32 %smax504 to i64
  %.pre518 = load ptr, ptr %122, align 8, !tbaa !32
  br label %210

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph472
  %indvars.iv496 = phi i64 [ 0, %.lr.ph472 ], [ %indvars.iv.next497, %.backedge.backedge ]
  %123 = phi ptr [ %.promoted474, %.lr.ph472 ], [ %.be, %.backedge.backedge ]
  %.0418470 = phi i32 [ %117, %.lr.ph472 ], [ %129, %.backedge.backedge ]
  %indvars.iv.next497 = add nuw nsw i64 %indvars.iv496, 1
  %124 = icmp eq i64 %indvars.iv.next497, %60
  %125 = trunc nuw nsw i64 %indvars.iv.next497 to i32
  %126 = select i1 %124, i32 0, i32 %125
  %127 = load i32, ptr %116, align 4
  %128 = add i32 %.0418470, %118
  %129 = select i1 %124, i32 %127, i32 %128
  %130 = getelementptr inbounds %struct.ImVec2, ptr %59, i64 %indvars.iv496
  %131 = zext nneg i32 %126 to i64
  %132 = getelementptr inbounds %struct.ImVec2, ptr %59, i64 %131
  %133 = load <2 x float>, ptr %130, align 8, !tbaa !24
  %134 = load <2 x float>, ptr %132, align 8, !tbaa !24
  %135 = fadd <2 x float> %133, %134
  %136 = fmul <2 x float> %135, <float 5.000000e-01, float 5.000000e-01>
  %137 = fmul <2 x float> %136, %136
  %138 = extractelement <2 x float> %137, i64 1
  %139 = extractelement <2 x float> %136, i64 0
  %140 = call float @llvm.fmuladd.f32(float %139, float %139, float %138)
  %141 = fcmp ogt float %140, 0x3EB0C6F7A0000000
  br i1 %141, label %142, label %148

142:                                              ; preds = %.backedge
  %143 = fdiv float 1.000000e+00, %140
  %144 = fcmp ogt float %143, 1.000000e+02
  %.0424 = select i1 %144, float 1.000000e+02, float %143
  %145 = insertelement <2 x float> poison, float %.0424, i64 0
  %146 = shufflevector <2 x float> %145, <2 x float> poison, <2 x i32> zeroinitializer
  %147 = fmul <2 x float> %136, %146
  br label %148

148:                                              ; preds = %142, %.backedge
  %149 = phi <2 x float> [ %147, %142 ], [ %136, %.backedge ]
  %150 = fmul <2 x float> %121, %149
  %151 = shufflevector <2 x float> %150, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %152 = shl nuw nsw i32 %126, 1
  %153 = zext nneg i32 %152 to i64
  %154 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %153
  %155 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %131
  %156 = load <2 x float>, ptr %155, align 4, !tbaa !24
  %157 = shufflevector <2 x float> %156, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %158 = fadd <4 x float> %157, %151
  %159 = fsub <4 x float> %157, %151
  %160 = shufflevector <4 x float> %158, <4 x float> %159, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
  store <4 x float> %160, ptr %154, align 8, !tbaa !24
  %161 = trunc i32 %129 to i16
  store i16 %161, ptr %123, align 2, !tbaa !33
  %162 = trunc i32 %.0418470 to i16
  %163 = getelementptr inbounds i8, ptr %123, i64 2
  store i16 %162, ptr %163, align 2, !tbaa !33
  %164 = getelementptr inbounds i8, ptr %123, i64 4
  %165 = getelementptr inbounds i8, ptr %123, i64 8
  %166 = getelementptr inbounds i8, ptr %123, i64 10
  br i1 %spec.select, label %167, label %.thread520

167:                                              ; preds = %148
  %168 = add i16 %162, 1
  store i16 %168, ptr %164, align 2, !tbaa !33
  %169 = add i16 %161, 1
  %170 = getelementptr inbounds i8, ptr %123, i64 6
  store i16 %169, ptr %170, align 2, !tbaa !33
  store i16 %168, ptr %165, align 2, !tbaa !33
  store i16 %161, ptr %166, align 2, !tbaa !33
  %171 = getelementptr inbounds i8, ptr %123, i64 12
  store ptr %171, ptr %119, align 8, !tbaa !31
  %exitcond500.not = icmp eq i64 %indvars.iv.next497, %wide.trip.count499
  br i1 %exitcond500.not, label %.lr.ph479, label %.backedge.backedge

.backedge.backedge:                               ; preds = %167, %.thread520
  %.be = phi ptr [ %171, %167 ], [ %183, %.thread520 ]
  br label %.backedge, !llvm.loop !35

.thread520:                                       ; preds = %148
  %172 = add i16 %162, 2
  store i16 %172, ptr %164, align 2, !tbaa !33
  %173 = getelementptr inbounds i8, ptr %123, i64 6
  store i16 %172, ptr %173, align 2, !tbaa !33
  %174 = add i16 %161, 2
  store i16 %174, ptr %165, align 2, !tbaa !33
  store i16 %161, ptr %166, align 2, !tbaa !33
  %175 = add i16 %161, 1
  %176 = getelementptr inbounds i8, ptr %123, i64 12
  store i16 %175, ptr %176, align 2, !tbaa !33
  %177 = add i16 %162, 1
  %178 = getelementptr inbounds i8, ptr %123, i64 14
  store i16 %177, ptr %178, align 2, !tbaa !33
  %179 = getelementptr inbounds i8, ptr %123, i64 16
  store i16 %162, ptr %179, align 2, !tbaa !33
  %180 = getelementptr inbounds i8, ptr %123, i64 18
  store i16 %162, ptr %180, align 2, !tbaa !33
  %181 = getelementptr inbounds i8, ptr %123, i64 20
  store i16 %161, ptr %181, align 2, !tbaa !33
  %182 = getelementptr inbounds i8, ptr %123, i64 22
  store i16 %175, ptr %182, align 2, !tbaa !33
  %183 = getelementptr inbounds i8, ptr %123, i64 24
  store ptr %183, ptr %119, align 8, !tbaa !31
  %exitcond500.not521 = icmp eq i64 %indvars.iv.next497, %wide.trip.count499
  br i1 %exitcond500.not521, label %.lr.ph476, label %.backedge.backedge

.lr.ph479:                                        ; preds = %167
  %184 = load ptr, ptr %24, align 8, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %184, i64 504
  %186 = load ptr, ptr %185, align 8, !tbaa !36
  %187 = sext i32 %38 to i64
  %188 = getelementptr inbounds %struct.ImVec4, ptr %186, i64 %187
  %.sroa.0157.0.copyload = load float, ptr %188, align 4, !tbaa !24
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 4
  %.sroa.4.0.copyload = load float, ptr %.sroa.4.0..sroa_idx, align 4, !tbaa !24
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 8
  %.sroa.5.0.copyload = load float, ptr %.sroa.5.0..sroa_idx, align 4, !tbaa !24
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 12
  %.sroa.6.0.copyload = load float, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %11, float noundef %.sroa.0157.0.copyload, float noundef %.sroa.4.0.copyload)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %.sroa.5.0.copyload, float noundef %.sroa.6.0.copyload)
  %189 = getelementptr inbounds i8, ptr %0, i64 72
  %smax510 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count511 = zext nneg i32 %smax510 to i64
  %.pre519 = load ptr, ptr %189, align 8, !tbaa !32
  br label %190

._crit_edge480:                                   ; preds = %190
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %.loopexit459

190:                                              ; preds = %.lr.ph479, %190
  %191 = phi ptr [ %.pre519, %.lr.ph479 ], [ %209, %190 ]
  %indvars.iv507 = phi i64 [ 0, %.lr.ph479 ], [ %indvars.iv.next508, %190 ]
  %192 = shl nuw nsw i64 %indvars.iv507, 1
  %193 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %192
  %194 = load i64, ptr %193, align 8
  store i64 %194, ptr %191, align 4
  %195 = load ptr, ptr %189, align 8, !tbaa !32
  %196 = getelementptr inbounds i8, ptr %195, i64 8
  %197 = load i64, ptr %11, align 8
  store i64 %197, ptr %196, align 4
  %198 = load ptr, ptr %189, align 8, !tbaa !32
  %199 = getelementptr inbounds i8, ptr %198, i64 16
  store i32 %3, ptr %199, align 4, !tbaa !38
  %200 = or disjoint i64 %192, 1
  %201 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %200
  %202 = getelementptr inbounds i8, ptr %198, i64 20
  %203 = load i64, ptr %201, align 8
  store i64 %203, ptr %202, align 4
  %204 = load ptr, ptr %189, align 8, !tbaa !32
  %205 = getelementptr inbounds i8, ptr %204, i64 28
  %206 = load i64, ptr %12, align 8
  store i64 %206, ptr %205, align 4
  %207 = load ptr, ptr %189, align 8, !tbaa !32
  %208 = getelementptr inbounds i8, ptr %207, i64 36
  store i32 %3, ptr %208, align 4, !tbaa !38
  %209 = getelementptr inbounds i8, ptr %207, i64 40
  store ptr %209, ptr %189, align 8, !tbaa !32
  %indvars.iv.next508 = add nuw nsw i64 %indvars.iv507, 1
  %exitcond512.not = icmp eq i64 %indvars.iv.next508, %wide.trip.count511
  br i1 %exitcond512.not, label %._crit_edge480, label %190, !llvm.loop !40

210:                                              ; preds = %.lr.ph476, %210
  %211 = phi ptr [ %.pre518, %.lr.ph476 ], [ %234, %210 ]
  %indvars.iv501 = phi i64 [ 0, %.lr.ph476 ], [ %indvars.iv.next502, %210 ]
  %212 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv501
  %213 = load i64, ptr %212, align 4
  store i64 %213, ptr %211, align 4
  %214 = load ptr, ptr %122, align 8, !tbaa !32
  %215 = getelementptr inbounds i8, ptr %214, i64 8
  store i64 %26, ptr %215, align 4
  %216 = load ptr, ptr %122, align 8, !tbaa !32
  %217 = getelementptr inbounds i8, ptr %216, i64 16
  store i32 %3, ptr %217, align 4, !tbaa !38
  %218 = shl nuw nsw i64 %indvars.iv501, 1
  %219 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %218
  %220 = getelementptr inbounds i8, ptr %216, i64 20
  %221 = load i64, ptr %219, align 8
  store i64 %221, ptr %220, align 4
  %222 = load ptr, ptr %122, align 8, !tbaa !32
  %223 = getelementptr inbounds i8, ptr %222, i64 28
  store i64 %26, ptr %223, align 4
  %224 = load ptr, ptr %122, align 8, !tbaa !32
  %225 = getelementptr inbounds i8, ptr %224, i64 36
  store i32 %36, ptr %225, align 4, !tbaa !38
  %226 = or disjoint i64 %218, 1
  %227 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %226
  %228 = getelementptr inbounds i8, ptr %224, i64 40
  %229 = load i64, ptr %227, align 8
  store i64 %229, ptr %228, align 4
  %230 = load ptr, ptr %122, align 8, !tbaa !32
  %231 = getelementptr inbounds i8, ptr %230, i64 48
  store i64 %26, ptr %231, align 4
  %232 = load ptr, ptr %122, align 8, !tbaa !32
  %233 = getelementptr inbounds i8, ptr %232, i64 56
  store i32 %36, ptr %233, align 4, !tbaa !38
  %234 = getelementptr inbounds i8, ptr %232, i64 60
  store ptr %234, ptr %122, align 8, !tbaa !32
  %indvars.iv.next502 = add nuw nsw i64 %indvars.iv501, 1
  %exitcond506.not = icmp eq i64 %indvars.iv.next502, %wide.trip.count505
  br i1 %exitcond506.not, label %.loopexit459, label %210, !llvm.loop !41

235:                                              ; preds = %87
  %236 = fsub float %37, %.fr
  %237 = fmul float %236, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %238 = fadd float %.fr, %237
  %239 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %59, float noundef %238)
  store <2 x float> %239, ptr %13, align 8
  %240 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %13)
  store <2 x float> %240, ptr %61, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  %241 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %59, float noundef %237)
  store <2 x float> %241, ptr %14, align 8
  %242 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %14)
  %243 = getelementptr inbounds i8, ptr %61, i64 8
  store <2 x float> %242, ptr %243, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %244 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %59, float noundef %237)
  store <2 x float> %244, ptr %15, align 8
  %245 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %15)
  %246 = getelementptr inbounds i8, ptr %61, i64 16
  store <2 x float> %245, ptr %246, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %247 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %59, float noundef %238)
  store <2 x float> %247, ptr %16, align 8
  %248 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %16)
  %249 = getelementptr inbounds i8, ptr %61, i64 24
  store <2 x float> %248, ptr %249, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %250 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %89
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  %251 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %90, float noundef %238)
  store <2 x float> %251, ptr %17, align 8
  %252 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %250, ptr noundef nonnull align 4 dereferenceable(8) %17)
  %253 = shl nsw i32 %27, 2
  %254 = zext nneg i32 %253 to i64
  %255 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %254
  store <2 x float> %252, ptr %255, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  %256 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %90, float noundef %237)
  store <2 x float> %256, ptr %18, align 8
  %257 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %250, ptr noundef nonnull align 4 dereferenceable(8) %18)
  %258 = or disjoint i32 %253, 1
  %259 = zext nneg i32 %258 to i64
  %260 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %259
  store <2 x float> %257, ptr %260, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  %261 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %90, float noundef %237)
  store <2 x float> %261, ptr %19, align 8
  %262 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %250, ptr noundef nonnull align 4 dereferenceable(8) %19)
  %263 = or disjoint i32 %253, 2
  %264 = zext nneg i32 %263 to i64
  %265 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %264
  store <2 x float> %262, ptr %265, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %266 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %90, float noundef %238)
  store <2 x float> %266, ptr %20, align 8
  %267 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %250, ptr noundef nonnull align 4 dereferenceable(8) %20)
  %268 = or disjoint i32 %253, 3
  %269 = zext nneg i32 %268 to i64
  %270 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %269
  store <2 x float> %267, ptr %270, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %.lr.ph466

.lr.ph466:                                        ; preds = %235, %.thread456
  %271 = phi float [ %93, %.thread456 ], [ %237, %235 ]
  %272 = getelementptr inbounds i8, ptr %0, i64 52
  %273 = load i32, ptr %272, align 4, !tbaa !30
  %274 = fadd float %.fr, %271
  %275 = getelementptr inbounds i8, ptr %0, i64 80
  %.promoted = load ptr, ptr %275, align 8, !tbaa !31
  %wide.trip.count489 = zext nneg i32 %28 to i64
  %276 = insertelement <4 x float> poison, float %274, i64 0
  %277 = insertelement <4 x float> %276, float %271, i64 1
  %278 = shufflevector <4 x float> %277, <4 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  br label %280

.lr.ph468:                                        ; preds = %306
  store ptr %345, ptr %275, align 8, !tbaa !31
  %279 = getelementptr inbounds i8, ptr %0, i64 72
  %smax = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count494 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %279, align 8, !tbaa !32
  br label %346

280:                                              ; preds = %.lr.ph466, %306
  %indvars.iv486 = phi i64 [ 0, %.lr.ph466 ], [ %indvars.iv.next487, %306 ]
  %281 = phi ptr [ %.promoted, %.lr.ph466 ], [ %345, %306 ]
  %.0427464 = phi i32 [ %273, %.lr.ph466 ], [ %287, %306 ]
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %282 = icmp eq i64 %indvars.iv.next487, %60
  %283 = trunc nuw nsw i64 %indvars.iv.next487 to i32
  %284 = select i1 %282, i32 0, i32 %283
  %285 = load i32, ptr %272, align 4
  %286 = add i32 %.0427464, 4
  %287 = select i1 %282, i32 %285, i32 %286
  %288 = getelementptr inbounds %struct.ImVec2, ptr %59, i64 %indvars.iv486
  %289 = zext nneg i32 %284 to i64
  %290 = getelementptr inbounds %struct.ImVec2, ptr %59, i64 %289
  %291 = load <2 x float>, ptr %288, align 8, !tbaa !24
  %292 = load <2 x float>, ptr %290, align 8, !tbaa !24
  %293 = fadd <2 x float> %291, %292
  %294 = fmul <2 x float> %293, <float 5.000000e-01, float 5.000000e-01>
  %295 = fmul <2 x float> %294, %294
  %296 = extractelement <2 x float> %295, i64 1
  %297 = extractelement <2 x float> %294, i64 0
  %298 = call float @llvm.fmuladd.f32(float %297, float %297, float %296)
  %299 = fcmp ogt float %298, 0x3EB0C6F7A0000000
  br i1 %299, label %300, label %306

300:                                              ; preds = %280
  %301 = fdiv float 1.000000e+00, %298
  %302 = fcmp ogt float %301, 1.000000e+02
  %.0428 = select i1 %302, float 1.000000e+02, float %301
  %303 = insertelement <2 x float> poison, float %.0428, i64 0
  %304 = shufflevector <2 x float> %303, <2 x float> poison, <2 x i32> zeroinitializer
  %305 = fmul <2 x float> %294, %304
  br label %306

306:                                              ; preds = %300, %280
  %307 = phi <2 x float> [ %305, %300 ], [ %294, %280 ]
  %308 = shufflevector <2 x float> %307, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %309 = fmul <4 x float> %278, %308
  %310 = shl nsw i32 %284, 2
  %311 = zext nneg i32 %310 to i64
  %312 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %311
  %313 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %289
  %314 = load <2 x float>, ptr %313, align 4, !tbaa !24
  %315 = shufflevector <2 x float> %314, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %316 = fadd <4 x float> %309, %315
  store <4 x float> %316, ptr %312, align 8, !tbaa !24
  %317 = getelementptr inbounds i8, ptr %312, i64 16
  %318 = fsub <4 x float> %315, %309
  %319 = shufflevector <4 x float> %318, <4 x float> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
  store <4 x float> %319, ptr %317, align 8, !tbaa !24
  %320 = trunc i32 %287 to i16
  %321 = add i16 %320, 1
  store i16 %321, ptr %281, align 2, !tbaa !33
  %322 = trunc i32 %.0427464 to i16
  %323 = add i16 %322, 1
  %324 = getelementptr inbounds i8, ptr %281, i64 2
  store i16 %323, ptr %324, align 2, !tbaa !33
  %325 = add i16 %322, 2
  %326 = getelementptr inbounds i8, ptr %281, i64 4
  store i16 %325, ptr %326, align 2, !tbaa !33
  %327 = getelementptr inbounds i8, ptr %281, i64 6
  store i16 %325, ptr %327, align 2, !tbaa !33
  %328 = add i16 %320, 2
  %329 = getelementptr inbounds i8, ptr %281, i64 8
  store i16 %328, ptr %329, align 2, !tbaa !33
  %330 = getelementptr inbounds i8, ptr %281, i64 10
  store i16 %321, ptr %330, align 2, !tbaa !33
  %331 = getelementptr inbounds i8, ptr %281, i64 12
  store i16 %321, ptr %331, align 2, !tbaa !33
  %332 = getelementptr inbounds i8, ptr %281, i64 14
  store i16 %323, ptr %332, align 2, !tbaa !33
  %333 = getelementptr inbounds i8, ptr %281, i64 16
  store i16 %322, ptr %333, align 2, !tbaa !33
  %334 = getelementptr inbounds i8, ptr %281, i64 18
  store i16 %322, ptr %334, align 2, !tbaa !33
  %335 = getelementptr inbounds i8, ptr %281, i64 20
  store i16 %320, ptr %335, align 2, !tbaa !33
  %336 = getelementptr inbounds i8, ptr %281, i64 22
  store i16 %321, ptr %336, align 2, !tbaa !33
  %337 = getelementptr inbounds i8, ptr %281, i64 24
  store i16 %328, ptr %337, align 2, !tbaa !33
  %338 = getelementptr inbounds i8, ptr %281, i64 26
  store i16 %325, ptr %338, align 2, !tbaa !33
  %339 = add i16 %322, 3
  %340 = getelementptr inbounds i8, ptr %281, i64 28
  store i16 %339, ptr %340, align 2, !tbaa !33
  %341 = getelementptr inbounds i8, ptr %281, i64 30
  store i16 %339, ptr %341, align 2, !tbaa !33
  %342 = add i16 %320, 3
  %343 = getelementptr inbounds i8, ptr %281, i64 32
  store i16 %342, ptr %343, align 2, !tbaa !33
  %344 = getelementptr inbounds i8, ptr %281, i64 34
  store i16 %328, ptr %344, align 2, !tbaa !33
  %345 = getelementptr inbounds i8, ptr %281, i64 36
  %exitcond490.not = icmp eq i64 %indvars.iv.next487, %wide.trip.count489
  br i1 %exitcond490.not, label %.lr.ph468, label %280, !llvm.loop !42

346:                                              ; preds = %.lr.ph468, %346
  %347 = phi ptr [ %.pre, %.lr.ph468 ], [ %379, %346 ]
  %indvars.iv491 = phi i64 [ 0, %.lr.ph468 ], [ %indvars.iv.next492, %346 ]
  %348 = shl nsw i64 %indvars.iv491, 2
  %349 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %348
  %350 = load i64, ptr %349, align 8
  store i64 %350, ptr %347, align 4
  %351 = load ptr, ptr %279, align 8, !tbaa !32
  %352 = getelementptr inbounds i8, ptr %351, i64 8
  store i64 %26, ptr %352, align 4
  %353 = load ptr, ptr %279, align 8, !tbaa !32
  %354 = getelementptr inbounds i8, ptr %353, i64 16
  store i32 %36, ptr %354, align 4, !tbaa !38
  %355 = or disjoint i64 %348, 1
  %356 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %355
  %357 = getelementptr inbounds i8, ptr %353, i64 20
  %358 = load i64, ptr %356, align 8
  store i64 %358, ptr %357, align 4
  %359 = load ptr, ptr %279, align 8, !tbaa !32
  %360 = getelementptr inbounds i8, ptr %359, i64 28
  store i64 %26, ptr %360, align 4
  %361 = load ptr, ptr %279, align 8, !tbaa !32
  %362 = getelementptr inbounds i8, ptr %361, i64 36
  store i32 %3, ptr %362, align 4, !tbaa !38
  %363 = or disjoint i64 %348, 2
  %364 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %363
  %365 = getelementptr inbounds i8, ptr %361, i64 40
  %366 = load i64, ptr %364, align 8
  store i64 %366, ptr %365, align 4
  %367 = load ptr, ptr %279, align 8, !tbaa !32
  %368 = getelementptr inbounds i8, ptr %367, i64 48
  store i64 %26, ptr %368, align 4
  %369 = load ptr, ptr %279, align 8, !tbaa !32
  %370 = getelementptr inbounds i8, ptr %369, i64 56
  store i32 %3, ptr %370, align 4, !tbaa !38
  %371 = or disjoint i64 %348, 3
  %372 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %371
  %373 = getelementptr inbounds i8, ptr %369, i64 60
  %374 = load i64, ptr %372, align 8
  store i64 %374, ptr %373, align 4
  %375 = load ptr, ptr %279, align 8, !tbaa !32
  %376 = getelementptr inbounds i8, ptr %375, i64 68
  store i64 %26, ptr %376, align 4
  %377 = load ptr, ptr %279, align 8, !tbaa !32
  %378 = getelementptr inbounds i8, ptr %377, i64 76
  store i32 %36, ptr %378, align 4, !tbaa !38
  %379 = getelementptr inbounds i8, ptr %377, i64 80
  store ptr %379, ptr %279, align 8, !tbaa !32
  %indvars.iv.next492 = add nuw nsw i64 %indvars.iv491, 1
  %exitcond495.not = icmp eq i64 %indvars.iv.next492, %wide.trip.count494
  br i1 %exitcond495.not, label %.loopexit459, label %346, !llvm.loop !43

.loopexit459:                                     ; preds = %346, %210, %._crit_edge480
  %380 = and i32 %54, 65535
  %381 = getelementptr inbounds i8, ptr %0, i64 52
  %382 = load i32, ptr %381, align 4, !tbaa !30
  %383 = add i32 %382, %380
  store i32 %383, ptr %381, align 4, !tbaa !30
  br label %.loopexit

.lr.ph483:                                        ; preds = %22
  %384 = mul nsw i32 %28, 6
  %385 = shl nsw i32 %28, 2
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %0, i32 noundef %384, i32 noundef %385)
  %386 = fmul float %5, 5.000000e-01
  %387 = getelementptr inbounds i8, ptr %0, i64 72
  %388 = getelementptr inbounds i8, ptr %0, i64 52
  %389 = getelementptr inbounds i8, ptr %0, i64 80
  %390 = zext nneg i32 %2 to i64
  %wide.trip.count516 = zext nneg i32 %28 to i64
  %391 = insertelement <2 x float> poison, float %386, i64 0
  %392 = shufflevector <2 x float> %391, <2 x float> poison, <2 x i32> zeroinitializer
  br label %393

393:                                              ; preds = %.lr.ph483, %415
  %indvars.iv513 = phi i64 [ 0, %.lr.ph483 ], [ %indvars.iv.next514, %415 ]
  %indvars.iv.next514 = add nuw nsw i64 %indvars.iv513, 1
  %394 = icmp eq i64 %indvars.iv.next514, %390
  %395 = and i64 %indvars.iv.next514, 4294967295
  %396 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv513
  %397 = select i1 %394, i64 0, i64 %395
  %398 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %397
  %399 = getelementptr inbounds i8, ptr %398, i64 4
  %400 = getelementptr inbounds i8, ptr %396, i64 4
  %401 = load <2 x float>, ptr %398, align 4, !tbaa !24
  %402 = load <2 x float>, ptr %396, align 4, !tbaa !24
  %403 = fsub <2 x float> %401, %402
  %404 = shufflevector <2 x float> %403, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %405 = fmul <2 x float> %403, %403
  %406 = extractelement <2 x float> %405, i64 1
  %407 = extractelement <2 x float> %403, i64 0
  %408 = tail call float @llvm.fmuladd.f32(float %407, float %407, float %406)
  %409 = fcmp ogt float %408, 0.000000e+00
  br i1 %409, label %410, label %415

410:                                              ; preds = %393
  %sqrt458 = tail call float @llvm.sqrt.f32(float %408)
  %411 = fdiv float 1.000000e+00, %sqrt458
  %412 = insertelement <2 x float> poison, float %411, i64 0
  %413 = shufflevector <2 x float> %412, <2 x float> poison, <2 x i32> zeroinitializer
  %414 = fmul <2 x float> %404, %413
  br label %415

415:                                              ; preds = %410, %393
  %416 = phi <2 x float> [ %414, %410 ], [ %404, %393 ]
  %417 = fmul <2 x float> %392, %416
  %418 = load ptr, ptr %387, align 8, !tbaa !32
  %419 = fadd <2 x float> %402, %417
  %420 = fsub <2 x float> %402, %417
  %421 = shufflevector <2 x float> %419, <2 x float> %420, <2 x i32> <i32 0, i32 3>
  store <2 x float> %421, ptr %418, align 4, !tbaa !24
  %422 = getelementptr inbounds i8, ptr %418, i64 8
  store i64 %26, ptr %422, align 4
  %423 = load ptr, ptr %387, align 8, !tbaa !32
  %424 = getelementptr inbounds i8, ptr %423, i64 16
  store i32 %3, ptr %424, align 4, !tbaa !38
  %425 = load float, ptr %398, align 4, !tbaa !25
  %426 = extractelement <2 x float> %417, i64 0
  %427 = fadd float %426, %425
  %428 = getelementptr inbounds i8, ptr %423, i64 20
  store float %427, ptr %428, align 4, !tbaa !44
  %429 = load float, ptr %399, align 4, !tbaa !27
  %430 = extractelement <2 x float> %417, i64 1
  %431 = fsub float %429, %430
  %432 = getelementptr inbounds i8, ptr %423, i64 24
  store float %431, ptr %432, align 4, !tbaa !45
  %433 = getelementptr inbounds i8, ptr %423, i64 28
  store i64 %26, ptr %433, align 4
  %434 = load ptr, ptr %387, align 8, !tbaa !32
  %435 = getelementptr inbounds i8, ptr %434, i64 36
  store i32 %3, ptr %435, align 4, !tbaa !38
  %436 = load float, ptr %398, align 4, !tbaa !25
  %437 = fsub float %436, %426
  %438 = getelementptr inbounds i8, ptr %434, i64 40
  store float %437, ptr %438, align 4, !tbaa !44
  %439 = load float, ptr %399, align 4, !tbaa !27
  %440 = fadd float %430, %439
  %441 = getelementptr inbounds i8, ptr %434, i64 44
  store float %440, ptr %441, align 4, !tbaa !45
  %442 = getelementptr inbounds i8, ptr %434, i64 48
  store i64 %26, ptr %442, align 4
  %443 = load ptr, ptr %387, align 8, !tbaa !32
  %444 = getelementptr inbounds i8, ptr %443, i64 56
  store i32 %3, ptr %444, align 4, !tbaa !38
  %445 = load float, ptr %396, align 4, !tbaa !25
  %446 = fsub float %445, %426
  %447 = getelementptr inbounds i8, ptr %443, i64 60
  store float %446, ptr %447, align 4, !tbaa !44
  %448 = load float, ptr %400, align 4, !tbaa !27
  %449 = fadd float %430, %448
  %450 = getelementptr inbounds i8, ptr %443, i64 64
  store float %449, ptr %450, align 4, !tbaa !45
  %451 = getelementptr inbounds i8, ptr %443, i64 68
  store i64 %26, ptr %451, align 4
  %452 = load ptr, ptr %387, align 8, !tbaa !32
  %453 = getelementptr inbounds i8, ptr %452, i64 76
  store i32 %3, ptr %453, align 4, !tbaa !38
  %454 = getelementptr inbounds i8, ptr %452, i64 80
  store ptr %454, ptr %387, align 8, !tbaa !32
  %455 = load i32, ptr %388, align 4, !tbaa !30
  %456 = trunc i32 %455 to i16
  %457 = load ptr, ptr %389, align 8, !tbaa !31
  store i16 %456, ptr %457, align 2, !tbaa !33
  %458 = add i16 %456, 1
  %459 = getelementptr inbounds i8, ptr %457, i64 2
  store i16 %458, ptr %459, align 2, !tbaa !33
  %460 = add i16 %456, 2
  %461 = getelementptr inbounds i8, ptr %457, i64 4
  store i16 %460, ptr %461, align 2, !tbaa !33
  %462 = getelementptr inbounds i8, ptr %457, i64 6
  store i16 %456, ptr %462, align 2, !tbaa !33
  %463 = getelementptr inbounds i8, ptr %457, i64 8
  store i16 %460, ptr %463, align 2, !tbaa !33
  %464 = add i16 %456, 3
  %465 = getelementptr inbounds i8, ptr %457, i64 10
  store i16 %464, ptr %465, align 2, !tbaa !33
  %466 = getelementptr inbounds i8, ptr %457, i64 12
  store ptr %466, ptr %389, align 8, !tbaa !31
  %467 = add i32 %455, 4
  store i32 %467, ptr %388, align 4, !tbaa !30
  %exitcond517.not = icmp eq i64 %indvars.iv.next514, %wide.trip.count516
  br i1 %exitcond517.not, label %.loopexit, label %393, !llvm.loop !46

.loopexit:                                        ; preds = %415, %.loopexit459, %6
  ret void
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #6

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { 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 #4 = { 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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { inlinehint 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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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, !11, i64 56}
!6 = !{!"_ZTS10ImDrawList", !7, i64 0, !12, i64 16, !13, i64 32, !8, i64 48, !8, i64 52, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !14, i64 88, !15, i64 104, !16, i64 120, !17, i64 136, !20, i64 168, !19, i64 192}
!7 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !8, i64 0, !8, i64 4, !11, i64 8}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"any pointer", !9, i64 0}
!12 = !{!"_ZTS8ImVectorItE", !8, i64 0, !8, i64 4, !11, i64 8}
!13 = !{!"_ZTS8ImVectorI10ImDrawVertE", !8, i64 0, !8, i64 4, !11, i64 8}
!14 = !{!"_ZTS8ImVectorI6ImVec4E", !8, i64 0, !8, i64 4, !11, i64 8}
!15 = !{!"_ZTS8ImVectorIPvE", !8, i64 0, !8, i64 4, !11, i64 8}
!16 = !{!"_ZTS8ImVectorI6ImVec2E", !8, i64 0, !8, i64 4, !11, i64 8}
!17 = !{!"_ZTS15ImDrawCmdHeader", !18, i64 0, !11, i64 16, !8, i64 24}
!18 = !{!"_ZTS6ImVec4", !19, i64 0, !19, i64 4, !19, i64 8, !19, i64 12}
!19 = !{!"float", !9, i64 0}
!20 = !{!"_ZTS18ImDrawListSplitter", !8, i64 0, !8, i64 4, !21, i64 8}
!21 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !8, i64 0, !8, i64 4, !11, i64 8}
!22 = !{!6, !19, i64 192}
!23 = !{!6, !8, i64 48}
!24 = !{!19, !19, i64 0}
!25 = !{!26, !19, i64 0}
!26 = !{!"_ZTS6ImVec2", !19, i64 0, !19, i64 4}
!27 = !{!26, !19, i64 4}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!6, !8, i64 52}
!31 = !{!6, !11, i64 80}
!32 = !{!6, !11, i64 72}
!33 = !{!34, !34, i64 0}
!34 = !{!"short", !9, i64 0}
!35 = distinct !{!35, !29}
!36 = !{!37, !11, i64 504}
!37 = !{!"_ZTS20ImDrawListSharedData", !26, i64 0, !11, i64 8, !19, i64 16, !19, i64 20, !19, i64 24, !18, i64 28, !8, i64 44, !9, i64 48, !19, i64 432, !9, i64 436, !11, i64 504}
!38 = !{!39, !8, i64 16}
!39 = !{!"_ZTS10ImDrawVert", !26, i64 0, !26, i64 8, !8, i64 16}
!40 = distinct !{!40, !29}
!41 = distinct !{!41, !29}
!42 = distinct !{!42, !29}
!43 = distinct !{!43, !29}
!44 = !{!39, !19, i64 0}
!45 = !{!39, !19, i64 4}
!46 = distinct !{!46, !29}


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