; LLVM IR from Eukky/TRender :: lib/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 { %class.ImVector, %class.ImVector.0, %class.ImVector.1, i32, ptr, ptr, i32, ptr, ptr, %class.ImVector.2, %class.ImVector.3, %class.ImVector.4, i32, i32, %class.ImVector.5 }
%class.ImVector = type { i32, i32, ptr }
%class.ImVector.0 = type { i32, i32, ptr }
%class.ImVector.1 = type { i32, i32, ptr }
%class.ImVector.2 = type { i32, i32, ptr }
%class.ImVector.3 = type { i32, i32, ptr }
%class.ImVector.4 = type { i32, i32, ptr }
%class.ImVector.5 = type { i32, i32, ptr }
%struct.ImDrawListSharedData = type { %struct.ImVec2, ptr, float, float, %struct.ImVec4, [12 x %struct.ImVec2] }
%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 %struct.ImVec2, align 4
  %25 = alloca %struct.ImVec2, align 4
  %26 = alloca %struct.ImVec2, align 4
  %27 = alloca %struct.ImVec2, 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 i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca %struct.ImVec2, align 4
  %38 = alloca %struct.ImVec2, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca %struct.ImVec2, align 4
  %42 = alloca %struct.ImVec2, align 4
  %43 = alloca i32, align 4
  %44 = alloca float, align 4
  %45 = alloca %struct.ImVec2, align 4
  %46 = alloca %struct.ImVec2, 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 i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca %struct.ImVec2, align 4
  %66 = alloca %struct.ImVec2, align 4
  %67 = alloca float, align 4
  %68 = alloca float, align 4
  %69 = alloca %struct.ImVec2, align 4
  %70 = alloca %struct.ImVec2, align 4
  %71 = alloca %struct.ImVec2, align 4
  %72 = alloca %struct.ImVec2, align 4
  %73 = alloca %struct.ImVec2, align 4
  %74 = alloca %struct.ImVec2, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca ptr, align 8
  %81 = alloca ptr, align 8
  %82 = alloca %struct.ImVec2, align 4
  %83 = alloca float, align 4
  %84 = 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
  %85 = zext i1 %4 to i8
  store i8 %85, ptr %11, align 1, !tbaa !11
  store float %5, ptr %12, align 4, !tbaa !13
  %86 = load ptr, ptr %7, align 8
  %87 = load i32, ptr %9, align 4, !tbaa !9
  %88 = icmp slt i32 %87, 2
  br i1 %88, label %89, label %90

89:                                               ; preds = %6
  br label %1167

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

97:                                               ; preds = %90
  %98 = load i32, ptr %9, align 4, !tbaa !9
  %99 = sub nsw i32 %98, 1
  store i32 %99, ptr %14, align 4, !tbaa !9
  br label %100

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

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

113:                                              ; preds = %108
  %114 = load i32, ptr %14, align 4, !tbaa !9
  %115 = mul nsw i32 %114, 18
  br label %119

116:                                              ; preds = %108
  %117 = load i32, ptr %14, align 4, !tbaa !9
  %118 = mul nsw i32 %117, 12
  br label %119

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

123:                                              ; preds = %119
  %124 = load i32, ptr %9, align 4, !tbaa !9
  %125 = mul nsw i32 %124, 4
  br label %129

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

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

146:                                              ; preds = %188, %129
  %147 = load i32, ptr %22, align 4, !tbaa !9
  %148 = load i32, ptr %14, align 4, !tbaa !9
  %149 = icmp slt i32 %147, %148
  br i1 %149, label %151, label %150

150:                                              ; preds = %146
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %191

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

156:                                              ; preds = %151
  br label %160

157:                                              ; preds = %151
  %158 = load i32, ptr %22, align 4, !tbaa !9
  %159 = add nsw i32 %158, 1
  br label %160

160:                                              ; preds = %157, %156
  %161 = phi i32 [ 0, %156 ], [ %159, %157 ]
  store i32 %161, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = load i32, ptr %23, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds %struct.ImVec2, ptr %162, i64 %164
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = load i32, ptr %22, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds %struct.ImVec2, ptr %166, i64 %168
  %170 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %165, ptr noundef nonnull align 4 dereferenceable(8) %169)
  store <2 x float> %170, ptr %24, align 4
  %171 = call noundef float @_ZL11ImInvLengthRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %24, float noundef 1.000000e+00)
  %172 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %24, float noundef %171)
  %173 = getelementptr inbounds %struct.ImVec2, ptr %24, i32 0, i32 1
  %174 = load float, ptr %173, align 4, !tbaa !28
  %175 = load ptr, ptr %20, align 8, !tbaa !5
  %176 = load i32, ptr %22, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds %struct.ImVec2, ptr %175, i64 %177
  %179 = getelementptr inbounds %struct.ImVec2, ptr %178, i32 0, i32 0
  store float %174, ptr %179, align 4, !tbaa !30
  %180 = getelementptr inbounds %struct.ImVec2, ptr %24, i32 0, i32 0
  %181 = load float, ptr %180, align 4, !tbaa !30
  %182 = fneg float %181
  %183 = load ptr, ptr %20, 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
  store float %182, ptr %187, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %188

188:                                              ; preds = %160
  %189 = load i32, ptr %22, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %22, align 4, !tbaa !9
  br label %146, !llvm.loop !31

191:                                              ; preds = %150
  %192 = load i8, ptr %11, align 1, !tbaa !11, !range !25, !noundef !26
  %193 = trunc i8 %192 to i1
  br i1 %193, label %205, label %194

194:                                              ; preds = %191
  %195 = load ptr, ptr %20, align 8, !tbaa !5
  %196 = load i32, ptr %9, align 4, !tbaa !9
  %197 = sub nsw i32 %196, 2
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds %struct.ImVec2, ptr %195, i64 %198
  %200 = load ptr, ptr %20, align 8, !tbaa !5
  %201 = load i32, ptr %9, align 4, !tbaa !9
  %202 = sub nsw i32 %201, 1
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds %struct.ImVec2, ptr %200, i64 %203
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %204, ptr align 4 %199, i64 8, i1 false), !tbaa.struct !24
  br label %205

205:                                              ; preds = %194, %191
  %206 = load i8, ptr %15, align 1, !tbaa !11, !range !25, !noundef !26
  %207 = trunc i8 %206 to i1
  br i1 %207, label %500, label %208

208:                                              ; preds = %205
  %209 = load i8, ptr %11, align 1, !tbaa !11, !range !25, !noundef !26
  %210 = trunc i8 %209 to i1
  br i1 %210, label %266, label %211

211:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %212 = load ptr, ptr %8, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.ImVec2, ptr %212, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %214 = load ptr, ptr %20, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.ImVec2, ptr %214, i64 0
  %216 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %215, float noundef 1.000000e+00)
  store <2 x float> %216, ptr %26, align 4
  %217 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %213, ptr noundef nonnull align 4 dereferenceable(8) %26)
  store <2 x float> %217, ptr %25, align 4
  %218 = load ptr, ptr %21, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.ImVec2, ptr %218, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %219, ptr align 4 %25, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.ImVec2, ptr %220, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %222 = load ptr, ptr %20, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.ImVec2, ptr %222, i64 0
  %224 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %223, float noundef 1.000000e+00)
  store <2 x float> %224, ptr %28, align 4
  %225 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %221, ptr noundef nonnull align 4 dereferenceable(8) %28)
  store <2 x float> %225, ptr %27, align 4
  %226 = load ptr, ptr %21, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.ImVec2, ptr %226, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %227, ptr align 4 %27, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = load i32, ptr %9, align 4, !tbaa !9
  %230 = sub nsw i32 %229, 1
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.ImVec2, ptr %228, i64 %231
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %233 = load ptr, ptr %20, align 8, !tbaa !5
  %234 = load i32, ptr %9, align 4, !tbaa !9
  %235 = sub nsw i32 %234, 1
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds %struct.ImVec2, ptr %233, i64 %236
  %238 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %237, float noundef 1.000000e+00)
  store <2 x float> %238, ptr %30, align 4
  %239 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %232, ptr noundef nonnull align 4 dereferenceable(8) %30)
  store <2 x float> %239, ptr %29, align 4
  %240 = load ptr, ptr %21, align 8, !tbaa !5
  %241 = load i32, ptr %9, align 4, !tbaa !9
  %242 = sub nsw i32 %241, 1
  %243 = mul nsw i32 %242, 2
  %244 = add nsw i32 %243, 0
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds %struct.ImVec2, ptr %240, i64 %245
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %246, ptr align 4 %29, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %247 = load ptr, ptr %8, align 8, !tbaa !5
  %248 = load i32, ptr %9, align 4, !tbaa !9
  %249 = sub nsw i32 %248, 1
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds %struct.ImVec2, ptr %247, i64 %250
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %252 = load ptr, ptr %20, align 8, !tbaa !5
  %253 = load i32, ptr %9, align 4, !tbaa !9
  %254 = sub nsw i32 %253, 1
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds %struct.ImVec2, ptr %252, i64 %255
  %257 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %256, float noundef 1.000000e+00)
  store <2 x float> %257, ptr %32, align 4
  %258 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %251, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %258, ptr %31, align 4
  %259 = load ptr, ptr %21, align 8, !tbaa !5
  %260 = load i32, ptr %9, align 4, !tbaa !9
  %261 = sub nsw i32 %260, 1
  %262 = mul nsw i32 %261, 2
  %263 = add nsw i32 %262, 1
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds %struct.ImVec2, ptr %259, i64 %264
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %265, ptr align 4 %31, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %266

266:                                              ; preds = %211, %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %267 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %268 = load i32, ptr %267, align 8, !tbaa !33
  store i32 %268, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %269

269:                                              ; preds = %428, %266
  %270 = load i32, ptr %34, align 4, !tbaa !9
  %271 = load i32, ptr %14, align 4, !tbaa !9
  %272 = icmp slt i32 %270, %271
  br i1 %272, label %274, label %273

273:                                              ; preds = %269
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %431

274:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %275 = load i32, ptr %34, align 4, !tbaa !9
  %276 = add nsw i32 %275, 1
  %277 = load i32, ptr %9, align 4, !tbaa !9
  %278 = icmp eq i32 %276, %277
  br i1 %278, label %279, label %280

279:                                              ; preds = %274
  br label %283

280:                                              ; preds = %274
  %281 = load i32, ptr %34, align 4, !tbaa !9
  %282 = add nsw i32 %281, 1
  br label %283

283:                                              ; preds = %280, %279
  %284 = phi i32 [ 0, %279 ], [ %282, %280 ]
  store i32 %284, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %285 = load i32, ptr %34, align 4, !tbaa !9
  %286 = add nsw i32 %285, 1
  %287 = load i32, ptr %9, align 4, !tbaa !9
  %288 = icmp eq i32 %286, %287
  br i1 %288, label %289, label %292

289:                                              ; preds = %283
  %290 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %291 = load i32, ptr %290, align 8, !tbaa !33
  br label %295

292:                                              ; preds = %283
  %293 = load i32, ptr %33, align 4, !tbaa !9
  %294 = add i32 %293, 3
  br label %295

295:                                              ; preds = %292, %289
  %296 = phi i32 [ %291, %289 ], [ %294, %292 ]
  store i32 %296, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %297 = load ptr, ptr %20, align 8, !tbaa !5
  %298 = load i32, ptr %34, align 4, !tbaa !9
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds %struct.ImVec2, ptr %297, i64 %299
  %301 = load ptr, ptr %20, align 8, !tbaa !5
  %302 = load i32, ptr %35, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds %struct.ImVec2, ptr %301, i64 %303
  %305 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %300, ptr noundef nonnull align 4 dereferenceable(8) %304)
  store <2 x float> %305, ptr %38, align 4
  %306 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %38, float noundef 5.000000e-01)
  store <2 x float> %306, ptr %37, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %307 = getelementptr inbounds %struct.ImVec2, ptr %37, i32 0, i32 0
  %308 = load float, ptr %307, align 4, !tbaa !30
  %309 = getelementptr inbounds %struct.ImVec2, ptr %37, i32 0, i32 0
  %310 = load float, ptr %309, align 4, !tbaa !30
  %311 = getelementptr inbounds %struct.ImVec2, ptr %37, i32 0, i32 1
  %312 = load float, ptr %311, align 4, !tbaa !28
  %313 = getelementptr inbounds %struct.ImVec2, ptr %37, i32 0, i32 1
  %314 = load float, ptr %313, align 4, !tbaa !28
  %315 = fmul float %312, %314
  %316 = call float @llvm.fmuladd.f32(float %308, float %310, float %315)
  store float %316, ptr %39, align 4, !tbaa !13
  %317 = load float, ptr %39, align 4, !tbaa !13
  %318 = fcmp ogt float %317, 0x3EB0C6F7A0000000
  br i1 %318, label %319, label %328

319:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %320 = load float, ptr %39, align 4, !tbaa !13
  %321 = fdiv float 1.000000e+00, %320
  store float %321, ptr %40, align 4, !tbaa !13
  %322 = load float, ptr %40, align 4, !tbaa !13
  %323 = fcmp ogt float %322, 1.000000e+02
  br i1 %323, label %324, label %325

324:                                              ; preds = %319
  store float 1.000000e+02, ptr %40, align 4, !tbaa !13
  br label %325

325:                                              ; preds = %324, %319
  %326 = load float, ptr %40, align 4, !tbaa !13
  %327 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef %326)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %328

328:                                              ; preds = %325, %295
  %329 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = load i32, ptr %35, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds %struct.ImVec2, ptr %330, i64 %332
  %334 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %333, ptr noundef nonnull align 4 dereferenceable(8) %37)
  store <2 x float> %334, ptr %41, align 4
  %335 = load ptr, ptr %21, align 8, !tbaa !5
  %336 = load i32, ptr %35, align 4, !tbaa !9
  %337 = mul nsw i32 %336, 2
  %338 = add nsw i32 %337, 0
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds %struct.ImVec2, ptr %335, i64 %339
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %340, ptr align 4 %41, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = load i32, ptr %35, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds %struct.ImVec2, ptr %341, i64 %343
  %345 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %344, ptr noundef nonnull align 4 dereferenceable(8) %37)
  store <2 x float> %345, ptr %42, align 4
  %346 = load ptr, ptr %21, align 8, !tbaa !5
  %347 = load i32, ptr %35, align 4, !tbaa !9
  %348 = mul nsw i32 %347, 2
  %349 = add nsw i32 %348, 1
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds %struct.ImVec2, ptr %346, i64 %350
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %351, ptr align 4 %42, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  %352 = load i32, ptr %36, align 4, !tbaa !9
  %353 = add i32 %352, 0
  %354 = trunc i32 %353 to i16
  %355 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %356 = load ptr, ptr %355, align 8, !tbaa !34
  %357 = getelementptr inbounds i16, ptr %356, i64 0
  store i16 %354, ptr %357, align 2, !tbaa !35
  %358 = load i32, ptr %33, align 4, !tbaa !9
  %359 = add i32 %358, 0
  %360 = trunc i32 %359 to i16
  %361 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %362 = load ptr, ptr %361, align 8, !tbaa !34
  %363 = getelementptr inbounds i16, ptr %362, i64 1
  store i16 %360, ptr %363, align 2, !tbaa !35
  %364 = load i32, ptr %33, align 4, !tbaa !9
  %365 = add i32 %364, 2
  %366 = trunc i32 %365 to i16
  %367 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %368 = load ptr, ptr %367, align 8, !tbaa !34
  %369 = getelementptr inbounds i16, ptr %368, i64 2
  store i16 %366, ptr %369, align 2, !tbaa !35
  %370 = load i32, ptr %33, align 4, !tbaa !9
  %371 = add i32 %370, 2
  %372 = trunc i32 %371 to i16
  %373 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %374 = load ptr, ptr %373, align 8, !tbaa !34
  %375 = getelementptr inbounds i16, ptr %374, i64 3
  store i16 %372, ptr %375, align 2, !tbaa !35
  %376 = load i32, ptr %36, align 4, !tbaa !9
  %377 = add i32 %376, 2
  %378 = trunc i32 %377 to i16
  %379 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %380 = load ptr, ptr %379, align 8, !tbaa !34
  %381 = getelementptr inbounds i16, ptr %380, i64 4
  store i16 %378, ptr %381, align 2, !tbaa !35
  %382 = load i32, ptr %36, align 4, !tbaa !9
  %383 = add i32 %382, 0
  %384 = trunc i32 %383 to i16
  %385 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %386 = load ptr, ptr %385, align 8, !tbaa !34
  %387 = getelementptr inbounds i16, ptr %386, i64 5
  store i16 %384, ptr %387, align 2, !tbaa !35
  %388 = load i32, ptr %36, align 4, !tbaa !9
  %389 = add i32 %388, 1
  %390 = trunc i32 %389 to i16
  %391 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %392 = load ptr, ptr %391, align 8, !tbaa !34
  %393 = getelementptr inbounds i16, ptr %392, i64 6
  store i16 %390, ptr %393, align 2, !tbaa !35
  %394 = load i32, ptr %33, align 4, !tbaa !9
  %395 = add i32 %394, 1
  %396 = trunc i32 %395 to i16
  %397 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %398 = load ptr, ptr %397, align 8, !tbaa !34
  %399 = getelementptr inbounds i16, ptr %398, i64 7
  store i16 %396, ptr %399, align 2, !tbaa !35
  %400 = load i32, ptr %33, align 4, !tbaa !9
  %401 = add i32 %400, 0
  %402 = trunc i32 %401 to i16
  %403 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %404 = load ptr, ptr %403, align 8, !tbaa !34
  %405 = getelementptr inbounds i16, ptr %404, i64 8
  store i16 %402, ptr %405, align 2, !tbaa !35
  %406 = load i32, ptr %33, align 4, !tbaa !9
  %407 = add i32 %406, 0
  %408 = trunc i32 %407 to i16
  %409 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %410 = load ptr, ptr %409, align 8, !tbaa !34
  %411 = getelementptr inbounds i16, ptr %410, i64 9
  store i16 %408, ptr %411, align 2, !tbaa !35
  %412 = load i32, ptr %36, align 4, !tbaa !9
  %413 = add i32 %412, 0
  %414 = trunc i32 %413 to i16
  %415 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %416 = load ptr, ptr %415, align 8, !tbaa !34
  %417 = getelementptr inbounds i16, ptr %416, i64 10
  store i16 %414, ptr %417, align 2, !tbaa !35
  %418 = load i32, ptr %36, align 4, !tbaa !9
  %419 = add i32 %418, 1
  %420 = trunc i32 %419 to i16
  %421 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %422 = load ptr, ptr %421, align 8, !tbaa !34
  %423 = getelementptr inbounds i16, ptr %422, i64 11
  store i16 %420, ptr %423, align 2, !tbaa !35
  %424 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %425 = load ptr, ptr %424, align 8, !tbaa !34
  %426 = getelementptr inbounds i16, ptr %425, i64 12
  store ptr %426, ptr %424, align 8, !tbaa !34
  %427 = load i32, ptr %36, align 4, !tbaa !9
  store i32 %427, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %428

428:                                              ; preds = %328
  %429 = load i32, ptr %34, align 4, !tbaa !9
  %430 = add nsw i32 %429, 1
  store i32 %430, ptr %34, align 4, !tbaa !9
  br label %269, !llvm.loop !37

431:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %432

432:                                              ; preds = %496, %431
  %433 = load i32, ptr %43, align 4, !tbaa !9
  %434 = load i32, ptr %9, align 4, !tbaa !9
  %435 = icmp slt i32 %433, %434
  br i1 %435, label %437, label %436

436:                                              ; preds = %432
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %499

437:                                              ; preds = %432
  %438 = load ptr, ptr %8, align 8, !tbaa !5
  %439 = load i32, ptr %43, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds %struct.ImVec2, ptr %438, i64 %440
  %442 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %443 = load ptr, ptr %442, align 8, !tbaa !38
  %444 = getelementptr inbounds %struct.ImDrawVert, ptr %443, i64 0
  %445 = getelementptr inbounds %struct.ImDrawVert, ptr %444, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %445, ptr align 4 %441, i64 8, i1 false), !tbaa.struct !24
  %446 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %447 = load ptr, ptr %446, align 8, !tbaa !38
  %448 = getelementptr inbounds %struct.ImDrawVert, ptr %447, i64 0
  %449 = getelementptr inbounds %struct.ImDrawVert, ptr %448, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %449, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %450 = load i32, ptr %10, align 4, !tbaa !9
  %451 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %452 = load ptr, ptr %451, align 8, !tbaa !38
  %453 = getelementptr inbounds %struct.ImDrawVert, ptr %452, i64 0
  %454 = getelementptr inbounds %struct.ImDrawVert, ptr %453, i32 0, i32 2
  store i32 %450, ptr %454, align 4, !tbaa !39
  %455 = load ptr, ptr %21, align 8, !tbaa !5
  %456 = load i32, ptr %43, align 4, !tbaa !9
  %457 = mul nsw i32 %456, 2
  %458 = add nsw i32 %457, 0
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds %struct.ImVec2, ptr %455, i64 %459
  %461 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %462 = load ptr, ptr %461, align 8, !tbaa !38
  %463 = getelementptr inbounds %struct.ImDrawVert, ptr %462, i64 1
  %464 = getelementptr inbounds %struct.ImDrawVert, ptr %463, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %464, ptr align 4 %460, i64 8, i1 false), !tbaa.struct !24
  %465 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %466 = load ptr, ptr %465, align 8, !tbaa !38
  %467 = getelementptr inbounds %struct.ImDrawVert, ptr %466, i64 1
  %468 = getelementptr inbounds %struct.ImDrawVert, ptr %467, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %468, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %469 = load i32, ptr %17, align 4, !tbaa !9
  %470 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %471 = load ptr, ptr %470, align 8, !tbaa !38
  %472 = getelementptr inbounds %struct.ImDrawVert, ptr %471, i64 1
  %473 = getelementptr inbounds %struct.ImDrawVert, ptr %472, i32 0, i32 2
  store i32 %469, ptr %473, align 4, !tbaa !39
  %474 = load ptr, ptr %21, align 8, !tbaa !5
  %475 = load i32, ptr %43, align 4, !tbaa !9
  %476 = mul nsw i32 %475, 2
  %477 = add nsw i32 %476, 1
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds %struct.ImVec2, ptr %474, i64 %478
  %480 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %481 = load ptr, ptr %480, align 8, !tbaa !38
  %482 = getelementptr inbounds %struct.ImDrawVert, ptr %481, i64 2
  %483 = getelementptr inbounds %struct.ImDrawVert, ptr %482, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %483, ptr align 4 %479, i64 8, i1 false), !tbaa.struct !24
  %484 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %485 = load ptr, ptr %484, align 8, !tbaa !38
  %486 = getelementptr inbounds %struct.ImDrawVert, ptr %485, i64 2
  %487 = getelementptr inbounds %struct.ImDrawVert, ptr %486, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %487, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %488 = load i32, ptr %17, align 4, !tbaa !9
  %489 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %490 = load ptr, ptr %489, align 8, !tbaa !38
  %491 = getelementptr inbounds %struct.ImDrawVert, ptr %490, i64 2
  %492 = getelementptr inbounds %struct.ImDrawVert, ptr %491, i32 0, i32 2
  store i32 %488, ptr %492, align 4, !tbaa !39
  %493 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %494 = load ptr, ptr %493, align 8, !tbaa !38
  %495 = getelementptr inbounds %struct.ImDrawVert, ptr %494, i64 3
  store ptr %495, ptr %493, align 8, !tbaa !38
  br label %496

496:                                              ; preds = %437
  %497 = load i32, ptr %43, align 4, !tbaa !9
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %43, align 4, !tbaa !9
  br label %432, !llvm.loop !41

499:                                              ; preds = %436
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %944

500:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  %501 = load float, ptr %12, align 4, !tbaa !13
  %502 = fsub float %501, 1.000000e+00
  %503 = fmul float %502, 5.000000e-01
  store float %503, ptr %44, align 4, !tbaa !13
  %504 = load i8, ptr %11, align 1, !tbaa !11, !range !25, !noundef !26
  %505 = trunc i8 %504 to i1
  br i1 %505, label %627, label %506

506:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %507 = load ptr, ptr %8, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.ImVec2, ptr %507, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %509 = load ptr, ptr %20, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.ImVec2, ptr %509, i64 0
  %511 = load float, ptr %44, align 4, !tbaa !13
  %512 = fadd float %511, 1.000000e+00
  %513 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %510, float noundef %512)
  store <2 x float> %513, ptr %46, align 4
  %514 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %508, ptr noundef nonnull align 4 dereferenceable(8) %46)
  store <2 x float> %514, ptr %45, align 4
  %515 = load ptr, ptr %21, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.ImVec2, ptr %515, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %516, ptr align 4 %45, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.ImVec2, ptr %517, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %519 = load ptr, ptr %20, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.ImVec2, ptr %519, i64 0
  %521 = load float, ptr %44, align 4, !tbaa !13
  %522 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %520, float noundef %521)
  store <2 x float> %522, ptr %48, align 4
  %523 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %518, ptr noundef nonnull align 4 dereferenceable(8) %48)
  store <2 x float> %523, ptr %47, align 4
  %524 = load ptr, ptr %21, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.ImVec2, ptr %524, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %525, ptr align 4 %47, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %526 = load ptr, ptr %8, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.ImVec2, ptr %526, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %528 = load ptr, ptr %20, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.ImVec2, ptr %528, i64 0
  %530 = load float, ptr %44, align 4, !tbaa !13
  %531 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %529, float noundef %530)
  store <2 x float> %531, ptr %50, align 4
  %532 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %527, ptr noundef nonnull align 4 dereferenceable(8) %50)
  store <2 x float> %532, ptr %49, align 4
  %533 = load ptr, ptr %21, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.ImVec2, ptr %533, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %534, ptr align 4 %49, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %535 = load ptr, ptr %8, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.ImVec2, ptr %535, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %537 = load ptr, ptr %20, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.ImVec2, ptr %537, i64 0
  %539 = load float, ptr %44, align 4, !tbaa !13
  %540 = fadd float %539, 1.000000e+00
  %541 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %538, float noundef %540)
  store <2 x float> %541, ptr %52, align 4
  %542 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %536, ptr noundef nonnull align 4 dereferenceable(8) %52)
  store <2 x float> %542, ptr %51, align 4
  %543 = load ptr, ptr %21, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.ImVec2, ptr %543, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %544, ptr align 4 %51, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %545 = load ptr, ptr %8, align 8, !tbaa !5
  %546 = load i32, ptr %9, align 4, !tbaa !9
  %547 = sub nsw i32 %546, 1
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds %struct.ImVec2, ptr %545, i64 %548
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %550 = load ptr, ptr %20, align 8, !tbaa !5
  %551 = load i32, ptr %9, align 4, !tbaa !9
  %552 = sub nsw i32 %551, 1
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds %struct.ImVec2, ptr %550, i64 %553
  %555 = load float, ptr %44, align 4, !tbaa !13
  %556 = fadd float %555, 1.000000e+00
  %557 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %554, float noundef %556)
  store <2 x float> %557, ptr %54, align 4
  %558 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %549, ptr noundef nonnull align 4 dereferenceable(8) %54)
  store <2 x float> %558, ptr %53, align 4
  %559 = load ptr, ptr %21, align 8, !tbaa !5
  %560 = load i32, ptr %9, align 4, !tbaa !9
  %561 = sub nsw i32 %560, 1
  %562 = mul nsw i32 %561, 4
  %563 = add nsw i32 %562, 0
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds %struct.ImVec2, ptr %559, i64 %564
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %565, ptr align 4 %53, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %566 = load ptr, ptr %8, align 8, !tbaa !5
  %567 = load i32, ptr %9, align 4, !tbaa !9
  %568 = sub nsw i32 %567, 1
  %569 = sext i32 %568 to i64
  %570 = getelementptr inbounds %struct.ImVec2, ptr %566, i64 %569
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %571 = load ptr, ptr %20, align 8, !tbaa !5
  %572 = load i32, ptr %9, align 4, !tbaa !9
  %573 = sub nsw i32 %572, 1
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds %struct.ImVec2, ptr %571, i64 %574
  %576 = load float, ptr %44, align 4, !tbaa !13
  %577 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %575, float noundef %576)
  store <2 x float> %577, ptr %56, align 4
  %578 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %570, ptr noundef nonnull align 4 dereferenceable(8) %56)
  store <2 x float> %578, ptr %55, align 4
  %579 = load ptr, ptr %21, align 8, !tbaa !5
  %580 = load i32, ptr %9, align 4, !tbaa !9
  %581 = sub nsw i32 %580, 1
  %582 = mul nsw i32 %581, 4
  %583 = add nsw i32 %582, 1
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds %struct.ImVec2, ptr %579, i64 %584
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %585, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %586 = load ptr, ptr %8, align 8, !tbaa !5
  %587 = load i32, ptr %9, align 4, !tbaa !9
  %588 = sub nsw i32 %587, 1
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds %struct.ImVec2, ptr %586, i64 %589
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %591 = load ptr, ptr %20, align 8, !tbaa !5
  %592 = load i32, ptr %9, align 4, !tbaa !9
  %593 = sub nsw i32 %592, 1
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds %struct.ImVec2, ptr %591, i64 %594
  %596 = load float, ptr %44, align 4, !tbaa !13
  %597 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %595, float noundef %596)
  store <2 x float> %597, ptr %58, align 4
  %598 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %590, ptr noundef nonnull align 4 dereferenceable(8) %58)
  store <2 x float> %598, ptr %57, align 4
  %599 = load ptr, ptr %21, align 8, !tbaa !5
  %600 = load i32, ptr %9, align 4, !tbaa !9
  %601 = sub nsw i32 %600, 1
  %602 = mul nsw i32 %601, 4
  %603 = add nsw i32 %602, 2
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds %struct.ImVec2, ptr %599, i64 %604
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %605, ptr align 4 %57, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %606 = load ptr, ptr %8, align 8, !tbaa !5
  %607 = load i32, ptr %9, align 4, !tbaa !9
  %608 = sub nsw i32 %607, 1
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds %struct.ImVec2, ptr %606, i64 %609
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %611 = load ptr, ptr %20, align 8, !tbaa !5
  %612 = load i32, ptr %9, align 4, !tbaa !9
  %613 = sub nsw i32 %612, 1
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds %struct.ImVec2, ptr %611, i64 %614
  %616 = load float, ptr %44, align 4, !tbaa !13
  %617 = fadd float %616, 1.000000e+00
  %618 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %615, float noundef %617)
  store <2 x float> %618, ptr %60, align 4
  %619 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %610, ptr noundef nonnull align 4 dereferenceable(8) %60)
  store <2 x float> %619, ptr %59, align 4
  %620 = load ptr, ptr %21, align 8, !tbaa !5
  %621 = load i32, ptr %9, align 4, !tbaa !9
  %622 = sub nsw i32 %621, 1
  %623 = mul nsw i32 %622, 4
  %624 = add nsw i32 %623, 3
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds %struct.ImVec2, ptr %620, i64 %625
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %626, ptr align 4 %59, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br label %627

627:                                              ; preds = %506, %500
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  %628 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %629 = load i32, ptr %628, align 8, !tbaa !33
  store i32 %629, ptr %61, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  store i32 0, ptr %62, align 4, !tbaa !9
  br label %630

630:                                              ; preds = %851, %627
  %631 = load i32, ptr %62, align 4, !tbaa !9
  %632 = load i32, ptr %14, align 4, !tbaa !9
  %633 = icmp slt i32 %631, %632
  br i1 %633, label %635, label %634

634:                                              ; preds = %630
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  br label %854

635:                                              ; preds = %630
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %636 = load i32, ptr %62, align 4, !tbaa !9
  %637 = add nsw i32 %636, 1
  %638 = load i32, ptr %9, align 4, !tbaa !9
  %639 = icmp eq i32 %637, %638
  br i1 %639, label %640, label %641

640:                                              ; preds = %635
  br label %644

641:                                              ; preds = %635
  %642 = load i32, ptr %62, align 4, !tbaa !9
  %643 = add nsw i32 %642, 1
  br label %644

644:                                              ; preds = %641, %640
  %645 = phi i32 [ 0, %640 ], [ %643, %641 ]
  store i32 %645, ptr %63, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  %646 = load i32, ptr %62, align 4, !tbaa !9
  %647 = add nsw i32 %646, 1
  %648 = load i32, ptr %9, align 4, !tbaa !9
  %649 = icmp eq i32 %647, %648
  br i1 %649, label %650, label %653

650:                                              ; preds = %644
  %651 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %652 = load i32, ptr %651, align 8, !tbaa !33
  br label %656

653:                                              ; preds = %644
  %654 = load i32, ptr %61, align 4, !tbaa !9
  %655 = add i32 %654, 4
  br label %656

656:                                              ; preds = %653, %650
  %657 = phi i32 [ %652, %650 ], [ %655, %653 ]
  store i32 %657, ptr %64, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #8
  %658 = load ptr, ptr %20, align 8, !tbaa !5
  %659 = load i32, ptr %62, align 4, !tbaa !9
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds %struct.ImVec2, ptr %658, i64 %660
  %662 = load ptr, ptr %20, align 8, !tbaa !5
  %663 = load i32, ptr %63, align 4, !tbaa !9
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds %struct.ImVec2, ptr %662, i64 %664
  %666 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %661, ptr noundef nonnull align 4 dereferenceable(8) %665)
  store <2 x float> %666, ptr %66, align 4
  %667 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %66, float noundef 5.000000e-01)
  store <2 x float> %667, ptr %65, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %668 = getelementptr inbounds %struct.ImVec2, ptr %65, i32 0, i32 0
  %669 = load float, ptr %668, align 4, !tbaa !30
  %670 = getelementptr inbounds %struct.ImVec2, ptr %65, i32 0, i32 0
  %671 = load float, ptr %670, align 4, !tbaa !30
  %672 = getelementptr inbounds %struct.ImVec2, ptr %65, i32 0, i32 1
  %673 = load float, ptr %672, align 4, !tbaa !28
  %674 = getelementptr inbounds %struct.ImVec2, ptr %65, i32 0, i32 1
  %675 = load float, ptr %674, align 4, !tbaa !28
  %676 = fmul float %673, %675
  %677 = call float @llvm.fmuladd.f32(float %669, float %671, float %676)
  store float %677, ptr %67, align 4, !tbaa !13
  %678 = load float, ptr %67, align 4, !tbaa !13
  %679 = fcmp ogt float %678, 0x3EB0C6F7A0000000
  br i1 %679, label %680, label %689

680:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %681 = load float, ptr %67, align 4, !tbaa !13
  %682 = fdiv float 1.000000e+00, %681
  store float %682, ptr %68, align 4, !tbaa !13
  %683 = load float, ptr %68, align 4, !tbaa !13
  %684 = fcmp ogt float %683, 1.000000e+02
  br i1 %684, label %685, label %686

685:                                              ; preds = %680
  store float 1.000000e+02, ptr %68, align 4, !tbaa !13
  br label %686

686:                                              ; preds = %685, %680
  %687 = load float, ptr %68, align 4, !tbaa !13
  %688 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %65, float noundef %687)
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %689

