; LLVM IR from Samson-Mano/EM_Propogation_simulation :: EM_Propogation_simulation/src/ImGui (imgui_draw)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

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

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

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

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

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

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

100:                                              ; preds = %6
  %101 = load i32, ptr %10, align 4, !tbaa !9
  %102 = and i32 %101, -16777216
  %103 = icmp eq i32 %102, 0
  br i1 %103, label %104, label %105

104:                                              ; preds = %100, %6
  br label %1557

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

115:                                              ; preds = %105
  %116 = load i32, ptr %9, align 4, !tbaa !9
  br label %120

117:                                              ; preds = %105
  %118 = load i32, ptr %9, align 4, !tbaa !9
  %119 = sub nsw i32 %118, 1
  br label %120

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

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

148:                                              ; preds = %131
  %149 = load i32, ptr %19, align 4, !tbaa !9
  %150 = icmp slt i32 %149, 63
  br i1 %150, label %151, label %157

151:                                              ; preds = %148
  %152 = load float, ptr %20, align 4, !tbaa !11
  %153 = fcmp ole float %152, 0x3EE4F8B580000000
  br i1 %153, label %154, label %157

154:                                              ; preds = %151
  %155 = load float, ptr %17, align 4, !tbaa !11
  %156 = fcmp oeq float %155, 1.000000e+00
  br label %157

157:                                              ; preds = %154, %151, %148, %131
  %158 = phi i1 [ false, %151 ], [ false, %148 ], [ false, %131 ], [ %156, %154 ]
  %159 = zext i1 %158 to i8
  store i8 %159, ptr %21, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  %160 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %161 = trunc i8 %160 to i1
  br i1 %161, label %162, label %165

162:                                              ; preds = %157
  %163 = load i32, ptr %15, align 4, !tbaa !9
  %164 = mul nsw i32 %163, 6
  br label %176

165:                                              ; preds = %157
  %166 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %167 = trunc i8 %166 to i1
  br i1 %167, label %168, label %171

168:                                              ; preds = %165
  %169 = load i32, ptr %15, align 4, !tbaa !9
  %170 = mul nsw i32 %169, 18
  br label %174

171:                                              ; preds = %165
  %172 = load i32, ptr %15, align 4, !tbaa !9
  %173 = mul nsw i32 %172, 12
  br label %174

174:                                              ; preds = %171, %168
  %175 = phi i32 [ %170, %168 ], [ %173, %171 ]
  br label %176

176:                                              ; preds = %174, %162
  %177 = phi i32 [ %164, %162 ], [ %175, %174 ]
  store i32 %177, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  %178 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %179 = trunc i8 %178 to i1
  br i1 %179, label %180, label %183

180:                                              ; preds = %176
  %181 = load i32, ptr %9, align 4, !tbaa !9
  %182 = mul nsw i32 %181, 2
  br label %194

183:                                              ; preds = %176
  %184 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %185 = trunc i8 %184 to i1
  br i1 %185, label %186, label %189

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

189:                                              ; preds = %183
  %190 = load i32, ptr %9, align 4, !tbaa !9
  %191 = mul nsw i32 %190, 3
  br label %192

192:                                              ; preds = %189, %186
  %193 = phi i32 [ %188, %186 ], [ %191, %189 ]
  br label %194

194:                                              ; preds = %192, %180
  %195 = phi i32 [ %182, %180 ], [ %193, %192 ]
  store i32 %195, ptr %23, align 4, !tbaa !9
  %196 = load i32, ptr %22, align 4, !tbaa !9
  %197 = load i32, ptr %23, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %97, i32 noundef %196, i32 noundef %197)
  %198 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 5
  %199 = load ptr, ptr %198, align 8, !tbaa !15
  %200 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %199, i32 0, i32 7
  %201 = load i32, ptr %9, align 4, !tbaa !9
  %202 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %203 = trunc i8 %202 to i1
  br i1 %203, label %208, label %204

204:                                              ; preds = %194
  %205 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %206 = trunc i8 %205 to i1
  %207 = xor i1 %206, true
  br label %208

208:                                              ; preds = %204, %194
  %209 = phi i1 [ true, %194 ], [ %207, %204 ]
  %210 = zext i1 %209 to i64
  %211 = select i1 %209, i32 3, i32 5
  %212 = mul nsw i32 %201, %211
  call void @_ZN8ImVectorI6ImVec2E15reserve_discardEi(ptr noundef nonnull align 8 dereferenceable(16) %200, i32 noundef %212)
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %213 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 5
  %214 = load ptr, ptr %213, align 8, !tbaa !15
  %215 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %214, i32 0, i32 7
  %216 = getelementptr inbounds %struct.ImVector, ptr %215, i32 0, i32 2
  %217 = load ptr, ptr %216, align 8, !tbaa !32
  store ptr %217, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %218 = load ptr, ptr %24, align 8, !tbaa !5
  %219 = load i32, ptr %9, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds %struct.ImVec2, ptr %218, i64 %220
  store ptr %221, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %295, %208
  %223 = load i32, ptr %26, align 4, !tbaa !9
  %224 = load i32, ptr %15, align 4, !tbaa !9
  %225 = icmp slt i32 %223, %224
  br i1 %225, label %227, label %226

226:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  br label %298

227:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  %228 = load i32, ptr %26, align 4, !tbaa !9
  %229 = add nsw i32 %228, 1
  %230 = load i32, ptr %9, align 4, !tbaa !9
  %231 = icmp eq i32 %229, %230
  br i1 %231, label %232, label %233

232:                                              ; preds = %227
  br label %236

233:                                              ; preds = %227
  %234 = load i32, ptr %26, align 4, !tbaa !9
  %235 = add nsw i32 %234, 1
  br label %236

236:                                              ; preds = %233, %232
  %237 = phi i32 [ 0, %232 ], [ %235, %233 ]
  store i32 %237, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  %238 = load ptr, ptr %8, align 8, !tbaa !5
  %239 = load i32, ptr %27, 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 0
  %243 = load float, ptr %242, align 4, !tbaa !35
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = load i32, ptr %26, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds %struct.ImVec2, ptr %244, i64 %246
  %248 = getelementptr inbounds %struct.ImVec2, ptr %247, i32 0, i32 0
  %249 = load float, ptr %248, align 4, !tbaa !35
  %250 = fsub float %243, %249
  store float %250, ptr %28, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = load i32, ptr %27, align 4, !tbaa !9
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds %struct.ImVec2, ptr %251, i64 %253
  %255 = getelementptr inbounds %struct.ImVec2, ptr %254, i32 0, i32 1
  %256 = load float, ptr %255, align 4, !tbaa !36
  %257 = load ptr, ptr %8, align 8, !tbaa !5
  %258 = load i32, ptr %26, align 4, !tbaa !9
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds %struct.ImVec2, ptr %257, i64 %259
  %261 = getelementptr inbounds %struct.ImVec2, ptr %260, i32 0, i32 1
  %262 = load float, ptr %261, align 4, !tbaa !36
  %263 = fsub float %256, %262
  store float %263, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  %264 = load float, ptr %28, align 4, !tbaa !11
  %265 = load float, ptr %28, align 4, !tbaa !11
  %266 = load float, ptr %29, align 4, !tbaa !11
  %267 = load float, ptr %29, align 4, !tbaa !11
  %268 = fmul float %266, %267
  %269 = call float @llvm.fmuladd.f32(float %264, float %265, float %268)
  store float %269, ptr %30, align 4, !tbaa !11
  %270 = load float, ptr %30, align 4, !tbaa !11
  %271 = fcmp ogt float %270, 0.000000e+00
  br i1 %271, label %272, label %281

272:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  %273 = load float, ptr %30, align 4, !tbaa !11
  %274 = call noundef float @_ZL7ImRsqrtf(float noundef %273)
  store float %274, ptr %31, align 4, !tbaa !11
  %275 = load float, ptr %31, align 4, !tbaa !11
  %276 = load float, ptr %28, align 4, !tbaa !11
  %277 = fmul float %276, %275
  store float %277, ptr %28, align 4, !tbaa !11
  %278 = load float, ptr %31, align 4, !tbaa !11
  %279 = load float, ptr %29, align 4, !tbaa !11
  %280 = fmul float %279, %278
  store float %280, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %281

281:                                              ; preds = %272, %236
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  %282 = load float, ptr %29, align 4, !tbaa !11
  %283 = load ptr, ptr %24, align 8, !tbaa !5
  %284 = load i32, ptr %26, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds %struct.ImVec2, ptr %283, i64 %285
  %287 = getelementptr inbounds %struct.ImVec2, ptr %286, i32 0, i32 0
  store float %282, ptr %287, align 4, !tbaa !35
  %288 = load float, ptr %28, align 4, !tbaa !11
  %289 = fneg float %288
  %290 = load ptr, ptr %24, align 8, !tbaa !5
  %291 = load i32, ptr %26, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds %struct.ImVec2, ptr %290, i64 %292
  %294 = getelementptr inbounds %struct.ImVec2, ptr %293, i32 0, i32 1
  store float %289, ptr %294, align 4, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  br label %295

295:                                              ; preds = %281
  %296 = load i32, ptr %26, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %26, align 4, !tbaa !9
  br label %222, !llvm.loop !37

298:                                              ; preds = %226
  %299 = load i8, ptr %13, align 1, !tbaa !13, !range !28, !noundef !29
  %300 = trunc i8 %299 to i1
  br i1 %300, label %312, label %301

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

312:                                              ; preds = %301, %298
  %313 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %314 = trunc i8 %313 to i1
  br i1 %314, label %318, label %315

315:                                              ; preds = %312
  %316 = load i8, ptr %16, align 1, !tbaa !13, !range !28, !noundef !29
  %317 = trunc i8 %316 to i1
  br i1 %317, label %792, label %318

318:                                              ; preds = %315, %312
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %319 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %320 = trunc i8 %319 to i1
  br i1 %320, label %321, label %324

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

324:                                              ; preds = %318
  %325 = load float, ptr %17, align 4, !tbaa !11
  br label %326

326:                                              ; preds = %324, %321
  %327 = phi float [ %323, %321 ], [ %325, %324 ]
  store float %327, ptr %32, align 4, !tbaa !11
  %328 = load i8, ptr %13, align 1, !tbaa !13, !range !28, !noundef !29
  %329 = trunc i8 %328 to i1
  br i1 %329, label %389, label %330

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

389:                                              ; preds = %330, %326
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  %390 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %391 = load i32, ptr %390, align 4, !tbaa !39
  store i32 %391, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #10
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %392

392:                                              ; preds = %649, %389
  %393 = load i32, ptr %42, align 4, !tbaa !9
  %394 = load i32, ptr %15, align 4, !tbaa !9
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %397, label %396

396:                                              ; preds = %392
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %652

397:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  %398 = load i32, ptr %42, align 4, !tbaa !9
  %399 = add nsw i32 %398, 1
  %400 = load i32, ptr %9, align 4, !tbaa !9
  %401 = icmp eq i32 %399, %400
  br i1 %401, label %402, label %403

402:                                              ; preds = %397
  br label %406

403:                                              ; preds = %397
  %404 = load i32, ptr %42, align 4, !tbaa !9
  %405 = add nsw i32 %404, 1
  br label %406

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

412:                                              ; preds = %406
  %413 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %414 = load i32, ptr %413, align 4, !tbaa !39
  br label %422

415:                                              ; preds = %406
  %416 = load i32, ptr %41, align 4, !tbaa !9
  %417 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %418 = trunc i8 %417 to i1
  %419 = zext i1 %418 to i64
  %420 = select i1 %418, i32 2, i32 3
  %421 = add i32 %416, %420
  br label %422

422:                                              ; preds = %415, %412
  %423 = phi i32 [ %414, %412 ], [ %421, %415 ]
  store i32 %423, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #10
  %424 = load ptr, ptr %24, align 8, !tbaa !5
  %425 = load i32, ptr %42, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds %struct.ImVec2, ptr %424, i64 %426
  %428 = getelementptr inbounds %struct.ImVec2, ptr %427, i32 0, i32 0
  %429 = load float, ptr %428, align 4, !tbaa !35
  %430 = load ptr, ptr %24, align 8, !tbaa !5
  %431 = load i32, ptr %43, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds %struct.ImVec2, ptr %430, i64 %432
  %434 = getelementptr inbounds %struct.ImVec2, ptr %433, i32 0, i32 0
  %435 = load float, ptr %434, align 4, !tbaa !35
  %436 = fadd float %429, %435
  %437 = fmul float %436, 5.000000e-01
  store float %437, ptr %45, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #10
  %438 = load ptr, ptr %24, align 8, !tbaa !5
  %439 = load i32, ptr %42, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds %struct.ImVec2, ptr %438, i64 %440
  %442 = getelementptr inbounds %struct.ImVec2, ptr %441, i32 0, i32 1
  %443 = load float, ptr %442, align 4, !tbaa !36
  %444 = load ptr, ptr %24, align 8, !tbaa !5
  %445 = load i32, ptr %43, align 4, !tbaa !9
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds %struct.ImVec2, ptr %444, i64 %446
  %448 = getelementptr inbounds %struct.ImVec2, ptr %447, i32 0, i32 1
  %449 = load float, ptr %448, align 4, !tbaa !36
  %450 = fadd float %443, %449
  %451 = fmul float %450, 5.000000e-01
  store float %451, ptr %46, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #10
  %452 = load float, ptr %45, align 4, !tbaa !11
  %453 = load float, ptr %45, align 4, !tbaa !11
  %454 = load float, ptr %46, align 4, !tbaa !11
  %455 = load float, ptr %46, align 4, !tbaa !11
  %456 = fmul float %454, %455
  %457 = call float @llvm.fmuladd.f32(float %452, float %453, float %456)
  store float %457, ptr %47, align 4, !tbaa !11
  %458 = load float, ptr %47, align 4, !tbaa !11
  %459 = fcmp ogt float %458, 0x3EB0C6F7A0000000
  br i1 %459, label %460, label %473

460:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #10
  %461 = load float, ptr %47, align 4, !tbaa !11
  %462 = fdiv float 1.000000e+00, %461
  store float %462, ptr %48, align 4, !tbaa !11
  %463 = load float, ptr %48, align 4, !tbaa !11
  %464 = fcmp ogt float %463, 1.000000e+02
  br i1 %464, label %465, label %466

465:                                              ; preds = %460
  store float 1.000000e+02, ptr %48, align 4, !tbaa !11
  br label %466

466:                                              ; preds = %465, %460
  %467 = load float, ptr %48, align 4, !tbaa !11
  %468 = load float, ptr %45, align 4, !tbaa !11
  %469 = fmul float %468, %467
  store float %469, ptr %45, align 4, !tbaa !11
  %470 = load float, ptr %48, align 4, !tbaa !11
  %471 = load float, ptr %46, align 4, !tbaa !11
  %472 = fmul float %471, %470
  store float %472, ptr %46, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  br label %473

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

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

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

647:                                              ; preds = %571, %531
  %648 = load i32, ptr %44, align 4, !tbaa !9
  store i32 %648, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %649

649:                                              ; preds = %647
  %650 = load i32, ptr %42, align 4, !tbaa !9
  %651 = add nsw i32 %650, 1
  store i32 %651, ptr %42, align 4, !tbaa !9
  br label %392, !llvm.loop !43

