; LLVM IR from Devaniti/BoolkaEngine :: ThirdParty/imgui/imgui_draw.ll (ZN10ImDrawList11AddPolylineEPK6ImVec2ijbf)

; 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, [12 x %struct.ImVec2], [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 @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijbf(ptr noundef nonnull align 8 dereferenceable(196) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i1 noundef zeroext %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 i8, align 1
  %12 = alloca float, align 4
  %13 = alloca %struct.ImVec2, align 4
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca float, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca float, align 4
  %20 = alloca i8, align 1
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca %struct.ImVec2, 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 i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca ptr, align 8
  %49 = alloca %struct.ImVec4, align 4
  %50 = alloca %struct.ImVec2, align 4
  %51 = alloca %struct.ImVec2, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca float, align 4
  %55 = alloca i32, align 4
  %56 = alloca %struct.ImVec2, 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 i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca float, 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 ptr, align 8
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca ptr, align 8
  %91 = alloca ptr, align 8
  %92 = alloca float, align 4
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = 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
  %96 = zext i1 %4 to i8
  store i8 %96, ptr %11, align 1, !tbaa !11
  store float %5, ptr %12, align 4, !tbaa !13
  %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 %1550

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

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

109:                                              ; preds = %101
  %110 = load i32, ptr %9, align 4, !tbaa !9
  %111 = sub nsw i32 %110, 1
  br label %112

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

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

140:                                              ; preds = %123
  %141 = load i32, ptr %18, align 4, !tbaa !9
  %142 = icmp slt i32 %141, 63
  br i1 %142, label %143, label %149

143:                                              ; preds = %140
  %144 = load float, ptr %19, align 4, !tbaa !13
  %145 = fcmp ole float %144, 0x3EE4F8B580000000
  br i1 %145, label %146, label %149

146:                                              ; preds = %143
  %147 = load float, ptr %16, align 4, !tbaa !13
  %148 = fcmp oeq float %147, 1.000000e+00
  br label %149

149:                                              ; preds = %146, %143, %140, %123
  %150 = phi i1 [ false, %143 ], [ false, %140 ], [ false, %123 ], [ %148, %146 ]
  %151 = zext i1 %150 to i8
  store i8 %151, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %152 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %153 = trunc i8 %152 to i1
  br i1 %153, label %154, label %157

154:                                              ; preds = %149
  %155 = load i32, ptr %14, align 4, !tbaa !9
  %156 = mul nsw i32 %155, 6
  br label %168

157:                                              ; preds = %149
  %158 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %159 = trunc i8 %158 to i1
  br i1 %159, label %160, label %163

160:                                              ; preds = %157
  %161 = load i32, ptr %14, align 4, !tbaa !9
  %162 = mul nsw i32 %161, 18
  br label %166

163:                                              ; preds = %157
  %164 = load i32, ptr %14, align 4, !tbaa !9
  %165 = mul nsw i32 %164, 12
  br label %166

166:                                              ; preds = %163, %160
  %167 = phi i32 [ %162, %160 ], [ %165, %163 ]
  br label %168

168:                                              ; preds = %166, %154
  %169 = phi i32 [ %156, %154 ], [ %167, %166 ]
  store i32 %169, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %170 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %171 = trunc i8 %170 to i1
  br i1 %171, label %172, label %175

172:                                              ; preds = %168
  %173 = load i32, ptr %9, align 4, !tbaa !9
  %174 = mul nsw i32 %173, 2
  br label %186

175:                                              ; preds = %168
  %176 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %177 = trunc i8 %176 to i1
  br i1 %177, label %178, label %181

178:                                              ; preds = %175
  %179 = load i32, ptr %9, align 4, !tbaa !9
  %180 = mul nsw i32 %179, 4
  br label %184

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

184:                                              ; preds = %181, %178
  %185 = phi i32 [ %180, %178 ], [ %183, %181 ]
  br label %186

186:                                              ; preds = %184, %172
  %187 = phi i32 [ %174, %172 ], [ %185, %184 ]
  store i32 %187, ptr %22, align 4, !tbaa !9
  %188 = load i32, ptr %21, align 4, !tbaa !9
  %189 = load i32, ptr %22, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %97, i32 noundef %188, i32 noundef %189)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %190 = load i32, ptr %9, align 4, !tbaa !9
  %191 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %192 = trunc i8 %191 to i1
  br i1 %192, label %197, label %193

193:                                              ; preds = %186
  %194 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %195 = trunc i8 %194 to i1
  %196 = xor i1 %195, true
  br label %197

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

209:                                              ; preds = %286, %197
  %210 = load i32, ptr %25, align 4, !tbaa !9
  %211 = load i32, ptr %14, align 4, !tbaa !9
  %212 = icmp slt i32 %210, %211
  br i1 %212, label %214, label %213

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

214:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %215 = load i32, ptr %25, align 4, !tbaa !9
  %216 = add nsw i32 %215, 1
  %217 = load i32, ptr %9, align 4, !tbaa !9
  %218 = icmp eq i32 %216, %217
  br i1 %218, label %219, label %220

219:                                              ; preds = %214
  br label %223

220:                                              ; preds = %214
  %221 = load i32, ptr %25, align 4, !tbaa !9
  %222 = add nsw i32 %221, 1
  br label %223

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

251:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %252 = load float, ptr %27, align 4, !tbaa !13
  %253 = load float, ptr %27, align 4, !tbaa !13
  %254 = load float, ptr %28, align 4, !tbaa !13
  %255 = load float, ptr %28, align 4, !tbaa !13
  %256 = fmul float %254, %255
  %257 = call float @llvm.fmuladd.f32(float %252, float %253, float %256)
  store float %257, ptr %29, align 4, !tbaa !13
  %258 = load float, ptr %29, align 4, !tbaa !13
  %259 = fcmp ogt float %258, 0.000000e+00
  br i1 %259, label %260, label %270

260:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %261 = load float, ptr %29, align 4, !tbaa !13
  %262 = call float @sqrtf(float noundef %261) #9
  %263 = fdiv float 1.000000e+00, %262
  store float %263, ptr %30, align 4, !tbaa !13
  %264 = load float, ptr %30, align 4, !tbaa !13
  %265 = load float, ptr %27, align 4, !tbaa !13
  %266 = fmul float %265, %264
  store float %266, ptr %27, align 4, !tbaa !13
  %267 = load float, ptr %30, align 4, !tbaa !13
  %268 = load float, ptr %28, align 4, !tbaa !13
  %269 = fmul float %268, %267
  store float %269, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %270

270:                                              ; preds = %260, %251
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %271

271:                                              ; preds = %270
  br label %272

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

286:                                              ; preds = %272
  %287 = load i32, ptr %25, align 4, !tbaa !9
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %25, align 4, !tbaa !9
  br label %209, !llvm.loop !35

289:                                              ; preds = %213
  %290 = load i8, ptr %11, align 1, !tbaa !11, !range !28, !noundef !29
  %291 = trunc i8 %290 to i1
  br i1 %291, label %303, label %292

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

303:                                              ; preds = %292, %289
  %304 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %305 = trunc i8 %304 to i1
  br i1 %305, label %309, label %306

306:                                              ; preds = %303
  %307 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %308 = trunc i8 %307 to i1
  br i1 %308, label %782, label %309

309:                                              ; preds = %306, %303
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %310 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %311 = trunc i8 %310 to i1
  br i1 %311, label %312, label %315

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

315:                                              ; preds = %309
  %316 = load float, ptr %16, align 4, !tbaa !13
  br label %317

317:                                              ; preds = %315, %312
  %318 = phi float [ %314, %312 ], [ %316, %315 ]
  store float %318, ptr %31, align 4, !tbaa !13
  %319 = load i8, ptr %11, align 1, !tbaa !11, !range !28, !noundef !29
  %320 = trunc i8 %319 to i1
  br i1 %320, label %380, label %321

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

380:                                              ; preds = %321, %317
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %381 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %382 = load i32, ptr %381, align 4, !tbaa !37
  store i32 %382, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %639, %380
  %384 = load i32, ptr %41, align 4, !tbaa !9
  %385 = load i32, ptr %14, align 4, !tbaa !9
  %386 = icmp slt i32 %384, %385
  br i1 %386, label %388, label %387

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

388:                                              ; preds = %383
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %389 = load i32, ptr %41, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  %391 = load i32, ptr %9, align 4, !tbaa !9
  %392 = icmp eq i32 %390, %391
  br i1 %392, label %393, label %394

393:                                              ; preds = %388
  br label %397

394:                                              ; preds = %388
  %395 = load i32, ptr %41, align 4, !tbaa !9
  %396 = add nsw i32 %395, 1
  br label %397

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

403:                                              ; preds = %397
  %404 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %405 = load i32, ptr %404, align 4, !tbaa !37
  br label %413

406:                                              ; preds = %397
  %407 = load i32, ptr %40, align 4, !tbaa !9
  %408 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %409 = trunc i8 %408 to i1
  %410 = zext i1 %409 to i64
  %411 = select i1 %409, i32 2, i32 3
  %412 = add i32 %407, %411
  br label %413

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

443:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %444 = load float, ptr %44, align 4, !tbaa !13
  %445 = load float, ptr %44, align 4, !tbaa !13
  %446 = load float, ptr %45, align 4, !tbaa !13
  %447 = load float, ptr %45, align 4, !tbaa !13
  %448 = fmul float %446, %447
  %449 = call float @llvm.fmuladd.f32(float %444, float %445, float %448)
  store float %449, ptr %46, align 4, !tbaa !13
  %450 = load float, ptr %46, align 4, !tbaa !13
  %451 = fcmp olt float %450, 5.000000e-01
  br i1 %451, label %452, label %453

452:                                              ; preds = %443
  store float 5.000000e-01, ptr %46, align 4, !tbaa !13
  br label %453

453:                                              ; preds = %452, %443
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %454 = load float, ptr %46, align 4, !tbaa !13
  %455 = fdiv float 1.000000e+00, %454
  store float %455, ptr %47, align 4, !tbaa !13
  %456 = load float, ptr %47, align 4, !tbaa !13
  %457 = load float, ptr %44, align 4, !tbaa !13
  %458 = fmul float %457, %456
  store float %458, ptr %44, align 4, !tbaa !13
  %459 = load float, ptr %47, align 4, !tbaa !13
  %460 = load float, ptr %45, align 4, !tbaa !13
  %461 = fmul float %460, %459
  store float %461, ptr %45, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %462

462:                                              ; preds = %453
  br label %463

463:                                              ; preds = %462
  %464 = load float, ptr %31, align 4, !tbaa !13
  %465 = load float, ptr %44, align 4, !tbaa !13
  %466 = fmul float %465, %464
  store float %466, ptr %44, align 4, !tbaa !13
  %467 = load float, ptr %31, align 4, !tbaa !13
  %468 = load float, ptr %45, align 4, !tbaa !13
  %469 = fmul float %468, %467
  store float %469, ptr %45, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %470 = load ptr, ptr %24, align 8, !tbaa !5
  %471 = load i32, ptr %42, align 4, !tbaa !9
  %472 = mul nsw i32 %471, 2
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds %struct.ImVec2, ptr %470, i64 %473
  store ptr %474, ptr %48, align 8, !tbaa !5
  %475 = load ptr, ptr %8, align 8, !tbaa !5
  %476 = load i32, ptr %42, align 4, !tbaa !9
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds %struct.ImVec2, ptr %475, i64 %477
  %479 = getelementptr inbounds %struct.ImVec2, ptr %478, i32 0, i32 0
  %480 = load float, ptr %479, align 4, !tbaa !32
  %481 = load float, ptr %44, align 4, !tbaa !13
  %482 = fadd float %480, %481
  %483 = load ptr, ptr %48, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.ImVec2, ptr %483, i64 0
  %485 = getelementptr inbounds %struct.ImVec2, ptr %484, i32 0, i32 0
  store float %482, ptr %485, align 4, !tbaa !32
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  %487 = load i32, ptr %42, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds %struct.ImVec2, ptr %486, i64 %488
  %490 = getelementptr inbounds %struct.ImVec2, ptr %489, i32 0, i32 1
  %491 = load float, ptr %490, align 4, !tbaa !34
  %492 = load float, ptr %45, align 4, !tbaa !13
  %493 = fadd float %491, %492
  %494 = load ptr, ptr %48, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.ImVec2, ptr %494, i64 0
  %496 = getelementptr inbounds %struct.ImVec2, ptr %495, i32 0, i32 1
  store float %493, ptr %496, align 4, !tbaa !34
  %497 = load ptr, ptr %8, align 8, !tbaa !5
  %498 = load i32, ptr %42, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds %struct.ImVec2, ptr %497, i64 %499
  %501 = getelementptr inbounds %struct.ImVec2, ptr %500, i32 0, i32 0
  %502 = load float, ptr %501, align 4, !tbaa !32
  %503 = load float, ptr %44, align 4, !tbaa !13
  %504 = fsub float %502, %503
  %505 = load ptr, ptr %48, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.ImVec2, ptr %505, i64 1
  %507 = getelementptr inbounds %struct.ImVec2, ptr %506, i32 0, i32 0
  store float %504, ptr %507, align 4, !tbaa !32
  %508 = load ptr, ptr %8, align 8, !tbaa !5
  %509 = load i32, ptr %42, align 4, !tbaa !9
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds %struct.ImVec2, ptr %508, i64 %510
  %512 = getelementptr inbounds %struct.ImVec2, ptr %511, i32 0, i32 1
  %513 = load float, ptr %512, align 4, !tbaa !34
  %514 = load float, ptr %45, align 4, !tbaa !13
  %515 = fsub float %513, %514
  %516 = load ptr, ptr %48, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.ImVec2, ptr %516, i64 1
  %518 = getelementptr inbounds %struct.ImVec2, ptr %517, i32 0, i32 1
  store float %515, ptr %518, align 4, !tbaa !34
  %519 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %520 = trunc i8 %519 to i1
  br i1 %520, label %521, label %561

521:                                              ; preds = %463
  %522 = load i32, ptr %43, align 4, !tbaa !9
  %523 = add i32 %522, 0
  %524 = trunc i32 %523 to i16
  %525 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %526 = load ptr, ptr %525, align 8, !tbaa !38
  %527 = getelementptr inbounds i16, ptr %526, i64 0
  store i16 %524, ptr %527, align 2, !tbaa !39
  %528 = load i32, ptr %40, align 4, !tbaa !9
  %529 = add i32 %528, 0
  %530 = trunc i32 %529 to i16
  %531 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %532 = load ptr, ptr %531, align 8, !tbaa !38
  %533 = getelementptr inbounds i16, ptr %532, i64 1
  store i16 %530, ptr %533, align 2, !tbaa !39
  %534 = load i32, ptr %40, align 4, !tbaa !9
  %535 = add i32 %534, 1
  %536 = trunc i32 %535 to i16
  %537 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %538 = load ptr, ptr %537, align 8, !tbaa !38
  %539 = getelementptr inbounds i16, ptr %538, i64 2
  store i16 %536, ptr %539, align 2, !tbaa !39
  %540 = load i32, ptr %43, align 4, !tbaa !9
  %541 = add i32 %540, 1
  %542 = trunc i32 %541 to i16
  %543 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %544 = load ptr, ptr %543, align 8, !tbaa !38
  %545 = getelementptr inbounds i16, ptr %544, i64 3
  store i16 %542, ptr %545, align 2, !tbaa !39
  %546 = load i32, ptr %40, align 4, !tbaa !9
  %547 = add i32 %546, 1
  %548 = trunc i32 %547 to i16
  %549 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %550 = load ptr, ptr %549, align 8, !tbaa !38
  %551 = getelementptr inbounds i16, ptr %550, i64 4
  store i16 %548, ptr %551, align 2, !tbaa !39
  %552 = load i32, ptr %43, align 4, !tbaa !9
  %553 = add i32 %552, 0
  %554 = trunc i32 %553 to i16
  %555 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %556 = load ptr, ptr %555, align 8, !tbaa !38
  %557 = getelementptr inbounds i16, ptr %556, i64 5
  store i16 %554, ptr %557, align 2, !tbaa !39
  %558 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %559 = load ptr, ptr %558, align 8, !tbaa !38
  %560 = getelementptr inbounds i16, ptr %559, i64 6
  store ptr %560, ptr %558, align 8, !tbaa !38
  br label %637

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

637:                                              ; preds = %561, %521
  %638 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %638, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #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
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %639

639:                                              ; preds = %637
  %640 = load i32, ptr %41, align 4, !tbaa !9
  %641 = add nsw i32 %640, 1
  store i32 %641, ptr %41, align 4, !tbaa !9
  br label %383, !llvm.loop !41

642:                                              ; preds = %387
  %643 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %644 = trunc i8 %643 to i1
  br i1 %644, label %645, label %712

645:                                              ; preds = %642
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #9
  %646 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 5
  %647 = load ptr, ptr %646, align 8, !tbaa !15
  %648 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %647, i32 0, i32 9
  %649 = load ptr, ptr %648, align 8, !tbaa !42
  %650 = load i32, ptr %18, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds %struct.ImVec4, ptr %649, i64 %651
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 4 %652, i64 16, i1 false), !tbaa.struct !44
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %653 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 0
  %654 = load float, ptr %653, align 4, !tbaa !45
  %655 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 1
  %656 = load float, ptr %655, align 4, !tbaa !46
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %50, float noundef %654, float noundef %656)
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %657 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 2
  %658 = load float, ptr %657, align 4, !tbaa !47
  %659 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 3
  %660 = load float, ptr %659, align 4, !tbaa !48
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %51, float noundef %658, float noundef %660)
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  store i32 0, ptr %52, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %708, %645
  %662 = load i32, ptr %52, align 4, !tbaa !9
  %663 = load i32, ptr %9, align 4, !tbaa !9
  %664 = icmp slt i32 %662, %663
  br i1 %664, label %666, label %665

