; LLVM IR from PepcyCh/bisemutum-engine :: bisemutum/thirdparty/ImGuizmo (ImCurveEdit)

; 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 }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<ImCurveEdit::EditPoint, ImCurveEdit::EditPoint, std::_Identity<ImCurveEdit::EditPoint>, std::less<ImCurveEdit::EditPoint>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<ImCurveEdit::EditPoint, ImCurveEdit::EditPoint, std::_Identity<ImCurveEdit::EditPoint>, std::less<ImCurveEdit::EditPoint>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl" }
%"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl" = type { %"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }
%class.anon = type { ptr, ptr }
%class.anon.6 = type { ptr, ptr }
%class.anon.7 = type { ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"struct.ImCurveEdit::EditPoint" = type { i32, i32 }
%"struct.std::pair" = type <{ %"struct.std::_Rb_tree_const_iterator", i8, [7 x i8] }>
%"struct.ImCurveEdit::Delegate" = type <{ ptr, i8, [7 x i8] }>
%struct.ImGuiIO = type { i32, i32, %struct.ImVec2, float, float, ptr, ptr, float, float, float, float, float, float, float, ptr, ptr, float, i8, ptr, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, i8, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, i32, i32, %struct.ImVec2, [652 x i32], [652 x i8], [16 x float], %struct.ImVec2, [5 x i8], float, float, i8, i8, i8, i8, i32, [652 x %struct.ImGuiKeyData], i8, %struct.ImVec2, [5 x %struct.ImVec2], [5 x double], [5 x i8], [5 x i8], [5 x i16], [5 x i16], [5 x i8], [5 x i8], [5 x i8], [5 x float], [5 x float], [5 x float], float, i8, i8, i8, i8, i16, %struct.ImVector }
%struct.ImGuiKeyData = type { i8, float, float, float }
%struct.ImVector = type { i32, i32, ptr }

@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad = external hidden global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection = external hidden global %struct.ImVec2, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve = external hidden global i32, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve = external hidden global i32, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV = external hidden global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection = external hidden global %"class.std::set", align 8
@_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection = external hidden global i64, align 8
@__dso_handle = external hidden global i8
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint = external hidden global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved = external hidden global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin = external hidden global %struct.ImVec2, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints = external hidden global %"class.std::vector", align 8
@_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints = external hidden global i64, align 8

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEE(ptr noundef nonnull align 8 dereferenceable(9) %0, ptr noundef nonnull align 4 dereferenceable(8) %1, i32 noundef %2, ptr noundef %3, ptr noundef %4) #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca %struct.ImVec2, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca %struct.ImVec2, align 4
  %17 = alloca %struct.ImVec2, align 4
  %18 = alloca %struct.ImVec2, align 4
  %19 = alloca %struct.ImRect, align 4
  %20 = alloca %struct.ImVec2, align 4
  %21 = alloca %struct.ImVec2, align 4
  %22 = alloca %struct.ImVec2, align 4
  %23 = alloca %struct.ImVec2, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca %class.anon, align 8
  %29 = alloca %struct.ImVec2, align 4
  %30 = alloca %struct.ImVec2, align 4
  %31 = alloca %struct.ImVec2, align 4
  %32 = alloca %struct.ImVec2, align 4
  %33 = alloca %struct.ImVec2, align 4
  %34 = alloca %struct.ImVec2, align 4
  %35 = alloca i64, align 8
  %36 = alloca float, align 4
  %37 = alloca %struct.ImVec2, align 4
  %38 = alloca %class.anon.6, align 8
  %39 = alloca %class.anon.7, align 8
  %40 = alloca %struct.ImVec2, align 4
  %41 = alloca %struct.ImVec2, align 4
  %42 = alloca %struct.ImVec2, align 4
  %43 = alloca %struct.ImVec2, align 4
  %44 = alloca %struct.ImVec2, align 4
  %45 = alloca %struct.ImVec2, align 4
  %46 = alloca i8, align 1
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  %49 = alloca i64, align 8
  %50 = alloca i32, align 4
  %51 = alloca i64, align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i64, align 8
  %55 = alloca i32, align 4
  %56 = alloca ptr, align 8
  %57 = alloca i32, align 4
  %58 = alloca i64, align 8
  %59 = alloca %struct.ImVec2, align 4
  %60 = alloca %struct.ImVec2, align 4
  %61 = alloca %struct.ImVec2, align 4
  %62 = alloca %struct.ImVec2, align 4
  %63 = alloca i64, align 8
  %64 = alloca float, align 4
  %65 = alloca i64, align 8
  %66 = alloca float, align 4
  %67 = alloca %struct.ImVec2, align 4
  %68 = alloca %struct.ImVec2, align 4
  %69 = alloca float, align 4
  %70 = alloca float, 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 %struct.ImVec2, align 4
  %76 = alloca %struct.ImVec2, align 4
  %77 = alloca %struct.ImVec2, align 4
  %78 = alloca %struct.ImVec2, align 4
  %79 = alloca %struct.ImVec2, align 4
  %80 = alloca %struct.ImVec2, align 4
  %81 = alloca %struct.ImVec2, align 4
  %82 = alloca %struct.ImVec2, align 4
  %83 = alloca %struct.ImVec2, align 4
  %84 = alloca i64, align 8
  %85 = alloca i32, align 4
  %86 = alloca %struct.ImVec2, align 4
  %87 = alloca %struct.ImVec2, align 4
  %88 = alloca %struct.ImVec2, align 4
  %89 = alloca %struct.ImVec2, align 4
  %90 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %91 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %92 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %93 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %94 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %95 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %96 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %97 = alloca %"struct.std::pair", align 8
  %98 = alloca i32, align 4
  %99 = alloca ptr, align 8
  %100 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %101 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %102 = alloca ptr, align 8
  %103 = alloca ptr, align 8
  %104 = alloca %"class.std::set", align 8
  %105 = alloca i32, align 4
  %106 = alloca ptr, align 8
  %107 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %108 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %109 = alloca ptr, align 8
  %110 = alloca %struct.ImVec2, align 4
  %111 = alloca %struct.ImVec2, align 4
  %112 = alloca %struct.ImVec2, align 4
  %113 = alloca %struct.ImVec2, align 4
  %114 = alloca ptr, align 8
  %115 = alloca i32, align 4
  %116 = alloca %struct.ImVec2, align 4
  %117 = alloca %struct.ImVec2, align 4
  %118 = alloca i32, align 4
  %119 = alloca %struct.ImVec2, align 4
  %120 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %121 = alloca %"struct.std::pair", align 8
  %122 = alloca %struct.ImVec2, align 4
  %123 = alloca %struct.ImVec2, align 4
  %124 = alloca %struct.ImVec2, align 4
  %125 = alloca %struct.ImVec2, align 4
  %126 = alloca i64, align 8
  %127 = alloca ptr, align 8
  %128 = alloca i64, align 8
  %129 = alloca i64, align 8
  %130 = alloca %struct.ImVec2, align 4
  %131 = alloca %struct.ImVec2, align 4
  %132 = alloca %struct.ImVec2, align 4
  %133 = alloca %struct.ImVec2, align 4
  %134 = alloca %struct.ImVec2, align 4
  %135 = alloca %struct.ImVec2, align 4
  %136 = alloca %struct.ImVec2, align 4
  %137 = alloca %struct.ImVec2, align 4
  %138 = alloca %struct.ImRect, align 4
  %139 = alloca i64, align 8
  %140 = alloca i64, align 8
  %141 = alloca ptr, align 8
  %142 = alloca i64, align 8
  %143 = alloca %struct.ImVec2, align 4
  %144 = alloca %struct.ImVec2, align 4
  %145 = alloca %struct.ImVec2, align 4
  %146 = alloca %struct.ImVec2, align 4
  %147 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %148 = alloca %"struct.std::pair", align 8
  %149 = alloca i32, align 4
  %150 = alloca ptr, align 8
  %151 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %152 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %153 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  %154 = load atomic i8, ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection acquire, align 8
  %155 = icmp eq i8 %154, 0
  br i1 %155, label %156, label %161, !prof !11

156:                                              ; preds = %5
  %157 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %161

159:                                              ; preds = %156
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %160 = call i32 @__cxa_atexit(ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr @__dso_handle) #1
  call void @__cxa_guard_release(ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  br label %161

161:                                              ; preds = %159, %156, %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #1
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #1
  %162 = call noundef nonnull align 8 dereferenceable(14264) ptr @_ZN5ImGui5GetIOEv()
  store ptr %162, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #1
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN5ImGui12PushStyleVarEiRK6ImVec2(i32 noundef 11, ptr noundef nonnull align 4 dereferenceable(8) %13)
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #1
  call void @_ZN5ImGui14PushStyleColorEij(i32 noundef 5, i32 noundef 0)
  %163 = load i32, ptr %8, align 4, !tbaa !9
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  %165 = call noundef zeroext i1 @_ZN5ImGui15BeginChildFrameEjRK6ImVec2i(i32 noundef %163, ptr noundef nonnull align 4 dereferenceable(8) %164, i32 noundef 0)
  %166 = call noundef zeroext i1 @_ZN5ImGui15IsWindowFocusedEi(i32 noundef 0)
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = getelementptr inbounds %"struct.ImCurveEdit::Delegate", ptr %167, i32 0, i32 1
  %169 = zext i1 %166 to i8
  store i8 %169, ptr %168, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #1
  %170 = call noundef ptr @_ZN5ImGui17GetWindowDrawListEv()
  store ptr %170, ptr %14, align 8, !tbaa !5
  %171 = load ptr, ptr %9, align 8, !tbaa !5
  %172 = icmp ne ptr %171, null
  br i1 %172, label %173, label %179

173:                                              ; preds = %161
  %174 = load ptr, ptr %14, align 8, !tbaa !5
  %175 = load ptr, ptr %9, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.ImRect, ptr %175, i32 0, i32 0
  %177 = load ptr, ptr %9, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.ImRect, ptr %177, i32 0, i32 1
  call void @_ZN10ImDrawList12PushClipRectERK6ImVec2S2_b(ptr noundef nonnull align 8 dereferenceable(196) %174, ptr noundef nonnull align 4 dereferenceable(8) %176, ptr noundef nonnull align 4 dereferenceable(8) %178, i1 noundef zeroext true)
  br label %179

179:                                              ; preds = %173, %161
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #1
  %180 = call <2 x float> @_ZN5ImGui18GetCursorScreenPosEv()
  store <2 x float> %180, ptr %16, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #1
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.ImVec2, ptr %181, i32 0, i32 1
  %183 = load float, ptr %182, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %17, float noundef 0.000000e+00, float noundef %183)
  %184 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %16, ptr noundef nonnull align 4 dereferenceable(8) %17)
  store <2 x float> %184, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #1
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.ImVec2, ptr %185, i32 0, i32 0
  %187 = load float, ptr %186, align 4, !tbaa !18
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.ImVec2, ptr %188, i32 0, i32 1
  %190 = load float, ptr %189, align 4, !tbaa !15
  %191 = fneg float %190
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %18, float noundef %187, float noundef %191)
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #1
  %192 = getelementptr inbounds %struct.ImVec2, ptr %18, i32 0, i32 1
  %193 = load float, ptr %192, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %21, float noundef 0.000000e+00, float noundef %193)
  %194 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %194, ptr %20, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #1
  %195 = getelementptr inbounds %struct.ImVec2, ptr %18, i32 0, i32 0
  %196 = load float, ptr %195, align 4, !tbaa !18
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef %196, float noundef 0.000000e+00)
  %197 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 4 dereferenceable(8) %23)
  store <2 x float> %197, ptr %22, align 4
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 4 dereferenceable(8) %22)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #1
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = load ptr, ptr %198, align 8, !tbaa !19
  %200 = getelementptr inbounds ptr, ptr %199, i64 3
  %201 = load ptr, ptr %200, align 8
  %202 = call noundef nonnull align 4 dereferenceable(8) ptr %201(ptr noundef nonnull align 8 dereferenceable(9) %198)
  store ptr %202, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #1
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = load ptr, ptr %203, align 8, !tbaa !19
  %205 = getelementptr inbounds ptr, ptr %204, i64 4
  %206 = load ptr, ptr %205, align 8
  %207 = call noundef nonnull align 4 dereferenceable(8) ptr %206(ptr noundef nonnull align 8 dereferenceable(9) %203)
  store ptr %207, ptr %25, align 8, !tbaa !5
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.ImGuiIO, ptr %208, i32 0, i32 56
  %210 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(8) %209)
  br i1 %210, label %211, label %258

211:                                              ; preds = %179
  %212 = load ptr, ptr %12, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.ImGuiIO, ptr %212, i32 0, i32 58
  %214 = load float, ptr %213, align 4, !tbaa !21
  %215 = call float @llvm.fabs.f32(float %214)
  %216 = fcmp ogt float %215, 0x3E80000000000000
  br i1 %216, label %217, label %251

217:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #1
  %218 = load ptr, ptr %12, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.ImGuiIO, ptr %218, i32 0, i32 56
  %220 = getelementptr inbounds %struct.ImVec2, ptr %219, i32 0, i32 1
  %221 = load float, ptr %220, align 4, !tbaa !25
  %222 = getelementptr inbounds %struct.ImVec2, ptr %15, i32 0, i32 1
  %223 = load float, ptr %222, align 4, !tbaa !15
  %224 = fsub float %221, %223
  %225 = getelementptr inbounds %struct.ImVec2, ptr %18, i32 0, i32 1
  %226 = load float, ptr %225, align 4, !tbaa !15
  %227 = fdiv float %224, %226
  store float %227, ptr %26, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #1
  %228 = load ptr, ptr %24, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.ImVec2, ptr %228, i32 0, i32 1
  %230 = load float, ptr %229, align 4, !tbaa !15
  %231 = load ptr, ptr %25, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.ImVec2, ptr %231, i32 0, i32 1
  %233 = load float, ptr %232, align 4, !tbaa !15
  %234 = load float, ptr %26, align 4, !tbaa !26
  %235 = call noundef float @_ZL6ImLerpIfET_S0_S0_f(float noundef %230, float noundef %233, float noundef %234)
  store float %235, ptr %27, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #1
  %236 = getelementptr inbounds %class.anon, ptr %28, i32 0, i32 0
  store ptr %27, ptr %236, align 8, !tbaa !5
  %237 = getelementptr inbounds %class.anon, ptr %28, i32 0, i32 1
  %238 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %238, ptr %237, align 8, !tbaa !5
  %239 = load ptr, ptr %24, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.ImVec2, ptr %239, i32 0, i32 1
  %241 = load float, ptr %240, align 4, !tbaa !15
  %242 = call noundef float @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_0clEf"(ptr noundef nonnull align 8 dereferenceable(16) %28, float noundef %241)
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.ImVec2, ptr %243, i32 0, i32 1
  store float %242, ptr %244, align 4, !tbaa !15
  %245 = load ptr, ptr %25, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.ImVec2, ptr %245, i32 0, i32 1
  %247 = load float, ptr %246, align 4, !tbaa !15
  %248 = call noundef float @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_0clEf"(ptr noundef nonnull align 8 dereferenceable(16) %28, float noundef %247)
  %249 = load ptr, ptr %25, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.ImVec2, ptr %249, i32 0, i32 1
  store float %248, ptr %250, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #1
  br label %251

251:                                              ; preds = %217, %211
  %252 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !27, !range !28, !noundef !29
  %253 = trunc i8 %252 to i1
  br i1 %253, label %257, label %254

254:                                              ; preds = %251
  %255 = call noundef zeroext i1 @_ZN5ImGui11IsMouseDownEi(i32 noundef 2)
  br i1 %255, label %256, label %257

256:                                              ; preds = %254
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !27
  br label %257

257:                                              ; preds = %256, %254, %251
  br label %258

258:                                              ; preds = %257, %179
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #1
  %259 = load ptr, ptr %25, align 8, !tbaa !5
  %260 = load ptr, ptr %24, align 8, !tbaa !5
  %261 = call <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %259, ptr noundef nonnull align 4 dereferenceable(8) %260)
  store <2 x float> %261, ptr %30, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #1
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %31, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %262 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %30, ptr noundef nonnull align 4 dereferenceable(8) %31)
  store <2 x float> %262, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #1
  %263 = load ptr, ptr %7, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.ImVec2, ptr %263, i32 0, i32 0
  %265 = load float, ptr %264, align 4, !tbaa !18
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.ImVec2, ptr %266, i32 0, i32 1
  %268 = load float, ptr %267, align 4, !tbaa !15
  %269 = fneg float %268
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %32, float noundef %265, float noundef %269)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #1
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %270 = call <2 x float> @_ZN11ImCurveEditdvERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %34, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %270, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #1
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = load ptr, ptr %271, align 8, !tbaa !19
  %273 = getelementptr inbounds ptr, ptr %272, i64 0
  %274 = load ptr, ptr %273, align 8
  %275 = call noundef i64 %274(ptr noundef nonnull align 8 dereferenceable(9) %271)
  store i64 %275, ptr %35, align 8, !tbaa !30
  %276 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !27, !range !28, !noundef !29
  %277 = trunc i8 %276 to i1
  br i1 %277, label %278, label %302

278:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #1
  %279 = load ptr, ptr %12, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.ImGuiIO, ptr %279, i32 0, i32 52
  %281 = getelementptr inbounds %struct.ImVec2, ptr %280, i32 0, i32 1
  %282 = load float, ptr %281, align 4, !tbaa !32
  %283 = getelementptr inbounds %struct.ImVec2, ptr %29, i32 0, i32 1
  %284 = load float, ptr %283, align 4, !tbaa !15
  %285 = fmul float %282, %284
  %286 = getelementptr inbounds %struct.ImVec2, ptr %33, i32 0, i32 1
  %287 = load float, ptr %286, align 4, !tbaa !15
  %288 = fmul float %285, %287
  store float %288, ptr %36, align 4, !tbaa !26
  %289 = load float, ptr %36, align 4, !tbaa !26
  %290 = load ptr, ptr %24, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.ImVec2, ptr %290, i32 0, i32 1
  %292 = load float, ptr %291, align 4, !tbaa !15
  %293 = fsub float %292, %289
  store float %293, ptr %291, align 4, !tbaa !15
  %294 = load float, ptr %36, align 4, !tbaa !26
  %295 = load ptr, ptr %25, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.ImVec2, ptr %295, i32 0, i32 1
  %297 = load float, ptr %296, align 4, !tbaa !15
  %298 = fsub float %297, %294
  store float %298, ptr %296, align 4, !tbaa !15
  %299 = call noundef zeroext i1 @_ZN5ImGui11IsMouseDownEi(i32 noundef 2)
  br i1 %299, label %301, label %300

300:                                              ; preds = %278
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !27
  br label %301

301:                                              ; preds = %300, %278
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #1
  br label %302