652:                                              ; preds = %396
  %653 = load i8, ptr %21, align 1, !tbaa !13, !range !28, !noundef !29
  %654 = trunc i8 %653 to i1
  br i1 %654, label %655, label %722

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

671:                                              ; preds = %718, %655
  %672 = load i32, ptr %53, align 4, !tbaa !9
  %673 = load i32, ptr %9, align 4, !tbaa !9
  %674 = icmp slt i32 %672, %673
  br i1 %674, label %676, label %675

675:                                              ; preds = %671
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  br label %721

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

718:                                              ; preds = %676
  %719 = load i32, ptr %53, align 4, !tbaa !9
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %53, align 4, !tbaa !9
  br label %671, !llvm.loop !53

721:                                              ; preds = %675
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #10
  br label %791

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

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

727:                                              ; preds = %723
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  br label %790

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

787:                                              ; preds = %728
  %788 = load i32, ptr %54, align 4, !tbaa !9
  %789 = add nsw i32 %788, 1
  store i32 %789, ptr %54, align 4, !tbaa !9
  br label %723, !llvm.loop !54

790:                                              ; preds = %727
  br label %791

791:                                              ; preds = %790, %721
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %1309

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

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

914:                                              ; preds = %799, %792
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #10
  %915 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %916 = load i32, ptr %915, align 4, !tbaa !39
  store i32 %916, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #10
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %917

917:                                              ; preds = %1216, %914
  %918 = load i32, ptr %74, align 4, !tbaa !9
  %919 = load i32, ptr %15, align 4, !tbaa !9
  %920 = icmp slt i32 %918, %919
  br i1 %920, label %922, label %921

921:                                              ; preds = %917
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #10
  br label %1219

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

927:                                              ; preds = %922
  br label %931

928:                                              ; preds = %922
  %929 = load i32, ptr %74, align 4, !tbaa !9
  %930 = add nsw i32 %929, 1
  br label %931

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

937:                                              ; preds = %931
  %938 = getelementptr inbounds %struct.ImDrawList, ptr %97, i32 0, i32 4
  %939 = load i32, ptr %938, align 4, !tbaa !39
  br label %943

940:                                              ; preds = %931
  %941 = load i32, ptr %73, align 4, !tbaa !9
  %942 = add i32 %941, 4
  br label %943

943:                                              ; preds = %940, %937
  %944 = phi i32 [ %939, %937 ], [ %942, %940 ]
  store i32 %944, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #10
  %945 = load ptr, ptr %24, align 8, !tbaa !5
  %946 = load i32, ptr %74, align 4, !tbaa !9
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds %struct.ImVec2, ptr %945, i64 %947
  %949 = getelementptr inbounds %struct.ImVec2, ptr %948, i32 0, i32 0
  %950 = load float, ptr %949, align 4, !tbaa !35
  %951 = load ptr, ptr %24, align 8, !tbaa !5
  %952 = load i32, ptr %75, align 4, !tbaa !9
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds %struct.ImVec2, ptr %951, i64 %953
  %955 = getelementptr inbounds %struct.ImVec2, ptr %954, i32 0, i32 0
  %956 = load float, ptr %955, align 4, !tbaa !35
  %957 = fadd float %950, %956
  %958 = fmul float %957, 5.000000e-01
  store float %958, ptr %77, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #10
  %959 = load ptr, ptr %24, align 8, !tbaa !5
  %960 = load i32, ptr %74, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds %struct.ImVec2, ptr %959, i64 %961
  %963 = getelementptr inbounds %struct.ImVec2, ptr %962, i32 0, i32 1
  %964 = load float, ptr %963, align 4, !tbaa !36
  %965 = load ptr, ptr %24, align 8, !tbaa !5
  %966 = load i32, ptr %75, align 4, !tbaa !9
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds %struct.ImVec2, ptr %965, i64 %967
  %969 = getelementptr inbounds %struct.ImVec2, ptr %968, i32 0, i32 1
  %970 = load float, ptr %969, align 4, !tbaa !36
  %971 = fadd float %964, %970
  %972 = fmul float %971, 5.000000e-01
  store float %972, ptr %78, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #10
  %973 = load float, ptr %77, align 4, !tbaa !11
  %974 = load float, ptr %77, align 4, !tbaa !11
  %975 = load float, ptr %78, align 4, !tbaa !11
  %976 = load float, ptr %78, align 4, !tbaa !11
  %977 = fmul float %975, %976
  %978 = call float @llvm.fmuladd.f32(float %973, float %974, float %977)
  store float %978, ptr %79, align 4, !tbaa !11
  %979 = load float, ptr %79, align 4, !tbaa !11
  %980 = fcmp ogt float %979, 0x3EB0C6F7A0000000
  br i1 %980, label %981, label %994

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

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

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

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

1216:                                             ; preds = %994
  %1217 = load i32, ptr %74, align 4, !tbaa !9
  %1218 = add nsw i32 %1217, 1
  store i32 %1218, ptr %74, align 4, !tbaa !9
  br label %917, !llvm.loop !55

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

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

1224:                                             ; preds = %1220
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #10
  br label %1308

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

1305:                                             ; preds = %1225
  %1306 = load i32, ptr %86, align 4, !tbaa !9
  %1307 = add nsw i32 %1306, 1
  store i32 %1307, ptr %86, align 4, !tbaa !9
  br label %1220, !llvm.loop !56

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

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

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

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

1327:                                             ; preds = %1323
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #10
  br label %1555

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

1333:                                             ; preds = %1328
  br label %1337

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

1337:                                             ; preds = %1334, %1333
  %1338 = phi i32 [ 0, %1333 ], [ %1336, %1334 ]
  store i32 %1338, ptr %90, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #10
  %1339 = load ptr, ptr %8, align 8, !tbaa !5
  %1340 = load i32, ptr %89, align 4, !tbaa !9
  %1341 = sext i32 %1340 to i64
  %1342 = getelementptr inbounds %struct.ImVec2, ptr %1339, i64 %1341
  store ptr %1342, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #10
  %1343 = load ptr, ptr %8, align 8, !tbaa !5
  %1344 = load i32, ptr %90, align 4, !tbaa !9
  %1345 = sext i32 %1344 to i64
  %1346 = getelementptr inbounds %struct.ImVec2, ptr %1343, i64 %1345
  store ptr %1346, ptr %92, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #10
  %1347 = load ptr, ptr %92, align 8, !tbaa !5
  %1348 = getelementptr inbounds %struct.ImVec2, ptr %1347, i32 0, i32 0
  %1349 = load float, ptr %1348, align 4, !tbaa !35
  %1350 = load ptr, ptr %91, align 8, !tbaa !5
  %1351 = getelementptr inbounds %struct.ImVec2, ptr %1350, i32 0, i32 0
  %1352 = load float, ptr %1351, align 4, !tbaa !35
  %1353 = fsub float %1349, %1352
  store float %1353, ptr %93, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #10
  %1354 = load ptr, ptr %92, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.ImVec2, ptr %1354, i32 0, i32 1
  %1356 = load float, ptr %1355, align 4, !tbaa !36
  %1357 = load ptr, ptr %91, align 8, !tbaa !5
  %1358 = getelementptr inbounds %struct.ImVec2, ptr %1357, i32 0, i32 1
  %1359 = load float, ptr %1358, align 4, !tbaa !36
  %1360 = fsub float %1356, %1359
  store float %1360, ptr %94, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #10
  %1361 = load float, ptr %93, align 4, !tbaa !11
  %1362 = load float, ptr %93, align 4, !tbaa !11
  %1363 = load float, ptr %94, align 4, !tbaa !11
  %1364 = load float, ptr %94, align 4, !tbaa !11
  %1365 = fmul float %1363, %1364
  %1366 = call float @llvm.fmuladd.f32(float %1361, float %1362, float %1365)
  store float %1366, ptr %95, align 4, !tbaa !11
  %1367 = load float, ptr %95, align 4, !tbaa !11
  %1368 = fcmp ogt float %1367, 0.000000e+00
  br i1 %1368, label %1369, label %1378