665:                                              ; preds = %661
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  br label %711

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

708:                                              ; preds = %666
  %709 = load i32, ptr %52, align 4, !tbaa !9
  %710 = add nsw i32 %709, 1
  store i32 %710, ptr %52, align 4, !tbaa !9
  br label %661, !llvm.loop !52

711:                                              ; preds = %665
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #9
  br label %781

712:                                              ; preds = %642
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %713

713:                                              ; preds = %777, %712
  %714 = load i32, ptr %53, align 4, !tbaa !9
  %715 = load i32, ptr %9, align 4, !tbaa !9
  %716 = icmp slt i32 %714, %715
  br i1 %716, label %718, label %717

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

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

777:                                              ; preds = %718
  %778 = load i32, ptr %53, align 4, !tbaa !9
  %779 = add nsw i32 %778, 1
  store i32 %779, ptr %53, align 4, !tbaa !9
  br label %713, !llvm.loop !53

780:                                              ; preds = %717
  br label %781

781:                                              ; preds = %780, %711
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %1298

782:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  %783 = load float, ptr %12, align 4, !tbaa !13
  %784 = load float, ptr %16, align 4, !tbaa !13
  %785 = fsub float %783, %784
  %786 = fmul float %785, 5.000000e-01
  store float %786, ptr %54, align 4, !tbaa !13
  %787 = load i8, ptr %11, align 1, !tbaa !11, !range !28, !noundef !29
  %788 = trunc i8 %787 to i1
  br i1 %788, label %904, label %789

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

904:                                              ; preds = %789, %782
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #9
  %905 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %906 = load i32, ptr %905, align 4, !tbaa !37
  store i32 %906, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  store i32 0, ptr %73, align 4, !tbaa !9
  br label %907

907:                                              ; preds = %1205, %904
  %908 = load i32, ptr %73, align 4, !tbaa !9
  %909 = load i32, ptr %14, align 4, !tbaa !9
  %910 = icmp slt i32 %908, %909
  br i1 %910, label %912, label %911

911:                                              ; preds = %907
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  br label %1208

912:                                              ; preds = %907
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  %913 = load i32, ptr %73, align 4, !tbaa !9
  %914 = add nsw i32 %913, 1
  %915 = load i32, ptr %9, align 4, !tbaa !9
  %916 = icmp eq i32 %914, %915
  br i1 %916, label %917, label %918

917:                                              ; preds = %912
  br label %921

918:                                              ; preds = %912
  %919 = load i32, ptr %73, align 4, !tbaa !9
  %920 = add nsw i32 %919, 1
  br label %921

921:                                              ; preds = %918, %917
  %922 = phi i32 [ 0, %917 ], [ %920, %918 ]
  store i32 %922, ptr %74, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %923 = load i32, ptr %73, align 4, !tbaa !9
  %924 = add nsw i32 %923, 1
  %925 = load i32, ptr %9, align 4, !tbaa !9
  %926 = icmp eq i32 %924, %925
  br i1 %926, label %927, label %930

927:                                              ; preds = %921
  %928 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %929 = load i32, ptr %928, align 4, !tbaa !37
  br label %933

930:                                              ; preds = %921
  %931 = load i32, ptr %72, align 4, !tbaa !9
  %932 = add i32 %931, 4
  br label %933

