; LLVM IR from erwincoumans/tiny-differentiable-simulator :: third_party/dear_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, ptr, ptr, i32, ptr, ptr, %struct.ImVector.2, %struct.ImVector.3, %struct.ImVector.4, %struct.ImDrawCmd, %struct.ImDrawListSplitter }
%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.ImDrawCmd = type { %struct.ImVec4, ptr, i32, i32, i32, ptr, ptr }
%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(224), i32 noundef, i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijbf(ptr noundef nonnull align 8 dereferenceable(224) %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.ImVec4, align 4
  %51 = alloca %struct.ImVec2, align 4
  %52 = alloca %struct.ImVec2, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca float, align 4
  %56 = alloca i32, align 4
  %57 = alloca %struct.ImVec2, align 4
  %58 = alloca %struct.ImVec2, align 4
  %59 = alloca %struct.ImVec2, align 4
  %60 = alloca %struct.ImVec2, align 4
  %61 = alloca %struct.ImVec2, align 4
  %62 = alloca %struct.ImVec2, align 4
  %63 = alloca %struct.ImVec2, align 4
  %64 = alloca %struct.ImVec2, align 4
  %65 = alloca %struct.ImVec2, align 4
  %66 = alloca %struct.ImVec2, align 4
  %67 = alloca %struct.ImVec2, align 4
  %68 = alloca %struct.ImVec2, align 4
  %69 = alloca %struct.ImVec2, align 4
  %70 = alloca %struct.ImVec2, align 4
  %71 = alloca %struct.ImVec2, align 4
  %72 = alloca %struct.ImVec2, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca float, align 4
  %82 = alloca float, align 4
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca ptr, align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca ptr, align 8
  %92 = alloca ptr, align 8
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = alloca float, align 4
  %96 = alloca float, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  %97 = zext i1 %4 to i8
  store i8 %97, ptr %11, align 1, !tbaa !11
  store float %5, ptr %12, align 4, !tbaa !13
  %98 = load ptr, ptr %7, align 8
  %99 = load i32, ptr %9, align 4, !tbaa !9
  %100 = icmp slt i32 %99, 2
  br i1 %100, label %101, label %102

101:                                              ; preds = %6
  br label %1588

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

108:                                              ; preds = %102
  %109 = load i32, ptr %9, align 4, !tbaa !9
  br label %113

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

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

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

137:                                              ; preds = %122
  %138 = load i32, ptr %18, align 4, !tbaa !9
  %139 = icmp slt i32 %138, 63
  br i1 %139, label %140, label %143

140:                                              ; preds = %137
  %141 = load float, ptr %19, align 4, !tbaa !13
  %142 = fcmp ole float %141, 0x3EE4F8B580000000
  br label %143

143:                                              ; preds = %140, %137, %122
  %144 = phi i1 [ false, %137 ], [ false, %122 ], [ %142, %140 ]
  %145 = zext i1 %144 to i8
  store i8 %145, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %146 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %147 = trunc i8 %146 to i1
  br i1 %147, label %148, label %151

148:                                              ; preds = %143
  %149 = load i32, ptr %14, align 4, !tbaa !9
  %150 = mul nsw i32 %149, 6
  br label %162

151:                                              ; preds = %143
  %152 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %153 = trunc i8 %152 to i1
  br i1 %153, label %154, label %157

154:                                              ; preds = %151
  %155 = load i32, ptr %14, align 4, !tbaa !9
  %156 = mul nsw i32 %155, 18
  br label %160

157:                                              ; preds = %151
  %158 = load i32, ptr %14, align 4, !tbaa !9
  %159 = mul nsw i32 %158, 12
  br label %160

160:                                              ; preds = %157, %154
  %161 = phi i32 [ %156, %154 ], [ %159, %157 ]
  br label %162

162:                                              ; preds = %160, %148
  %163 = phi i32 [ %150, %148 ], [ %161, %160 ]
  store i32 %163, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %164 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %165 = trunc i8 %164 to i1
  br i1 %165, label %166, label %169

166:                                              ; preds = %162
  %167 = load i32, ptr %9, align 4, !tbaa !9
  %168 = mul nsw i32 %167, 2
  br label %180

169:                                              ; preds = %162
  %170 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %171 = trunc i8 %170 to i1
  br i1 %171, label %172, label %175

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

175:                                              ; preds = %169
  %176 = load i32, ptr %9, align 4, !tbaa !9
  %177 = mul nsw i32 %176, 3
  br label %178

178:                                              ; preds = %175, %172
  %179 = phi i32 [ %174, %172 ], [ %177, %175 ]
  br label %180

180:                                              ; preds = %178, %166
  %181 = phi i32 [ %168, %166 ], [ %179, %178 ]
  store i32 %181, ptr %22, align 4, !tbaa !9
  %182 = load i32, ptr %21, align 4, !tbaa !9
  %183 = load i32, ptr %22, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(224) %98, i32 noundef %182, i32 noundef %183)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %184 = load i32, ptr %9, align 4, !tbaa !9
  %185 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %186 = trunc i8 %185 to i1
  br i1 %186, label %191, label %187

187:                                              ; preds = %180
  %188 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %189 = trunc i8 %188 to i1
  %190 = xor i1 %189, true
  br label %191

191:                                              ; preds = %187, %180
  %192 = phi i1 [ true, %180 ], [ %190, %187 ]
  %193 = zext i1 %192 to i64
  %194 = select i1 %192, i32 3, i32 5
  %195 = mul nsw i32 %184, %194
  %196 = sext i32 %195 to i64
  %197 = mul i64 %196, 8
  %198 = alloca i8, i64 %197, align 16
  store ptr %198, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = load i32, ptr %9, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds %struct.ImVec2, ptr %199, i64 %201
  store ptr %202, 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 %203

203:                                              ; preds = %280, %191
  %204 = load i32, ptr %25, align 4, !tbaa !9
  %205 = load i32, ptr %14, align 4, !tbaa !9
  %206 = icmp slt i32 %204, %205
  br i1 %206, label %208, label %207

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

208:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %209 = load i32, ptr %25, align 4, !tbaa !9
  %210 = add nsw i32 %209, 1
  %211 = load i32, ptr %9, align 4, !tbaa !9
  %212 = icmp eq i32 %210, %211
  br i1 %212, label %213, label %214

213:                                              ; preds = %208
  br label %217

214:                                              ; preds = %208
  %215 = load i32, ptr %25, align 4, !tbaa !9
  %216 = add nsw i32 %215, 1
  br label %217

217:                                              ; preds = %214, %213
  %218 = phi i32 [ 0, %213 ], [ %216, %214 ]
  store i32 %218, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = load i32, ptr %26, align 4, !tbaa !9
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds %struct.ImVec2, ptr %219, i64 %221
  %223 = getelementptr inbounds %struct.ImVec2, ptr %222, i32 0, i32 0
  %224 = load float, ptr %223, align 4, !tbaa !31
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = load i32, ptr %25, 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 !31
  %231 = fsub float %224, %230
  store float %231, ptr %27, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = load i32, ptr %26, align 4, !tbaa !9
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct.ImVec2, ptr %232, i64 %234
  %236 = getelementptr inbounds %struct.ImVec2, ptr %235, i32 0, i32 1
  %237 = load float, ptr %236, align 4, !tbaa !33
  %238 = load ptr, ptr %8, align 8, !tbaa !5
  %239 = load i32, ptr %25, 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 !33
  %244 = fsub float %237, %243
  store float %244, ptr %28, align 4, !tbaa !13
  br label %245

245:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %246 = load float, ptr %27, align 4, !tbaa !13
  %247 = load float, ptr %27, align 4, !tbaa !13
  %248 = load float, ptr %28, align 4, !tbaa !13
  %249 = load float, ptr %28, align 4, !tbaa !13
  %250 = fmul float %248, %249
  %251 = call float @llvm.fmuladd.f32(float %246, float %247, float %250)
  store float %251, ptr %29, align 4, !tbaa !13
  %252 = load float, ptr %29, align 4, !tbaa !13
  %253 = fcmp ogt float %252, 0.000000e+00
  br i1 %253, label %254, label %264

254:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %255 = load float, ptr %29, align 4, !tbaa !13
  %256 = call float @sqrtf(float noundef %255) #9
  %257 = fdiv float 1.000000e+00, %256
  store float %257, ptr %30, align 4, !tbaa !13
  %258 = load float, ptr %30, align 4, !tbaa !13
  %259 = load float, ptr %27, align 4, !tbaa !13
  %260 = fmul float %259, %258
  store float %260, ptr %27, align 4, !tbaa !13
  %261 = load float, ptr %30, align 4, !tbaa !13
  %262 = load float, ptr %28, align 4, !tbaa !13
  %263 = fmul float %262, %261
  store float %263, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %264

264:                                              ; preds = %254, %245
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %265

265:                                              ; preds = %264
  br label %266

266:                                              ; preds = %265
  %267 = load float, ptr %28, align 4, !tbaa !13
  %268 = load ptr, ptr %23, align 8, !tbaa !5
  %269 = load i32, ptr %25, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds %struct.ImVec2, ptr %268, i64 %270
  %272 = getelementptr inbounds %struct.ImVec2, ptr %271, i32 0, i32 0
  store float %267, ptr %272, align 4, !tbaa !31
  %273 = load float, ptr %27, align 4, !tbaa !13
  %274 = fneg float %273
  %275 = load ptr, ptr %23, align 8, !tbaa !5
  %276 = load i32, ptr %25, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds %struct.ImVec2, ptr %275, i64 %277
  %279 = getelementptr inbounds %struct.ImVec2, ptr %278, i32 0, i32 1
  store float %274, ptr %279, align 4, !tbaa !33
  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 %280

280:                                              ; preds = %266
  %281 = load i32, ptr %25, align 4, !tbaa !9
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr %25, align 4, !tbaa !9
  br label %203, !llvm.loop !34

283:                                              ; preds = %207
  %284 = load i8, ptr %11, align 1, !tbaa !11, !range !28, !noundef !29
  %285 = trunc i8 %284 to i1
  br i1 %285, label %297, label %286

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

297:                                              ; preds = %286, %283
  %298 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %299 = trunc i8 %298 to i1
  br i1 %299, label %303, label %300

300:                                              ; preds = %297
  %301 = load i8, ptr %15, align 1, !tbaa !11, !range !28, !noundef !29
  %302 = trunc i8 %301 to i1
  br i1 %302, label %827, label %303

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

306:                                              ; preds = %303
  %307 = load float, ptr %12, align 4, !tbaa !13
  %308 = call float @llvm.fmuladd.f32(float %307, float 5.000000e-01, float 1.000000e+00)
  br label %310

309:                                              ; preds = %303
  br label %310

310:                                              ; preds = %309, %306
  %311 = phi float [ %308, %306 ], [ 1.000000e+00, %309 ]
  store float %311, ptr %31, align 4, !tbaa !13
  %312 = load i8, ptr %11, align 1, !tbaa !11, !range !28, !noundef !29
  %313 = trunc i8 %312 to i1
  br i1 %313, label %373, label %314

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

373:                                              ; preds = %314, %310
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %374 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %375 = load i32, ptr %374, align 8, !tbaa !36
  store i32 %375, 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 %376

376:                                              ; preds = %632, %373
  %377 = load i32, ptr %41, align 4, !tbaa !9
  %378 = load i32, ptr %14, align 4, !tbaa !9
  %379 = icmp slt i32 %377, %378
  br i1 %379, label %381, label %380

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

381:                                              ; preds = %376
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %382 = load i32, ptr %41, align 4, !tbaa !9
  %383 = add nsw i32 %382, 1
  %384 = load i32, ptr %9, align 4, !tbaa !9
  %385 = icmp eq i32 %383, %384
  br i1 %385, label %386, label %387

386:                                              ; preds = %381
  br label %390

387:                                              ; preds = %381
  %388 = load i32, ptr %41, align 4, !tbaa !9
  %389 = add nsw i32 %388, 1
  br label %390

390:                                              ; preds = %387, %386
  %391 = phi i32 [ 0, %386 ], [ %389, %387 ]
  store i32 %391, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %392 = load i32, ptr %41, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  %394 = load i32, ptr %9, align 4, !tbaa !9
  %395 = icmp eq i32 %393, %394
  br i1 %395, label %396, label %399

396:                                              ; preds = %390
  %397 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %398 = load i32, ptr %397, align 8, !tbaa !36
  br label %406

399:                                              ; preds = %390
  %400 = load i32, ptr %40, align 4, !tbaa !9
  %401 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %402 = trunc i8 %401 to i1
  %403 = zext i1 %402 to i64
  %404 = select i1 %402, i32 2, i32 3
  %405 = add i32 %400, %404
  br label %406

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

436:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %437 = load float, ptr %44, align 4, !tbaa !13
  %438 = load float, ptr %44, align 4, !tbaa !13
  %439 = load float, ptr %45, align 4, !tbaa !13
  %440 = load float, ptr %45, align 4, !tbaa !13
  %441 = fmul float %439, %440
  %442 = call float @llvm.fmuladd.f32(float %437, float %438, float %441)
  store float %442, ptr %46, align 4, !tbaa !13
  %443 = load float, ptr %46, align 4, !tbaa !13
  %444 = fcmp olt float %443, 5.000000e-01
  br i1 %444, label %445, label %446

445:                                              ; preds = %436
  store float 5.000000e-01, ptr %46, align 4, !tbaa !13
  br label %446

446:                                              ; preds = %445, %436
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %447 = load float, ptr %46, align 4, !tbaa !13
  %448 = fdiv float 1.000000e+00, %447
  store float %448, ptr %47, align 4, !tbaa !13
  %449 = load float, ptr %47, align 4, !tbaa !13
  %450 = load float, ptr %44, align 4, !tbaa !13
  %451 = fmul float %450, %449
  store float %451, ptr %44, align 4, !tbaa !13
  %452 = load float, ptr %47, align 4, !tbaa !13
  %453 = load float, ptr %45, align 4, !tbaa !13
  %454 = fmul float %453, %452
  store float %454, 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 %455

455:                                              ; preds = %446
  br label %456

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

