; LLVM IR from akiss-xyz/AulysEngine :: dependencies/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 %struct.ImVec2, 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 i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca float, 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 ptr, align 8
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca float, align 4
  %86 = 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
  %87 = zext i1 %4 to i8
  store i8 %87, ptr %11, align 1, !tbaa !11
  store float %5, ptr %12, align 4, !tbaa !13
  %88 = load ptr, ptr %7, align 8
  %89 = load i32, ptr %9, align 4, !tbaa !9
  %90 = icmp slt i32 %89, 2
  br i1 %90, label %91, label %92

91:                                               ; preds = %6
  br label %1355

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

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

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

110:                                              ; preds = %102
  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
  %111 = load i32, ptr %10, align 4, !tbaa !9
  %112 = and i32 %111, 16777215
  store i32 %112, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %113 = load i8, ptr %15, align 1, !tbaa !11, !range !26, !noundef !27
  %114 = trunc i8 %113 to i1
  br i1 %114, label %115, label %118

115:                                              ; preds = %110
  %116 = load i32, ptr %14, align 4, !tbaa !9
  %117 = mul nsw i32 %116, 18
  br label %121

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

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

125:                                              ; preds = %121
  %126 = load i32, ptr %9, align 4, !tbaa !9
  %127 = mul nsw i32 %126, 4
  br label %131

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

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

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

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

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

158:                                              ; preds = %153
  br label %162

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

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

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

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

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

210:                                              ; preds = %209
  br label %211

211:                                              ; preds = %210
  %212 = load float, ptr %25, align 4, !tbaa !13
  %213 = load ptr, ptr %20, align 8, !tbaa !5
  %214 = load i32, ptr %22, align 4, !tbaa !9
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds %struct.ImVec2, ptr %213, i64 %215
  %217 = getelementptr inbounds %struct.ImVec2, ptr %216, i32 0, i32 0
  store float %212, ptr %217, align 4, !tbaa !29
  %218 = load float, ptr %24, align 4, !tbaa !13
  %219 = fneg float %218
  %220 = load ptr, ptr %20, align 8, !tbaa !5
  %221 = load i32, ptr %22, align 4, !tbaa !9
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds %struct.ImVec2, ptr %220, i64 %222
  %224 = getelementptr inbounds %struct.ImVec2, ptr %223, i32 0, i32 1
  store float %219, ptr %224, 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 %225

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

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

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

242:                                              ; preds = %231, %228
  %243 = load i8, ptr %15, align 1, !tbaa !11, !range !26, !noundef !27
  %244 = trunc i8 %243 to i1
  br i1 %244, label %584, label %245

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

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

303:                                              ; preds = %248, %245
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %304 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 7
  %305 = load i32, ptr %304, align 4, !tbaa !34
  store i32 %305, 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 %306

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

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

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

316:                                              ; preds = %311
  br label %320

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

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

326:                                              ; preds = %320
  %327 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 7
  %328 = load i32, ptr %327, align 4, !tbaa !34
  br label %332

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

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

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

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

372:                                              ; preds = %371, %362
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %373 = load float, ptr %42, align 4, !tbaa !13
  %374 = fdiv float 1.000000e+00, %373
  store float %374, ptr %43, align 4, !tbaa !13
  %375 = load float, ptr %43, align 4, !tbaa !13
  %376 = load float, ptr %40, align 4, !tbaa !13
  %377 = fmul float %376, %375
  store float %377, ptr %40, align 4, !tbaa !13
  %378 = load float, ptr %43, align 4, !tbaa !13
  %379 = load float, ptr %41, align 4, !tbaa !13
  %380 = fmul float %379, %378
  store float %380, 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 %381

381:                                              ; preds = %372
  br label %382

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

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

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

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

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

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

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

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

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

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

711:                                              ; preds = %590, %584
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #7
  %712 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 7
  %713 = load i32, ptr %712, align 4, !tbaa !34
  store i32 %713, ptr %63, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #7
  store i32 0, ptr %64, align 4, !tbaa !9
  br label %714