689:                                              ; preds = %686, %656
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  %690 = load float, ptr %44, align 4, !tbaa !13
  %691 = fadd float %690, 1.000000e+00
  %692 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %65, float noundef %691)
  store <2 x float> %692, ptr %69, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #8
  %693 = load float, ptr %44, align 4, !tbaa !13
  %694 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %65, float noundef %693)
  store <2 x float> %694, ptr %70, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %695 = load ptr, ptr %8, align 8, !tbaa !5
  %696 = load i32, ptr %63, align 4, !tbaa !9
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds %struct.ImVec2, ptr %695, i64 %697
  %699 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %698, ptr noundef nonnull align 4 dereferenceable(8) %69)
  store <2 x float> %699, ptr %71, align 4
  %700 = load ptr, ptr %21, align 8, !tbaa !5
  %701 = load i32, ptr %63, align 4, !tbaa !9
  %702 = mul nsw i32 %701, 4
  %703 = add nsw i32 %702, 0
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds %struct.ImVec2, ptr %700, i64 %704
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %705, ptr align 4 %71, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %706 = load ptr, ptr %8, align 8, !tbaa !5
  %707 = load i32, ptr %63, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds %struct.ImVec2, ptr %706, i64 %708
  %710 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %709, ptr noundef nonnull align 4 dereferenceable(8) %70)
  store <2 x float> %710, ptr %72, align 4
  %711 = load ptr, ptr %21, align 8, !tbaa !5
  %712 = load i32, ptr %63, align 4, !tbaa !9
  %713 = mul nsw i32 %712, 4
  %714 = add nsw i32 %713, 1
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds %struct.ImVec2, ptr %711, i64 %715
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %716, ptr align 4 %72, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %717 = load ptr, ptr %8, align 8, !tbaa !5
  %718 = load i32, ptr %63, align 4, !tbaa !9
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds %struct.ImVec2, ptr %717, i64 %719
  %721 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %720, ptr noundef nonnull align 4 dereferenceable(8) %70)
  store <2 x float> %721, ptr %73, align 4
  %722 = load ptr, ptr %21, align 8, !tbaa !5
  %723 = load i32, ptr %63, align 4, !tbaa !9
  %724 = mul nsw i32 %723, 4
  %725 = add nsw i32 %724, 2
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds %struct.ImVec2, ptr %722, i64 %726
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %727, ptr align 4 %73, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %728 = load ptr, ptr %8, align 8, !tbaa !5
  %729 = load i32, ptr %63, align 4, !tbaa !9
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds %struct.ImVec2, ptr %728, i64 %730
  %732 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %731, ptr noundef nonnull align 4 dereferenceable(8) %69)
  store <2 x float> %732, ptr %74, align 4
  %733 = load ptr, ptr %21, align 8, !tbaa !5
  %734 = load i32, ptr %63, align 4, !tbaa !9
  %735 = mul nsw i32 %734, 4
  %736 = add nsw i32 %735, 3
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds %struct.ImVec2, ptr %733, i64 %737
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %738, ptr align 4 %74, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  %739 = load i32, ptr %64, align 4, !tbaa !9
  %740 = add i32 %739, 1
  %741 = trunc i32 %740 to i16
  %742 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %743 = load ptr, ptr %742, align 8, !tbaa !34
  %744 = getelementptr inbounds i16, ptr %743, i64 0
  store i16 %741, ptr %744, align 2, !tbaa !35
  %745 = load i32, ptr %61, align 4, !tbaa !9
  %746 = add i32 %745, 1
  %747 = trunc i32 %746 to i16
  %748 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %749 = load ptr, ptr %748, align 8, !tbaa !34
  %750 = getelementptr inbounds i16, ptr %749, i64 1
  store i16 %747, ptr %750, align 2, !tbaa !35
  %751 = load i32, ptr %61, align 4, !tbaa !9
  %752 = add i32 %751, 2
  %753 = trunc i32 %752 to i16
  %754 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %755 = load ptr, ptr %754, align 8, !tbaa !34
  %756 = getelementptr inbounds i16, ptr %755, i64 2
  store i16 %753, ptr %756, align 2, !tbaa !35
  %757 = load i32, ptr %61, align 4, !tbaa !9
  %758 = add i32 %757, 2
  %759 = trunc i32 %758 to i16
  %760 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %761 = load ptr, ptr %760, align 8, !tbaa !34
  %762 = getelementptr inbounds i16, ptr %761, i64 3
  store i16 %759, ptr %762, align 2, !tbaa !35
  %763 = load i32, ptr %64, align 4, !tbaa !9
  %764 = add i32 %763, 2
  %765 = trunc i32 %764 to i16
  %766 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %767 = load ptr, ptr %766, align 8, !tbaa !34
  %768 = getelementptr inbounds i16, ptr %767, i64 4
  store i16 %765, ptr %768, align 2, !tbaa !35
  %769 = load i32, ptr %64, align 4, !tbaa !9
  %770 = add i32 %769, 1
  %771 = trunc i32 %770 to i16
  %772 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %773 = load ptr, ptr %772, align 8, !tbaa !34
  %774 = getelementptr inbounds i16, ptr %773, i64 5
  store i16 %771, ptr %774, align 2, !tbaa !35
  %775 = load i32, ptr %64, align 4, !tbaa !9
  %776 = add i32 %775, 1
  %777 = trunc i32 %776 to i16
  %778 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %779 = load ptr, ptr %778, align 8, !tbaa !34
  %780 = getelementptr inbounds i16, ptr %779, i64 6
  store i16 %777, ptr %780, align 2, !tbaa !35
  %781 = load i32, ptr %61, align 4, !tbaa !9
  %782 = add i32 %781, 1
  %783 = trunc i32 %782 to i16
  %784 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %785 = load ptr, ptr %784, align 8, !tbaa !34
  %786 = getelementptr inbounds i16, ptr %785, i64 7
  store i16 %783, ptr %786, align 2, !tbaa !35
  %787 = load i32, ptr %61, align 4, !tbaa !9
  %788 = add i32 %787, 0
  %789 = trunc i32 %788 to i16
  %790 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %791 = load ptr, ptr %790, align 8, !tbaa !34
  %792 = getelementptr inbounds i16, ptr %791, i64 8
  store i16 %789, ptr %792, align 2, !tbaa !35
  %793 = load i32, ptr %61, align 4, !tbaa !9
  %794 = add i32 %793, 0
  %795 = trunc i32 %794 to i16
  %796 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %797 = load ptr, ptr %796, align 8, !tbaa !34
  %798 = getelementptr inbounds i16, ptr %797, i64 9
  store i16 %795, ptr %798, align 2, !tbaa !35
  %799 = load i32, ptr %64, align 4, !tbaa !9
  %800 = add i32 %799, 0
  %801 = trunc i32 %800 to i16
  %802 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %803 = load ptr, ptr %802, align 8, !tbaa !34
  %804 = getelementptr inbounds i16, ptr %803, i64 10
  store i16 %801, ptr %804, align 2, !tbaa !35
  %805 = load i32, ptr %64, align 4, !tbaa !9
  %806 = add i32 %805, 1
  %807 = trunc i32 %806 to i16
  %808 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %809 = load ptr, ptr %808, align 8, !tbaa !34
  %810 = getelementptr inbounds i16, ptr %809, i64 11
  store i16 %807, ptr %810, align 2, !tbaa !35
  %811 = load i32, ptr %64, align 4, !tbaa !9
  %812 = add i32 %811, 2
  %813 = trunc i32 %812 to i16
  %814 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %815 = load ptr, ptr %814, align 8, !tbaa !34
  %816 = getelementptr inbounds i16, ptr %815, i64 12
  store i16 %813, ptr %816, align 2, !tbaa !35
  %817 = load i32, ptr %61, align 4, !tbaa !9
  %818 = add i32 %817, 2
  %819 = trunc i32 %818 to i16
  %820 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %821 = load ptr, ptr %820, align 8, !tbaa !34
  %822 = getelementptr inbounds i16, ptr %821, i64 13
  store i16 %819, ptr %822, align 2, !tbaa !35
  %823 = load i32, ptr %61, align 4, !tbaa !9
  %824 = add i32 %823, 3
  %825 = trunc i32 %824 to i16
  %826 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %827 = load ptr, ptr %826, align 8, !tbaa !34
  %828 = getelementptr inbounds i16, ptr %827, i64 14
  store i16 %825, ptr %828, align 2, !tbaa !35
  %829 = load i32, ptr %61, align 4, !tbaa !9
  %830 = add i32 %829, 3
  %831 = trunc i32 %830 to i16
  %832 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %833 = load ptr, ptr %832, align 8, !tbaa !34
  %834 = getelementptr inbounds i16, ptr %833, i64 15
  store i16 %831, ptr %834, align 2, !tbaa !35
  %835 = load i32, ptr %64, align 4, !tbaa !9
  %836 = add i32 %835, 3
  %837 = trunc i32 %836 to i16
  %838 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %839 = load ptr, ptr %838, align 8, !tbaa !34
  %840 = getelementptr inbounds i16, ptr %839, i64 16
  store i16 %837, ptr %840, align 2, !tbaa !35
  %841 = load i32, ptr %64, align 4, !tbaa !9
  %842 = add i32 %841, 2
  %843 = trunc i32 %842 to i16
  %844 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %845 = load ptr, ptr %844, align 8, !tbaa !34
  %846 = getelementptr inbounds i16, ptr %845, i64 17
  store i16 %843, ptr %846, align 2, !tbaa !35
  %847 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %848 = load ptr, ptr %847, align 8, !tbaa !34
  %849 = getelementptr inbounds i16, ptr %848, i64 18
  store ptr %849, ptr %847, align 8, !tbaa !34
  %850 = load i32, ptr %64, align 4, !tbaa !9
  store i32 %850, ptr %61, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  br label %851

851:                                              ; preds = %689
  %852 = load i32, ptr %62, align 4, !tbaa !9
  %853 = add nsw i32 %852, 1
  store i32 %853, ptr %62, align 4, !tbaa !9
  br label %630, !llvm.loop !42

854:                                              ; preds = %634
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  store i32 0, ptr %75, align 4, !tbaa !9
  br label %855

855:                                              ; preds = %940, %854
  %856 = load i32, ptr %75, align 4, !tbaa !9
  %857 = load i32, ptr %9, align 4, !tbaa !9
  %858 = icmp slt i32 %856, %857
  br i1 %858, label %860, label %859

859:                                              ; preds = %855
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br label %943