933:                                              ; preds = %930, %927
  %934 = phi i32 [ %929, %927 ], [ %932, %930 ]
  store i32 %934, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %935 = load ptr, ptr %23, align 8, !tbaa !5
  %936 = load i32, ptr %73, align 4, !tbaa !9
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds %struct.ImVec2, ptr %935, i64 %937
  %939 = getelementptr inbounds %struct.ImVec2, ptr %938, i32 0, i32 0
  %940 = load float, ptr %939, align 4, !tbaa !32
  %941 = load ptr, ptr %23, align 8, !tbaa !5
  %942 = load i32, ptr %74, align 4, !tbaa !9
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds %struct.ImVec2, ptr %941, i64 %943
  %945 = getelementptr inbounds %struct.ImVec2, ptr %944, i32 0, i32 0
  %946 = load float, ptr %945, align 4, !tbaa !32
  %947 = fadd float %940, %946
  %948 = fmul float %947, 5.000000e-01
  store float %948, ptr %76, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #9
  %949 = load ptr, ptr %23, align 8, !tbaa !5
  %950 = load i32, ptr %73, 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 1
  %954 = load float, ptr %953, align 4, !tbaa !34
  %955 = load ptr, ptr %23, align 8, !tbaa !5
  %956 = load i32, ptr %74, align 4, !tbaa !9
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds %struct.ImVec2, ptr %955, i64 %957
  %959 = getelementptr inbounds %struct.ImVec2, ptr %958, i32 0, i32 1
  %960 = load float, ptr %959, align 4, !tbaa !34
  %961 = fadd float %954, %960
  %962 = fmul float %961, 5.000000e-01
  store float %962, ptr %77, align 4, !tbaa !13
  br label %963

963:                                              ; preds = %933
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %964 = load float, ptr %76, align 4, !tbaa !13
  %965 = load float, ptr %76, align 4, !tbaa !13
  %966 = load float, ptr %77, align 4, !tbaa !13
  %967 = load float, ptr %77, align 4, !tbaa !13
  %968 = fmul float %966, %967
  %969 = call float @llvm.fmuladd.f32(float %964, float %965, float %968)
  store float %969, ptr %78, align 4, !tbaa !13
  %970 = load float, ptr %78, align 4, !tbaa !13
  %971 = fcmp olt float %970, 5.000000e-01
  br i1 %971, label %972, label %973

972:                                              ; preds = %963
  store float 5.000000e-01, ptr %78, align 4, !tbaa !13
  br label %973

973:                                              ; preds = %972, %963
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %974 = load float, ptr %78, align 4, !tbaa !13
  %975 = fdiv float 1.000000e+00, %974
  store float %975, ptr %79, align 4, !tbaa !13
  %976 = load float, ptr %79, align 4, !tbaa !13
  %977 = load float, ptr %76, align 4, !tbaa !13
  %978 = fmul float %977, %976
  store float %978, ptr %76, align 4, !tbaa !13
  %979 = load float, ptr %79, align 4, !tbaa !13
  %980 = load float, ptr %77, align 4, !tbaa !13
  %981 = fmul float %980, %979
  store float %981, ptr %77, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %982

982:                                              ; preds = %973
  br label %983

983:                                              ; preds = %982
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %984 = load float, ptr %76, align 4, !tbaa !13
  %985 = load float, ptr %54, align 4, !tbaa !13
  %986 = load float, ptr %16, align 4, !tbaa !13
  %987 = fadd float %985, %986
  %988 = fmul float %984, %987
  store float %988, ptr %80, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  %989 = load float, ptr %77, align 4, !tbaa !13
  %990 = load float, ptr %54, align 4, !tbaa !13
  %991 = load float, ptr %16, align 4, !tbaa !13
  %992 = fadd float %990, %991
  %993 = fmul float %989, %992
  store float %993, ptr %81, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %994 = load float, ptr %76, align 4, !tbaa !13
  %995 = load float, ptr %54, align 4, !tbaa !13
  %996 = fmul float %994, %995
  store float %996, ptr %82, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  %997 = load float, ptr %77, align 4, !tbaa !13
  %998 = load float, ptr %54, align 4, !tbaa !13
  %999 = fmul float %997, %998
  store float %999, ptr %83, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #9
  %1000 = load ptr, ptr %24, align 8, !tbaa !5
  %1001 = load i32, ptr %74, align 4, !tbaa !9
  %1002 = mul nsw i32 %1001, 4
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds %struct.ImVec2, ptr %1000, i64 %1003
  store ptr %1004, ptr %84, align 8, !tbaa !5
  %1005 = load ptr, ptr %8, align 8, !tbaa !5
  %1006 = load i32, ptr %74, align 4, !tbaa !9
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds %struct.ImVec2, ptr %1005, i64 %1007
  %1009 = getelementptr inbounds %struct.ImVec2, ptr %1008, i32 0, i32 0
  %1010 = load float, ptr %1009, align 4, !tbaa !32
  %1011 = load float, ptr %80, align 4, !tbaa !13
  %1012 = fadd float %1010, %1011
  %1013 = load ptr, ptr %84, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.ImVec2, ptr %1013, i64 0
  %1015 = getelementptr inbounds %struct.ImVec2, ptr %1014, i32 0, i32 0
  store float %1012, ptr %1015, align 4, !tbaa !32
  %1016 = load ptr, ptr %8, align 8, !tbaa !5
  %1017 = load i32, ptr %74, align 4, !tbaa !9
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds %struct.ImVec2, ptr %1016, i64 %1018
  %1020 = getelementptr inbounds %struct.ImVec2, ptr %1019, i32 0, i32 1
  %1021 = load float, ptr %1020, align 4, !tbaa !34
  %1022 = load float, ptr %81, align 4, !tbaa !13
  %1023 = fadd float %1021, %1022
  %1024 = load ptr, ptr %84, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.ImVec2, ptr %1024, i64 0
  %1026 = getelementptr inbounds %struct.ImVec2, ptr %1025, i32 0, i32 1
  store float %1023, ptr %1026, align 4, !tbaa !34
  %1027 = load ptr, ptr %8, align 8, !tbaa !5
  %1028 = load i32, ptr %74, align 4, !tbaa !9
  %1029 = sext i32 %1028 to i64
  %1030 = getelementptr inbounds %struct.ImVec2, ptr %1027, i64 %1029
  %1031 = getelementptr inbounds %struct.ImVec2, ptr %1030, i32 0, i32 0
  %1032 = load float, ptr %1031, align 4, !tbaa !32
  %1033 = load float, ptr %82, align 4, !tbaa !13
  %1034 = fadd float %1032, %1033
  %1035 = load ptr, ptr %84, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.ImVec2, ptr %1035, i64 1
  %1037 = getelementptr inbounds %struct.ImVec2, ptr %1036, i32 0, i32 0
  store float %1034, ptr %1037, align 4, !tbaa !32
  %1038 = load ptr, ptr %8, align 8, !tbaa !5
  %1039 = load i32, ptr %74, align 4, !tbaa !9
  %1040 = sext i32 %1039 to i64
  %1041 = getelementptr inbounds %struct.ImVec2, ptr %1038, i64 %1040
  %1042 = getelementptr inbounds %struct.ImVec2, ptr %1041, i32 0, i32 1
  %1043 = load float, ptr %1042, align 4, !tbaa !34
  %1044 = load float, ptr %83, align 4, !tbaa !13
  %1045 = fadd float %1043, %1044
  %1046 = load ptr, ptr %84, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct.ImVec2, ptr %1046, i64 1
  %1048 = getelementptr inbounds %struct.ImVec2, ptr %1047, i32 0, i32 1
  store float %1045, ptr %1048, align 4, !tbaa !34
  %1049 = load ptr, ptr %8, align 8, !tbaa !5
  %1050 = load i32, ptr %74, align 4, !tbaa !9
  %1051 = sext i32 %1050 to i64
  %1052 = getelementptr inbounds %struct.ImVec2, ptr %1049, i64 %1051
  %1053 = getelementptr inbounds %struct.ImVec2, ptr %1052, i32 0, i32 0
  %1054 = load float, ptr %1053, align 4, !tbaa !32
  %1055 = load float, ptr %82, align 4, !tbaa !13
  %1056 = fsub float %1054, %1055
  %1057 = load ptr, ptr %84, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.ImVec2, ptr %1057, i64 2
  %1059 = getelementptr inbounds %struct.ImVec2, ptr %1058, i32 0, i32 0
  store float %1056, ptr %1059, align 4, !tbaa !32
  %1060 = load ptr, ptr %8, align 8, !tbaa !5
  %1061 = load i32, ptr %74, align 4, !tbaa !9
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds %struct.ImVec2, ptr %1060, i64 %1062
  %1064 = getelementptr inbounds %struct.ImVec2, ptr %1063, i32 0, i32 1
  %1065 = load float, ptr %1064, align 4, !tbaa !34
  %1066 = load float, ptr %83, align 4, !tbaa !13
  %1067 = fsub float %1065, %1066
  %1068 = load ptr, ptr %84, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.ImVec2, ptr %1068, i64 2
  %1070 = getelementptr inbounds %struct.ImVec2, ptr %1069, i32 0, i32 1
  store float %1067, ptr %1070, align 4, !tbaa !34
  %1071 = load ptr, ptr %8, align 8, !tbaa !5
  %1072 = load i32, ptr %74, align 4, !tbaa !9
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds %struct.ImVec2, ptr %1071, i64 %1073
  %1075 = getelementptr inbounds %struct.ImVec2, ptr %1074, i32 0, i32 0
  %1076 = load float, ptr %1075, align 4, !tbaa !32
  %1077 = load float, ptr %80, align 4, !tbaa !13
  %1078 = fsub float %1076, %1077
  %1079 = load ptr, ptr %84, align 8, !tbaa !5
  %1080 = getelementptr inbounds %struct.ImVec2, ptr %1079, i64 3
  %1081 = getelementptr inbounds %struct.ImVec2, ptr %1080, i32 0, i32 0
  store float %1078, ptr %1081, align 4, !tbaa !32
  %1082 = load ptr, ptr %8, align 8, !tbaa !5
  %1083 = load i32, ptr %74, align 4, !tbaa !9
  %1084 = sext i32 %1083 to i64
  %1085 = getelementptr inbounds %struct.ImVec2, ptr %1082, i64 %1084
  %1086 = getelementptr inbounds %struct.ImVec2, ptr %1085, i32 0, i32 1
  %1087 = load float, ptr %1086, align 4, !tbaa !34
  %1088 = load float, ptr %81, align 4, !tbaa !13
  %1089 = fsub float %1087, %1088
  %1090 = load ptr, ptr %84, align 8, !tbaa !5
  %1091 = getelementptr inbounds %struct.ImVec2, ptr %1090, i64 3
  %1092 = getelementptr inbounds %struct.ImVec2, ptr %1091, i32 0, i32 1
  store float %1089, ptr %1092, align 4, !tbaa !34
  %1093 = load i32, ptr %75, align 4, !tbaa !9
  %1094 = add i32 %1093, 1
  %1095 = trunc i32 %1094 to i16
  %1096 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1097 = load ptr, ptr %1096, align 8, !tbaa !38
  %1098 = getelementptr inbounds i16, ptr %1097, i64 0
  store i16 %1095, ptr %1098, align 2, !tbaa !39
  %1099 = load i32, ptr %72, align 4, !tbaa !9
  %1100 = add i32 %1099, 1
  %1101 = trunc i32 %1100 to i16
  %1102 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1103 = load ptr, ptr %1102, align 8, !tbaa !38
  %1104 = getelementptr inbounds i16, ptr %1103, i64 1
  store i16 %1101, ptr %1104, align 2, !tbaa !39
  %1105 = load i32, ptr %72, align 4, !tbaa !9
  %1106 = add i32 %1105, 2
  %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 2
  store i16 %1107, ptr %1110, align 2, !tbaa !39
  %1111 = load i32, ptr %72, align 4, !tbaa !9
  %1112 = add i32 %1111, 2
  %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 3
  store i16 %1113, ptr %1116, align 2, !tbaa !39
  %1117 = load i32, ptr %75, 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 4
  store i16 %1119, ptr %1122, align 2, !tbaa !39
  %1123 = load i32, ptr %75, align 4, !tbaa !9
  %1124 = add i32 %1123, 1
  %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 5
  store i16 %1125, ptr %1128, align 2, !tbaa !39
  %1129 = load i32, ptr %75, align 4, !tbaa !9
  %1130 = add i32 %1129, 1
  %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 6
  store i16 %1131, ptr %1134, align 2, !tbaa !39
  %1135 = load i32, ptr %72, 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 7
  store i16 %1137, ptr %1140, align 2, !tbaa !39
  %1141 = load i32, ptr %72, align 4, !tbaa !9
  %1142 = add i32 %1141, 0
  %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 8
  store i16 %1143, ptr %1146, align 2, !tbaa !39
  %1147 = load i32, ptr %72, align 4, !tbaa !9
  %1148 = add i32 %1147, 0
  %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 9
  store i16 %1149, ptr %1152, align 2, !tbaa !39
  %1153 = load i32, ptr %75, 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 10
  store i16 %1155, ptr %1158, align 2, !tbaa !39
  %1159 = load i32, ptr %75, align 4, !tbaa !9
  %1160 = add i32 %1159, 1
  %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 11
  store i16 %1161, ptr %1164, align 2, !tbaa !39
  %1165 = load i32, ptr %75, align 4, !tbaa !9
  %1166 = add i32 %1165, 2
  %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 12
  store i16 %1167, ptr %1170, align 2, !tbaa !39
  %1171 = load i32, ptr %72, align 4, !tbaa !9
  %1172 = add i32 %1171, 2
  %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 13
  store i16 %1173, ptr %1176, align 2, !tbaa !39
  %1177 = load i32, ptr %72, align 4, !tbaa !9
  %1178 = add i32 %1177, 3
  %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 14
  store i16 %1179, ptr %1182, align 2, !tbaa !39
  %1183 = load i32, ptr %72, align 4, !tbaa !9
  %1184 = add i32 %1183, 3
  %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 15
  store i16 %1185, ptr %1188, align 2, !tbaa !39
  %1189 = load i32, ptr %75, 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 16
  store i16 %1191, ptr %1194, align 2, !tbaa !39
  %1195 = load i32, ptr %75, align 4, !tbaa !9
  %1196 = add i32 %1195, 2
  %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 17
  store i16 %1197, ptr %1200, align 2, !tbaa !39
  %1201 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 8
  %1202 = load ptr, ptr %1201, align 8, !tbaa !38
  %1203 = getelementptr inbounds i16, ptr %1202, i64 18
  store ptr %1203, ptr %1201, align 8, !tbaa !38
  %1204 = load i32, ptr %75, align 4, !tbaa !9
  store i32 %1204, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, 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 %80) #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
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #9
  br label %1205

