; LLVM IR from lbowes/falcon-9-simulation :: 3rd_party/imgui/imgui_draw.ll (ZN10ImDrawList11AddPolylineEPK6ImVec2ijbf)

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

%struct.ImVec2 = type { float, float }
%struct.ImDrawList = type { %struct.ImVector, %struct.ImVector.0, %struct.ImVector.1, i32, ptr, ptr, i32, i32, ptr, ptr, %struct.ImVector.2, %struct.ImVector.3, %struct.ImVector.4, %struct.ImDrawListSplitter }
%struct.ImVector = type { i32, i32, ptr }
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImVector.1 = type { i32, i32, ptr }
%struct.ImVector.2 = type { i32, i32, ptr }
%struct.ImVector.3 = type { i32, i32, ptr }
%struct.ImVector.4 = type { i32, i32, ptr }
%struct.ImDrawListSplitter = type { i32, i32, %struct.ImVector.5 }
%struct.ImVector.5 = type { i32, i32, ptr }
%struct.ImDrawListSharedData = type { %struct.ImVec2, ptr, float, float, float, %struct.ImVec4, i32, [12 x %struct.ImVec2], [64 x i8] }
%struct.ImVec4 = type { float, float, float, float }
%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 uwtable
declare dso_local void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168), i32 noundef, i32 noundef) #2 align 2

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

92:                                               ; preds = %6
  br label %1346

93:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %94 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 4
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  %96 = getelementptr inbounds %struct.ImDrawListSharedData, ptr %95, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 8 %96, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %97 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %97, ptr %14, align 4, !tbaa !9
  %98 = load i8, ptr %11, align 1, !tbaa !11, !range !26, !noundef !27
  %99 = trunc i8 %98 to i1
  br i1 %99, label %103, label %100

100:                                              ; preds = %93
  %101 = load i32, ptr %9, align 4, !tbaa !9
  %102 = sub nsw i32 %101, 1
  store i32 %102, ptr %14, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %100, %93
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  %104 = load float, ptr %12, align 4, !tbaa !13
  %105 = fcmp ogt float %104, 1.000000e+00
  %106 = zext i1 %105 to i8
  store i8 %106, ptr %15, align 1, !tbaa !11
  %107 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 3
  %108 = load i32, ptr %107, align 8, !tbaa !28
  %109 = and i32 %108, 1
  %110 = icmp ne i32 %109, 0
  br i1 %110, label %111, label %1101

111:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store float 1.000000e+00, ptr %16, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %112 = load i32, ptr %10, align 4, !tbaa !9
  %113 = and i32 %112, 16777215
  store i32 %113, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %114 = load i8, ptr %15, align 1, !tbaa !11, !range !26, !noundef !27
  %115 = trunc i8 %114 to i1
  br i1 %115, label %116, label %119

116:                                              ; preds = %111
  %117 = load i32, ptr %14, align 4, !tbaa !9
  %118 = mul nsw i32 %117, 18
  br label %122

119:                                              ; preds = %111
  %120 = load i32, ptr %14, align 4, !tbaa !9
  %121 = mul nsw i32 %120, 12
  br label %122

122:                                              ; preds = %119, %116
  %123 = phi i32 [ %118, %116 ], [ %121, %119 ]
  store i32 %123, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %124 = load i8, ptr %15, align 1, !tbaa !11, !range !26, !noundef !27
  %125 = trunc i8 %124 to i1
  br i1 %125, label %126, label %129

126:                                              ; preds = %122
  %127 = load i32, ptr %9, align 4, !tbaa !9
  %128 = mul nsw i32 %127, 4
  br label %132

129:                                              ; preds = %122
  %130 = load i32, ptr %9, align 4, !tbaa !9
  %131 = mul nsw i32 %130, 3
  br label %132

132:                                              ; preds = %129, %126
  %133 = phi i32 [ %128, %126 ], [ %131, %129 ]
  store i32 %133, ptr %19, align 4, !tbaa !9
  %134 = load i32, ptr %18, align 4, !tbaa !9
  %135 = load i32, ptr %19, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %89, i32 noundef %134, i32 noundef %135)
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %136 = load i32, ptr %9, align 4, !tbaa !9
  %137 = load i8, ptr %15, align 1, !tbaa !11, !range !26, !noundef !27
  %138 = trunc i8 %137 to i1
  %139 = zext i1 %138 to i64
  %140 = select i1 %138, i32 5, i32 3
  %141 = mul nsw i32 %136, %140
  %142 = sext i32 %141 to i64
  %143 = mul i64 %142, 8
  %144 = alloca i8, i64 %143, align 16
  store ptr %144, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %145 = load ptr, ptr %20, align 8, !tbaa !5
  %146 = load i32, ptr %9, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds %struct.ImVec2, ptr %145, i64 %147
  store ptr %148, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %226, %132
  %150 = load i32, ptr %22, align 4, !tbaa !9
  %151 = load i32, ptr %14, align 4, !tbaa !9
  %152 = icmp slt i32 %150, %151
  br i1 %152, label %154, label %153

153:                                              ; preds = %149
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %229

154:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  %155 = load i32, ptr %22, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  %157 = load i32, ptr %9, align 4, !tbaa !9
  %158 = icmp eq i32 %156, %157
  br i1 %158, label %159, label %160

159:                                              ; preds = %154
  br label %163

160:                                              ; preds = %154
  %161 = load i32, ptr %22, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  br label %163

163:                                              ; preds = %160, %159
  %164 = phi i32 [ 0, %159 ], [ %162, %160 ]
  store i32 %164, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = load i32, ptr %23, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds %struct.ImVec2, ptr %165, i64 %167
  %169 = getelementptr inbounds %struct.ImVec2, ptr %168, i32 0, i32 0
  %170 = load float, ptr %169, align 4, !tbaa !29
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = load i32, ptr %22, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds %struct.ImVec2, ptr %171, i64 %173
  %175 = getelementptr inbounds %struct.ImVec2, ptr %174, i32 0, i32 0
  %176 = load float, ptr %175, align 4, !tbaa !29
  %177 = fsub float %170, %176
  store float %177, ptr %24, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = load i32, ptr %23, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds %struct.ImVec2, ptr %178, i64 %180
  %182 = getelementptr inbounds %struct.ImVec2, ptr %181, i32 0, i32 1
  %183 = load float, ptr %182, align 4, !tbaa !31
  %184 = load ptr, ptr %8, align 8, !tbaa !5
  %185 = load i32, ptr %22, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds %struct.ImVec2, ptr %184, i64 %186
  %188 = getelementptr inbounds %struct.ImVec2, ptr %187, i32 0, i32 1
  %189 = load float, ptr %188, align 4, !tbaa !31
  %190 = fsub float %183, %189
  store float %190, ptr %25, align 4, !tbaa !13
  br label %191

191:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %192 = load float, ptr %24, align 4, !tbaa !13
  %193 = load float, ptr %24, align 4, !tbaa !13
  %194 = load float, ptr %25, align 4, !tbaa !13
  %195 = load float, ptr %25, align 4, !tbaa !13
  %196 = fmul float %194, %195
  %197 = call float @llvm.fmuladd.f32(float %192, float %193, float %196)
  store float %197, ptr %26, align 4, !tbaa !13
  %198 = load float, ptr %26, align 4, !tbaa !13
  %199 = fcmp ogt float %198, 0.000000e+00
  br i1 %199, label %200, label %210

200:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  %201 = load float, ptr %26, align 4, !tbaa !13
  %202 = call float @sqrtf(float noundef %201) #7
  %203 = fdiv float 1.000000e+00, %202
  store float %203, ptr %27, align 4, !tbaa !13
  %204 = load float, ptr %27, align 4, !tbaa !13
  %205 = load float, ptr %24, align 4, !tbaa !13
  %206 = fmul float %205, %204
  store float %206, ptr %24, align 4, !tbaa !13
  %207 = load float, ptr %27, align 4, !tbaa !13
  %208 = load float, ptr %25, align 4, !tbaa !13
  %209 = fmul float %208, %207
  store float %209, ptr %25, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %210

210:                                              ; preds = %200, %191
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %211

211:                                              ; preds = %210
  br label %212

212:                                              ; preds = %211
  %213 = load float, ptr %25, align 4, !tbaa !13
  %214 = load ptr, ptr %20, align 8, !tbaa !5
  %215 = load i32, ptr %22, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds %struct.ImVec2, ptr %214, i64 %216
  %218 = getelementptr inbounds %struct.ImVec2, ptr %217, i32 0, i32 0
  store float %213, ptr %218, align 4, !tbaa !29
  %219 = load float, ptr %24, align 4, !tbaa !13
  %220 = fneg float %219
  %221 = load ptr, ptr %20, align 8, !tbaa !5
  %222 = load i32, ptr %22, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds %struct.ImVec2, ptr %221, i64 %223
  %225 = getelementptr inbounds %struct.ImVec2, ptr %224, i32 0, i32 1
  store float %220, ptr %225, align 4, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %226

226:                                              ; preds = %212
  %227 = load i32, ptr %22, align 4, !tbaa !9
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %22, align 4, !tbaa !9
  br label %149, !llvm.loop !32

229:                                              ; preds = %153
  %230 = load i8, ptr %11, align 1, !tbaa !11, !range !26, !noundef !27
  %231 = trunc i8 %230 to i1
  br i1 %231, label %243, label %232

232:                                              ; preds = %229
  %233 = load ptr, ptr %20, align 8, !tbaa !5
  %234 = load i32, ptr %9, align 4, !tbaa !9
  %235 = sub nsw i32 %234, 2
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds %struct.ImVec2, ptr %233, i64 %236
  %238 = load ptr, ptr %20, align 8, !tbaa !5
  %239 = load i32, ptr %9, align 4, !tbaa !9
  %240 = sub nsw i32 %239, 1
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds %struct.ImVec2, ptr %238, i64 %241
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %242, ptr align 4 %237, i64 8, i1 false), !tbaa.struct !25
  br label %243

243:                                              ; preds = %232, %229
  %244 = load i8, ptr %15, align 1, !tbaa !11, !range !26, !noundef !27
  %245 = trunc i8 %244 to i1
  br i1 %245, label %585, label %246

246:                                              ; preds = %243
  %247 = load i8, ptr %11, align 1, !tbaa !11, !range !26, !noundef !27
  %248 = trunc i8 %247 to i1
  br i1 %248, label %304, label %249

249:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %250 = load ptr, ptr %8, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.ImVec2, ptr %250, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %252 = load ptr, ptr %20, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.ImVec2, ptr %252, i64 0
  %254 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %253, float noundef 1.000000e+00)
  store <2 x float> %254, ptr %29, align 4
  %255 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %251, ptr noundef nonnull align 4 dereferenceable(8) %29)
  store <2 x float> %255, ptr %28, align 4
  %256 = load ptr, ptr %21, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.ImVec2, ptr %256, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %257, ptr align 4 %28, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.ImVec2, ptr %258, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %260 = load ptr, ptr %20, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.ImVec2, ptr %260, i64 0
  %262 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %261, float noundef 1.000000e+00)
  store <2 x float> %262, ptr %31, align 4
  %263 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %259, ptr noundef nonnull align 4 dereferenceable(8) %31)
  store <2 x float> %263, ptr %30, align 4
  %264 = load ptr, ptr %21, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.ImVec2, ptr %264, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %265, ptr align 4 %30, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %266 = load ptr, ptr %8, align 8, !tbaa !5
  %267 = load i32, ptr %9, align 4, !tbaa !9
  %268 = sub nsw i32 %267, 1
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds %struct.ImVec2, ptr %266, i64 %269
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %271 = load ptr, ptr %20, align 8, !tbaa !5
  %272 = load i32, ptr %9, align 4, !tbaa !9
  %273 = sub nsw i32 %272, 1
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds %struct.ImVec2, ptr %271, i64 %274
  %276 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %275, float noundef 1.000000e+00)
  store <2 x float> %276, ptr %33, align 4
  %277 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %270, ptr noundef nonnull align 4 dereferenceable(8) %33)
  store <2 x float> %277, ptr %32, align 4
  %278 = load ptr, ptr %21, align 8, !tbaa !5
  %279 = load i32, ptr %9, align 4, !tbaa !9
  %280 = sub nsw i32 %279, 1
  %281 = mul nsw i32 %280, 2
  %282 = add nsw i32 %281, 0
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds %struct.ImVec2, ptr %278, i64 %283
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %284, ptr align 4 %32, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %285 = load ptr, ptr %8, align 8, !tbaa !5
  %286 = load i32, ptr %9, align 4, !tbaa !9
  %287 = sub nsw i32 %286, 1
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds %struct.ImVec2, ptr %285, i64 %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %290 = load ptr, ptr %20, align 8, !tbaa !5
  %291 = load i32, ptr %9, align 4, !tbaa !9
  %292 = sub nsw i32 %291, 1
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds %struct.ImVec2, ptr %290, i64 %293
  %295 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %294, float noundef 1.000000e+00)
  store <2 x float> %295, ptr %35, align 4
  %296 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %289, ptr noundef nonnull align 4 dereferenceable(8) %35)
  store <2 x float> %296, ptr %34, align 4
  %297 = load ptr, ptr %21, align 8, !tbaa !5
  %298 = load i32, ptr %9, align 4, !tbaa !9
  %299 = sub nsw i32 %298, 1
  %300 = mul nsw i32 %299, 2
  %301 = add nsw i32 %300, 1
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds %struct.ImVec2, ptr %297, i64 %302
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %303, ptr align 4 %34, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  br label %304

304:                                              ; preds = %249, %246
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %305 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %306 = load i32, ptr %305, align 4, !tbaa !34
  store i32 %306, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %307

307:                                              ; preds = %513, %304
  %308 = load i32, ptr %37, align 4, !tbaa !9
  %309 = load i32, ptr %14, align 4, !tbaa !9
  %310 = icmp slt i32 %308, %309
  br i1 %310, label %312, label %311

311:                                              ; preds = %307
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %516

312:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %313 = load i32, ptr %37, align 4, !tbaa !9
  %314 = add nsw i32 %313, 1
  %315 = load i32, ptr %9, align 4, !tbaa !9
  %316 = icmp eq i32 %314, %315
  br i1 %316, label %317, label %318

317:                                              ; preds = %312
  br label %321

318:                                              ; preds = %312
  %319 = load i32, ptr %37, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  br label %321

321:                                              ; preds = %318, %317
  %322 = phi i32 [ 0, %317 ], [ %320, %318 ]
  store i32 %322, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  %323 = load i32, ptr %37, align 4, !tbaa !9
  %324 = add nsw i32 %323, 1
  %325 = load i32, ptr %9, align 4, !tbaa !9
  %326 = icmp eq i32 %324, %325
  br i1 %326, label %327, label %330