860:                                              ; preds = %855
  %861 = load ptr, ptr %21, align 8, !tbaa !5
  %862 = load i32, ptr %75, align 4, !tbaa !9
  %863 = mul nsw i32 %862, 4
  %864 = add nsw i32 %863, 0
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds %struct.ImVec2, ptr %861, i64 %865
  %867 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %868 = load ptr, ptr %867, align 8, !tbaa !38
  %869 = getelementptr inbounds %struct.ImDrawVert, ptr %868, i64 0
  %870 = getelementptr inbounds %struct.ImDrawVert, ptr %869, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %870, ptr align 4 %866, i64 8, i1 false), !tbaa.struct !24
  %871 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %872 = load ptr, ptr %871, align 8, !tbaa !38
  %873 = getelementptr inbounds %struct.ImDrawVert, ptr %872, i64 0
  %874 = getelementptr inbounds %struct.ImDrawVert, ptr %873, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %874, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %875 = load i32, ptr %17, align 4, !tbaa !9
  %876 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %877 = load ptr, ptr %876, align 8, !tbaa !38
  %878 = getelementptr inbounds %struct.ImDrawVert, ptr %877, i64 0
  %879 = getelementptr inbounds %struct.ImDrawVert, ptr %878, i32 0, i32 2
  store i32 %875, ptr %879, align 4, !tbaa !39
  %880 = load ptr, ptr %21, align 8, !tbaa !5
  %881 = load i32, ptr %75, align 4, !tbaa !9
  %882 = mul nsw i32 %881, 4
  %883 = add nsw i32 %882, 1
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.ImVec2, ptr %880, i64 %884
  %886 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %887 = load ptr, ptr %886, align 8, !tbaa !38
  %888 = getelementptr inbounds %struct.ImDrawVert, ptr %887, i64 1
  %889 = getelementptr inbounds %struct.ImDrawVert, ptr %888, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %889, ptr align 4 %885, i64 8, i1 false), !tbaa.struct !24
  %890 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %891 = load ptr, ptr %890, align 8, !tbaa !38
  %892 = getelementptr inbounds %struct.ImDrawVert, ptr %891, i64 1
  %893 = getelementptr inbounds %struct.ImDrawVert, ptr %892, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %893, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %894 = load i32, ptr %10, align 4, !tbaa !9
  %895 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %896 = load ptr, ptr %895, align 8, !tbaa !38
  %897 = getelementptr inbounds %struct.ImDrawVert, ptr %896, i64 1
  %898 = getelementptr inbounds %struct.ImDrawVert, ptr %897, i32 0, i32 2
  store i32 %894, ptr %898, align 4, !tbaa !39
  %899 = load ptr, ptr %21, align 8, !tbaa !5
  %900 = load i32, ptr %75, align 4, !tbaa !9
  %901 = mul nsw i32 %900, 4
  %902 = add nsw i32 %901, 2
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds %struct.ImVec2, ptr %899, i64 %903
  %905 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %906 = load ptr, ptr %905, align 8, !tbaa !38
  %907 = getelementptr inbounds %struct.ImDrawVert, ptr %906, i64 2
  %908 = getelementptr inbounds %struct.ImDrawVert, ptr %907, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %908, ptr align 4 %904, i64 8, i1 false), !tbaa.struct !24
  %909 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %910 = load ptr, ptr %909, align 8, !tbaa !38
  %911 = getelementptr inbounds %struct.ImDrawVert, ptr %910, i64 2
  %912 = getelementptr inbounds %struct.ImDrawVert, ptr %911, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %912, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %913 = load i32, ptr %10, align 4, !tbaa !9
  %914 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %915 = load ptr, ptr %914, align 8, !tbaa !38
  %916 = getelementptr inbounds %struct.ImDrawVert, ptr %915, i64 2
  %917 = getelementptr inbounds %struct.ImDrawVert, ptr %916, i32 0, i32 2
  store i32 %913, ptr %917, align 4, !tbaa !39
  %918 = load ptr, ptr %21, align 8, !tbaa !5
  %919 = load i32, ptr %75, align 4, !tbaa !9
  %920 = mul nsw i32 %919, 4
  %921 = add nsw i32 %920, 3
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds %struct.ImVec2, ptr %918, i64 %922
  %924 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %925 = load ptr, ptr %924, align 8, !tbaa !38
  %926 = getelementptr inbounds %struct.ImDrawVert, ptr %925, i64 3
  %927 = getelementptr inbounds %struct.ImDrawVert, ptr %926, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %927, ptr align 4 %923, i64 8, i1 false), !tbaa.struct !24
  %928 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %929 = load ptr, ptr %928, align 8, !tbaa !38
  %930 = getelementptr inbounds %struct.ImDrawVert, ptr %929, i64 3
  %931 = getelementptr inbounds %struct.ImDrawVert, ptr %930, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %931, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %932 = load i32, ptr %17, align 4, !tbaa !9
  %933 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %934 = load ptr, ptr %933, align 8, !tbaa !38
  %935 = getelementptr inbounds %struct.ImDrawVert, ptr %934, i64 3
  %936 = getelementptr inbounds %struct.ImDrawVert, ptr %935, i32 0, i32 2
  store i32 %932, ptr %936, align 4, !tbaa !39
  %937 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %938 = load ptr, ptr %937, align 8, !tbaa !38
  %939 = getelementptr inbounds %struct.ImDrawVert, ptr %938, i64 4
  store ptr %939, ptr %937, align 8, !tbaa !38
  br label %940

940:                                              ; preds = %860
  %941 = load i32, ptr %75, align 4, !tbaa !9
  %942 = add nsw i32 %941, 1
  store i32 %942, ptr %75, align 4, !tbaa !9
  br label %855, !llvm.loop !43

943:                                              ; preds = %859
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  br label %944

944:                                              ; preds = %943, %499
  %945 = load i32, ptr %19, align 4, !tbaa !9
  %946 = trunc i32 %945 to i16
  %947 = zext i16 %946 to i32
  %948 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %949 = load i32, ptr %948, align 8, !tbaa !33
  %950 = add i32 %949, %947
  store i32 %950, ptr %948, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %1166

951:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %952 = load i32, ptr %14, align 4, !tbaa !9
  %953 = mul nsw i32 %952, 6
  store i32 %953, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %954 = load i32, ptr %14, align 4, !tbaa !9
  %955 = mul nsw i32 %954, 4
  store i32 %955, ptr %77, align 4, !tbaa !9
  %956 = load i32, ptr %76, align 4, !tbaa !9
  %957 = load i32, ptr %77, align 4, !tbaa !9
  call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %86, i32 noundef %956, i32 noundef %957)
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  store i32 0, ptr %78, align 4, !tbaa !9
  br label %958

958:                                              ; preds = %1162, %951
  %959 = load i32, ptr %78, align 4, !tbaa !9
  %960 = load i32, ptr %14, align 4, !tbaa !9
  %961 = icmp slt i32 %959, %960
  br i1 %961, label %963, label %962

962:                                              ; preds = %958
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  br label %1165

963:                                              ; preds = %958
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %964 = load i32, ptr %78, align 4, !tbaa !9
  %965 = add nsw i32 %964, 1
  %966 = load i32, ptr %9, align 4, !tbaa !9
  %967 = icmp eq i32 %965, %966
  br i1 %967, label %968, label %969

968:                                              ; preds = %963
  br label %972

969:                                              ; preds = %963
  %970 = load i32, ptr %78, align 4, !tbaa !9
  %971 = add nsw i32 %970, 1
  br label %972

972:                                              ; preds = %969, %968
  %973 = phi i32 [ 0, %968 ], [ %971, %969 ]
  store i32 %973, ptr %79, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #8
  %974 = load ptr, ptr %8, align 8, !tbaa !5
  %975 = load i32, ptr %78, align 4, !tbaa !9
  %976 = sext i32 %975 to i64
  %977 = getelementptr inbounds %struct.ImVec2, ptr %974, i64 %976
  store ptr %977, ptr %80, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #8
  %978 = load ptr, ptr %8, align 8, !tbaa !5
  %979 = load i32, ptr %79, align 4, !tbaa !9
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds %struct.ImVec2, ptr %978, i64 %980
  store ptr %981, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #8
  %982 = load ptr, ptr %81, align 8, !tbaa !5
  %983 = load ptr, ptr %80, align 8, !tbaa !5
  %984 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %982, ptr noundef nonnull align 4 dereferenceable(8) %983)
  store <2 x float> %984, ptr %82, align 4
  %985 = call noundef float @_ZL11ImInvLengthRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %82, float noundef 1.000000e+00)
  %986 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %82, float noundef %985)
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %987 = getelementptr inbounds %struct.ImVec2, ptr %82, i32 0, i32 0
  %988 = load float, ptr %987, align 4, !tbaa !30
  %989 = load float, ptr %12, align 4, !tbaa !13
  %990 = fmul float %989, 5.000000e-01
  %991 = fmul float %988, %990
  store float %991, ptr %83, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %992 = getelementptr inbounds %struct.ImVec2, ptr %82, i32 0, i32 1
  %993 = load float, ptr %992, align 4, !tbaa !28
  %994 = load float, ptr %12, align 4, !tbaa !13
  %995 = fmul float %994, 5.000000e-01
  %996 = fmul float %993, %995
  store float %996, ptr %84, align 4, !tbaa !13
  %997 = load ptr, ptr %80, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.ImVec2, ptr %997, i32 0, i32 0
  %999 = load float, ptr %998, align 4, !tbaa !30
  %1000 = load float, ptr %84, align 4, !tbaa !13
  %1001 = fadd float %999, %1000
  %1002 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1003 = load ptr, ptr %1002, align 8, !tbaa !38
  %1004 = getelementptr inbounds %struct.ImDrawVert, ptr %1003, i64 0
  %1005 = getelementptr inbounds %struct.ImDrawVert, ptr %1004, i32 0, i32 0
  %1006 = getelementptr inbounds %struct.ImVec2, ptr %1005, i32 0, i32 0
  store float %1001, ptr %1006, align 4, !tbaa !44
  %1007 = load ptr, ptr %80, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.ImVec2, ptr %1007, i32 0, i32 1
  %1009 = load float, ptr %1008, align 4, !tbaa !28
  %1010 = load float, ptr %83, align 4, !tbaa !13
  %1011 = fsub float %1009, %1010
  %1012 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1013 = load ptr, ptr %1012, align 8, !tbaa !38
  %1014 = getelementptr inbounds %struct.ImDrawVert, ptr %1013, i64 0
  %1015 = getelementptr inbounds %struct.ImDrawVert, ptr %1014, i32 0, i32 0
  %1016 = getelementptr inbounds %struct.ImVec2, ptr %1015, i32 0, i32 1
  store float %1011, ptr %1016, align 4, !tbaa !45
  %1017 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1018 = load ptr, ptr %1017, align 8, !tbaa !38
  %1019 = getelementptr inbounds %struct.ImDrawVert, ptr %1018, i64 0
  %1020 = getelementptr inbounds %struct.ImDrawVert, ptr %1019, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1020, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %1021 = load i32, ptr %10, align 4, !tbaa !9
  %1022 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1023 = load ptr, ptr %1022, align 8, !tbaa !38
  %1024 = getelementptr inbounds %struct.ImDrawVert, ptr %1023, i64 0
  %1025 = getelementptr inbounds %struct.ImDrawVert, ptr %1024, i32 0, i32 2
  store i32 %1021, ptr %1025, align 4, !tbaa !39
  %1026 = load ptr, ptr %81, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.ImVec2, ptr %1026, i32 0, i32 0
  %1028 = load float, ptr %1027, align 4, !tbaa !30
  %1029 = load float, ptr %84, align 4, !tbaa !13
  %1030 = fadd float %1028, %1029
  %1031 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1032 = load ptr, ptr %1031, align 8, !tbaa !38
  %1033 = getelementptr inbounds %struct.ImDrawVert, ptr %1032, i64 1
  %1034 = getelementptr inbounds %struct.ImDrawVert, ptr %1033, i32 0, i32 0
  %1035 = getelementptr inbounds %struct.ImVec2, ptr %1034, i32 0, i32 0
  store float %1030, ptr %1035, align 4, !tbaa !44
  %1036 = load ptr, ptr %81, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.ImVec2, ptr %1036, i32 0, i32 1
  %1038 = load float, ptr %1037, align 4, !tbaa !28
  %1039 = load float, ptr %83, align 4, !tbaa !13
  %1040 = fsub float %1038, %1039
  %1041 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1042 = load ptr, ptr %1041, align 8, !tbaa !38
  %1043 = getelementptr inbounds %struct.ImDrawVert, ptr %1042, i64 1
  %1044 = getelementptr inbounds %struct.ImDrawVert, ptr %1043, i32 0, i32 0
  %1045 = getelementptr inbounds %struct.ImVec2, ptr %1044, i32 0, i32 1
  store float %1040, ptr %1045, align 4, !tbaa !45
  %1046 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1047 = load ptr, ptr %1046, align 8, !tbaa !38
  %1048 = getelementptr inbounds %struct.ImDrawVert, ptr %1047, i64 1
  %1049 = getelementptr inbounds %struct.ImDrawVert, ptr %1048, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1049, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %1050 = load i32, ptr %10, align 4, !tbaa !9
  %1051 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1052 = load ptr, ptr %1051, align 8, !tbaa !38
  %1053 = getelementptr inbounds %struct.ImDrawVert, ptr %1052, i64 1
  %1054 = getelementptr inbounds %struct.ImDrawVert, ptr %1053, i32 0, i32 2
  store i32 %1050, ptr %1054, align 4, !tbaa !39
  %1055 = load ptr, ptr %81, align 8, !tbaa !5
  %1056 = getelementptr inbounds %struct.ImVec2, ptr %1055, i32 0, i32 0
  %1057 = load float, ptr %1056, align 4, !tbaa !30
  %1058 = load float, ptr %84, align 4, !tbaa !13
  %1059 = fsub float %1057, %1058
  %1060 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1061 = load ptr, ptr %1060, align 8, !tbaa !38
  %1062 = getelementptr inbounds %struct.ImDrawVert, ptr %1061, i64 2
  %1063 = getelementptr inbounds %struct.ImDrawVert, ptr %1062, i32 0, i32 0
  %1064 = getelementptr inbounds %struct.ImVec2, ptr %1063, i32 0, i32 0
  store float %1059, ptr %1064, align 4, !tbaa !44
  %1065 = load ptr, ptr %81, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.ImVec2, ptr %1065, i32 0, i32 1
  %1067 = load float, ptr %1066, align 4, !tbaa !28
  %1068 = load float, ptr %83, align 4, !tbaa !13
  %1069 = fadd float %1067, %1068
  %1070 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1071 = load ptr, ptr %1070, align 8, !tbaa !38
  %1072 = getelementptr inbounds %struct.ImDrawVert, ptr %1071, i64 2
  %1073 = getelementptr inbounds %struct.ImDrawVert, ptr %1072, i32 0, i32 0
  %1074 = getelementptr inbounds %struct.ImVec2, ptr %1073, i32 0, i32 1
  store float %1069, ptr %1074, align 4, !tbaa !45
  %1075 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1076 = load ptr, ptr %1075, align 8, !tbaa !38
  %1077 = getelementptr inbounds %struct.ImDrawVert, ptr %1076, i64 2
  %1078 = getelementptr inbounds %struct.ImDrawVert, ptr %1077, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1078, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %1079 = load i32, ptr %10, align 4, !tbaa !9
  %1080 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1081 = load ptr, ptr %1080, align 8, !tbaa !38
  %1082 = getelementptr inbounds %struct.ImDrawVert, ptr %1081, i64 2
  %1083 = getelementptr inbounds %struct.ImDrawVert, ptr %1082, i32 0, i32 2
  store i32 %1079, ptr %1083, align 4, !tbaa !39
  %1084 = load ptr, ptr %80, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.ImVec2, ptr %1084, i32 0, i32 0
  %1086 = load float, ptr %1085, align 4, !tbaa !30
  %1087 = load float, ptr %84, align 4, !tbaa !13
  %1088 = fsub float %1086, %1087
  %1089 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1090 = load ptr, ptr %1089, align 8, !tbaa !38
  %1091 = getelementptr inbounds %struct.ImDrawVert, ptr %1090, i64 3
  %1092 = getelementptr inbounds %struct.ImDrawVert, ptr %1091, i32 0, i32 0
  %1093 = getelementptr inbounds %struct.ImVec2, ptr %1092, i32 0, i32 0
  store float %1088, ptr %1093, align 4, !tbaa !44
  %1094 = load ptr, ptr %80, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.ImVec2, ptr %1094, i32 0, i32 1
  %1096 = load float, ptr %1095, align 4, !tbaa !28
  %1097 = load float, ptr %83, align 4, !tbaa !13
  %1098 = fadd float %1096, %1097
  %1099 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1100 = load ptr, ptr %1099, align 8, !tbaa !38
  %1101 = getelementptr inbounds %struct.ImDrawVert, ptr %1100, i64 3
  %1102 = getelementptr inbounds %struct.ImDrawVert, ptr %1101, i32 0, i32 0
  %1103 = getelementptr inbounds %struct.ImVec2, ptr %1102, i32 0, i32 1
  store float %1098, ptr %1103, align 4, !tbaa !45
  %1104 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1105 = load ptr, ptr %1104, align 8, !tbaa !38
  %1106 = getelementptr inbounds %struct.ImDrawVert, ptr %1105, i64 3
  %1107 = getelementptr inbounds %struct.ImDrawVert, ptr %1106, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1107, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !24
  %1108 = load i32, ptr %10, align 4, !tbaa !9
  %1109 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1110 = load ptr, ptr %1109, align 8, !tbaa !38
  %1111 = getelementptr inbounds %struct.ImDrawVert, ptr %1110, i64 3
  %1112 = getelementptr inbounds %struct.ImDrawVert, ptr %1111, i32 0, i32 2
  store i32 %1108, ptr %1112, align 4, !tbaa !39
  %1113 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 7
  %1114 = load ptr, ptr %1113, align 8, !tbaa !38
  %1115 = getelementptr inbounds %struct.ImDrawVert, ptr %1114, i64 4
  store ptr %1115, ptr %1113, align 8, !tbaa !38
  %1116 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1117 = load i32, ptr %1116, align 8, !tbaa !33
  %1118 = trunc i32 %1117 to i16
  %1119 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1120 = load ptr, ptr %1119, align 8, !tbaa !34
  %1121 = getelementptr inbounds i16, ptr %1120, i64 0
  store i16 %1118, ptr %1121, align 2, !tbaa !35
  %1122 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1123 = load i32, ptr %1122, align 8, !tbaa !33
  %1124 = add i32 %1123, 1
  %1125 = trunc i32 %1124 to i16
  %1126 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1127 = load ptr, ptr %1126, align 8, !tbaa !34
  %1128 = getelementptr inbounds i16, ptr %1127, i64 1
  store i16 %1125, ptr %1128, align 2, !tbaa !35
  %1129 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1130 = load i32, ptr %1129, align 8, !tbaa !33
  %1131 = add i32 %1130, 2
  %1132 = trunc i32 %1131 to i16
  %1133 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1134 = load ptr, ptr %1133, align 8, !tbaa !34
  %1135 = getelementptr inbounds i16, ptr %1134, i64 2
  store i16 %1132, ptr %1135, align 2, !tbaa !35
  %1136 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1137 = load i32, ptr %1136, align 8, !tbaa !33
  %1138 = trunc i32 %1137 to i16
  %1139 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1140 = load ptr, ptr %1139, align 8, !tbaa !34
  %1141 = getelementptr inbounds i16, ptr %1140, i64 3
  store i16 %1138, ptr %1141, align 2, !tbaa !35
  %1142 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1143 = load i32, ptr %1142, align 8, !tbaa !33
  %1144 = add i32 %1143, 2
  %1145 = trunc i32 %1144 to i16
  %1146 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1147 = load ptr, ptr %1146, align 8, !tbaa !34
  %1148 = getelementptr inbounds i16, ptr %1147, i64 4
  store i16 %1145, ptr %1148, align 2, !tbaa !35
  %1149 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1150 = load i32, ptr %1149, align 8, !tbaa !33
  %1151 = add i32 %1150, 3
  %1152 = trunc i32 %1151 to i16
  %1153 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1154 = load ptr, ptr %1153, align 8, !tbaa !34
  %1155 = getelementptr inbounds i16, ptr %1154, i64 5
  store i16 %1152, ptr %1155, align 2, !tbaa !35
  %1156 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 8
  %1157 = load ptr, ptr %1156, align 8, !tbaa !34
  %1158 = getelementptr inbounds i16, ptr %1157, i64 6
  store ptr %1158, ptr %1156, align 8, !tbaa !34
  %1159 = getelementptr inbounds %struct.ImDrawList, ptr %86, i32 0, i32 6
  %1160 = load i32, ptr %1159, align 8, !tbaa !33
  %1161 = add i32 %1160, 4
  store i32 %1161, ptr %1159, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  br label %1162