714:                                              ; preds = %1010, %711
  %715 = load i32, ptr %64, align 4, !tbaa !9
  %716 = load i32, ptr %14, align 4, !tbaa !9
  %717 = icmp slt i32 %715, %716
  br i1 %717, label %719, label %718

718:                                              ; preds = %714
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #7
  br label %1013

719:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #7
  %720 = load i32, ptr %64, align 4, !tbaa !9
  %721 = add nsw i32 %720, 1
  %722 = load i32, ptr %9, align 4, !tbaa !9
  %723 = icmp eq i32 %721, %722
  br i1 %723, label %724, label %725

724:                                              ; preds = %719
  br label %728

725:                                              ; preds = %719
  %726 = load i32, ptr %64, align 4, !tbaa !9
  %727 = add nsw i32 %726, 1
  br label %728

728:                                              ; preds = %725, %724
  %729 = phi i32 [ 0, %724 ], [ %727, %725 ]
  store i32 %729, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #7
  %730 = load i32, ptr %64, align 4, !tbaa !9
  %731 = add nsw i32 %730, 1
  %732 = load i32, ptr %9, align 4, !tbaa !9
  %733 = icmp eq i32 %731, %732
  br i1 %733, label %734, label %737

734:                                              ; preds = %728
  %735 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 7
  %736 = load i32, ptr %735, align 4, !tbaa !34
  br label %740

737:                                              ; preds = %728
  %738 = load i32, ptr %63, align 4, !tbaa !9
  %739 = add i32 %738, 4
  br label %740

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

770:                                              ; preds = %740
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %771 = load float, ptr %67, align 4, !tbaa !13
  %772 = load float, ptr %67, align 4, !tbaa !13
  %773 = load float, ptr %68, align 4, !tbaa !13
  %774 = load float, ptr %68, align 4, !tbaa !13
  %775 = fmul float %773, %774
  %776 = call float @llvm.fmuladd.f32(float %771, float %772, float %775)
  store float %776, ptr %69, align 4, !tbaa !13
  %777 = load float, ptr %69, align 4, !tbaa !13
  %778 = fcmp olt float %777, 5.000000e-01
  br i1 %778, label %779, label %780

779:                                              ; preds = %770
  store float 5.000000e-01, ptr %69, align 4, !tbaa !13
  br label %780

780:                                              ; preds = %779, %770
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %781 = load float, ptr %69, align 4, !tbaa !13
  %782 = fdiv float 1.000000e+00, %781
  store float %782, ptr %70, align 4, !tbaa !13
  %783 = load float, ptr %70, align 4, !tbaa !13
  %784 = load float, ptr %67, align 4, !tbaa !13
  %785 = fmul float %784, %783
  store float %785, ptr %67, align 4, !tbaa !13
  %786 = load float, ptr %70, align 4, !tbaa !13
  %787 = load float, ptr %68, align 4, !tbaa !13
  %788 = fmul float %787, %786
  store float %788, ptr %68, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  br label %789

789:                                              ; preds = %780
  br label %790

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

1010:                                             ; preds = %790
  %1011 = load i32, ptr %64, align 4, !tbaa !9
  %1012 = add nsw i32 %1011, 1
  store i32 %1012, ptr %64, align 4, !tbaa !9
  br label %714, !llvm.loop !43

1013:                                             ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #7
  store i32 0, ptr %76, align 4, !tbaa !9
  br label %1014

1014:                                             ; preds = %1099, %1013
  %1015 = load i32, ptr %76, align 4, !tbaa !9
  %1016 = load i32, ptr %9, align 4, !tbaa !9
  %1017 = icmp slt i32 %1015, %1016
  br i1 %1017, label %1019, label %1018

1018:                                             ; preds = %1014
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  br label %1102