302:                                              ; preds = %301, %258
  %303 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #1
  %304 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 4 dereferenceable(8) %18)
  store <2 x float> %304, ptr %37, align 4
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = load ptr, ptr %305, align 8, !tbaa !19
  %307 = getelementptr inbounds ptr, ptr %306, i64 10
  %308 = load ptr, ptr %307, align 8
  %309 = call noundef i32 %308(ptr noundef nonnull align 8 dereferenceable(9) %305)
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %303, ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 4 dereferenceable(8) %37, i32 noundef %309, float noundef 0.000000e+00, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #1
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #1
  %310 = getelementptr inbounds %class.anon.6, ptr %38, i32 0, i32 0
  %311 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %311, ptr %310, align 8, !tbaa !5
  %312 = getelementptr inbounds %class.anon.6, ptr %38, i32 0, i32 1
  store ptr %29, ptr %312, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #1
  %313 = getelementptr inbounds %class.anon.7, ptr %39, i32 0, i32 0
  store ptr %29, ptr %313, align 8, !tbaa !5
  %314 = getelementptr inbounds %class.anon.7, ptr %39, i32 0, i32 1
  %315 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %315, ptr %314, align 8, !tbaa !5
  %316 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #1
  %317 = load ptr, ptr %24, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ImVec2, ptr %317, i32 0, i32 1
  %319 = load float, ptr %318, align 4, !tbaa !15
  %320 = fneg float %319
  %321 = getelementptr inbounds %struct.ImVec2, ptr %29, i32 0, i32 1
  %322 = load float, ptr %321, align 4, !tbaa !15
  %323 = fdiv float %320, %322
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %42, float noundef -1.000000e+00, float noundef %323)
  %324 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %42, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %324, ptr %41, align 4
  %325 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %41, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %325, ptr %40, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #1
  %326 = load ptr, ptr %24, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.ImVec2, ptr %326, i32 0, i32 1
  %328 = load float, ptr %327, align 4, !tbaa !15
  %329 = fneg float %328
  %330 = getelementptr inbounds %struct.ImVec2, ptr %29, i32 0, i32 1
  %331 = load float, ptr %330, align 4, !tbaa !15
  %332 = fdiv float %329, %331
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %45, float noundef 1.000000e+00, float noundef %332)
  %333 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %45, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %333, ptr %44, align 4
  %334 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %44, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %334, ptr %43, align 4
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %316, ptr noundef nonnull align 4 dereferenceable(8) %40, ptr noundef nonnull align 4 dereferenceable(8) %43, i32 noundef -16777216, float noundef 1.500000e+00)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #1
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #1
  store i8 0, ptr %46, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #1
  store i32 -1, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #1
  %335 = load i64, ptr %35, align 8, !tbaa !30
  %336 = mul i64 4, %335
  %337 = alloca i8, i64 %336, align 16
  store ptr %337, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #1
  store i64 0, ptr %49, align 8, !tbaa !30
  br label %338

338:                                              ; preds = %349, %302
  %339 = load i64, ptr %49, align 8, !tbaa !30
  %340 = load i64, ptr %35, align 8, !tbaa !30
  %341 = icmp ult i64 %339, %340
  br i1 %341, label %343, label %342

342:                                              ; preds = %338
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #1
  br label %352

343:                                              ; preds = %338
  %344 = load i64, ptr %49, align 8, !tbaa !30
  %345 = trunc i64 %344 to i32
  %346 = load ptr, ptr %48, align 8, !tbaa !5
  %347 = load i64, ptr %49, align 8, !tbaa !30
  %348 = getelementptr inbounds i32, ptr %346, i64 %347
  store i32 %345, ptr %348, align 4, !tbaa !9
  br label %349

349:                                              ; preds = %343
  %350 = load i64, ptr %49, align 8, !tbaa !30
  %351 = add i64 %350, 1
  store i64 %351, ptr %49, align 8, !tbaa !30
  br label %338, !llvm.loop !33

352:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #1
  store i32 -1, ptr %50, align 4, !tbaa !9
  %353 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %354 = icmp ne i32 %353, -1
  br i1 %354, label %355, label %368

355:                                              ; preds = %352
  %356 = load i64, ptr %35, align 8, !tbaa !30
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %358, label %368

358:                                              ; preds = %355
  %359 = load ptr, ptr %48, align 8, !tbaa !5
  %360 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %359, i64 %361
  %363 = load ptr, ptr %48, align 8, !tbaa !5
  %364 = load i64, ptr %35, align 8, !tbaa !30
  %365 = sub i64 %364, 1
  %366 = getelementptr inbounds i32, ptr %363, i64 %365
  call void @_ZL6ImSwapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %362, ptr noundef nonnull align 4 dereferenceable(4) %366)
  %367 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  store i32 %367, ptr %50, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %358, %355, %352
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #1
  store i64 0, ptr %51, align 8, !tbaa !30
  br label %369

369:                                              ; preds = %705, %368
  %370 = load i64, ptr %51, align 8, !tbaa !30
  %371 = load i64, ptr %35, align 8, !tbaa !30
  %372 = icmp ult i64 %370, %371
  br i1 %372, label %374, label %373

373:                                              ; preds = %369
  store i32 5, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #1
  br label %708

374:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #1
  %375 = load ptr, ptr %48, align 8, !tbaa !5
  %376 = load i64, ptr %51, align 8, !tbaa !30
  %377 = getelementptr inbounds i32, ptr %375, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !9
  store i32 %378, ptr %53, align 4, !tbaa !9
  %379 = load ptr, ptr %6, align 8, !tbaa !5
  %380 = load i32, ptr %53, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = load ptr, ptr %379, align 8, !tbaa !19
  %383 = getelementptr inbounds ptr, ptr %382, i64 1
  %384 = load ptr, ptr %383, align 8
  %385 = call noundef zeroext i1 %384(ptr noundef nonnull align 8 dereferenceable(9) %379, i64 noundef %381)
  br i1 %385, label %387, label %386

386:                                              ; preds = %374
  store i32 7, ptr %52, align 4
  br label %702

387:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #1
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = load i32, ptr %53, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = load ptr, ptr %388, align 8, !tbaa !19
  %392 = getelementptr inbounds ptr, ptr %391, i64 5
  %393 = load ptr, ptr %392, align 8
  %394 = call noundef i64 %393(ptr noundef nonnull align 8 dereferenceable(9) %388, i64 noundef %390)
  store i64 %394, ptr %54, align 8, !tbaa !30
  %395 = load i64, ptr %54, align 8, !tbaa !30
  %396 = icmp ult i64 %395, 1
  br i1 %396, label %397, label %398

397:                                              ; preds = %387
  store i32 7, ptr %52, align 4
  br label %701

398:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #1
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = load i32, ptr %53, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = load ptr, ptr %399, align 8, !tbaa !19
  %403 = getelementptr inbounds ptr, ptr %402, i64 2
  %404 = load ptr, ptr %403, align 8
  %405 = call noundef i32 %404(ptr noundef nonnull align 8 dereferenceable(9) %399, i64 noundef %401)
  store i32 %405, ptr %55, align 4, !tbaa !35
  %406 = load i32, ptr %55, align 4, !tbaa !35
  %407 = icmp eq i32 %406, 0
  br i1 %407, label %408, label %409

408:                                              ; preds = %398
  store i32 7, ptr %52, align 4
  br label %700

409:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #1
  %410 = load ptr, ptr %6, align 8, !tbaa !5
  %411 = load i32, ptr %53, align 4, !tbaa !9
  %412 = sext i32 %411 to i64
  %413 = load ptr, ptr %410, align 8, !tbaa !19
  %414 = getelementptr inbounds ptr, ptr %413, i64 7
  %415 = load ptr, ptr %414, align 8
  %416 = call noundef ptr %415(ptr noundef nonnull align 8 dereferenceable(9) %410, i64 noundef %412)
  store ptr %416, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #1
  %417 = load ptr, ptr %6, align 8, !tbaa !5
  %418 = load i32, ptr %53, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = load ptr, ptr %417, align 8, !tbaa !19
  %421 = getelementptr inbounds ptr, ptr %420, i64 6
  %422 = load ptr, ptr %421, align 8
  %423 = call noundef i32 %422(ptr noundef nonnull align 8 dereferenceable(9) %417, i64 noundef %419)
  store i32 %423, ptr %57, align 4, !tbaa !9
  %424 = load i32, ptr %53, align 4, !tbaa !9
  %425 = load i32, ptr %50, align 4, !tbaa !9
  %426 = icmp eq i32 %424, %425
  br i1 %426, label %427, label %432

427:                                              ; preds = %409
  %428 = call noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  br i1 %428, label %429, label %432

429:                                              ; preds = %427
  %430 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27, !range !28, !noundef !29
  %431 = trunc i8 %430 to i1
  br i1 %431, label %432, label %436

432:                                              ; preds = %429, %427, %409
  %433 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %434 = load i32, ptr %53, align 4, !tbaa !9
  %435 = icmp eq i32 %433, %434
  br i1 %435, label %436, label %437

436:                                              ; preds = %432, %429
  store i32 -1, ptr %57, align 4, !tbaa !9
  br label %437

437:                                              ; preds = %436, %432
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #1
  store i64 0, ptr %58, align 8, !tbaa !30
  br label %438

438:                                              ; preds = %614, %437
  %439 = load i64, ptr %58, align 8, !tbaa !30
  %440 = load i64, ptr %54, align 8, !tbaa !30
  %441 = sub i64 %440, 1
  %442 = icmp ult i64 %439, %441
  br i1 %442, label %444, label %443

443:                                              ; preds = %438
  store i32 8, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #1
  br label %617

444:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #1
  %445 = load ptr, ptr %56, align 8, !tbaa !5
  %446 = load i64, ptr %58, align 8, !tbaa !30
  %447 = getelementptr inbounds %struct.ImVec2, ptr %445, i64 %446
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 4 %447, i64 8, i1 false), !tbaa.struct !37
  %448 = load <2 x float>, ptr %60, align 4
  %449 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %38, <2 x float> %448)
  store <2 x float> %449, ptr %59, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #1
  %450 = load ptr, ptr %56, align 8, !tbaa !5
  %451 = load i64, ptr %58, align 8, !tbaa !30
  %452 = add i64 %451, 1
  %453 = getelementptr inbounds %struct.ImVec2, ptr %450, i64 %452
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %62, ptr align 4 %453, i64 8, i1 false), !tbaa.struct !37
  %454 = load <2 x float>, ptr %62, align 4
  %455 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %38, <2 x float> %454)
  store <2 x float> %455, ptr %61, align 4
  %456 = load i32, ptr %55, align 4, !tbaa !35
  %457 = icmp eq i32 %456, 3
  br i1 %457, label %461, label %458

458:                                              ; preds = %444
  %459 = load i32, ptr %55, align 4, !tbaa !35
  %460 = icmp eq i32 %459, 2
  br i1 %460, label %461, label %553

461:                                              ; preds = %458, %444
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #1
  %462 = load i32, ptr %55, align 4, !tbaa !35
  %463 = icmp eq i32 %462, 3
  %464 = zext i1 %463 to i64
  %465 = select i1 %463, i32 20, i32 2
  %466 = sext i32 %465 to i64
  store i64 %466, ptr %63, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #1
  %467 = load i64, ptr %63, align 8, !tbaa !30
  %468 = sub i64 %467, 1
  %469 = uitofp i64 %468 to float
  %470 = fdiv float 1.000000e+00, %469
  store float %470, ptr %64, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #1
  store i64 0, ptr %65, align 8, !tbaa !30
  br label %471

471:                                              ; preds = %549, %461
  %472 = load i64, ptr %65, align 8, !tbaa !30
  %473 = load i64, ptr %63, align 8, !tbaa !30
  %474 = sub i64 %473, 1
  %475 = icmp ult i64 %472, %474
  br i1 %475, label %477, label %476

476:                                              ; preds = %471
  store i32 11, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #1
  br label %552

477:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #1
  %478 = load i64, ptr %65, align 8, !tbaa !30
  %479 = uitofp i64 %478 to float
  %480 = load float, ptr %64, align 4, !tbaa !26
  %481 = fmul float %479, %480
  store float %481, ptr %66, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #1
  %482 = load float, ptr %66, align 4, !tbaa !26
  %483 = call <2 x float> @_ZL6ImLerpRK6ImVec2S1_f(ptr noundef nonnull align 4 dereferenceable(8) %59, ptr noundef nonnull align 4 dereferenceable(8) %61, float noundef %482)
  store <2 x float> %483, ptr %67, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #1
  %484 = load float, ptr %66, align 4, !tbaa !26
  %485 = load float, ptr %64, align 4, !tbaa !26
  %486 = fadd float %484, %485
  %487 = call <2 x float> @_ZL6ImLerpRK6ImVec2S1_f(ptr noundef nonnull align 4 dereferenceable(8) %59, ptr noundef nonnull align 4 dereferenceable(8) %61, float noundef %486)
  store <2 x float> %487, ptr %68, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #1
  %488 = getelementptr inbounds %struct.ImVec2, ptr %59, i32 0, i32 0
  %489 = load float, ptr %488, align 4, !tbaa !18
  %490 = getelementptr inbounds %struct.ImVec2, ptr %61, i32 0, i32 0
  %491 = load float, ptr %490, align 4, !tbaa !18
  %492 = getelementptr inbounds %struct.ImVec2, ptr %67, i32 0, i32 0
  %493 = load float, ptr %492, align 4, !tbaa !18
  %494 = call noundef float @_ZN11ImCurveEditL10smoothstepEfff(float noundef %489, float noundef %491, float noundef %493)
  store float %494, ptr %69, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #1
  %495 = getelementptr inbounds %struct.ImVec2, ptr %59, i32 0, i32 0
  %496 = load float, ptr %495, align 4, !tbaa !18
  %497 = getelementptr inbounds %struct.ImVec2, ptr %61, i32 0, i32 0
  %498 = load float, ptr %497, align 4, !tbaa !18
  %499 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 0
  %500 = load float, ptr %499, align 4, !tbaa !18
  %501 = call noundef float @_ZN11ImCurveEditL10smoothstepEfff(float noundef %496, float noundef %498, float noundef %500)
  store float %501, ptr %70, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #1
  %502 = getelementptr inbounds %struct.ImVec2, ptr %67, i32 0, i32 0
  %503 = load float, ptr %502, align 4, !tbaa !18
  %504 = getelementptr inbounds %struct.ImVec2, ptr %59, i32 0, i32 1
  %505 = load float, ptr %504, align 4, !tbaa !15
  %506 = getelementptr inbounds %struct.ImVec2, ptr %61, i32 0, i32 1
  %507 = load float, ptr %506, align 4, !tbaa !15
  %508 = load float, ptr %69, align 4, !tbaa !26
  %509 = call noundef float @_ZL6ImLerpIfET_S0_S0_f(float noundef %505, float noundef %507, float noundef %508)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %73, float noundef %503, float noundef %509)
  %510 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %73, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %510, ptr %72, align 4
  %511 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %72, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %511, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #1
  %512 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 0
  %513 = load float, ptr %512, align 4, !tbaa !18
  %514 = getelementptr inbounds %struct.ImVec2, ptr %59, i32 0, i32 1
  %515 = load float, ptr %514, align 4, !tbaa !15
  %516 = getelementptr inbounds %struct.ImVec2, ptr %61, i32 0, i32 1
  %517 = load float, ptr %516, align 4, !tbaa !15
  %518 = load float, ptr %70, align 4, !tbaa !26
  %519 = call noundef float @_ZL6ImLerpIfET_S0_S0_f(float noundef %515, float noundef %517, float noundef %518)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %76, float noundef %513, float noundef %519)
  %520 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %76, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %520, ptr %75, align 4
  %521 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %75, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %521, ptr %74, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #1
  %522 = load ptr, ptr %12, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.ImGuiIO, ptr %522, i32 0, i32 56
  %524 = getelementptr inbounds %struct.ImVec2, ptr %523, i32 0, i32 0
  %525 = load float, ptr %524, align 4, !tbaa !38
  %526 = load ptr, ptr %12, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.ImGuiIO, ptr %526, i32 0, i32 56
  %528 = getelementptr inbounds %struct.ImVec2, ptr %527, i32 0, i32 1
  %529 = load float, ptr %528, align 4, !tbaa !25
  %530 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 0
  %531 = load float, ptr %530, align 4, !tbaa !18
  %532 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 1
  %533 = load float, ptr %532, align 4, !tbaa !15
  %534 = getelementptr inbounds %struct.ImVec2, ptr %74, i32 0, i32 0
  %535 = load float, ptr %534, align 4, !tbaa !18
  %536 = getelementptr inbounds %struct.ImVec2, ptr %74, i32 0, i32 1
  %537 = load float, ptr %536, align 4, !tbaa !15
  %538 = call noundef float @_ZN11ImCurveEditL8distanceEffffff(float noundef %525, float noundef %529, float noundef %531, float noundef %533, float noundef %535, float noundef %537)
  %539 = fcmp olt float %538, 8.000000e+00
  br i1 %539, label %540, label %546

540:                                              ; preds = %477
  %541 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !27, !range !28, !noundef !29
  %542 = trunc i8 %541 to i1
  br i1 %542, label %546, label %543

543:                                              ; preds = %540
  %544 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %544, ptr %47, align 4, !tbaa !9
  %545 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %545, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  store i8 1, ptr %46, align 1, !tbaa !27
  br label %546

546:                                              ; preds = %543, %540, %477
  %547 = load ptr, ptr %14, align 8, !tbaa !5
  %548 = load i32, ptr %57, align 4, !tbaa !9
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %547, ptr noundef nonnull align 4 dereferenceable(8) %71, ptr noundef nonnull align 4 dereferenceable(8) %74, i32 noundef %548, float noundef 0x3FF4CCCCC0000000)
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #1
  br label %549

549:                                              ; preds = %546
  %550 = load i64, ptr %65, align 8, !tbaa !30
  %551 = add i64 %550, 1
  store i64 %551, ptr %65, align 8, !tbaa !30
  br label %471, !llvm.loop !39

552:                                              ; preds = %476
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #1
  br label %613

553:                                              ; preds = %458
  %554 = load i32, ptr %55, align 4, !tbaa !35
  %555 = icmp eq i32 %554, 1
  br i1 %555, label %556, label %612

556:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #1
  %557 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %59, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %557, ptr %78, align 4
  %558 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %78, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %558, ptr %77, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #1
  %559 = getelementptr inbounds %struct.ImVec2, ptr %61, i32 0, i32 0
  %560 = load float, ptr %559, align 4, !tbaa !18
  %561 = getelementptr inbounds %struct.ImVec2, ptr %59, i32 0, i32 1
  %562 = load float, ptr %561, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %81, float noundef %560, float noundef %562)
  %563 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %81, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %563, ptr %80, align 4
  %564 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %80, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %564, ptr %79, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #1
  %565 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %61, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %565, ptr %83, align 4
  %566 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %83, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %566, ptr %82, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #1
  %567 = load ptr, ptr %14, align 8, !tbaa !5
  %568 = load i32, ptr %57, align 4, !tbaa !9
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %567, ptr noundef nonnull align 4 dereferenceable(8) %77, ptr noundef nonnull align 4 dereferenceable(8) %79, i32 noundef %568, float noundef 0x3FF4CCCCC0000000)
  %569 = load ptr, ptr %14, align 8, !tbaa !5
  %570 = load i32, ptr %57, align 4, !tbaa !9
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %569, ptr noundef nonnull align 4 dereferenceable(8) %79, ptr noundef nonnull align 4 dereferenceable(8) %82, i32 noundef %570, float noundef 0x3FF4CCCCC0000000)
  %571 = load ptr, ptr %12, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.ImGuiIO, ptr %571, i32 0, i32 56
  %573 = getelementptr inbounds %struct.ImVec2, ptr %572, i32 0, i32 0
  %574 = load float, ptr %573, align 4, !tbaa !38
  %575 = load ptr, ptr %12, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.ImGuiIO, ptr %575, i32 0, i32 56
  %577 = getelementptr inbounds %struct.ImVec2, ptr %576, i32 0, i32 1
  %578 = load float, ptr %577, align 4, !tbaa !25
  %579 = getelementptr inbounds %struct.ImVec2, ptr %77, i32 0, i32 0
  %580 = load float, ptr %579, align 4, !tbaa !18
  %581 = getelementptr inbounds %struct.ImVec2, ptr %77, i32 0, i32 1
  %582 = load float, ptr %581, align 4, !tbaa !15
  %583 = getelementptr inbounds %struct.ImVec2, ptr %82, i32 0, i32 0
  %584 = load float, ptr %583, align 4, !tbaa !18
  %585 = getelementptr inbounds %struct.ImVec2, ptr %77, i32 0, i32 1
  %586 = load float, ptr %585, align 4, !tbaa !15
  %587 = call noundef float @_ZN11ImCurveEditL8distanceEffffff(float noundef %574, float noundef %578, float noundef %580, float noundef %582, float noundef %584, float noundef %586)
  %588 = fcmp olt float %587, 8.000000e+00
  br i1 %588, label %608, label %589