1162:                                             ; preds = %972
  %1163 = load i32, ptr %78, align 4, !tbaa !9
  %1164 = add nsw i32 %1163, 1
  store i32 %1164, ptr %78, align 4, !tbaa !9
  br label %958, !llvm.loop !46

1165:                                             ; preds = %962
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %1166

1166:                                             ; preds = %1165, %944
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %1167

1167:                                             ; preds = %1166, %89
  ret void
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef float @_ZL11ImInvLengthRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) #6

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

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

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

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

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

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


; 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 = alloca %struct.ImVec2, align 8
  %20 = alloca %struct.ImVec2, align 8
  %21 = alloca %struct.ImVec2, align 8
  %22 = alloca %struct.ImVec2, align 8
  %23 = alloca %struct.ImVec2, align 8
  %24 = alloca %struct.ImVec2, align 8
  %25 = alloca %struct.ImVec2, align 8
  %26 = alloca %struct.ImVec2, align 8
  %27 = icmp slt i32 %2, 2
  br i1 %27, label %.loopexit, label %28

28:                                               ; preds = %6
  %29 = getelementptr inbounds i8, ptr %0, i64 56
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  %31 = load i64, ptr %30, align 8
  %32 = add nsw i32 %2, -1
  %spec.select = select i1 %4, i32 %2, i32 %32
  %33 = fcmp ogt float %5, 1.000000e+00
  %34 = getelementptr inbounds i8, ptr %0, i64 48
  %35 = load i32, ptr %34, align 8, !tbaa !18
  %36 = and i32 %35, 1
  %.not = icmp eq i32 %36, 0
  br i1 %.not, label %.lr.ph324, label %.lr.ph

.lr.ph:                                           ; preds = %28
  %37 = and i32 %3, 16777215
  %.v = select i1 %33, i32 18, i32 12
  %38 = mul nsw i32 %.v, %spec.select
  %39 = shl nsw i32 %2, 2
  %40 = mul nuw nsw i32 %2, 3
  %41 = select i1 %33, i32 %39, i32 %40
  tail call void @_ZN10ImDrawList11PrimReserveEii(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %38, i32 noundef %41)
  %42 = select i1 %33, i32 5, i32 3
  %43 = mul nuw nsw i32 %42, %2
  %44 = zext nneg i32 %43 to i64
  %45 = shl nuw nsw i64 %44, 3
  %46 = alloca i8, i64 %45, align 16
  %47 = zext nneg i32 %2 to i64
  %48 = getelementptr %struct.ImVec2, ptr %46, i64 %47
  %49 = getelementptr inbounds i8, ptr %7, i64 4
  %wide.trip.count = zext nneg i32 %spec.select to i64
  br label %50

._crit_edge:                                      ; preds = %50
  br i1 %4, label %64, label %.thread

50:                                               ; preds = %.lr.ph, %50
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %50 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %51 = icmp eq i64 %indvars.iv.next, %47
  %52 = and i64 %indvars.iv.next, 4294967295
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %53 = select i1 %51, i64 0, i64 %52
  %54 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %53
  %55 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv
  %56 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %54, ptr noundef nonnull align 4 dereferenceable(8) %55)
  store <2 x float> %56, ptr %7, align 8
  %57 = call noundef float @_ZL11ImInvLengthRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %7, float noundef 1.000000e+00)
  %58 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %7, float noundef %57)
  %59 = load float, ptr %49, align 4, !tbaa !19
  %60 = getelementptr inbounds %struct.ImVec2, ptr %46, i64 %indvars.iv
  store float %59, ptr %60, align 8, !tbaa !22
  %61 = load float, ptr %7, align 8, !tbaa !22
  %62 = fneg float %61
  %63 = getelementptr inbounds i8, ptr %60, i64 4
  store float %62, ptr %63, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %50, !llvm.loop !23

64:                                               ; preds = %._crit_edge
  br i1 %33, label %166, label %.lr.ph313

.thread:                                          ; preds = %._crit_edge
  %65 = getelementptr i8, ptr %48, i64 -16
  %66 = getelementptr i8, ptr %48, i64 -8
  %67 = load i64, ptr %65, align 8
  store i64 %67, ptr %66, align 8
  br i1 %33, label %.thread305, label %.thread304

.thread304:                                       ; preds = %.thread
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %68 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %46, float noundef 1.000000e+00)
  store <2 x float> %68, ptr %8, align 8
  %69 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %8)
  store <2 x float> %69, ptr %48, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %70 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %46, float noundef 1.000000e+00)
  store <2 x float> %70, ptr %9, align 8
  %71 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %9)
  %72 = getelementptr inbounds i8, ptr %48, i64 8
  store <2 x float> %71, ptr %72, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  %73 = zext nneg i32 %32 to i64
  %74 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %73
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %75 = getelementptr inbounds %struct.ImVec2, ptr %46, i64 %73
  %76 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %75, float noundef 1.000000e+00)
  store <2 x float> %76, ptr %10, align 8
  %77 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %74, ptr noundef nonnull align 4 dereferenceable(8) %10)
  %78 = shl nuw nsw i32 %32, 1
  %79 = zext nneg i32 %78 to i64
  %80 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %79
  store <2 x float> %77, ptr %80, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %81 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %75, float noundef 1.000000e+00)
  store <2 x float> %81, ptr %11, align 8
  %82 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %74, ptr noundef nonnull align 4 dereferenceable(8) %11)
  %83 = or disjoint i32 %78, 1
  %84 = zext nneg i32 %83 to i64
  %85 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %84
  store <2 x float> %82, ptr %85, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %.lr.ph313