514:                                              ; preds = %456
  %515 = load i32, ptr %43, align 4, !tbaa !9
  %516 = add i32 %515, 0
  %517 = trunc i32 %516 to i16
  %518 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %519 = load ptr, ptr %518, align 8, !tbaa !37
  %520 = getelementptr inbounds i16, ptr %519, i64 0
  store i16 %517, ptr %520, align 2, !tbaa !38
  %521 = load i32, ptr %40, align 4, !tbaa !9
  %522 = add i32 %521, 0
  %523 = trunc i32 %522 to i16
  %524 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %525 = load ptr, ptr %524, align 8, !tbaa !37
  %526 = getelementptr inbounds i16, ptr %525, i64 1
  store i16 %523, ptr %526, align 2, !tbaa !38
  %527 = load i32, ptr %40, align 4, !tbaa !9
  %528 = add i32 %527, 1
  %529 = trunc i32 %528 to i16
  %530 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %531 = load ptr, ptr %530, align 8, !tbaa !37
  %532 = getelementptr inbounds i16, ptr %531, i64 2
  store i16 %529, ptr %532, align 2, !tbaa !38
  %533 = load i32, ptr %43, align 4, !tbaa !9
  %534 = add i32 %533, 1
  %535 = trunc i32 %534 to i16
  %536 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %537 = load ptr, ptr %536, align 8, !tbaa !37
  %538 = getelementptr inbounds i16, ptr %537, i64 3
  store i16 %535, ptr %538, align 2, !tbaa !38
  %539 = load i32, ptr %40, align 4, !tbaa !9
  %540 = add i32 %539, 1
  %541 = trunc i32 %540 to i16
  %542 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %543 = load ptr, ptr %542, align 8, !tbaa !37
  %544 = getelementptr inbounds i16, ptr %543, i64 4
  store i16 %541, ptr %544, align 2, !tbaa !38
  %545 = load i32, ptr %43, align 4, !tbaa !9
  %546 = add i32 %545, 0
  %547 = trunc i32 %546 to i16
  %548 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %549 = load ptr, ptr %548, align 8, !tbaa !37
  %550 = getelementptr inbounds i16, ptr %549, i64 5
  store i16 %547, ptr %550, align 2, !tbaa !38
  %551 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %552 = load ptr, ptr %551, align 8, !tbaa !37
  %553 = getelementptr inbounds i16, ptr %552, i64 6
  store ptr %553, ptr %551, align 8, !tbaa !37
  br label %630

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

630:                                              ; preds = %554, %514
  %631 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %631, 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 %632

632:                                              ; preds = %630
  %633 = load i32, ptr %41, align 4, !tbaa !9
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %41, align 4, !tbaa !9
  br label %376, !llvm.loop !40

635:                                              ; preds = %380
  %636 = load i8, ptr %20, align 1, !tbaa !11, !range !28, !noundef !29
  %637 = trunc i8 %636 to i1
  br i1 %637, label %638, label %757

638:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #9
  %639 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 4
  %640 = load ptr, ptr %639, align 8, !tbaa !15
  %641 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %640, i32 0, i32 9
  %642 = load ptr, ptr %641, align 8, !tbaa !41
  %643 = load i32, ptr %18, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds %struct.ImVec4, ptr %642, i64 %644
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 4 %645, i64 16, i1 false), !tbaa.struct !43
  %646 = load float, ptr %19, align 4, !tbaa !13
  %647 = fcmp une float %646, 0.000000e+00
  br i1 %647, label %648, label %697

648:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #9
  %649 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 4
  %650 = load ptr, ptr %649, align 8, !tbaa !15
  %651 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %650, i32 0, i32 9
  %652 = load ptr, ptr %651, align 8, !tbaa !41
  %653 = load i32, ptr %18, align 4, !tbaa !9
  %654 = add nsw i32 %653, 1
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds %struct.ImVec4, ptr %652, i64 %655
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %656, i64 16, i1 false), !tbaa.struct !43
  %657 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 0
  %658 = load float, ptr %657, align 4, !tbaa !44
  %659 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 0
  %660 = load float, ptr %659, align 4, !tbaa !44
  %661 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 0
  %662 = load float, ptr %661, align 4, !tbaa !44
  %663 = fsub float %660, %662
  %664 = load float, ptr %19, align 4, !tbaa !13
  %665 = call float @llvm.fmuladd.f32(float %663, float %664, float %658)
  %666 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 0
  store float %665, ptr %666, align 4, !tbaa !44
  %667 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 1
  %668 = load float, ptr %667, align 4, !tbaa !45
  %669 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 1
  %670 = load float, ptr %669, align 4, !tbaa !45
  %671 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 1
  %672 = load float, ptr %671, align 4, !tbaa !45
  %673 = fsub float %670, %672
  %674 = load float, ptr %19, align 4, !tbaa !13
  %675 = call float @llvm.fmuladd.f32(float %673, float %674, float %668)
  %676 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 1
  store float %675, ptr %676, align 4, !tbaa !45
  %677 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 2
  %678 = load float, ptr %677, align 4, !tbaa !46
  %679 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 2
  %680 = load float, ptr %679, align 4, !tbaa !46
  %681 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 2
  %682 = load float, ptr %681, align 4, !tbaa !46
  %683 = fsub float %680, %682
  %684 = load float, ptr %19, align 4, !tbaa !13
  %685 = call float @llvm.fmuladd.f32(float %683, float %684, float %678)
  %686 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 2
  store float %685, ptr %686, align 4, !tbaa !46
  %687 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 3
  %688 = load float, ptr %687, align 4, !tbaa !47
  %689 = getelementptr inbounds %struct.ImVec4, ptr %50, i32 0, i32 3
  %690 = load float, ptr %689, align 4, !tbaa !47
  %691 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 3
  %692 = load float, ptr %691, align 4, !tbaa !47
  %693 = fsub float %690, %692
  %694 = load float, ptr %19, align 4, !tbaa !13
  %695 = call float @llvm.fmuladd.f32(float %693, float %694, float %688)
  %696 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 3
  store float %695, ptr %696, align 4, !tbaa !47
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #9
  br label %697

697:                                              ; preds = %648, %638
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %698 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 0
  %699 = load float, ptr %698, align 4, !tbaa !44
  %700 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 1
  %701 = load float, ptr %700, align 4, !tbaa !45
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %51, float noundef %699, float noundef %701)
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %702 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 2
  %703 = load float, ptr %702, align 4, !tbaa !46
  %704 = getelementptr inbounds %struct.ImVec4, ptr %49, i32 0, i32 3
  %705 = load float, ptr %704, align 4, !tbaa !47
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %52, float noundef %703, float noundef %705)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %706

706:                                              ; preds = %753, %697
  %707 = load i32, ptr %53, align 4, !tbaa !9
  %708 = load i32, ptr %9, align 4, !tbaa !9
  %709 = icmp slt i32 %707, %708
  br i1 %709, label %711, label %710

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

711:                                              ; preds = %706
  %712 = load ptr, ptr %24, align 8, !tbaa !5
  %713 = load i32, ptr %53, align 4, !tbaa !9
  %714 = mul nsw i32 %713, 2
  %715 = add nsw i32 %714, 0
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds %struct.ImVec2, ptr %712, i64 %716
  %718 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %719 = load ptr, ptr %718, align 8, !tbaa !48
  %720 = getelementptr inbounds %struct.ImDrawVert, ptr %719, i64 0
  %721 = getelementptr inbounds %struct.ImDrawVert, ptr %720, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %721, ptr align 4 %717, i64 8, i1 false), !tbaa.struct !27
  %722 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %723 = load ptr, ptr %722, align 8, !tbaa !48
  %724 = getelementptr inbounds %struct.ImDrawVert, ptr %723, i64 0
  %725 = getelementptr inbounds %struct.ImDrawVert, ptr %724, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %725, ptr align 4 %51, i64 8, i1 false), !tbaa.struct !27
  %726 = load i32, ptr %10, align 4, !tbaa !9
  %727 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %728 = load ptr, ptr %727, align 8, !tbaa !48
  %729 = getelementptr inbounds %struct.ImDrawVert, ptr %728, i64 0
  %730 = getelementptr inbounds %struct.ImDrawVert, ptr %729, i32 0, i32 2
  store i32 %726, ptr %730, align 4, !tbaa !49
  %731 = load ptr, ptr %24, align 8, !tbaa !5
  %732 = load i32, ptr %53, align 4, !tbaa !9
  %733 = mul nsw i32 %732, 2
  %734 = add nsw i32 %733, 1
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds %struct.ImVec2, ptr %731, i64 %735
  %737 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %738 = load ptr, ptr %737, align 8, !tbaa !48
  %739 = getelementptr inbounds %struct.ImDrawVert, ptr %738, i64 1
  %740 = getelementptr inbounds %struct.ImDrawVert, ptr %739, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %740, ptr align 4 %736, i64 8, i1 false), !tbaa.struct !27
  %741 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %742 = load ptr, ptr %741, align 8, !tbaa !48
  %743 = getelementptr inbounds %struct.ImDrawVert, ptr %742, i64 1
  %744 = getelementptr inbounds %struct.ImDrawVert, ptr %743, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %744, ptr align 4 %52, i64 8, i1 false), !tbaa.struct !27
  %745 = load i32, ptr %10, align 4, !tbaa !9
  %746 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %747 = load ptr, ptr %746, align 8, !tbaa !48
  %748 = getelementptr inbounds %struct.ImDrawVert, ptr %747, i64 1
  %749 = getelementptr inbounds %struct.ImDrawVert, ptr %748, i32 0, i32 2
  store i32 %745, ptr %749, align 4, !tbaa !49
  %750 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %751 = load ptr, ptr %750, align 8, !tbaa !48
  %752 = getelementptr inbounds %struct.ImDrawVert, ptr %751, i64 2
  store ptr %752, ptr %750, align 8, !tbaa !48
  br label %753

753:                                              ; preds = %711
  %754 = load i32, ptr %53, align 4, !tbaa !9
  %755 = add nsw i32 %754, 1
  store i32 %755, ptr %53, align 4, !tbaa !9
  br label %706, !llvm.loop !51

756:                                              ; preds = %710
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #9
  br label %826

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

758:                                              ; preds = %822, %757
  %759 = load i32, ptr %54, align 4, !tbaa !9
  %760 = load i32, ptr %9, align 4, !tbaa !9
  %761 = icmp slt i32 %759, %760
  br i1 %761, label %763, label %762

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

763:                                              ; preds = %758
  %764 = load ptr, ptr %8, align 8, !tbaa !5
  %765 = load i32, ptr %54, align 4, !tbaa !9
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds %struct.ImVec2, ptr %764, i64 %766
  %768 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %769 = load ptr, ptr %768, align 8, !tbaa !48
  %770 = getelementptr inbounds %struct.ImDrawVert, ptr %769, i64 0
  %771 = getelementptr inbounds %struct.ImDrawVert, ptr %770, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %771, ptr align 4 %767, i64 8, i1 false), !tbaa.struct !27
  %772 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %773 = load ptr, ptr %772, align 8, !tbaa !48
  %774 = getelementptr inbounds %struct.ImDrawVert, ptr %773, i64 0
  %775 = getelementptr inbounds %struct.ImDrawVert, ptr %774, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %775, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %776 = load i32, ptr %10, align 4, !tbaa !9
  %777 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %778 = load ptr, ptr %777, align 8, !tbaa !48
  %779 = getelementptr inbounds %struct.ImDrawVert, ptr %778, i64 0
  %780 = getelementptr inbounds %struct.ImDrawVert, ptr %779, i32 0, i32 2
  store i32 %776, ptr %780, align 4, !tbaa !49
  %781 = load ptr, ptr %24, align 8, !tbaa !5
  %782 = load i32, ptr %54, align 4, !tbaa !9
  %783 = mul nsw i32 %782, 2
  %784 = add nsw i32 %783, 0
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds %struct.ImVec2, ptr %781, i64 %785
  %787 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %788 = load ptr, ptr %787, align 8, !tbaa !48
  %789 = getelementptr inbounds %struct.ImDrawVert, ptr %788, i64 1
  %790 = getelementptr inbounds %struct.ImDrawVert, ptr %789, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %790, ptr align 4 %786, i64 8, i1 false), !tbaa.struct !27
  %791 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %792 = load ptr, ptr %791, align 8, !tbaa !48
  %793 = getelementptr inbounds %struct.ImDrawVert, ptr %792, i64 1
  %794 = getelementptr inbounds %struct.ImDrawVert, ptr %793, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %794, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %795 = load i32, ptr %17, align 4, !tbaa !9
  %796 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %797 = load ptr, ptr %796, align 8, !tbaa !48
  %798 = getelementptr inbounds %struct.ImDrawVert, ptr %797, i64 1
  %799 = getelementptr inbounds %struct.ImDrawVert, ptr %798, i32 0, i32 2
  store i32 %795, ptr %799, align 4, !tbaa !49
  %800 = load ptr, ptr %24, align 8, !tbaa !5
  %801 = load i32, ptr %54, align 4, !tbaa !9
  %802 = mul nsw i32 %801, 2
  %803 = add nsw i32 %802, 1
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds %struct.ImVec2, ptr %800, i64 %804
  %806 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %807 = load ptr, ptr %806, align 8, !tbaa !48
  %808 = getelementptr inbounds %struct.ImDrawVert, ptr %807, i64 2
  %809 = getelementptr inbounds %struct.ImDrawVert, ptr %808, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %809, ptr align 4 %805, i64 8, i1 false), !tbaa.struct !27
  %810 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %811 = load ptr, ptr %810, align 8, !tbaa !48
  %812 = getelementptr inbounds %struct.ImDrawVert, ptr %811, i64 2
  %813 = getelementptr inbounds %struct.ImDrawVert, ptr %812, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %813, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %814 = load i32, ptr %17, align 4, !tbaa !9
  %815 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %816 = load ptr, ptr %815, align 8, !tbaa !48
  %817 = getelementptr inbounds %struct.ImDrawVert, ptr %816, i64 2
  %818 = getelementptr inbounds %struct.ImDrawVert, ptr %817, i32 0, i32 2
  store i32 %814, ptr %818, align 4, !tbaa !49
  %819 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %820 = load ptr, ptr %819, align 8, !tbaa !48
  %821 = getelementptr inbounds %struct.ImDrawVert, ptr %820, i64 3
  store ptr %821, ptr %819, align 8, !tbaa !48
  br label %822