1019:                                             ; preds = %1014
  %1020 = load ptr, ptr %21, align 8, !tbaa !5
  %1021 = load i32, ptr %76, align 4, !tbaa !9
  %1022 = mul nsw i32 %1021, 4
  %1023 = add nsw i32 %1022, 0
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds %struct.ImVec2, ptr %1020, i64 %1024
  %1026 = getelementptr inbounds %struct.ImDrawList, ptr %88, 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 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1029, ptr align 4 %1025, i64 8, i1 false), !tbaa.struct !25
  %1030 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1031 = load ptr, ptr %1030, align 8, !tbaa !39
  %1032 = getelementptr inbounds %struct.ImDrawVert, ptr %1031, i64 0
  %1033 = getelementptr inbounds %struct.ImDrawVert, ptr %1032, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1033, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1034 = load i32, ptr %17, align 4, !tbaa !9
  %1035 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1036 = load ptr, ptr %1035, align 8, !tbaa !39
  %1037 = getelementptr inbounds %struct.ImDrawVert, ptr %1036, i64 0
  %1038 = getelementptr inbounds %struct.ImDrawVert, ptr %1037, i32 0, i32 2
  store i32 %1034, ptr %1038, align 4, !tbaa !40
  %1039 = load ptr, ptr %21, align 8, !tbaa !5
  %1040 = load i32, ptr %76, align 4, !tbaa !9
  %1041 = mul nsw i32 %1040, 4
  %1042 = add nsw i32 %1041, 1
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds %struct.ImVec2, ptr %1039, i64 %1043
  %1045 = getelementptr inbounds %struct.ImDrawList, ptr %88, 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 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1048, ptr align 4 %1044, i64 8, i1 false), !tbaa.struct !25
  %1049 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1050 = load ptr, ptr %1049, align 8, !tbaa !39
  %1051 = getelementptr inbounds %struct.ImDrawVert, ptr %1050, i64 1
  %1052 = getelementptr inbounds %struct.ImDrawVert, ptr %1051, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1052, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1053 = load i32, ptr %10, align 4, !tbaa !9
  %1054 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1055 = load ptr, ptr %1054, align 8, !tbaa !39
  %1056 = getelementptr inbounds %struct.ImDrawVert, ptr %1055, i64 1
  %1057 = getelementptr inbounds %struct.ImDrawVert, ptr %1056, i32 0, i32 2
  store i32 %1053, ptr %1057, align 4, !tbaa !40
  %1058 = load ptr, ptr %21, align 8, !tbaa !5
  %1059 = load i32, ptr %76, align 4, !tbaa !9
  %1060 = mul nsw i32 %1059, 4
  %1061 = add nsw i32 %1060, 2
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds %struct.ImVec2, ptr %1058, i64 %1062
  %1064 = getelementptr inbounds %struct.ImDrawList, ptr %88, 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 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1067, ptr align 4 %1063, i64 8, i1 false), !tbaa.struct !25
  %1068 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1069 = load ptr, ptr %1068, align 8, !tbaa !39
  %1070 = getelementptr inbounds %struct.ImDrawVert, ptr %1069, i64 2
  %1071 = getelementptr inbounds %struct.ImDrawVert, ptr %1070, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1071, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1072 = load i32, ptr %10, align 4, !tbaa !9
  %1073 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1074 = load ptr, ptr %1073, align 8, !tbaa !39
  %1075 = getelementptr inbounds %struct.ImDrawVert, ptr %1074, i64 2
  %1076 = getelementptr inbounds %struct.ImDrawVert, ptr %1075, i32 0, i32 2
  store i32 %1072, ptr %1076, align 4, !tbaa !40
  %1077 = load ptr, ptr %21, align 8, !tbaa !5
  %1078 = load i32, ptr %76, align 4, !tbaa !9
  %1079 = mul nsw i32 %1078, 4
  %1080 = add nsw i32 %1079, 3
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds %struct.ImVec2, ptr %1077, i64 %1081
  %1083 = getelementptr inbounds %struct.ImDrawList, ptr %88, 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 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1086, ptr align 4 %1082, i64 8, i1 false), !tbaa.struct !25
  %1087 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1088 = load ptr, ptr %1087, align 8, !tbaa !39
  %1089 = getelementptr inbounds %struct.ImDrawVert, ptr %1088, i64 3
  %1090 = getelementptr inbounds %struct.ImDrawVert, ptr %1089, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1090, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !25
  %1091 = load i32, ptr %17, align 4, !tbaa !9
  %1092 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1093 = load ptr, ptr %1092, align 8, !tbaa !39
  %1094 = getelementptr inbounds %struct.ImDrawVert, ptr %1093, i64 3
  %1095 = getelementptr inbounds %struct.ImDrawVert, ptr %1094, i32 0, i32 2
  store i32 %1091, ptr %1095, align 4, !tbaa !40
  %1096 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 8
  %1097 = load ptr, ptr %1096, align 8, !tbaa !39
  %1098 = getelementptr inbounds %struct.ImDrawVert, ptr %1097, i64 4
  store ptr %1098, ptr %1096, align 8, !tbaa !39
  br label %1099