1205:                                             ; preds = %983
  %1206 = load i32, ptr %73, align 4, !tbaa !9
  %1207 = add nsw i32 %1206, 1
  store i32 %1207, ptr %73, align 4, !tbaa !9
  br label %907, !llvm.loop !54

1208:                                             ; preds = %911
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #9
  store i32 0, ptr %85, align 4, !tbaa !9
  br label %1209

1209:                                             ; preds = %1294, %1208
  %1210 = load i32, ptr %85, align 4, !tbaa !9
  %1211 = load i32, ptr %9, align 4, !tbaa !9
  %1212 = icmp slt i32 %1210, %1211
  br i1 %1212, label %1214, label %1213

1213:                                             ; preds = %1209
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #9
  br label %1297

1214:                                             ; preds = %1209
  %1215 = load ptr, ptr %24, align 8, !tbaa !5
  %1216 = load i32, ptr %85, align 4, !tbaa !9
  %1217 = mul nsw i32 %1216, 4
  %1218 = add nsw i32 %1217, 0
  %1219 = sext i32 %1218 to i64
  %1220 = getelementptr inbounds %struct.ImVec2, ptr %1215, i64 %1219
  %1221 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1222 = load ptr, ptr %1221, align 8, !tbaa !49
  %1223 = getelementptr inbounds %struct.ImDrawVert, ptr %1222, i64 0
  %1224 = getelementptr inbounds %struct.ImDrawVert, ptr %1223, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1224, ptr align 4 %1220, i64 8, i1 false), !tbaa.struct !27
  %1225 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1226 = load ptr, ptr %1225, align 8, !tbaa !49
  %1227 = getelementptr inbounds %struct.ImDrawVert, ptr %1226, i64 0
  %1228 = getelementptr inbounds %struct.ImDrawVert, ptr %1227, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1228, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1229 = load i32, ptr %17, align 4, !tbaa !9
  %1230 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1231 = load ptr, ptr %1230, align 8, !tbaa !49
  %1232 = getelementptr inbounds %struct.ImDrawVert, ptr %1231, i64 0
  %1233 = getelementptr inbounds %struct.ImDrawVert, ptr %1232, i32 0, i32 2
  store i32 %1229, ptr %1233, align 4, !tbaa !50
  %1234 = load ptr, ptr %24, align 8, !tbaa !5
  %1235 = load i32, ptr %85, align 4, !tbaa !9
  %1236 = mul nsw i32 %1235, 4
  %1237 = add nsw i32 %1236, 1
  %1238 = sext i32 %1237 to i64
  %1239 = getelementptr inbounds %struct.ImVec2, ptr %1234, i64 %1238
  %1240 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1241 = load ptr, ptr %1240, align 8, !tbaa !49
  %1242 = getelementptr inbounds %struct.ImDrawVert, ptr %1241, i64 1
  %1243 = getelementptr inbounds %struct.ImDrawVert, ptr %1242, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1243, ptr align 4 %1239, i64 8, i1 false), !tbaa.struct !27
  %1244 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1245 = load ptr, ptr %1244, align 8, !tbaa !49
  %1246 = getelementptr inbounds %struct.ImDrawVert, ptr %1245, i64 1
  %1247 = getelementptr inbounds %struct.ImDrawVert, ptr %1246, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1247, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1248 = load i32, ptr %10, align 4, !tbaa !9
  %1249 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1250 = load ptr, ptr %1249, align 8, !tbaa !49
  %1251 = getelementptr inbounds %struct.ImDrawVert, ptr %1250, i64 1
  %1252 = getelementptr inbounds %struct.ImDrawVert, ptr %1251, i32 0, i32 2
  store i32 %1248, ptr %1252, align 4, !tbaa !50
  %1253 = load ptr, ptr %24, align 8, !tbaa !5
  %1254 = load i32, ptr %85, align 4, !tbaa !9
  %1255 = mul nsw i32 %1254, 4
  %1256 = add nsw i32 %1255, 2
  %1257 = sext i32 %1256 to i64
  %1258 = getelementptr inbounds %struct.ImVec2, ptr %1253, i64 %1257
  %1259 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1260 = load ptr, ptr %1259, align 8, !tbaa !49
  %1261 = getelementptr inbounds %struct.ImDrawVert, ptr %1260, i64 2
  %1262 = getelementptr inbounds %struct.ImDrawVert, ptr %1261, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1262, ptr align 4 %1258, i64 8, i1 false), !tbaa.struct !27
  %1263 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1264 = load ptr, ptr %1263, align 8, !tbaa !49
  %1265 = getelementptr inbounds %struct.ImDrawVert, ptr %1264, i64 2
  %1266 = getelementptr inbounds %struct.ImDrawVert, ptr %1265, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1266, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1267 = load i32, ptr %10, align 4, !tbaa !9
  %1268 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1269 = load ptr, ptr %1268, align 8, !tbaa !49
  %1270 = getelementptr inbounds %struct.ImDrawVert, ptr %1269, i64 2
  %1271 = getelementptr inbounds %struct.ImDrawVert, ptr %1270, i32 0, i32 2
  store i32 %1267, ptr %1271, align 4, !tbaa !50
  %1272 = load ptr, ptr %24, align 8, !tbaa !5
  %1273 = load i32, ptr %85, align 4, !tbaa !9
  %1274 = mul nsw i32 %1273, 4
  %1275 = add nsw i32 %1274, 3
  %1276 = sext i32 %1275 to i64
  %1277 = getelementptr inbounds %struct.ImVec2, ptr %1272, i64 %1276
  %1278 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1279 = load ptr, ptr %1278, align 8, !tbaa !49
  %1280 = getelementptr inbounds %struct.ImDrawVert, ptr %1279, i64 3
  %1281 = getelementptr inbounds %struct.ImDrawVert, ptr %1280, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1281, ptr align 4 %1277, i64 8, i1 false), !tbaa.struct !27
  %1282 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1283 = load ptr, ptr %1282, align 8, !tbaa !49
  %1284 = getelementptr inbounds %struct.ImDrawVert, ptr %1283, i64 3
  %1285 = getelementptr inbounds %struct.ImDrawVert, ptr %1284, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1285, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1286 = load i32, ptr %17, align 4, !tbaa !9
  %1287 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1288 = load ptr, ptr %1287, align 8, !tbaa !49
  %1289 = getelementptr inbounds %struct.ImDrawVert, ptr %1288, i64 3
  %1290 = getelementptr inbounds %struct.ImDrawVert, ptr %1289, i32 0, i32 2
  store i32 %1286, ptr %1290, align 4, !tbaa !50
  %1291 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 7
  %1292 = load ptr, ptr %1291, align 8, !tbaa !49
  %1293 = getelementptr inbounds %struct.ImDrawVert, ptr %1292, i64 4
  store ptr %1293, ptr %1291, align 8, !tbaa !49
  br label %1294