589:                                              ; preds = %556
  %590 = load ptr, ptr %12, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.ImGuiIO, ptr %590, i32 0, i32 56
  %592 = getelementptr inbounds %struct.ImVec2, ptr %591, i32 0, i32 0
  %593 = load float, ptr %592, align 4, !tbaa !38
  %594 = load ptr, ptr %12, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.ImGuiIO, ptr %594, i32 0, i32 56
  %596 = getelementptr inbounds %struct.ImVec2, ptr %595, i32 0, i32 1
  %597 = load float, ptr %596, align 4, !tbaa !25
  %598 = getelementptr inbounds %struct.ImVec2, ptr %82, i32 0, i32 0
  %599 = load float, ptr %598, align 4, !tbaa !18
  %600 = getelementptr inbounds %struct.ImVec2, ptr %77, i32 0, i32 1
  %601 = load float, ptr %600, align 4, !tbaa !15
  %602 = getelementptr inbounds %struct.ImVec2, ptr %82, i32 0, i32 0
  %603 = load float, ptr %602, align 4, !tbaa !18
  %604 = getelementptr inbounds %struct.ImVec2, ptr %82, i32 0, i32 1
  %605 = load float, ptr %604, align 4, !tbaa !15
  %606 = call noundef float @_ZN11ImCurveEditL8distanceEffffff(float noundef %593, float noundef %597, float noundef %599, float noundef %601, float noundef %603, float noundef %605)
  %607 = fcmp olt float %606, 8.000000e+00
  br i1 %607, label %608, label %611

608:                                              ; preds = %589, %556
  %609 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %609, ptr %47, align 4, !tbaa !9
  %610 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %610, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  store i8 1, ptr %46, align 1, !tbaa !27
  br label %611

611:                                              ; preds = %608, %589
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #1
  br label %612

612:                                              ; preds = %611, %553
  br label %613

613:                                              ; preds = %612, %552
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #1
  br label %614

614:                                              ; preds = %613
  %615 = load i64, ptr %58, align 8, !tbaa !30
  %616 = add i64 %615, 1
  store i64 %616, ptr %58, align 8, !tbaa !30
  br label %438, !llvm.loop !40

617:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #1
  store i64 0, ptr %84, align 8, !tbaa !30
  br label %618

618:                                              ; preds = %696, %617
  %619 = load i64, ptr %84, align 8, !tbaa !30
  %620 = load i64, ptr %54, align 8, !tbaa !30
  %621 = icmp ult i64 %619, %620
  br i1 %621, label %623, label %622

622:                                              ; preds = %618
  store i32 14, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #1
  br label %699

623:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #1
  %624 = load ptr, ptr %14, align 8, !tbaa !5
  %625 = load ptr, ptr %56, align 8, !tbaa !5
  %626 = load i64, ptr %84, align 8, !tbaa !30
  %627 = getelementptr inbounds %struct.ImVec2, ptr %625, i64 %626
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %87, ptr align 4 %627, i64 8, i1 false), !tbaa.struct !37
  %628 = load <2 x float>, ptr %87, align 4
  %629 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %38, <2 x float> %628)
  store <2 x float> %629, ptr %86, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %88, ptr align 4 %32, i64 8, i1 false), !tbaa.struct !37
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %89, ptr align 4 %15, i64 8, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #1
  %630 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %91, i32 0, i32 0
  %631 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %631, ptr %630, align 4, !tbaa !41
  %632 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %91, i32 0, i32 1
  %633 = load i64, ptr %84, align 8, !tbaa !30
  %634 = trunc i64 %633 to i32
  store i32 %634, ptr %632, align 4, !tbaa !43
  %635 = call ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4findERKS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %91)
  %636 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %90, i32 0, i32 0
  store ptr %635, ptr %636, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #1
  %637 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %638 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %92, i32 0, i32 0
  store ptr %637, ptr %638, align 8
  %639 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef nonnull align 8 dereferenceable(8) %92) #1
  br i1 %639, label %640, label %647

640:                                              ; preds = %623
  %641 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %642 = icmp eq i32 %641, -1
  br i1 %642, label %643, label %647

643:                                              ; preds = %640
  %644 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !27, !range !28, !noundef !29
  %645 = trunc i8 %644 to i1
  %646 = xor i1 %645, true
  br label %647

647:                                              ; preds = %643, %640, %623
  %648 = phi i1 [ false, %640 ], [ false, %623 ], [ %646, %643 ]
  %649 = load <2 x float>, ptr %86, align 4
  %650 = load <2 x float>, ptr %88, align 4
  %651 = load <2 x float>, ptr %89, align 4
  %652 = call noundef i32 @_ZN11ImCurveEditL9DrawPointEP10ImDrawList6ImVec2S2_S2_b(ptr noundef %624, <2 x float> %649, <2 x float> %650, <2 x float> %651, i1 noundef zeroext %648)
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #1
  store i32 %652, ptr %85, align 4, !tbaa !9
  %653 = load i32, ptr %85, align 4, !tbaa !9
  %654 = icmp ne i32 %653, 0
  br i1 %654, label %655, label %695

655:                                              ; preds = %647
  %656 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %657 = icmp eq i32 %656, -1
  br i1 %657, label %658, label %695

658:                                              ; preds = %655
  %659 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27, !range !28, !noundef !29
  %660 = trunc i8 %659 to i1
  br i1 %660, label %695, label %661

661:                                              ; preds = %658
  store i8 1, ptr %46, align 1, !tbaa !27
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !27
  store i32 -1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %662 = load i32, ptr %85, align 4, !tbaa !9
  %663 = icmp eq i32 %662, 2
  br i1 %663, label %664, label %694

664:                                              ; preds = %661
  %665 = load ptr, ptr %12, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.ImGuiIO, ptr %665, i32 0, i32 61
  %667 = load i8, ptr %666, align 1, !tbaa !44, !range !28, !noundef !29
  %668 = trunc i8 %667 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #1
  br i1 %668, label %680, label %669

669:                                              ; preds = %664
  %670 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %94, i32 0, i32 0
  %671 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %671, ptr %670, align 4, !tbaa !41
  %672 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %94, i32 0, i32 1
  %673 = load i64, ptr %84, align 8, !tbaa !30
  %674 = trunc i64 %673 to i32
  store i32 %674, ptr %672, align 4, !tbaa !43
  %675 = call ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4findERKS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %94)
  %676 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %93, i32 0, i32 0
  store ptr %675, ptr %676, align 8
  %677 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %678 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %95, i32 0, i32 0
  store ptr %677, ptr %678, align 8
  %679 = call noundef zeroext i1 @_ZSteqRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(8) %95) #1
  br label %680

680:                                              ; preds = %669, %664
  %681 = phi i1 [ false, %664 ], [ %679, %669 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #1
  br i1 %681, label %682, label %683

682:                                              ; preds = %680
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  br label %683

683:                                              ; preds = %682, %680
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #1
  %684 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %96, i32 0, i32 0
  %685 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %685, ptr %684, align 4, !tbaa !41
  %686 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %96, i32 0, i32 1
  %687 = load i64, ptr %84, align 8, !tbaa !30
  %688 = trunc i64 %687 to i32
  store i32 %688, ptr %686, align 4, !tbaa !43
  %689 = call { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %96)
  %690 = getelementptr inbounds { ptr, i8 }, ptr %97, i32 0, i32 0
  %691 = extractvalue { ptr, i8 } %689, 0
  store ptr %691, ptr %690, align 8
  %692 = getelementptr inbounds { ptr, i8 }, ptr %97, i32 0, i32 1
  %693 = extractvalue { ptr, i8 } %689, 1
  store i8 %693, ptr %692, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #1
  br label %694

694:                                              ; preds = %683, %661
  br label %695

695:                                              ; preds = %694, %658, %655, %647
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #1
  br label %696

696:                                              ; preds = %695
  %697 = load i64, ptr %84, align 8, !tbaa !30
  %698 = add i64 %697, 1
  store i64 %698, ptr %84, align 8, !tbaa !30
  br label %618, !llvm.loop !45

699:                                              ; preds = %622
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #1
  store i32 0, ptr %52, align 4
  br label %700

700:                                              ; preds = %699, %408
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #1
  br label %701

701:                                              ; preds = %700, %397
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #1
  br label %702

702:                                              ; preds = %701, %386
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #1
  %703 = load i32, ptr %52, align 4
  switch i32 %703, label %1183 [
    i32 0, label %704
    i32 7, label %705
  ]

704:                                              ; preds = %702
  br label %705

705:                                              ; preds = %704, %702
  %706 = load i64, ptr %51, align 8, !tbaa !30
  %707 = add i64 %706, 1
  store i64 %707, ptr %51, align 8, !tbaa !30
  br label %369, !llvm.loop !46

708:                                              ; preds = %373
  %709 = load i32, ptr %47, align 4, !tbaa !9
  %710 = icmp eq i32 %709, -1
  br i1 %710, label %711, label %712

711:                                              ; preds = %708
  store i32 -1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  br label %712

712:                                              ; preds = %711, %708
  %713 = load atomic i8, ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints acquire, align 8
  %714 = icmp eq i8 %713, 0
  br i1 %714, label %715, label %720, !prof !11

715:                                              ; preds = %712
  %716 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints) #1
  %717 = icmp ne i32 %716, 0
  br i1 %717, label %718, label %720

718:                                              ; preds = %715
  call void @_ZNSt6vectorI6ImVec2SaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints) #1
  %719 = call i32 @__cxa_atexit(ptr @_ZNSt6vectorI6ImVec2SaIS0_EED2Ev, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, ptr @__dso_handle) #1
  call void @__cxa_guard_release(ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints) #1
  br label %720

720:                                              ; preds = %718, %715, %712
  %721 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !27, !range !28, !noundef !29
  %722 = trunc i8 %721 to i1
  br i1 %722, label %723, label %877

723:                                              ; preds = %720
  %724 = load ptr, ptr %12, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.ImGuiIO, ptr %724, i32 0, i32 57
  %726 = getelementptr inbounds [5 x i8], ptr %725, i64 0, i64 0
  %727 = load i8, ptr %726, align 4, !tbaa !27, !range !28, !noundef !29
  %728 = trunc i8 %727 to i1
  br i1 %728, label %729, label %877

729:                                              ; preds = %723
  %730 = load ptr, ptr %12, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.ImGuiIO, ptr %730, i32 0, i32 52
  %732 = getelementptr inbounds %struct.ImVec2, ptr %731, i32 0, i32 0
  %733 = load float, ptr %732, align 8, !tbaa !47
  %734 = call float @llvm.fabs.f32(float %733)
  %735 = fcmp ogt float %734, 0.000000e+00
  br i1 %735, label %743, label %736

736:                                              ; preds = %729
  %737 = load ptr, ptr %12, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.ImGuiIO, ptr %737, i32 0, i32 52
  %739 = getelementptr inbounds %struct.ImVec2, ptr %738, i32 0, i32 1
  %740 = load float, ptr %739, align 4, !tbaa !32
  %741 = call float @llvm.fabs.f32(float %740)
  %742 = fcmp ogt float %741, 0.000000e+00
  br i1 %742, label %743, label %876

743:                                              ; preds = %736, %729
  %744 = call noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  br i1 %744, label %876, label %745

745:                                              ; preds = %743
  %746 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27, !range !28, !noundef !29
  %747 = trunc i8 %746 to i1
  br i1 %747, label %787, label %748

748:                                              ; preds = %745
  %749 = load ptr, ptr %6, align 8, !tbaa !5
  %750 = load ptr, ptr %749, align 8, !tbaa !19
  %751 = getelementptr inbounds ptr, ptr %750, i64 11
  %752 = load ptr, ptr %751, align 8
  call void %752(ptr noundef nonnull align 8 dereferenceable(9) %749, i32 noundef 0)
  %753 = load ptr, ptr %12, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.ImGuiIO, ptr %753, i32 0, i32 56
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin, ptr align 4 %754, i64 8, i1 false), !tbaa.struct !37
  %755 = call noundef i64 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  call void @_ZNSt6vectorI6ImVec2SaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %755)
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #1
  store i32 0, ptr %98, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #1
  store ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr %99, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #1
  %756 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %757 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %100, i32 0, i32 0
  store ptr %756, ptr %757, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #1
  %758 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %759 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %101, i32 0, i32 0
  store ptr %758, ptr %759, align 8
  br label %760

760:                                              ; preds = %784, %748
  %761 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef nonnull align 8 dereferenceable(8) %101) #1
  br i1 %761, label %763, label %762

762:                                              ; preds = %760
  store i32 17, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #1
  br label %786

763:                                              ; preds = %760
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #1
  %764 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %100) #1
  store ptr %764, ptr %102, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #1
  %765 = load ptr, ptr %6, align 8, !tbaa !5
  %766 = load ptr, ptr %102, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %766, i32 0, i32 0
  %768 = load i32, ptr %767, align 4, !tbaa !41
  %769 = sext i32 %768 to i64
  %770 = load ptr, ptr %765, align 8, !tbaa !19
  %771 = getelementptr inbounds ptr, ptr %770, i64 7
  %772 = load ptr, ptr %771, align 8
  %773 = call noundef ptr %772(ptr noundef nonnull align 8 dereferenceable(9) %765, i64 noundef %769)
  store ptr %773, ptr %103, align 8, !tbaa !5
  %774 = load ptr, ptr %103, align 8, !tbaa !5
  %775 = load ptr, ptr %102, align 8, !tbaa !5
  %776 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %775, i32 0, i32 1
  %777 = load i32, ptr %776, align 4, !tbaa !43
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds %struct.ImVec2, ptr %774, i64 %778
  %780 = load i32, ptr %98, align 4, !tbaa !9
  %781 = add nsw i32 %780, 1
  store i32 %781, ptr %98, align 4, !tbaa !9
  %782 = sext i32 %780 to i64
  %783 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %782) #1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %783, ptr align 4 %779, i64 8, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #1
  br label %784

784:                                              ; preds = %763
  %785 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %100) #1
  br label %760

786:                                              ; preds = %762
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #1
  br label %787

787:                                              ; preds = %786, %745
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27
  store i32 1, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %104) #1
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2ERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %104, ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection)
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #1
  store i32 0, ptr %105, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #1
  store ptr %104, ptr %106, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #1
  %788 = load ptr, ptr %106, align 8, !tbaa !5
  %789 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %788) #1
  %790 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %107, i32 0, i32 0
  store ptr %789, ptr %790, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #1
  %791 = load ptr, ptr %106, align 8, !tbaa !5
  %792 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %791) #1
  %793 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %108, i32 0, i32 0
  store ptr %792, ptr %793, align 8
  br label %794

794:                                              ; preds = %871, %787
  %795 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef nonnull align 8 dereferenceable(8) %108) #1
  br i1 %795, label %797, label %796

796:                                              ; preds = %794
  store i32 19, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #1
  br label %875

797:                                              ; preds = %794
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #1
  %798 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %107) #1
  store ptr %798, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #1
  %799 = load i32, ptr %105, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %800) #1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %113, ptr align 4 %801, i64 8, i1 false), !tbaa.struct !37
  %802 = load <2 x float>, ptr %113, align 4
  %803 = invoke <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %38, <2 x float> %802)
          to label %804 unwind label %851

804:                                              ; preds = %797
  store <2 x float> %803, ptr %112, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #1
  %805 = load ptr, ptr %12, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.ImGuiIO, ptr %805, i32 0, i32 56
  %807 = invoke <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %806, ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin)
          to label %808 unwind label %855

808:                                              ; preds = %804
  store <2 x float> %807, ptr %117, align 4
  %809 = invoke <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %117, ptr noundef nonnull align 4 dereferenceable(8) %33)
          to label %810 unwind label %855

810:                                              ; preds = %808
  store <2 x float> %809, ptr %116, align 4
  %811 = invoke <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %112, ptr noundef nonnull align 4 dereferenceable(8) %116)
          to label %812 unwind label %855

812:                                              ; preds = %810
  store <2 x float> %811, ptr %111, align 4
  %813 = load <2 x float>, ptr %111, align 4
  %814 = invoke <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %39, <2 x float> %813)
          to label %815 unwind label %855

815:                                              ; preds = %812
  store <2 x float> %814, ptr %110, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #1
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #1
  %816 = load ptr, ptr %6, align 8, !tbaa !5
  %817 = load ptr, ptr %109, align 8, !tbaa !5
  %818 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %817, i32 0, i32 0
  %819 = load i32, ptr %818, align 4, !tbaa !41
  %820 = sext i32 %819 to i64
  %821 = load ptr, ptr %109, align 8, !tbaa !5
  %822 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %821, i32 0, i32 1
  %823 = load i32, ptr %822, align 4, !tbaa !43
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %119, ptr align 4 %110, i64 8, i1 false), !tbaa.struct !37
  %824 = load <2 x float>, ptr %119, align 4
  %825 = load ptr, ptr %816, align 8, !tbaa !19
  %826 = getelementptr inbounds ptr, ptr %825, i64 8
  %827 = load ptr, ptr %826, align 8
  %828 = invoke noundef i32 %827(ptr noundef nonnull align 8 dereferenceable(9) %816, i64 noundef %820, i32 noundef %823, <2 x float> %824)
          to label %829 unwind label %860

829:                                              ; preds = %815
  store i32 %828, ptr %118, align 4, !tbaa !9
  %830 = load i32, ptr %118, align 4, !tbaa !9
  %831 = load ptr, ptr %109, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %831, i32 0, i32 1
  %833 = load i32, ptr %832, align 4, !tbaa !43
  %834 = icmp ne i32 %830, %833
  br i1 %834, label %835, label %868

835:                                              ; preds = %829
  %836 = load ptr, ptr %109, align 8, !tbaa !5
  %837 = invoke noundef i64 @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5eraseERKS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %836)
          to label %838 unwind label %860

838:                                              ; preds = %835
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #1
  %839 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %120, i32 0, i32 0
  %840 = load ptr, ptr %109, align 8, !tbaa !5
  %841 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %840, i32 0, i32 0
  %842 = load i32, ptr %841, align 4, !tbaa !41
  store i32 %842, ptr %839, align 4, !tbaa !41
  %843 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %120, i32 0, i32 1
  %844 = load i32, ptr %118, align 4, !tbaa !9
  store i32 %844, ptr %843, align 4, !tbaa !43
  %845 = invoke { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %120)
          to label %846 unwind label %864

846:                                              ; preds = %838
  %847 = getelementptr inbounds { ptr, i8 }, ptr %121, i32 0, i32 0
  %848 = extractvalue { ptr, i8 } %845, 0
  store ptr %848, ptr %847, align 8
  %849 = getelementptr inbounds { ptr, i8 }, ptr %121, i32 0, i32 1
  %850 = extractvalue { ptr, i8 } %845, 1
  store i8 %850, ptr %849, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #1
  br label %868

851:                                              ; preds = %797
  %852 = landingpad { ptr, i32 }
          cleanup
  %853 = extractvalue { ptr, i32 } %852, 0
  store ptr %853, ptr %114, align 8
  %854 = extractvalue { ptr, i32 } %852, 1
  store i32 %854, ptr %115, align 4
  br label %859

855:                                              ; preds = %812, %810, %808, %804
  %856 = landingpad { ptr, i32 }
          cleanup
  %857 = extractvalue { ptr, i32 } %856, 0
  store ptr %857, ptr %114, align 8
  %858 = extractvalue { ptr, i32 } %856, 1
  store i32 %858, ptr %115, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #1
  br label %859

859:                                              ; preds = %855, %851
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #1
  br label %874