327:                                              ; preds = %321
  %328 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %329 = load i32, ptr %328, align 4, !tbaa !34
  br label %333

330:                                              ; preds = %321
  %331 = load i32, ptr %36, align 4, !tbaa !9
  %332 = add i32 %331, 3
  br label %333

333:                                              ; preds = %330, %327
  %334 = phi i32 [ %329, %327 ], [ %332, %330 ]
  store i32 %334, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %335 = load ptr, ptr %20, align 8, !tbaa !5
  %336 = load i32, ptr %37, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds %struct.ImVec2, ptr %335, i64 %337
  %339 = getelementptr inbounds %struct.ImVec2, ptr %338, i32 0, i32 0
  %340 = load float, ptr %339, align 4, !tbaa !29
  %341 = load ptr, ptr %20, align 8, !tbaa !5
  %342 = load i32, ptr %38, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds %struct.ImVec2, ptr %341, i64 %343
  %345 = getelementptr inbounds %struct.ImVec2, ptr %344, i32 0, i32 0
  %346 = load float, ptr %345, align 4, !tbaa !29
  %347 = fadd float %340, %346
  %348 = fmul float %347, 5.000000e-01
  store float %348, ptr %40, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  %349 = load ptr, ptr %20, align 8, !tbaa !5
  %350 = load i32, ptr %37, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds %struct.ImVec2, ptr %349, i64 %351
  %353 = getelementptr inbounds %struct.ImVec2, ptr %352, i32 0, i32 1
  %354 = load float, ptr %353, align 4, !tbaa !31
  %355 = load ptr, ptr %20, align 8, !tbaa !5
  %356 = load i32, ptr %38, align 4, !tbaa !9
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds %struct.ImVec2, ptr %355, i64 %357
  %359 = getelementptr inbounds %struct.ImVec2, ptr %358, i32 0, i32 1
  %360 = load float, ptr %359, align 4, !tbaa !31
  %361 = fadd float %354, %360
  %362 = fmul float %361, 5.000000e-01
  store float %362, ptr %41, align 4, !tbaa !13
  br label %363

363:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  %364 = load float, ptr %40, align 4, !tbaa !13
  %365 = load float, ptr %40, align 4, !tbaa !13
  %366 = load float, ptr %41, align 4, !tbaa !13
  %367 = load float, ptr %41, align 4, !tbaa !13
  %368 = fmul float %366, %367
  %369 = call float @llvm.fmuladd.f32(float %364, float %365, float %368)
  store float %369, ptr %42, align 4, !tbaa !13
  %370 = load float, ptr %42, align 4, !tbaa !13
  %371 = fcmp olt float %370, 5.000000e-01
  br i1 %371, label %372, label %373

372:                                              ; preds = %363
  store float 5.000000e-01, ptr %42, align 4, !tbaa !13
  br label %373

373:                                              ; preds = %372, %363
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %374 = load float, ptr %42, align 4, !tbaa !13
  %375 = fdiv float 1.000000e+00, %374
  store float %375, ptr %43, align 4, !tbaa !13
  %376 = load float, ptr %43, align 4, !tbaa !13
  %377 = load float, ptr %40, align 4, !tbaa !13
  %378 = fmul float %377, %376
  store float %378, ptr %40, align 4, !tbaa !13
  %379 = load float, ptr %43, align 4, !tbaa !13
  %380 = load float, ptr %41, align 4, !tbaa !13
  %381 = fmul float %380, %379
  store float %381, ptr %41, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  br label %382

382:                                              ; preds = %373
  br label %383

383:                                              ; preds = %382
  %384 = load float, ptr %40, align 4, !tbaa !13
  %385 = fmul float %384, 1.000000e+00
  store float %385, ptr %40, align 4, !tbaa !13
  %386 = load float, ptr %41, align 4, !tbaa !13
  %387 = fmul float %386, 1.000000e+00
  store float %387, ptr %41, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %388 = load ptr, ptr %21, align 8, !tbaa !5
  %389 = load i32, ptr %38, align 4, !tbaa !9
  %390 = mul nsw i32 %389, 2
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds %struct.ImVec2, ptr %388, i64 %391
  store ptr %392, ptr %44, align 8, !tbaa !5
  %393 = load ptr, ptr %8, align 8, !tbaa !5
  %394 = load i32, ptr %38, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds %struct.ImVec2, ptr %393, i64 %395
  %397 = getelementptr inbounds %struct.ImVec2, ptr %396, i32 0, i32 0
  %398 = load float, ptr %397, align 4, !tbaa !29
  %399 = load float, ptr %40, align 4, !tbaa !13
  %400 = fadd float %398, %399
  %401 = load ptr, ptr %44, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.ImVec2, ptr %401, i64 0
  %403 = getelementptr inbounds %struct.ImVec2, ptr %402, i32 0, i32 0
  store float %400, ptr %403, align 4, !tbaa !29
  %404 = load ptr, ptr %8, align 8, !tbaa !5
  %405 = load i32, ptr %38, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds %struct.ImVec2, ptr %404, i64 %406
  %408 = getelementptr inbounds %struct.ImVec2, ptr %407, i32 0, i32 1
  %409 = load float, ptr %408, align 4, !tbaa !31
  %410 = load float, ptr %41, align 4, !tbaa !13
  %411 = fadd float %409, %410
  %412 = load ptr, ptr %44, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.ImVec2, ptr %412, i64 0
  %414 = getelementptr inbounds %struct.ImVec2, ptr %413, i32 0, i32 1
  store float %411, ptr %414, align 4, !tbaa !31
  %415 = load ptr, ptr %8, align 8, !tbaa !5
  %416 = load i32, ptr %38, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds %struct.ImVec2, ptr %415, i64 %417
  %419 = getelementptr inbounds %struct.ImVec2, ptr %418, i32 0, i32 0
  %420 = load float, ptr %419, align 4, !tbaa !29
  %421 = load float, ptr %40, align 4, !tbaa !13
  %422 = fsub float %420, %421
  %423 = load ptr, ptr %44, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.ImVec2, ptr %423, i64 1
  %425 = getelementptr inbounds %struct.ImVec2, ptr %424, i32 0, i32 0
  store float %422, ptr %425, align 4, !tbaa !29
  %426 = load ptr, ptr %8, align 8, !tbaa !5
  %427 = load i32, ptr %38, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds %struct.ImVec2, ptr %426, i64 %428
  %430 = getelementptr inbounds %struct.ImVec2, ptr %429, i32 0, i32 1
  %431 = load float, ptr %430, align 4, !tbaa !31
  %432 = load float, ptr %41, align 4, !tbaa !13
  %433 = fsub float %431, %432
  %434 = load ptr, ptr %44, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.ImVec2, ptr %434, i64 1
  %436 = getelementptr inbounds %struct.ImVec2, ptr %435, i32 0, i32 1
  store float %433, ptr %436, align 4, !tbaa !31
  %437 = load i32, ptr %39, align 4, !tbaa !9
  %438 = add i32 %437, 0
  %439 = trunc i32 %438 to i16
  %440 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %441 = load ptr, ptr %440, align 8, !tbaa !35
  %442 = getelementptr inbounds i16, ptr %441, i64 0
  store i16 %439, ptr %442, align 2, !tbaa !36
  %443 = load i32, ptr %36, align 4, !tbaa !9
  %444 = add i32 %443, 0
  %445 = trunc i32 %444 to i16
  %446 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %447 = load ptr, ptr %446, align 8, !tbaa !35
  %448 = getelementptr inbounds i16, ptr %447, i64 1
  store i16 %445, ptr %448, align 2, !tbaa !36
  %449 = load i32, ptr %36, align 4, !tbaa !9
  %450 = add i32 %449, 2
  %451 = trunc i32 %450 to i16
  %452 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %453 = load ptr, ptr %452, align 8, !tbaa !35
  %454 = getelementptr inbounds i16, ptr %453, i64 2
  store i16 %451, ptr %454, align 2, !tbaa !36
  %455 = load i32, ptr %36, align 4, !tbaa !9
  %456 = add i32 %455, 2
  %457 = trunc i32 %456 to i16
  %458 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %459 = load ptr, ptr %458, align 8, !tbaa !35
  %460 = getelementptr inbounds i16, ptr %459, i64 3
  store i16 %457, ptr %460, align 2, !tbaa !36
  %461 = load i32, ptr %39, align 4, !tbaa !9
  %462 = add i32 %461, 2
  %463 = trunc i32 %462 to i16
  %464 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %465 = load ptr, ptr %464, align 8, !tbaa !35
  %466 = getelementptr inbounds i16, ptr %465, i64 4
  store i16 %463, ptr %466, align 2, !tbaa !36
  %467 = load i32, ptr %39, align 4, !tbaa !9
  %468 = add i32 %467, 0
  %469 = trunc i32 %468 to i16
  %470 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %471 = load ptr, ptr %470, align 8, !tbaa !35
  %472 = getelementptr inbounds i16, ptr %471, i64 5
  store i16 %469, ptr %472, align 2, !tbaa !36
  %473 = load i32, ptr %39, align 4, !tbaa !9
  %474 = add i32 %473, 1
  %475 = trunc i32 %474 to i16
  %476 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %477 = load ptr, ptr %476, align 8, !tbaa !35
  %478 = getelementptr inbounds i16, ptr %477, i64 6
  store i16 %475, ptr %478, align 2, !tbaa !36
  %479 = load i32, ptr %36, align 4, !tbaa !9
  %480 = add i32 %479, 1
  %481 = trunc i32 %480 to i16
  %482 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %483 = load ptr, ptr %482, align 8, !tbaa !35
  %484 = getelementptr inbounds i16, ptr %483, i64 7
  store i16 %481, ptr %484, align 2, !tbaa !36
  %485 = load i32, ptr %36, align 4, !tbaa !9
  %486 = add i32 %485, 0
  %487 = trunc i32 %486 to i16
  %488 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %489 = load ptr, ptr %488, align 8, !tbaa !35
  %490 = getelementptr inbounds i16, ptr %489, i64 8
  store i16 %487, ptr %490, align 2, !tbaa !36
  %491 = load i32, ptr %36, align 4, !tbaa !9
  %492 = add i32 %491, 0
  %493 = trunc i32 %492 to i16
  %494 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %495 = load ptr, ptr %494, align 8, !tbaa !35
  %496 = getelementptr inbounds i16, ptr %495, i64 9
  store i16 %493, ptr %496, align 2, !tbaa !36
  %497 = load i32, ptr %39, align 4, !tbaa !9
  %498 = add i32 %497, 0
  %499 = trunc i32 %498 to i16
  %500 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %501 = load ptr, ptr %500, align 8, !tbaa !35
  %502 = getelementptr inbounds i16, ptr %501, i64 10
  store i16 %499, ptr %502, align 2, !tbaa !36
  %503 = load i32, ptr %39, align 4, !tbaa !9
  %504 = add i32 %503, 1
  %505 = trunc i32 %504 to i16
  %506 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %507 = load ptr, ptr %506, align 8, !tbaa !35
  %508 = getelementptr inbounds i16, ptr %507, i64 11
  store i16 %505, ptr %508, align 2, !tbaa !36
  %509 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %510 = load ptr, ptr %509, align 8, !tbaa !35
  %511 = getelementptr inbounds i16, ptr %510, i64 12
  store ptr %511, ptr %509, align 8, !tbaa !35
  %512 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %512, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %513

513:                                              ; preds = %383
  %514 = load i32, ptr %37, align 4, !tbaa !9
  %515 = add nsw i32 %514, 1
  store i32 %515, ptr %37, align 4, !tbaa !9
  br label %307, !llvm.loop !38

516:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  store i32 0, ptr %45, align 4, !tbaa !9
  br label %517

517:                                              ; preds = %581, %516
  %518 = load i32, ptr %45, align 4, !tbaa !9
  %519 = load i32, ptr %9, align 4, !tbaa !9
  %520 = icmp slt i32 %518, %519
  br i1 %520, label %522, label %521

521:                                              ; preds = %517
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  br label %584

522:                                              ; preds = %517
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = load i32, ptr %45, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds %struct.ImVec2, ptr %523, i64 %525
  %527 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %528 = load ptr, ptr %527, align 8, !tbaa !39
  %529 = getelementptr inbounds %struct.ImDrawVert, ptr %528, i64 0
  %530 = getelementptr inbounds %struct.ImDrawVert, ptr %529, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %530, ptr align 4 %526, i64 8, i1 false), !tbaa.struct !25
  %531 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %532 = load ptr, ptr %531, align 8, !tbaa !39
  %533 = getelementptr inbounds %struct.ImDrawVert, ptr %532, i64 0
  %534 = getelementptr inbounds %struct.ImDrawVert, ptr %533, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %534, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %535 = load i32, ptr %10, align 4, !tbaa !9
  %536 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %537 = load ptr, ptr %536, align 8, !tbaa !39
  %538 = getelementptr inbounds %struct.ImDrawVert, ptr %537, i64 0
  %539 = getelementptr inbounds %struct.ImDrawVert, ptr %538, i32 0, i32 2
  store i32 %535, ptr %539, align 4, !tbaa !40
  %540 = load ptr, ptr %21, align 8, !tbaa !5
  %541 = load i32, ptr %45, align 4, !tbaa !9
  %542 = mul nsw i32 %541, 2
  %543 = add nsw i32 %542, 0
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds %struct.ImVec2, ptr %540, i64 %544
  %546 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %547 = load ptr, ptr %546, align 8, !tbaa !39
  %548 = getelementptr inbounds %struct.ImDrawVert, ptr %547, i64 1
  %549 = getelementptr inbounds %struct.ImDrawVert, ptr %548, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %549, ptr align 4 %545, i64 8, i1 false), !tbaa.struct !25
  %550 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %551 = load ptr, ptr %550, align 8, !tbaa !39
  %552 = getelementptr inbounds %struct.ImDrawVert, ptr %551, i64 1
  %553 = getelementptr inbounds %struct.ImDrawVert, ptr %552, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %553, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %554 = load i32, ptr %17, align 4, !tbaa !9
  %555 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %556 = load ptr, ptr %555, align 8, !tbaa !39
  %557 = getelementptr inbounds %struct.ImDrawVert, ptr %556, i64 1
  %558 = getelementptr inbounds %struct.ImDrawVert, ptr %557, i32 0, i32 2
  store i32 %554, ptr %558, align 4, !tbaa !40
  %559 = load ptr, ptr %21, align 8, !tbaa !5
  %560 = load i32, ptr %45, align 4, !tbaa !9
  %561 = mul nsw i32 %560, 2
  %562 = add nsw i32 %561, 1
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds %struct.ImVec2, ptr %559, i64 %563
  %565 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %566 = load ptr, ptr %565, align 8, !tbaa !39
  %567 = getelementptr inbounds %struct.ImDrawVert, ptr %566, i64 2
  %568 = getelementptr inbounds %struct.ImDrawVert, ptr %567, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %568, ptr align 4 %564, i64 8, i1 false), !tbaa.struct !25
  %569 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %570 = load ptr, ptr %569, align 8, !tbaa !39
  %571 = getelementptr inbounds %struct.ImDrawVert, ptr %570, i64 2
  %572 = getelementptr inbounds %struct.ImDrawVert, ptr %571, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %572, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %573 = load i32, ptr %17, align 4, !tbaa !9
  %574 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %575 = load ptr, ptr %574, align 8, !tbaa !39
  %576 = getelementptr inbounds %struct.ImDrawVert, ptr %575, i64 2
  %577 = getelementptr inbounds %struct.ImDrawVert, ptr %576, i32 0, i32 2
  store i32 %573, ptr %577, align 4, !tbaa !40
  %578 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %579 = load ptr, ptr %578, align 8, !tbaa !39
  %580 = getelementptr inbounds %struct.ImDrawVert, ptr %579, i64 3
  store ptr %580, ptr %578, align 8, !tbaa !39
  br label %581