822:                                              ; preds = %763
  %823 = load i32, ptr %54, align 4, !tbaa !9
  %824 = add nsw i32 %823, 1
  store i32 %824, ptr %54, align 4, !tbaa !9
  br label %758, !llvm.loop !52

825:                                              ; preds = %762
  br label %826

826:                                              ; preds = %825, %756
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %1336

827:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %828 = load float, ptr %12, align 4, !tbaa !13
  %829 = fsub float %828, 1.000000e+00
  %830 = fmul float %829, 5.000000e-01
  store float %830, ptr %55, align 4, !tbaa !13
  %831 = load i8, ptr %11, align 1, !tbaa !11, !range !28, !noundef !29
  %832 = trunc i8 %831 to i1
  br i1 %832, label %944, label %833

833:                                              ; preds = %827
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %834 = load i32, ptr %9, align 4, !tbaa !9
  %835 = sub nsw i32 %834, 1
  store i32 %835, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  %836 = load ptr, ptr %8, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.ImVec2, ptr %836, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %838 = load ptr, ptr %23, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.ImVec2, ptr %838, i64 0
  %840 = load float, ptr %55, align 4, !tbaa !13
  %841 = fadd float %840, 1.000000e+00
  %842 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %839, float noundef %841)
  store <2 x float> %842, ptr %58, align 4
  %843 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %837, ptr noundef nonnull align 4 dereferenceable(8) %58)
  store <2 x float> %843, ptr %57, align 4
  %844 = load ptr, ptr %24, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.ImVec2, ptr %844, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %845, ptr align 4 %57, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %846 = load ptr, ptr %8, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.ImVec2, ptr %846, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %848 = load ptr, ptr %23, align 8, !tbaa !5
  %849 = getelementptr inbounds %struct.ImVec2, ptr %848, i64 0
  %850 = load float, ptr %55, align 4, !tbaa !13
  %851 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %849, float noundef %850)
  store <2 x float> %851, ptr %60, align 4
  %852 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %847, ptr noundef nonnull align 4 dereferenceable(8) %60)
  store <2 x float> %852, ptr %59, align 4
  %853 = load ptr, ptr %24, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.ImVec2, ptr %853, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %854, ptr align 4 %59, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %855 = load ptr, ptr %8, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.ImVec2, ptr %855, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %857 = load ptr, ptr %23, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.ImVec2, ptr %857, i64 0
  %859 = load float, ptr %55, 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 %62, align 4
  %861 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %856, ptr noundef nonnull align 4 dereferenceable(8) %62)
  store <2 x float> %861, ptr %61, align 4
  %862 = load ptr, ptr %24, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.ImVec2, ptr %862, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %863, ptr align 4 %61, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %864 = load ptr, ptr %8, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.ImVec2, ptr %864, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %866 = load ptr, ptr %23, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.ImVec2, ptr %866, i64 0
  %868 = load float, ptr %55, align 4, !tbaa !13
  %869 = fadd float %868, 1.000000e+00
  %870 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %867, float noundef %869)
  store <2 x float> %870, ptr %64, align 4
  %871 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %865, ptr noundef nonnull align 4 dereferenceable(8) %64)
  store <2 x float> %871, ptr %63, align 4
  %872 = load ptr, ptr %24, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.ImVec2, ptr %872, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %873, ptr align 4 %63, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %874 = load ptr, ptr %8, align 8, !tbaa !5
  %875 = load i32, ptr %56, align 4, !tbaa !9
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds %struct.ImVec2, ptr %874, i64 %876
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %878 = load ptr, ptr %23, align 8, !tbaa !5
  %879 = load i32, ptr %56, align 4, !tbaa !9
  %880 = sext i32 %879 to i64
  %881 = getelementptr inbounds %struct.ImVec2, ptr %878, i64 %880
  %882 = load float, ptr %55, align 4, !tbaa !13
  %883 = fadd float %882, 1.000000e+00
  %884 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %881, float noundef %883)
  store <2 x float> %884, ptr %66, align 4
  %885 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %877, ptr noundef nonnull align 4 dereferenceable(8) %66)
  store <2 x float> %885, ptr %65, align 4
  %886 = load ptr, ptr %24, align 8, !tbaa !5
  %887 = load i32, ptr %56, align 4, !tbaa !9
  %888 = mul nsw i32 %887, 4
  %889 = add nsw i32 %888, 0
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds %struct.ImVec2, ptr %886, i64 %890
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %891, ptr align 4 %65, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %892 = load ptr, ptr %8, align 8, !tbaa !5
  %893 = load i32, ptr %56, align 4, !tbaa !9
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds %struct.ImVec2, ptr %892, i64 %894
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %896 = load ptr, ptr %23, align 8, !tbaa !5
  %897 = load i32, ptr %56, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %struct.ImVec2, ptr %896, i64 %898
  %900 = load float, ptr %55, align 4, !tbaa !13
  %901 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %899, float noundef %900)
  store <2 x float> %901, ptr %68, align 4
  %902 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %895, ptr noundef nonnull align 4 dereferenceable(8) %68)
  store <2 x float> %902, ptr %67, align 4
  %903 = load ptr, ptr %24, align 8, !tbaa !5
  %904 = load i32, ptr %56, align 4, !tbaa !9
  %905 = mul nsw i32 %904, 4
  %906 = add nsw i32 %905, 1
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds %struct.ImVec2, ptr %903, i64 %907
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %908, ptr align 4 %67, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %909 = load ptr, ptr %8, align 8, !tbaa !5
  %910 = load i32, ptr %56, align 4, !tbaa !9
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds %struct.ImVec2, ptr %909, i64 %911
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %913 = load ptr, ptr %23, align 8, !tbaa !5
  %914 = load i32, ptr %56, align 4, !tbaa !9
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds %struct.ImVec2, ptr %913, i64 %915
  %917 = load float, ptr %55, align 4, !tbaa !13
  %918 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %916, float noundef %917)
  store <2 x float> %918, ptr %70, align 4
  %919 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %912, ptr noundef nonnull align 4 dereferenceable(8) %70)
  store <2 x float> %919, ptr %69, align 4
  %920 = load ptr, ptr %24, align 8, !tbaa !5
  %921 = load i32, ptr %56, align 4, !tbaa !9
  %922 = mul nsw i32 %921, 4
  %923 = add nsw i32 %922, 2
  %924 = sext i32 %923 to i64
  %925 = getelementptr inbounds %struct.ImVec2, ptr %920, i64 %924
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %925, ptr align 4 %69, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %926 = load ptr, ptr %8, align 8, !tbaa !5
  %927 = load i32, ptr %56, align 4, !tbaa !9
  %928 = sext i32 %927 to i64
  %929 = getelementptr inbounds %struct.ImVec2, ptr %926, i64 %928
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %930 = load ptr, ptr %23, align 8, !tbaa !5
  %931 = load i32, ptr %56, align 4, !tbaa !9
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds %struct.ImVec2, ptr %930, i64 %932
  %934 = load float, ptr %55, align 4, !tbaa !13
  %935 = fadd float %934, 1.000000e+00
  %936 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %933, float noundef %935)
  store <2 x float> %936, ptr %72, align 4
  %937 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %929, ptr noundef nonnull align 4 dereferenceable(8) %72)
  store <2 x float> %937, ptr %71, align 4
  %938 = load ptr, ptr %24, align 8, !tbaa !5
  %939 = load i32, ptr %56, align 4, !tbaa !9
  %940 = mul nsw i32 %939, 4
  %941 = add nsw i32 %940, 3
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds %struct.ImVec2, ptr %938, i64 %942
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %943, ptr align 4 %71, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %944

944:                                              ; preds = %833, %827
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  %945 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %946 = load i32, ptr %945, align 8, !tbaa !36
  store i32 %946, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %947

947:                                              ; preds = %1243, %944
  %948 = load i32, ptr %74, align 4, !tbaa !9
  %949 = load i32, ptr %14, align 4, !tbaa !9
  %950 = icmp slt i32 %948, %949
  br i1 %950, label %952, label %951

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

952:                                              ; preds = %947
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %953 = load i32, ptr %74, align 4, !tbaa !9
  %954 = add nsw i32 %953, 1
  %955 = load i32, ptr %9, align 4, !tbaa !9
  %956 = icmp eq i32 %954, %955
  br i1 %956, label %957, label %958

957:                                              ; preds = %952
  br label %961

958:                                              ; preds = %952
  %959 = load i32, ptr %74, align 4, !tbaa !9
  %960 = add nsw i32 %959, 1
  br label %961

961:                                              ; preds = %958, %957
  %962 = phi i32 [ 0, %957 ], [ %960, %958 ]
  store i32 %962, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %963 = load i32, ptr %74, align 4, !tbaa !9
  %964 = add nsw i32 %963, 1
  %965 = load i32, ptr %9, align 4, !tbaa !9
  %966 = icmp eq i32 %964, %965
  br i1 %966, label %967, label %970

967:                                              ; preds = %961
  %968 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %969 = load i32, ptr %968, align 8, !tbaa !36
  br label %973

970:                                              ; preds = %961
  %971 = load i32, ptr %73, align 4, !tbaa !9
  %972 = add i32 %971, 4
  br label %973

973:                                              ; preds = %970, %967
  %974 = phi i32 [ %969, %967 ], [ %972, %970 ]
  store i32 %974, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #9
  %975 = load ptr, ptr %23, align 8, !tbaa !5
  %976 = load i32, ptr %74, align 4, !tbaa !9
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds %struct.ImVec2, ptr %975, i64 %977
  %979 = getelementptr inbounds %struct.ImVec2, ptr %978, i32 0, i32 0
  %980 = load float, ptr %979, align 4, !tbaa !31
  %981 = load ptr, ptr %23, align 8, !tbaa !5
  %982 = load i32, ptr %75, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds %struct.ImVec2, ptr %981, i64 %983
  %985 = getelementptr inbounds %struct.ImVec2, ptr %984, i32 0, i32 0
  %986 = load float, ptr %985, align 4, !tbaa !31
  %987 = fadd float %980, %986
  %988 = fmul float %987, 5.000000e-01
  store float %988, ptr %77, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %989 = load ptr, ptr %23, align 8, !tbaa !5
  %990 = load i32, ptr %74, align 4, !tbaa !9
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds %struct.ImVec2, ptr %989, i64 %991
  %993 = getelementptr inbounds %struct.ImVec2, ptr %992, i32 0, i32 1
  %994 = load float, ptr %993, align 4, !tbaa !33
  %995 = load ptr, ptr %23, align 8, !tbaa !5
  %996 = load i32, ptr %75, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds %struct.ImVec2, ptr %995, i64 %997
  %999 = getelementptr inbounds %struct.ImVec2, ptr %998, i32 0, i32 1
  %1000 = load float, ptr %999, align 4, !tbaa !33
  %1001 = fadd float %994, %1000
  %1002 = fmul float %1001, 5.000000e-01
  store float %1002, ptr %78, align 4, !tbaa !13
  br label %1003

1003:                                             ; preds = %973
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %1004 = load float, ptr %77, align 4, !tbaa !13
  %1005 = load float, ptr %77, align 4, !tbaa !13
  %1006 = load float, ptr %78, align 4, !tbaa !13
  %1007 = load float, ptr %78, align 4, !tbaa !13
  %1008 = fmul float %1006, %1007
  %1009 = call float @llvm.fmuladd.f32(float %1004, float %1005, float %1008)
  store float %1009, ptr %79, align 4, !tbaa !13
  %1010 = load float, ptr %79, align 4, !tbaa !13
  %1011 = fcmp olt float %1010, 5.000000e-01
  br i1 %1011, label %1012, label %1013

1012:                                             ; preds = %1003
  store float 5.000000e-01, ptr %79, align 4, !tbaa !13
  br label %1013

1013:                                             ; preds = %1012, %1003
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %1014 = load float, ptr %79, align 4, !tbaa !13
  %1015 = fdiv float 1.000000e+00, %1014
  store float %1015, ptr %80, align 4, !tbaa !13
  %1016 = load float, ptr %80, align 4, !tbaa !13
  %1017 = load float, ptr %77, align 4, !tbaa !13
  %1018 = fmul float %1017, %1016
  store float %1018, ptr %77, align 4, !tbaa !13
  %1019 = load float, ptr %80, align 4, !tbaa !13
  %1020 = load float, ptr %78, align 4, !tbaa !13
  %1021 = fmul float %1020, %1019
  store float %1021, ptr %78, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  br label %1022

1022:                                             ; preds = %1013
  br label %1023