1099:                                             ; preds = %1019
  %1100 = load i32, ptr %76, align 4, !tbaa !9
  %1101 = add nsw i32 %1100, 1
  store i32 %1101, ptr %76, align 4, !tbaa !9
  br label %1014, !llvm.loop !44

1102:                                             ; preds = %1018
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %1103

1103:                                             ; preds = %1102, %583
  %1104 = load i32, ptr %19, align 4, !tbaa !9
  %1105 = trunc i32 %1104 to i16
  %1106 = zext i16 %1105 to i32
  %1107 = getelementptr inbounds %struct.ImDrawList, ptr %88, i32 0, i32 7
  %1108 = load i32, ptr %1107, align 4, !tbaa !34
  %1109 = add i32 %1108, %1106
  store i32 %1109, ptr %1107, 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 %1354

1110:                                             ; preds = %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #7
  %1111 = load i32, ptr %14, align 4, !tbaa !9
  %1112 = mul nsw i32 %1111, 6
  store i32 %1112, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  %1113 = load i32, ptr %14, align 4, !tbaa !9
  %1114 = mul nsw i32 %1113, 4
  store i32 %1114, ptr %78, align 4, !tbaa !9
  %1115 = load i32, ptr %77, align 4, !tbaa !9
  %1116 = load i32, ptr %78, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %88, i32 noundef %1115, i32 noundef %1116)
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #7
  store i32 0, ptr %79, align 4, !tbaa !9
  br label %1117

1117:                                             ; preds = %1350, %1110
  %1118 = load i32, ptr %79, align 4, !tbaa !9
  %1119 = load i32, ptr %14, align 4, !tbaa !9
  %1120 = icmp slt i32 %1118, %1119
  br i1 %1120, label %1122, label %1121

1121:                                             ; preds = %1117
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %1353

1122:                                             ; preds = %1117
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  %1123 = load i32, ptr %79, align 4, !tbaa !9
  %1124 = add nsw i32 %1123, 1
  %1125 = load i32, ptr %9, align 4, !tbaa !9
  %1126 = icmp eq i32 %1124, %1125
  br i1 %1126, label %1127, label %1128

1127:                                             ; preds = %1122
  br label %1131

1128:                                             ; preds = %1122
  %1129 = load i32, ptr %79, align 4, !tbaa !9
  %1130 = add nsw i32 %1129, 1
  br label %1131

1131:                                             ; preds = %1128, %1127
  %1132 = phi i32 [ 0, %1127 ], [ %1130, %1128 ]
  store i32 %1132, ptr %80, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  %1133 = load ptr, ptr %8, align 8, !tbaa !5
  %1134 = load i32, ptr %79, align 4, !tbaa !9
  %1135 = sext i32 %1134 to i64
  %1136 = getelementptr inbounds %struct.ImVec2, ptr %1133, i64 %1135
  store ptr %1136, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  %1137 = load ptr, ptr %8, align 8, !tbaa !5
  %1138 = load i32, ptr %80, align 4, !tbaa !9
  %1139 = sext i32 %1138 to i64
  %1140 = getelementptr inbounds %struct.ImVec2, ptr %1137, i64 %1139
  store ptr %1140, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #7
  %1141 = load ptr, ptr %82, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.ImVec2, ptr %1141, i32 0, i32 0
  %1143 = load float, ptr %1142, align 4, !tbaa !29
  %1144 = load ptr, ptr %81, align 8, !tbaa !5
  %1145 = getelementptr inbounds %struct.ImVec2, ptr %1144, i32 0, i32 0
  %1146 = load float, ptr %1145, align 4, !tbaa !29
  %1147 = fsub float %1143, %1146
  store float %1147, ptr %83, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #7
  %1148 = load ptr, ptr %82, align 8, !tbaa !5
  %1149 = getelementptr inbounds %struct.ImVec2, ptr %1148, i32 0, i32 1
  %1150 = load float, ptr %1149, align 4, !tbaa !31
  %1151 = load ptr, ptr %81, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.ImVec2, ptr %1151, i32 0, i32 1
  %1153 = load float, ptr %1152, align 4, !tbaa !31
  %1154 = fsub float %1150, %1153
  store float %1154, ptr %84, align 4, !tbaa !13
  br label %1155