1294:                                             ; preds = %1214
  %1295 = load i32, ptr %85, align 4, !tbaa !9
  %1296 = add nsw i32 %1295, 1
  store i32 %1296, ptr %85, align 4, !tbaa !9
  br label %1209, !llvm.loop !55

1297:                                             ; preds = %1213
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %1298

1298:                                             ; preds = %1297, %781
  %1299 = load i32, ptr %22, align 4, !tbaa !9
  %1300 = trunc i32 %1299 to i16
  %1301 = zext i16 %1300 to i32
  %1302 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %1303 = load i32, ptr %1302, align 4, !tbaa !37
  %1304 = add i32 %1303, %1301
  store i32 %1304, ptr %1302, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 1, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %1549

1305:                                             ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #9
  %1306 = load i32, ptr %14, align 4, !tbaa !9
  %1307 = mul nsw i32 %1306, 6
  store i32 %1307, ptr %86, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #9
  %1308 = load i32, ptr %14, align 4, !tbaa !9
  %1309 = mul nsw i32 %1308, 4
  store i32 %1309, ptr %87, align 4, !tbaa !9
  %1310 = load i32, ptr %86, align 4, !tbaa !9
  %1311 = load i32, ptr %87, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %97, i32 noundef %1310, i32 noundef %1311)
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #9
  store i32 0, ptr %88, align 4, !tbaa !9
  br label %1312

1312:                                             ; preds = %1545, %1305
  %1313 = load i32, ptr %88, align 4, !tbaa !9
  %1314 = load i32, ptr %14, align 4, !tbaa !9
  %1315 = icmp slt i32 %1313, %1314
  br i1 %1315, label %1317, label %1316

1316:                                             ; preds = %1312
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #9
  br label %1548

1317:                                             ; preds = %1312
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #9
  %1318 = load i32, ptr %88, align 4, !tbaa !9
  %1319 = add nsw i32 %1318, 1
  %1320 = load i32, ptr %9, align 4, !tbaa !9
  %1321 = icmp eq i32 %1319, %1320
  br i1 %1321, label %1322, label %1323

1322:                                             ; preds = %1317
  br label %1326

1323:                                             ; preds = %1317
  %1324 = load i32, ptr %88, align 4, !tbaa !9
  %1325 = add nsw i32 %1324, 1
  br label %1326

1326:                                             ; preds = %1323, %1322
  %1327 = phi i32 [ 0, %1322 ], [ %1325, %1323 ]
  store i32 %1327, ptr %89, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #9
  %1328 = load ptr, ptr %8, align 8, !tbaa !5
  %1329 = load i32, ptr %88, align 4, !tbaa !9
  %1330 = sext i32 %1329 to i64
  %1331 = getelementptr inbounds %struct.ImVec2, ptr %1328, i64 %1330
  store ptr %1331, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %1332 = load ptr, ptr %8, align 8, !tbaa !5
  %1333 = load i32, ptr %89, align 4, !tbaa !9
  %1334 = sext i32 %1333 to i64
  %1335 = getelementptr inbounds %struct.ImVec2, ptr %1332, i64 %1334
  store ptr %1335, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #9
  %1336 = load ptr, ptr %91, align 8, !tbaa !5
  %1337 = getelementptr inbounds %struct.ImVec2, ptr %1336, i32 0, i32 0
  %1338 = load float, ptr %1337, align 4, !tbaa !32
  %1339 = load ptr, ptr %90, align 8, !tbaa !5
  %1340 = getelementptr inbounds %struct.ImVec2, ptr %1339, i32 0, i32 0
  %1341 = load float, ptr %1340, align 4, !tbaa !32
  %1342 = fsub float %1338, %1341
  store float %1342, ptr %92, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #9
  %1343 = load ptr, ptr %91, align 8, !tbaa !5
  %1344 = getelementptr inbounds %struct.ImVec2, ptr %1343, i32 0, i32 1
  %1345 = load float, ptr %1344, align 4, !tbaa !34
  %1346 = load ptr, ptr %90, align 8, !tbaa !5
  %1347 = getelementptr inbounds %struct.ImVec2, ptr %1346, i32 0, i32 1
  %1348 = load float, ptr %1347, align 4, !tbaa !34
  %1349 = fsub float %1345, %1348
  store float %1349, ptr %93, align 4, !tbaa !13
  br label %1350

1350:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #9
  %1351 = load float, ptr %92, align 4, !tbaa !13
  %1352 = load float, ptr %92, align 4, !tbaa !13
  %1353 = load float, ptr %93, align 4, !tbaa !13
  %1354 = load float, ptr %93, align 4, !tbaa !13
  %1355 = fmul float %1353, %1354
  %1356 = call float @llvm.fmuladd.f32(float %1351, float %1352, float %1355)
  store float %1356, ptr %94, align 4, !tbaa !13
  %1357 = load float, ptr %94, align 4, !tbaa !13
  %1358 = fcmp ogt float %1357, 0.000000e+00
  br i1 %1358, label %1359, label %1369

1359:                                             ; preds = %1350
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  %1360 = load float, ptr %94, align 4, !tbaa !13
  %1361 = call float @sqrtf(float noundef %1360) #9
  %1362 = fdiv float 1.000000e+00, %1361
  store float %1362, ptr %95, align 4, !tbaa !13
  %1363 = load float, ptr %95, align 4, !tbaa !13
  %1364 = load float, ptr %92, align 4, !tbaa !13
  %1365 = fmul float %1364, %1363
  store float %1365, ptr %92, align 4, !tbaa !13
  %1366 = load float, ptr %95, align 4, !tbaa !13
  %1367 = load float, ptr %93, align 4, !tbaa !13
  %1368 = fmul float %1367, %1366
  store float %1368, ptr %93, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1369

1369:                                             ; preds = %1359, %1350
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  br label %1370

1370:                                             ; preds = %1369
  br label %1371

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

1545:                                             ; preds = %1371
  %1546 = load i32, ptr %88, align 4, !tbaa !9
  %1547 = add nsw i32 %1546, 1
  store i32 %1547, ptr %88, align 4, !tbaa !9
  br label %1312, !llvm.loop !58

1548:                                             ; preds = %1316
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #9
  br label %1549

1549:                                             ; preds = %1548, %1298
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %1550

1550:                                             ; preds = %1549, %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 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !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, !14, 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", !14, i64 0, !14, i64 4, !14, i64 8, !14, 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, !13, i64 4, i64 4, !13}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!16, !14, i64 192}
!31 = !{!16, !10, i64 48}
!32 = !{!33, !14, i64 0}
!33 = !{!"_ZTS6ImVec2", !14, i64 0, !14, i64 4}
!34 = !{!33, !14, 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 208}
!43 = !{!"_ZTS20ImDrawListSharedData", !33, i64 0, !6, i64 8, !14, i64 16, !14, i64 20, !14, i64 24, !24, i64 28, !10, i64 44, !7, i64 48, !7, i64 144, !6, i64 208}
!44 = !{i64 0, i64 4, !13, i64 4, i64 4, !13, i64 8, i64 4, !13, i64 12, i64 4, !13}
!45 = !{!24, !14, i64 0}
!46 = !{!24, !14, i64 4}
!47 = !{!24, !14, i64 8}
!48 = !{!24, !14, 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, !14, i64 0}
!57 = !{!51, !14, 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 @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijbf(ptr noundef nonnull align 8 dereferenceable(196) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i1 noundef zeroext %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 = getelementptr inbounds i8, ptr %0, i64 56
  %24 = load ptr, ptr %23, align 8, !tbaa !5
  %25 = load i64, ptr %24, align 8
  %26 = add nsw i32 %2, -1
  %27 = select i1 %4, i32 %2, i32 %26
  %28 = getelementptr inbounds i8, ptr %0, i64 192
  %29 = load float, ptr %28, align 8, !tbaa !22
  %.fr = freeze float %29
  %30 = fcmp uge float %.fr, %5
  %31 = getelementptr inbounds i8, ptr %0, i64 48
  %32 = load i32, ptr %31, align 8, !tbaa !23
  %33 = and i32 %32, 1
  %.not = icmp eq i32 %33, 0
  br i1 %.not, label %.lr.ph473, label %34

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

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

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

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

._crit_edge:                                      ; preds = %79
  br i1 %4, label %86, label %.thread443

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

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

79:                                               ; preds = %74, %.lr.ph
  %80 = phi <2 x float> [ %78, %74 ], [ %68, %.lr.ph ]
  %81 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %indvars.iv
  %82 = extractelement <2 x float> %80, i64 1
  store float %82, ptr %81, align 8, !tbaa !25
  %83 = extractelement <2 x float> %80, i64 0
  %84 = fneg float %83
  %85 = getelementptr inbounds i8, ptr %81, i64 4
  store float %84, ptr %85, 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

86:                                               ; preds = %._crit_edge
  %brmerge = or i1 %30, %spec.select
  br i1 %brmerge, label %91, label %229

.thread443:                                       ; preds = %._crit_edge
  %87 = getelementptr i8, ptr %60, i64 -16
  %88 = zext nneg i32 %26 to i64
  %89 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %88
  %90 = load i64, ptr %87, align 8
  store i64 %90, ptr %89, align 8
  %brmerge444 = or i1 %30, %spec.select
  br i1 %brmerge444, label %.thread445, label %.thread446

91:                                               ; preds = %86
  %92 = tail call float @llvm.fmuladd.f32(float %36, float 5.000000e-01, float 1.000000e+00)
  %93 = select i1 %spec.select, float %92, float %.fr
  br label %.lr.ph462

.thread445:                                       ; preds = %.thread443
  %94 = tail call float @llvm.fmuladd.f32(float %36, float 5.000000e-01, float 1.000000e+00)
  %95 = select i1 %spec.select, float %94, float %.fr
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %96 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %58, float noundef %95)
  store <2 x float> %96, ptr %7, align 8
  %97 = 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> %97, ptr %60, 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
  %98 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %58, float noundef %95)
  store <2 x float> %98, ptr %8, align 8
  %99 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %8)
  %100 = getelementptr inbounds i8, ptr %60, i64 8
  store <2 x float> %99, ptr %100, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %101 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %88
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %102 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %88
  %103 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %102, float noundef %95)
  store <2 x float> %103, ptr %9, align 8
  %104 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %101, ptr noundef nonnull align 4 dereferenceable(8) %9)
  %105 = shl nuw nsw i32 %26, 1
  %106 = zext nneg i32 %105 to i64
  %107 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %106
  store <2 x float> %104, ptr %107, 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
  %108 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %102, float noundef %95)
  store <2 x float> %108, ptr %10, align 8
  %109 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %101, ptr noundef nonnull align 4 dereferenceable(8) %10)
  %110 = or disjoint i32 %105, 1
  %111 = zext nneg i32 %110 to i64
  %112 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %111
  store <2 x float> %109, ptr %112, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %.lr.ph462