1023:                                             ; preds = %1022
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  %1024 = load float, ptr %77, align 4, !tbaa !13
  %1025 = load float, ptr %55, align 4, !tbaa !13
  %1026 = fadd float %1025, 1.000000e+00
  %1027 = fmul float %1024, %1026
  store float %1027, ptr %81, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %1028 = load float, ptr %78, align 4, !tbaa !13
  %1029 = load float, ptr %55, align 4, !tbaa !13
  %1030 = fadd float %1029, 1.000000e+00
  %1031 = fmul float %1028, %1030
  store float %1031, ptr %82, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  %1032 = load float, ptr %77, align 4, !tbaa !13
  %1033 = load float, ptr %55, align 4, !tbaa !13
  %1034 = fmul float %1032, %1033
  store float %1034, ptr %83, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #9
  %1035 = load float, ptr %78, align 4, !tbaa !13
  %1036 = load float, ptr %55, align 4, !tbaa !13
  %1037 = fmul float %1035, %1036
  store float %1037, ptr %84, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  %1038 = load ptr, ptr %24, align 8, !tbaa !5
  %1039 = load i32, ptr %75, align 4, !tbaa !9
  %1040 = mul nsw i32 %1039, 4
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds %struct.ImVec2, ptr %1038, i64 %1041
  store ptr %1042, ptr %85, align 8, !tbaa !5
  %1043 = load ptr, ptr %8, align 8, !tbaa !5
  %1044 = load i32, ptr %75, align 4, !tbaa !9
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds %struct.ImVec2, ptr %1043, i64 %1045
  %1047 = getelementptr inbounds %struct.ImVec2, ptr %1046, i32 0, i32 0
  %1048 = load float, ptr %1047, align 4, !tbaa !31
  %1049 = load float, ptr %81, align 4, !tbaa !13
  %1050 = fadd float %1048, %1049
  %1051 = load ptr, ptr %85, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.ImVec2, ptr %1051, i64 0
  %1053 = getelementptr inbounds %struct.ImVec2, ptr %1052, i32 0, i32 0
  store float %1050, ptr %1053, align 4, !tbaa !31
  %1054 = load ptr, ptr %8, align 8, !tbaa !5
  %1055 = load i32, ptr %75, align 4, !tbaa !9
  %1056 = sext i32 %1055 to i64
  %1057 = getelementptr inbounds %struct.ImVec2, ptr %1054, i64 %1056
  %1058 = getelementptr inbounds %struct.ImVec2, ptr %1057, i32 0, i32 1
  %1059 = load float, ptr %1058, align 4, !tbaa !33
  %1060 = load float, ptr %82, align 4, !tbaa !13
  %1061 = fadd float %1059, %1060
  %1062 = load ptr, ptr %85, align 8, !tbaa !5
  %1063 = getelementptr inbounds %struct.ImVec2, ptr %1062, i64 0
  %1064 = getelementptr inbounds %struct.ImVec2, ptr %1063, i32 0, i32 1
  store float %1061, ptr %1064, align 4, !tbaa !33
  %1065 = load ptr, ptr %8, align 8, !tbaa !5
  %1066 = load i32, ptr %75, align 4, !tbaa !9
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds %struct.ImVec2, ptr %1065, i64 %1067
  %1069 = getelementptr inbounds %struct.ImVec2, ptr %1068, i32 0, i32 0
  %1070 = load float, ptr %1069, align 4, !tbaa !31
  %1071 = load float, ptr %83, align 4, !tbaa !13
  %1072 = fadd float %1070, %1071
  %1073 = load ptr, ptr %85, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.ImVec2, ptr %1073, i64 1
  %1075 = getelementptr inbounds %struct.ImVec2, ptr %1074, i32 0, i32 0
  store float %1072, ptr %1075, align 4, !tbaa !31
  %1076 = load ptr, ptr %8, align 8, !tbaa !5
  %1077 = load i32, ptr %75, align 4, !tbaa !9
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds %struct.ImVec2, ptr %1076, i64 %1078
  %1080 = getelementptr inbounds %struct.ImVec2, ptr %1079, i32 0, i32 1
  %1081 = load float, ptr %1080, align 4, !tbaa !33
  %1082 = load float, ptr %84, align 4, !tbaa !13
  %1083 = fadd float %1081, %1082
  %1084 = load ptr, ptr %85, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.ImVec2, ptr %1084, i64 1
  %1086 = getelementptr inbounds %struct.ImVec2, ptr %1085, i32 0, i32 1
  store float %1083, ptr %1086, align 4, !tbaa !33
  %1087 = load ptr, ptr %8, align 8, !tbaa !5
  %1088 = load i32, ptr %75, align 4, !tbaa !9
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds %struct.ImVec2, ptr %1087, i64 %1089
  %1091 = getelementptr inbounds %struct.ImVec2, ptr %1090, i32 0, i32 0
  %1092 = load float, ptr %1091, align 4, !tbaa !31
  %1093 = load float, ptr %83, align 4, !tbaa !13
  %1094 = fsub float %1092, %1093
  %1095 = load ptr, ptr %85, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.ImVec2, ptr %1095, i64 2
  %1097 = getelementptr inbounds %struct.ImVec2, ptr %1096, i32 0, i32 0
  store float %1094, ptr %1097, align 4, !tbaa !31
  %1098 = load ptr, ptr %8, align 8, !tbaa !5
  %1099 = load i32, ptr %75, align 4, !tbaa !9
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds %struct.ImVec2, ptr %1098, i64 %1100
  %1102 = getelementptr inbounds %struct.ImVec2, ptr %1101, i32 0, i32 1
  %1103 = load float, ptr %1102, align 4, !tbaa !33
  %1104 = load float, ptr %84, align 4, !tbaa !13
  %1105 = fsub float %1103, %1104
  %1106 = load ptr, ptr %85, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.ImVec2, ptr %1106, i64 2
  %1108 = getelementptr inbounds %struct.ImVec2, ptr %1107, i32 0, i32 1
  store float %1105, ptr %1108, align 4, !tbaa !33
  %1109 = load ptr, ptr %8, align 8, !tbaa !5
  %1110 = load i32, ptr %75, align 4, !tbaa !9
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds %struct.ImVec2, ptr %1109, i64 %1111
  %1113 = getelementptr inbounds %struct.ImVec2, ptr %1112, i32 0, i32 0
  %1114 = load float, ptr %1113, align 4, !tbaa !31
  %1115 = load float, ptr %81, align 4, !tbaa !13
  %1116 = fsub float %1114, %1115
  %1117 = load ptr, ptr %85, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.ImVec2, ptr %1117, i64 3
  %1119 = getelementptr inbounds %struct.ImVec2, ptr %1118, i32 0, i32 0
  store float %1116, ptr %1119, align 4, !tbaa !31
  %1120 = load ptr, ptr %8, align 8, !tbaa !5
  %1121 = load i32, ptr %75, align 4, !tbaa !9
  %1122 = sext i32 %1121 to i64
  %1123 = getelementptr inbounds %struct.ImVec2, ptr %1120, i64 %1122
  %1124 = getelementptr inbounds %struct.ImVec2, ptr %1123, i32 0, i32 1
  %1125 = load float, ptr %1124, align 4, !tbaa !33
  %1126 = load float, ptr %82, align 4, !tbaa !13
  %1127 = fsub float %1125, %1126
  %1128 = load ptr, ptr %85, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct.ImVec2, ptr %1128, i64 3
  %1130 = getelementptr inbounds %struct.ImVec2, ptr %1129, i32 0, i32 1
  store float %1127, ptr %1130, align 4, !tbaa !33
  %1131 = load i32, ptr %76, align 4, !tbaa !9
  %1132 = add i32 %1131, 1
  %1133 = trunc i32 %1132 to i16
  %1134 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1135 = load ptr, ptr %1134, align 8, !tbaa !37
  %1136 = getelementptr inbounds i16, ptr %1135, i64 0
  store i16 %1133, ptr %1136, align 2, !tbaa !38
  %1137 = load i32, ptr %73, align 4, !tbaa !9
  %1138 = add i32 %1137, 1
  %1139 = trunc i32 %1138 to i16
  %1140 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1141 = load ptr, ptr %1140, align 8, !tbaa !37
  %1142 = getelementptr inbounds i16, ptr %1141, i64 1
  store i16 %1139, ptr %1142, align 2, !tbaa !38
  %1143 = load i32, ptr %73, align 4, !tbaa !9
  %1144 = add i32 %1143, 2
  %1145 = trunc i32 %1144 to i16
  %1146 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1147 = load ptr, ptr %1146, align 8, !tbaa !37
  %1148 = getelementptr inbounds i16, ptr %1147, i64 2
  store i16 %1145, ptr %1148, align 2, !tbaa !38
  %1149 = load i32, ptr %73, align 4, !tbaa !9
  %1150 = add i32 %1149, 2
  %1151 = trunc i32 %1150 to i16
  %1152 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1153 = load ptr, ptr %1152, align 8, !tbaa !37
  %1154 = getelementptr inbounds i16, ptr %1153, i64 3
  store i16 %1151, ptr %1154, align 2, !tbaa !38
  %1155 = load i32, ptr %76, align 4, !tbaa !9
  %1156 = add i32 %1155, 2
  %1157 = trunc i32 %1156 to i16
  %1158 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1159 = load ptr, ptr %1158, align 8, !tbaa !37
  %1160 = getelementptr inbounds i16, ptr %1159, i64 4
  store i16 %1157, ptr %1160, align 2, !tbaa !38
  %1161 = load i32, ptr %76, align 4, !tbaa !9
  %1162 = add i32 %1161, 1
  %1163 = trunc i32 %1162 to i16
  %1164 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1165 = load ptr, ptr %1164, align 8, !tbaa !37
  %1166 = getelementptr inbounds i16, ptr %1165, i64 5
  store i16 %1163, ptr %1166, align 2, !tbaa !38
  %1167 = load i32, ptr %76, align 4, !tbaa !9
  %1168 = add i32 %1167, 1
  %1169 = trunc i32 %1168 to i16
  %1170 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1171 = load ptr, ptr %1170, align 8, !tbaa !37
  %1172 = getelementptr inbounds i16, ptr %1171, i64 6
  store i16 %1169, ptr %1172, align 2, !tbaa !38
  %1173 = load i32, ptr %73, align 4, !tbaa !9
  %1174 = add i32 %1173, 1
  %1175 = trunc i32 %1174 to i16
  %1176 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1177 = load ptr, ptr %1176, align 8, !tbaa !37
  %1178 = getelementptr inbounds i16, ptr %1177, i64 7
  store i16 %1175, ptr %1178, align 2, !tbaa !38
  %1179 = load i32, ptr %73, align 4, !tbaa !9
  %1180 = add i32 %1179, 0
  %1181 = trunc i32 %1180 to i16
  %1182 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1183 = load ptr, ptr %1182, align 8, !tbaa !37
  %1184 = getelementptr inbounds i16, ptr %1183, i64 8
  store i16 %1181, ptr %1184, align 2, !tbaa !38
  %1185 = load i32, ptr %73, align 4, !tbaa !9
  %1186 = add i32 %1185, 0
  %1187 = trunc i32 %1186 to i16
  %1188 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1189 = load ptr, ptr %1188, align 8, !tbaa !37
  %1190 = getelementptr inbounds i16, ptr %1189, i64 9
  store i16 %1187, ptr %1190, align 2, !tbaa !38
  %1191 = load i32, ptr %76, align 4, !tbaa !9
  %1192 = add i32 %1191, 0
  %1193 = trunc i32 %1192 to i16
  %1194 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1195 = load ptr, ptr %1194, align 8, !tbaa !37
  %1196 = getelementptr inbounds i16, ptr %1195, i64 10
  store i16 %1193, ptr %1196, align 2, !tbaa !38
  %1197 = load i32, ptr %76, align 4, !tbaa !9
  %1198 = add i32 %1197, 1
  %1199 = trunc i32 %1198 to i16
  %1200 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1201 = load ptr, ptr %1200, align 8, !tbaa !37
  %1202 = getelementptr inbounds i16, ptr %1201, i64 11
  store i16 %1199, ptr %1202, align 2, !tbaa !38
  %1203 = load i32, ptr %76, align 4, !tbaa !9
  %1204 = add i32 %1203, 2
  %1205 = trunc i32 %1204 to i16
  %1206 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1207 = load ptr, ptr %1206, align 8, !tbaa !37
  %1208 = getelementptr inbounds i16, ptr %1207, i64 12
  store i16 %1205, ptr %1208, align 2, !tbaa !38
  %1209 = load i32, ptr %73, align 4, !tbaa !9
  %1210 = add i32 %1209, 2
  %1211 = trunc i32 %1210 to i16
  %1212 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1213 = load ptr, ptr %1212, align 8, !tbaa !37
  %1214 = getelementptr inbounds i16, ptr %1213, i64 13
  store i16 %1211, ptr %1214, align 2, !tbaa !38
  %1215 = load i32, ptr %73, align 4, !tbaa !9
  %1216 = add i32 %1215, 3
  %1217 = trunc i32 %1216 to i16
  %1218 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1219 = load ptr, ptr %1218, align 8, !tbaa !37
  %1220 = getelementptr inbounds i16, ptr %1219, i64 14
  store i16 %1217, ptr %1220, align 2, !tbaa !38
  %1221 = load i32, ptr %73, align 4, !tbaa !9
  %1222 = add i32 %1221, 3
  %1223 = trunc i32 %1222 to i16
  %1224 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1225 = load ptr, ptr %1224, align 8, !tbaa !37
  %1226 = getelementptr inbounds i16, ptr %1225, i64 15
  store i16 %1223, ptr %1226, align 2, !tbaa !38
  %1227 = load i32, ptr %76, align 4, !tbaa !9
  %1228 = add i32 %1227, 3
  %1229 = trunc i32 %1228 to i16
  %1230 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1231 = load ptr, ptr %1230, align 8, !tbaa !37
  %1232 = getelementptr inbounds i16, ptr %1231, i64 16
  store i16 %1229, ptr %1232, align 2, !tbaa !38
  %1233 = load i32, ptr %76, align 4, !tbaa !9
  %1234 = add i32 %1233, 2
  %1235 = trunc i32 %1234 to i16
  %1236 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1237 = load ptr, ptr %1236, align 8, !tbaa !37
  %1238 = getelementptr inbounds i16, ptr %1237, i64 17
  store i16 %1235, ptr %1238, align 2, !tbaa !38
  %1239 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1240 = load ptr, ptr %1239, align 8, !tbaa !37
  %1241 = getelementptr inbounds i16, ptr %1240, i64 18
  store ptr %1241, ptr %1239, align 8, !tbaa !37
  %1242 = load i32, ptr %76, align 4, !tbaa !9
  store i32 %1242, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1243

1243:                                             ; preds = %1023
  %1244 = load i32, ptr %74, align 4, !tbaa !9
  %1245 = add nsw i32 %1244, 1
  store i32 %1245, ptr %74, align 4, !tbaa !9
  br label %947, !llvm.loop !53

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

1247:                                             ; preds = %1332, %1246
  %1248 = load i32, ptr %86, align 4, !tbaa !9
  %1249 = load i32, ptr %9, align 4, !tbaa !9
  %1250 = icmp slt i32 %1248, %1249
  br i1 %1250, label %1252, label %1251

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