860:                                              ; preds = %835, %815
  %861 = landingpad { ptr, i32 }
          cleanup
  %862 = extractvalue { ptr, i32 } %861, 0
  store ptr %862, ptr %114, align 8
  %863 = extractvalue { ptr, i32 } %861, 1
  store i32 %863, ptr %115, align 4
  br label %873

864:                                              ; preds = %838
  %865 = landingpad { ptr, i32 }
          cleanup
  %866 = extractvalue { ptr, i32 } %865, 0
  store ptr %866, ptr %114, align 8
  %867 = extractvalue { ptr, i32 } %865, 1
  store i32 %867, ptr %115, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #1
  br label %873

868:                                              ; preds = %846, %829
  %869 = load i32, ptr %105, align 4, !tbaa !9
  %870 = add nsw i32 %869, 1
  store i32 %870, ptr %105, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #1
  br label %871

871:                                              ; preds = %868
  %872 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %107) #1
  br label %794

873:                                              ; preds = %864, %860
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #1
  br label %874

874:                                              ; preds = %873, %859
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #1
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %104) #1
  call void @llvm.lifetime.end.p0(i64 48, ptr %104) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #1
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #1
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #1
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #1
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #1
  br label %1178

875:                                              ; preds = %796
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #1
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %104) #1
  call void @llvm.lifetime.end.p0(i64 48, ptr %104) #1
  br label %876

876:                                              ; preds = %875, %743, %736
  br label %877

877:                                              ; preds = %876, %723, %720
  %878 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !27, !range !28, !noundef !29
  %879 = trunc i8 %878 to i1
  br i1 %879, label %880, label %895

880:                                              ; preds = %877
  %881 = load ptr, ptr %12, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.ImGuiIO, ptr %881, i32 0, i32 57
  %883 = getelementptr inbounds [5 x i8], ptr %882, i64 0, i64 0
  %884 = load i8, ptr %883, align 4, !tbaa !27, !range !28, !noundef !29
  %885 = trunc i8 %884 to i1
  br i1 %885, label %895, label %886

886:                                              ; preds = %880
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !27
  %887 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27, !range !28, !noundef !29
  %888 = trunc i8 %887 to i1
  br i1 %888, label %889, label %894

889:                                              ; preds = %886
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27
  %890 = load ptr, ptr %6, align 8, !tbaa !5
  %891 = load ptr, ptr %890, align 8, !tbaa !19
  %892 = getelementptr inbounds ptr, ptr %891, i64 12
  %893 = load ptr, ptr %892, align 8
  call void %893(ptr noundef nonnull align 8 dereferenceable(9) %890)
  br label %894

894:                                              ; preds = %889, %886
  br label %895

895:                                              ; preds = %894, %880, %877
  %896 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %897 = icmp ne i32 %896, -1
  br i1 %897, label %898, label %927

898:                                              ; preds = %895
  %899 = load ptr, ptr %12, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.ImGuiIO, ptr %899, i32 0, i32 71
  %901 = getelementptr inbounds [5 x i8], ptr %900, i64 0, i64 0
  %902 = load i8, ptr %901, align 1, !tbaa !27, !range !28, !noundef !29
  %903 = trunc i8 %902 to i1
  br i1 %903, label %904, label %927

904:                                              ; preds = %898
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #1
  %905 = load ptr, ptr %12, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.ImGuiIO, ptr %905, i32 0, i32 56
  %907 = call <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %906, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %907, ptr %124, align 4
  %908 = call <2 x float> @_ZN11ImCurveEditdvERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %124, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %908, ptr %123, align 4
  %909 = load <2 x float>, ptr %123, align 4
  %910 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %39, <2 x float> %909)
  store <2 x float> %910, ptr %122, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #1
  %911 = load ptr, ptr %6, align 8, !tbaa !5
  %912 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %913 = load ptr, ptr %911, align 8, !tbaa !19
  %914 = getelementptr inbounds ptr, ptr %913, i64 11
  %915 = load ptr, ptr %914, align 8
  call void %915(ptr noundef nonnull align 8 dereferenceable(9) %911, i32 noundef %912)
  %916 = load ptr, ptr %6, align 8, !tbaa !5
  %917 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %918 = sext i32 %917 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %125, ptr align 4 %122, i64 8, i1 false), !tbaa.struct !37
  %919 = load <2 x float>, ptr %125, align 4
  %920 = load ptr, ptr %916, align 8, !tbaa !19
  %921 = getelementptr inbounds ptr, ptr %920, i64 9
  %922 = load ptr, ptr %921, align 8
  call void %922(ptr noundef nonnull align 8 dereferenceable(9) %916, i64 noundef %918, <2 x float> %919)
  %923 = load ptr, ptr %6, align 8, !tbaa !5
  %924 = load ptr, ptr %923, align 8, !tbaa !19
  %925 = getelementptr inbounds ptr, ptr %924, i64 12
  %926 = load ptr, ptr %925, align 8
  call void %926(ptr noundef nonnull align 8 dereferenceable(9) %923)
  store i32 1, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #1
  br label %927

927:                                              ; preds = %904, %898, %895
  %928 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %929 = icmp ne i32 %928, -1
  br i1 %929, label %930, label %1013

930:                                              ; preds = %927
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #1
  %931 = load ptr, ptr %6, align 8, !tbaa !5
  %932 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %933 = sext i32 %932 to i64
  %934 = load ptr, ptr %931, align 8, !tbaa !19
  %935 = getelementptr inbounds ptr, ptr %934, i64 5
  %936 = load ptr, ptr %935, align 8
  %937 = call noundef i64 %936(ptr noundef nonnull align 8 dereferenceable(9) %931, i64 noundef %933)
  store i64 %937, ptr %126, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #1
  %938 = load ptr, ptr %6, align 8, !tbaa !5
  %939 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = load ptr, ptr %938, align 8, !tbaa !19
  %942 = getelementptr inbounds ptr, ptr %941, i64 7
  %943 = load ptr, ptr %942, align 8
  %944 = call noundef ptr %943(ptr noundef nonnull align 8 dereferenceable(9) %938, i64 noundef %940)
  store ptr %944, ptr %127, align 8, !tbaa !5
  %945 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27, !range !28, !noundef !29
  %946 = trunc i8 %945 to i1
  br i1 %946, label %966, label %947

947:                                              ; preds = %930
  %948 = load ptr, ptr %12, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.ImGuiIO, ptr %948, i32 0, i32 56
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin, ptr align 4 %949, i64 8, i1 false), !tbaa.struct !37
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27
  %950 = load i64, ptr %126, align 8, !tbaa !30
  call void @_ZNSt6vectorI6ImVec2SaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %950)
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #1
  store i64 0, ptr %128, align 8, !tbaa !30
  br label %951

951:                                              ; preds = %962, %947
  %952 = load i64, ptr %128, align 8, !tbaa !30
  %953 = load i64, ptr %126, align 8, !tbaa !30
  %954 = icmp ult i64 %952, %953
  br i1 %954, label %956, label %955

955:                                              ; preds = %951
  store i32 21, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #1
  br label %965

956:                                              ; preds = %951
  %957 = load ptr, ptr %127, align 8, !tbaa !5
  %958 = load i64, ptr %128, align 8, !tbaa !30
  %959 = getelementptr inbounds %struct.ImVec2, ptr %957, i64 %958
  %960 = load i64, ptr %128, align 8, !tbaa !30
  %961 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %960) #1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %961, ptr align 4 %959, i64 8, i1 false), !tbaa.struct !37
  br label %962

962:                                              ; preds = %956
  %963 = load i64, ptr %128, align 8, !tbaa !30
  %964 = add i64 %963, 1
  store i64 %964, ptr %128, align 8, !tbaa !30
  br label %951, !llvm.loop !48

965:                                              ; preds = %955
  br label %966

966:                                              ; preds = %965, %930
  %967 = load i64, ptr %126, align 8, !tbaa !30
  %968 = icmp uge i64 %967, 1
  br i1 %968, label %969, label %1001

969:                                              ; preds = %966
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #1
  store i64 0, ptr %129, align 8, !tbaa !30
  br label %970

970:                                              ; preds = %997, %969
  %971 = load i64, ptr %129, align 8, !tbaa !30
  %972 = load i64, ptr %126, align 8, !tbaa !30
  %973 = icmp ult i64 %971, %972
  br i1 %973, label %975, label %974

974:                                              ; preds = %970
  store i32 24, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #1
  br label %1000

975:                                              ; preds = %970
  %976 = load ptr, ptr %6, align 8, !tbaa !5
  %977 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %978 = sext i32 %977 to i64
  %979 = load i64, ptr %129, align 8, !tbaa !30
  %980 = trunc i64 %979 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #1
  %981 = load i64, ptr %129, align 8, !tbaa !30
  %982 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %981) #1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %133, ptr align 4 %982, i64 8, i1 false), !tbaa.struct !37
  %983 = load <2 x float>, ptr %133, align 4
  %984 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %38, <2 x float> %983)
  store <2 x float> %984, ptr %132, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #1
  %985 = load ptr, ptr %12, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.ImGuiIO, ptr %985, i32 0, i32 56
  %987 = call <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %986, ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin)
  store <2 x float> %987, ptr %135, align 4
  %988 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %135, ptr noundef nonnull align 4 dereferenceable(8) %33)
  store <2 x float> %988, ptr %134, align 4
  %989 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %132, ptr noundef nonnull align 4 dereferenceable(8) %134)
  store <2 x float> %989, ptr %131, align 4
  %990 = load <2 x float>, ptr %131, align 4
  %991 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %39, <2 x float> %990)
  store <2 x float> %991, ptr %130, align 4
  %992 = load <2 x float>, ptr %130, align 4
  %993 = load ptr, ptr %976, align 8, !tbaa !19
  %994 = getelementptr inbounds ptr, ptr %993, i64 8
  %995 = load ptr, ptr %994, align 8
  %996 = call noundef i32 %995(ptr noundef nonnull align 8 dereferenceable(9) %976, i64 noundef %978, i32 noundef %980, <2 x float> %992)
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #1
  br label %997

997:                                              ; preds = %975
  %998 = load i64, ptr %129, align 8, !tbaa !30
  %999 = add i64 %998, 1
  store i64 %999, ptr %129, align 8, !tbaa !30
  br label %970, !llvm.loop !49

1000:                                             ; preds = %974
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %1001

1001:                                             ; preds = %1000, %966
  %1002 = load ptr, ptr %12, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.ImGuiIO, ptr %1002, i32 0, i32 57
  %1004 = getelementptr inbounds [5 x i8], ptr %1003, i64 0, i64 0
  %1005 = load i8, ptr %1004, align 4, !tbaa !27, !range !28, !noundef !29
  %1006 = trunc i8 %1005 to i1
  br i1 %1006, label %1012, label %1007

1007:                                             ; preds = %1001
  store i32 -1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !27
  %1008 = load ptr, ptr %6, align 8, !tbaa !5
  %1009 = load ptr, ptr %1008, align 8, !tbaa !19
  %1010 = getelementptr inbounds ptr, ptr %1009, i64 12
  %1011 = load ptr, ptr %1010, align 8
  call void %1011(ptr noundef nonnull align 8 dereferenceable(9) %1008)
  br label %1012

1012:                                             ; preds = %1007, %1001
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #1
  br label %1013

1013:                                             ; preds = %1012, %927
  %1014 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %1015 = icmp eq i32 %1014, -1
  br i1 %1015, label %1016, label %1033

1016:                                             ; preds = %1013
  %1017 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %1018 = icmp ne i32 %1017, -1
  br i1 %1018, label %1019, label %1033

1019:                                             ; preds = %1016
  %1020 = call noundef zeroext i1 @_ZN5ImGui14IsMouseClickedEib(i32 noundef 0, i1 noundef zeroext false)
  br i1 %1020, label %1021, label %1033

1021:                                             ; preds = %1019
  %1022 = call noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  br i1 %1022, label %1023, label %1033

1023:                                             ; preds = %1021
  %1024 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27, !range !28, !noundef !29
  %1025 = trunc i8 %1024 to i1
  br i1 %1025, label %1033, label %1026

1026:                                             ; preds = %1023
  %1027 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  store i32 %1027, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %1028 = load ptr, ptr %6, align 8, !tbaa !5
  %1029 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !9
  %1030 = load ptr, ptr %1028, align 8, !tbaa !19
  %1031 = getelementptr inbounds ptr, ptr %1030, i64 11
  %1032 = load ptr, ptr %1031, align 8
  call void %1032(ptr noundef nonnull align 8 dereferenceable(9) %1028, i32 noundef %1029)
  br label %1033

1033:                                             ; preds = %1026, %1023, %1021, %1019, %1016, %1013
  %1034 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27, !range !28, !noundef !29
  %1035 = trunc i8 %1034 to i1
  br i1 %1035, label %1036, label %1126

1036:                                             ; preds = %1033
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #1
  %1037 = load ptr, ptr %12, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.ImGuiIO, ptr %1037, i32 0, i32 56
  %1039 = call <2 x float> @_ZL5ImMinRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection, ptr noundef nonnull align 4 dereferenceable(8) %1038)
  store <2 x float> %1039, ptr %136, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #1
  %1040 = load ptr, ptr %12, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.ImGuiIO, ptr %1040, i32 0, i32 56
  %1042 = call <2 x float> @_ZL5ImMaxRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection, ptr noundef nonnull align 4 dereferenceable(8) %1041)
  store <2 x float> %1042, ptr %137, align 4
  %1043 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %1043, ptr noundef nonnull align 4 dereferenceable(8) %136, ptr noundef nonnull align 4 dereferenceable(8) %137, i32 noundef 1090453504, float noundef 1.000000e+00, i32 noundef 0)
  %1044 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196) %1044, ptr noundef nonnull align 4 dereferenceable(8) %136, ptr noundef nonnull align 4 dereferenceable(8) %137, i32 noundef -65536, float noundef 1.000000e+00, i32 noundef 0, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr %138) #1
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %138, ptr noundef nonnull align 4 dereferenceable(8) %136, ptr noundef nonnull align 4 dereferenceable(8) %137)
  %1045 = load ptr, ptr %12, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.ImGuiIO, ptr %1045, i32 0, i32 57
  %1047 = getelementptr inbounds [5 x i8], ptr %1046, i64 0, i64 0
  %1048 = load i8, ptr %1047, align 4, !tbaa !27, !range !28, !noundef !29
  %1049 = trunc i8 %1048 to i1
  br i1 %1049, label %1125, label %1050

1050:                                             ; preds = %1036
  %1051 = load ptr, ptr %12, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.ImGuiIO, ptr %1051, i32 0, i32 61
  %1053 = load i8, ptr %1052, align 1, !tbaa !44, !range !28, !noundef !29
  %1054 = trunc i8 %1053 to i1
  br i1 %1054, label %1056, label %1055

1055:                                             ; preds = %1050
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  br label %1056

1056:                                             ; preds = %1055, %1050
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #1
  store i64 0, ptr %139, align 8, !tbaa !30
  br label %1057

1057:                                             ; preds = %1121, %1056
  %1058 = load i64, ptr %139, align 8, !tbaa !30
  %1059 = load i64, ptr %35, align 8, !tbaa !30
  %1060 = icmp ult i64 %1058, %1059
  br i1 %1060, label %1062, label %1061

1061:                                             ; preds = %1057
  store i32 27, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #1
  br label %1124

1062:                                             ; preds = %1057
  %1063 = load ptr, ptr %6, align 8, !tbaa !5
  %1064 = load i64, ptr %139, align 8, !tbaa !30
  %1065 = load ptr, ptr %1063, align 8, !tbaa !19
  %1066 = getelementptr inbounds ptr, ptr %1065, i64 1
  %1067 = load ptr, ptr %1066, align 8
  %1068 = call noundef zeroext i1 %1067(ptr noundef nonnull align 8 dereferenceable(9) %1063, i64 noundef %1064)
  br i1 %1068, label %1070, label %1069

1069:                                             ; preds = %1062
  br label %1121

1070:                                             ; preds = %1062
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #1
  %1071 = load ptr, ptr %6, align 8, !tbaa !5
  %1072 = load i64, ptr %139, align 8, !tbaa !30
  %1073 = load ptr, ptr %1071, align 8, !tbaa !19
  %1074 = getelementptr inbounds ptr, ptr %1073, i64 5
  %1075 = load ptr, ptr %1074, align 8
  %1076 = call noundef i64 %1075(ptr noundef nonnull align 8 dereferenceable(9) %1071, i64 noundef %1072)
  store i64 %1076, ptr %140, align 8, !tbaa !30
  %1077 = load i64, ptr %140, align 8, !tbaa !30
  %1078 = icmp ult i64 %1077, 1
  br i1 %1078, label %1079, label %1080

1079:                                             ; preds = %1070
  store i32 29, ptr %52, align 4
  br label %1118

1080:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #1
  %1081 = load ptr, ptr %6, align 8, !tbaa !5
  %1082 = load i64, ptr %139, align 8, !tbaa !30
  %1083 = load ptr, ptr %1081, align 8, !tbaa !19
  %1084 = getelementptr inbounds ptr, ptr %1083, i64 7
  %1085 = load ptr, ptr %1084, align 8
  %1086 = call noundef ptr %1085(ptr noundef nonnull align 8 dereferenceable(9) %1081, i64 noundef %1082)
  store ptr %1086, ptr %141, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #1
  store i64 0, ptr %142, align 8, !tbaa !30
  br label %1087

1087:                                             ; preds = %1114, %1080
  %1088 = load i64, ptr %142, align 8, !tbaa !30
  %1089 = load i64, ptr %140, align 8, !tbaa !30
  %1090 = icmp ult i64 %1088, %1089
  br i1 %1090, label %1092, label %1091

1091:                                             ; preds = %1087
  store i32 30, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #1
  br label %1117

1092:                                             ; preds = %1087
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #1
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #1
  %1093 = load ptr, ptr %141, align 8, !tbaa !5
  %1094 = load i64, ptr %142, align 8, !tbaa !30
  %1095 = getelementptr inbounds %struct.ImVec2, ptr %1093, i64 %1094
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %146, ptr align 4 %1095, i64 8, i1 false), !tbaa.struct !37
  %1096 = load <2 x float>, ptr %146, align 4
  %1097 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %38, <2 x float> %1096)
  store <2 x float> %1097, ptr %145, align 4
  %1098 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %145, ptr noundef nonnull align 4 dereferenceable(8) %32)
  store <2 x float> %1098, ptr %144, align 4
  %1099 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %144, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %1099, ptr %143, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #1
  %1100 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %138, ptr noundef nonnull align 4 dereferenceable(8) %143)
  br i1 %1100, label %1101, label %1113

1101:                                             ; preds = %1092
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #1
  %1102 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %147, i32 0, i32 0
  %1103 = load i64, ptr %139, align 8, !tbaa !30
  %1104 = trunc i64 %1103 to i32
  store i32 %1104, ptr %1102, align 4, !tbaa !41
  %1105 = getelementptr inbounds %"struct.ImCurveEdit::EditPoint", ptr %147, i32 0, i32 1
  %1106 = load i64, ptr %142, align 8, !tbaa !30
  %1107 = trunc i64 %1106 to i32
  store i32 %1107, ptr %1105, align 4, !tbaa !43
  %1108 = call { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %147)
  %1109 = getelementptr inbounds { ptr, i8 }, ptr %148, i32 0, i32 0
  %1110 = extractvalue { ptr, i8 } %1108, 0
  store ptr %1110, ptr %1109, align 8
  %1111 = getelementptr inbounds { ptr, i8 }, ptr %148, i32 0, i32 1
  %1112 = extractvalue { ptr, i8 } %1108, 1
  store i8 %1112, ptr %1111, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #1
  br label %1113

1113:                                             ; preds = %1101, %1092
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #1
  br label %1114