.lr.ph462:                                        ; preds = %.thread445, %91
  %113 = phi float [ %95, %.thread445 ], [ %93, %91 ]
  %114 = getelementptr inbounds i8, ptr %0, i64 52
  %115 = load i32, ptr %114, align 4, !tbaa !30
  %116 = select i1 %spec.select, i32 2, i32 3
  %117 = getelementptr inbounds i8, ptr %0, i64 80
  %.promoted464 = load ptr, ptr %117, align 8, !tbaa !31
  %wide.trip.count489 = zext nneg i32 %27 to i64
  %118 = insertelement <2 x float> poison, float %113, i64 0
  %119 = shufflevector <2 x float> %118, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.backedge

.lr.ph466:                                        ; preds = %.thread515
  %120 = getelementptr inbounds i8, ptr %0, i64 72
  %smax494 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count495 = zext nneg i32 %smax494 to i64
  %.pre510 = load ptr, ptr %120, align 8, !tbaa !32
  br label %204

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph462
  %indvars.iv486 = phi i64 [ 0, %.lr.ph462 ], [ %indvars.iv.next487, %.backedge.backedge ]
  %121 = phi ptr [ %.promoted464, %.lr.ph462 ], [ %.be, %.backedge.backedge ]
  %.0415460 = phi i32 [ %115, %.lr.ph462 ], [ %127, %.backedge.backedge ]
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %122 = icmp eq i64 %indvars.iv.next487, %59
  %123 = trunc nuw nsw i64 %indvars.iv.next487 to i32
  %124 = select i1 %122, i32 0, i32 %123
  %125 = load i32, ptr %114, align 4
  %126 = add i32 %.0415460, %116
  %127 = select i1 %122, i32 %125, i32 %126
  %128 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %indvars.iv486
  %129 = zext nneg i32 %124 to i64
  %130 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %129
  %131 = shl nuw nsw i32 %124, 1
  %132 = zext nneg i32 %131 to i64
  %133 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %132
  %134 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %129
  %135 = load <2 x float>, ptr %128, align 8, !tbaa !24
  %136 = load <2 x float>, ptr %130, align 8, !tbaa !24
  %137 = fadd <2 x float> %135, %136
  %138 = fmul <2 x float> %137, <float 5.000000e-01, float 5.000000e-01>
  %139 = fmul <2 x float> %138, %138
  %140 = extractelement <2 x float> %139, i64 1
  %141 = extractelement <2 x float> %138, i64 0
  %142 = call float @llvm.fmuladd.f32(float %141, float %141, float %140)
  %143 = fcmp olt float %142, 5.000000e-01
  %.0419 = select i1 %143, float 5.000000e-01, float %142
  %144 = fdiv float 1.000000e+00, %.0419
  %145 = insertelement <2 x float> poison, float %144, i64 0
  %146 = shufflevector <2 x float> %145, <2 x float> poison, <2 x i32> zeroinitializer
  %147 = fmul <2 x float> %138, %146
  %148 = fmul <2 x float> %119, %147
  %149 = shufflevector <2 x float> %148, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %150 = load <2 x float>, ptr %134, align 4, !tbaa !24
  %151 = shufflevector <2 x float> %150, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %152 = fadd <4 x float> %151, %149
  %153 = fsub <4 x float> %151, %149
  %154 = shufflevector <4 x float> %152, <4 x float> %153, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
  store <4 x float> %154, ptr %133, align 8, !tbaa !24
  %155 = trunc i32 %127 to i16
  store i16 %155, ptr %121, align 2, !tbaa !33
  %156 = trunc i32 %.0415460 to i16
  %157 = getelementptr inbounds i8, ptr %121, i64 2
  store i16 %156, ptr %157, align 2, !tbaa !33
  %158 = getelementptr inbounds i8, ptr %121, i64 4
  %159 = getelementptr inbounds i8, ptr %121, i64 8
  %160 = getelementptr inbounds i8, ptr %121, i64 10
  br i1 %spec.select, label %161, label %.thread515

161:                                              ; preds = %.backedge
  %162 = add i16 %156, 1
  store i16 %162, ptr %158, align 2, !tbaa !33
  %163 = add i16 %155, 1
  %164 = getelementptr inbounds i8, ptr %121, i64 6
  store i16 %163, ptr %164, align 2, !tbaa !33
  store i16 %162, ptr %159, align 2, !tbaa !33
  store i16 %155, ptr %160, align 2, !tbaa !33
  %165 = getelementptr inbounds i8, ptr %121, i64 12
  store ptr %165, ptr %117, align 8, !tbaa !31
  %exitcond490.not = icmp eq i64 %indvars.iv.next487, %wide.trip.count489
  br i1 %exitcond490.not, label %.lr.ph469, label %.backedge.backedge

.backedge.backedge:                               ; preds = %161, %.thread515
  %.be = phi ptr [ %165, %161 ], [ %177, %.thread515 ]
  br label %.backedge, !llvm.loop !35

.thread515:                                       ; preds = %.backedge
  %166 = add i16 %156, 2
  store i16 %166, ptr %158, align 2, !tbaa !33
  %167 = getelementptr inbounds i8, ptr %121, i64 6
  store i16 %166, ptr %167, align 2, !tbaa !33
  %168 = add i16 %155, 2
  store i16 %168, ptr %159, align 2, !tbaa !33
  store i16 %155, ptr %160, align 2, !tbaa !33
  %169 = add i16 %155, 1
  %170 = getelementptr inbounds i8, ptr %121, i64 12
  store i16 %169, ptr %170, align 2, !tbaa !33
  %171 = add i16 %156, 1
  %172 = getelementptr inbounds i8, ptr %121, i64 14
  store i16 %171, ptr %172, align 2, !tbaa !33
  %173 = getelementptr inbounds i8, ptr %121, i64 16
  store i16 %156, ptr %173, align 2, !tbaa !33
  %174 = getelementptr inbounds i8, ptr %121, i64 18
  store i16 %156, ptr %174, align 2, !tbaa !33
  %175 = getelementptr inbounds i8, ptr %121, i64 20
  store i16 %155, ptr %175, align 2, !tbaa !33
  %176 = getelementptr inbounds i8, ptr %121, i64 22
  store i16 %169, ptr %176, align 2, !tbaa !33
  %177 = getelementptr inbounds i8, ptr %121, i64 24
  store ptr %177, ptr %117, align 8, !tbaa !31
  %exitcond490.not516 = icmp eq i64 %indvars.iv.next487, %wide.trip.count489
  br i1 %exitcond490.not516, label %.lr.ph466, label %.backedge.backedge

.lr.ph469:                                        ; preds = %161
  %178 = load ptr, ptr %23, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %178, i64 208
  %180 = load ptr, ptr %179, align 8, !tbaa !36
  %181 = sext i32 %37 to i64
  %182 = getelementptr inbounds %struct.ImVec4, ptr %180, i64 %181
  %.sroa.0156.0.copyload = load float, ptr %182, align 4, !tbaa !24
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %182, 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 %182, 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 %182, 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.0156.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)
  %183 = getelementptr inbounds i8, ptr %0, i64 72
  %smax500 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count501 = zext nneg i32 %smax500 to i64
  %.pre511 = load ptr, ptr %183, align 8, !tbaa !32
  br label %184

._crit_edge470:                                   ; preds = %184
  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 %.loopexit449

184:                                              ; preds = %.lr.ph469, %184
  %185 = phi ptr [ %.pre511, %.lr.ph469 ], [ %203, %184 ]
  %indvars.iv497 = phi i64 [ 0, %.lr.ph469 ], [ %indvars.iv.next498, %184 ]
  %186 = shl nuw nsw i64 %indvars.iv497, 1
  %187 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %186
  %188 = load i64, ptr %187, align 8
  store i64 %188, ptr %185, align 4
  %189 = load ptr, ptr %183, align 8, !tbaa !32
  %190 = getelementptr inbounds i8, ptr %189, i64 8
  %191 = load i64, ptr %11, align 8
  store i64 %191, ptr %190, align 4
  %192 = load ptr, ptr %183, align 8, !tbaa !32
  %193 = getelementptr inbounds i8, ptr %192, i64 16
  store i32 %3, ptr %193, align 4, !tbaa !38
  %194 = or disjoint i64 %186, 1
  %195 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %194
  %196 = getelementptr inbounds i8, ptr %192, i64 20
  %197 = load i64, ptr %195, align 8
  store i64 %197, ptr %196, align 4
  %198 = load ptr, ptr %183, align 8, !tbaa !32
  %199 = getelementptr inbounds i8, ptr %198, i64 28
  %200 = load i64, ptr %12, align 8
  store i64 %200, ptr %199, align 4
  %201 = load ptr, ptr %183, align 8, !tbaa !32
  %202 = getelementptr inbounds i8, ptr %201, i64 36
  store i32 %3, ptr %202, align 4, !tbaa !38
  %203 = getelementptr inbounds i8, ptr %201, i64 40
  store ptr %203, ptr %183, align 8, !tbaa !32
  %indvars.iv.next498 = add nuw nsw i64 %indvars.iv497, 1
  %exitcond502.not = icmp eq i64 %indvars.iv.next498, %wide.trip.count501
  br i1 %exitcond502.not, label %._crit_edge470, label %184, !llvm.loop !40