1252:                                             ; preds = %1247
  %1253 = load ptr, ptr %24, align 8, !tbaa !5
  %1254 = load i32, ptr %86, align 4, !tbaa !9
  %1255 = mul nsw i32 %1254, 4
  %1256 = add nsw i32 %1255, 0
  %1257 = sext i32 %1256 to i64
  %1258 = getelementptr inbounds %struct.ImVec2, ptr %1253, i64 %1257
  %1259 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1260 = load ptr, ptr %1259, align 8, !tbaa !48
  %1261 = getelementptr inbounds %struct.ImDrawVert, ptr %1260, i64 0
  %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 %98, i32 0, i32 7
  %1264 = load ptr, ptr %1263, align 8, !tbaa !48
  %1265 = getelementptr inbounds %struct.ImDrawVert, ptr %1264, i64 0
  %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 %17, align 4, !tbaa !9
  %1268 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1269 = load ptr, ptr %1268, align 8, !tbaa !48
  %1270 = getelementptr inbounds %struct.ImDrawVert, ptr %1269, i64 0
  %1271 = getelementptr inbounds %struct.ImDrawVert, ptr %1270, i32 0, i32 2
  store i32 %1267, ptr %1271, align 4, !tbaa !49
  %1272 = load ptr, ptr %24, align 8, !tbaa !5
  %1273 = load i32, ptr %86, align 4, !tbaa !9
  %1274 = mul nsw i32 %1273, 4
  %1275 = add nsw i32 %1274, 1
  %1276 = sext i32 %1275 to i64
  %1277 = getelementptr inbounds %struct.ImVec2, ptr %1272, i64 %1276
  %1278 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1279 = load ptr, ptr %1278, align 8, !tbaa !48
  %1280 = getelementptr inbounds %struct.ImDrawVert, ptr %1279, i64 1
  %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 %98, i32 0, i32 7
  %1283 = load ptr, ptr %1282, align 8, !tbaa !48
  %1284 = getelementptr inbounds %struct.ImDrawVert, ptr %1283, i64 1
  %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 %10, align 4, !tbaa !9
  %1287 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1288 = load ptr, ptr %1287, align 8, !tbaa !48
  %1289 = getelementptr inbounds %struct.ImDrawVert, ptr %1288, i64 1
  %1290 = getelementptr inbounds %struct.ImDrawVert, ptr %1289, i32 0, i32 2
  store i32 %1286, ptr %1290, align 4, !tbaa !49
  %1291 = load ptr, ptr %24, align 8, !tbaa !5
  %1292 = load i32, ptr %86, align 4, !tbaa !9
  %1293 = mul nsw i32 %1292, 4
  %1294 = add nsw i32 %1293, 2
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds %struct.ImVec2, ptr %1291, i64 %1295
  %1297 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1298 = load ptr, ptr %1297, align 8, !tbaa !48
  %1299 = getelementptr inbounds %struct.ImDrawVert, ptr %1298, i64 2
  %1300 = getelementptr inbounds %struct.ImDrawVert, ptr %1299, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1300, ptr align 4 %1296, i64 8, i1 false), !tbaa.struct !27
  %1301 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1302 = load ptr, ptr %1301, align 8, !tbaa !48
  %1303 = getelementptr inbounds %struct.ImDrawVert, ptr %1302, i64 2
  %1304 = getelementptr inbounds %struct.ImDrawVert, ptr %1303, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1304, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1305 = load i32, ptr %10, align 4, !tbaa !9
  %1306 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1307 = load ptr, ptr %1306, align 8, !tbaa !48
  %1308 = getelementptr inbounds %struct.ImDrawVert, ptr %1307, i64 2
  %1309 = getelementptr inbounds %struct.ImDrawVert, ptr %1308, i32 0, i32 2
  store i32 %1305, ptr %1309, align 4, !tbaa !49
  %1310 = load ptr, ptr %24, align 8, !tbaa !5
  %1311 = load i32, ptr %86, align 4, !tbaa !9
  %1312 = mul nsw i32 %1311, 4
  %1313 = add nsw i32 %1312, 3
  %1314 = sext i32 %1313 to i64
  %1315 = getelementptr inbounds %struct.ImVec2, ptr %1310, i64 %1314
  %1316 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1317 = load ptr, ptr %1316, align 8, !tbaa !48
  %1318 = getelementptr inbounds %struct.ImDrawVert, ptr %1317, i64 3
  %1319 = getelementptr inbounds %struct.ImDrawVert, ptr %1318, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1319, ptr align 4 %1315, i64 8, i1 false), !tbaa.struct !27
  %1320 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1321 = load ptr, ptr %1320, align 8, !tbaa !48
  %1322 = getelementptr inbounds %struct.ImDrawVert, ptr %1321, i64 3
  %1323 = getelementptr inbounds %struct.ImDrawVert, ptr %1322, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1323, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1324 = load i32, ptr %17, align 4, !tbaa !9
  %1325 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1326 = load ptr, ptr %1325, align 8, !tbaa !48
  %1327 = getelementptr inbounds %struct.ImDrawVert, ptr %1326, i64 3
  %1328 = getelementptr inbounds %struct.ImDrawVert, ptr %1327, i32 0, i32 2
  store i32 %1324, ptr %1328, align 4, !tbaa !49
  %1329 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1330 = load ptr, ptr %1329, align 8, !tbaa !48
  %1331 = getelementptr inbounds %struct.ImDrawVert, ptr %1330, i64 4
  store ptr %1331, ptr %1329, align 8, !tbaa !48
  br label %1332

1332:                                             ; preds = %1252
  %1333 = load i32, ptr %86, align 4, !tbaa !9
  %1334 = add nsw i32 %1333, 1
  store i32 %1334, ptr %86, align 4, !tbaa !9
  br label %1247, !llvm.loop !54

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

1336:                                             ; preds = %1335, %826
  %1337 = load i32, ptr %22, align 4, !tbaa !9
  %1338 = trunc i32 %1337 to i16
  %1339 = zext i16 %1338 to i32
  %1340 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1341 = load i32, ptr %1340, align 8, !tbaa !36
  %1342 = add i32 %1341, %1339
  store i32 %1342, ptr %1340, align 8, !tbaa !36
  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 %1587

1343:                                             ; preds = %113
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #9
  %1344 = load i32, ptr %14, align 4, !tbaa !9
  %1345 = mul nsw i32 %1344, 6
  store i32 %1345, ptr %87, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #9
  %1346 = load i32, ptr %14, align 4, !tbaa !9
  %1347 = mul nsw i32 %1346, 4
  store i32 %1347, ptr %88, align 4, !tbaa !9
  %1348 = load i32, ptr %87, align 4, !tbaa !9
  %1349 = load i32, ptr %88, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(224) %98, i32 noundef %1348, i32 noundef %1349)
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #9
  store i32 0, ptr %89, align 4, !tbaa !9
  br label %1350

1350:                                             ; preds = %1583, %1343
  %1351 = load i32, ptr %89, align 4, !tbaa !9
  %1352 = load i32, ptr %14, align 4, !tbaa !9
  %1353 = icmp slt i32 %1351, %1352
  br i1 %1353, label %1355, label %1354

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

1355:                                             ; preds = %1350
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #9
  %1356 = load i32, ptr %89, align 4, !tbaa !9
  %1357 = add nsw i32 %1356, 1
  %1358 = load i32, ptr %9, align 4, !tbaa !9
  %1359 = icmp eq i32 %1357, %1358
  br i1 %1359, label %1360, label %1361

1360:                                             ; preds = %1355
  br label %1364

1361:                                             ; preds = %1355
  %1362 = load i32, ptr %89, align 4, !tbaa !9
  %1363 = add nsw i32 %1362, 1
  br label %1364

1364:                                             ; preds = %1361, %1360
  %1365 = phi i32 [ 0, %1360 ], [ %1363, %1361 ]
  store i32 %1365, ptr %90, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %1366 = load ptr, ptr %8, align 8, !tbaa !5
  %1367 = load i32, ptr %89, align 4, !tbaa !9
  %1368 = sext i32 %1367 to i64
  %1369 = getelementptr inbounds %struct.ImVec2, ptr %1366, i64 %1368
  store ptr %1369, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #9
  %1370 = load ptr, ptr %8, align 8, !tbaa !5
  %1371 = load i32, ptr %90, align 4, !tbaa !9
  %1372 = sext i32 %1371 to i64
  %1373 = getelementptr inbounds %struct.ImVec2, ptr %1370, i64 %1372
  store ptr %1373, ptr %92, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #9
  %1374 = load ptr, ptr %92, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.ImVec2, ptr %1374, i32 0, i32 0
  %1376 = load float, ptr %1375, align 4, !tbaa !31
  %1377 = load ptr, ptr %91, align 8, !tbaa !5
  %1378 = getelementptr inbounds %struct.ImVec2, ptr %1377, i32 0, i32 0
  %1379 = load float, ptr %1378, align 4, !tbaa !31
  %1380 = fsub float %1376, %1379
  store float %1380, ptr %93, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #9
  %1381 = load ptr, ptr %92, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.ImVec2, ptr %1381, i32 0, i32 1
  %1383 = load float, ptr %1382, align 4, !tbaa !33
  %1384 = load ptr, ptr %91, align 8, !tbaa !5
  %1385 = getelementptr inbounds %struct.ImVec2, ptr %1384, i32 0, i32 1
  %1386 = load float, ptr %1385, align 4, !tbaa !33
  %1387 = fsub float %1383, %1386
  store float %1387, ptr %94, align 4, !tbaa !13
  br label %1388

1388:                                             ; preds = %1364
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  %1389 = load float, ptr %93, align 4, !tbaa !13
  %1390 = load float, ptr %93, align 4, !tbaa !13
  %1391 = load float, ptr %94, align 4, !tbaa !13
  %1392 = load float, ptr %94, align 4, !tbaa !13
  %1393 = fmul float %1391, %1392
  %1394 = call float @llvm.fmuladd.f32(float %1389, float %1390, float %1393)
  store float %1394, ptr %95, align 4, !tbaa !13
  %1395 = load float, ptr %95, align 4, !tbaa !13
  %1396 = fcmp ogt float %1395, 0.000000e+00
  br i1 %1396, label %1397, label %1407

1397:                                             ; preds = %1388
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #9
  %1398 = load float, ptr %95, align 4, !tbaa !13
  %1399 = call float @sqrtf(float noundef %1398) #9
  %1400 = fdiv float 1.000000e+00, %1399
  store float %1400, ptr %96, align 4, !tbaa !13
  %1401 = load float, ptr %96, align 4, !tbaa !13
  %1402 = load float, ptr %93, align 4, !tbaa !13
  %1403 = fmul float %1402, %1401
  store float %1403, ptr %93, align 4, !tbaa !13
  %1404 = load float, ptr %96, align 4, !tbaa !13
  %1405 = load float, ptr %94, align 4, !tbaa !13
  %1406 = fmul float %1405, %1404
  store float %1406, ptr %94, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #9
  br label %1407

1407:                                             ; preds = %1397, %1388
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1408

1408:                                             ; preds = %1407
  br label %1409