581:                                              ; preds = %522
  %582 = load i32, ptr %45, align 4, !tbaa !9
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %45, align 4, !tbaa !9
  br label %517, !llvm.loop !42

584:                                              ; preds = %521
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  br label %1094

585:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %586 = load float, ptr %12, align 4, !tbaa !13
  %587 = fsub float %586, 1.000000e+00
  %588 = fmul float %587, 5.000000e-01
  store float %588, ptr %46, align 4, !tbaa !13
  %589 = load i8, ptr %11, align 1, !tbaa !11, !range !26, !noundef !27
  %590 = trunc i8 %589 to i1
  br i1 %590, label %702, label %591

591:                                              ; preds = %585
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #7
  %592 = load i32, ptr %9, align 4, !tbaa !9
  %593 = sub nsw i32 %592, 1
  store i32 %593, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.ImVec2, ptr %594, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %596 = load ptr, ptr %20, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.ImVec2, ptr %596, i64 0
  %598 = load float, ptr %46, align 4, !tbaa !13
  %599 = fadd float %598, 1.000000e+00
  %600 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %597, float noundef %599)
  store <2 x float> %600, ptr %49, align 4
  %601 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %595, ptr noundef nonnull align 4 dereferenceable(8) %49)
  store <2 x float> %601, ptr %48, align 4
  %602 = load ptr, ptr %21, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.ImVec2, ptr %602, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %603, ptr align 4 %48, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %604 = load ptr, ptr %8, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.ImVec2, ptr %604, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  %606 = load ptr, ptr %20, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.ImVec2, ptr %606, i64 0
  %608 = load float, ptr %46, align 4, !tbaa !13
  %609 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %607, float noundef %608)
  store <2 x float> %609, ptr %51, align 4
  %610 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %605, ptr noundef nonnull align 4 dereferenceable(8) %51)
  store <2 x float> %610, ptr %50, align 4
  %611 = load ptr, ptr %21, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.ImVec2, ptr %611, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %612, ptr align 4 %50, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  %613 = load ptr, ptr %8, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.ImVec2, ptr %613, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %615 = load ptr, ptr %20, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.ImVec2, ptr %615, i64 0
  %617 = load float, ptr %46, align 4, !tbaa !13
  %618 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %616, float noundef %617)
  store <2 x float> %618, ptr %53, align 4
  %619 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %614, ptr noundef nonnull align 4 dereferenceable(8) %53)
  store <2 x float> %619, ptr %52, align 4
  %620 = load ptr, ptr %21, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.ImVec2, ptr %620, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %621, ptr align 4 %52, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  %622 = load ptr, ptr %8, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.ImVec2, ptr %622, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %624 = load ptr, ptr %20, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.ImVec2, ptr %624, i64 0
  %626 = load float, ptr %46, align 4, !tbaa !13
  %627 = fadd float %626, 1.000000e+00
  %628 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %625, float noundef %627)
  store <2 x float> %628, ptr %55, align 4
  %629 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %623, ptr noundef nonnull align 4 dereferenceable(8) %55)
  store <2 x float> %629, ptr %54, align 4
  %630 = load ptr, ptr %21, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.ImVec2, ptr %630, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %631, ptr align 4 %54, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %632 = load ptr, ptr %8, align 8, !tbaa !5
  %633 = load i32, ptr %47, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds %struct.ImVec2, ptr %632, i64 %634
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  %636 = load ptr, ptr %20, align 8, !tbaa !5
  %637 = load i32, ptr %47, align 4, !tbaa !9
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds %struct.ImVec2, ptr %636, i64 %638
  %640 = load float, ptr %46, align 4, !tbaa !13
  %641 = fadd float %640, 1.000000e+00
  %642 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %639, float noundef %641)
  store <2 x float> %642, ptr %57, align 4
  %643 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %635, ptr noundef nonnull align 4 dereferenceable(8) %57)
  store <2 x float> %643, ptr %56, align 4
  %644 = load ptr, ptr %21, align 8, !tbaa !5
  %645 = load i32, ptr %47, align 4, !tbaa !9
  %646 = mul nsw i32 %645, 4
  %647 = add nsw i32 %646, 0
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds %struct.ImVec2, ptr %644, i64 %648
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %649, ptr align 4 %56, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  %650 = load ptr, ptr %8, align 8, !tbaa !5
  %651 = load i32, ptr %47, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds %struct.ImVec2, ptr %650, i64 %652
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %654 = load ptr, ptr %20, align 8, !tbaa !5
  %655 = load i32, ptr %47, align 4, !tbaa !9
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds %struct.ImVec2, ptr %654, i64 %656
  %658 = load float, ptr %46, align 4, !tbaa !13
  %659 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %657, float noundef %658)
  store <2 x float> %659, ptr %59, align 4
  %660 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %653, ptr noundef nonnull align 4 dereferenceable(8) %59)
  store <2 x float> %660, ptr %58, align 4
  %661 = load ptr, ptr %21, align 8, !tbaa !5
  %662 = load i32, ptr %47, align 4, !tbaa !9
  %663 = mul nsw i32 %662, 4
  %664 = add nsw i32 %663, 1
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds %struct.ImVec2, ptr %661, i64 %665
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %666, ptr align 4 %58, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = load i32, ptr %47, align 4, !tbaa !9
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds %struct.ImVec2, ptr %667, i64 %669
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %671 = load ptr, ptr %20, align 8, !tbaa !5
  %672 = load i32, ptr %47, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds %struct.ImVec2, ptr %671, i64 %673
  %675 = load float, ptr %46, align 4, !tbaa !13
  %676 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %674, float noundef %675)
  store <2 x float> %676, ptr %61, align 4
  %677 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %670, ptr noundef nonnull align 4 dereferenceable(8) %61)
  store <2 x float> %677, ptr %60, align 4
  %678 = load ptr, ptr %21, align 8, !tbaa !5
  %679 = load i32, ptr %47, align 4, !tbaa !9
  %680 = mul nsw i32 %679, 4
  %681 = add nsw i32 %680, 2
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds %struct.ImVec2, ptr %678, i64 %682
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %683, ptr align 4 %60, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #7
  %684 = load ptr, ptr %8, align 8, !tbaa !5
  %685 = load i32, ptr %47, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds %struct.ImVec2, ptr %684, i64 %686
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %688 = load ptr, ptr %20, align 8, !tbaa !5
  %689 = load i32, ptr %47, align 4, !tbaa !9
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds %struct.ImVec2, ptr %688, i64 %690
  %692 = load float, ptr %46, align 4, !tbaa !13
  %693 = fadd float %692, 1.000000e+00
  %694 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %691, float noundef %693)
  store <2 x float> %694, ptr %63, align 4
  %695 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %687, ptr noundef nonnull align 4 dereferenceable(8) %63)
  store <2 x float> %695, ptr %62, align 4
  %696 = load ptr, ptr %21, align 8, !tbaa !5
  %697 = load i32, ptr %47, align 4, !tbaa !9
  %698 = mul nsw i32 %697, 4
  %699 = add nsw i32 %698, 3
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds %struct.ImVec2, ptr %696, i64 %700
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %701, ptr align 4 %62, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  br label %702

702:                                              ; preds = %591, %585
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #7
  %703 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %704 = load i32, ptr %703, align 4, !tbaa !34
  store i32 %704, ptr %64, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #7
  store i32 0, ptr %65, align 4, !tbaa !9
  br label %705

705:                                              ; preds = %1001, %702
  %706 = load i32, ptr %65, align 4, !tbaa !9
  %707 = load i32, ptr %14, align 4, !tbaa !9
  %708 = icmp slt i32 %706, %707
  br i1 %708, label %710, label %709

709:                                              ; preds = %705
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  br label %1004

710:                                              ; preds = %705
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #7
  %711 = load i32, ptr %65, align 4, !tbaa !9
  %712 = add nsw i32 %711, 1
  %713 = load i32, ptr %9, align 4, !tbaa !9
  %714 = icmp eq i32 %712, %713
  br i1 %714, label %715, label %716

715:                                              ; preds = %710
  br label %719

716:                                              ; preds = %710
  %717 = load i32, ptr %65, align 4, !tbaa !9
  %718 = add nsw i32 %717, 1
  br label %719

719:                                              ; preds = %716, %715
  %720 = phi i32 [ 0, %715 ], [ %718, %716 ]
  store i32 %720, ptr %66, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #7
  %721 = load i32, ptr %65, align 4, !tbaa !9
  %722 = add nsw i32 %721, 1
  %723 = load i32, ptr %9, align 4, !tbaa !9
  %724 = icmp eq i32 %722, %723
  br i1 %724, label %725, label %728

725:                                              ; preds = %719
  %726 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %727 = load i32, ptr %726, align 4, !tbaa !34
  br label %731

728:                                              ; preds = %719
  %729 = load i32, ptr %64, align 4, !tbaa !9
  %730 = add i32 %729, 4
  br label %731

731:                                              ; preds = %728, %725
  %732 = phi i32 [ %727, %725 ], [ %730, %728 ]
  store i32 %732, ptr %67, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  %733 = load ptr, ptr %20, align 8, !tbaa !5
  %734 = load i32, ptr %65, align 4, !tbaa !9
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds %struct.ImVec2, ptr %733, i64 %735
  %737 = getelementptr inbounds %struct.ImVec2, ptr %736, i32 0, i32 0
  %738 = load float, ptr %737, align 4, !tbaa !29
  %739 = load ptr, ptr %20, align 8, !tbaa !5
  %740 = load i32, ptr %66, align 4, !tbaa !9
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds %struct.ImVec2, ptr %739, i64 %741
  %743 = getelementptr inbounds %struct.ImVec2, ptr %742, i32 0, i32 0
  %744 = load float, ptr %743, align 4, !tbaa !29
  %745 = fadd float %738, %744
  %746 = fmul float %745, 5.000000e-01
  store float %746, ptr %68, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %747 = load ptr, ptr %20, align 8, !tbaa !5
  %748 = load i32, ptr %65, align 4, !tbaa !9
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds %struct.ImVec2, ptr %747, i64 %749
  %751 = getelementptr inbounds %struct.ImVec2, ptr %750, i32 0, i32 1
  %752 = load float, ptr %751, align 4, !tbaa !31
  %753 = load ptr, ptr %20, align 8, !tbaa !5
  %754 = load i32, ptr %66, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds %struct.ImVec2, ptr %753, i64 %755
  %757 = getelementptr inbounds %struct.ImVec2, ptr %756, i32 0, i32 1
  %758 = load float, ptr %757, align 4, !tbaa !31
  %759 = fadd float %752, %758
  %760 = fmul float %759, 5.000000e-01
  store float %760, ptr %69, align 4, !tbaa !13
  br label %761

761:                                              ; preds = %731
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %762 = load float, ptr %68, align 4, !tbaa !13
  %763 = load float, ptr %68, align 4, !tbaa !13
  %764 = load float, ptr %69, align 4, !tbaa !13
  %765 = load float, ptr %69, align 4, !tbaa !13
  %766 = fmul float %764, %765
  %767 = call float @llvm.fmuladd.f32(float %762, float %763, float %766)
  store float %767, ptr %70, align 4, !tbaa !13
  %768 = load float, ptr %70, align 4, !tbaa !13
  %769 = fcmp olt float %768, 5.000000e-01
  br i1 %769, label %770, label %771

770:                                              ; preds = %761
  store float 5.000000e-01, ptr %70, align 4, !tbaa !13
  br label %771

771:                                              ; preds = %770, %761
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #7
  %772 = load float, ptr %70, align 4, !tbaa !13
  %773 = fdiv float 1.000000e+00, %772
  store float %773, ptr %71, align 4, !tbaa !13
  %774 = load float, ptr %71, align 4, !tbaa !13
  %775 = load float, ptr %68, align 4, !tbaa !13
  %776 = fmul float %775, %774
  store float %776, ptr %68, align 4, !tbaa !13
  %777 = load float, ptr %71, align 4, !tbaa !13
  %778 = load float, ptr %69, align 4, !tbaa !13
  %779 = fmul float %778, %777
  store float %779, ptr %69, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  br label %780

780:                                              ; preds = %771
  br label %781