204:                                              ; preds = %.lr.ph466, %204
  %205 = phi ptr [ %.pre510, %.lr.ph466 ], [ %228, %204 ]
  %indvars.iv491 = phi i64 [ 0, %.lr.ph466 ], [ %indvars.iv.next492, %204 ]
  %206 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv491
  %207 = load i64, ptr %206, align 4
  store i64 %207, ptr %205, align 4
  %208 = load ptr, ptr %120, align 8, !tbaa !32
  %209 = getelementptr inbounds i8, ptr %208, i64 8
  store i64 %25, ptr %209, align 4
  %210 = load ptr, ptr %120, align 8, !tbaa !32
  %211 = getelementptr inbounds i8, ptr %210, i64 16
  store i32 %3, ptr %211, align 4, !tbaa !38
  %212 = shl nuw nsw i64 %indvars.iv491, 1
  %213 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %212
  %214 = getelementptr inbounds i8, ptr %210, i64 20
  %215 = load i64, ptr %213, align 8
  store i64 %215, ptr %214, align 4
  %216 = load ptr, ptr %120, align 8, !tbaa !32
  %217 = getelementptr inbounds i8, ptr %216, i64 28
  store i64 %25, ptr %217, align 4
  %218 = load ptr, ptr %120, align 8, !tbaa !32
  %219 = getelementptr inbounds i8, ptr %218, i64 36
  store i32 %35, ptr %219, align 4, !tbaa !38
  %220 = or disjoint i64 %212, 1
  %221 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %220
  %222 = getelementptr inbounds i8, ptr %218, i64 40
  %223 = load i64, ptr %221, align 8
  store i64 %223, ptr %222, align 4
  %224 = load ptr, ptr %120, align 8, !tbaa !32
  %225 = getelementptr inbounds i8, ptr %224, i64 48
  store i64 %25, ptr %225, align 4
  %226 = load ptr, ptr %120, align 8, !tbaa !32
  %227 = getelementptr inbounds i8, ptr %226, i64 56
  store i32 %35, ptr %227, align 4, !tbaa !38
  %228 = getelementptr inbounds i8, ptr %226, i64 60
  store ptr %228, ptr %120, align 8, !tbaa !32
  %indvars.iv.next492 = add nuw nsw i64 %indvars.iv491, 1
  %exitcond496.not = icmp eq i64 %indvars.iv.next492, %wide.trip.count495
  br i1 %exitcond496.not, label %.loopexit449, label %204, !llvm.loop !41

229:                                              ; preds = %86
  %230 = fsub float %36, %.fr
  %231 = fmul float %230, 5.000000e-01
  br label %.lr.ph456

.thread446:                                       ; preds = %.thread443
  %232 = fsub float %36, %.fr
  %233 = fmul float %232, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %234 = fadd float %.fr, %233
  %235 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %58, float noundef %234)
  store <2 x float> %235, ptr %13, align 8
  %236 = 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> %236, ptr %60, 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
  %237 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %58, float noundef %233)
  store <2 x float> %237, ptr %14, align 8
  %238 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %14)
  %239 = getelementptr inbounds i8, ptr %60, i64 8
  store <2 x float> %238, ptr %239, 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
  %240 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %58, float noundef %233)
  store <2 x float> %240, ptr %15, align 8
  %241 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %15)
  %242 = getelementptr inbounds i8, ptr %60, i64 16
  store <2 x float> %241, ptr %242, 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
  %243 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %58, float noundef %234)
  store <2 x float> %243, ptr %16, align 8
  %244 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %16)
  %245 = getelementptr inbounds i8, ptr %60, i64 24
  store <2 x float> %244, ptr %245, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %246 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %88
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  %247 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %88
  %248 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %247, float noundef %234)
  store <2 x float> %248, ptr %17, align 8
  %249 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %246, ptr noundef nonnull align 4 dereferenceable(8) %17)
  %250 = shl nsw i32 %26, 2
  %251 = zext nneg i32 %250 to i64
  %252 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %251
  store <2 x float> %249, ptr %252, 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
  %253 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %247, float noundef %233)
  store <2 x float> %253, ptr %18, align 8
  %254 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %246, ptr noundef nonnull align 4 dereferenceable(8) %18)
  %255 = or disjoint i32 %250, 1
  %256 = zext nneg i32 %255 to i64
  %257 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %256
  store <2 x float> %254, ptr %257, 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
  %258 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %247, float noundef %233)
  store <2 x float> %258, ptr %19, align 8
  %259 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %246, ptr noundef nonnull align 4 dereferenceable(8) %19)
  %260 = or disjoint i32 %250, 2
  %261 = zext nneg i32 %260 to i64
  %262 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %261
  store <2 x float> %259, ptr %262, 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
  %263 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %247, float noundef %234)
  store <2 x float> %263, ptr %20, align 8
  %264 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %246, ptr noundef nonnull align 4 dereferenceable(8) %20)
  %265 = or disjoint i32 %250, 3
  %266 = zext nneg i32 %265 to i64
  %267 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %266
  store <2 x float> %264, ptr %267, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %.lr.ph456

.lr.ph456:                                        ; preds = %.thread446, %229
  %268 = phi float [ %233, %.thread446 ], [ %231, %229 ]
  %269 = getelementptr inbounds i8, ptr %0, i64 52
  %270 = load i32, ptr %269, align 4, !tbaa !30
  %271 = fadd float %.fr, %268
  %272 = getelementptr inbounds i8, ptr %0, i64 80
  %.promoted = load ptr, ptr %272, align 8, !tbaa !31
  %wide.trip.count479 = zext nneg i32 %27 to i64
  %273 = insertelement <4 x float> poison, float %271, i64 0
  %274 = insertelement <4 x float> %273, float %268, i64 1
  %275 = shufflevector <4 x float> %274, <4 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  br label %277

.lr.ph458:                                        ; preds = %277
  store ptr %338, ptr %272, align 8, !tbaa !31
  %276 = getelementptr inbounds i8, ptr %0, i64 72
  %smax = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count484 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %276, align 8, !tbaa !32
  br label %339

277:                                              ; preds = %.lr.ph456, %277
  %indvars.iv476 = phi i64 [ 0, %.lr.ph456 ], [ %indvars.iv.next477, %277 ]
  %278 = phi ptr [ %.promoted, %.lr.ph456 ], [ %338, %277 ]
  %.0422454 = phi i32 [ %270, %.lr.ph456 ], [ %284, %277 ]
  %indvars.iv.next477 = add nuw nsw i64 %indvars.iv476, 1
  %279 = icmp eq i64 %indvars.iv.next477, %59
  %280 = trunc nuw nsw i64 %indvars.iv.next477 to i32
  %281 = select i1 %279, i32 0, i32 %280
  %282 = load i32, ptr %269, align 4
  %283 = add i32 %.0422454, 4
  %284 = select i1 %279, i32 %282, i32 %283
  %285 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %indvars.iv476
  %286 = zext nneg i32 %281 to i64
  %287 = getelementptr inbounds %struct.ImVec2, ptr %58, i64 %286
  %288 = shl nsw i32 %281, 2
  %289 = zext nneg i32 %288 to i64
  %290 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %289
  %291 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %286
  %292 = load <2 x float>, ptr %285, align 8, !tbaa !24
  %293 = load <2 x float>, ptr %287, align 8, !tbaa !24
  %294 = fadd <2 x float> %292, %293
  %295 = fmul <2 x float> %294, <float 5.000000e-01, float 5.000000e-01>
  %296 = fmul <2 x float> %295, %295
  %297 = extractelement <2 x float> %296, i64 1
  %298 = extractelement <2 x float> %295, i64 0
  %299 = call float @llvm.fmuladd.f32(float %298, float %298, float %297)
  %300 = fcmp olt float %299, 5.000000e-01
  %.0424 = select i1 %300, float 5.000000e-01, float %299
  %301 = fdiv float 1.000000e+00, %.0424
  %302 = insertelement <2 x float> poison, float %301, i64 0
  %303 = shufflevector <2 x float> %302, <2 x float> poison, <2 x i32> zeroinitializer
  %304 = fmul <2 x float> %295, %303
  %305 = shufflevector <2 x float> %304, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %306 = fmul <4 x float> %275, %305
  %307 = load <2 x float>, ptr %291, align 4, !tbaa !24
  %308 = shufflevector <2 x float> %307, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %309 = fadd <4 x float> %308, %306
  store <4 x float> %309, ptr %290, align 8, !tbaa !24
  %310 = getelementptr inbounds i8, ptr %290, i64 16
  %311 = fsub <4 x float> %308, %306
  %312 = shufflevector <4 x float> %311, <4 x float> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
  store <4 x float> %312, ptr %310, align 8, !tbaa !24
  %313 = trunc i32 %284 to i16
  %314 = add i16 %313, 1
  store i16 %314, ptr %278, align 2, !tbaa !33
  %315 = trunc i32 %.0422454 to i16
  %316 = add i16 %315, 1
  %317 = getelementptr inbounds i8, ptr %278, i64 2
  store i16 %316, ptr %317, align 2, !tbaa !33
  %318 = add i16 %315, 2
  %319 = getelementptr inbounds i8, ptr %278, i64 4
  store i16 %318, ptr %319, align 2, !tbaa !33
  %320 = getelementptr inbounds i8, ptr %278, i64 6
  store i16 %318, ptr %320, align 2, !tbaa !33
  %321 = add i16 %313, 2
  %322 = getelementptr inbounds i8, ptr %278, i64 8
  store i16 %321, ptr %322, align 2, !tbaa !33
  %323 = getelementptr inbounds i8, ptr %278, i64 10
  store i16 %314, ptr %323, align 2, !tbaa !33
  %324 = getelementptr inbounds i8, ptr %278, i64 12
  store i16 %314, ptr %324, align 2, !tbaa !33
  %325 = getelementptr inbounds i8, ptr %278, i64 14
  store i16 %316, ptr %325, align 2, !tbaa !33
  %326 = getelementptr inbounds i8, ptr %278, i64 16
  store i16 %315, ptr %326, align 2, !tbaa !33
  %327 = getelementptr inbounds i8, ptr %278, i64 18
  store i16 %315, ptr %327, align 2, !tbaa !33
  %328 = getelementptr inbounds i8, ptr %278, i64 20
  store i16 %313, ptr %328, align 2, !tbaa !33
  %329 = getelementptr inbounds i8, ptr %278, i64 22
  store i16 %314, ptr %329, align 2, !tbaa !33
  %330 = getelementptr inbounds i8, ptr %278, i64 24
  store i16 %321, ptr %330, align 2, !tbaa !33
  %331 = getelementptr inbounds i8, ptr %278, i64 26
  store i16 %318, ptr %331, align 2, !tbaa !33
  %332 = add i16 %315, 3
  %333 = getelementptr inbounds i8, ptr %278, i64 28
  store i16 %332, ptr %333, align 2, !tbaa !33
  %334 = getelementptr inbounds i8, ptr %278, i64 30
  store i16 %332, ptr %334, align 2, !tbaa !33
  %335 = add i16 %313, 3
  %336 = getelementptr inbounds i8, ptr %278, i64 32
  store i16 %335, ptr %336, align 2, !tbaa !33
  %337 = getelementptr inbounds i8, ptr %278, i64 34
  store i16 %321, ptr %337, align 2, !tbaa !33
  %338 = getelementptr inbounds i8, ptr %278, i64 36
  %exitcond480.not = icmp eq i64 %indvars.iv.next477, %wide.trip.count479
  br i1 %exitcond480.not, label %.lr.ph458, label %277, !llvm.loop !42