1369:                                             ; preds = %1337
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #10
  %1370 = load float, ptr %95, align 4, !tbaa !11
  %1371 = call noundef float @_ZL7ImRsqrtf(float noundef %1370)
  store float %1371, ptr %96, align 4, !tbaa !11
  %1372 = load float, ptr %96, align 4, !tbaa !11
  %1373 = load float, ptr %93, align 4, !tbaa !11
  %1374 = fmul float %1373, %1372
  store float %1374, ptr %93, align 4, !tbaa !11
  %1375 = load float, ptr %96, align 4, !tbaa !11
  %1376 = load float, ptr %94, align 4, !tbaa !11
  %1377 = fmul float %1376, %1375
  store float %1377, ptr %94, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #10
  br label %1378

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

1552:                                             ; preds = %1378
  %1553 = load i32, ptr %89, align 4, !tbaa !9
  %1554 = add nsw i32 %1553, 1
  store i32 %1554, ptr %89, align 4, !tbaa !9
  br label %1323, !llvm.loop !59

1555:                                             ; preds = %1327
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #10
  br label %1556

1556:                                             ; preds = %1555, %1309
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #10
  br label %1557

1557:                                             ; preds = %1556, %104
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI6ImVec2E15reserve_discardEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #6 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef float @_ZL7ImRsqrtf(float noundef) #8

; 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)) #9

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

; 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)) #9

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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { inlinehint mustprogress uwtable "min-legal-vector-width"="128" "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 = { 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 #10 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !6, i64 56}
!16 = !{!"_ZTS10ImDrawList", !17, i64 0, !18, i64 16, !19, i64 32, !10, i64 48, !10, i64 52, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !20, i64 88, !21, i64 104, !22, i64 120, !23, i64 136, !25, i64 168, !12, i64 192}
!17 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !10, i64 0, !10, i64 4, !6, i64 8}
!18 = !{!"_ZTS8ImVectorItE", !10, i64 0, !10, i64 4, !6, i64 8}
!19 = !{!"_ZTS8ImVectorI10ImDrawVertE", !10, i64 0, !10, i64 4, !6, i64 8}
!20 = !{!"_ZTS8ImVectorI6ImVec4E", !10, i64 0, !10, i64 4, !6, i64 8}
!21 = !{!"_ZTS8ImVectorIPvE", !10, i64 0, !10, i64 4, !6, i64 8}
!22 = !{!"_ZTS8ImVectorI6ImVec2E", !10, i64 0, !10, i64 4, !6, i64 8}
!23 = !{!"_ZTS15ImDrawCmdHeader", !24, i64 0, !6, i64 16, !10, i64 24}
!24 = !{!"_ZTS6ImVec4", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!25 = !{!"_ZTS18ImDrawListSplitter", !10, i64 0, !10, i64 4, !26, i64 8}
!26 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !10, i64 0, !10, i64 4, !6, i64 8}
!27 = !{i64 0, i64 4, !11, i64 4, i64 4, !11}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!16, !12, i64 192}
!31 = !{!16, !10, i64 48}
!32 = !{!33, !6, i64 56}
!33 = !{!"_ZTS20ImDrawListSharedData", !34, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !24, i64 28, !10, i64 44, !22, i64 48, !7, i64 64, !12, i64 448, !7, i64 452, !6, i64 520}
!34 = !{!"_ZTS6ImVec2", !12, i64 0, !12, i64 4}
!35 = !{!34, !12, i64 0}
!36 = !{!34, !12, i64 4}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = !{!16, !10, i64 52}
!40 = !{!16, !6, i64 80}
!41 = !{!42, !42, i64 0}
!42 = !{!"short", !7, i64 0}
!43 = distinct !{!43, !38}
!44 = !{!33, !6, i64 520}
!45 = !{i64 0, i64 4, !11, i64 4, i64 4, !11, i64 8, i64 4, !11, i64 12, i64 4, !11}
!46 = !{!24, !12, i64 0}
!47 = !{!24, !12, i64 4}
!48 = !{!24, !12, i64 8}
!49 = !{!24, !12, i64 12}
!50 = !{!16, !6, i64 72}
!51 = !{!52, !10, i64 16}
!52 = !{!"_ZTS10ImDrawVert", !34, i64 0, !34, i64 8, !10, i64 16}
!53 = distinct !{!53, !38}
!54 = distinct !{!54, !38}
!55 = distinct !{!55, !38}
!56 = distinct !{!56, !38}
!57 = !{!52, !12, i64 0}
!58 = !{!52, !12, i64 4}
!59 = distinct !{!59, !38}


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

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

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

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

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

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

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

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

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

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

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

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

.lr.ph.preheader:                                 ; preds = %.thread, %50
  %55 = phi i32 [ %49, %.thread ], [ %54, %50 ]
  %56 = phi i32 [ 3, %.thread ], [ %spec.select459, %50 ]
  %.pn = load ptr, ptr %25, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %.pn, i64 48
  %58 = mul nuw nsw i32 %56, %2
  tail call void @_ZN8ImVectorI6ImVec2E15reserve_discardEi(ptr noundef nonnull align 8 dereferenceable(16) %57, i32 noundef %58)
  %59 = load ptr, ptr %25, align 8, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %59, i64 56
  %61 = load ptr, ptr %60, align 8, !tbaa !24
  %62 = zext nneg i32 %2 to i64
  %63 = getelementptr %struct.ImVec2, ptr %61, i64 %62
  %wide.trip.count = zext nneg i32 %29 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %82
  br i1 %.not, label %89, label %.thread455

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

77:                                               ; preds = %.lr.ph
  %78 = tail call noundef float @_ZL7ImRsqrtf(float noundef %75)
  %79 = insertelement <2 x float> poison, float %78, i64 0
  %80 = shufflevector <2 x float> %79, <2 x float> poison, <2 x i32> zeroinitializer
  %81 = fmul <2 x float> %71, %80
  br label %82

82:                                               ; preds = %77, %.lr.ph
  %83 = phi <2 x float> [ %81, %77 ], [ %71, %.lr.ph ]
  %84 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %indvars.iv
  %85 = extractelement <2 x float> %83, i64 1
  store float %85, ptr %84, align 4, !tbaa !28
  %86 = extractelement <2 x float> %83, i64 0
  %87 = fneg float %86
  %88 = getelementptr inbounds i8, ptr %84, i64 4
  store float %87, ptr %88, align 4, !tbaa !29
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !30

89:                                               ; preds = %._crit_edge
  %90 = getelementptr i8, ptr %63, i64 -16
  %91 = zext nneg i32 %28 to i64
  %92 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %91
  %93 = load i64, ptr %90, align 4
  store i64 %93, ptr %92, align 4
  %brmerge = or i1 %32, %spec.select
  br i1 %brmerge, label %98, label %238

.thread455:                                       ; preds = %._crit_edge
  %brmerge456 = or i1 %32, %spec.select
  br i1 %brmerge456, label %.thread457, label %.thread458

.thread458:                                       ; preds = %.thread455
  %94 = fsub float %38, %.fr
  %95 = fmul float %94, 5.000000e-01
  br label %.lr.ph467

.thread457:                                       ; preds = %.thread455
  %96 = tail call float @llvm.fmuladd.f32(float %38, float 5.000000e-01, float 1.000000e+00)
  %97 = select i1 %spec.select, float %96, float %.fr
  br label %.lr.ph473

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