1409:                                             ; preds = %1408
  %1410 = load float, ptr %12, align 4, !tbaa !13
  %1411 = fmul float %1410, 5.000000e-01
  %1412 = load float, ptr %93, align 4, !tbaa !13
  %1413 = fmul float %1412, %1411
  store float %1413, ptr %93, align 4, !tbaa !13
  %1414 = load float, ptr %12, align 4, !tbaa !13
  %1415 = fmul float %1414, 5.000000e-01
  %1416 = load float, ptr %94, align 4, !tbaa !13
  %1417 = fmul float %1416, %1415
  store float %1417, ptr %94, align 4, !tbaa !13
  %1418 = load ptr, ptr %91, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.ImVec2, ptr %1418, i32 0, i32 0
  %1420 = load float, ptr %1419, align 4, !tbaa !31
  %1421 = load float, ptr %94, align 4, !tbaa !13
  %1422 = fadd float %1420, %1421
  %1423 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1424 = load ptr, ptr %1423, align 8, !tbaa !48
  %1425 = getelementptr inbounds %struct.ImDrawVert, ptr %1424, i64 0
  %1426 = getelementptr inbounds %struct.ImDrawVert, ptr %1425, i32 0, i32 0
  %1427 = getelementptr inbounds %struct.ImVec2, ptr %1426, i32 0, i32 0
  store float %1422, ptr %1427, align 4, !tbaa !55
  %1428 = load ptr, ptr %91, align 8, !tbaa !5
  %1429 = getelementptr inbounds %struct.ImVec2, ptr %1428, i32 0, i32 1
  %1430 = load float, ptr %1429, align 4, !tbaa !33
  %1431 = load float, ptr %93, align 4, !tbaa !13
  %1432 = fsub float %1430, %1431
  %1433 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1434 = load ptr, ptr %1433, align 8, !tbaa !48
  %1435 = getelementptr inbounds %struct.ImDrawVert, ptr %1434, i64 0
  %1436 = getelementptr inbounds %struct.ImDrawVert, ptr %1435, i32 0, i32 0
  %1437 = getelementptr inbounds %struct.ImVec2, ptr %1436, i32 0, i32 1
  store float %1432, ptr %1437, align 4, !tbaa !56
  %1438 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1439 = load ptr, ptr %1438, align 8, !tbaa !48
  %1440 = getelementptr inbounds %struct.ImDrawVert, ptr %1439, i64 0
  %1441 = getelementptr inbounds %struct.ImDrawVert, ptr %1440, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1441, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1442 = load i32, ptr %10, align 4, !tbaa !9
  %1443 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1444 = load ptr, ptr %1443, align 8, !tbaa !48
  %1445 = getelementptr inbounds %struct.ImDrawVert, ptr %1444, i64 0
  %1446 = getelementptr inbounds %struct.ImDrawVert, ptr %1445, i32 0, i32 2
  store i32 %1442, ptr %1446, align 4, !tbaa !49
  %1447 = load ptr, ptr %92, align 8, !tbaa !5
  %1448 = getelementptr inbounds %struct.ImVec2, ptr %1447, i32 0, i32 0
  %1449 = load float, ptr %1448, align 4, !tbaa !31
  %1450 = load float, ptr %94, align 4, !tbaa !13
  %1451 = fadd float %1449, %1450
  %1452 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1453 = load ptr, ptr %1452, align 8, !tbaa !48
  %1454 = getelementptr inbounds %struct.ImDrawVert, ptr %1453, i64 1
  %1455 = getelementptr inbounds %struct.ImDrawVert, ptr %1454, i32 0, i32 0
  %1456 = getelementptr inbounds %struct.ImVec2, ptr %1455, i32 0, i32 0
  store float %1451, ptr %1456, align 4, !tbaa !55
  %1457 = load ptr, ptr %92, align 8, !tbaa !5
  %1458 = getelementptr inbounds %struct.ImVec2, ptr %1457, i32 0, i32 1
  %1459 = load float, ptr %1458, align 4, !tbaa !33
  %1460 = load float, ptr %93, align 4, !tbaa !13
  %1461 = fsub float %1459, %1460
  %1462 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1463 = load ptr, ptr %1462, align 8, !tbaa !48
  %1464 = getelementptr inbounds %struct.ImDrawVert, ptr %1463, i64 1
  %1465 = getelementptr inbounds %struct.ImDrawVert, ptr %1464, i32 0, i32 0
  %1466 = getelementptr inbounds %struct.ImVec2, ptr %1465, i32 0, i32 1
  store float %1461, ptr %1466, align 4, !tbaa !56
  %1467 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1468 = load ptr, ptr %1467, align 8, !tbaa !48
  %1469 = getelementptr inbounds %struct.ImDrawVert, ptr %1468, i64 1
  %1470 = getelementptr inbounds %struct.ImDrawVert, ptr %1469, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1470, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1471 = load i32, ptr %10, align 4, !tbaa !9
  %1472 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1473 = load ptr, ptr %1472, align 8, !tbaa !48
  %1474 = getelementptr inbounds %struct.ImDrawVert, ptr %1473, i64 1
  %1475 = getelementptr inbounds %struct.ImDrawVert, ptr %1474, i32 0, i32 2
  store i32 %1471, ptr %1475, align 4, !tbaa !49
  %1476 = load ptr, ptr %92, align 8, !tbaa !5
  %1477 = getelementptr inbounds %struct.ImVec2, ptr %1476, i32 0, i32 0
  %1478 = load float, ptr %1477, align 4, !tbaa !31
  %1479 = load float, ptr %94, align 4, !tbaa !13
  %1480 = fsub float %1478, %1479
  %1481 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1482 = load ptr, ptr %1481, align 8, !tbaa !48
  %1483 = getelementptr inbounds %struct.ImDrawVert, ptr %1482, i64 2
  %1484 = getelementptr inbounds %struct.ImDrawVert, ptr %1483, i32 0, i32 0
  %1485 = getelementptr inbounds %struct.ImVec2, ptr %1484, i32 0, i32 0
  store float %1480, ptr %1485, align 4, !tbaa !55
  %1486 = load ptr, ptr %92, align 8, !tbaa !5
  %1487 = getelementptr inbounds %struct.ImVec2, ptr %1486, i32 0, i32 1
  %1488 = load float, ptr %1487, align 4, !tbaa !33
  %1489 = load float, ptr %93, align 4, !tbaa !13
  %1490 = fadd float %1488, %1489
  %1491 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1492 = load ptr, ptr %1491, align 8, !tbaa !48
  %1493 = getelementptr inbounds %struct.ImDrawVert, ptr %1492, i64 2
  %1494 = getelementptr inbounds %struct.ImDrawVert, ptr %1493, i32 0, i32 0
  %1495 = getelementptr inbounds %struct.ImVec2, ptr %1494, i32 0, i32 1
  store float %1490, ptr %1495, align 4, !tbaa !56
  %1496 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1497 = load ptr, ptr %1496, align 8, !tbaa !48
  %1498 = getelementptr inbounds %struct.ImDrawVert, ptr %1497, i64 2
  %1499 = getelementptr inbounds %struct.ImDrawVert, ptr %1498, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1499, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1500 = load i32, ptr %10, align 4, !tbaa !9
  %1501 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1502 = load ptr, ptr %1501, align 8, !tbaa !48
  %1503 = getelementptr inbounds %struct.ImDrawVert, ptr %1502, i64 2
  %1504 = getelementptr inbounds %struct.ImDrawVert, ptr %1503, i32 0, i32 2
  store i32 %1500, ptr %1504, align 4, !tbaa !49
  %1505 = load ptr, ptr %91, align 8, !tbaa !5
  %1506 = getelementptr inbounds %struct.ImVec2, ptr %1505, i32 0, i32 0
  %1507 = load float, ptr %1506, align 4, !tbaa !31
  %1508 = load float, ptr %94, align 4, !tbaa !13
  %1509 = fsub float %1507, %1508
  %1510 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1511 = load ptr, ptr %1510, align 8, !tbaa !48
  %1512 = getelementptr inbounds %struct.ImDrawVert, ptr %1511, i64 3
  %1513 = getelementptr inbounds %struct.ImDrawVert, ptr %1512, i32 0, i32 0
  %1514 = getelementptr inbounds %struct.ImVec2, ptr %1513, i32 0, i32 0
  store float %1509, ptr %1514, align 4, !tbaa !55
  %1515 = load ptr, ptr %91, align 8, !tbaa !5
  %1516 = getelementptr inbounds %struct.ImVec2, ptr %1515, i32 0, i32 1
  %1517 = load float, ptr %1516, align 4, !tbaa !33
  %1518 = load float, ptr %93, align 4, !tbaa !13
  %1519 = fadd float %1517, %1518
  %1520 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1521 = load ptr, ptr %1520, align 8, !tbaa !48
  %1522 = getelementptr inbounds %struct.ImDrawVert, ptr %1521, i64 3
  %1523 = getelementptr inbounds %struct.ImDrawVert, ptr %1522, i32 0, i32 0
  %1524 = getelementptr inbounds %struct.ImVec2, ptr %1523, i32 0, i32 1
  store float %1519, ptr %1524, align 4, !tbaa !56
  %1525 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1526 = load ptr, ptr %1525, align 8, !tbaa !48
  %1527 = getelementptr inbounds %struct.ImDrawVert, ptr %1526, i64 3
  %1528 = getelementptr inbounds %struct.ImDrawVert, ptr %1527, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1528, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !27
  %1529 = load i32, ptr %10, align 4, !tbaa !9
  %1530 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1531 = load ptr, ptr %1530, align 8, !tbaa !48
  %1532 = getelementptr inbounds %struct.ImDrawVert, ptr %1531, i64 3
  %1533 = getelementptr inbounds %struct.ImDrawVert, ptr %1532, i32 0, i32 2
  store i32 %1529, ptr %1533, align 4, !tbaa !49
  %1534 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 7
  %1535 = load ptr, ptr %1534, align 8, !tbaa !48
  %1536 = getelementptr inbounds %struct.ImDrawVert, ptr %1535, i64 4
  store ptr %1536, ptr %1534, align 8, !tbaa !48
  %1537 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1538 = load i32, ptr %1537, align 8, !tbaa !36
  %1539 = trunc i32 %1538 to i16
  %1540 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1541 = load ptr, ptr %1540, align 8, !tbaa !37
  %1542 = getelementptr inbounds i16, ptr %1541, i64 0
  store i16 %1539, ptr %1542, align 2, !tbaa !38
  %1543 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1544 = load i32, ptr %1543, align 8, !tbaa !36
  %1545 = add i32 %1544, 1
  %1546 = trunc i32 %1545 to i16
  %1547 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1548 = load ptr, ptr %1547, align 8, !tbaa !37
  %1549 = getelementptr inbounds i16, ptr %1548, i64 1
  store i16 %1546, ptr %1549, align 2, !tbaa !38
  %1550 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1551 = load i32, ptr %1550, align 8, !tbaa !36
  %1552 = add i32 %1551, 2
  %1553 = trunc i32 %1552 to i16
  %1554 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1555 = load ptr, ptr %1554, align 8, !tbaa !37
  %1556 = getelementptr inbounds i16, ptr %1555, i64 2
  store i16 %1553, ptr %1556, align 2, !tbaa !38
  %1557 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1558 = load i32, ptr %1557, align 8, !tbaa !36
  %1559 = trunc i32 %1558 to i16
  %1560 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1561 = load ptr, ptr %1560, align 8, !tbaa !37
  %1562 = getelementptr inbounds i16, ptr %1561, i64 3
  store i16 %1559, ptr %1562, align 2, !tbaa !38
  %1563 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1564 = load i32, ptr %1563, align 8, !tbaa !36
  %1565 = add i32 %1564, 2
  %1566 = trunc i32 %1565 to i16
  %1567 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1568 = load ptr, ptr %1567, align 8, !tbaa !37
  %1569 = getelementptr inbounds i16, ptr %1568, i64 4
  store i16 %1566, ptr %1569, align 2, !tbaa !38
  %1570 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1571 = load i32, ptr %1570, align 8, !tbaa !36
  %1572 = add i32 %1571, 3
  %1573 = trunc i32 %1572 to i16
  %1574 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1575 = load ptr, ptr %1574, align 8, !tbaa !37
  %1576 = getelementptr inbounds i16, ptr %1575, i64 5
  store i16 %1573, ptr %1576, align 2, !tbaa !38
  %1577 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 8
  %1578 = load ptr, ptr %1577, align 8, !tbaa !37
  %1579 = getelementptr inbounds i16, ptr %1578, i64 6
  store ptr %1579, ptr %1577, align 8, !tbaa !37
  %1580 = getelementptr inbounds %struct.ImDrawList, ptr %98, i32 0, i32 6
  %1581 = load i32, ptr %1580, align 8, !tbaa !36
  %1582 = add i32 %1581, 4
  store i32 %1582, ptr %1580, align 8, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  br label %1583

1583:                                             ; preds = %1409
  %1584 = load i32, ptr %89, align 4, !tbaa !9
  %1585 = add nsw i32 %1584, 1
  store i32 %1585, ptr %89, align 4, !tbaa !9
  br label %1350, !llvm.loop !57

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

1587:                                             ; preds = %1586, %1336
  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 %1588

1588:                                             ; preds = %1587, %101
  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, !6, i64 56, !6, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !20, i64 96, !21, i64 112, !22, i64 128, !23, i64 144, !25, i64 200}
!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 = !{!"_ZTS9ImDrawCmd", !24, i64 0, !6, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !6, i64 40, !6, i64 48}
!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, !10, i64 48}
!31 = !{!32, !14, i64 0}
!32 = !{!"_ZTS6ImVec2", !14, i64 0, !14, i64 4}
!33 = !{!32, !14, i64 4}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!16, !10, i64 72}
!37 = !{!16, !6, i64 88}
!38 = !{!39, !39, i64 0}
!39 = !{!"short", !7, i64 0}
!40 = distinct !{!40, !35}
!41 = !{!42, !6, i64 208}
!42 = !{!"_ZTS20ImDrawListSharedData", !32, 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}
!43 = !{i64 0, i64 4, !13, i64 4, i64 4, !13, i64 8, i64 4, !13, i64 12, i64 4, !13}
!44 = !{!24, !14, i64 0}
!45 = !{!24, !14, i64 4}
!46 = !{!24, !14, i64 8}
!47 = !{!24, !14, i64 12}
!48 = !{!16, !6, i64 80}
!49 = !{!50, !10, i64 16}
!50 = !{!"_ZTS10ImDrawVert", !32, i64 0, !32, i64 8, !10, i64 16}
!51 = distinct !{!51, !35}
!52 = distinct !{!52, !35}
!53 = distinct !{!53, !35}
!54 = distinct !{!54, !35}
!55 = !{!50, !14, i64 0}
!56 = !{!50, !14, i64 4}
!57 = distinct !{!57, !35}


; 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(224), 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(224) %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 48
  %29 = load i32, ptr %28, align 8, !tbaa !22
  %30 = and i32 %29, 1
  %.not = icmp eq i32 %30, 0
  br i1 %.not, label %.lr.ph474, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %22
  %31 = fcmp ule float %5, 1.000000e+00
  %32 = and i32 %3, 16777215
  %33 = tail call noundef float @_ZL5ImMaxIfET_S0_S0_(float noundef %5, float noundef 1.000000e+00)
  %34 = fptosi float %33 to i32
  %35 = sitofp i32 %34 to float
  %36 = fsub float %33, %35
  %37 = load i32, ptr %28, align 8, !tbaa !22
  %38 = and i32 %37, 2
  %39 = icmp ne i32 %38, 0
  %40 = icmp slt i32 %34, 63
  %or.cond = select i1 %39, i1 %40, i1 false
  %41 = fcmp ole float %36, 0x3EE4F8B580000000
  %spec.select = select i1 %or.cond, i1 %41, i1 false
  %.v = select i1 %31, i32 12, i32 18
  %.v448 = select i1 %spec.select, i32 6, i32 %.v
  %42 = mul nsw i32 %.v448, %27
  %43 = shl nuw nsw i32 %2, 1
  %44 = shl nsw i32 %2, 2
  %45 = mul nuw nsw i32 %2, 3
  %46 = select i1 %31, i32 %45, i32 %44
  %47 = select i1 %spec.select, i32 %43, i32 %46
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(224) %0, i32 noundef %42, i32 noundef %47)
  %48 = or i1 %31, %spec.select
  %49 = select i1 %48, i32 3, i32 5
  %50 = mul nuw nsw i32 %49, %2
  %51 = zext nneg i32 %50 to i64
  %52 = shl nuw nsw i64 %51, 3
  %53 = alloca i8, i64 %52, align 16
  %54 = zext nneg i32 %2 to i64
  %55 = getelementptr %struct.ImVec2, ptr %53, i64 %54
  %wide.trip.count = zext nneg i32 %27 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %74
  br i1 %4, label %81, label %.thread

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

69:                                               ; preds = %.lr.ph
  %sqrt = tail call float @llvm.sqrt.f32(float %67)
  %70 = fdiv float 1.000000e+00, %sqrt
  %71 = insertelement <2 x float> poison, float %70, i64 0
  %72 = shufflevector <2 x float> %71, <2 x float> poison, <2 x i32> zeroinitializer
  %73 = fmul <2 x float> %63, %72
  br label %74

74:                                               ; preds = %69, %.lr.ph
  %75 = phi <2 x float> [ %73, %69 ], [ %63, %.lr.ph ]
  %76 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %indvars.iv
  %77 = extractelement <2 x float> %75, i64 1
  store float %77, ptr %76, align 8, !tbaa !24
  %78 = extractelement <2 x float> %75, i64 0
  %79 = fneg float %78
  %80 = getelementptr inbounds i8, ptr %76, i64 4
  store float %79, ptr %80, align 4, !tbaa !26
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !27

81:                                               ; preds = %._crit_edge
  br i1 %48, label %86, label %238

.thread:                                          ; preds = %._crit_edge
  %82 = getelementptr i8, ptr %55, i64 -16
  %83 = zext nneg i32 %26 to i64
  %84 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %83
  %85 = load i64, ptr %82, align 8
  store i64 %85, ptr %84, align 8
  br i1 %48, label %.thread446, label %.thread447