781:                                              ; preds = %780
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #7
  %782 = load float, ptr %68, align 4, !tbaa !13
  %783 = load float, ptr %46, align 4, !tbaa !13
  %784 = fadd float %783, 1.000000e+00
  %785 = fmul float %782, %784
  store float %785, ptr %72, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #7
  %786 = load float, ptr %69, align 4, !tbaa !13
  %787 = load float, ptr %46, align 4, !tbaa !13
  %788 = fadd float %787, 1.000000e+00
  %789 = fmul float %786, %788
  store float %789, ptr %73, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  %790 = load float, ptr %68, align 4, !tbaa !13
  %791 = load float, ptr %46, align 4, !tbaa !13
  %792 = fmul float %790, %791
  store float %792, ptr %74, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #7
  %793 = load float, ptr %69, align 4, !tbaa !13
  %794 = load float, ptr %46, align 4, !tbaa !13
  %795 = fmul float %793, %794
  store float %795, ptr %75, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #7
  %796 = load ptr, ptr %21, align 8, !tbaa !5
  %797 = load i32, ptr %66, align 4, !tbaa !9
  %798 = mul nsw i32 %797, 4
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds %struct.ImVec2, ptr %796, i64 %799
  store ptr %800, ptr %76, align 8, !tbaa !5
  %801 = load ptr, ptr %8, align 8, !tbaa !5
  %802 = load i32, ptr %66, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds %struct.ImVec2, ptr %801, i64 %803
  %805 = getelementptr inbounds %struct.ImVec2, ptr %804, i32 0, i32 0
  %806 = load float, ptr %805, align 4, !tbaa !29
  %807 = load float, ptr %72, align 4, !tbaa !13
  %808 = fadd float %806, %807
  %809 = load ptr, ptr %76, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.ImVec2, ptr %809, i64 0
  %811 = getelementptr inbounds %struct.ImVec2, ptr %810, i32 0, i32 0
  store float %808, ptr %811, align 4, !tbaa !29
  %812 = load ptr, ptr %8, align 8, !tbaa !5
  %813 = load i32, ptr %66, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds %struct.ImVec2, ptr %812, i64 %814
  %816 = getelementptr inbounds %struct.ImVec2, ptr %815, i32 0, i32 1
  %817 = load float, ptr %816, align 4, !tbaa !31
  %818 = load float, ptr %73, align 4, !tbaa !13
  %819 = fadd float %817, %818
  %820 = load ptr, ptr %76, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.ImVec2, ptr %820, i64 0
  %822 = getelementptr inbounds %struct.ImVec2, ptr %821, i32 0, i32 1
  store float %819, ptr %822, align 4, !tbaa !31
  %823 = load ptr, ptr %8, align 8, !tbaa !5
  %824 = load i32, ptr %66, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds %struct.ImVec2, ptr %823, i64 %825
  %827 = getelementptr inbounds %struct.ImVec2, ptr %826, i32 0, i32 0
  %828 = load float, ptr %827, align 4, !tbaa !29
  %829 = load float, ptr %74, align 4, !tbaa !13
  %830 = fadd float %828, %829
  %831 = load ptr, ptr %76, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.ImVec2, ptr %831, i64 1
  %833 = getelementptr inbounds %struct.ImVec2, ptr %832, i32 0, i32 0
  store float %830, ptr %833, align 4, !tbaa !29
  %834 = load ptr, ptr %8, align 8, !tbaa !5
  %835 = load i32, ptr %66, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds %struct.ImVec2, ptr %834, i64 %836
  %838 = getelementptr inbounds %struct.ImVec2, ptr %837, i32 0, i32 1
  %839 = load float, ptr %838, align 4, !tbaa !31
  %840 = load float, ptr %75, align 4, !tbaa !13
  %841 = fadd float %839, %840
  %842 = load ptr, ptr %76, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.ImVec2, ptr %842, i64 1
  %844 = getelementptr inbounds %struct.ImVec2, ptr %843, i32 0, i32 1
  store float %841, ptr %844, align 4, !tbaa !31
  %845 = load ptr, ptr %8, align 8, !tbaa !5
  %846 = load i32, ptr %66, align 4, !tbaa !9
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds %struct.ImVec2, ptr %845, i64 %847
  %849 = getelementptr inbounds %struct.ImVec2, ptr %848, i32 0, i32 0
  %850 = load float, ptr %849, align 4, !tbaa !29
  %851 = load float, ptr %74, align 4, !tbaa !13
  %852 = fsub float %850, %851
  %853 = load ptr, ptr %76, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.ImVec2, ptr %853, i64 2
  %855 = getelementptr inbounds %struct.ImVec2, ptr %854, i32 0, i32 0
  store float %852, ptr %855, align 4, !tbaa !29
  %856 = load ptr, ptr %8, align 8, !tbaa !5
  %857 = load i32, ptr %66, align 4, !tbaa !9
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds %struct.ImVec2, ptr %856, i64 %858
  %860 = getelementptr inbounds %struct.ImVec2, ptr %859, i32 0, i32 1
  %861 = load float, ptr %860, align 4, !tbaa !31
  %862 = load float, ptr %75, align 4, !tbaa !13
  %863 = fsub float %861, %862
  %864 = load ptr, ptr %76, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.ImVec2, ptr %864, i64 2
  %866 = getelementptr inbounds %struct.ImVec2, ptr %865, i32 0, i32 1
  store float %863, ptr %866, align 4, !tbaa !31
  %867 = load ptr, ptr %8, align 8, !tbaa !5
  %868 = load i32, ptr %66, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds %struct.ImVec2, ptr %867, i64 %869
  %871 = getelementptr inbounds %struct.ImVec2, ptr %870, i32 0, i32 0
  %872 = load float, ptr %871, align 4, !tbaa !29
  %873 = load float, ptr %72, align 4, !tbaa !13
  %874 = fsub float %872, %873
  %875 = load ptr, ptr %76, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.ImVec2, ptr %875, i64 3
  %877 = getelementptr inbounds %struct.ImVec2, ptr %876, i32 0, i32 0
  store float %874, ptr %877, align 4, !tbaa !29
  %878 = load ptr, ptr %8, align 8, !tbaa !5
  %879 = load i32, ptr %66, align 4, !tbaa !9
  %880 = sext i32 %879 to i64
  %881 = getelementptr inbounds %struct.ImVec2, ptr %878, i64 %880
  %882 = getelementptr inbounds %struct.ImVec2, ptr %881, i32 0, i32 1
  %883 = load float, ptr %882, align 4, !tbaa !31
  %884 = load float, ptr %73, align 4, !tbaa !13
  %885 = fsub float %883, %884
  %886 = load ptr, ptr %76, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.ImVec2, ptr %886, i64 3
  %888 = getelementptr inbounds %struct.ImVec2, ptr %887, i32 0, i32 1
  store float %885, ptr %888, align 4, !tbaa !31
  %889 = load i32, ptr %67, align 4, !tbaa !9
  %890 = add i32 %889, 1
  %891 = trunc i32 %890 to i16
  %892 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %893 = load ptr, ptr %892, align 8, !tbaa !35
  %894 = getelementptr inbounds i16, ptr %893, i64 0
  store i16 %891, ptr %894, align 2, !tbaa !36
  %895 = load i32, ptr %64, align 4, !tbaa !9
  %896 = add i32 %895, 1
  %897 = trunc i32 %896 to i16
  %898 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %899 = load ptr, ptr %898, align 8, !tbaa !35
  %900 = getelementptr inbounds i16, ptr %899, i64 1
  store i16 %897, ptr %900, align 2, !tbaa !36
  %901 = load i32, ptr %64, align 4, !tbaa !9
  %902 = add i32 %901, 2
  %903 = trunc i32 %902 to i16
  %904 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %905 = load ptr, ptr %904, align 8, !tbaa !35
  %906 = getelementptr inbounds i16, ptr %905, i64 2
  store i16 %903, ptr %906, align 2, !tbaa !36
  %907 = load i32, ptr %64, align 4, !tbaa !9
  %908 = add i32 %907, 2
  %909 = trunc i32 %908 to i16
  %910 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %911 = load ptr, ptr %910, align 8, !tbaa !35
  %912 = getelementptr inbounds i16, ptr %911, i64 3
  store i16 %909, ptr %912, align 2, !tbaa !36
  %913 = load i32, ptr %67, align 4, !tbaa !9
  %914 = add i32 %913, 2
  %915 = trunc i32 %914 to i16
  %916 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %917 = load ptr, ptr %916, align 8, !tbaa !35
  %918 = getelementptr inbounds i16, ptr %917, i64 4
  store i16 %915, ptr %918, align 2, !tbaa !36
  %919 = load i32, ptr %67, align 4, !tbaa !9
  %920 = add i32 %919, 1
  %921 = trunc i32 %920 to i16
  %922 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %923 = load ptr, ptr %922, align 8, !tbaa !35
  %924 = getelementptr inbounds i16, ptr %923, i64 5
  store i16 %921, ptr %924, align 2, !tbaa !36
  %925 = load i32, ptr %67, align 4, !tbaa !9
  %926 = add i32 %925, 1
  %927 = trunc i32 %926 to i16
  %928 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %929 = load ptr, ptr %928, align 8, !tbaa !35
  %930 = getelementptr inbounds i16, ptr %929, i64 6
  store i16 %927, ptr %930, align 2, !tbaa !36
  %931 = load i32, ptr %64, align 4, !tbaa !9
  %932 = add i32 %931, 1
  %933 = trunc i32 %932 to i16
  %934 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %935 = load ptr, ptr %934, align 8, !tbaa !35
  %936 = getelementptr inbounds i16, ptr %935, i64 7
  store i16 %933, ptr %936, align 2, !tbaa !36
  %937 = load i32, ptr %64, align 4, !tbaa !9
  %938 = add i32 %937, 0
  %939 = trunc i32 %938 to i16
  %940 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %941 = load ptr, ptr %940, align 8, !tbaa !35
  %942 = getelementptr inbounds i16, ptr %941, i64 8
  store i16 %939, ptr %942, align 2, !tbaa !36
  %943 = load i32, ptr %64, align 4, !tbaa !9
  %944 = add i32 %943, 0
  %945 = trunc i32 %944 to i16
  %946 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %947 = load ptr, ptr %946, align 8, !tbaa !35
  %948 = getelementptr inbounds i16, ptr %947, i64 9
  store i16 %945, ptr %948, align 2, !tbaa !36
  %949 = load i32, ptr %67, align 4, !tbaa !9
  %950 = add i32 %949, 0
  %951 = trunc i32 %950 to i16
  %952 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %953 = load ptr, ptr %952, align 8, !tbaa !35
  %954 = getelementptr inbounds i16, ptr %953, i64 10
  store i16 %951, ptr %954, align 2, !tbaa !36
  %955 = load i32, ptr %67, align 4, !tbaa !9
  %956 = add i32 %955, 1
  %957 = trunc i32 %956 to i16
  %958 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %959 = load ptr, ptr %958, align 8, !tbaa !35
  %960 = getelementptr inbounds i16, ptr %959, i64 11
  store i16 %957, ptr %960, align 2, !tbaa !36
  %961 = load i32, ptr %67, align 4, !tbaa !9
  %962 = add i32 %961, 2
  %963 = trunc i32 %962 to i16
  %964 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %965 = load ptr, ptr %964, align 8, !tbaa !35
  %966 = getelementptr inbounds i16, ptr %965, i64 12
  store i16 %963, ptr %966, align 2, !tbaa !36
  %967 = load i32, ptr %64, align 4, !tbaa !9
  %968 = add i32 %967, 2
  %969 = trunc i32 %968 to i16
  %970 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %971 = load ptr, ptr %970, align 8, !tbaa !35
  %972 = getelementptr inbounds i16, ptr %971, i64 13
  store i16 %969, ptr %972, align 2, !tbaa !36
  %973 = load i32, ptr %64, align 4, !tbaa !9
  %974 = add i32 %973, 3
  %975 = trunc i32 %974 to i16
  %976 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %977 = load ptr, ptr %976, align 8, !tbaa !35
  %978 = getelementptr inbounds i16, ptr %977, i64 14
  store i16 %975, ptr %978, align 2, !tbaa !36
  %979 = load i32, ptr %64, align 4, !tbaa !9
  %980 = add i32 %979, 3
  %981 = trunc i32 %980 to i16
  %982 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %983 = load ptr, ptr %982, align 8, !tbaa !35
  %984 = getelementptr inbounds i16, ptr %983, i64 15
  store i16 %981, ptr %984, align 2, !tbaa !36
  %985 = load i32, ptr %67, align 4, !tbaa !9
  %986 = add i32 %985, 3
  %987 = trunc i32 %986 to i16
  %988 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %989 = load ptr, ptr %988, align 8, !tbaa !35
  %990 = getelementptr inbounds i16, ptr %989, i64 16
  store i16 %987, ptr %990, align 2, !tbaa !36
  %991 = load i32, ptr %67, align 4, !tbaa !9
  %992 = add i32 %991, 2
  %993 = trunc i32 %992 to i16
  %994 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %995 = load ptr, ptr %994, align 8, !tbaa !35
  %996 = getelementptr inbounds i16, ptr %995, i64 17
  store i16 %993, ptr %996, align 2, !tbaa !36
  %997 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %998 = load ptr, ptr %997, align 8, !tbaa !35
  %999 = getelementptr inbounds i16, ptr %998, i64 18
  store ptr %999, ptr %997, align 8, !tbaa !35
  %1000 = load i32, ptr %67, align 4, !tbaa !9
  store i32 %1000, ptr %64, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #7
  br label %1001

1001:                                             ; preds = %781
  %1002 = load i32, ptr %65, align 4, !tbaa !9
  %1003 = add nsw i32 %1002, 1
  store i32 %1003, ptr %65, align 4, !tbaa !9
  br label %705, !llvm.loop !43

1004:                                             ; preds = %709
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #7
  store i32 0, ptr %77, align 4, !tbaa !9
  br label %1005

1005:                                             ; preds = %1090, %1004
  %1006 = load i32, ptr %77, align 4, !tbaa !9
  %1007 = load i32, ptr %9, align 4, !tbaa !9
  %1008 = icmp slt i32 %1006, %1007
  br i1 %1008, label %1010, label %1009

1009:                                             ; preds = %1005
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #7
  br label %1093