.lr.ph473:                                        ; preds = %98, %.thread457
  %117 = phi float [ %97, %.thread457 ], [ %100, %98 ]
  %118 = getelementptr inbounds i8, ptr %0, i64 52
  %119 = load i32, ptr %118, align 4, !tbaa !32
  %120 = select i1 %spec.select, i32 2, i32 3
  %121 = getelementptr inbounds i8, ptr %0, i64 80
  %.promoted475 = load ptr, ptr %121, align 8, !tbaa !33
  %wide.trip.count500 = zext nneg i32 %29 to i64
  %122 = insertelement <2 x float> poison, float %117, i64 0
  %123 = shufflevector <2 x float> %122, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.backedge

.preheader:                                       ; preds = %.thread521
  %124 = icmp sgt i32 %2, 0
  br i1 %124, label %.lr.ph477, label %.loopexit460

.lr.ph477:                                        ; preds = %.preheader
  %125 = getelementptr inbounds i8, ptr %0, i64 72
  %.pre517 = load ptr, ptr %125, align 8, !tbaa !34
  br label %213

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph473
  %indvars.iv497 = phi i64 [ 0, %.lr.ph473 ], [ %indvars.iv.next498, %.backedge.backedge ]
  %126 = phi ptr [ %.promoted475, %.lr.ph473 ], [ %.be, %.backedge.backedge ]
  %.0419471 = phi i32 [ %119, %.lr.ph473 ], [ %132, %.backedge.backedge ]
  %indvars.iv.next498 = add nuw nsw i64 %indvars.iv497, 1
  %127 = icmp eq i64 %indvars.iv.next498, %62
  %128 = trunc nuw nsw i64 %indvars.iv.next498 to i32
  %129 = select i1 %127, i32 0, i32 %128
  %130 = load i32, ptr %118, align 4
  %131 = add i32 %.0419471, %120
  %132 = select i1 %127, i32 %130, i32 %131
  %133 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %indvars.iv497
  %134 = zext nneg i32 %129 to i64
  %135 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %134
  %136 = load <2 x float>, ptr %133, align 4, !tbaa !27
  %137 = load <2 x float>, ptr %135, align 4, !tbaa !27
  %138 = fadd <2 x float> %136, %137
  %139 = fmul <2 x float> %138, <float 5.000000e-01, float 5.000000e-01>
  %140 = fmul <2 x float> %139, %139
  %141 = extractelement <2 x float> %140, i64 1
  %142 = extractelement <2 x float> %139, i64 0
  %143 = call float @llvm.fmuladd.f32(float %142, float %142, float %141)
  %144 = fcmp ogt float %143, 0x3EB0C6F7A0000000
  br i1 %144, label %145, label %151

145:                                              ; preds = %.backedge
  %146 = fdiv float 1.000000e+00, %143
  %147 = fcmp ogt float %146, 1.000000e+02
  %.0425 = select i1 %147, float 1.000000e+02, float %146
  %148 = insertelement <2 x float> poison, float %.0425, i64 0
  %149 = shufflevector <2 x float> %148, <2 x float> poison, <2 x i32> zeroinitializer
  %150 = fmul <2 x float> %139, %149
  br label %151

151:                                              ; preds = %145, %.backedge
  %152 = phi <2 x float> [ %150, %145 ], [ %139, %.backedge ]
  %153 = fmul <2 x float> %123, %152
  %154 = shl nuw nsw i32 %129, 1
  %155 = zext nneg i32 %154 to i64
  %156 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %155
  %157 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %134
  %158 = load <2 x float>, ptr %157, align 4, !tbaa !27
  %159 = fadd <2 x float> %158, %153
  store <2 x float> %159, ptr %156, align 4, !tbaa !27
  %160 = getelementptr inbounds i8, ptr %156, i64 8
  %161 = load <2 x float>, ptr %157, align 4, !tbaa !27
  %162 = fsub <2 x float> %161, %153
  store <2 x float> %162, ptr %160, align 4, !tbaa !27
  %163 = trunc i32 %132 to i16
  store i16 %163, ptr %126, align 2, !tbaa !35
  %164 = trunc i32 %.0419471 to i16
  %165 = getelementptr inbounds i8, ptr %126, i64 2
  store i16 %164, ptr %165, align 2, !tbaa !35
  %166 = getelementptr inbounds i8, ptr %126, i64 4
  %167 = getelementptr inbounds i8, ptr %126, i64 8
  %168 = getelementptr inbounds i8, ptr %126, i64 10
  br i1 %spec.select, label %169, label %.thread521

169:                                              ; preds = %151
  %170 = add i16 %164, 1
  store i16 %170, ptr %166, align 2, !tbaa !35
  %171 = add i16 %163, 1
  %172 = getelementptr inbounds i8, ptr %126, i64 6
  store i16 %171, ptr %172, align 2, !tbaa !35
  store i16 %170, ptr %167, align 2, !tbaa !35
  store i16 %163, ptr %168, align 2, !tbaa !35
  %173 = getelementptr inbounds i8, ptr %126, i64 12
  store ptr %173, ptr %121, align 8, !tbaa !33
  %exitcond501.not = icmp eq i64 %indvars.iv.next498, %wide.trip.count500
  br i1 %exitcond501.not, label %._crit_edge474, label %.backedge.backedge

.backedge.backedge:                               ; preds = %169, %.thread521
  %.be = phi ptr [ %173, %169 ], [ %185, %.thread521 ]
  br label %.backedge, !llvm.loop !37

.thread521:                                       ; preds = %151
  %174 = add i16 %164, 2
  store i16 %174, ptr %166, align 2, !tbaa !35
  %175 = getelementptr inbounds i8, ptr %126, i64 6
  store i16 %174, ptr %175, align 2, !tbaa !35
  %176 = add i16 %163, 2
  store i16 %176, ptr %167, align 2, !tbaa !35
  store i16 %163, ptr %168, align 2, !tbaa !35
  %177 = add i16 %163, 1
  %178 = getelementptr inbounds i8, ptr %126, i64 12
  store i16 %177, ptr %178, align 2, !tbaa !35
  %179 = add i16 %164, 1
  %180 = getelementptr inbounds i8, ptr %126, i64 14
  store i16 %179, ptr %180, align 2, !tbaa !35
  %181 = getelementptr inbounds i8, ptr %126, i64 16
  store i16 %164, ptr %181, align 2, !tbaa !35
  %182 = getelementptr inbounds i8, ptr %126, i64 18
  store i16 %164, ptr %182, align 2, !tbaa !35
  %183 = getelementptr inbounds i8, ptr %126, i64 20
  store i16 %163, ptr %183, align 2, !tbaa !35
  %184 = getelementptr inbounds i8, ptr %126, i64 22
  store i16 %177, ptr %184, align 2, !tbaa !35
  %185 = getelementptr inbounds i8, ptr %126, i64 24
  store ptr %185, ptr %121, align 8, !tbaa !33
  %exitcond501.not522 = icmp eq i64 %indvars.iv.next498, %wide.trip.count500
  br i1 %exitcond501.not522, label %.preheader, label %.backedge.backedge

._crit_edge474:                                   ; preds = %169
  %186 = load ptr, ptr %25, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %186, i64 520
  %188 = load ptr, ptr %187, align 8, !tbaa !38
  %189 = sext i32 %39 to i64
  %190 = getelementptr inbounds %struct.ImVec4, ptr %188, i64 %189
  %.sroa.0157.0.copyload = load float, ptr %190, align 4, !tbaa !27
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %190, i64 4
  %.sroa.4.0.copyload = load float, ptr %.sroa.4.0..sroa_idx, align 4, !tbaa !27
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %190, i64 8
  %.sroa.5.0.copyload = load float, ptr %.sroa.5.0..sroa_idx, align 4, !tbaa !27
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %190, i64 12
  %.sroa.6.0.copyload = load float, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %11, float noundef %.sroa.0157.0.copyload, float noundef %.sroa.4.0.copyload)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %.sroa.5.0.copyload, float noundef %.sroa.6.0.copyload)
  %191 = icmp sgt i32 %2, 0
  br i1 %191, label %.lr.ph480, label %._crit_edge481