86:                                               ; preds = %81
  %87 = tail call float @llvm.fmuladd.f32(float %33, float 5.000000e-01, float 1.000000e+00)
  %88 = select i1 %spec.select, float %87, float 1.000000e+00
  br label %.lr.ph463

.thread446:                                       ; preds = %.thread
  %89 = tail call float @llvm.fmuladd.f32(float %33, float 5.000000e-01, float 1.000000e+00)
  %90 = select i1 %spec.select, float %89, float 1.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %91 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef %90)
  store <2 x float> %91, ptr %7, align 8
  %92 = 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> %92, ptr %55, 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
  %93 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef %90)
  store <2 x float> %93, ptr %8, align 8
  %94 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %8)
  %95 = getelementptr inbounds i8, ptr %55, i64 8
  store <2 x float> %94, ptr %95, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %96 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %83
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %97 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %83
  %98 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %97, float noundef %90)
  store <2 x float> %98, ptr %9, align 8
  %99 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %96, ptr noundef nonnull align 4 dereferenceable(8) %9)
  %100 = shl nuw nsw i32 %26, 1
  %101 = zext nneg i32 %100 to i64
  %102 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %101
  store <2 x float> %99, ptr %102, 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
  %103 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %97, float noundef %90)
  store <2 x float> %103, ptr %10, align 8
  %104 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %96, ptr noundef nonnull align 4 dereferenceable(8) %10)
  %105 = or disjoint i32 %100, 1
  %106 = zext nneg i32 %105 to i64
  %107 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %106
  store <2 x float> %104, ptr %107, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %.lr.ph463

.lr.ph463:                                        ; preds = %.thread446, %86
  %108 = phi float [ %90, %.thread446 ], [ %88, %86 ]
  %109 = getelementptr inbounds i8, ptr %0, i64 72
  %110 = load i32, ptr %109, align 8, !tbaa !29
  %111 = select i1 %spec.select, i32 2, i32 3
  %112 = getelementptr inbounds i8, ptr %0, i64 88
  %.promoted465 = load ptr, ptr %112, align 8, !tbaa !30
  %wide.trip.count490 = zext nneg i32 %27 to i64
  %113 = insertelement <2 x float> poison, float %108, i64 0
  %114 = shufflevector <2 x float> %113, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.backedge

.lr.ph467:                                        ; preds = %.thread516
  %115 = getelementptr inbounds i8, ptr %0, i64 80
  %smax495 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count496 = zext nneg i32 %smax495 to i64
  %.pre511 = load ptr, ptr %115, align 8, !tbaa !31
  br label %213

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph463
  %indvars.iv487 = phi i64 [ 0, %.lr.ph463 ], [ %indvars.iv.next488, %.backedge.backedge ]
  %116 = phi ptr [ %.promoted465, %.lr.ph463 ], [ %.be, %.backedge.backedge ]
  %.0419461 = phi i32 [ %110, %.lr.ph463 ], [ %122, %.backedge.backedge ]
  %indvars.iv.next488 = add nuw nsw i64 %indvars.iv487, 1
  %117 = icmp eq i64 %indvars.iv.next488, %54
  %118 = trunc nuw nsw i64 %indvars.iv.next488 to i32
  %119 = select i1 %117, i32 0, i32 %118
  %120 = load i32, ptr %109, align 8
  %121 = add i32 %.0419461, %111
  %122 = select i1 %117, i32 %120, i32 %121
  %123 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %indvars.iv487
  %124 = zext nneg i32 %119 to i64
  %125 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %124
  %126 = shl nuw nsw i32 %119, 1
  %127 = zext nneg i32 %126 to i64
  %128 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %127
  %129 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %124
  %130 = load <2 x float>, ptr %123, align 8, !tbaa !23
  %131 = load <2 x float>, ptr %125, align 8, !tbaa !23
  %132 = fadd <2 x float> %130, %131
  %133 = fmul <2 x float> %132, <float 5.000000e-01, float 5.000000e-01>
  %134 = fmul <2 x float> %133, %133
  %135 = extractelement <2 x float> %134, i64 1
  %136 = extractelement <2 x float> %133, i64 0
  %137 = call float @llvm.fmuladd.f32(float %136, float %136, float %135)
  %138 = fcmp olt float %137, 5.000000e-01
  %.0423 = select i1 %138, float 5.000000e-01, float %137
  %139 = fdiv float 1.000000e+00, %.0423
  %140 = insertelement <2 x float> poison, float %139, i64 0
  %141 = shufflevector <2 x float> %140, <2 x float> poison, <2 x i32> zeroinitializer
  %142 = fmul <2 x float> %133, %141
  %143 = fmul <2 x float> %114, %142
  %144 = shufflevector <2 x float> %143, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %145 = load <2 x float>, ptr %129, align 4, !tbaa !23
  %146 = shufflevector <2 x float> %145, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %147 = fadd <4 x float> %146, %144
  %148 = fsub <4 x float> %146, %144
  %149 = shufflevector <4 x float> %147, <4 x float> %148, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
  store <4 x float> %149, ptr %128, align 8, !tbaa !23
  %150 = trunc i32 %122 to i16
  store i16 %150, ptr %116, align 2, !tbaa !32
  %151 = trunc i32 %.0419461 to i16
  %152 = getelementptr inbounds i8, ptr %116, i64 2
  store i16 %151, ptr %152, align 2, !tbaa !32
  %153 = getelementptr inbounds i8, ptr %116, i64 4
  %154 = getelementptr inbounds i8, ptr %116, i64 8
  %155 = getelementptr inbounds i8, ptr %116, i64 10
  br i1 %spec.select, label %156, label %.thread516

156:                                              ; preds = %.backedge
  %157 = add i16 %151, 1
  store i16 %157, ptr %153, align 2, !tbaa !32
  %158 = add i16 %150, 1
  %159 = getelementptr inbounds i8, ptr %116, i64 6
  store i16 %158, ptr %159, align 2, !tbaa !32
  store i16 %157, ptr %154, align 2, !tbaa !32
  store i16 %150, ptr %155, align 2, !tbaa !32
  %160 = getelementptr inbounds i8, ptr %116, i64 12
  store ptr %160, ptr %112, align 8, !tbaa !30
  %exitcond491.not = icmp eq i64 %indvars.iv.next488, %wide.trip.count490
  br i1 %exitcond491.not, label %._crit_edge464, label %.backedge.backedge

.backedge.backedge:                               ; preds = %156, %.thread516
  %.be = phi ptr [ %160, %156 ], [ %172, %.thread516 ]
  br label %.backedge, !llvm.loop !34

.thread516:                                       ; preds = %.backedge
  %161 = add i16 %151, 2
  store i16 %161, ptr %153, align 2, !tbaa !32
  %162 = getelementptr inbounds i8, ptr %116, i64 6
  store i16 %161, ptr %162, align 2, !tbaa !32
  %163 = add i16 %150, 2
  store i16 %163, ptr %154, align 2, !tbaa !32
  store i16 %150, ptr %155, align 2, !tbaa !32
  %164 = add i16 %150, 1
  %165 = getelementptr inbounds i8, ptr %116, i64 12
  store i16 %164, ptr %165, align 2, !tbaa !32
  %166 = add i16 %151, 1
  %167 = getelementptr inbounds i8, ptr %116, i64 14
  store i16 %166, ptr %167, align 2, !tbaa !32
  %168 = getelementptr inbounds i8, ptr %116, i64 16
  store i16 %151, ptr %168, align 2, !tbaa !32
  %169 = getelementptr inbounds i8, ptr %116, i64 18
  store i16 %151, ptr %169, align 2, !tbaa !32
  %170 = getelementptr inbounds i8, ptr %116, i64 20
  store i16 %150, ptr %170, align 2, !tbaa !32
  %171 = getelementptr inbounds i8, ptr %116, i64 22
  store i16 %164, ptr %171, align 2, !tbaa !32
  %172 = getelementptr inbounds i8, ptr %116, i64 24
  store ptr %172, ptr %112, align 8, !tbaa !30
  %exitcond491.not517 = icmp eq i64 %indvars.iv.next488, %wide.trip.count490
  br i1 %exitcond491.not517, label %.lr.ph467, label %.backedge.backedge

._crit_edge464:                                   ; preds = %156
  %173 = load ptr, ptr %23, align 8, !tbaa !5
  %174 = getelementptr inbounds i8, ptr %173, i64 208
  %175 = load ptr, ptr %174, align 8, !tbaa !35
  %176 = sext i32 %34 to i64
  %177 = getelementptr inbounds %struct.ImVec4, ptr %175, i64 %176
  %178 = load <4 x float>, ptr %177, align 4, !tbaa !23
  %179 = fcmp une float %36, 0.000000e+00
  br i1 %179, label %180, label %.lr.ph470

180:                                              ; preds = %._crit_edge464
  %181 = getelementptr i8, ptr %177, i64 16
  %182 = load <4 x float>, ptr %181, align 4, !tbaa !23
  %183 = fsub <4 x float> %182, %178
  %184 = insertelement <4 x float> poison, float %36, i64 0
  %185 = shufflevector <4 x float> %184, <4 x float> poison, <4 x i32> zeroinitializer
  %186 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %183, <4 x float> %185, <4 x float> %178)
  br label %.lr.ph470

.lr.ph470:                                        ; preds = %._crit_edge464, %180
  %187 = phi <4 x float> [ %186, %180 ], [ %178, %._crit_edge464 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %188 = extractelement <4 x float> %187, i64 0
  %189 = extractelement <4 x float> %187, i64 1
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %11, float noundef %188, float noundef %189)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  %190 = extractelement <4 x float> %187, i64 2
  %191 = extractelement <4 x float> %187, i64 3
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %190, float noundef %191)
  %192 = getelementptr inbounds i8, ptr %0, i64 80
  %smax501 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count502 = zext nneg i32 %smax501 to i64
  %.pre512 = load ptr, ptr %192, align 8, !tbaa !31
  br label %193

._crit_edge471:                                   ; preds = %193
  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 %.loopexit450

193:                                              ; preds = %.lr.ph470, %193
  %194 = phi ptr [ %.pre512, %.lr.ph470 ], [ %212, %193 ]
  %indvars.iv498 = phi i64 [ 0, %.lr.ph470 ], [ %indvars.iv.next499, %193 ]
  %195 = shl nuw nsw i64 %indvars.iv498, 1
  %196 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %195
  %197 = load i64, ptr %196, align 8
  store i64 %197, ptr %194, align 4
  %198 = load ptr, ptr %192, align 8, !tbaa !31
  %199 = getelementptr inbounds i8, ptr %198, i64 8
  %200 = load i64, ptr %11, align 8
  store i64 %200, ptr %199, align 4
  %201 = load ptr, ptr %192, align 8, !tbaa !31
  %202 = getelementptr inbounds i8, ptr %201, i64 16
  store i32 %3, ptr %202, align 4, !tbaa !37
  %203 = or disjoint i64 %195, 1
  %204 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %203
  %205 = getelementptr inbounds i8, ptr %201, i64 20
  %206 = load i64, ptr %204, align 8
  store i64 %206, ptr %205, align 4
  %207 = load ptr, ptr %192, align 8, !tbaa !31
  %208 = getelementptr inbounds i8, ptr %207, i64 28
  %209 = load i64, ptr %12, align 8
  store i64 %209, ptr %208, align 4
  %210 = load ptr, ptr %192, align 8, !tbaa !31
  %211 = getelementptr inbounds i8, ptr %210, i64 36
  store i32 %3, ptr %211, align 4, !tbaa !37
  %212 = getelementptr inbounds i8, ptr %210, i64 40
  store ptr %212, ptr %192, align 8, !tbaa !31
  %indvars.iv.next499 = add nuw nsw i64 %indvars.iv498, 1
  %exitcond503.not = icmp eq i64 %indvars.iv.next499, %wide.trip.count502
  br i1 %exitcond503.not, label %._crit_edge471, label %193, !llvm.loop !39

213:                                              ; preds = %.lr.ph467, %213
  %214 = phi ptr [ %.pre511, %.lr.ph467 ], [ %237, %213 ]
  %indvars.iv492 = phi i64 [ 0, %.lr.ph467 ], [ %indvars.iv.next493, %213 ]
  %215 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv492
  %216 = load i64, ptr %215, align 4
  store i64 %216, ptr %214, align 4
  %217 = load ptr, ptr %115, align 8, !tbaa !31
  %218 = getelementptr inbounds i8, ptr %217, i64 8
  store i64 %25, ptr %218, align 4
  %219 = load ptr, ptr %115, align 8, !tbaa !31
  %220 = getelementptr inbounds i8, ptr %219, i64 16
  store i32 %3, ptr %220, align 4, !tbaa !37
  %221 = shl nuw nsw i64 %indvars.iv492, 1
  %222 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %221
  %223 = getelementptr inbounds i8, ptr %219, i64 20
  %224 = load i64, ptr %222, align 8
  store i64 %224, ptr %223, align 4
  %225 = load ptr, ptr %115, align 8, !tbaa !31
  %226 = getelementptr inbounds i8, ptr %225, i64 28
  store i64 %25, ptr %226, align 4
  %227 = load ptr, ptr %115, align 8, !tbaa !31
  %228 = getelementptr inbounds i8, ptr %227, i64 36
  store i32 %32, ptr %228, align 4, !tbaa !37
  %229 = or disjoint i64 %221, 1
  %230 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %229
  %231 = getelementptr inbounds i8, ptr %227, i64 40
  %232 = load i64, ptr %230, align 8
  store i64 %232, ptr %231, align 4
  %233 = load ptr, ptr %115, align 8, !tbaa !31
  %234 = getelementptr inbounds i8, ptr %233, i64 48
  store i64 %25, ptr %234, align 4
  %235 = load ptr, ptr %115, align 8, !tbaa !31
  %236 = getelementptr inbounds i8, ptr %235, i64 56
  store i32 %32, ptr %236, align 4, !tbaa !37
  %237 = getelementptr inbounds i8, ptr %235, i64 60
  store ptr %237, ptr %115, align 8, !tbaa !31
  %indvars.iv.next493 = add nuw nsw i64 %indvars.iv492, 1
  %exitcond497.not = icmp eq i64 %indvars.iv.next493, %wide.trip.count496
  br i1 %exitcond497.not, label %.loopexit450, label %213, !llvm.loop !40