1010:                                             ; preds = %1005
  %1011 = load ptr, ptr %21, align 8, !tbaa !5
  %1012 = load i32, ptr %77, align 4, !tbaa !9
  %1013 = mul nsw i32 %1012, 4
  %1014 = add nsw i32 %1013, 0
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds %struct.ImVec2, ptr %1011, i64 %1015
  %1017 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1018 = load ptr, ptr %1017, align 8, !tbaa !39
  %1019 = getelementptr inbounds %struct.ImDrawVert, ptr %1018, i64 0
  %1020 = getelementptr inbounds %struct.ImDrawVert, ptr %1019, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1020, ptr align 4 %1016, i64 8, i1 false), !tbaa.struct !25
  %1021 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1022 = load ptr, ptr %1021, align 8, !tbaa !39
  %1023 = getelementptr inbounds %struct.ImDrawVert, ptr %1022, i64 0
  %1024 = getelementptr inbounds %struct.ImDrawVert, ptr %1023, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1024, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1025 = load i32, ptr %17, align 4, !tbaa !9
  %1026 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1027 = load ptr, ptr %1026, align 8, !tbaa !39
  %1028 = getelementptr inbounds %struct.ImDrawVert, ptr %1027, i64 0
  %1029 = getelementptr inbounds %struct.ImDrawVert, ptr %1028, i32 0, i32 2
  store i32 %1025, ptr %1029, align 4, !tbaa !40
  %1030 = load ptr, ptr %21, align 8, !tbaa !5
  %1031 = load i32, ptr %77, align 4, !tbaa !9
  %1032 = mul nsw i32 %1031, 4
  %1033 = add nsw i32 %1032, 1
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds %struct.ImVec2, ptr %1030, i64 %1034
  %1036 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1037 = load ptr, ptr %1036, align 8, !tbaa !39
  %1038 = getelementptr inbounds %struct.ImDrawVert, ptr %1037, i64 1
  %1039 = getelementptr inbounds %struct.ImDrawVert, ptr %1038, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1039, ptr align 4 %1035, i64 8, i1 false), !tbaa.struct !25
  %1040 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1041 = load ptr, ptr %1040, align 8, !tbaa !39
  %1042 = getelementptr inbounds %struct.ImDrawVert, ptr %1041, i64 1
  %1043 = getelementptr inbounds %struct.ImDrawVert, ptr %1042, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1043, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1044 = load i32, ptr %10, align 4, !tbaa !9
  %1045 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1046 = load ptr, ptr %1045, align 8, !tbaa !39
  %1047 = getelementptr inbounds %struct.ImDrawVert, ptr %1046, i64 1
  %1048 = getelementptr inbounds %struct.ImDrawVert, ptr %1047, i32 0, i32 2
  store i32 %1044, ptr %1048, align 4, !tbaa !40
  %1049 = load ptr, ptr %21, align 8, !tbaa !5
  %1050 = load i32, ptr %77, align 4, !tbaa !9
  %1051 = mul nsw i32 %1050, 4
  %1052 = add nsw i32 %1051, 2
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds %struct.ImVec2, ptr %1049, i64 %1053
  %1055 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1056 = load ptr, ptr %1055, align 8, !tbaa !39
  %1057 = getelementptr inbounds %struct.ImDrawVert, ptr %1056, i64 2
  %1058 = getelementptr inbounds %struct.ImDrawVert, ptr %1057, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1058, ptr align 4 %1054, i64 8, i1 false), !tbaa.struct !25
  %1059 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1060 = load ptr, ptr %1059, align 8, !tbaa !39
  %1061 = getelementptr inbounds %struct.ImDrawVert, ptr %1060, i64 2
  %1062 = getelementptr inbounds %struct.ImDrawVert, ptr %1061, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1062, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1063 = load i32, ptr %10, align 4, !tbaa !9
  %1064 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1065 = load ptr, ptr %1064, align 8, !tbaa !39
  %1066 = getelementptr inbounds %struct.ImDrawVert, ptr %1065, i64 2
  %1067 = getelementptr inbounds %struct.ImDrawVert, ptr %1066, i32 0, i32 2
  store i32 %1063, ptr %1067, align 4, !tbaa !40
  %1068 = load ptr, ptr %21, align 8, !tbaa !5
  %1069 = load i32, ptr %77, align 4, !tbaa !9
  %1070 = mul nsw i32 %1069, 4
  %1071 = add nsw i32 %1070, 3
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds %struct.ImVec2, ptr %1068, i64 %1072
  %1074 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1075 = load ptr, ptr %1074, align 8, !tbaa !39
  %1076 = getelementptr inbounds %struct.ImDrawVert, ptr %1075, i64 3
  %1077 = getelementptr inbounds %struct.ImDrawVert, ptr %1076, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1077, ptr align 4 %1073, i64 8, i1 false), !tbaa.struct !25
  %1078 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1079 = load ptr, ptr %1078, align 8, !tbaa !39
  %1080 = getelementptr inbounds %struct.ImDrawVert, ptr %1079, i64 3
  %1081 = getelementptr inbounds %struct.ImDrawVert, ptr %1080, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1081, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1082 = load i32, ptr %17, align 4, !tbaa !9
  %1083 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1084 = load ptr, ptr %1083, align 8, !tbaa !39
  %1085 = getelementptr inbounds %struct.ImDrawVert, ptr %1084, i64 3
  %1086 = getelementptr inbounds %struct.ImDrawVert, ptr %1085, i32 0, i32 2
  store i32 %1082, ptr %1086, align 4, !tbaa !40
  %1087 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1088 = load ptr, ptr %1087, align 8, !tbaa !39
  %1089 = getelementptr inbounds %struct.ImDrawVert, ptr %1088, i64 4
  store ptr %1089, ptr %1087, align 8, !tbaa !39
  br label %1090

1090:                                             ; preds = %1010
  %1091 = load i32, ptr %77, align 4, !tbaa !9
  %1092 = add nsw i32 %1091, 1
  store i32 %1092, ptr %77, align 4, !tbaa !9
  br label %1005, !llvm.loop !44

1093:                                             ; preds = %1009
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %1094

1094:                                             ; preds = %1093, %584
  %1095 = load i32, ptr %19, align 4, !tbaa !9
  %1096 = trunc i32 %1095 to i16
  %1097 = zext i16 %1096 to i32
  %1098 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1099 = load i32, ptr %1098, align 4, !tbaa !34
  %1100 = add i32 %1099, %1097
  store i32 %1100, ptr %1098, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %1345

1101:                                             ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  %1102 = load i32, ptr %14, align 4, !tbaa !9
  %1103 = mul nsw i32 %1102, 6
  store i32 %1103, ptr %78, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #7
  %1104 = load i32, ptr %14, align 4, !tbaa !9
  %1105 = mul nsw i32 %1104, 4
  store i32 %1105, ptr %79, align 4, !tbaa !9
  %1106 = load i32, ptr %78, align 4, !tbaa !9
  %1107 = load i32, ptr %79, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %89, i32 noundef %1106, i32 noundef %1107)
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  store i32 0, ptr %80, align 4, !tbaa !9
  br label %1108

1108:                                             ; preds = %1341, %1101
  %1109 = load i32, ptr %80, align 4, !tbaa !9
  %1110 = load i32, ptr %14, align 4, !tbaa !9
  %1111 = icmp slt i32 %1109, %1110
  br i1 %1111, label %1113, label %1112

1112:                                             ; preds = %1108
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %1344

1113:                                             ; preds = %1108
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #7
  %1114 = load i32, ptr %80, align 4, !tbaa !9
  %1115 = add nsw i32 %1114, 1
  %1116 = load i32, ptr %9, align 4, !tbaa !9
  %1117 = icmp eq i32 %1115, %1116
  br i1 %1117, label %1118, label %1119

1118:                                             ; preds = %1113
  br label %1122

1119:                                             ; preds = %1113
  %1120 = load i32, ptr %80, align 4, !tbaa !9
  %1121 = add nsw i32 %1120, 1
  br label %1122

1122:                                             ; preds = %1119, %1118
  %1123 = phi i32 [ 0, %1118 ], [ %1121, %1119 ]
  store i32 %1123, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  %1124 = load ptr, ptr %8, align 8, !tbaa !5
  %1125 = load i32, ptr %80, align 4, !tbaa !9
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds %struct.ImVec2, ptr %1124, i64 %1126
  store ptr %1127, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  %1128 = load ptr, ptr %8, align 8, !tbaa !5
  %1129 = load i32, ptr %81, align 4, !tbaa !9
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds %struct.ImVec2, ptr %1128, i64 %1130
  store ptr %1131, ptr %83, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #7
  %1132 = load ptr, ptr %83, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.ImVec2, ptr %1132, i32 0, i32 0
  %1134 = load float, ptr %1133, align 4, !tbaa !29
  %1135 = load ptr, ptr %82, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.ImVec2, ptr %1135, i32 0, i32 0
  %1137 = load float, ptr %1136, align 4, !tbaa !29
  %1138 = fsub float %1134, %1137
  store float %1138, ptr %84, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #7
  %1139 = load ptr, ptr %83, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.ImVec2, ptr %1139, i32 0, i32 1
  %1141 = load float, ptr %1140, align 4, !tbaa !31
  %1142 = load ptr, ptr %82, align 8, !tbaa !5
  %1143 = getelementptr inbounds %struct.ImVec2, ptr %1142, i32 0, i32 1
  %1144 = load float, ptr %1143, align 4, !tbaa !31
  %1145 = fsub float %1141, %1144
  store float %1145, ptr %85, align 4, !tbaa !13
  br label %1146

1146:                                             ; preds = %1122
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #7
  %1147 = load float, ptr %84, align 4, !tbaa !13
  %1148 = load float, ptr %84, align 4, !tbaa !13
  %1149 = load float, ptr %85, align 4, !tbaa !13
  %1150 = load float, ptr %85, align 4, !tbaa !13
  %1151 = fmul float %1149, %1150
  %1152 = call float @llvm.fmuladd.f32(float %1147, float %1148, float %1151)
  store float %1152, ptr %86, align 4, !tbaa !13
  %1153 = load float, ptr %86, align 4, !tbaa !13
  %1154 = fcmp ogt float %1153, 0.000000e+00
  br i1 %1154, label %1155, label %1165

1155:                                             ; preds = %1146
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #7
  %1156 = load float, ptr %86, align 4, !tbaa !13
  %1157 = call float @sqrtf(float noundef %1156) #7
  %1158 = fdiv float 1.000000e+00, %1157
  store float %1158, ptr %87, align 4, !tbaa !13
  %1159 = load float, ptr %87, align 4, !tbaa !13
  %1160 = load float, ptr %84, align 4, !tbaa !13
  %1161 = fmul float %1160, %1159
  store float %1161, ptr %84, align 4, !tbaa !13
  %1162 = load float, ptr %87, align 4, !tbaa !13
  %1163 = load float, ptr %85, align 4, !tbaa !13
  %1164 = fmul float %1163, %1162
  store float %1164, ptr %85, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #7
  br label %1165

1165:                                             ; preds = %1155, %1146
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #7
  br label %1166

1166:                                             ; preds = %1165
  br label %1167