.lr.ph480:                                        ; preds = %._crit_edge474
  %192 = getelementptr inbounds i8, ptr %0, i64 72
  %.pre518 = load ptr, ptr %192, align 8, !tbaa !34
  br label %193

._crit_edge481:                                   ; preds = %193, %._crit_edge474
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  br label %.loopexit460

193:                                              ; preds = %.lr.ph480, %193
  %194 = phi ptr [ %.pre518, %.lr.ph480 ], [ %212, %193 ]
  %indvars.iv507 = phi i64 [ 0, %.lr.ph480 ], [ %indvars.iv.next508, %193 ]
  %195 = shl nuw nsw i64 %indvars.iv507, 1
  %196 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %195
  %197 = load i64, ptr %196, align 4
  store i64 %197, ptr %194, align 4
  %198 = load ptr, ptr %192, align 8, !tbaa !34
  %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 !34
  %202 = getelementptr inbounds i8, ptr %201, i64 16
  store i32 %3, ptr %202, align 4, !tbaa !39
  %203 = or disjoint i64 %195, 1
  %204 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %203
  %205 = getelementptr inbounds i8, ptr %201, i64 20
  %206 = load i64, ptr %204, align 4
  store i64 %206, ptr %205, align 4
  %207 = load ptr, ptr %192, align 8, !tbaa !34
  %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 !34
  %211 = getelementptr inbounds i8, ptr %210, i64 36
  store i32 %3, ptr %211, align 4, !tbaa !39
  %212 = getelementptr inbounds i8, ptr %210, i64 40
  store ptr %212, ptr %192, align 8, !tbaa !34
  %indvars.iv.next508 = add nuw nsw i64 %indvars.iv507, 1
  %exitcond511.not = icmp eq i64 %indvars.iv.next508, %62
  br i1 %exitcond511.not, label %._crit_edge481, label %193, !llvm.loop !41

213:                                              ; preds = %.lr.ph477, %213
  %214 = phi ptr [ %.pre517, %.lr.ph477 ], [ %237, %213 ]
  %indvars.iv502 = phi i64 [ 0, %.lr.ph477 ], [ %indvars.iv.next503, %213 ]
  %215 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv502
  %216 = load i64, ptr %215, align 4
  store i64 %216, ptr %214, align 4
  %217 = load ptr, ptr %125, align 8, !tbaa !34
  %218 = getelementptr inbounds i8, ptr %217, i64 8
  store i64 %27, ptr %218, align 4
  %219 = load ptr, ptr %125, align 8, !tbaa !34
  %220 = getelementptr inbounds i8, ptr %219, i64 16
  store i32 %3, ptr %220, align 4, !tbaa !39
  %221 = shl nuw nsw i64 %indvars.iv502, 1
  %222 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %221
  %223 = getelementptr inbounds i8, ptr %219, i64 20
  %224 = load i64, ptr %222, align 4
  store i64 %224, ptr %223, align 4
  %225 = load ptr, ptr %125, align 8, !tbaa !34
  %226 = getelementptr inbounds i8, ptr %225, i64 28
  store i64 %27, ptr %226, align 4
  %227 = load ptr, ptr %125, align 8, !tbaa !34
  %228 = getelementptr inbounds i8, ptr %227, i64 36
  store i32 %37, ptr %228, align 4, !tbaa !39
  %229 = or disjoint i64 %221, 1
  %230 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %229
  %231 = getelementptr inbounds i8, ptr %227, i64 40
  %232 = load i64, ptr %230, align 4
  store i64 %232, ptr %231, align 4
  %233 = load ptr, ptr %125, align 8, !tbaa !34
  %234 = getelementptr inbounds i8, ptr %233, i64 48
  store i64 %27, ptr %234, align 4
  %235 = load ptr, ptr %125, align 8, !tbaa !34
  %236 = getelementptr inbounds i8, ptr %235, i64 56
  store i32 %37, ptr %236, align 4, !tbaa !39
  %237 = getelementptr inbounds i8, ptr %235, i64 60
  store ptr %237, ptr %125, align 8, !tbaa !34
  %indvars.iv.next503 = add nuw nsw i64 %indvars.iv502, 1
  %exitcond506.not = icmp eq i64 %indvars.iv.next503, %62
  br i1 %exitcond506.not, label %.loopexit460, label %213, !llvm.loop !42

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

.lr.ph467:                                        ; preds = %238, %.thread458
  %274 = phi float [ %95, %.thread458 ], [ %240, %238 ]
  %275 = getelementptr inbounds i8, ptr %0, i64 52
  %276 = load i32, ptr %275, align 4, !tbaa !32
  %277 = fadd float %.fr, %274
  %278 = getelementptr inbounds i8, ptr %0, i64 80
  %.promoted = load ptr, ptr %278, align 8, !tbaa !33
  %wide.trip.count490 = zext nneg i32 %29 to i64
  %279 = insertelement <2 x float> poison, float %277, i64 0
  %280 = shufflevector <2 x float> %279, <2 x float> poison, <2 x i32> zeroinitializer
  %281 = insertelement <2 x float> poison, float %274, i64 0
  %282 = shufflevector <2 x float> %281, <2 x float> poison, <2 x i32> zeroinitializer
  br label %285

.preheader461:                                    ; preds = %311
  store ptr %355, ptr %278, align 8, !tbaa !33
  %283 = icmp sgt i32 %2, 0
  br i1 %283, label %.lr.ph469, label %.loopexit460

.lr.ph469:                                        ; preds = %.preheader461
  %284 = getelementptr inbounds i8, ptr %0, i64 72
  %.pre = load ptr, ptr %284, align 8, !tbaa !34
  br label %356

285:                                              ; preds = %.lr.ph467, %311
  %indvars.iv487 = phi i64 [ 0, %.lr.ph467 ], [ %indvars.iv.next488, %311 ]
  %286 = phi ptr [ %.promoted, %.lr.ph467 ], [ %355, %311 ]
  %.0428465 = phi i32 [ %276, %.lr.ph467 ], [ %292, %311 ]
  %indvars.iv.next488 = add nuw nsw i64 %indvars.iv487, 1
  %287 = icmp eq i64 %indvars.iv.next488, %62
  %288 = trunc nuw nsw i64 %indvars.iv.next488 to i32
  %289 = select i1 %287, i32 0, i32 %288
  %290 = load i32, ptr %275, align 4
  %291 = add i32 %.0428465, 4
  %292 = select i1 %287, i32 %290, i32 %291
  %293 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %indvars.iv487
  %294 = zext nneg i32 %289 to i64
  %295 = getelementptr inbounds %struct.ImVec2, ptr %61, i64 %294
  %296 = load <2 x float>, ptr %293, align 4, !tbaa !27
  %297 = load <2 x float>, ptr %295, align 4, !tbaa !27
  %298 = fadd <2 x float> %296, %297
  %299 = fmul <2 x float> %298, <float 5.000000e-01, float 5.000000e-01>
  %300 = fmul <2 x float> %299, %299
  %301 = extractelement <2 x float> %300, i64 1
  %302 = extractelement <2 x float> %299, i64 0
  %303 = call float @llvm.fmuladd.f32(float %302, float %302, float %301)
  %304 = fcmp ogt float %303, 0x3EB0C6F7A0000000
  br i1 %304, label %305, label %311

305:                                              ; preds = %285
  %306 = fdiv float 1.000000e+00, %303
  %307 = fcmp ogt float %306, 1.000000e+02
  %.0429 = select i1 %307, float 1.000000e+02, float %306
  %308 = insertelement <2 x float> poison, float %.0429, i64 0
  %309 = shufflevector <2 x float> %308, <2 x float> poison, <2 x i32> zeroinitializer
  %310 = fmul <2 x float> %299, %309
  br label %311