1155:                                             ; preds = %1131
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #7
  %1156 = load float, ptr %83, align 4, !tbaa !13
  %1157 = load float, ptr %83, align 4, !tbaa !13
  %1158 = load float, ptr %84, align 4, !tbaa !13
  %1159 = load float, ptr %84, align 4, !tbaa !13
  %1160 = fmul float %1158, %1159
  %1161 = call float @llvm.fmuladd.f32(float %1156, float %1157, float %1160)
  store float %1161, ptr %85, align 4, !tbaa !13
  %1162 = load float, ptr %85, align 4, !tbaa !13
  %1163 = fcmp ogt float %1162, 0.000000e+00
  br i1 %1163, label %1164, label %1174

1164:                                             ; preds = %1155
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #7
  %1165 = load float, ptr %85, align 4, !tbaa !13
  %1166 = call float @sqrtf(float noundef %1165) #7
  %1167 = fdiv float 1.000000e+00, %1166
  store float %1167, ptr %86, align 4, !tbaa !13
  %1168 = load float, ptr %86, align 4, !tbaa !13
  %1169 = load float, ptr %83, align 4, !tbaa !13
  %1170 = fmul float %1169, %1168
  store float %1170, ptr %83, align 4, !tbaa !13
  %1171 = load float, ptr %86, align 4, !tbaa !13
  %1172 = load float, ptr %84, align 4, !tbaa !13
  %1173 = fmul float %1172, %1171
  store float %1173, ptr %84, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #7
  br label %1174

1174:                                             ; preds = %1164, %1155
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #7
  br label %1175

1175:                                             ; preds = %1174
  br label %1176

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

1350:                                             ; preds = %1176
  %1351 = load i32, ptr %79, align 4, !tbaa !9
  %1352 = add nsw i32 %1351, 1
  store i32 %1352, ptr %79, align 4, !tbaa !9
  br label %1117, !llvm.loop !47

1353:                                             ; preds = %1121
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #7
  br label %1354

1354:                                             ; preds = %1353, %1103
  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 %1355

1355:                                             ; preds = %1354, %91
  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.ph411, 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.ph398

.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 %.thread389, label %.thread388

.thread388:                                       ; 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.ph398

.lr.ph398:                                        ; preds = %.thread388, %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.count418 = zext nneg i32 %spec.select to i64
  br label %92

.lr.ph400:                                        ; 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.count423 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %91, align 8, !tbaa !29
  br label %144

92:                                               ; preds = %.lr.ph398, %92
  %indvars.iv415 = phi i64 [ 0, %.lr.ph398 ], [ %indvars.iv.next416, %92 ]
  %93 = phi ptr [ %.promoted, %.lr.ph398 ], [ %143, %92 ]
  %.0363396 = phi i32 [ %89, %.lr.ph398 ], [ %99, %92 ]
  %indvars.iv.next416 = add nuw nsw i64 %indvars.iv415, 1
  %94 = icmp eq i64 %indvars.iv.next416, %39
  %95 = trunc nuw nsw i64 %indvars.iv.next416 to i32
  %96 = select i1 %94, i32 0, i32 %95
  %97 = load i32, ptr %88, align 4
  %98 = add i32 %.0363396, 3
  %99 = select i1 %94, i32 %97, i32 %98
  %100 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %indvars.iv415
  %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
  %.0367 = select i1 %115, float 5.000000e-01, float %114
  %116 = fdiv float 1.000000e+00, %.0367
  %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 %.0363396 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
  %exitcond419.not = icmp eq i64 %indvars.iv.next416, %wide.trip.count418
  br i1 %exitcond419.not, label %.lr.ph400, label %92, !llvm.loop !32