1167:                                             ; preds = %1166
  %1168 = load float, ptr %12, align 4, !tbaa !13
  %1169 = fmul float %1168, 5.000000e-01
  %1170 = load float, ptr %84, align 4, !tbaa !13
  %1171 = fmul float %1170, %1169
  store float %1171, ptr %84, align 4, !tbaa !13
  %1172 = load float, ptr %12, align 4, !tbaa !13
  %1173 = fmul float %1172, 5.000000e-01
  %1174 = load float, ptr %85, align 4, !tbaa !13
  %1175 = fmul float %1174, %1173
  store float %1175, ptr %85, align 4, !tbaa !13
  %1176 = load ptr, ptr %82, align 8, !tbaa !5
  %1177 = getelementptr inbounds %struct.ImVec2, ptr %1176, i32 0, i32 0
  %1178 = load float, ptr %1177, align 4, !tbaa !29
  %1179 = load float, ptr %85, align 4, !tbaa !13
  %1180 = fadd float %1178, %1179
  %1181 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1182 = load ptr, ptr %1181, align 8, !tbaa !39
  %1183 = getelementptr inbounds %struct.ImDrawVert, ptr %1182, i64 0
  %1184 = getelementptr inbounds %struct.ImDrawVert, ptr %1183, i32 0, i32 0
  %1185 = getelementptr inbounds %struct.ImVec2, ptr %1184, i32 0, i32 0
  store float %1180, ptr %1185, align 4, !tbaa !45
  %1186 = load ptr, ptr %82, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.ImVec2, ptr %1186, i32 0, i32 1
  %1188 = load float, ptr %1187, align 4, !tbaa !31
  %1189 = load float, ptr %84, align 4, !tbaa !13
  %1190 = fsub float %1188, %1189
  %1191 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1192 = load ptr, ptr %1191, align 8, !tbaa !39
  %1193 = getelementptr inbounds %struct.ImDrawVert, ptr %1192, i64 0
  %1194 = getelementptr inbounds %struct.ImDrawVert, ptr %1193, i32 0, i32 0
  %1195 = getelementptr inbounds %struct.ImVec2, ptr %1194, i32 0, i32 1
  store float %1190, ptr %1195, align 4, !tbaa !46
  %1196 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1197 = load ptr, ptr %1196, align 8, !tbaa !39
  %1198 = getelementptr inbounds %struct.ImDrawVert, ptr %1197, i64 0
  %1199 = getelementptr inbounds %struct.ImDrawVert, ptr %1198, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1199, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1200 = load i32, ptr %10, align 4, !tbaa !9
  %1201 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1202 = load ptr, ptr %1201, align 8, !tbaa !39
  %1203 = getelementptr inbounds %struct.ImDrawVert, ptr %1202, i64 0
  %1204 = getelementptr inbounds %struct.ImDrawVert, ptr %1203, i32 0, i32 2
  store i32 %1200, ptr %1204, align 4, !tbaa !40
  %1205 = load ptr, ptr %83, align 8, !tbaa !5
  %1206 = getelementptr inbounds %struct.ImVec2, ptr %1205, i32 0, i32 0
  %1207 = load float, ptr %1206, align 4, !tbaa !29
  %1208 = load float, ptr %85, align 4, !tbaa !13
  %1209 = fadd float %1207, %1208
  %1210 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1211 = load ptr, ptr %1210, align 8, !tbaa !39
  %1212 = getelementptr inbounds %struct.ImDrawVert, ptr %1211, i64 1
  %1213 = getelementptr inbounds %struct.ImDrawVert, ptr %1212, i32 0, i32 0
  %1214 = getelementptr inbounds %struct.ImVec2, ptr %1213, i32 0, i32 0
  store float %1209, ptr %1214, align 4, !tbaa !45
  %1215 = load ptr, ptr %83, align 8, !tbaa !5
  %1216 = getelementptr inbounds %struct.ImVec2, ptr %1215, i32 0, i32 1
  %1217 = load float, ptr %1216, align 4, !tbaa !31
  %1218 = load float, ptr %84, align 4, !tbaa !13
  %1219 = fsub float %1217, %1218
  %1220 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1221 = load ptr, ptr %1220, align 8, !tbaa !39
  %1222 = getelementptr inbounds %struct.ImDrawVert, ptr %1221, i64 1
  %1223 = getelementptr inbounds %struct.ImDrawVert, ptr %1222, i32 0, i32 0
  %1224 = getelementptr inbounds %struct.ImVec2, ptr %1223, i32 0, i32 1
  store float %1219, ptr %1224, align 4, !tbaa !46
  %1225 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1226 = load ptr, ptr %1225, align 8, !tbaa !39
  %1227 = getelementptr inbounds %struct.ImDrawVert, ptr %1226, i64 1
  %1228 = getelementptr inbounds %struct.ImDrawVert, ptr %1227, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1228, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1229 = load i32, ptr %10, align 4, !tbaa !9
  %1230 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1231 = load ptr, ptr %1230, align 8, !tbaa !39
  %1232 = getelementptr inbounds %struct.ImDrawVert, ptr %1231, i64 1
  %1233 = getelementptr inbounds %struct.ImDrawVert, ptr %1232, i32 0, i32 2
  store i32 %1229, ptr %1233, align 4, !tbaa !40
  %1234 = load ptr, ptr %83, align 8, !tbaa !5
  %1235 = getelementptr inbounds %struct.ImVec2, ptr %1234, i32 0, i32 0
  %1236 = load float, ptr %1235, align 4, !tbaa !29
  %1237 = load float, ptr %85, align 4, !tbaa !13
  %1238 = fsub float %1236, %1237
  %1239 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1240 = load ptr, ptr %1239, align 8, !tbaa !39
  %1241 = getelementptr inbounds %struct.ImDrawVert, ptr %1240, i64 2
  %1242 = getelementptr inbounds %struct.ImDrawVert, ptr %1241, i32 0, i32 0
  %1243 = getelementptr inbounds %struct.ImVec2, ptr %1242, i32 0, i32 0
  store float %1238, ptr %1243, align 4, !tbaa !45
  %1244 = load ptr, ptr %83, align 8, !tbaa !5
  %1245 = getelementptr inbounds %struct.ImVec2, ptr %1244, i32 0, i32 1
  %1246 = load float, ptr %1245, align 4, !tbaa !31
  %1247 = load float, ptr %84, align 4, !tbaa !13
  %1248 = fadd float %1246, %1247
  %1249 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1250 = load ptr, ptr %1249, align 8, !tbaa !39
  %1251 = getelementptr inbounds %struct.ImDrawVert, ptr %1250, i64 2
  %1252 = getelementptr inbounds %struct.ImDrawVert, ptr %1251, i32 0, i32 0
  %1253 = getelementptr inbounds %struct.ImVec2, ptr %1252, i32 0, i32 1
  store float %1248, ptr %1253, align 4, !tbaa !46
  %1254 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1255 = load ptr, ptr %1254, align 8, !tbaa !39
  %1256 = getelementptr inbounds %struct.ImDrawVert, ptr %1255, i64 2
  %1257 = getelementptr inbounds %struct.ImDrawVert, ptr %1256, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1257, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1258 = load i32, ptr %10, align 4, !tbaa !9
  %1259 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1260 = load ptr, ptr %1259, align 8, !tbaa !39
  %1261 = getelementptr inbounds %struct.ImDrawVert, ptr %1260, i64 2
  %1262 = getelementptr inbounds %struct.ImDrawVert, ptr %1261, i32 0, i32 2
  store i32 %1258, ptr %1262, align 4, !tbaa !40
  %1263 = load ptr, ptr %82, align 8, !tbaa !5
  %1264 = getelementptr inbounds %struct.ImVec2, ptr %1263, i32 0, i32 0
  %1265 = load float, ptr %1264, align 4, !tbaa !29
  %1266 = load float, ptr %85, align 4, !tbaa !13
  %1267 = fsub float %1265, %1266
  %1268 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1269 = load ptr, ptr %1268, align 8, !tbaa !39
  %1270 = getelementptr inbounds %struct.ImDrawVert, ptr %1269, i64 3
  %1271 = getelementptr inbounds %struct.ImDrawVert, ptr %1270, i32 0, i32 0
  %1272 = getelementptr inbounds %struct.ImVec2, ptr %1271, i32 0, i32 0
  store float %1267, ptr %1272, align 4, !tbaa !45
  %1273 = load ptr, ptr %82, align 8, !tbaa !5
  %1274 = getelementptr inbounds %struct.ImVec2, ptr %1273, i32 0, i32 1
  %1275 = load float, ptr %1274, align 4, !tbaa !31
  %1276 = load float, ptr %84, align 4, !tbaa !13
  %1277 = fadd float %1275, %1276
  %1278 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1279 = load ptr, ptr %1278, align 8, !tbaa !39
  %1280 = getelementptr inbounds %struct.ImDrawVert, ptr %1279, i64 3
  %1281 = getelementptr inbounds %struct.ImDrawVert, ptr %1280, i32 0, i32 0
  %1282 = getelementptr inbounds %struct.ImVec2, ptr %1281, i32 0, i32 1
  store float %1277, ptr %1282, align 4, !tbaa !46
  %1283 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1284 = load ptr, ptr %1283, align 8, !tbaa !39
  %1285 = getelementptr inbounds %struct.ImDrawVert, ptr %1284, i64 3
  %1286 = getelementptr inbounds %struct.ImDrawVert, ptr %1285, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1286, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1287 = load i32, ptr %10, align 4, !tbaa !9
  %1288 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1289 = load ptr, ptr %1288, align 8, !tbaa !39
  %1290 = getelementptr inbounds %struct.ImDrawVert, ptr %1289, i64 3
  %1291 = getelementptr inbounds %struct.ImDrawVert, ptr %1290, i32 0, i32 2
  store i32 %1287, ptr %1291, align 4, !tbaa !40
  %1292 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 8
  %1293 = load ptr, ptr %1292, align 8, !tbaa !39
  %1294 = getelementptr inbounds %struct.ImDrawVert, ptr %1293, i64 4
  store ptr %1294, ptr %1292, align 8, !tbaa !39
  %1295 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1296 = load i32, ptr %1295, align 4, !tbaa !34
  %1297 = trunc i32 %1296 to i16
  %1298 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1299 = load ptr, ptr %1298, align 8, !tbaa !35
  %1300 = getelementptr inbounds i16, ptr %1299, i64 0
  store i16 %1297, ptr %1300, align 2, !tbaa !36
  %1301 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1302 = load i32, ptr %1301, align 4, !tbaa !34
  %1303 = add i32 %1302, 1
  %1304 = trunc i32 %1303 to i16
  %1305 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1306 = load ptr, ptr %1305, align 8, !tbaa !35
  %1307 = getelementptr inbounds i16, ptr %1306, i64 1
  store i16 %1304, ptr %1307, align 2, !tbaa !36
  %1308 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1309 = load i32, ptr %1308, align 4, !tbaa !34
  %1310 = add i32 %1309, 2
  %1311 = trunc i32 %1310 to i16
  %1312 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1313 = load ptr, ptr %1312, align 8, !tbaa !35
  %1314 = getelementptr inbounds i16, ptr %1313, i64 2
  store i16 %1311, ptr %1314, align 2, !tbaa !36
  %1315 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1316 = load i32, ptr %1315, align 4, !tbaa !34
  %1317 = trunc i32 %1316 to i16
  %1318 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1319 = load ptr, ptr %1318, align 8, !tbaa !35
  %1320 = getelementptr inbounds i16, ptr %1319, i64 3
  store i16 %1317, ptr %1320, align 2, !tbaa !36
  %1321 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1322 = load i32, ptr %1321, align 4, !tbaa !34
  %1323 = add i32 %1322, 2
  %1324 = trunc i32 %1323 to i16
  %1325 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1326 = load ptr, ptr %1325, align 8, !tbaa !35
  %1327 = getelementptr inbounds i16, ptr %1326, i64 4
  store i16 %1324, ptr %1327, align 2, !tbaa !36
  %1328 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1329 = load i32, ptr %1328, align 4, !tbaa !34
  %1330 = add i32 %1329, 3
  %1331 = trunc i32 %1330 to i16
  %1332 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1333 = load ptr, ptr %1332, align 8, !tbaa !35
  %1334 = getelementptr inbounds i16, ptr %1333, i64 5
  store i16 %1331, ptr %1334, align 2, !tbaa !36
  %1335 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 9
  %1336 = load ptr, ptr %1335, align 8, !tbaa !35
  %1337 = getelementptr inbounds i16, ptr %1336, i64 6
  store ptr %1337, ptr %1335, align 8, !tbaa !35
  %1338 = getelementptr inbounds %struct.ImDrawList, ptr %89, i32 0, i32 7
  %1339 = load i32, ptr %1338, align 4, !tbaa !34
  %1340 = add i32 %1339, 4
  store i32 %1340, ptr %1338, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #7
  br label %1341

1341:                                             ; preds = %1167
  %1342 = load i32, ptr %80, align 4, !tbaa !9
  %1343 = add nsw i32 %1342, 1
  store i32 %1343, ptr %80, align 4, !tbaa !9
  br label %1108, !llvm.loop !47

1344:                                             ; preds = %1112
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  br label %1345

1345:                                             ; preds = %1344, %1094
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %1346

1346:                                             ; preds = %1345, %92
  ret void
}

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!16, !6, i64 56}
!16 = !{!"_ZTS10ImDrawList", !17, i64 0, !18, i64 16, !19, i64 32, !10, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !10, i64 76, !6, i64 80, !6, i64 88, !20, i64 96, !21, i64 112, !22, i64 128, !23, i64 144}
!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 = !{!"_ZTS18ImDrawListSplitter", !10, i64 0, !10, i64 4, !24, i64 8}
!24 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !10, i64 0, !10, i64 4, !6, i64 8}
!25 = !{i64 0, i64 4, !13, i64 4, i64 4, !13}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!16, !10, i64 48}
!29 = !{!30, !14, i64 0}
!30 = !{!"_ZTS6ImVec2", !14, i64 0, !14, i64 4}
!31 = !{!30, !14, i64 4}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!16, !10, i64 76}
!35 = !{!16, !6, i64 88}
!36 = !{!37, !37, i64 0}
!37 = !{!"short", !7, i64 0}
!38 = distinct !{!38, !33}
!39 = !{!16, !6, i64 80}
!40 = !{!41, !10, i64 16}
!41 = !{!"_ZTS10ImDrawVert", !30, i64 0, !30, i64 8, !10, i64 16}
!42 = distinct !{!42, !33}
!43 = distinct !{!43, !33}
!44 = distinct !{!44, !33}
!45 = !{!41, !14, i64 0}
!46 = !{!41, !14, i64 4}
!47 = distinct !{!47, !33}


; 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 }

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijbf(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i1 noundef zeroext %4, float noundef %5) local_unnamed_addr #2 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 = icmp slt i32 %2, 2
  br i1 %19, label %.loopexit, label %20

20:                                               ; preds = %6
  %21 = getelementptr inbounds i8, ptr %0, i64 56
  %22 = load ptr, ptr %21, align 8, !tbaa !5
  %23 = load i64, ptr %22, align 8
  %24 = add nsw i32 %2, -1
  %spec.select = select i1 %4, i32 %2, i32 %24
  %25 = fcmp ogt float %5, 1.000000e+00
  %26 = getelementptr inbounds i8, ptr %0, i64 48
  %27 = load i32, ptr %26, align 8, !tbaa !19
  %28 = and i32 %27, 1
  %.not = icmp eq i32 %28, 0
  br i1 %.not, label %.lr.ph412, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %20
  %29 = and i32 %3, 16777215
  %.v = select i1 %25, i32 18, i32 12
  %30 = mul nsw i32 %.v, %spec.select
  %31 = shl nsw i32 %2, 2
  %32 = mul nuw nsw i32 %2, 3
  %33 = select i1 %25, i32 %31, i32 %32
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %30, i32 noundef %33)
  %34 = select i1 %25, i32 5, i32 3
  %35 = mul nuw nsw i32 %34, %2
  %36 = zext nneg i32 %35 to i64
  %37 = shl nuw nsw i64 %36, 3
  %38 = alloca i8, i64 %37, align 16
  %39 = zext nneg i32 %2 to i64
  %40 = getelementptr %struct.ImVec2, ptr %38, i64 %39
  %wide.trip.count = zext nneg i32 %spec.select to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %59
  br i1 %4, label %66, label %.thread

.lr.ph:                                           ; preds = %.lr.ph.preheader, %59
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %59 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %41 = icmp eq i64 %indvars.iv.next, %39
  %42 = and i64 %indvars.iv.next, 4294967295
  %43 = select i1 %41, i64 0, i64 %42
  %44 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %43
  %45 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv
  %46 = load <2 x float>, ptr %44, align 4, !tbaa !20
  %47 = load <2 x float>, ptr %45, align 4, !tbaa !20
  %48 = fsub <2 x float> %46, %47
  %49 = fmul <2 x float> %48, %48
  %50 = extractelement <2 x float> %49, i64 1
  %51 = extractelement <2 x float> %48, i64 0
  %52 = tail call float @llvm.fmuladd.f32(float %51, float %51, float %50)
  %53 = fcmp ogt float %52, 0.000000e+00
  br i1 %53, label %54, label %59

54:                                               ; preds = %.lr.ph
  %sqrt = tail call float @llvm.sqrt.f32(float %52)
  %55 = fdiv float 1.000000e+00, %sqrt
  %56 = insertelement <2 x float> poison, float %55, i64 0
  %57 = shufflevector <2 x float> %56, <2 x float> poison, <2 x i32> zeroinitializer
  %58 = fmul <2 x float> %48, %57
  br label %59

59:                                               ; preds = %54, %.lr.ph
  %60 = phi <2 x float> [ %58, %54 ], [ %48, %.lr.ph ]
  %61 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %indvars.iv
  %62 = extractelement <2 x float> %60, i64 1
  store float %62, ptr %61, align 8, !tbaa !22
  %63 = extractelement <2 x float> %60, i64 0
  %64 = fneg float %63
  %65 = getelementptr inbounds i8, ptr %61, i64 4
  store float %64, ptr %65, align 4, !tbaa !24
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !25

66:                                               ; preds = %._crit_edge
  br i1 %25, label %169, label %.lr.ph399

.thread:                                          ; preds = %._crit_edge
  %67 = getelementptr i8, ptr %40, i64 -16
  %68 = getelementptr i8, ptr %40, i64 -8
  %69 = load i64, ptr %67, align 8
  store i64 %69, ptr %68, align 8
  br i1 %25, label %.thread390, label %.thread389

.thread389:                                       ; preds = %.thread
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  %70 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef 1.000000e+00)
  store <2 x float> %70, ptr %7, align 8
  %71 = 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> %71, ptr %40, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %72 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef 1.000000e+00)
  store <2 x float> %72, ptr %8, align 8
  %73 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %8)
  %74 = getelementptr inbounds i8, ptr %40, i64 8
  store <2 x float> %73, ptr %74, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  %75 = zext nneg i32 %24 to i64
  %76 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %75
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %77 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %75
  %78 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %77, float noundef 1.000000e+00)
  store <2 x float> %78, ptr %9, align 8
  %79 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %76, ptr noundef nonnull align 4 dereferenceable(8) %9)
  %80 = shl nuw nsw i32 %24, 1
  %81 = zext nneg i32 %80 to i64
  %82 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %81
  store <2 x float> %79, ptr %82, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %83 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %77, float noundef 1.000000e+00)
  store <2 x float> %83, ptr %10, align 8
  %84 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %76, ptr noundef nonnull align 4 dereferenceable(8) %10)
  %85 = or disjoint i32 %80, 1
  %86 = zext nneg i32 %85 to i64
  %87 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %86
  store <2 x float> %84, ptr %87, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  br label %.lr.ph399