311:                                              ; preds = %305, %285
  %312 = phi <2 x float> [ %310, %305 ], [ %299, %285 ]
  %313 = fmul <2 x float> %280, %312
  %314 = shl nsw i32 %289, 2
  %315 = zext nneg i32 %314 to i64
  %316 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %315
  %317 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %294
  %318 = load <2 x float>, ptr %317, align 4, !tbaa !27
  %319 = fadd <2 x float> %313, %318
  store <2 x float> %319, ptr %316, align 4, !tbaa !27
  %320 = getelementptr inbounds i8, ptr %316, i64 8
  %321 = fmul <2 x float> %282, %312
  %322 = load <2 x float>, ptr %317, align 4, !tbaa !27
  %323 = fadd <2 x float> %321, %322
  store <2 x float> %323, ptr %320, align 4, !tbaa !27
  %324 = getelementptr inbounds i8, ptr %316, i64 16
  %325 = load <2 x float>, ptr %317, align 4, !tbaa !27
  %326 = fsub <2 x float> %325, %321
  store <2 x float> %326, ptr %324, align 4, !tbaa !27
  %327 = getelementptr inbounds i8, ptr %316, i64 24
  %328 = load <2 x float>, ptr %317, align 4, !tbaa !27
  %329 = fsub <2 x float> %328, %313
  store <2 x float> %329, ptr %327, align 4, !tbaa !27
  %330 = trunc i32 %292 to i16
  %331 = add i16 %330, 1
  store i16 %331, ptr %286, align 2, !tbaa !35
  %332 = trunc i32 %.0428465 to i16
  %333 = add i16 %332, 1
  %334 = getelementptr inbounds i8, ptr %286, i64 2
  store i16 %333, ptr %334, align 2, !tbaa !35
  %335 = add i16 %332, 2
  %336 = getelementptr inbounds i8, ptr %286, i64 4
  store i16 %335, ptr %336, align 2, !tbaa !35
  %337 = getelementptr inbounds i8, ptr %286, i64 6
  store i16 %335, ptr %337, align 2, !tbaa !35
  %338 = add i16 %330, 2
  %339 = getelementptr inbounds i8, ptr %286, i64 8
  store i16 %338, ptr %339, align 2, !tbaa !35
  %340 = getelementptr inbounds i8, ptr %286, i64 10
  store i16 %331, ptr %340, align 2, !tbaa !35
  %341 = getelementptr inbounds i8, ptr %286, i64 12
  store i16 %331, ptr %341, align 2, !tbaa !35
  %342 = getelementptr inbounds i8, ptr %286, i64 14
  store i16 %333, ptr %342, align 2, !tbaa !35
  %343 = getelementptr inbounds i8, ptr %286, i64 16
  store i16 %332, ptr %343, align 2, !tbaa !35
  %344 = getelementptr inbounds i8, ptr %286, i64 18
  store i16 %332, ptr %344, align 2, !tbaa !35
  %345 = getelementptr inbounds i8, ptr %286, i64 20
  store i16 %330, ptr %345, align 2, !tbaa !35
  %346 = getelementptr inbounds i8, ptr %286, i64 22
  store i16 %331, ptr %346, align 2, !tbaa !35
  %347 = getelementptr inbounds i8, ptr %286, i64 24
  store i16 %338, ptr %347, align 2, !tbaa !35
  %348 = getelementptr inbounds i8, ptr %286, i64 26
  store i16 %335, ptr %348, align 2, !tbaa !35
  %349 = add i16 %332, 3
  %350 = getelementptr inbounds i8, ptr %286, i64 28
  store i16 %349, ptr %350, align 2, !tbaa !35
  %351 = getelementptr inbounds i8, ptr %286, i64 30
  store i16 %349, ptr %351, align 2, !tbaa !35
  %352 = add i16 %330, 3
  %353 = getelementptr inbounds i8, ptr %286, i64 32
  store i16 %352, ptr %353, align 2, !tbaa !35
  %354 = getelementptr inbounds i8, ptr %286, i64 34
  store i16 %338, ptr %354, align 2, !tbaa !35
  %355 = getelementptr inbounds i8, ptr %286, i64 36
  %exitcond491.not = icmp eq i64 %indvars.iv.next488, %wide.trip.count490
  br i1 %exitcond491.not, label %.preheader461, label %285, !llvm.loop !43

356:                                              ; preds = %.lr.ph469, %356
  %357 = phi ptr [ %.pre, %.lr.ph469 ], [ %389, %356 ]
  %indvars.iv492 = phi i64 [ 0, %.lr.ph469 ], [ %indvars.iv.next493, %356 ]
  %358 = shl nsw i64 %indvars.iv492, 2
  %359 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %358
  %360 = load i64, ptr %359, align 4
  store i64 %360, ptr %357, align 4
  %361 = load ptr, ptr %284, align 8, !tbaa !34
  %362 = getelementptr inbounds i8, ptr %361, i64 8
  store i64 %27, ptr %362, align 4
  %363 = load ptr, ptr %284, align 8, !tbaa !34
  %364 = getelementptr inbounds i8, ptr %363, i64 16
  store i32 %37, ptr %364, align 4, !tbaa !39
  %365 = or disjoint i64 %358, 1
  %366 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %365
  %367 = getelementptr inbounds i8, ptr %363, i64 20
  %368 = load i64, ptr %366, align 4
  store i64 %368, ptr %367, align 4
  %369 = load ptr, ptr %284, align 8, !tbaa !34
  %370 = getelementptr inbounds i8, ptr %369, i64 28
  store i64 %27, ptr %370, align 4
  %371 = load ptr, ptr %284, align 8, !tbaa !34
  %372 = getelementptr inbounds i8, ptr %371, i64 36
  store i32 %3, ptr %372, align 4, !tbaa !39
  %373 = or disjoint i64 %358, 2
  %374 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %373
  %375 = getelementptr inbounds i8, ptr %371, i64 40
  %376 = load i64, ptr %374, align 4
  store i64 %376, ptr %375, align 4
  %377 = load ptr, ptr %284, align 8, !tbaa !34
  %378 = getelementptr inbounds i8, ptr %377, i64 48
  store i64 %27, ptr %378, align 4
  %379 = load ptr, ptr %284, align 8, !tbaa !34
  %380 = getelementptr inbounds i8, ptr %379, i64 56
  store i32 %3, ptr %380, align 4, !tbaa !39
  %381 = or disjoint i64 %358, 3
  %382 = getelementptr inbounds %struct.ImVec2, ptr %63, i64 %381
  %383 = getelementptr inbounds i8, ptr %379, i64 60
  %384 = load i64, ptr %382, align 4
  store i64 %384, ptr %383, align 4
  %385 = load ptr, ptr %284, align 8, !tbaa !34
  %386 = getelementptr inbounds i8, ptr %385, i64 68
  store i64 %27, ptr %386, align 4
  %387 = load ptr, ptr %284, align 8, !tbaa !34
  %388 = getelementptr inbounds i8, ptr %387, i64 76
  store i32 %37, ptr %388, align 4, !tbaa !39
  %389 = getelementptr inbounds i8, ptr %387, i64 80
  store ptr %389, ptr %284, align 8, !tbaa !34
  %indvars.iv.next493 = add nuw nsw i64 %indvars.iv492, 1
  %exitcond496.not = icmp eq i64 %indvars.iv.next493, %62
  br i1 %exitcond496.not, label %.loopexit460, label %356, !llvm.loop !44

.loopexit460:                                     ; preds = %356, %213, %.preheader461, %.preheader, %._crit_edge481
  %390 = and i32 %55, 65535
  %391 = getelementptr inbounds i8, ptr %0, i64 52
  %392 = load i32, ptr %391, align 4, !tbaa !32
  %393 = add i32 %392, %390
  store i32 %393, ptr %391, align 4, !tbaa !32
  br label %.loopexit