1114:                                             ; preds = %1113
  %1115 = load i64, ptr %142, align 8, !tbaa !30
  %1116 = add i64 %1115, 1
  store i64 %1116, ptr %142, align 8, !tbaa !30
  br label %1087, !llvm.loop !50

1117:                                             ; preds = %1091
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #1
  store i32 0, ptr %52, align 4
  br label %1118

1118:                                             ; preds = %1117, %1079
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #1
  %1119 = load i32, ptr %52, align 4
  switch i32 %1119, label %1183 [
    i32 0, label %1120
    i32 29, label %1121
  ]

1120:                                             ; preds = %1118
  br label %1121

1121:                                             ; preds = %1120, %1118, %1069
  %1122 = load i64, ptr %139, align 8, !tbaa !30
  %1123 = add i64 %1122, 1
  store i64 %1123, ptr %139, align 8, !tbaa !30
  br label %1057, !llvm.loop !51

1124:                                             ; preds = %1061
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27
  br label %1125

1125:                                             ; preds = %1124, %1036
  call void @llvm.lifetime.end.p0(i64 16, ptr %138) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #1
  br label %1126

1126:                                             ; preds = %1125, %1033
  %1127 = load i8, ptr %46, align 1, !tbaa !27, !range !28, !noundef !29
  %1128 = trunc i8 %1127 to i1
  br i1 %1128, label %1147, label %1129

1129:                                             ; preds = %1126
  %1130 = call noundef zeroext i1 @_ZN5ImGui14IsMouseClickedEib(i32 noundef 0, i1 noundef zeroext false)
  br i1 %1130, label %1131, label %1147

1131:                                             ; preds = %1129
  %1132 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27, !range !28, !noundef !29
  %1133 = trunc i8 %1132 to i1
  br i1 %1133, label %1147, label %1134

1134:                                             ; preds = %1131
  %1135 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !9
  %1136 = icmp eq i32 %1135, -1
  br i1 %1136, label %1137, label %1147

1137:                                             ; preds = %1134
  %1138 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !27, !range !28, !noundef !29
  %1139 = trunc i8 %1138 to i1
  br i1 %1139, label %1147, label %1140

1140:                                             ; preds = %1137
  %1141 = load ptr, ptr %12, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.ImGuiIO, ptr %1141, i32 0, i32 56
  %1143 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(8) %1142)
  br i1 %1143, label %1144, label %1147

1144:                                             ; preds = %1140
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !27
  %1145 = load ptr, ptr %12, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.ImGuiIO, ptr %1145, i32 0, i32 56
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection, ptr align 4 %1146, i64 8, i1 false), !tbaa.struct !37
  br label %1147

1147:                                             ; preds = %1144, %1140, %1137, %1134, %1131, %1129, %1126
  %1148 = load ptr, ptr %9, align 8, !tbaa !5
  %1149 = icmp ne ptr %1148, null
  br i1 %1149, label %1150, label %1152

1150:                                             ; preds = %1147
  %1151 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN10ImDrawList11PopClipRectEv(ptr noundef nonnull align 8 dereferenceable(196) %1151)
  br label %1152

1152:                                             ; preds = %1150, %1147
  call void @_ZN5ImGui13EndChildFrameEv()
  call void @_ZN5ImGui11PopStyleVarEi(i32 noundef 1)
  call void @_ZN5ImGui13PopStyleColorEi(i32 noundef 1)
  %1153 = load ptr, ptr %10, align 8, !tbaa !5
  %1154 = icmp ne ptr %1153, null
  br i1 %1154, label %1155, label %1176

1155:                                             ; preds = %1152
  %1156 = load ptr, ptr %10, align 8, !tbaa !5
  %1157 = call noundef i64 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %1158 = trunc i64 %1157 to i32
  call void @_ZN8ImVectorIN11ImCurveEdit9EditPointEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %1156, i32 noundef %1158)
  call void @llvm.lifetime.start.p0(i64 4, ptr %149) #1
  store i32 0, ptr %149, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #1
  store ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr %150, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #1
  %1159 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %1160 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %151, i32 0, i32 0
  store ptr %1159, ptr %1160, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #1
  %1161 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #1
  %1162 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %152, i32 0, i32 0
  store ptr %1161, ptr %1162, align 8
  br label %1163

1163:                                             ; preds = %1173, %1155
  %1164 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %151, ptr noundef nonnull align 8 dereferenceable(8) %152) #1
  br i1 %1164, label %1166, label %1165

1165:                                             ; preds = %1163
  store i32 33, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #1
  br label %1175

1166:                                             ; preds = %1163
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #1
  %1167 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %151) #1
  store ptr %1167, ptr %153, align 8, !tbaa !5
  %1168 = load ptr, ptr %153, align 8, !tbaa !5
  %1169 = load ptr, ptr %10, align 8, !tbaa !5
  %1170 = load i32, ptr %149, align 4, !tbaa !9
  %1171 = add nsw i32 %1170, 1
  store i32 %1171, ptr %149, align 4, !tbaa !9
  %1172 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN8ImVectorIN11ImCurveEdit9EditPointEEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1169, i32 noundef %1170)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1172, ptr align 4 %1168, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #1
  br label %1173

1173:                                             ; preds = %1166
  %1174 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %151) #1
  br label %1163

1175:                                             ; preds = %1165
  call void @llvm.lifetime.end.p0(i64 4, ptr %149) #1
  br label %1176

1176:                                             ; preds = %1175, %1152
  %1177 = load i32, ptr %11, align 4, !tbaa !9
  store i32 1, ptr %52, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #1
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #1
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #1
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #1
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #1
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #1
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #1
  ret i32 %1177

1178:                                             ; preds = %874
  %1179 = load ptr, ptr %114, align 8
  %1180 = load i32, ptr %115, align 4
  %1181 = insertvalue { ptr, i32 } poison, ptr %1179, 0
  %1182 = insertvalue { ptr, i32 } %1181, i32 %1180, 1
  resume { ptr, i32 } %1182

1183:                                             ; preds = %1118, %702
  unreachable
}

; Function Attrs: nounwind
declare i32 @__cxa_guard_acquire(ptr) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: nounwind
declare i32 @__cxa_atexit(ptr, ptr, ptr) #1

; Function Attrs: nounwind
declare void @__cxa_guard_release(ptr) #1

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

declare noundef nonnull align 8 dereferenceable(14264) ptr @_ZN5ImGui5GetIOEv() #4

declare void @_ZN5ImGui12PushStyleVarEiRK6ImVec2(i32 noundef, ptr noundef nonnull align 4 dereferenceable(8)) #4

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

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

declare void @_ZN5ImGui14PushStyleColorEij(i32 noundef, i32 noundef) #4

declare noundef zeroext i1 @_ZN5ImGui15BeginChildFrameEjRK6ImVec2i(i32 noundef, ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #4

declare noundef zeroext i1 @_ZN5ImGui15IsWindowFocusedEi(i32 noundef) #4

declare noundef ptr @_ZN5ImGui17GetWindowDrawListEv() #4

declare void @_ZN10ImDrawList12PushClipRectERK6ImVec2S2_b(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i1 noundef zeroext) #4

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

declare <2 x float> @_ZN5ImGui18GetCursorScreenPosEv() #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(8)) #2 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_0clEf"(ptr noundef nonnull align 8 dereferenceable(16), float noundef) #6 align 2

declare noundef zeroext i1 @_ZN5ImGui11IsMouseDownEi(i32 noundef) #4

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

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

declare void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef, i32 noundef) #4

declare void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef) #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL6ImSwapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16), <2 x float>) #7 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef float @_ZN11ImCurveEditL10smoothstepEfff(float noundef, float noundef, float noundef) #9

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZN11ImCurveEditL9DrawPointEP10ImDrawList6ImVec2S2_S2_b(ptr noundef, <2 x float>, <2 x float>, <2 x float>, i1 noundef zeroext) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4findERKS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorI6ImVec2SaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorI6ImVec2SaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorI6ImVec2SaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2ERKS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16), <2 x float>) #7 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5eraseERKS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) #9 align 2

declare noundef zeroext i1 @_ZN5ImGui14IsMouseClickedEib(i32 noundef, i1 noundef zeroext) #4

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

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

declare void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef, i32 noundef, float noundef) #4

declare void @_ZN10ImDrawList11PopClipRectEv(ptr noundef nonnull align 8 dereferenceable(196)) #4

declare void @_ZN5ImGui13EndChildFrameEv() #4

declare void @_ZN5ImGui11PopStyleVarEi(i32 noundef) #4

declare void @_ZN5ImGui13PopStyleColorEi(i32 noundef) #4

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

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

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

!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 = !{!"branch_weights", i32 1, i32 1048575}
!12 = !{!13, !14, i64 8}
!13 = !{!"_ZTSN11ImCurveEdit8DelegateE", !14, i64 8}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !17, i64 4}
!16 = !{!"_ZTS6ImVec2", !17, i64 0, !17, i64 4}
!17 = !{!"float", !7, i64 0}
!18 = !{!16, !17, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !8, i64 0}
!21 = !{!22, !17, i64 3588}
!22 = !{!"_ZTS7ImGuiIO", !10, i64 0, !10, i64 4, !16, i64 8, !17, i64 16, !17, i64 20, !6, i64 24, !6, i64 32, !17, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !17, i64 56, !17, i64 60, !17, i64 64, !6, i64 72, !6, i64 80, !17, i64 88, !14, i64 92, !6, i64 96, !16, i64 104, !14, i64 112, !14, i64 113, !14, i64 114, !14, i64 115, !14, i64 116, !14, i64 117, !14, i64 118, !14, i64 119, !17, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !14, i64 208, !14, i64 209, !14, i64 210, !14, i64 211, !14, i64 212, !14, i64 213, !14, i64 214, !17, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !16, i64 240, !7, i64 248, !7, i64 2856, !7, i64 3508, !16, i64 3572, !7, i64 3580, !17, i64 3588, !17, i64 3592, !14, i64 3596, !14, i64 3597, !14, i64 3598, !14, i64 3599, !10, i64 3600, !7, i64 3604, !14, i64 14036, !16, i64 14040, !7, i64 14048, !7, i64 14088, !7, i64 14128, !7, i64 14133, !7, i64 14138, !7, i64 14148, !7, i64 14158, !7, i64 14163, !7, i64 14168, !7, i64 14176, !7, i64 14196, !7, i64 14216, !17, i64 14236, !14, i64 14240, !14, i64 14241, !7, i64 14242, !14, i64 14243, !23, i64 14244, !24, i64 14248}
!23 = !{!"short", !7, i64 0}
!24 = !{!"_ZTS8ImVectorItE", !10, i64 0, !10, i64 4, !6, i64 8}
!25 = !{!22, !17, i64 3576}
!26 = !{!17, !17, i64 0}
!27 = !{!14, !14, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!31, !31, i64 0}
!31 = !{!"long", !7, i64 0}
!32 = !{!22, !17, i64 244}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !36, i64 0}
!36 = !{!"_ZTSN11ImCurveEdit9CurveTypeE", !7, i64 0}
!37 = !{i64 0, i64 4, !26, i64 4, i64 4, !26}
!38 = !{!22, !17, i64 3572}
!39 = distinct !{!39, !34}
!40 = distinct !{!40, !34}
!41 = !{!42, !10, i64 0}
!42 = !{!"_ZTSN11ImCurveEdit9EditPointE", !10, i64 0, !10, i64 4}
!43 = !{!42, !10, i64 4}
!44 = !{!22, !14, i64 3597}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}
!47 = !{!22, !17, i64 240}
!48 = distinct !{!48, !34}
!49 = distinct !{!49, !34}
!50 = distinct !{!50, !34}
!51 = distinct !{!51, !34}
!52 = !{i64 0, i64 4, !9, i64 4, i64 4, !9}


; 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 }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<ImCurveEdit::EditPoint, ImCurveEdit::EditPoint, std::_Identity<ImCurveEdit::EditPoint>, std::less<ImCurveEdit::EditPoint>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<ImCurveEdit::EditPoint, ImCurveEdit::EditPoint, std::_Identity<ImCurveEdit::EditPoint>, std::less<ImCurveEdit::EditPoint>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl" }
%"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl" = type { %"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ImVec2, std::allocator<ImVec2>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }
%class.anon = type { ptr, ptr }
%class.anon.6 = type { ptr, ptr }
%class.anon.7 = type { ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"struct.ImCurveEdit::EditPoint" = type { i32, i32 }

@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad = external hidden local_unnamed_addr global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection = external hidden global %struct.ImVec2, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve = external hidden local_unnamed_addr global i32, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve = external hidden local_unnamed_addr global i32, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV = external hidden local_unnamed_addr global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection = external hidden global %"class.std::set", align 8
@_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection = external hidden global i64, align 8
@__dso_handle = external hidden global i8
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint = external hidden local_unnamed_addr global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved = external hidden local_unnamed_addr global i8, align 1
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin = external hidden global %struct.ImVec2, align 4
@_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints = external hidden global %"class.std::vector", align 8
@_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints = external hidden global i64, align 8

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 2) i32 @_ZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEE(ptr noundef nonnull align 8 dereferenceable(9) %0, ptr noundef nonnull align 4 dereferenceable(8) %1, i32 noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca %struct.ImVec2, align 4
  %7 = alloca %struct.ImVec2, align 8
  %8 = alloca %struct.ImVec2, align 8
  %9 = alloca %struct.ImVec2, align 4
  %10 = alloca %struct.ImVec2, align 4
  %11 = alloca %struct.ImRect, align 4
  %12 = alloca %struct.ImVec2, align 8
  %13 = alloca %struct.ImVec2, align 4
  %14 = alloca %struct.ImVec2, align 8
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca float, align 4
  %17 = alloca %class.anon, align 8
  %18 = alloca %struct.ImVec2, align 8
  %19 = alloca %struct.ImVec2, align 8
  %20 = alloca %struct.ImVec2, align 4
  %21 = alloca %struct.ImVec2, align 8
  %22 = alloca %struct.ImVec2, align 8
  %23 = alloca %struct.ImVec2, align 4
  %24 = alloca %struct.ImVec2, align 8
  %25 = alloca %class.anon.6, align 8
  %26 = alloca %class.anon.7, align 8
  %27 = alloca %struct.ImVec2, align 8
  %28 = alloca %struct.ImVec2, align 8
  %29 = alloca %struct.ImVec2, align 4
  %30 = alloca %struct.ImVec2, align 8
  %31 = alloca %struct.ImVec2, align 8
  %32 = alloca %struct.ImVec2, align 4
  %33 = alloca %struct.ImVec2, align 8
  %34 = alloca %struct.ImVec2, align 8
  %35 = alloca %struct.ImVec2, align 8
  %36 = alloca %struct.ImVec2, align 8
  %37 = alloca %struct.ImVec2, align 4
  %38 = alloca %struct.ImVec2, align 8
  %39 = alloca %struct.ImVec2, align 8
  %40 = alloca %struct.ImVec2, align 4
  %41 = alloca %struct.ImVec2, align 8
  %42 = alloca %struct.ImVec2, align 8
  %43 = alloca %struct.ImVec2, align 8
  %44 = alloca %struct.ImVec2, align 8
  %45 = alloca %struct.ImVec2, align 4
  %46 = alloca %struct.ImVec2, align 8
  %47 = alloca %struct.ImVec2, align 8
  %48 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %49 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %50 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %51 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %52 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %53 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %54 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %55 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %56 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %57 = alloca %"class.std::set", align 8
  %58 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %59 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %60 = alloca %struct.ImVec2, align 8
  %61 = alloca %struct.ImVec2, align 8
  %62 = alloca %struct.ImVec2, align 8
  %63 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %64 = alloca %struct.ImVec2, align 8
  %65 = alloca %struct.ImVec2, align 8
  %66 = alloca %struct.ImVec2, align 8
  %67 = alloca %struct.ImVec2, align 8
  %68 = alloca %struct.ImVec2, align 8
  %69 = alloca %struct.ImVec2, align 8
  %70 = alloca %struct.ImRect, align 4
  %71 = alloca %struct.ImVec2, align 8
  %72 = alloca %struct.ImVec2, align 8
  %73 = alloca %struct.ImVec2, align 8
  %74 = alloca %"struct.ImCurveEdit::EditPoint", align 4
  %75 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %76 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %77 = load atomic i8, ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection acquire, align 8
  %78 = icmp eq i8 %77, 0
  br i1 %78, label %79, label %83, !prof !5

79:                                               ; preds = %5
  %80 = tail call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  %.not293 = icmp eq i32 %80, 0
  br i1 %.not293, label %83, label %81

81:                                               ; preds = %79
  tail call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  %82 = tail call i32 @__cxa_atexit(ptr nonnull @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev, ptr nonnull @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr nonnull @__dso_handle) #11
  tail call void @__cxa_guard_release(ptr nonnull @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  br label %83

83:                                               ; preds = %81, %79, %5
  %84 = tail call noundef nonnull align 8 dereferenceable(14264) ptr @_ZN5ImGui5GetIOEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %6, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN5ImGui12PushStyleVarEiRK6ImVec2(i32 noundef 11, ptr noundef nonnull align 4 dereferenceable(8) %6)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  call void @_ZN5ImGui14PushStyleColorEij(i32 noundef 5, i32 noundef 0)
  %85 = call noundef zeroext i1 @_ZN5ImGui15BeginChildFrameEjRK6ImVec2i(i32 noundef %2, ptr noundef nonnull align 4 dereferenceable(8) %1, i32 noundef 0)
  %86 = call noundef zeroext i1 @_ZN5ImGui15IsWindowFocusedEi(i32 noundef 0)
  %87 = getelementptr inbounds i8, ptr %0, i64 8
  %88 = zext i1 %86 to i8
  store i8 %88, ptr %87, align 8, !tbaa !6
  %89 = call noundef ptr @_ZN5ImGui17GetWindowDrawListEv()
  %.not294 = icmp eq ptr %3, null
  br i1 %.not294, label %92, label %90

90:                                               ; preds = %83
  %91 = getelementptr inbounds i8, ptr %3, i64 8
  call void @_ZN10ImDrawList12PushClipRectERK6ImVec2S2_b(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %3, ptr noundef nonnull align 4 dereferenceable(8) %91, i1 noundef zeroext true)
  br label %92

92:                                               ; preds = %90, %83
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #11
  %93 = call <2 x float> @_ZN5ImGui18GetCursorScreenPosEv()
  store <2 x float> %93, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  %94 = getelementptr inbounds i8, ptr %1, i64 4
  %95 = load float, ptr %94, align 4, !tbaa !11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %9, float noundef 0.000000e+00, float noundef %95)
  %96 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 4 dereferenceable(8) %9)
  store <2 x float> %96, ptr %7, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #11
  %97 = load float, ptr %1, align 4, !tbaa !14
  %98 = load float, ptr %94, align 4, !tbaa !11
  %99 = fneg float %98
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %10, float noundef %97, float noundef %99)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #11
  %100 = getelementptr inbounds i8, ptr %10, i64 4
  %101 = load float, ptr %100, align 4, !tbaa !11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef 0.000000e+00, float noundef %101)
  %102 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %13)
  store <2 x float> %102, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #11
  %103 = load float, ptr %10, align 4, !tbaa !14
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef %103, float noundef 0.000000e+00)
  %104 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %15)
  store <2 x float> %104, ptr %14, align 8
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(8) %12, ptr noundef nonnull align 4 dereferenceable(8) %14)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  %105 = load ptr, ptr %0, align 8, !tbaa !15
  %106 = getelementptr inbounds i8, ptr %105, i64 24
  %107 = load ptr, ptr %106, align 8
  %108 = call noundef nonnull align 4 dereferenceable(8) ptr %107(ptr noundef nonnull align 8 dereferenceable(9) %0)
  %109 = load ptr, ptr %0, align 8, !tbaa !15
  %110 = getelementptr inbounds i8, ptr %109, i64 32
  %111 = load ptr, ptr %110, align 8
  %112 = call noundef nonnull align 4 dereferenceable(8) ptr %111(ptr noundef nonnull align 8 dereferenceable(9) %0)
  %113 = getelementptr inbounds i8, ptr %84, i64 3572
  %114 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(8) %113)
  br i1 %114, label %115, label %144