144:                                              ; preds = %.lr.ph400, %144
  %145 = phi ptr [ %.pre, %.lr.ph400 ], [ %168, %144 ]
  %indvars.iv420 = phi i64 [ 0, %.lr.ph400 ], [ %indvars.iv.next421, %144 ]
  %146 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv420
  %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.iv420, 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.next421 = add nuw nsw i64 %indvars.iv420, 1
  %exitcond424.not = icmp eq i64 %indvars.iv.next421, %wide.trip.count423
  br i1 %exitcond424.not, label %.loopexit391, 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.ph404

.thread389:                                       ; 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.ph404

.lr.ph404:                                        ; preds = %.thread389, %169
  %209 = phi float [ %173, %.thread389 ], [ %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
  %.promoted405 = load ptr, ptr %213, align 8, !tbaa !28
  %wide.trip.count428 = 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.ph408:                                        ; preds = %218
  store ptr %279, ptr %213, align 8, !tbaa !28
  %217 = getelementptr inbounds i8, ptr %0, i64 80
  %smax433 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count434 = zext nneg i32 %smax433 to i64
  %.pre442 = load ptr, ptr %217, align 8, !tbaa !29
  br label %280

218:                                              ; preds = %.lr.ph404, %218
  %indvars.iv425 = phi i64 [ 0, %.lr.ph404 ], [ %indvars.iv.next426, %218 ]
  %219 = phi ptr [ %.promoted405, %.lr.ph404 ], [ %279, %218 ]
  %.0369402 = phi i32 [ %211, %.lr.ph404 ], [ %225, %218 ]
  %indvars.iv.next426 = add nuw nsw i64 %indvars.iv425, 1
  %220 = icmp eq i64 %indvars.iv.next426, %39
  %221 = trunc nuw nsw i64 %indvars.iv.next426 to i32
  %222 = select i1 %220, i32 0, i32 %221
  %223 = load i32, ptr %210, align 4
  %224 = add i32 %.0369402, 4
  %225 = select i1 %220, i32 %223, i32 %224
  %226 = getelementptr inbounds %struct.ImVec2, ptr %38, i64 %indvars.iv425
  %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
  %.0371 = select i1 %241, float 5.000000e-01, float %240
  %242 = fdiv float 1.000000e+00, %.0371
  %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 %.0369402 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
  %exitcond429.not = icmp eq i64 %indvars.iv.next426, %wide.trip.count428
  br i1 %exitcond429.not, label %.lr.ph408, label %218, !llvm.loop !36

280:                                              ; preds = %.lr.ph408, %280
  %281 = phi ptr [ %.pre442, %.lr.ph408 ], [ %313, %280 ]
  %indvars.iv430 = phi i64 [ 0, %.lr.ph408 ], [ %indvars.iv.next431, %280 ]
  %282 = shl nsw i64 %indvars.iv430, 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.next431 = add nuw nsw i64 %indvars.iv430, 1
  %exitcond435.not = icmp eq i64 %indvars.iv.next431, %wide.trip.count434
  br i1 %exitcond435.not, label %.loopexit391, label %280, !llvm.loop !37

.loopexit391:                                     ; 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.ph411:                                        ; 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.count439 = 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.ph411, %349
  %indvars.iv436 = phi i64 [ 0, %.lr.ph411 ], [ %indvars.iv.next437, %349 ]
  %indvars.iv.next437 = add nuw nsw i64 %indvars.iv436, 1
  %328 = icmp eq i64 %indvars.iv.next437, %324
  %329 = and i64 %indvars.iv.next437, 4294967295
  %330 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv436
  %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
  %sqrt390 = tail call float @llvm.sqrt.f32(float %342)
  %345 = fdiv float 1.000000e+00, %sqrt390
  %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
  %exitcond440.not = icmp eq i64 %indvars.iv.next437, %wide.trip.count439
  br i1 %exitcond440.not, label %.loopexit, label %327, !llvm.loop !40

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