.lr.ph484:                                        ; preds = %23
  %394 = mul nsw i32 %29, 6
  %395 = shl nsw i32 %29, 2
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(196) %0, i32 noundef %394, i32 noundef %395)
  %396 = fmul float %5, 5.000000e-01
  %397 = getelementptr inbounds i8, ptr %0, i64 72
  %398 = getelementptr inbounds i8, ptr %0, i64 52
  %399 = getelementptr inbounds i8, ptr %0, i64 80
  %400 = zext nneg i32 %2 to i64
  %wide.trip.count515 = zext nneg i32 %29 to i64
  %401 = insertelement <2 x float> poison, float %396, i64 0
  %402 = shufflevector <2 x float> %401, <2 x float> poison, <2 x i32> zeroinitializer
  br label %403

403:                                              ; preds = %.lr.ph484, %426
  %indvars.iv512 = phi i64 [ 0, %.lr.ph484 ], [ %indvars.iv.next513, %426 ]
  %indvars.iv.next513 = add nuw nsw i64 %indvars.iv512, 1
  %404 = icmp eq i64 %indvars.iv.next513, %400
  %405 = and i64 %indvars.iv.next513, 4294967295
  %406 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv512
  %407 = select i1 %404, i64 0, i64 %405
  %408 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %407
  %409 = getelementptr inbounds i8, ptr %408, i64 4
  %410 = getelementptr inbounds i8, ptr %406, i64 4
  %411 = load <2 x float>, ptr %408, align 4, !tbaa !27
  %412 = load <2 x float>, ptr %406, align 4, !tbaa !27
  %413 = fsub <2 x float> %411, %412
  %414 = shufflevector <2 x float> %413, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %415 = fmul <2 x float> %413, %413
  %416 = extractelement <2 x float> %415, i64 1
  %417 = extractelement <2 x float> %413, i64 0
  %418 = tail call float @llvm.fmuladd.f32(float %417, float %417, float %416)
  %419 = fcmp ogt float %418, 0.000000e+00
  br i1 %419, label %420, label %426

420:                                              ; preds = %403
  %421 = tail call noundef float @_ZL7ImRsqrtf(float noundef %418)
  %422 = insertelement <2 x float> poison, float %421, i64 0
  %423 = shufflevector <2 x float> %422, <2 x float> poison, <2 x i32> zeroinitializer
  %424 = fmul <2 x float> %414, %423
  %425 = load <2 x float>, ptr %406, align 4, !tbaa !27
  br label %426

426:                                              ; preds = %420, %403
  %427 = phi <2 x float> [ %425, %420 ], [ %412, %403 ]
  %428 = phi <2 x float> [ %424, %420 ], [ %414, %403 ]
  %429 = fmul <2 x float> %402, %428
  %430 = load ptr, ptr %397, align 8, !tbaa !34
  %431 = fadd <2 x float> %427, %429
  %432 = fsub <2 x float> %427, %429
  %433 = shufflevector <2 x float> %431, <2 x float> %432, <2 x i32> <i32 0, i32 3>
  store <2 x float> %433, ptr %430, align 4, !tbaa !27
  %434 = getelementptr inbounds i8, ptr %430, i64 8
  store i64 %27, ptr %434, align 4
  %435 = load ptr, ptr %397, align 8, !tbaa !34
  %436 = getelementptr inbounds i8, ptr %435, i64 16
  store i32 %3, ptr %436, align 4, !tbaa !39
  %437 = load float, ptr %408, align 4, !tbaa !28
  %438 = extractelement <2 x float> %429, i64 0
  %439 = fadd float %438, %437
  %440 = getelementptr inbounds i8, ptr %435, i64 20
  store float %439, ptr %440, align 4, !tbaa !45
  %441 = load float, ptr %409, align 4, !tbaa !29
  %442 = extractelement <2 x float> %429, i64 1
  %443 = fsub float %441, %442
  %444 = getelementptr inbounds i8, ptr %435, i64 24
  store float %443, ptr %444, align 4, !tbaa !46
  %445 = getelementptr inbounds i8, ptr %435, i64 28
  store i64 %27, ptr %445, align 4
  %446 = load ptr, ptr %397, align 8, !tbaa !34
  %447 = getelementptr inbounds i8, ptr %446, i64 36
  store i32 %3, ptr %447, align 4, !tbaa !39
  %448 = load float, ptr %408, align 4, !tbaa !28
  %449 = fsub float %448, %438
  %450 = getelementptr inbounds i8, ptr %446, i64 40
  store float %449, ptr %450, align 4, !tbaa !45
  %451 = load float, ptr %409, align 4, !tbaa !29
  %452 = fadd float %442, %451
  %453 = getelementptr inbounds i8, ptr %446, i64 44
  store float %452, ptr %453, align 4, !tbaa !46
  %454 = getelementptr inbounds i8, ptr %446, i64 48
  store i64 %27, ptr %454, align 4
  %455 = load ptr, ptr %397, align 8, !tbaa !34
  %456 = getelementptr inbounds i8, ptr %455, i64 56
  store i32 %3, ptr %456, align 4, !tbaa !39
  %457 = load float, ptr %406, align 4, !tbaa !28
  %458 = fsub float %457, %438
  %459 = getelementptr inbounds i8, ptr %455, i64 60
  store float %458, ptr %459, align 4, !tbaa !45
  %460 = load float, ptr %410, align 4, !tbaa !29
  %461 = fadd float %442, %460
  %462 = getelementptr inbounds i8, ptr %455, i64 64
  store float %461, ptr %462, align 4, !tbaa !46
  %463 = getelementptr inbounds i8, ptr %455, i64 68
  store i64 %27, ptr %463, align 4
  %464 = load ptr, ptr %397, align 8, !tbaa !34
  %465 = getelementptr inbounds i8, ptr %464, i64 76
  store i32 %3, ptr %465, align 4, !tbaa !39
  %466 = getelementptr inbounds i8, ptr %464, i64 80
  store ptr %466, ptr %397, align 8, !tbaa !34
  %467 = load i32, ptr %398, align 4, !tbaa !32
  %468 = trunc i32 %467 to i16
  %469 = load ptr, ptr %399, align 8, !tbaa !33
  store i16 %468, ptr %469, align 2, !tbaa !35
  %470 = add i16 %468, 1
  %471 = getelementptr inbounds i8, ptr %469, i64 2
  store i16 %470, ptr %471, align 2, !tbaa !35
  %472 = add i16 %468, 2
  %473 = getelementptr inbounds i8, ptr %469, i64 4
  store i16 %472, ptr %473, align 2, !tbaa !35
  %474 = getelementptr inbounds i8, ptr %469, i64 6
  store i16 %468, ptr %474, align 2, !tbaa !35
  %475 = getelementptr inbounds i8, ptr %469, i64 8
  store i16 %472, ptr %475, align 2, !tbaa !35
  %476 = add i16 %468, 3
  %477 = getelementptr inbounds i8, ptr %469, i64 10
  store i16 %476, ptr %477, align 2, !tbaa !35
  %478 = getelementptr inbounds i8, ptr %469, i64 12
  store ptr %478, ptr %399, align 8, !tbaa !33
  %479 = add i32 %467, 4
  store i32 %479, ptr %398, align 4, !tbaa !32
  %exitcond516.not = icmp eq i64 %indvars.iv.next513, %wide.trip.count515
  br i1 %exitcond516.not, label %.loopexit, label %403, !llvm.loop !47

.loopexit:                                        ; preds = %426, %.loopexit460, %6
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8ImVectorI6ImVec2E15reserve_discardEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef float @_ZL7ImRsqrtf(float noundef) local_unnamed_addr #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)) local_unnamed_addr #8

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

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


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