.lr.ph399:                                        ; preds = %.thread389, %66
  %88 = getelementptr inbounds i8, ptr %0, i64 76
  %89 = load i32, ptr %88, align 4, !tbaa !27
  %90 = getelementptr inbounds i8, ptr %0, i64 88
  %.promoted = load ptr, ptr %90, align 8, !tbaa !28
  %wide.trip.count419 = zext nneg i32 %spec.select to i64
  br label %92

.lr.ph401:                                        ; preds = %92
  store ptr %143, ptr %90, align 8, !tbaa !28
  %91 = getelementptr inbounds i8, ptr %0, i64 80
  %smax = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count424 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %91, align 8, !tbaa !29
  br label %144

92:                                               ; preds = %.lr.ph399, %92
  %indvars.iv416 = phi i64 [ 0, %.lr.ph399 ], [ %indvars.iv.next417, %92 ]
  %93 = phi ptr [ %.promoted, %.lr.ph399 ], [ %143, %92 ]
  %.0364397 = phi i32 [ %89, %.lr.ph399 ], [ %99, %92 ]
  %indvars.iv.next417 = add nuw nsw i64 %indvars.iv416, 1
  %94 = icmp eq i64 %indvars.iv.next417, %39
  %95 = trunc nuw nsw i64 %indvars.iv.next417 to i32
  %96 = select i1 %94, i32 0, i32 %95
  %97 = load i32, ptr %88, align 4
  %98 = add i32 %.0364397, 3
  %99 = select i1 %94, i32 %97, i32 %98
  %100 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %indvars.iv416
  %101 = zext nneg i32 %96 to i64
  %102 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %101
  %103 = shl nuw nsw i32 %96, 1
  %104 = zext nneg i32 %103 to i64
  %105 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %104
  %106 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %101
  %107 = load <2 x float>, ptr %100, align 8, !tbaa !20
  %108 = load <2 x float>, ptr %102, align 8, !tbaa !20
  %109 = fadd <2 x float> %107, %108
  %110 = fmul <2 x float> %109, <float 5.000000e-01, float 5.000000e-01>
  %111 = fmul <2 x float> %110, %110
  %112 = extractelement <2 x float> %111, i64 1
  %113 = extractelement <2 x float> %110, i64 0
  %114 = call float @llvm.fmuladd.f32(float %113, float %113, float %112)
  %115 = fcmp olt float %114, 5.000000e-01
  %.0368 = select i1 %115, float 5.000000e-01, float %114
  %116 = fdiv float 1.000000e+00, %.0368
  %117 = insertelement <2 x float> poison, float %116, i64 0
  %118 = shufflevector <2 x float> %117, <2 x float> poison, <2 x i32> zeroinitializer
  %119 = fmul <2 x float> %110, %118
  %120 = shufflevector <2 x float> %119, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %121 = load <2 x float>, ptr %106, align 4, !tbaa !20
  %122 = shufflevector <2 x float> %121, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %123 = fadd <4 x float> %122, %120
  %124 = fsub <4 x float> %122, %120
  %125 = shufflevector <4 x float> %123, <4 x float> %124, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
  store <4 x float> %125, ptr %105, align 8, !tbaa !20
  %126 = trunc i32 %99 to i16
  store i16 %126, ptr %93, align 2, !tbaa !30
  %127 = trunc i32 %.0364397 to i16
  %128 = getelementptr inbounds i8, ptr %93, i64 2
  store i16 %127, ptr %128, align 2, !tbaa !30
  %129 = add i16 %127, 2
  %130 = getelementptr inbounds i8, ptr %93, i64 4
  store i16 %129, ptr %130, align 2, !tbaa !30
  %131 = getelementptr inbounds i8, ptr %93, i64 6
  store i16 %129, ptr %131, align 2, !tbaa !30
  %132 = add i16 %126, 2
  %133 = getelementptr inbounds i8, ptr %93, i64 8
  store i16 %132, ptr %133, align 2, !tbaa !30
  %134 = getelementptr inbounds i8, ptr %93, i64 10
  store i16 %126, ptr %134, align 2, !tbaa !30
  %135 = add i16 %126, 1
  %136 = getelementptr inbounds i8, ptr %93, i64 12
  store i16 %135, ptr %136, align 2, !tbaa !30
  %137 = add i16 %127, 1
  %138 = getelementptr inbounds i8, ptr %93, i64 14
  store i16 %137, ptr %138, align 2, !tbaa !30
  %139 = getelementptr inbounds i8, ptr %93, i64 16
  store i16 %127, ptr %139, align 2, !tbaa !30
  %140 = getelementptr inbounds i8, ptr %93, i64 18
  store i16 %127, ptr %140, align 2, !tbaa !30
  %141 = getelementptr inbounds i8, ptr %93, i64 20
  store i16 %126, ptr %141, align 2, !tbaa !30
  %142 = getelementptr inbounds i8, ptr %93, i64 22
  store i16 %135, ptr %142, align 2, !tbaa !30
  %143 = getelementptr inbounds i8, ptr %93, i64 24
  %exitcond420.not = icmp eq i64 %indvars.iv.next417, %wide.trip.count419
  br i1 %exitcond420.not, label %.lr.ph401, label %92, !llvm.loop !32

144:                                              ; preds = %.lr.ph401, %144
  %145 = phi ptr [ %.pre, %.lr.ph401 ], [ %168, %144 ]
  %indvars.iv421 = phi i64 [ 0, %.lr.ph401 ], [ %indvars.iv.next422, %144 ]
  %146 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv421
  %147 = load i64, ptr %146, align 4
  store i64 %147, ptr %145, align 4
  %148 = load ptr, ptr %91, align 8, !tbaa !29
  %149 = getelementptr inbounds i8, ptr %148, i64 8
  store i64 %23, ptr %149, align 4
  %150 = load ptr, ptr %91, align 8, !tbaa !29
  %151 = getelementptr inbounds i8, ptr %150, i64 16
  store i32 %3, ptr %151, align 4, !tbaa !33
  %152 = shl nuw nsw i64 %indvars.iv421, 1
  %153 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %152
  %154 = getelementptr inbounds i8, ptr %150, i64 20
  %155 = load i64, ptr %153, align 8
  store i64 %155, ptr %154, align 4
  %156 = load ptr, ptr %91, align 8, !tbaa !29
  %157 = getelementptr inbounds i8, ptr %156, i64 28
  store i64 %23, ptr %157, align 4
  %158 = load ptr, ptr %91, align 8, !tbaa !29
  %159 = getelementptr inbounds i8, ptr %158, i64 36
  store i32 %29, ptr %159, align 4, !tbaa !33
  %160 = or disjoint i64 %152, 1
  %161 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %160
  %162 = getelementptr inbounds i8, ptr %158, i64 40
  %163 = load i64, ptr %161, align 8
  store i64 %163, ptr %162, align 4
  %164 = load ptr, ptr %91, align 8, !tbaa !29
  %165 = getelementptr inbounds i8, ptr %164, i64 48
  store i64 %23, ptr %165, align 4
  %166 = load ptr, ptr %91, align 8, !tbaa !29
  %167 = getelementptr inbounds i8, ptr %166, i64 56
  store i32 %29, ptr %167, align 4, !tbaa !33
  %168 = getelementptr inbounds i8, ptr %166, i64 60
  store ptr %168, ptr %91, align 8, !tbaa !29
  %indvars.iv.next422 = add nuw nsw i64 %indvars.iv421, 1
  %exitcond425.not = icmp eq i64 %indvars.iv.next422, %wide.trip.count424
  br i1 %exitcond425.not, label %.loopexit392, label %144, !llvm.loop !35

169:                                              ; preds = %66
  %170 = fadd float %5, -1.000000e+00
  %171 = fmul float %170, 5.000000e-01
  br label %.lr.ph405

.thread390:                                       ; preds = %.thread
  %172 = fadd float %5, -1.000000e+00
  %173 = fmul float %172, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  %174 = fadd float %173, 1.000000e+00
  %175 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef %174)
  store <2 x float> %175, ptr %11, align 8
  %176 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %11)
  store <2 x float> %176, ptr %40, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %177 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef %173)
  store <2 x float> %177, ptr %12, align 8
  %178 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %12)
  %179 = getelementptr inbounds i8, ptr %40, i64 8
  store <2 x float> %178, ptr %179, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %180 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef %173)
  store <2 x float> %180, ptr %13, align 8
  %181 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %13)
  %182 = getelementptr inbounds i8, ptr %40, i64 16
  store <2 x float> %181, ptr %182, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  %183 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef %174)
  store <2 x float> %183, ptr %14, align 8
  %184 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %14)
  %185 = getelementptr inbounds i8, ptr %40, i64 24
  store <2 x float> %184, ptr %185, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  %186 = zext nneg i32 %24 to i64
  %187 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %186
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  %188 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %186
  %189 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %188, float noundef %174)
  store <2 x float> %189, ptr %15, align 8
  %190 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %187, ptr noundef nonnull align 4 dereferenceable(8) %15)
  %191 = shl nsw i32 %24, 2
  %192 = zext nneg i32 %191 to i64
  %193 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %192
  store <2 x float> %190, ptr %193, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  %194 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %188, float noundef %173)
  store <2 x float> %194, ptr %16, align 8
  %195 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %187, ptr noundef nonnull align 4 dereferenceable(8) %16)
  %196 = or disjoint i32 %191, 1
  %197 = zext nneg i32 %196 to i64
  %198 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %197
  store <2 x float> %195, ptr %198, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  %199 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %188, float noundef %173)
  store <2 x float> %199, ptr %17, align 8
  %200 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %187, ptr noundef nonnull align 4 dereferenceable(8) %17)
  %201 = or disjoint i32 %191, 2
  %202 = zext nneg i32 %201 to i64
  %203 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %202
  store <2 x float> %200, ptr %203, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  %204 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %188, float noundef %174)
  store <2 x float> %204, ptr %18, align 8
  %205 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %187, ptr noundef nonnull align 4 dereferenceable(8) %18)
  %206 = or disjoint i32 %191, 3
  %207 = zext nneg i32 %206 to i64
  %208 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %207
  store <2 x float> %205, ptr %208, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  br label %.lr.ph405

.lr.ph405:                                        ; preds = %.thread390, %169
  %209 = phi float [ %173, %.thread390 ], [ %171, %169 ]
  %210 = getelementptr inbounds i8, ptr %0, i64 76
  %211 = load i32, ptr %210, align 4, !tbaa !27
  %212 = fadd float %209, 1.000000e+00
  %213 = getelementptr inbounds i8, ptr %0, i64 88
  %.promoted406 = load ptr, ptr %213, align 8, !tbaa !28
  %wide.trip.count429 = zext nneg i32 %spec.select to i64
  %214 = insertelement <4 x float> poison, float %212, i64 0
  %215 = insertelement <4 x float> %214, float %209, i64 1
  %216 = shufflevector <4 x float> %215, <4 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  br label %218

.lr.ph409:                                        ; preds = %218
  store ptr %279, ptr %213, align 8, !tbaa !28
  %217 = getelementptr inbounds i8, ptr %0, i64 80
  %smax434 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count435 = zext nneg i32 %smax434 to i64
  %.pre443 = load ptr, ptr %217, align 8, !tbaa !29
  br label %280

218:                                              ; preds = %.lr.ph405, %218
  %indvars.iv426 = phi i64 [ 0, %.lr.ph405 ], [ %indvars.iv.next427, %218 ]
  %219 = phi ptr [ %.promoted406, %.lr.ph405 ], [ %279, %218 ]
  %.0370403 = phi i32 [ %211, %.lr.ph405 ], [ %225, %218 ]
  %indvars.iv.next427 = add nuw nsw i64 %indvars.iv426, 1
  %220 = icmp eq i64 %indvars.iv.next427, %39
  %221 = trunc nuw nsw i64 %indvars.iv.next427 to i32
  %222 = select i1 %220, i32 0, i32 %221
  %223 = load i32, ptr %210, align 4
  %224 = add i32 %.0370403, 4
  %225 = select i1 %220, i32 %223, i32 %224
  %226 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %indvars.iv426
  %227 = zext nneg i32 %222 to i64
  %228 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %227
  %229 = shl nsw i32 %222, 2
  %230 = zext nneg i32 %229 to i64
  %231 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %230
  %232 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %227
  %233 = load <2 x float>, ptr %226, align 8, !tbaa !20
  %234 = load <2 x float>, ptr %228, align 8, !tbaa !20
  %235 = fadd <2 x float> %233, %234
  %236 = fmul <2 x float> %235, <float 5.000000e-01, float 5.000000e-01>
  %237 = fmul <2 x float> %236, %236
  %238 = extractelement <2 x float> %237, i64 1
  %239 = extractelement <2 x float> %236, i64 0
  %240 = call float @llvm.fmuladd.f32(float %239, float %239, float %238)
  %241 = fcmp olt float %240, 5.000000e-01
  %.0372 = select i1 %241, float 5.000000e-01, float %240
  %242 = fdiv float 1.000000e+00, %.0372
  %243 = insertelement <2 x float> poison, float %242, i64 0
  %244 = shufflevector <2 x float> %243, <2 x float> poison, <2 x i32> zeroinitializer
  %245 = fmul <2 x float> %236, %244
  %246 = shufflevector <2 x float> %245, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %247 = fmul <4 x float> %216, %246
  %248 = load <2 x float>, ptr %232, align 4, !tbaa !20
  %249 = shufflevector <2 x float> %248, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %250 = fadd <4 x float> %249, %247
  store <4 x float> %250, ptr %231, align 8, !tbaa !20
  %251 = getelementptr inbounds i8, ptr %231, i64 16
  %252 = fsub <4 x float> %249, %247
  %253 = shufflevector <4 x float> %252, <4 x float> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
  store <4 x float> %253, ptr %251, align 8, !tbaa !20
  %254 = trunc i32 %225 to i16
  %255 = add i16 %254, 1
  store i16 %255, ptr %219, align 2, !tbaa !30
  %256 = trunc i32 %.0370403 to i16
  %257 = add i16 %256, 1
  %258 = getelementptr inbounds i8, ptr %219, i64 2
  store i16 %257, ptr %258, align 2, !tbaa !30
  %259 = add i16 %256, 2
  %260 = getelementptr inbounds i8, ptr %219, i64 4
  store i16 %259, ptr %260, align 2, !tbaa !30
  %261 = getelementptr inbounds i8, ptr %219, i64 6
  store i16 %259, ptr %261, align 2, !tbaa !30
  %262 = add i16 %254, 2
  %263 = getelementptr inbounds i8, ptr %219, i64 8
  store i16 %262, ptr %263, align 2, !tbaa !30
  %264 = getelementptr inbounds i8, ptr %219, i64 10
  store i16 %255, ptr %264, align 2, !tbaa !30
  %265 = getelementptr inbounds i8, ptr %219, i64 12
  store i16 %255, ptr %265, align 2, !tbaa !30
  %266 = getelementptr inbounds i8, ptr %219, i64 14
  store i16 %257, ptr %266, align 2, !tbaa !30
  %267 = getelementptr inbounds i8, ptr %219, i64 16
  store i16 %256, ptr %267, align 2, !tbaa !30
  %268 = getelementptr inbounds i8, ptr %219, i64 18
  store i16 %256, ptr %268, align 2, !tbaa !30
  %269 = getelementptr inbounds i8, ptr %219, i64 20
  store i16 %254, ptr %269, align 2, !tbaa !30
  %270 = getelementptr inbounds i8, ptr %219, i64 22
  store i16 %255, ptr %270, align 2, !tbaa !30
  %271 = getelementptr inbounds i8, ptr %219, i64 24
  store i16 %262, ptr %271, align 2, !tbaa !30
  %272 = getelementptr inbounds i8, ptr %219, i64 26
  store i16 %259, ptr %272, align 2, !tbaa !30
  %273 = add i16 %256, 3
  %274 = getelementptr inbounds i8, ptr %219, i64 28
  store i16 %273, ptr %274, align 2, !tbaa !30
  %275 = getelementptr inbounds i8, ptr %219, i64 30
  store i16 %273, ptr %275, align 2, !tbaa !30
  %276 = add i16 %254, 3
  %277 = getelementptr inbounds i8, ptr %219, i64 32
  store i16 %276, ptr %277, align 2, !tbaa !30
  %278 = getelementptr inbounds i8, ptr %219, i64 34
  store i16 %262, ptr %278, align 2, !tbaa !30
  %279 = getelementptr inbounds i8, ptr %219, i64 36
  %exitcond430.not = icmp eq i64 %indvars.iv.next427, %wide.trip.count429
  br i1 %exitcond430.not, label %.lr.ph409, label %218, !llvm.loop !36