115:                                              ; preds = %92
  %116 = getelementptr inbounds i8, ptr %84, i64 3588
  %117 = load float, ptr %116, align 4, !tbaa !17
  %118 = call float @llvm.fabs.f32(float %117)
  %119 = fcmp ogt float %118, 0x3E80000000000000
  br i1 %119, label %120, label %138

120:                                              ; preds = %115
  %121 = getelementptr inbounds i8, ptr %84, i64 3576
  %122 = load float, ptr %121, align 8, !tbaa !23
  %123 = getelementptr inbounds i8, ptr %7, i64 4
  %124 = load float, ptr %123, align 4, !tbaa !11
  %125 = fsub float %122, %124
  %126 = load float, ptr %100, align 4, !tbaa !11
  %127 = fdiv float %125, %126
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #11
  %128 = getelementptr inbounds i8, ptr %108, i64 4
  %129 = load float, ptr %128, align 4, !tbaa !11
  %130 = getelementptr inbounds i8, ptr %112, i64 4
  %131 = load float, ptr %130, align 4, !tbaa !11
  %132 = call noundef float @_ZL6ImLerpIfET_S0_S0_f(float noundef %129, float noundef %131, float noundef %127)
  store float %132, ptr %16, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #11
  store ptr %16, ptr %17, align 8, !tbaa !25
  %133 = getelementptr inbounds i8, ptr %17, i64 8
  store ptr %84, ptr %133, align 8, !tbaa !25
  %134 = load float, ptr %128, align 4, !tbaa !11
  %135 = call noundef float @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_0clEf"(ptr noundef nonnull align 8 dereferenceable(16) %17, float noundef %134)
  store float %135, ptr %128, align 4, !tbaa !11
  %136 = load float, ptr %130, align 4, !tbaa !11
  %137 = call noundef float @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_0clEf"(ptr noundef nonnull align 8 dereferenceable(16) %17, float noundef %136)
  store float %137, ptr %130, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  br label %138

138:                                              ; preds = %120, %115
  %139 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !26, !range !27, !noundef !28
  %140 = trunc nuw i8 %139 to i1
  br i1 %140, label %144, label %141

141:                                              ; preds = %138
  %142 = call noundef zeroext i1 @_ZN5ImGui11IsMouseDownEi(i32 noundef 2)
  br i1 %142, label %143, label %144

143:                                              ; preds = %141
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !26
  br label %144

144:                                              ; preds = %138, %141, %143, %92
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #11
  %145 = call <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %112, ptr noundef nonnull align 4 dereferenceable(8) %108)
  store <2 x float> %145, ptr %19, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %20, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %146 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 4 dereferenceable(8) %20)
  store <2 x float> %146, ptr %18, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #11
  %147 = load float, ptr %1, align 4, !tbaa !14
  %148 = load float, ptr %94, align 4, !tbaa !11
  %149 = fneg float %148
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %21, float noundef %147, float noundef %149)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %150 = call <2 x float> @_ZN11ImCurveEditdvERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %23, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %150, ptr %22, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #11
  %151 = load ptr, ptr %0, align 8, !tbaa !15
  %152 = load ptr, ptr %151, align 8
  %153 = call noundef i64 %152(ptr noundef nonnull align 8 dereferenceable(9) %0)
  %154 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !26, !range !27, !noundef !28
  %155 = trunc nuw i8 %154 to i1
  br i1 %155, label %156, label %173

156:                                              ; preds = %144
  %157 = getelementptr inbounds i8, ptr %84, i64 244
  %158 = load float, ptr %157, align 4, !tbaa !29
  %159 = getelementptr inbounds i8, ptr %18, i64 4
  %160 = load float, ptr %159, align 4, !tbaa !11
  %161 = fmul float %158, %160
  %162 = getelementptr inbounds i8, ptr %22, i64 4
  %163 = load float, ptr %162, align 4, !tbaa !11
  %164 = fmul float %161, %163
  %165 = getelementptr inbounds i8, ptr %108, i64 4
  %166 = load float, ptr %165, align 4, !tbaa !11
  %167 = fsub float %166, %164
  store float %167, ptr %165, align 4, !tbaa !11
  %168 = getelementptr inbounds i8, ptr %112, i64 4
  %169 = load float, ptr %168, align 4, !tbaa !11
  %170 = fsub float %169, %164
  store float %170, ptr %168, align 4, !tbaa !11
  %171 = call noundef zeroext i1 @_ZN5ImGui11IsMouseDownEi(i32 noundef 2)
  br i1 %171, label %173, label %172

172:                                              ; preds = %156
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !26
  br label %173

173:                                              ; preds = %156, %172, %144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #11
  %174 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %10)
  store <2 x float> %174, ptr %24, align 8
  %175 = load ptr, ptr %0, align 8, !tbaa !15
  %176 = getelementptr inbounds i8, ptr %175, i64 80
  %177 = load ptr, ptr %176, align 8
  %178 = call noundef i32 %177(ptr noundef nonnull align 8 dereferenceable(9) %0)
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %24, i32 noundef %178, float noundef 0.000000e+00, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #11
  store ptr %108, ptr %25, align 8, !tbaa !25
  %179 = getelementptr inbounds i8, ptr %25, i64 8
  store ptr %18, ptr %179, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #11
  store ptr %18, ptr %26, align 8, !tbaa !25
  %180 = getelementptr inbounds i8, ptr %26, i64 8
  store ptr %108, ptr %180, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #11
  %181 = getelementptr inbounds i8, ptr %108, i64 4
  %182 = load float, ptr %181, align 4, !tbaa !11
  %183 = fneg float %182
  %184 = getelementptr inbounds i8, ptr %18, i64 4
  %185 = load float, ptr %184, align 4, !tbaa !11
  %186 = fdiv float %183, %185
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %29, float noundef -1.000000e+00, float noundef %186)
  %187 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %29, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %187, ptr %28, align 8
  %188 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %28, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %188, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #11
  %189 = load float, ptr %181, align 4, !tbaa !11
  %190 = fneg float %189
  %191 = load float, ptr %184, align 4, !tbaa !11
  %192 = fdiv float %190, %191
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %32, float noundef 1.000000e+00, float noundef %192)
  %193 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %32, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %193, ptr %31, align 8
  %194 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %31, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %194, ptr %30, align 8
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %27, ptr noundef nonnull align 4 dereferenceable(8) %30, i32 noundef -16777216, float noundef 1.500000e+00)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #11
  %195 = shl i64 %153, 2
  %196 = alloca i8, i64 %195, align 16
  %.not370 = icmp eq i64 %153, 0
  br i1 %.not370, label %._crit_edge347.thread, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %173
  %min.iters.check = icmp ult i64 %153, 8
  br i1 %min.iters.check, label %.lr.ph.preheader412, label %vector.ph

.lr.ph.preheader412:                              ; preds = %middle.block, %.lr.ph.preheader
  %.0263318.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %153, -8
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %197 = getelementptr inbounds i32, ptr %196, i64 %index
  %198 = getelementptr inbounds i8, ptr %197, i64 16
  store <4 x i32> %vec.ind, ptr %197, align 16, !tbaa !30
  store <4 x i32> %step.add, ptr %198, align 16, !tbaa !30
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %199 = icmp eq i64 %index.next, %n.vec
  br i1 %199, label %middle.block, label %vector.body, !llvm.loop !31

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %153, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader412

._crit_edge:                                      ; preds = %.lr.ph, %middle.block
  %200 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  %.not406 = icmp eq i32 %200, -1
  br i1 %.not406, label %.lr.ph346, label %204

.lr.ph:                                           ; preds = %.lr.ph.preheader412, %.lr.ph
  %.0263318 = phi i64 [ %203, %.lr.ph ], [ %.0263318.ph, %.lr.ph.preheader412 ]
  %201 = trunc i64 %.0263318 to i32
  %202 = getelementptr inbounds i32, ptr %196, i64 %.0263318
  store i32 %201, ptr %202, align 4, !tbaa !30
  %203 = add nuw i64 %.0263318, 1
  %exitcond.not = icmp eq i64 %203, %153
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !35

204:                                              ; preds = %._crit_edge
  %205 = sext i32 %200 to i64
  %206 = getelementptr inbounds i32, ptr %196, i64 %205
  %207 = getelementptr i32, ptr %196, i64 %153
  %208 = getelementptr i8, ptr %207, i64 -4
  call void @_ZL6ImSwapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %206, ptr noundef nonnull align 4 dereferenceable(4) %208)
  %209 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  br label %.lr.ph346

.lr.ph346:                                        ; preds = %204, %._crit_edge
  %.0264.ph = phi i32 [ -1, %._crit_edge ], [ %209, %204 ]
  %210 = getelementptr inbounds i8, ptr %33, i64 4
  %211 = getelementptr inbounds i8, ptr %84, i64 3576
  %212 = getelementptr inbounds i8, ptr %41, i64 4
  %213 = getelementptr inbounds i8, ptr %46, i64 4
  %214 = getelementptr inbounds i8, ptr %34, i64 4
  %215 = getelementptr inbounds i8, ptr %35, i64 4
  %216 = getelementptr inbounds i8, ptr %49, i64 4
  %217 = getelementptr inbounds i8, ptr %84, i64 3597
  %218 = getelementptr inbounds i8, ptr %52, i64 4
  %219 = getelementptr inbounds i8, ptr %54, i64 4
  br label %221

._crit_edge347:                                   ; preds = %.loopexit317
  %220 = icmp eq i32 %.8262, -1
  br i1 %220, label %._crit_edge347.thread, label %379

221:                                              ; preds = %.lr.ph346, %.loopexit317
  %.0249344 = phi i1 [ false, %.lr.ph346 ], [ %.10, %.loopexit317 ]
  %.0254343 = phi i32 [ -1, %.lr.ph346 ], [ %.8262, %.loopexit317 ]
  %.0266342 = phi i64 [ 0, %.lr.ph346 ], [ %378, %.loopexit317 ]
  %222 = getelementptr inbounds i32, ptr %196, i64 %.0266342
  %223 = load i32, ptr %222, align 4, !tbaa !30
  %224 = sext i32 %223 to i64
  %225 = load ptr, ptr %0, align 8, !tbaa !15
  %226 = getelementptr inbounds i8, ptr %225, i64 8
  %227 = load ptr, ptr %226, align 8
  %228 = call noundef zeroext i1 %227(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %224)
  br i1 %228, label %229, label %.loopexit317

229:                                              ; preds = %221
  %230 = load ptr, ptr %0, align 8, !tbaa !15
  %231 = getelementptr inbounds i8, ptr %230, i64 40
  %232 = load ptr, ptr %231, align 8
  %233 = call noundef i64 %232(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %224)
  %234 = icmp eq i64 %233, 0
  br i1 %234, label %.loopexit317, label %235

235:                                              ; preds = %229
  %236 = load ptr, ptr %0, align 8, !tbaa !15
  %237 = getelementptr inbounds i8, ptr %236, i64 16
  %238 = load ptr, ptr %237, align 8
  %239 = call noundef i32 %238(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %224)
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %.loopexit317, label %241

241:                                              ; preds = %235
  %242 = load ptr, ptr %0, align 8, !tbaa !15
  %243 = getelementptr inbounds i8, ptr %242, i64 56
  %244 = load ptr, ptr %243, align 8
  %245 = call noundef ptr %244(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %224)
  %246 = load ptr, ptr %0, align 8, !tbaa !15
  %247 = getelementptr inbounds i8, ptr %246, i64 48
  %248 = load ptr, ptr %247, align 8
  %249 = call noundef i32 %248(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %224)
  %250 = icmp eq i32 %223, %.0264.ph
  br i1 %250, label %251, label %258

251:                                              ; preds = %241
  %252 = call noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  br i1 %252, label %253, label %258

253:                                              ; preds = %251
  %254 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26, !range !27, !noundef !28
  %255 = trunc nuw i8 %254 to i1
  %256 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4
  %257 = icmp ne i32 %256, %.0264.ph
  %or.cond307.not = select i1 %255, i1 %257, i1 false
  br i1 %or.cond307.not, label %260, label %259

258:                                              ; preds = %251, %241
  %.old = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  %.old306 = icmp eq i32 %.old, %223
  br i1 %.old306, label %259, label %260

259:                                              ; preds = %258, %253
  br label %260

260:                                              ; preds = %253, %259, %258
  %.0268 = phi i32 [ -1, %259 ], [ %249, %258 ], [ %249, %253 ]
  %261 = add i64 %233, -1
  %.not372 = icmp eq i64 %261, 0
  br i1 %.not372, label %.preheader316, label %.lr.ph326

.lr.ph326:                                        ; preds = %260
  %262 = and i32 %239, -2
  %or.cond3 = icmp eq i32 %262, 2
  %263 = icmp eq i32 %239, 3
  %264 = select i1 %263, i64 19, i64 1
  %265 = uitofp nneg i64 %264 to float
  %266 = fdiv float 1.000000e+00, %265
  br i1 %or.cond3, label %.lr.ph326.split.us, label %.lr.ph326.split

.lr.ph326.split.us:                               ; preds = %.lr.ph326, %.loopexit315.us
  %.1250324.us = phi i1 [ %.3252.us, %.loopexit315.us ], [ %.0249344, %.lr.ph326 ]
  %.1255323.us = phi i32 [ %.3257.us, %.loopexit315.us ], [ %.0254343, %.lr.ph326 ]
  %.0269322.us = phi i64 [ %269, %.loopexit315.us ], [ 0, %.lr.ph326 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #11
  %267 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %.0269322.us
  %.sroa.0100.0.copyload.us = load <2 x float>, ptr %267, align 4
  %268 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.0100.0.copyload.us)
  store <2 x float> %268, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #11
  %269 = add nuw i64 %.0269322.us, 1
  %270 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %269
  %.sroa.099.0.copyload.us = load <2 x float>, ptr %270, align 4
  %271 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.099.0.copyload.us)
  store <2 x float> %271, ptr %34, align 8
  br label %272

272:                                              ; preds = %306, %.lr.ph326.split.us
  %.2251321.us = phi i1 [ %.1250324.us, %.lr.ph326.split.us ], [ %.3252.us, %306 ]
  %.2256320.us = phi i32 [ %.1255323.us, %.lr.ph326.split.us ], [ %.3257.us, %306 ]
  %.0270319.us = phi i64 [ 0, %.lr.ph326.split.us ], [ %307, %306 ]
  %273 = uitofp nneg i64 %.0270319.us to float
  %274 = fmul float %266, %273
  %275 = call <2 x float> @_ZL6ImLerpRK6ImVec2S1_f(ptr noundef nonnull align 4 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef %274)
  %276 = fadd float %266, %274
  %277 = call <2 x float> @_ZL6ImLerpRK6ImVec2S1_f(ptr noundef nonnull align 4 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef %276)
  %278 = load float, ptr %33, align 8, !tbaa !14
  %279 = load float, ptr %34, align 8, !tbaa !14
  %.sroa.087.0.vec.extract.us = extractelement <2 x float> %275, i64 0
  %280 = call noundef float @_ZN11ImCurveEditL10smoothstepEfff(float noundef %278, float noundef %279, float noundef %.sroa.087.0.vec.extract.us)
  %281 = load float, ptr %33, align 8, !tbaa !14
  %282 = load float, ptr %34, align 8, !tbaa !14
  %.sroa.084.0.vec.extract.us = extractelement <2 x float> %277, i64 0
  %283 = call noundef float @_ZN11ImCurveEditL10smoothstepEfff(float noundef %281, float noundef %282, float noundef %.sroa.084.0.vec.extract.us)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #11
  %284 = load float, ptr %210, align 4, !tbaa !11
  %285 = load float, ptr %214, align 4, !tbaa !11
  %286 = call noundef float @_ZL6ImLerpIfET_S0_S0_f(float noundef %284, float noundef %285, float noundef %280)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef %.sroa.087.0.vec.extract.us, float noundef %286)
  %287 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %37, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %287, ptr %36, align 8
  %288 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %36, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %288, ptr %35, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #11
  %289 = load float, ptr %210, align 4, !tbaa !11
  %290 = load float, ptr %214, align 4, !tbaa !11
  %291 = call noundef float @_ZL6ImLerpIfET_S0_S0_f(float noundef %289, float noundef %290, float noundef %283)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %40, float noundef %.sroa.084.0.vec.extract.us, float noundef %291)
  %292 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %40, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %292, ptr %39, align 8
  %293 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %39, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %293, ptr %38, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #11
  %294 = load float, ptr %113, align 4, !tbaa !36
  %295 = load float, ptr %211, align 8, !tbaa !23
  %296 = load float, ptr %35, align 8, !tbaa !14
  %297 = load float, ptr %215, align 4, !tbaa !11
  %298 = extractelement <2 x float> %293, i64 0
  %299 = extractelement <2 x float> %293, i64 1
  %300 = call noundef float @_ZN11ImCurveEditL8distanceEffffff(float noundef %294, float noundef %295, float noundef %296, float noundef %297, float noundef %298, float noundef %299)
  %301 = fcmp olt float %300, 8.000000e+00
  br i1 %301, label %302, label %306

302:                                              ; preds = %272
  %303 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !tbaa !26, !range !27, !noundef !28
  %304 = trunc nuw i8 %303 to i1
  br i1 %304, label %306, label %305

305:                                              ; preds = %302
  store i32 %223, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  br label %306

306:                                              ; preds = %305, %302, %272
  %.3257.us = phi i32 [ %.2256320.us, %302 ], [ %223, %305 ], [ %.2256320.us, %272 ]
  %.3252.us = phi i1 [ %.2251321.us, %302 ], [ true, %305 ], [ %.2251321.us, %272 ]
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %35, ptr noundef nonnull align 4 dereferenceable(8) %38, i32 noundef %.0268, float noundef 0x3FF4CCCCC0000000)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #11
  %307 = add nuw nsw i64 %.0270319.us, 1
  %exitcond379.not = icmp eq i64 %307, %264
  br i1 %exitcond379.not, label %.loopexit315.us, label %272, !llvm.loop !37

.loopexit315.us:                                  ; preds = %306
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  %exitcond380.not = icmp eq i64 %269, %261
  br i1 %exitcond380.not, label %.preheader316, label %.lr.ph326.split.us, !llvm.loop !38

.lr.ph326.split:                                  ; preds = %.lr.ph326
  %308 = icmp eq i32 %239, 1
  br i1 %308, label %.lr.ph326.split.split.us, label %.lr.ph326.split.split