.lr.ph313:                                        ; preds = %.thread304, %64
  %86 = getelementptr inbounds i8, ptr %0, i64 72
  %87 = load i32, ptr %86, align 8, !tbaa !25
  %88 = getelementptr inbounds i8, ptr %0, i64 88
  %wide.trip.count330 = zext nneg i32 %spec.select to i64
  br label %90

.lr.ph315:                                        ; preds = %111
  %89 = getelementptr inbounds i8, ptr %0, i64 80
  %smax = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count335 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %89, align 8, !tbaa !26
  br label %141

90:                                               ; preds = %.lr.ph313, %111
  %indvars.iv327 = phi i64 [ 0, %.lr.ph313 ], [ %indvars.iv.next328, %111 ]
  %.0279311 = phi i32 [ %87, %.lr.ph313 ], [ %96, %111 ]
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %91 = icmp eq i64 %indvars.iv.next328, %47
  %92 = trunc nuw nsw i64 %indvars.iv.next328 to i32
  %93 = select i1 %91, i32 0, i32 %92
  %94 = load i32, ptr %86, align 8
  %95 = add i32 %.0279311, 3
  %96 = select i1 %91, i32 %94, i32 %95
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %97 = getelementptr inbounds %struct.ImVec2, ptr %46, i64 %indvars.iv327
  %98 = zext nneg i32 %93 to i64
  %99 = getelementptr inbounds %struct.ImVec2, ptr %46, i64 %98
  %100 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %97, ptr noundef nonnull align 4 dereferenceable(8) %99)
  store <2 x float> %100, ptr %13, align 8
  %101 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef 5.000000e-01)
  store <2 x float> %101, ptr %12, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  %102 = extractelement <2 x float> %101, i64 0
  %103 = fmul <2 x float> %101, %101
  %104 = extractelement <2 x float> %103, i64 1
  %105 = call float @llvm.fmuladd.f32(float %102, float %102, float %104)
  %106 = fcmp ogt float %105, 0x3EB0C6F7A0000000
  br i1 %106, label %107, label %111

107:                                              ; preds = %90
  %108 = fdiv float 1.000000e+00, %105
  %109 = fcmp ogt float %108, 1.000000e+02
  %.0281 = select i1 %109, float 1.000000e+02, float %108
  %110 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %.0281)
  br label %111

111:                                              ; preds = %107, %90
  %112 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef 1.000000e+00)
  %113 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %98
  %114 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %113, ptr noundef nonnull align 4 dereferenceable(8) %12)
  %115 = shl nuw nsw i32 %93, 1
  %116 = zext nneg i32 %115 to i64
  %117 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %116
  store <2 x float> %114, ptr %117, align 8
  %118 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %113, ptr noundef nonnull align 4 dereferenceable(8) %12)
  %119 = or disjoint i32 %115, 1
  %120 = zext nneg i32 %119 to i64
  %121 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %120
  store <2 x float> %118, ptr %121, align 8
  %122 = trunc i32 %96 to i16
  %123 = load ptr, ptr %88, align 8, !tbaa !27
  store i16 %122, ptr %123, align 2, !tbaa !28
  %124 = trunc i32 %.0279311 to i16
  %125 = getelementptr inbounds i8, ptr %123, i64 2
  store i16 %124, ptr %125, align 2, !tbaa !28
  %126 = add i16 %124, 2
  %127 = getelementptr inbounds i8, ptr %123, i64 4
  store i16 %126, ptr %127, align 2, !tbaa !28
  %128 = getelementptr inbounds i8, ptr %123, i64 6
  store i16 %126, ptr %128, align 2, !tbaa !28
  %129 = add i16 %122, 2
  %130 = getelementptr inbounds i8, ptr %123, i64 8
  store i16 %129, ptr %130, align 2, !tbaa !28
  %131 = getelementptr inbounds i8, ptr %123, i64 10
  store i16 %122, ptr %131, align 2, !tbaa !28
  %132 = add i16 %122, 1
  %133 = getelementptr inbounds i8, ptr %123, i64 12
  store i16 %132, ptr %133, align 2, !tbaa !28
  %134 = add i16 %124, 1
  %135 = getelementptr inbounds i8, ptr %123, i64 14
  store i16 %134, ptr %135, align 2, !tbaa !28
  %136 = getelementptr inbounds i8, ptr %123, i64 16
  store i16 %124, ptr %136, align 2, !tbaa !28
  %137 = getelementptr inbounds i8, ptr %123, i64 18
  store i16 %124, ptr %137, align 2, !tbaa !28
  %138 = getelementptr inbounds i8, ptr %123, i64 20
  store i16 %122, ptr %138, align 2, !tbaa !28
  %139 = getelementptr inbounds i8, ptr %123, i64 22
  store i16 %132, ptr %139, align 2, !tbaa !28
  %140 = getelementptr inbounds i8, ptr %123, i64 24
  store ptr %140, ptr %88, align 8, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  %exitcond331.not = icmp eq i64 %indvars.iv.next328, %wide.trip.count330
  br i1 %exitcond331.not, label %.lr.ph315, label %90, !llvm.loop !30

141:                                              ; preds = %.lr.ph315, %141
  %142 = phi ptr [ %.pre, %.lr.ph315 ], [ %165, %141 ]
  %indvars.iv332 = phi i64 [ 0, %.lr.ph315 ], [ %indvars.iv.next333, %141 ]
  %143 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv332
  %144 = load i64, ptr %143, align 4
  store i64 %144, ptr %142, align 4
  %145 = load ptr, ptr %89, align 8, !tbaa !26
  %146 = getelementptr inbounds i8, ptr %145, i64 8
  store i64 %31, ptr %146, align 4
  %147 = load ptr, ptr %89, align 8, !tbaa !26
  %148 = getelementptr inbounds i8, ptr %147, i64 16
  store i32 %3, ptr %148, align 4, !tbaa !31
  %149 = shl nuw nsw i64 %indvars.iv332, 1
  %150 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %149
  %151 = getelementptr inbounds i8, ptr %147, i64 20
  %152 = load i64, ptr %150, align 8
  store i64 %152, ptr %151, align 4
  %153 = load ptr, ptr %89, align 8, !tbaa !26
  %154 = getelementptr inbounds i8, ptr %153, i64 28
  store i64 %31, ptr %154, align 4
  %155 = load ptr, ptr %89, align 8, !tbaa !26
  %156 = getelementptr inbounds i8, ptr %155, i64 36
  store i32 %37, ptr %156, align 4, !tbaa !31
  %157 = or disjoint i64 %149, 1
  %158 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %157
  %159 = getelementptr inbounds i8, ptr %155, i64 40
  %160 = load i64, ptr %158, align 8
  store i64 %160, ptr %159, align 4
  %161 = load ptr, ptr %89, align 8, !tbaa !26
  %162 = getelementptr inbounds i8, ptr %161, i64 48
  store i64 %31, ptr %162, align 4
  %163 = load ptr, ptr %89, align 8, !tbaa !26
  %164 = getelementptr inbounds i8, ptr %163, i64 56
  store i32 %37, ptr %164, align 4, !tbaa !31
  %165 = getelementptr inbounds i8, ptr %163, i64 60
  store ptr %165, ptr %89, align 8, !tbaa !26
  %indvars.iv.next333 = add nuw nsw i64 %indvars.iv332, 1
  %exitcond336.not = icmp eq i64 %indvars.iv.next333, %wide.trip.count335
  br i1 %exitcond336.not, label %.loopexit306, label %141, !llvm.loop !33

166:                                              ; preds = %64
  %167 = fadd float %5, -1.000000e+00
  %168 = fmul float %167, 5.000000e-01
  br label %.lr.ph319

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

.lr.ph319:                                        ; preds = %.thread305, %166
  %206 = phi float [ %170, %.thread305 ], [ %168, %166 ]
  %207 = getelementptr inbounds i8, ptr %0, i64 72
  %208 = load i32, ptr %207, align 8, !tbaa !25
  %209 = fadd float %206, 1.000000e+00
  %210 = getelementptr inbounds i8, ptr %0, i64 88
  %wide.trip.count340 = zext nneg i32 %spec.select to i64
  br label %212

.lr.ph321:                                        ; preds = %233
  %211 = getelementptr inbounds i8, ptr %0, i64 80
  %smax345 = call i32 @llvm.smax.i32(i32 %2, i32 1)
  %wide.trip.count346 = zext nneg i32 %smax345 to i64
  %.pre354 = load ptr, ptr %211, align 8, !tbaa !26
  br label %280

212:                                              ; preds = %.lr.ph319, %233
  %indvars.iv337 = phi i64 [ 0, %.lr.ph319 ], [ %indvars.iv.next338, %233 ]
  %.0284317 = phi i32 [ %208, %.lr.ph319 ], [ %218, %233 ]
  %indvars.iv.next338 = add nuw nsw i64 %indvars.iv337, 1
  %213 = icmp eq i64 %indvars.iv.next338, %47
  %214 = trunc nuw nsw i64 %indvars.iv.next338 to i32
  %215 = select i1 %213, i32 0, i32 %214
  %216 = load i32, ptr %207, align 8
  %217 = add i32 %.0284317, 4
  %218 = select i1 %213, i32 %216, i32 %217
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %219 = getelementptr inbounds %struct.ImVec2, ptr %46, i64 %indvars.iv337
  %220 = zext nneg i32 %215 to i64
  %221 = getelementptr inbounds %struct.ImVec2, ptr %46, i64 %220
  %222 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %219, ptr noundef nonnull align 4 dereferenceable(8) %221)
  store <2 x float> %222, ptr %23, align 8
  %223 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef 5.000000e-01)
  store <2 x float> %223, ptr %22, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  %224 = extractelement <2 x float> %223, i64 0
  %225 = fmul <2 x float> %223, %223
  %226 = extractelement <2 x float> %225, i64 1
  %227 = call float @llvm.fmuladd.f32(float %224, float %224, float %226)
  %228 = fcmp ogt float %227, 0x3EB0C6F7A0000000
  br i1 %228, label %229, label %233

229:                                              ; preds = %212
  %230 = fdiv float 1.000000e+00, %227
  %231 = fcmp ogt float %230, 1.000000e+02
  %.0287 = select i1 %231, float 1.000000e+02, float %230
  %232 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %.0287)
  br label %233