339:                                              ; preds = %.lr.ph458, %339
  %340 = phi ptr [ %.pre, %.lr.ph458 ], [ %372, %339 ]
  %indvars.iv481 = phi i64 [ 0, %.lr.ph458 ], [ %indvars.iv.next482, %339 ]
  %341 = shl nsw i64 %indvars.iv481, 2
  %342 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %341
  %343 = load i64, ptr %342, align 8
  store i64 %343, ptr %340, align 4
  %344 = load ptr, ptr %276, align 8, !tbaa !32
  %345 = getelementptr inbounds i8, ptr %344, i64 8
  store i64 %25, ptr %345, align 4
  %346 = load ptr, ptr %276, align 8, !tbaa !32
  %347 = getelementptr inbounds i8, ptr %346, i64 16
  store i32 %35, ptr %347, align 4, !tbaa !38
  %348 = or disjoint i64 %341, 1
  %349 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %348
  %350 = getelementptr inbounds i8, ptr %346, i64 20
  %351 = load i64, ptr %349, align 8
  store i64 %351, ptr %350, align 4
  %352 = load ptr, ptr %276, align 8, !tbaa !32
  %353 = getelementptr inbounds i8, ptr %352, i64 28
  store i64 %25, ptr %353, align 4
  %354 = load ptr, ptr %276, align 8, !tbaa !32
  %355 = getelementptr inbounds i8, ptr %354, i64 36
  store i32 %3, ptr %355, align 4, !tbaa !38
  %356 = or disjoint i64 %341, 2
  %357 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %356
  %358 = getelementptr inbounds i8, ptr %354, i64 40
  %359 = load i64, ptr %357, align 8
  store i64 %359, ptr %358, align 4
  %360 = load ptr, ptr %276, align 8, !tbaa !32
  %361 = getelementptr inbounds i8, ptr %360, i64 48
  store i64 %25, ptr %361, align 4
  %362 = load ptr, ptr %276, align 8, !tbaa !32
  %363 = getelementptr inbounds i8, ptr %362, i64 56
  store i32 %3, ptr %363, align 4, !tbaa !38
  %364 = or disjoint i64 %341, 3
  %365 = getelementptr inbounds %struct.ImVec2, ptr %60, i64 %364
  %366 = getelementptr inbounds i8, ptr %362, i64 60
  %367 = load i64, ptr %365, align 8
  store i64 %367, ptr %366, align 4
  %368 = load ptr, ptr %276, align 8, !tbaa !32
  %369 = getelementptr inbounds i8, ptr %368, i64 68
  store i64 %25, ptr %369, align 4
  %370 = load ptr, ptr %276, align 8, !tbaa !32
  %371 = getelementptr inbounds i8, ptr %370, i64 76
  store i32 %35, ptr %371, align 4, !tbaa !38
  %372 = getelementptr inbounds i8, ptr %370, i64 80
  store ptr %372, ptr %276, align 8, !tbaa !32
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %exitcond485.not = icmp eq i64 %indvars.iv.next482, %wide.trip.count484
  br i1 %exitcond485.not, label %.loopexit449, label %339, !llvm.loop !43

.loopexit449:                                     ; preds = %339, %204, %._crit_edge470
  %373 = and i32 %53, 65535
  %374 = getelementptr inbounds i8, ptr %0, i64 52
  %375 = load i32, ptr %374, align 4, !tbaa !30
  %376 = add i32 %375, %373
  store i32 %376, ptr %374, align 4, !tbaa !30
  br label %.loopexit

.lr.ph473:                                        ; preds = %22
  %377 = mul nsw i32 %27, 6
  %378 = shl nsw i32 %27, 2
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %0, i32 noundef %377, i32 noundef %378)
  %379 = fmul float %5, 5.000000e-01
  %380 = getelementptr inbounds i8, ptr %0, i64 72
  %381 = getelementptr inbounds i8, ptr %0, i64 52
  %382 = getelementptr inbounds i8, ptr %0, i64 80
  %383 = zext nneg i32 %2 to i64
  %wide.trip.count506 = zext nneg i32 %27 to i64
  %384 = insertelement <2 x float> poison, float %379, i64 0
  %385 = shufflevector <2 x float> %384, <2 x float> poison, <2 x i32> zeroinitializer
  br label %386

386:                                              ; preds = %.lr.ph473, %408
  %indvars.iv503 = phi i64 [ 0, %.lr.ph473 ], [ %indvars.iv.next504, %408 ]
  %indvars.iv.next504 = add nuw nsw i64 %indvars.iv503, 1
  %387 = icmp eq i64 %indvars.iv.next504, %383
  %388 = and i64 %indvars.iv.next504, 4294967295
  %389 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv503
  %390 = select i1 %387, i64 0, i64 %388
  %391 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %390
  %392 = getelementptr inbounds i8, ptr %391, i64 4
  %393 = getelementptr inbounds i8, ptr %389, i64 4
  %394 = load <2 x float>, ptr %391, align 4, !tbaa !24
  %395 = load <2 x float>, ptr %389, align 4, !tbaa !24
  %396 = fsub <2 x float> %394, %395
  %397 = shufflevector <2 x float> %396, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %398 = fmul <2 x float> %396, %396
  %399 = extractelement <2 x float> %398, i64 1
  %400 = extractelement <2 x float> %396, i64 0
  %401 = tail call float @llvm.fmuladd.f32(float %400, float %400, float %399)
  %402 = fcmp ogt float %401, 0.000000e+00
  br i1 %402, label %403, label %408

403:                                              ; preds = %386
  %sqrt448 = tail call float @llvm.sqrt.f32(float %401)
  %404 = fdiv float 1.000000e+00, %sqrt448
  %405 = insertelement <2 x float> poison, float %404, i64 0
  %406 = shufflevector <2 x float> %405, <2 x float> poison, <2 x i32> zeroinitializer
  %407 = fmul <2 x float> %397, %406
  br label %408

408:                                              ; preds = %403, %386
  %409 = phi <2 x float> [ %407, %403 ], [ %397, %386 ]
  %410 = fmul <2 x float> %385, %409
  %411 = load ptr, ptr %380, align 8, !tbaa !32
  %412 = fadd <2 x float> %395, %410
  %413 = fsub <2 x float> %395, %410
  %414 = shufflevector <2 x float> %412, <2 x float> %413, <2 x i32> <i32 0, i32 3>
  store <2 x float> %414, ptr %411, align 4, !tbaa !24
  %415 = getelementptr inbounds i8, ptr %411, i64 8
  store i64 %25, ptr %415, align 4
  %416 = load ptr, ptr %380, align 8, !tbaa !32
  %417 = getelementptr inbounds i8, ptr %416, i64 16
  store i32 %3, ptr %417, align 4, !tbaa !38
  %418 = load float, ptr %391, align 4, !tbaa !25
  %419 = extractelement <2 x float> %410, i64 0
  %420 = fadd float %419, %418
  %421 = getelementptr inbounds i8, ptr %416, i64 20
  store float %420, ptr %421, align 4, !tbaa !44
  %422 = load float, ptr %392, align 4, !tbaa !27
  %423 = extractelement <2 x float> %410, i64 1
  %424 = fsub float %422, %423
  %425 = getelementptr inbounds i8, ptr %416, i64 24
  store float %424, ptr %425, align 4, !tbaa !45
  %426 = getelementptr inbounds i8, ptr %416, i64 28
  store i64 %25, ptr %426, align 4
  %427 = load ptr, ptr %380, align 8, !tbaa !32
  %428 = getelementptr inbounds i8, ptr %427, i64 36
  store i32 %3, ptr %428, align 4, !tbaa !38
  %429 = load float, ptr %391, align 4, !tbaa !25
  %430 = fsub float %429, %419
  %431 = getelementptr inbounds i8, ptr %427, i64 40
  store float %430, ptr %431, align 4, !tbaa !44
  %432 = load float, ptr %392, align 4, !tbaa !27
  %433 = fadd float %423, %432
  %434 = getelementptr inbounds i8, ptr %427, i64 44
  store float %433, ptr %434, align 4, !tbaa !45
  %435 = getelementptr inbounds i8, ptr %427, i64 48
  store i64 %25, ptr %435, align 4
  %436 = load ptr, ptr %380, align 8, !tbaa !32
  %437 = getelementptr inbounds i8, ptr %436, i64 56
  store i32 %3, ptr %437, align 4, !tbaa !38
  %438 = load float, ptr %389, align 4, !tbaa !25
  %439 = fsub float %438, %419
  %440 = getelementptr inbounds i8, ptr %436, i64 60
  store float %439, ptr %440, align 4, !tbaa !44
  %441 = load float, ptr %393, align 4, !tbaa !27
  %442 = fadd float %423, %441
  %443 = getelementptr inbounds i8, ptr %436, i64 64
  store float %442, ptr %443, align 4, !tbaa !45
  %444 = getelementptr inbounds i8, ptr %436, i64 68
  store i64 %25, ptr %444, align 4
  %445 = load ptr, ptr %380, align 8, !tbaa !32
  %446 = getelementptr inbounds i8, ptr %445, i64 76
  store i32 %3, ptr %446, align 4, !tbaa !38
  %447 = getelementptr inbounds i8, ptr %445, i64 80
  store ptr %447, ptr %380, align 8, !tbaa !32
  %448 = load i32, ptr %381, align 4, !tbaa !30
  %449 = trunc i32 %448 to i16
  %450 = load ptr, ptr %382, align 8, !tbaa !31
  store i16 %449, ptr %450, align 2, !tbaa !33
  %451 = add i16 %449, 1
  %452 = getelementptr inbounds i8, ptr %450, i64 2
  store i16 %451, ptr %452, align 2, !tbaa !33
  %453 = add i16 %449, 2
  %454 = getelementptr inbounds i8, ptr %450, i64 4
  store i16 %453, ptr %454, align 2, !tbaa !33
  %455 = getelementptr inbounds i8, ptr %450, i64 6
  store i16 %449, ptr %455, align 2, !tbaa !33
  %456 = getelementptr inbounds i8, ptr %450, i64 8
  store i16 %453, ptr %456, align 2, !tbaa !33
  %457 = add i16 %449, 3
  %458 = getelementptr inbounds i8, ptr %450, i64 10
  store i16 %457, ptr %458, align 2, !tbaa !33
  %459 = getelementptr inbounds i8, ptr %450, i64 12
  store ptr %459, ptr %382, align 8, !tbaa !31
  %460 = add i32 %448, 4
  store i32 %460, ptr %381, align 4, !tbaa !30
  %exitcond507.not = icmp eq i64 %indvars.iv.next504, %wide.trip.count506
  br i1 %exitcond507.not, label %.loopexit, label %386, !llvm.loop !46

.loopexit:                                        ; preds = %408, %.loopexit449, %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 208}
!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, !9, i64 144, !11, i64 208}
!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