.lr.ph326.split.split.us:                         ; preds = %.lr.ph326.split, %338
  %.1250324.us329 = phi i1 [ %.4.us, %338 ], [ %.0249344, %.lr.ph326.split ]
  %.1255323.us330 = phi i32 [ %.4258.us, %338 ], [ %.0254343, %.lr.ph326.split ]
  %.0269322.us331 = phi i64 [ %311, %338 ], [ 0, %.lr.ph326.split ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #11
  %309 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %.0269322.us331
  %.sroa.0100.0.copyload.us332 = load <2 x float>, ptr %309, align 4
  %310 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.0100.0.copyload.us332)
  store <2 x float> %310, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #11
  %311 = add nuw i64 %.0269322.us331, 1
  %312 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %311
  %.sroa.099.0.copyload.us333 = load <2 x float>, ptr %312, align 4
  %313 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.099.0.copyload.us333)
  store <2 x float> %313, ptr %34, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #11
  %314 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %314, ptr %42, align 8
  %315 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %42, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %315, ptr %41, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #11
  %316 = load float, ptr %34, align 8, !tbaa !14
  %317 = load float, ptr %210, align 4, !tbaa !11
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %45, float noundef %316, float noundef %317)
  %318 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %45, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %318, ptr %44, align 8
  %319 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %44, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %319, ptr %43, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #11
  %320 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %34, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %320, ptr %47, align 8
  %321 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %47, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %321, ptr %46, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #11
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %41, ptr noundef nonnull align 4 dereferenceable(8) %43, i32 noundef %.0268, float noundef 0x3FF4CCCCC0000000)
  call void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %43, ptr noundef nonnull align 4 dereferenceable(8) %46, i32 noundef %.0268, float noundef 0x3FF4CCCCC0000000)
  %322 = load float, ptr %113, align 4, !tbaa !36
  %323 = load float, ptr %211, align 8, !tbaa !23
  %324 = load float, ptr %41, align 8, !tbaa !14
  %325 = load float, ptr %212, align 4, !tbaa !11
  %326 = load float, ptr %46, align 8, !tbaa !14
  %327 = call noundef float @_ZN11ImCurveEditL8distanceEffffff(float noundef %322, float noundef %323, float noundef %324, float noundef %325, float noundef %326, float noundef %325)
  %328 = fcmp olt float %327, 8.000000e+00
  br i1 %328, label %337, label %329

329:                                              ; preds = %.lr.ph326.split.split.us
  %330 = load float, ptr %113, align 4, !tbaa !36
  %331 = load float, ptr %211, align 8, !tbaa !23
  %332 = load float, ptr %46, align 8, !tbaa !14
  %333 = load float, ptr %212, align 4, !tbaa !11
  %334 = load float, ptr %213, align 4, !tbaa !11
  %335 = call noundef float @_ZN11ImCurveEditL8distanceEffffff(float noundef %330, float noundef %331, float noundef %332, float noundef %333, float noundef %332, float noundef %334)
  %336 = fcmp olt float %335, 8.000000e+00
  br i1 %336, label %337, label %338

337:                                              ; preds = %329, %.lr.ph326.split.split.us
  store i32 %223, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  br label %338

338:                                              ; preds = %337, %329
  %.4258.us = phi i32 [ %223, %337 ], [ %.1255323.us330, %329 ]
  %.4.us = phi i1 [ true, %337 ], [ %.1250324.us329, %329 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  %exitcond378.not = icmp eq i64 %311, %261
  br i1 %exitcond378.not, label %.preheader316, label %.lr.ph326.split.split.us, !llvm.loop !38

.preheader316:                                    ; preds = %.lr.ph326.split.split, %338, %.loopexit315.us, %260
  %.1255.lcssa = phi i32 [ %.0254343, %260 ], [ %.3257.us, %.loopexit315.us ], [ %.4258.us, %338 ], [ %.0254343, %.lr.ph326.split.split ]
  %.1250.lcssa = phi i1 [ %.0249344, %260 ], [ %.3252.us, %.loopexit315.us ], [ %.4.us, %338 ], [ %.0249344, %.lr.ph326.split.split ]
  %umax = call i64 @llvm.umax.i64(i64 %233, i64 1)
  br label %344

.lr.ph326.split.split:                            ; preds = %.lr.ph326.split, %.lr.ph326.split.split
  %.0269322 = phi i64 [ %341, %.lr.ph326.split.split ], [ 0, %.lr.ph326.split ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #11
  %339 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %.0269322
  %.sroa.0100.0.copyload = load <2 x float>, ptr %339, align 4
  %340 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.0100.0.copyload)
  store <2 x float> %340, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #11
  %341 = add nuw i64 %.0269322, 1
  %342 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %341
  %.sroa.099.0.copyload = load <2 x float>, ptr %342, align 4
  %343 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.099.0.copyload)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  %exitcond377.not = icmp eq i64 %341, %261
  br i1 %exitcond377.not, label %.preheader316, label %.lr.ph326.split.split, !llvm.loop !38

344:                                              ; preds = %.preheader316, %376
  %.6341 = phi i1 [ %.1250.lcssa, %.preheader316 ], [ %.7, %376 ]
  %.0273340 = phi i64 [ 0, %.preheader316 ], [ %377, %376 ]
  %345 = getelementptr inbounds %struct.ImVec2, ptr %245, i64 %.0273340
  %.sroa.072.0.copyload = load <2 x float>, ptr %345, align 4
  %346 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.072.0.copyload)
  %.sroa.071.0.copyload = load <2 x float>, ptr %21, align 8
  %.sroa.070.0.copyload = load <2 x float>, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #11
  store i32 %223, ptr %49, align 4, !tbaa !39
  %347 = trunc i64 %.0273340 to i32
  store i32 %347, ptr %216, align 4, !tbaa !41
  %348 = call ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4findERKS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %49)
  store ptr %348, ptr %48, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #11
  %349 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  store ptr %349, ptr %50, align 8
  %350 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %50) #11
  %351 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4
  %352 = icmp eq i32 %351, -1
  %or.cond5 = select i1 %350, i1 %352, i1 false
  %353 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE10scrollingV, align 1, !range !27
  %354 = trunc nuw i8 %353 to i1
  %355 = xor i1 %354, true
  %356 = select i1 %or.cond5, i1 %355, i1 false
  %357 = call noundef i32 @_ZN11ImCurveEditL9DrawPointEP10ImDrawList6ImVec2S2_S2_b(ptr noundef nonnull %89, <2 x float> %346, <2 x float> %.sroa.071.0.copyload, <2 x float> %.sroa.070.0.copyload, i1 noundef zeroext %356)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #11
  %358 = icmp ne i32 %357, 0
  %359 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4
  %360 = icmp eq i32 %359, -1
  %or.cond7 = select i1 %358, i1 %360, i1 false
  br i1 %or.cond7, label %361, label %376

361:                                              ; preds = %344
  %362 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26, !range !27, !noundef !28
  %363 = trunc nuw i8 %362 to i1
  br i1 %363, label %376, label %364

364:                                              ; preds = %361
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !26
  store i32 -1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  %365 = icmp eq i32 %357, 2
  br i1 %365, label %366, label %376

366:                                              ; preds = %364
  %367 = load i8, ptr %217, align 1, !tbaa !42, !range !27, !noundef !28
  %368 = trunc nuw i8 %367 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #11
  br i1 %368, label %.critedge, label %369

369:                                              ; preds = %366
  store i32 %223, ptr %52, align 4, !tbaa !39
  store i32 %347, ptr %218, align 4, !tbaa !41
  %370 = call ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4findERKS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %52)
  store ptr %370, ptr %51, align 8
  %371 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  store ptr %371, ptr %53, align 8
  %372 = call noundef zeroext i1 @_ZSteqRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %53) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #11
  br i1 %372, label %373, label %374

373:                                              ; preds = %369
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  br label %374

.critedge:                                        ; preds = %366
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #11
  br label %374

374:                                              ; preds = %.critedge, %373, %369
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #11
  store i32 %223, ptr %54, align 4, !tbaa !39
  store i32 %347, ptr %219, align 4, !tbaa !41
  %375 = call { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %54)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #11
  br label %376

376:                                              ; preds = %364, %374, %361, %344
  %.7 = phi i1 [ %.6341, %361 ], [ true, %374 ], [ true, %364 ], [ %.6341, %344 ]
  %377 = add nuw i64 %.0273340, 1
  %exitcond381.not = icmp eq i64 %377, %umax
  br i1 %exitcond381.not, label %.loopexit317, label %344, !llvm.loop !43

.loopexit317:                                     ; preds = %376, %229, %235, %221
  %.8262 = phi i32 [ %.0254343, %221 ], [ %.0254343, %229 ], [ %.0254343, %235 ], [ %.1255.lcssa, %376 ]
  %.10 = phi i1 [ %.0249344, %221 ], [ %.0249344, %229 ], [ %.0249344, %235 ], [ %.7, %376 ]
  %378 = add nuw i64 %.0266342, 1
  %exitcond382.not = icmp eq i64 %378, %153
  br i1 %exitcond382.not, label %._crit_edge347, label %221, !llvm.loop !44

._crit_edge347.thread:                            ; preds = %173, %._crit_edge347
  %.0249.lcssa400 = phi i1 [ %.10, %._crit_edge347 ], [ false, %173 ]
  store i32 -1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  br label %379

379:                                              ; preds = %._crit_edge347.thread, %._crit_edge347
  %.0249.lcssa399 = phi i1 [ %.0249.lcssa400, %._crit_edge347.thread ], [ %.10, %._crit_edge347 ]
  %380 = load atomic i8, ptr @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints acquire, align 8
  %381 = icmp eq i8 %380, 0
  br i1 %381, label %382, label %386, !prof !5

382:                                              ; preds = %379
  %383 = call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints) #11
  %.not295 = icmp eq i32 %383, 0
  br i1 %.not295, label %386, label %384

384:                                              ; preds = %382
  call void @_ZNSt6vectorI6ImVec2SaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints) #11
  %385 = call i32 @__cxa_atexit(ptr nonnull @_ZNSt6vectorI6ImVec2SaIS0_EED2Ev, ptr nonnull @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, ptr nonnull @__dso_handle) #11
  call void @__cxa_guard_release(ptr nonnull @_ZGVZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints) #11
  br label %386

386:                                              ; preds = %384, %382, %379
  %387 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !26, !range !27, !noundef !28
  %388 = trunc nuw i8 %387 to i1
  br i1 %388, label %389, label %476

389:                                              ; preds = %386
  %390 = getelementptr inbounds i8, ptr %84, i64 3580
  %391 = load i8, ptr %390, align 4, !tbaa !26, !range !27, !noundef !28
  %392 = trunc nuw i8 %391 to i1
  br i1 %392, label %393, label %476

393:                                              ; preds = %389
  %394 = getelementptr inbounds i8, ptr %84, i64 240
  %395 = load float, ptr %394, align 8, !tbaa !45
  %396 = fcmp ueq float %395, 0.000000e+00
  %397 = getelementptr inbounds i8, ptr %84, i64 244
  %398 = load float, ptr %397, align 4
  %399 = fcmp ueq float %398, 0.000000e+00
  %or.cond311 = select i1 %396, i1 %399, i1 false
  br i1 %or.cond311, label %476, label %400

400:                                              ; preds = %393
  %401 = call noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  br i1 %401, label %476, label %402

402:                                              ; preds = %400
  %403 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26, !range !27, !noundef !28
  %404 = trunc nuw i8 %403 to i1
  br i1 %404, label %429, label %405

405:                                              ; preds = %402
  %406 = load ptr, ptr %0, align 8, !tbaa !15
  %407 = getelementptr inbounds i8, ptr %406, i64 88
  %408 = load ptr, ptr %407, align 8
  call void %408(ptr noundef nonnull align 8 dereferenceable(9) %0, i32 noundef 0)
  %409 = load i64, ptr %113, align 4
  store i64 %409, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin, align 4
  %410 = call noundef i64 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  call void @_ZNSt6vectorI6ImVec2SaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %410)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #11
  %411 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  store ptr %411, ptr %55, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #11
  %412 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  store ptr %412, ptr %56, align 8
  %413 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56) #11
  br i1 %413, label %.lr.ph351, label %._crit_edge352

._crit_edge352:                                   ; preds = %.lr.ph351, %405
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #11
  br label %429

.lr.ph351:                                        ; preds = %405, %.lr.ph351
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph351 ], [ 0, %405 ]
  %414 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %55) #11
  %415 = load i32, ptr %414, align 4, !tbaa !39
  %416 = sext i32 %415 to i64
  %417 = load ptr, ptr %0, align 8, !tbaa !15
  %418 = getelementptr inbounds i8, ptr %417, i64 56
  %419 = load ptr, ptr %418, align 8
  %420 = call noundef ptr %419(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %416)
  %421 = getelementptr inbounds i8, ptr %414, i64 4
  %422 = load i32, ptr %421, align 4, !tbaa !41
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds %struct.ImVec2, ptr %420, i64 %423
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %425 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %indvars.iv) #11
  %426 = load i64, ptr %424, align 4
  store i64 %426, ptr %425, align 4
  %427 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %55) #11
  %428 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56) #11
  br i1 %428, label %.lr.ph351, label %._crit_edge352

429:                                              ; preds = %._crit_edge352, %402
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %57) #11
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2ERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %57, ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #11
  %430 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %57) #11
  store ptr %430, ptr %58, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #11
  %431 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %57) #11
  store ptr %431, ptr %59, align 8
  %432 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 8 dereferenceable(8) %59) #11
  br i1 %432, label %.lr.ph355, label %._crit_edge356

.lr.ph355:                                        ; preds = %429
  %433 = getelementptr inbounds i8, ptr %63, i64 4
  br label %434

._crit_edge356:                                   ; preds = %472, %429
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #11
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %57) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %57) #11
  br label %476

434:                                              ; preds = %.lr.ph355, %472
  %indvars.iv384 = phi i64 [ 0, %.lr.ph355 ], [ %indvars.iv.next385, %472 ]
  %435 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %58) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #11
  %436 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %indvars.iv384) #11
  %.sroa.052.0.copyload = load <2 x float>, ptr %436, align 4
  %437 = invoke <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.052.0.copyload)
          to label %438 unwind label %463

438:                                              ; preds = %434
  store <2 x float> %437, ptr %60, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #11
  %439 = invoke <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %113, ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin)
          to label %440 unwind label %465

440:                                              ; preds = %438
  store <2 x float> %439, ptr %62, align 8
  %441 = invoke <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %62, ptr noundef nonnull align 4 dereferenceable(8) %22)
          to label %442 unwind label %465

442:                                              ; preds = %440
  store <2 x float> %441, ptr %61, align 8
  %443 = invoke <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %60, ptr noundef nonnull align 4 dereferenceable(8) %61)
          to label %444 unwind label %465

444:                                              ; preds = %442
  %445 = invoke <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %26, <2 x float> %443)
          to label %446 unwind label %465

446:                                              ; preds = %444
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #11
  %447 = load i32, ptr %435, align 4, !tbaa !39
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds i8, ptr %435, i64 4
  %450 = load i32, ptr %449, align 4, !tbaa !41
  %451 = load ptr, ptr %0, align 8, !tbaa !15
  %452 = getelementptr inbounds i8, ptr %451, i64 64
  %453 = load ptr, ptr %452, align 8
  %454 = invoke noundef i32 %453(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %448, i32 noundef %450, <2 x float> %445)
          to label %455 unwind label %468

455:                                              ; preds = %446
  %456 = load i32, ptr %449, align 4, !tbaa !41
  %.not297 = icmp eq i32 %454, %456
  br i1 %.not297, label %472, label %457

457:                                              ; preds = %455
  %458 = invoke noundef i64 @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5eraseERKS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %435)
          to label %459 unwind label %468

459:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #11
  %460 = load i32, ptr %435, align 4, !tbaa !39
  store i32 %460, ptr %63, align 4, !tbaa !39
  store i32 %454, ptr %433, align 4, !tbaa !41
  %461 = invoke { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %63)
          to label %462 unwind label %470

462:                                              ; preds = %459
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #11
  br label %472

463:                                              ; preds = %434
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %467

465:                                              ; preds = %444, %442, %440, %438
  %466 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #11
  br label %467

467:                                              ; preds = %465, %463
  %.pn = phi { ptr, i32 } [ %466, %465 ], [ %464, %463 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #11
  br label %475

468:                                              ; preds = %457, %446
  %469 = landingpad { ptr, i32 }
          cleanup
  br label %475

470:                                              ; preds = %459
  %471 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #11
  br label %475

472:                                              ; preds = %462, %455
  %indvars.iv.next385 = add nuw nsw i64 %indvars.iv384, 1
  %473 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %58) #11
  %474 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 8 dereferenceable(8) %59) #11
  br i1 %474, label %434, label %._crit_edge356

475:                                              ; preds = %468, %470, %467
  %.pn298.pn = phi { ptr, i32 } [ %.pn, %467 ], [ %471, %470 ], [ %469, %468 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #11
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %57) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %57) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  resume { ptr, i32 } %.pn298.pn

476:                                              ; preds = %393, %400, %._crit_edge356, %389, %386
  %.0 = phi i32 [ 0, %400 ], [ 1, %._crit_edge356 ], [ 0, %389 ], [ 0, %386 ], [ 0, %393 ]
  %477 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !26, !range !27, !noundef !28
  %478 = trunc nuw i8 %477 to i1
  br i1 %478, label %479, label %490

479:                                              ; preds = %476
  %480 = getelementptr inbounds i8, ptr %84, i64 3580
  %481 = load i8, ptr %480, align 4, !tbaa !26, !range !27, !noundef !28
  %482 = trunc nuw i8 %481 to i1
  br i1 %482, label %490, label %483

483:                                              ; preds = %479
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !26
  %484 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26, !range !27, !noundef !28
  %485 = trunc nuw i8 %484 to i1
  br i1 %485, label %486, label %490

486:                                              ; preds = %483
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26
  %487 = load ptr, ptr %0, align 8, !tbaa !15
  %488 = getelementptr inbounds i8, ptr %487, i64 96
  %489 = load ptr, ptr %488, align 8
  call void %489(ptr noundef nonnull align 8 dereferenceable(9) %0)
  br label %490

490:                                              ; preds = %483, %486, %479, %476
  %491 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  %.not301 = icmp eq i32 %491, -1
  br i1 %.not301, label %512, label %492

492:                                              ; preds = %490
  %493 = getelementptr inbounds i8, ptr %84, i64 14133
  %494 = load i8, ptr %493, align 1, !tbaa !26, !range !27, !noundef !28
  %495 = trunc nuw i8 %494 to i1
  br i1 %495, label %496, label %512

496:                                              ; preds = %492
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #11
  %497 = call <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %113, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %497, ptr %64, align 8
  %498 = call <2 x float> @_ZN11ImCurveEditdvERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %64, ptr noundef nonnull align 4 dereferenceable(8) %21)
  %499 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %26, <2 x float> %498)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #11
  %500 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  %501 = load ptr, ptr %0, align 8, !tbaa !15
  %502 = getelementptr inbounds i8, ptr %501, i64 88
  %503 = load ptr, ptr %502, align 8
  call void %503(ptr noundef nonnull align 8 dereferenceable(9) %0, i32 noundef %500)
  %504 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  %505 = sext i32 %504 to i64
  %506 = load ptr, ptr %0, align 8, !tbaa !15
  %507 = getelementptr inbounds i8, ptr %506, i64 72
  %508 = load ptr, ptr %507, align 8
  call void %508(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %505, <2 x float> %499)
  %509 = load ptr, ptr %0, align 8, !tbaa !15
  %510 = getelementptr inbounds i8, ptr %509, i64 96
  %511 = load ptr, ptr %510, align 8
  call void %511(ptr noundef nonnull align 8 dereferenceable(9) %0)
  br label %512

512:                                              ; preds = %496, %492, %490
  %.1 = phi i32 [ 1, %496 ], [ %.0, %492 ], [ %.0, %490 ]
  %513 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  %.not302 = icmp eq i32 %513, -1
  br i1 %.not302, label %555, label %514

514:                                              ; preds = %512
  %515 = sext i32 %513 to i64
  %516 = load ptr, ptr %0, align 8, !tbaa !15
  %517 = getelementptr inbounds i8, ptr %516, i64 40
  %518 = load ptr, ptr %517, align 8
  %519 = call noundef i64 %518(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %515)
  %520 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  %521 = sext i32 %520 to i64
  %522 = load ptr, ptr %0, align 8, !tbaa !15
  %523 = getelementptr inbounds i8, ptr %522, i64 56
  %524 = load ptr, ptr %523, align 8
  %525 = call noundef ptr %524(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %521)
  %526 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26, !range !27, !noundef !28
  %527 = trunc nuw i8 %526 to i1
  br i1 %527, label %.loopexit314, label %528