233:                                              ; preds = %229, %212
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  %234 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %209)
  store <2 x float> %234, ptr %24, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  %235 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %206)
  store <2 x float> %235, ptr %25, align 8
  %236 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %220
  %237 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %236, ptr noundef nonnull align 4 dereferenceable(8) %24)
  %238 = shl nsw i32 %215, 2
  %239 = zext nneg i32 %238 to i64
  %240 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %239
  store <2 x float> %237, ptr %240, align 8
  %241 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %236, ptr noundef nonnull align 4 dereferenceable(8) %25)
  %242 = or disjoint i32 %238, 1
  %243 = zext nneg i32 %242 to i64
  %244 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %243
  store <2 x float> %241, ptr %244, align 8
  %245 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %236, ptr noundef nonnull align 4 dereferenceable(8) %25)
  %246 = or disjoint i32 %238, 2
  %247 = zext nneg i32 %246 to i64
  %248 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %247
  store <2 x float> %245, ptr %248, align 8
  %249 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %236, ptr noundef nonnull align 4 dereferenceable(8) %24)
  %250 = or disjoint i32 %238, 3
  %251 = zext nneg i32 %250 to i64
  %252 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %251
  store <2 x float> %249, ptr %252, align 8
  %253 = trunc i32 %218 to i16
  %254 = add i16 %253, 1
  %255 = load ptr, ptr %210, align 8, !tbaa !27
  store i16 %254, ptr %255, align 2, !tbaa !28
  %256 = trunc i32 %.0284317 to i16
  %257 = add i16 %256, 1
  %258 = getelementptr inbounds i8, ptr %255, i64 2
  store i16 %257, ptr %258, align 2, !tbaa !28
  %259 = add i16 %256, 2
  %260 = getelementptr inbounds i8, ptr %255, i64 4
  store i16 %259, ptr %260, align 2, !tbaa !28
  %261 = getelementptr inbounds i8, ptr %255, i64 6
  store i16 %259, ptr %261, align 2, !tbaa !28
  %262 = add i16 %253, 2
  %263 = getelementptr inbounds i8, ptr %255, i64 8
  store i16 %262, ptr %263, align 2, !tbaa !28
  %264 = getelementptr inbounds i8, ptr %255, i64 10
  store i16 %254, ptr %264, align 2, !tbaa !28
  %265 = getelementptr inbounds i8, ptr %255, i64 12
  store i16 %254, ptr %265, align 2, !tbaa !28
  %266 = getelementptr inbounds i8, ptr %255, i64 14
  store i16 %257, ptr %266, align 2, !tbaa !28
  %267 = getelementptr inbounds i8, ptr %255, i64 16
  store i16 %256, ptr %267, align 2, !tbaa !28
  %268 = getelementptr inbounds i8, ptr %255, i64 18
  store i16 %256, ptr %268, align 2, !tbaa !28
  %269 = getelementptr inbounds i8, ptr %255, i64 20
  store i16 %253, ptr %269, align 2, !tbaa !28
  %270 = getelementptr inbounds i8, ptr %255, i64 22
  store i16 %254, ptr %270, align 2, !tbaa !28
  %271 = getelementptr inbounds i8, ptr %255, i64 24
  store i16 %262, ptr %271, align 2, !tbaa !28
  %272 = getelementptr inbounds i8, ptr %255, i64 26
  store i16 %259, ptr %272, align 2, !tbaa !28
  %273 = add i16 %256, 3
  %274 = getelementptr inbounds i8, ptr %255, i64 28
  store i16 %273, ptr %274, align 2, !tbaa !28
  %275 = getelementptr inbounds i8, ptr %255, i64 30
  store i16 %273, ptr %275, align 2, !tbaa !28
  %276 = add i16 %253, 3
  %277 = getelementptr inbounds i8, ptr %255, i64 32
  store i16 %276, ptr %277, align 2, !tbaa !28
  %278 = getelementptr inbounds i8, ptr %255, i64 34
  store i16 %262, ptr %278, align 2, !tbaa !28
  %279 = getelementptr inbounds i8, ptr %255, i64 36
  store ptr %279, ptr %210, align 8, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  %exitcond341.not = icmp eq i64 %indvars.iv.next338, %wide.trip.count340
  br i1 %exitcond341.not, label %.lr.ph321, label %212, !llvm.loop !34

280:                                              ; preds = %.lr.ph321, %280
  %281 = phi ptr [ %.pre354, %.lr.ph321 ], [ %313, %280 ]
  %indvars.iv342 = phi i64 [ 0, %.lr.ph321 ], [ %indvars.iv.next343, %280 ]
  %282 = shl nsw i64 %indvars.iv342, 2
  %283 = getelementptr inbounds %struct.ImVec2, ptr %48, i64 %282
  %284 = load i64, ptr %283, align 8
  store i64 %284, ptr %281, align 4
  %285 = load ptr, ptr %211, align 8, !tbaa !26
  %286 = getelementptr inbounds i8, ptr %285, i64 8
  store i64 %31, ptr %286, align 4
  %287 = load ptr, ptr %211, align 8, !tbaa !26
  %288 = getelementptr inbounds i8, ptr %287, i64 16
  store i32 %37, ptr %288, align 4, !tbaa !31
  %289 = or disjoint i64 %282, 1
  %290 = getelementptr inbounds %struct.ImVec2, ptr %48, 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 %211, align 8, !tbaa !26
  %294 = getelementptr inbounds i8, ptr %293, i64 28
  store i64 %31, ptr %294, align 4
  %295 = load ptr, ptr %211, align 8, !tbaa !26
  %296 = getelementptr inbounds i8, ptr %295, i64 36
  store i32 %3, ptr %296, align 4, !tbaa !31
  %297 = or disjoint i64 %282, 2
  %298 = getelementptr inbounds %struct.ImVec2, ptr %48, 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 %211, align 8, !tbaa !26
  %302 = getelementptr inbounds i8, ptr %301, i64 48
  store i64 %31, ptr %302, align 4
  %303 = load ptr, ptr %211, align 8, !tbaa !26
  %304 = getelementptr inbounds i8, ptr %303, i64 56
  store i32 %3, ptr %304, align 4, !tbaa !31
  %305 = or disjoint i64 %282, 3
  %306 = getelementptr inbounds %struct.ImVec2, ptr %48, 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 %211, align 8, !tbaa !26
  %310 = getelementptr inbounds i8, ptr %309, i64 68
  store i64 %31, ptr %310, align 4
  %311 = load ptr, ptr %211, align 8, !tbaa !26
  %312 = getelementptr inbounds i8, ptr %311, i64 76
  store i32 %37, ptr %312, align 4, !tbaa !31
  %313 = getelementptr inbounds i8, ptr %311, i64 80
  store ptr %313, ptr %211, align 8, !tbaa !26
  %indvars.iv.next343 = add nuw nsw i64 %indvars.iv342, 1
  %exitcond347.not = icmp eq i64 %indvars.iv.next343, %wide.trip.count346
  br i1 %exitcond347.not, label %.loopexit306, label %280, !llvm.loop !35

.loopexit306:                                     ; preds = %141, %280
  %314 = and i32 %41, 65535
  %315 = getelementptr inbounds i8, ptr %0, i64 72
  %316 = load i32, ptr %315, align 8, !tbaa !25
  %317 = add i32 %316, %314
  store i32 %317, ptr %315, align 8, !tbaa !25
  br label %.loopexit

.lr.ph324:                                        ; preds = %28
  %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 %26, i64 4
  %322 = getelementptr inbounds i8, ptr %0, i64 80
  %323 = getelementptr inbounds i8, ptr %0, i64 72
  %324 = getelementptr inbounds i8, ptr %0, i64 88
  %325 = zext nneg i32 %2 to i64
  %wide.trip.count351 = zext nneg i32 %spec.select to i64
  br label %326

326:                                              ; preds = %.lr.ph324, %326
  %indvars.iv348 = phi i64 [ 0, %.lr.ph324 ], [ %indvars.iv.next349, %326 ]
  %indvars.iv.next349 = add nuw nsw i64 %indvars.iv348, 1
  %327 = icmp eq i64 %indvars.iv.next349, %325
  %328 = and i64 %indvars.iv.next349, 4294967295
  %329 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %indvars.iv348
  %330 = select i1 %327, i64 0, i64 %328
  %331 = getelementptr inbounds %struct.ImVec2, ptr %1, i64 %330
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  %332 = call <2 x float> @_ZmiRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %331, ptr noundef nonnull align 4 dereferenceable(8) %329)
  store <2 x float> %332, ptr %26, align 8
  %333 = call noundef float @_ZL11ImInvLengthRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %26, float noundef 1.000000e+00)
  %334 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %26, float noundef %333)
  %335 = load float, ptr %26, align 8, !tbaa !22
  %336 = fmul float %320, %335
  %337 = load float, ptr %321, align 4, !tbaa !19
  %338 = fmul float %320, %337
  %339 = load float, ptr %329, align 4, !tbaa !22
  %340 = fadd float %339, %338
  %341 = load ptr, ptr %322, align 8, !tbaa !26
  store float %340, ptr %341, align 4, !tbaa !36
  %342 = getelementptr inbounds i8, ptr %329, i64 4
  %343 = load float, ptr %342, align 4, !tbaa !19
  %344 = fsub float %343, %336
  %345 = getelementptr inbounds i8, ptr %341, i64 4
  store float %344, ptr %345, align 4, !tbaa !37
  %346 = getelementptr inbounds i8, ptr %341, i64 8
  store i64 %31, ptr %346, align 4
  %347 = load ptr, ptr %322, align 8, !tbaa !26
  %348 = getelementptr inbounds i8, ptr %347, i64 16
  store i32 %3, ptr %348, align 4, !tbaa !31
  %349 = load float, ptr %331, align 4, !tbaa !22
  %350 = fadd float %338, %349
  %351 = getelementptr inbounds i8, ptr %347, i64 20
  store float %350, ptr %351, align 4, !tbaa !36
  %352 = getelementptr inbounds i8, ptr %331, i64 4
  %353 = load float, ptr %352, align 4, !tbaa !19
  %354 = fsub float %353, %336
  %355 = getelementptr inbounds i8, ptr %347, i64 24
  store float %354, ptr %355, align 4, !tbaa !37
  %356 = getelementptr inbounds i8, ptr %347, i64 28
  store i64 %31, ptr %356, align 4
  %357 = load ptr, ptr %322, align 8, !tbaa !26
  %358 = getelementptr inbounds i8, ptr %357, i64 36
  store i32 %3, ptr %358, align 4, !tbaa !31
  %359 = load float, ptr %331, align 4, !tbaa !22
  %360 = fsub float %359, %338
  %361 = getelementptr inbounds i8, ptr %357, i64 40
  store float %360, ptr %361, align 4, !tbaa !36
  %362 = load float, ptr %352, align 4, !tbaa !19
  %363 = fadd float %336, %362
  %364 = getelementptr inbounds i8, ptr %357, i64 44
  store float %363, ptr %364, align 4, !tbaa !37
  %365 = getelementptr inbounds i8, ptr %357, i64 48
  store i64 %31, ptr %365, align 4
  %366 = load ptr, ptr %322, align 8, !tbaa !26
  %367 = getelementptr inbounds i8, ptr %366, i64 56
  store i32 %3, ptr %367, align 4, !tbaa !31
  %368 = load float, ptr %329, align 4, !tbaa !22
  %369 = fsub float %368, %338
  %370 = getelementptr inbounds i8, ptr %366, i64 60
  store float %369, ptr %370, align 4, !tbaa !36
  %371 = load float, ptr %342, align 4, !tbaa !19
  %372 = fadd float %336, %371
  %373 = getelementptr inbounds i8, ptr %366, i64 64
  store float %372, ptr %373, align 4, !tbaa !37
  %374 = getelementptr inbounds i8, ptr %366, i64 68
  store i64 %31, ptr %374, align 4
  %375 = load ptr, ptr %322, align 8, !tbaa !26
  %376 = getelementptr inbounds i8, ptr %375, i64 76
  store i32 %3, ptr %376, align 4, !tbaa !31
  %377 = getelementptr inbounds i8, ptr %375, i64 80
  store ptr %377, ptr %322, align 8, !tbaa !26
  %378 = load i32, ptr %323, align 8, !tbaa !25
  %379 = trunc i32 %378 to i16
  %380 = load ptr, ptr %324, align 8, !tbaa !27
  store i16 %379, ptr %380, align 2, !tbaa !28
  %381 = add i16 %379, 1
  %382 = getelementptr inbounds i8, ptr %380, i64 2
  store i16 %381, ptr %382, align 2, !tbaa !28
  %383 = add i16 %379, 2
  %384 = getelementptr inbounds i8, ptr %380, i64 4
  store i16 %383, ptr %384, align 2, !tbaa !28
  %385 = getelementptr inbounds i8, ptr %380, i64 6
  store i16 %379, ptr %385, align 2, !tbaa !28
  %386 = getelementptr inbounds i8, ptr %380, i64 8
  store i16 %383, ptr %386, align 2, !tbaa !28
  %387 = add i16 %379, 3
  %388 = getelementptr inbounds i8, ptr %380, i64 10
  store i16 %387, ptr %388, align 2, !tbaa !28
  %389 = getelementptr inbounds i8, ptr %380, i64 12
  store ptr %389, ptr %324, align 8, !tbaa !27
  %390 = add i32 %378, 4
  store i32 %390, ptr %323, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  %exitcond352.not = icmp eq i64 %indvars.iv.next349, %wide.trip.count351
  br i1 %exitcond352.not, label %.loopexit, label %326, !llvm.loop !38

.loopexit:                                        ; preds = %326, %.loopexit306, %6
  ret void
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef nonnull align 4 dereferenceable(8) ptr @_ZmLR6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef float @_ZL11ImInvLengthRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) local_unnamed_addr #5

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

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

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

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

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

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

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


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