280:                                              ; preds = %.lr.ph409, %280
  %281 = phi ptr [ %.pre443, %.lr.ph409 ], [ %313, %280 ]
  %indvars.iv431 = phi i64 [ 0, %.lr.ph409 ], [ %indvars.iv.next432, %280 ]
  %282 = shl nsw i64 %indvars.iv431, 2
  %283 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %282
  %284 = load i64, ptr %283, align 8
  store i64 %284, ptr %281, align 4
  %285 = load ptr, ptr %217, align 8, !tbaa !29
  %286 = getelementptr inbounds i8, ptr %285, i64 8
  store i64 %23, ptr %286, align 4
  %287 = load ptr, ptr %217, align 8, !tbaa !29
  %288 = getelementptr inbounds i8, ptr %287, i64 16
  store i32 %29, ptr %288, align 4, !tbaa !33
  %289 = or disjoint i64 %282, 1
  %290 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %289
  %291 = getelementptr inbounds i8, ptr %287, i64 20
  %292 = load i64, ptr %290, align 8
  store i64 %292, ptr %291, align 4
  %293 = load ptr, ptr %217, align 8, !tbaa !29
  %294 = getelementptr inbounds i8, ptr %293, i64 28
  store i64 %23, ptr %294, align 4
  %295 = load ptr, ptr %217, align 8, !tbaa !29
  %296 = getelementptr inbounds i8, ptr %295, i64 36
  store i32 %3, ptr %296, align 4, !tbaa !33
  %297 = or disjoint i64 %282, 2
  %298 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %297
  %299 = getelementptr inbounds i8, ptr %295, i64 40
  %300 = load i64, ptr %298, align 8
  store i64 %300, ptr %299, align 4
  %301 = load ptr, ptr %217, align 8, !tbaa !29
  %302 = getelementptr inbounds i8, ptr %301, i64 48
  store i64 %23, ptr %302, align 4
  %303 = load ptr, ptr %217, align 8, !tbaa !29
  %304 = getelementptr inbounds i8, ptr %303, i64 56
  store i32 %3, ptr %304, align 4, !tbaa !33
  %305 = or disjoint i64 %282, 3
  %306 = getelementptr inbounds %struct.ImVec2, ptr %40, i64 %305
  %307 = getelementptr inbounds i8, ptr %303, i64 60
  %308 = load i64, ptr %306, align 8
  store i64 %308, ptr %307, align 4
  %309 = load ptr, ptr %217, align 8, !tbaa !29
  %310 = getelementptr inbounds i8, ptr %309, i64 68
  store i64 %23, ptr %310, align 4
  %311 = load ptr, ptr %217, align 8, !tbaa !29
  %312 = getelementptr inbounds i8, ptr %311, i64 76
  store i32 %29, ptr %312, align 4, !tbaa !33
  %313 = getelementptr inbounds i8, ptr %311, i64 80
  store ptr %313, ptr %217, align 8, !tbaa !29
  %indvars.iv.next432 = add nuw nsw i64 %indvars.iv431, 1
  %exitcond436.not = icmp eq i64 %indvars.iv.next432, %wide.trip.count435
  br i1 %exitcond436.not, label %.loopexit392, label %280, !llvm.loop !37

.loopexit392:                                     ; preds = %144, %280
  %314 = and i32 %33, 65535
  %315 = getelementptr inbounds i8, ptr %0, i64 76
  %316 = load i32, ptr %315, align 4, !tbaa !27
  %317 = add i32 %316, %314
  store i32 %317, ptr %315, align 4, !tbaa !27
  br label %.loopexit

.lr.ph412:                                        ; preds = %20
  %318 = mul nsw i32 %spec.select, 6
  %319 = shl nsw i32 %spec.select, 2
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %318, i32 noundef %319)
  %320 = fmul float %5, 5.000000e-01
  %321 = getelementptr inbounds i8, ptr %0, i64 80
  %322 = getelementptr inbounds i8, ptr %0, i64 76
  %323 = getelementptr inbounds i8, ptr %0, i64 88
  %324 = zext nneg i32 %2 to i64
  %wide.trip.count440 = zext nneg i32 %spec.select to i64
  %325 = insertelement <2 x float> poison, float %320, i64 0
  %326 = shufflevector <2 x float> %325, <2 x float> poison, <2 x i32> zeroinitializer
  br label %327

327:                                              ; preds = %.lr.ph412, %349
  %indvars.iv437 = phi i64 [ 0, %.lr.ph412 ], [ %indvars.iv.next438, %349 ]
  %indvars.iv.next438 = add nuw nsw i64 %indvars.iv437, 1
  %328 = icmp eq i64 %indvars.iv.next438, %324
  %329 = and i64 %indvars.iv.next438, 4294967295
  %330 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv437
  %331 = select i1 %328, i64 0, i64 %329
  %332 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %331
  %333 = getelementptr inbounds i8, ptr %332, i64 4
  %334 = getelementptr inbounds i8, ptr %330, i64 4
  %335 = load <2 x float>, ptr %332, align 4, !tbaa !20
  %336 = load <2 x float>, ptr %330, align 4, !tbaa !20
  %337 = fsub <2 x float> %335, %336
  %338 = shufflevector <2 x float> %337, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %339 = fmul <2 x float> %337, %337
  %340 = extractelement <2 x float> %339, i64 1
  %341 = extractelement <2 x float> %337, i64 0
  %342 = tail call float @llvm.fmuladd.f32(float %341, float %341, float %340)
  %343 = fcmp ogt float %342, 0.000000e+00
  br i1 %343, label %344, label %349

344:                                              ; preds = %327
  %sqrt391 = tail call float @llvm.sqrt.f32(float %342)
  %345 = fdiv float 1.000000e+00, %sqrt391
  %346 = insertelement <2 x float> poison, float %345, i64 0
  %347 = shufflevector <2 x float> %346, <2 x float> poison, <2 x i32> zeroinitializer
  %348 = fmul <2 x float> %338, %347
  br label %349

349:                                              ; preds = %344, %327
  %350 = phi <2 x float> [ %348, %344 ], [ %338, %327 ]
  %351 = fmul <2 x float> %326, %350
  %352 = load ptr, ptr %321, align 8, !tbaa !29
  %353 = fadd <2 x float> %336, %351
  %354 = fsub <2 x float> %336, %351
  %355 = shufflevector <2 x float> %353, <2 x float> %354, <2 x i32> <i32 0, i32 3>
  store <2 x float> %355, ptr %352, align 4, !tbaa !20
  %356 = getelementptr inbounds i8, ptr %352, i64 8
  store i64 %23, ptr %356, align 4
  %357 = load ptr, ptr %321, align 8, !tbaa !29
  %358 = getelementptr inbounds i8, ptr %357, i64 16
  store i32 %3, ptr %358, align 4, !tbaa !33
  %359 = load float, ptr %332, align 4, !tbaa !22
  %360 = extractelement <2 x float> %351, i64 0
  %361 = fadd float %360, %359
  %362 = getelementptr inbounds i8, ptr %357, i64 20
  store float %361, ptr %362, align 4, !tbaa !38
  %363 = load float, ptr %333, align 4, !tbaa !24
  %364 = extractelement <2 x float> %351, i64 1
  %365 = fsub float %363, %364
  %366 = getelementptr inbounds i8, ptr %357, i64 24
  store float %365, ptr %366, align 4, !tbaa !39
  %367 = getelementptr inbounds i8, ptr %357, i64 28
  store i64 %23, ptr %367, align 4
  %368 = load ptr, ptr %321, align 8, !tbaa !29
  %369 = getelementptr inbounds i8, ptr %368, i64 36
  store i32 %3, ptr %369, align 4, !tbaa !33
  %370 = load float, ptr %332, align 4, !tbaa !22
  %371 = fsub float %370, %360
  %372 = getelementptr inbounds i8, ptr %368, i64 40
  store float %371, ptr %372, align 4, !tbaa !38
  %373 = load float, ptr %333, align 4, !tbaa !24
  %374 = fadd float %364, %373
  %375 = getelementptr inbounds i8, ptr %368, i64 44
  store float %374, ptr %375, align 4, !tbaa !39
  %376 = getelementptr inbounds i8, ptr %368, i64 48
  store i64 %23, ptr %376, align 4
  %377 = load ptr, ptr %321, align 8, !tbaa !29
  %378 = getelementptr inbounds i8, ptr %377, i64 56
  store i32 %3, ptr %378, align 4, !tbaa !33
  %379 = load float, ptr %330, align 4, !tbaa !22
  %380 = fsub float %379, %360
  %381 = getelementptr inbounds i8, ptr %377, i64 60
  store float %380, ptr %381, align 4, !tbaa !38
  %382 = load float, ptr %334, align 4, !tbaa !24
  %383 = fadd float %364, %382
  %384 = getelementptr inbounds i8, ptr %377, i64 64
  store float %383, ptr %384, align 4, !tbaa !39
  %385 = getelementptr inbounds i8, ptr %377, i64 68
  store i64 %23, ptr %385, align 4
  %386 = load ptr, ptr %321, align 8, !tbaa !29
  %387 = getelementptr inbounds i8, ptr %386, i64 76
  store i32 %3, ptr %387, align 4, !tbaa !33
  %388 = getelementptr inbounds i8, ptr %386, i64 80
  store ptr %388, ptr %321, align 8, !tbaa !29
  %389 = load i32, ptr %322, align 4, !tbaa !27
  %390 = trunc i32 %389 to i16
  %391 = load ptr, ptr %323, align 8, !tbaa !28
  store i16 %390, ptr %391, align 2, !tbaa !30
  %392 = add i16 %390, 1
  %393 = getelementptr inbounds i8, ptr %391, i64 2
  store i16 %392, ptr %393, align 2, !tbaa !30
  %394 = add i16 %390, 2
  %395 = getelementptr inbounds i8, ptr %391, i64 4
  store i16 %394, ptr %395, align 2, !tbaa !30
  %396 = getelementptr inbounds i8, ptr %391, i64 6
  store i16 %390, ptr %396, align 2, !tbaa !30
  %397 = getelementptr inbounds i8, ptr %391, i64 8
  store i16 %394, ptr %397, align 2, !tbaa !30
  %398 = add i16 %390, 3
  %399 = getelementptr inbounds i8, ptr %391, i64 10
  store i16 %398, ptr %399, align 2, !tbaa !30
  %400 = getelementptr inbounds i8, ptr %391, i64 12
  store ptr %400, ptr %323, align 8, !tbaa !28
  %401 = add i32 %389, 4
  store i32 %401, ptr %322, align 4, !tbaa !27
  %exitcond441.not = icmp eq i64 %indvars.iv.next438, %wide.trip.count440
  br i1 %exitcond441.not, label %.loopexit, label %327, !llvm.loop !40

.loopexit:                                        ; preds = %349, %.loopexit392, %6
  ret void
}

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

; 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 #4

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

; 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 #4

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 56}
!6 = !{!"_ZTS10ImDrawList", !7, i64 0, !12, i64 16, !13, i64 32, !8, i64 48, !11, i64 56, !11, i64 64, !8, i64 72, !8, i64 76, !11, i64 80, !11, i64 88, !14, i64 96, !15, i64 112, !16, i64 128, !17, i64 144}
!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 = !{!"_ZTS18ImDrawListSplitter", !8, i64 0, !8, i64 4, !18, i64 8}
!18 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !8, i64 0, !8, i64 4, !11, i64 8}
!19 = !{!6, !8, i64 48}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !9, i64 0}
!22 = !{!23, !21, i64 0}
!23 = !{!"_ZTS6ImVec2", !21, i64 0, !21, i64 4}
!24 = !{!23, !21, i64 4}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!6, !8, i64 76}
!28 = !{!6, !11, i64 88}
!29 = !{!6, !11, i64 80}
!30 = !{!31, !31, i64 0}
!31 = !{!"short", !9, i64 0}
!32 = distinct !{!32, !26}
!33 = !{!34, !8, i64 16}
!34 = !{!"_ZTS10ImDrawVert", !23, i64 0, !23, i64 8, !8, i64 16}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = !{!34, !21, i64 0}
!39 = !{!34, !21, i64 4}
!40 = distinct !{!40, !26}


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