238:                                              ; preds = %81
  %239 = fadd float %33, -1.000000e+00
  %240 = fmul float %239, 5.000000e-01
  br label %.lr.ph457

.thread447:                                       ; preds = %.thread
  %241 = fadd float %33, -1.000000e+00
  %242 = fmul float %241, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %243 = fadd float %242, 1.000000e+00
  %244 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef %243)
  store <2 x float> %244, ptr %13, align 8
  %245 = 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> %245, ptr %55, 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
  %246 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef %242)
  store <2 x float> %246, ptr %14, align 8
  %247 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %14)
  %248 = getelementptr inbounds i8, ptr %55, i64 8
  store <2 x float> %247, ptr %248, 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
  %249 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef %242)
  store <2 x float> %249, ptr %15, align 8
  %250 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %15)
  %251 = getelementptr inbounds i8, ptr %55, i64 16
  store <2 x float> %250, ptr %251, 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
  %252 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef %243)
  store <2 x float> %252, ptr %16, align 8
  %253 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %16)
  %254 = getelementptr inbounds i8, ptr %55, i64 24
  store <2 x float> %253, ptr %254, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %255 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %83
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  %256 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %83
  %257 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %256, float noundef %243)
  store <2 x float> %257, ptr %17, align 8
  %258 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %255, ptr noundef nonnull align 4 dereferenceable(8) %17)
  %259 = shl nsw i32 %26, 2
  %260 = zext nneg i32 %259 to i64
  %261 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %260
  store <2 x float> %258, ptr %261, 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
  %262 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %256, float noundef %242)
  store <2 x float> %262, ptr %18, align 8
  %263 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %255, ptr noundef nonnull align 4 dereferenceable(8) %18)
  %264 = or disjoint i32 %259, 1
  %265 = zext nneg i32 %264 to i64
  %266 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %265
  store <2 x float> %263, ptr %266, 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
  %267 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %256, float noundef %242)
  store <2 x float> %267, ptr %19, align 8
  %268 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %255, ptr noundef nonnull align 4 dereferenceable(8) %19)
  %269 = or disjoint i32 %259, 2
  %270 = zext nneg i32 %269 to i64
  %271 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %270
  store <2 x float> %268, ptr %271, 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
  %272 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %256, float noundef %243)
  store <2 x float> %272, ptr %20, align 8
  %273 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %255, ptr noundef nonnull align 4 dereferenceable(8) %20)
  %274 = or disjoint i32 %259, 3
  %275 = zext nneg i32 %274 to i64
  %276 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %275
  store <2 x float> %273, ptr %276, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %.lr.ph457

.lr.ph457:                                        ; preds = %.thread447, %238
  %277 = phi float [ %242, %.thread447 ], [ %240, %238 ]
  %278 = getelementptr inbounds i8, ptr %0, i64 72
  %279 = load i32, ptr %278, align 8, !tbaa !29
  %280 = fadd float %277, 1.000000e+00
  %281 = getelementptr inbounds i8, ptr %0, i64 88
  %.promoted = load ptr, ptr %281, align 8, !tbaa !30
  %wide.trip.count480 = zext nneg i32 %27 to i64
  %282 = insertelement <4 x float> poison, float %280, i64 0
  %283 = insertelement <4 x float> %282, float %277, i64 1
  %284 = shufflevector <4 x float> %283, <4 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  br label %286

.lr.ph459:                                        ; preds = %286
  store ptr %347, ptr %281, align 8, !tbaa !30
  %285 = getelementptr inbounds i8, ptr %0, i64 80
  %smax = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count485 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %285, align 8, !tbaa !31
  br label %348

286:                                              ; preds = %.lr.ph457, %286
  %indvars.iv477 = phi i64 [ 0, %.lr.ph457 ], [ %indvars.iv.next478, %286 ]
  %287 = phi ptr [ %.promoted, %.lr.ph457 ], [ %347, %286 ]
  %.0428454 = phi i32 [ %279, %.lr.ph457 ], [ %293, %286 ]
  %indvars.iv.next478 = add nuw nsw i64 %indvars.iv477, 1
  %288 = icmp eq i64 %indvars.iv.next478, %54
  %289 = trunc nuw nsw i64 %indvars.iv.next478 to i32
  %290 = select i1 %288, i32 0, i32 %289
  %291 = load i32, ptr %278, align 8
  %292 = add i32 %.0428454, 4
  %293 = select i1 %288, i32 %291, i32 %292
  %294 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %indvars.iv477
  %295 = zext nneg i32 %290 to i64
  %296 = getelementptr inbounds %struct.ImVec2, ptr %53, i64 %295
  %297 = shl nsw i32 %290, 2
  %298 = zext nneg i32 %297 to i64
  %299 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %298
  %300 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %295
  %301 = load <2 x float>, ptr %294, align 8, !tbaa !23
  %302 = load <2 x float>, ptr %296, align 8, !tbaa !23
  %303 = fadd <2 x float> %301, %302
  %304 = fmul <2 x float> %303, <float 5.000000e-01, float 5.000000e-01>
  %305 = fmul <2 x float> %304, %304
  %306 = extractelement <2 x float> %305, i64 1
  %307 = extractelement <2 x float> %304, i64 0
  %308 = call float @llvm.fmuladd.f32(float %307, float %307, float %306)
  %309 = fcmp olt float %308, 5.000000e-01
  %.0424 = select i1 %309, float 5.000000e-01, float %308
  %310 = fdiv float 1.000000e+00, %.0424
  %311 = insertelement <2 x float> poison, float %310, i64 0
  %312 = shufflevector <2 x float> %311, <2 x float> poison, <2 x i32> zeroinitializer
  %313 = fmul <2 x float> %304, %312
  %314 = shufflevector <2 x float> %313, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %315 = fmul <4 x float> %284, %314
  %316 = load <2 x float>, ptr %300, align 4, !tbaa !23
  %317 = shufflevector <2 x float> %316, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %318 = fadd <4 x float> %317, %315
  store <4 x float> %318, ptr %299, align 8, !tbaa !23
  %319 = getelementptr inbounds i8, ptr %299, i64 16
  %320 = fsub <4 x float> %317, %315
  %321 = shufflevector <4 x float> %320, <4 x float> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
  store <4 x float> %321, ptr %319, align 8, !tbaa !23
  %322 = trunc i32 %293 to i16
  %323 = add i16 %322, 1
  store i16 %323, ptr %287, align 2, !tbaa !32
  %324 = trunc i32 %.0428454 to i16
  %325 = add i16 %324, 1
  %326 = getelementptr inbounds i8, ptr %287, i64 2
  store i16 %325, ptr %326, align 2, !tbaa !32
  %327 = add i16 %324, 2
  %328 = getelementptr inbounds i8, ptr %287, i64 4
  store i16 %327, ptr %328, align 2, !tbaa !32
  %329 = getelementptr inbounds i8, ptr %287, i64 6
  store i16 %327, ptr %329, align 2, !tbaa !32
  %330 = add i16 %322, 2
  %331 = getelementptr inbounds i8, ptr %287, i64 8
  store i16 %330, ptr %331, align 2, !tbaa !32
  %332 = getelementptr inbounds i8, ptr %287, i64 10
  store i16 %323, ptr %332, align 2, !tbaa !32
  %333 = getelementptr inbounds i8, ptr %287, i64 12
  store i16 %323, ptr %333, align 2, !tbaa !32
  %334 = getelementptr inbounds i8, ptr %287, i64 14
  store i16 %325, ptr %334, align 2, !tbaa !32
  %335 = getelementptr inbounds i8, ptr %287, i64 16
  store i16 %324, ptr %335, align 2, !tbaa !32
  %336 = getelementptr inbounds i8, ptr %287, i64 18
  store i16 %324, ptr %336, align 2, !tbaa !32
  %337 = getelementptr inbounds i8, ptr %287, i64 20
  store i16 %322, ptr %337, align 2, !tbaa !32
  %338 = getelementptr inbounds i8, ptr %287, i64 22
  store i16 %323, ptr %338, align 2, !tbaa !32
  %339 = getelementptr inbounds i8, ptr %287, i64 24
  store i16 %330, ptr %339, align 2, !tbaa !32
  %340 = getelementptr inbounds i8, ptr %287, i64 26
  store i16 %327, ptr %340, align 2, !tbaa !32
  %341 = add i16 %324, 3
  %342 = getelementptr inbounds i8, ptr %287, i64 28
  store i16 %341, ptr %342, align 2, !tbaa !32
  %343 = getelementptr inbounds i8, ptr %287, i64 30
  store i16 %341, ptr %343, align 2, !tbaa !32
  %344 = add i16 %322, 3
  %345 = getelementptr inbounds i8, ptr %287, i64 32
  store i16 %344, ptr %345, align 2, !tbaa !32
  %346 = getelementptr inbounds i8, ptr %287, i64 34
  store i16 %330, ptr %346, align 2, !tbaa !32
  %347 = getelementptr inbounds i8, ptr %287, i64 36
  %exitcond481.not = icmp eq i64 %indvars.iv.next478, %wide.trip.count480
  br i1 %exitcond481.not, label %.lr.ph459, label %286, !llvm.loop !41

348:                                              ; preds = %.lr.ph459, %348
  %349 = phi ptr [ %.pre, %.lr.ph459 ], [ %381, %348 ]
  %indvars.iv482 = phi i64 [ 0, %.lr.ph459 ], [ %indvars.iv.next483, %348 ]
  %350 = shl nsw i64 %indvars.iv482, 2
  %351 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %350
  %352 = load i64, ptr %351, align 8
  store i64 %352, ptr %349, align 4
  %353 = load ptr, ptr %285, align 8, !tbaa !31
  %354 = getelementptr inbounds i8, ptr %353, i64 8
  store i64 %25, ptr %354, align 4
  %355 = load ptr, ptr %285, align 8, !tbaa !31
  %356 = getelementptr inbounds i8, ptr %355, i64 16
  store i32 %32, ptr %356, align 4, !tbaa !37
  %357 = or disjoint i64 %350, 1
  %358 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %357
  %359 = getelementptr inbounds i8, ptr %355, i64 20
  %360 = load i64, ptr %358, align 8
  store i64 %360, ptr %359, align 4
  %361 = load ptr, ptr %285, align 8, !tbaa !31
  %362 = getelementptr inbounds i8, ptr %361, i64 28
  store i64 %25, ptr %362, align 4
  %363 = load ptr, ptr %285, align 8, !tbaa !31
  %364 = getelementptr inbounds i8, ptr %363, i64 36
  store i32 %3, ptr %364, align 4, !tbaa !37
  %365 = or disjoint i64 %350, 2
  %366 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %365
  %367 = getelementptr inbounds i8, ptr %363, i64 40
  %368 = load i64, ptr %366, align 8
  store i64 %368, ptr %367, align 4
  %369 = load ptr, ptr %285, align 8, !tbaa !31
  %370 = getelementptr inbounds i8, ptr %369, i64 48
  store i64 %25, ptr %370, align 4
  %371 = load ptr, ptr %285, align 8, !tbaa !31
  %372 = getelementptr inbounds i8, ptr %371, i64 56
  store i32 %3, ptr %372, align 4, !tbaa !37
  %373 = or disjoint i64 %350, 3
  %374 = getelementptr inbounds %struct.ImVec2, ptr %55, i64 %373
  %375 = getelementptr inbounds i8, ptr %371, i64 60
  %376 = load i64, ptr %374, align 8
  store i64 %376, ptr %375, align 4
  %377 = load ptr, ptr %285, align 8, !tbaa !31
  %378 = getelementptr inbounds i8, ptr %377, i64 68
  store i64 %25, ptr %378, align 4
  %379 = load ptr, ptr %285, align 8, !tbaa !31
  %380 = getelementptr inbounds i8, ptr %379, i64 76
  store i32 %32, ptr %380, align 4, !tbaa !37
  %381 = getelementptr inbounds i8, ptr %379, i64 80
  store ptr %381, ptr %285, align 8, !tbaa !31
  %indvars.iv.next483 = add nuw nsw i64 %indvars.iv482, 1
  %exitcond486.not = icmp eq i64 %indvars.iv.next483, %wide.trip.count485
  br i1 %exitcond486.not, label %.loopexit450, label %348, !llvm.loop !42

.loopexit450:                                     ; preds = %348, %213, %._crit_edge471
  %382 = and i32 %47, 65535
  %383 = getelementptr inbounds i8, ptr %0, i64 72
  %384 = load i32, ptr %383, align 8, !tbaa !29
  %385 = add i32 %384, %382
  store i32 %385, ptr %383, align 8, !tbaa !29
  br label %.loopexit

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

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

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

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

.loopexit:                                        ; preds = %417, %.loopexit450, %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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #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, !11, i64 56, !11, i64 64, !8, i64 72, !11, i64 80, !11, i64 88, !14, i64 96, !15, i64 112, !16, i64 128, !17, i64 144, !20, i64 200}
!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 = !{!"_ZTS9ImDrawCmd", !18, i64 0, !11, i64 16, !8, i64 24, !8, i64 28, !8, i64 32, !11, i64 40, !11, i64 48}
!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, !8, i64 48}
!23 = !{!19, !19, i64 0}
!24 = !{!25, !19, i64 0}
!25 = !{!"_ZTS6ImVec2", !19, i64 0, !19, i64 4}
!26 = !{!25, !19, i64 4}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!6, !8, i64 72}
!30 = !{!6, !11, i64 88}
!31 = !{!6, !11, i64 80}
!32 = !{!33, !33, i64 0}
!33 = !{!"short", !9, i64 0}
!34 = distinct !{!34, !28}
!35 = !{!36, !11, i64 208}
!36 = !{!"_ZTS20ImDrawListSharedData", !25, 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}
!37 = !{!38, !8, i64 16}
!38 = !{!"_ZTS10ImDrawVert", !25, i64 0, !25, i64 8, !8, i64 16}
!39 = distinct !{!39, !28}
!40 = distinct !{!40, !28}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}
!43 = !{!38, !19, i64 0}
!44 = !{!38, !19, i64 4}
!45 = distinct !{!45, !28}


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