528:                                              ; preds = %514
  %529 = load i64, ptr %113, align 4
  store i64 %529, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin, align 4
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26
  call void @_ZNSt6vectorI6ImVec2SaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %519)
  %.not373 = icmp eq i64 %519, 0
  br i1 %.not373, label %.loopexit313, label %.lr.ph359

.lr.ph359:                                        ; preds = %528, %.lr.ph359
  %.0272357 = phi i64 [ %533, %.lr.ph359 ], [ 0, %528 ]
  %530 = getelementptr inbounds %struct.ImVec2, ptr %525, i64 %.0272357
  %531 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %.0272357) #11
  %532 = load i64, ptr %530, align 4
  store i64 %532, ptr %531, align 4
  %533 = add nuw i64 %.0272357, 1
  %exitcond387.not = icmp eq i64 %533, %519
  br i1 %exitcond387.not, label %.preheader.preheader, label %.lr.ph359, !llvm.loop !46

.loopexit314:                                     ; preds = %514
  %.not303 = icmp eq i64 %519, 0
  br i1 %.not303, label %.loopexit313, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.lr.ph359, %.loopexit314
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %.0271360 = phi i64 [ %547, %.preheader ], [ 0, %.preheader.preheader ]
  %534 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  %535 = sext i32 %534 to i64
  %536 = trunc i64 %.0271360 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #11
  %537 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14originalPoints, i64 noundef %.0271360) #11
  %.sroa.026.0.copyload = load <2 x float>, ptr %537, align 4
  %538 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.026.0.copyload)
  store <2 x float> %538, ptr %65, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #11
  %539 = call <2 x float> @_ZN11ImCurveEditmiERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %113, ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE14mousePosOrigin)
  store <2 x float> %539, ptr %67, align 8
  %540 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %67, ptr noundef nonnull align 4 dereferenceable(8) %22)
  store <2 x float> %540, ptr %66, align 8
  %541 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %65, ptr noundef nonnull align 4 dereferenceable(8) %66)
  %542 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %26, <2 x float> %541)
  %543 = load ptr, ptr %0, align 8, !tbaa !15
  %544 = getelementptr inbounds i8, ptr %543, i64 64
  %545 = load ptr, ptr %544, align 8
  %546 = call noundef i32 %545(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %535, i32 noundef %536, <2 x float> %542)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #11
  %547 = add nuw i64 %.0271360, 1
  %exitcond388.not = icmp eq i64 %547, %519
  br i1 %exitcond388.not, label %.loopexit313, label %.preheader, !llvm.loop !47

.loopexit313:                                     ; preds = %.preheader, %528, %.loopexit314
  %.2 = phi i32 [ %.1, %.loopexit314 ], [ %.1, %528 ], [ 1, %.preheader ]
  %548 = getelementptr inbounds i8, ptr %84, i64 3580
  %549 = load i8, ptr %548, align 4, !tbaa !26, !range !27, !noundef !28
  %550 = trunc nuw i8 %549 to i1
  br i1 %550, label %555, label %551

551:                                              ; preds = %.loopexit313
  store i32 -1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11pointsMoved, align 1, !tbaa !26
  %552 = load ptr, ptr %0, align 8, !tbaa !15
  %553 = getelementptr inbounds i8, ptr %552, i64 96
  %554 = load ptr, ptr %553, align 8
  call void %554(ptr noundef nonnull align 8 dereferenceable(9) %0)
  br label %555

555:                                              ; preds = %.loopexit313, %551, %512
  %.3 = phi i32 [ %.1, %512 ], [ %.2, %551 ], [ %.2, %.loopexit313 ]
  %556 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  %557 = icmp eq i32 %556, -1
  %558 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4
  %559 = icmp ne i32 %558, -1
  %or.cond9 = select i1 %557, i1 %559, i1 false
  br i1 %or.cond9, label %560, label %572

560:                                              ; preds = %555
  %561 = call noundef zeroext i1 @_ZN5ImGui14IsMouseClickedEib(i32 noundef 0, i1 noundef zeroext false)
  br i1 %561, label %562, label %572

562:                                              ; preds = %560
  %563 = call noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  br i1 %563, label %564, label %572

564:                                              ; preds = %562
  %565 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26, !range !27, !noundef !28
  %566 = trunc nuw i8 %565 to i1
  br i1 %566, label %572, label %567

567:                                              ; preds = %564
  %568 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9overCurve, align 4, !tbaa !30
  store i32 %568, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4, !tbaa !30
  %569 = load ptr, ptr %0, align 8, !tbaa !15
  %570 = getelementptr inbounds i8, ptr %569, i64 88
  %571 = load ptr, ptr %570, align 8
  call void %571(ptr noundef nonnull align 8 dereferenceable(9) %0, i32 noundef %568)
  br label %572

572:                                              ; preds = %567, %564, %562, %560, %555
  %573 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26, !range !27, !noundef !28
  %574 = trunc nuw i8 %573 to i1
  br i1 %574, label %575, label %618

575:                                              ; preds = %572
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #11
  %576 = call <2 x float> @_ZL5ImMinRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection, ptr noundef nonnull align 4 dereferenceable(8) %113)
  store <2 x float> %576, ptr %68, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #11
  %577 = call <2 x float> @_ZL5ImMaxRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection, ptr noundef nonnull align 4 dereferenceable(8) %113)
  store <2 x float> %577, ptr %69, align 8
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %68, ptr noundef nonnull align 4 dereferenceable(8) %69, i32 noundef 1090453504, float noundef 1.000000e+00, i32 noundef 0)
  call void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196) %89, ptr noundef nonnull align 4 dereferenceable(8) %68, ptr noundef nonnull align 4 dereferenceable(8) %69, i32 noundef -65536, float noundef 1.000000e+00, i32 noundef 0, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %70) #11
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(8) %68, ptr noundef nonnull align 4 dereferenceable(8) %69)
  %578 = getelementptr inbounds i8, ptr %84, i64 3580
  %579 = load i8, ptr %578, align 4, !tbaa !26, !range !27, !noundef !28
  %580 = trunc nuw i8 %579 to i1
  br i1 %580, label %617, label %581

581:                                              ; preds = %575
  %582 = getelementptr inbounds i8, ptr %84, i64 3597
  %583 = load i8, ptr %582, align 1, !tbaa !42, !range !27, !noundef !28
  %584 = trunc nuw i8 %583 to i1
  br i1 %584, label %586, label %585

585:                                              ; preds = %581
  call void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  br label %586

586:                                              ; preds = %585, %581
  br i1 %.not370, label %._crit_edge365, label %.lr.ph364

.lr.ph364:                                        ; preds = %586
  %587 = getelementptr inbounds i8, ptr %74, i64 4
  br label %588

._crit_edge365:                                   ; preds = %.loopexit, %586
  store i8 0, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26
  br label %617

588:                                              ; preds = %.lr.ph364, %.loopexit
  %.0267362 = phi i64 [ 0, %.lr.ph364 ], [ %616, %.loopexit ]
  %589 = load ptr, ptr %0, align 8, !tbaa !15
  %590 = getelementptr inbounds i8, ptr %589, i64 8
  %591 = load ptr, ptr %590, align 8
  %592 = call noundef zeroext i1 %591(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %.0267362)
  br i1 %592, label %593, label %.loopexit

593:                                              ; preds = %588
  %594 = load ptr, ptr %0, align 8, !tbaa !15
  %595 = getelementptr inbounds i8, ptr %594, i64 40
  %596 = load ptr, ptr %595, align 8
  %597 = call noundef i64 %596(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %.0267362)
  %598 = icmp eq i64 %597, 0
  br i1 %598, label %.loopexit, label %599

599:                                              ; preds = %593
  %600 = load ptr, ptr %0, align 8, !tbaa !15
  %601 = getelementptr inbounds i8, ptr %600, i64 56
  %602 = load ptr, ptr %601, align 8
  %603 = call noundef ptr %602(ptr noundef nonnull align 8 dereferenceable(9) %0, i64 noundef %.0267362)
  %604 = trunc i64 %.0267362 to i32
  br label %605

605:                                              ; preds = %599, %614
  %.0265361 = phi i64 [ 0, %599 ], [ %615, %614 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #11
  %606 = getelementptr inbounds %struct.ImVec2, ptr %603, i64 %.0265361
  %.sroa.012.0.copyload = load <2 x float>, ptr %606, align 4
  %607 = call <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16) %25, <2 x float> %.sroa.012.0.copyload)
  store <2 x float> %607, ptr %73, align 8
  %608 = call <2 x float> @_ZN11ImCurveEditmlERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %73, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %608, ptr %72, align 8
  %609 = call <2 x float> @_ZN11ImCurveEditplERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(8) %72, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %609, ptr %71, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #11
  %610 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(8) %71)
  br i1 %610, label %611, label %614

611:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #11
  store i32 %604, ptr %74, align 4, !tbaa !39
  %612 = trunc i64 %.0265361 to i32
  store i32 %612, ptr %587, align 4, !tbaa !41
  %613 = call { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection, ptr noundef nonnull align 4 dereferenceable(8) %74)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #11
  br label %614

614:                                              ; preds = %611, %605
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #11
  %615 = add nuw i64 %.0265361, 1
  %exitcond389.not = icmp eq i64 %615, %597
  br i1 %exitcond389.not, label %.loopexit, label %605, !llvm.loop !48

.loopexit:                                        ; preds = %614, %593, %588
  %616 = add nuw i64 %.0267362, 1
  %exitcond390.not = icmp eq i64 %616, %153
  br i1 %exitcond390.not, label %._crit_edge365, label %588, !llvm.loop !49

617:                                              ; preds = %._crit_edge365, %575
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #11
  br label %618

618:                                              ; preds = %617, %572
  br i1 %.0249.lcssa399, label %633, label %619

619:                                              ; preds = %618
  %620 = call noundef zeroext i1 @_ZN5ImGui14IsMouseClickedEib(i32 noundef 0, i1 noundef zeroext false)
  br i1 %620, label %621, label %633

621:                                              ; preds = %619
  %622 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26, !range !27, !noundef !28
  %623 = trunc nuw i8 %622 to i1
  %624 = load i32, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE11movingCurve, align 4
  %625 = icmp ne i32 %624, -1
  %or.cond11.not = select i1 %623, i1 true, i1 %625
  br i1 %or.cond11.not, label %633, label %626

626:                                              ; preds = %621
  %627 = load i8, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE17overSelectedPoint, align 1, !tbaa !26, !range !27, !noundef !28
  %628 = trunc nuw i8 %627 to i1
  br i1 %628, label %633, label %629

629:                                              ; preds = %626
  %630 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(8) %113)
  br i1 %630, label %631, label %633

631:                                              ; preds = %629
  store i8 1, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13selectingQuad, align 1, !tbaa !26
  %632 = load i64, ptr %113, align 4
  store i64 %632, ptr @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE13quadSelection, align 4
  br label %633

633:                                              ; preds = %631, %629, %626, %621, %619, %618
  br i1 %.not294, label %635, label %634

634:                                              ; preds = %633
  call void @_ZN10ImDrawList11PopClipRectEv(ptr noundef nonnull align 8 dereferenceable(196) %89)
  br label %635

635:                                              ; preds = %634, %633
  call void @_ZN5ImGui13EndChildFrameEv()
  call void @_ZN5ImGui11PopStyleVarEi(i32 noundef 1)
  call void @_ZN5ImGui13PopStyleColorEi(i32 noundef 1)
  %.not = icmp eq ptr %4, null
  br i1 %.not, label %648, label %636

636:                                              ; preds = %635
  %637 = call noundef i64 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  %638 = trunc i64 %637 to i32
  call void @_ZN8ImVectorIN11ImCurveEdit9EditPointEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %638)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #11
  %639 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  store ptr %639, ptr %75, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #11
  %640 = call ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) @_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEE9selection) #11
  store ptr %640, ptr %76, align 8
  %641 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(8) %76) #11
  br i1 %641, label %.lr.ph368, label %._crit_edge369

._crit_edge369:                                   ; preds = %.lr.ph368, %636
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #11
  br label %648

.lr.ph368:                                        ; preds = %636, %.lr.ph368
  %.0253366 = phi i32 [ %643, %.lr.ph368 ], [ 0, %636 ]
  %642 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %75) #11
  %643 = add nuw nsw i32 %.0253366, 1
  %644 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN8ImVectorIN11ImCurveEdit9EditPointEEixEi(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef %.0253366)
  %645 = load i64, ptr %642, align 4
  store i64 %645, ptr %644, align 4
  %646 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %75) #11
  %647 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(8) %76) #11
  br i1 %647, label %.lr.ph368, label %._crit_edge369

648:                                              ; preds = %._crit_edge369, %635
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  ret i32 %.3
}

; Function Attrs: nofree nounwind
declare i32 @__cxa_guard_acquire(ptr) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: nofree nounwind
declare i32 @__cxa_atexit(ptr, ptr, ptr) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare void @__cxa_guard_release(ptr) local_unnamed_addr #1

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

declare noundef nonnull align 8 dereferenceable(14264) ptr @_ZN5ImGui5GetIOEv() local_unnamed_addr #4

declare void @_ZN5ImGui12PushStyleVarEiRK6ImVec2(i32 noundef, ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #4

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

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

declare void @_ZN5ImGui14PushStyleColorEij(i32 noundef, i32 noundef) local_unnamed_addr #4

declare noundef zeroext i1 @_ZN5ImGui15BeginChildFrameEjRK6ImVec2i(i32 noundef, ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #4

declare noundef zeroext i1 @_ZN5ImGui15IsWindowFocusedEi(i32 noundef) local_unnamed_addr #4

declare noundef ptr @_ZN5ImGui17GetWindowDrawListEv() local_unnamed_addr #4

declare void @_ZN10ImDrawList12PushClipRectERK6ImVec2S2_b(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i1 noundef zeroext) local_unnamed_addr #4

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

declare <2 x float> @_ZN5ImGui18GetCursorScreenPosEv() local_unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_0clEf"(ptr noundef nonnull align 8 dereferenceable(16), float noundef) local_unnamed_addr #6 align 2

declare noundef zeroext i1 @_ZN5ImGui11IsMouseDownEi(i32 noundef) local_unnamed_addr #4

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

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

declare void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZN10ImDrawList7AddLineERK6ImVec2S2_jf(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL6ImSwapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_1clES2_"(ptr noundef nonnull align 8 dereferenceable(16), <2 x float>) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden noundef float @_ZN11ImCurveEditL10smoothstepEfff(float noundef, float noundef, float noundef) local_unnamed_addr #8

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZN11ImCurveEditL9DrawPointEP10ImDrawList6ImVec2S2_S2_b(ptr noundef, <2 x float>, <2 x float>, <2 x float>, i1 noundef zeroext) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4findERKS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqRKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEES4_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorI6ImVec2SaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorI6ImVec2SaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorI6ImVec2SaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI6ImVec2SaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN11ImCurveEdit9EditPointEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EEC2ERKS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @"_ZZN11ImCurveEdit4EditERNS_8DelegateERK6ImVec2jPK6ImRectP8ImVectorINS_9EditPointEEENK3$_2clES2_"(ptr noundef nonnull align 8 dereferenceable(16), <2 x float>) local_unnamed_addr #7 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3setIN11ImCurveEdit9EditPointESt4lessIS1_ESaIS1_EE5eraseERKS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #8 align 2

declare noundef zeroext i1 @_ZN5ImGui14IsMouseClickedEib(i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

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

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

declare void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef, i32 noundef, float noundef) local_unnamed_addr #4

declare void @_ZN10ImDrawList11PopClipRectEv(ptr noundef nonnull align 8 dereferenceable(196)) local_unnamed_addr #4

declare void @_ZN5ImGui13EndChildFrameEv() local_unnamed_addr #4

declare void @_ZN5ImGui11PopStyleVarEi(i32 noundef) local_unnamed_addr #4

declare void @_ZN5ImGui13PopStyleColorEi(i32 noundef) local_unnamed_addr #4

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #10

attributes #0 = { 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 #1 = { nofree nounwind }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { inlinehint mustprogress 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 #7 = { 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 #8 = { 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 #9 = { 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 #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { 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 = !{!"branch_weights", i32 1, i32 1048575}
!6 = !{!7, !8, i64 8}
!7 = !{!"_ZTSN11ImCurveEdit8DelegateE", !8, i64 8}
!8 = !{!"bool", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!12, !13, i64 4}
!12 = !{!"_ZTS6ImVec2", !13, i64 0, !13, i64 4}
!13 = !{!"float", !9, i64 0}
!14 = !{!12, !13, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"vtable pointer", !10, i64 0}
!17 = !{!18, !13, i64 3588}
!18 = !{!"_ZTS7ImGuiIO", !19, i64 0, !19, i64 4, !12, i64 8, !13, i64 16, !13, i64 20, !20, i64 24, !20, i64 32, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !20, i64 72, !20, i64 80, !13, i64 88, !8, i64 92, !20, i64 96, !12, i64 104, !8, i64 112, !8, i64 113, !8, i64 114, !8, i64 115, !8, i64 116, !8, i64 117, !8, i64 118, !8, i64 119, !13, i64 120, !20, i64 128, !20, i64 136, !20, i64 144, !20, i64 152, !20, i64 160, !20, i64 168, !20, i64 176, !20, i64 184, !20, i64 192, !20, i64 200, !8, i64 208, !8, i64 209, !8, i64 210, !8, i64 211, !8, i64 212, !8, i64 213, !8, i64 214, !13, i64 216, !19, i64 220, !19, i64 224, !19, i64 228, !19, i64 232, !19, i64 236, !12, i64 240, !9, i64 248, !9, i64 2856, !9, i64 3508, !12, i64 3572, !9, i64 3580, !13, i64 3588, !13, i64 3592, !8, i64 3596, !8, i64 3597, !8, i64 3598, !8, i64 3599, !19, i64 3600, !9, i64 3604, !8, i64 14036, !12, i64 14040, !9, i64 14048, !9, i64 14088, !9, i64 14128, !9, i64 14133, !9, i64 14138, !9, i64 14148, !9, i64 14158, !9, i64 14163, !9, i64 14168, !9, i64 14176, !9, i64 14196, !9, i64 14216, !13, i64 14236, !8, i64 14240, !8, i64 14241, !9, i64 14242, !8, i64 14243, !21, i64 14244, !22, i64 14248}
!19 = !{!"int", !9, i64 0}
!20 = !{!"any pointer", !9, i64 0}
!21 = !{!"short", !9, i64 0}
!22 = !{!"_ZTS8ImVectorItE", !19, i64 0, !19, i64 4, !20, i64 8}
!23 = !{!18, !13, i64 3576}
!24 = !{!13, !13, i64 0}
!25 = !{!20, !20, i64 0}
!26 = !{!8, !8, i64 0}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!18, !13, i64 244}
!30 = !{!19, !19, i64 0}
!31 = distinct !{!31, !32, !33, !34}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!"llvm.loop.isvectorized", i32 1}
!34 = !{!"llvm.loop.unroll.runtime.disable"}
!35 = distinct !{!35, !32, !34, !33}
!36 = !{!18, !13, i64 3572}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = !{!40, !19, i64 0}
!40 = !{!"_ZTSN11ImCurveEdit9EditPointE", !19, i64 0, !19, i64 4}
!41 = !{!40, !19, i64 4}
!42 = !{!18, !8, i64 3597}
!43 = distinct !{!43, !32}
!44 = distinct !{!44, !32}
!45 = !{!18, !13, i64 240}
!46 = distinct !{!46, !32}
!47 = distinct !{!47, !32}
!48 = distinct !{!48, !32}
!49 = distinct !{!49, !32}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass