; LLVM IR from hadryansalles/Luz :: deps/imgui/ImGuizmo.ll (ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j)

; 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.ImGuizmo::Context" = type { ptr, i32, %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, %"struct.ImGuizmo::vec_t", i8, i8, i8, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, float, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, [3 x i8], [3 x i8], [3 x float], %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", i32, [2 x i32], i8, %"struct.ImGuizmo::matrix_t", i32, float, float, float, float, float, float, float, i8, i32, i32, i32, i8, float }
%struct.ImVec2 = type { float, float }
%"struct.ImGuizmo::vec_t" = type { float, float, float, float }
%"struct.ImGuizmo::matrix_t" = type { %union.anon }
%union.anon = type { [4 x [4 x float]] }
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }
%struct.anon = type { %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t" }
%struct.ImGuiIO = type { i32, i32, %struct.ImVec2, float, float, ptr, ptr, ptr, ptr, float, i8, ptr, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, i8, i8, i8, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i16, i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, i32, %struct.ImVec2, [666 x i32], [666 x i8], [16 x float], ptr, %struct.ImVec2, [5 x i8], float, float, i32, i32, i8, i8, i8, i8, i32, [666 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], i8, [5 x float], [5 x float], [5 x %struct.ImVec2], [5 x float], float, i8, i8, i8, i8, i16, %struct.ImVector.0 }
%struct.ImGuiKeyData = type { i8, float, float, float }
%struct.ImVector.0 = type { i32, i32, ptr }

@_ZN8ImGuizmoL8gContextE = external hidden global %"struct.ImGuizmo::Context", align 8
@_ZN8ImGuizmoL14directionUnaryE = external hidden global [3 x %"struct.ImGuizmo::vec_t"], align 16
@_ZN8ImGuizmoL14directionColorE = external hidden constant [3 x i32], align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging = external hidden global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking = external hidden global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside = external hidden global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp = external hidden global %"struct.ImGuizmo::vec_t", align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir = external hidden global %"struct.ImGuizmo::vec_t", align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames = external hidden global i32, align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition = external hidden constant [9 x %struct.ImVec2], align 16
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize = external hidden constant [9 x %struct.ImVec2], align 16
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [75 x i8], align 1
@__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j = external hidden unnamed_addr constant [69 x i8], align 1

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef, float noundef, float noundef, float noundef, ptr noundef) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef, float noundef, float noundef, float noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16), float noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #4 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #2

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(64), i1 noundef zeroext) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(16), float noundef) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind noalias writable sret(%"struct.ImGuizmo::matrix_t") align 4, ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(64)) #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN8ImGuizmoL14ComputeContextEPKfS1_PfNS_4MODEE(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #7

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

declare void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef, i32 noundef, i32 noundef) #8

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j(ptr noundef %0, float noundef %1, <2 x float> %2, <2 x float> %3, i32 noundef %4) #7 {
  %6 = alloca %struct.ImVec2, align 4
  %7 = alloca %struct.ImVec2, align 4
  %8 = alloca ptr, align 8
  %9 = alloca float, align 4
  %10 = alloca i32, align 4
  %11 = alloca %"struct.ImGuizmo::vec_t", align 4
  %12 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %13 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %14 = alloca ptr, align 8
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %17 = alloca %"struct.ImGuizmo::vec_t", align 4
  %18 = alloca %"struct.ImGuizmo::vec_t", align 4
  %19 = alloca float, align 4
  %20 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %21 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %22 = alloca float, align 4
  %23 = alloca %"struct.ImGuizmo::vec_t", align 4
  %24 = alloca %"struct.ImGuizmo::vec_t", align 4
  %25 = alloca %"struct.ImGuizmo::vec_t", align 4
  %26 = alloca %"struct.ImGuizmo::vec_t", align 4
  %27 = alloca %struct.ImVec2, align 4
  %28 = alloca %struct.ImVec2, align 4
  %29 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %30 = alloca [27 x i8], align 16
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca float, align 4
  %38 = alloca %"struct.ImGuizmo::vec_t", align 4
  %39 = alloca %"struct.ImGuizmo::vec_t", align 4
  %40 = alloca %"struct.ImGuizmo::vec_t", align 4
  %41 = alloca %"struct.ImGuizmo::vec_t", align 4
  %42 = alloca %"struct.ImGuizmo::vec_t", align 4
  %43 = alloca %"struct.ImGuizmo::vec_t", align 4
  %44 = alloca %"struct.ImGuizmo::vec_t", align 4
  %45 = alloca %"struct.ImGuizmo::vec_t", align 4
  %46 = alloca %"struct.ImGuizmo::vec_t", align 4
  %47 = alloca %"struct.ImGuizmo::vec_t", align 4
  %48 = alloca %"struct.ImGuizmo::vec_t", align 4
  %49 = alloca %"struct.ImGuizmo::vec_t", align 4
  %50 = alloca float, align 4
  %51 = alloca %"struct.ImGuizmo::vec_t", align 4
  %52 = alloca %"struct.ImGuizmo::vec_t", align 4
  %53 = alloca %"struct.ImGuizmo::vec_t", align 4
  %54 = alloca %"struct.ImGuizmo::vec_t", align 4
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca %"struct.ImGuizmo::vec_t", align 4
  %58 = alloca %"struct.ImGuizmo::vec_t", align 4
  %59 = alloca %"struct.ImGuizmo::vec_t", align 4
  %60 = alloca %"struct.ImGuizmo::vec_t", align 4
  %61 = alloca i32, align 4
  %62 = alloca %"struct.ImGuizmo::vec_t", align 4
  %63 = alloca %"struct.ImGuizmo::vec_t", align 4
  %64 = alloca %"struct.ImGuizmo::vec_t", align 4
  %65 = alloca %"struct.ImGuizmo::vec_t", align 4
  %66 = alloca %"struct.ImGuizmo::vec_t", align 4
  %67 = alloca %"struct.ImGuizmo::vec_t", align 4
  %68 = alloca %struct.ImVec2, align 4
  %69 = alloca %struct.ImVec2, align 4
  %70 = alloca [4 x %struct.ImVec2], align 16
  %71 = alloca [4 x %"struct.ImGuizmo::vec_t"], align 16
  %72 = alloca %"struct.ImGuizmo::vec_t", align 4
  %73 = alloca %"struct.ImGuizmo::vec_t", align 4
  %74 = alloca %"struct.ImGuizmo::vec_t", align 4
  %75 = alloca %"struct.ImGuizmo::vec_t", align 4
  %76 = alloca %"struct.ImGuizmo::vec_t", align 4
  %77 = alloca %"struct.ImGuizmo::vec_t", align 4
  %78 = alloca %"struct.ImGuizmo::vec_t", align 4
  %79 = alloca %"struct.ImGuizmo::vec_t", align 4
  %80 = alloca i32, align 4
  %81 = alloca %struct.ImVec2, align 4
  %82 = alloca %"struct.ImGuizmo::vec_t", align 4
  %83 = alloca %"struct.ImGuizmo::vec_t", align 4
  %84 = alloca %"struct.ImGuizmo::vec_t", align 4
  %85 = alloca %struct.ImVec2, align 4
  %86 = alloca %struct.ImVec2, align 4
  %87 = alloca [2 x %struct.ImVec2], align 16
  %88 = alloca i8, align 1
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca %"struct.ImGuizmo::vec_t", align 4
  %94 = alloca %"struct.ImGuizmo::vec_t", align 4
  %95 = alloca %"struct.ImGuizmo::vec_t", align 4
  %96 = alloca %"struct.ImGuizmo::vec_t", align 4
  %97 = alloca %"struct.ImGuizmo::vec_t", align 4
  %98 = alloca %"struct.ImGuizmo::vec_t", align 4
  %99 = alloca %"struct.ImGuizmo::vec_t", align 4
  %100 = alloca %"struct.ImGuizmo::vec_t", align 4
  %101 = alloca %"struct.ImGuizmo::vec_t", align 4
  %102 = alloca %"struct.ImGuizmo::vec_t", align 4
  %103 = alloca %"struct.ImGuizmo::vec_t", align 4
  %104 = alloca %"struct.ImGuizmo::vec_t", align 4
  %105 = alloca %struct.ImRect, align 4
  %106 = alloca %struct.ImVec2, align 4
  %107 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %108 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %109 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %110 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %111 = alloca %"struct.ImGuizmo::vec_t", align 4
  %112 = alloca %"struct.ImGuizmo::vec_t", align 4
  %113 = alloca %"struct.ImGuizmo::vec_t", align 4
  %114 = alloca %"struct.ImGuizmo::vec_t", align 4
  %115 = alloca float, align 4
  %116 = alloca %"struct.ImGuizmo::vec_t", align 4
  %117 = alloca %"struct.ImGuizmo::vec_t", align 4
  %118 = alloca %"struct.ImGuizmo::vec_t", align 4
  %119 = alloca %"struct.ImGuizmo::vec_t", align 4
  store <2 x float> %2, ptr %6, align 4
  store <2 x float> %3, ptr %7, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store float %1, ptr %9, align 4, !tbaa !9
  store i32 %4, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #12
  %120 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %121 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %11, i32 0, i32 0
  %122 = extractvalue { <2 x float>, <2 x float> } %120, 0
  store <2 x float> %122, ptr %121, align 4
  %123 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %11, i32 0, i32 1
  %124 = extractvalue { <2 x float>, <2 x float> } %120, 1
  store <2 x float> %124, ptr %123, align 4
  call void @llvm.lifetime.start.p0(i64 64, ptr %12) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %12)
  call void @llvm.lifetime.start.p0(i64 64, ptr %13) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %13)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 2), i64 64, i1 false), !tbaa.struct !13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 3), i64 64, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #12
  %125 = call noundef nonnull align 8 dereferenceable(14616) ptr @_ZN5ImGui5GetIOEv()
  store ptr %125, ptr %14, align 8, !tbaa !5
  %126 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #12
  %127 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %127, ptr %15, align 4
  %128 = load i32, ptr %10, align 4, !tbaa !11
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %126, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %128, float noundef 0.000000e+00, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %16)
  %129 = load ptr, ptr %8, align 8, !tbaa !5
  %130 = call noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64) %16, ptr noundef nonnull align 4 dereferenceable(64) %129, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #12
  %131 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %132 = getelementptr inbounds %struct.anon, ptr %131, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #12
  %133 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %134 = getelementptr inbounds %struct.anon, ptr %133, i32 0, i32 2
  %135 = load float, ptr %9, align 4, !tbaa !9
  %136 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %134, float noundef %135)
  %137 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 0
  %138 = extractvalue { <2 x float>, <2 x float> } %136, 0
  store <2 x float> %138, ptr %137, align 4
  %139 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 1
  %140 = extractvalue { <2 x float>, <2 x float> } %136, 1
  store <2 x float> %140, ptr %139, align 4
  %141 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %132, ptr noundef nonnull align 4 dereferenceable(16) %18)
  %142 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, i32 0, i32 0
  %143 = extractvalue { <2 x float>, <2 x float> } %141, 0
  store <2 x float> %143, ptr %142, align 4
  %144 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, i32 0, i32 1
  %145 = extractvalue { <2 x float>, <2 x float> } %141, 1
  store <2 x float> %145, ptr %144, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #12
  store float 3.000000e+00, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %20) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %20)
  call void @llvm.lifetime.start.p0(i64 64, ptr %21) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %21)
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #12
  %146 = call float @sqrtf(float noundef 1.200000e+01) #12
  %147 = fdiv float 3.000000e+00, %146
  %148 = call float @acosf(float noundef %147) #12
  %149 = fmul float %148, 0x404CA5DC00000000
  store float %149, ptr %22, align 4, !tbaa !9
  %150 = load float, ptr %22, align 4, !tbaa !9
  %151 = call float @sqrtf(float noundef 2.000000e+00) #12
  %152 = fdiv float %150, %151
  %153 = getelementptr inbounds %struct.ImVec2, ptr %7, i32 0, i32 0
  %154 = load float, ptr %153, align 4, !tbaa !23
  %155 = getelementptr inbounds %struct.ImVec2, ptr %7, i32 0, i32 1
  %156 = load float, ptr %155, align 4, !tbaa !24
  %157 = fdiv float %154, %156
  %158 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %20, i32 0, i32 0
  %159 = getelementptr inbounds [16 x float], ptr %158, i64 0, i64 0
  call void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef %152, float noundef %157, float noundef 0x3F847AE140000000, float noundef 1.000000e+03, ptr noundef %159)
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #12
  %160 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %161 = getelementptr inbounds [4 x [4 x float]], ptr %160, i64 0, i64 2
  %162 = getelementptr inbounds [4 x float], ptr %161, i64 0, i64 0
  %163 = load float, ptr %162, align 4, !tbaa !14
  %164 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %165 = getelementptr inbounds [4 x [4 x float]], ptr %164, i64 0, i64 2
  %166 = getelementptr inbounds [4 x float], ptr %165, i64 0, i64 1
  %167 = load float, ptr %166, align 4, !tbaa !14
  %168 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %169 = getelementptr inbounds [4 x [4 x float]], ptr %168, i64 0, i64 2
  %170 = getelementptr inbounds [4 x float], ptr %169, i64 0, i64 2
  %171 = load float, ptr %170, align 4, !tbaa !14
  %172 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %163, float noundef %167, float noundef %171, float noundef 0.000000e+00)
  %173 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %23, i32 0, i32 0
  %174 = extractvalue { <2 x float>, <2 x float> } %172, 0
  store <2 x float> %174, ptr %173, align 4
  %175 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %23, i32 0, i32 1
  %176 = extractvalue { <2 x float>, <2 x float> } %172, 1
  store <2 x float> %176, ptr %175, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #12
  %177 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %178 = getelementptr inbounds [4 x [4 x float]], ptr %177, i64 0, i64 1
  %179 = getelementptr inbounds [4 x float], ptr %178, i64 0, i64 0
  %180 = load float, ptr %179, align 4, !tbaa !14
  %181 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %182 = getelementptr inbounds [4 x [4 x float]], ptr %181, i64 0, i64 1
  %183 = getelementptr inbounds [4 x float], ptr %182, i64 0, i64 1
  %184 = load float, ptr %183, align 4, !tbaa !14
  %185 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %186 = getelementptr inbounds [4 x [4 x float]], ptr %185, i64 0, i64 1
  %187 = getelementptr inbounds [4 x float], ptr %186, i64 0, i64 2
  %188 = load float, ptr %187, align 4, !tbaa !14
  %189 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %180, float noundef %184, float noundef %188, float noundef 0.000000e+00)
  %190 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 0
  %191 = extractvalue { <2 x float>, <2 x float> } %189, 0
  store <2 x float> %191, ptr %190, align 4
  %192 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 1
  %193 = extractvalue { <2 x float>, <2 x float> } %189, 1
  store <2 x float> %193, ptr %192, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #12
  %194 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 3.000000e+00)
  %195 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %196 = extractvalue { <2 x float>, <2 x float> } %194, 0
  store <2 x float> %196, ptr %195, align 4
  %197 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %198 = extractvalue { <2 x float>, <2 x float> } %194, 1
  store <2 x float> %198, ptr %197, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #12
  %199 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %200 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, i32 0, i32 0
  %201 = extractvalue { <2 x float>, <2 x float> } %199, 0
  store <2 x float> %201, ptr %200, align 4
  %202 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, i32 0, i32 1
  %203 = extractvalue { <2 x float>, <2 x float> } %199, 1
  store <2 x float> %203, ptr %202, align 4
  %204 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %25, i32 0, i32 0
  %205 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %26, i32 0, i32 0
  %206 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %24, i32 0, i32 0
  %207 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %21, i32 0, i32 0
  %208 = getelementptr inbounds [16 x float], ptr %207, i64 0, i64 0
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %204, ptr noundef %205, ptr noundef %206, ptr noundef %208)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 2), ptr align 4 %21, i64 64, i1 false), !tbaa.struct !13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 3), ptr align 4 %20, i64 64, i1 false), !tbaa.struct !13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %6, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %7, i64 8, i1 false), !tbaa.struct !25
  %209 = load <2 x float>, ptr %27, align 4
  %210 = load <2 x float>, ptr %28, align 4
  call void @_ZN8ImGuizmoL16ComputeCameraRayERNS_5vec_tES1_6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 15), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 16), <2 x float> %209, <2 x float> %210)
  call void @llvm.lifetime.start.p0(i64 64, ptr %29) #12
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind writable sret(%"struct.ImGuizmo::matrix_t") align 4 %29, ptr noundef nonnull align 4 dereferenceable(64) %21, ptr noundef nonnull align 4 dereferenceable(64) %20)
  call void @llvm.lifetime.start.p0(i64 27, ptr %30) #12
  call void @llvm.memset.p0.i64(ptr align 16 %30, i8 0, i64 27, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #12
  store i32 0, ptr %31, align 4, !tbaa !11
  br label %211

211:                                              ; preds = %737, %5
  %212 = load i32, ptr %31, align 4, !tbaa !11
  %213 = icmp slt i32 %212, 2
  br i1 %213, label %215, label %214

214:                                              ; preds = %211
  store i32 2, ptr %32, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  br label %740

215:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #12
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %216

216:                                              ; preds = %733, %215
  %217 = load i32, ptr %33, align 4, !tbaa !11
  %218 = icmp slt i32 %217, 6
  br i1 %218, label %220, label %219

219:                                              ; preds = %216
  store i32 5, ptr %32, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #12
  br label %736

220:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #12
  %221 = load i32, ptr %33, align 4, !tbaa !11
  %222 = srem i32 %221, 3
  store i32 %222, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #12
  %223 = load i32, ptr %34, align 4, !tbaa !11
  %224 = add nsw i32 %223, 1
  %225 = srem i32 %224, 3
  store i32 %225, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #12
  %226 = load i32, ptr %34, align 4, !tbaa !11
  %227 = add nsw i32 %226, 2
  %228 = srem i32 %227, 3
  store i32 %228, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #12
  %229 = load i32, ptr %33, align 4, !tbaa !11
  %230 = icmp sgt i32 %229, 2
  %231 = zext i1 %230 to i64
  %232 = select i1 %230, float -1.000000e+00, float 1.000000e+00
  store float %232, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #12
  %233 = load i32, ptr %35, align 4, !tbaa !11
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %234
  %236 = load float, ptr %37, align 4, !tbaa !9
  %237 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %235, float noundef %236)
  %238 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %38, i32 0, i32 0
  %239 = extractvalue { <2 x float>, <2 x float> } %237, 0
  store <2 x float> %239, ptr %238, align 4
  %240 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %38, i32 0, i32 1
  %241 = extractvalue { <2 x float>, <2 x float> } %237, 1
  store <2 x float> %241, ptr %240, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #12
  %242 = load i32, ptr %36, align 4, !tbaa !11
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %243
  %245 = load float, ptr %37, align 4, !tbaa !9
  %246 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %244, float noundef %245)
  %247 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %39, i32 0, i32 0
  %248 = extractvalue { <2 x float>, <2 x float> } %246, 0
  store <2 x float> %248, ptr %247, align 4
  %249 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %39, i32 0, i32 1
  %250 = extractvalue { <2 x float>, <2 x float> } %246, 1
  store <2 x float> %250, ptr %249, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #12
  %251 = load i32, ptr %34, align 4, !tbaa !11
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %252
  %254 = load float, ptr %37, align 4, !tbaa !9
  %255 = fneg float %254
  %256 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %253, float noundef %255)
  %257 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %42, i32 0, i32 0
  %258 = extractvalue { <2 x float>, <2 x float> } %256, 0
  store <2 x float> %258, ptr %257, align 4
  %259 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %42, i32 0, i32 1
  %260 = extractvalue { <2 x float>, <2 x float> } %256, 1
  store <2 x float> %260, ptr %259, align 4
  %261 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %38)
  %262 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 0
  %263 = extractvalue { <2 x float>, <2 x float> } %261, 0
  store <2 x float> %263, ptr %262, align 4
  %264 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 1
  %265 = extractvalue { <2 x float>, <2 x float> } %261, 1
  store <2 x float> %265, ptr %264, align 4
  %266 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %41, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %267 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %40, i32 0, i32 0
  %268 = extractvalue { <2 x float>, <2 x float> } %266, 0
  store <2 x float> %268, ptr %267, align 4
  %269 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %40, i32 0, i32 1
  %270 = extractvalue { <2 x float>, <2 x float> } %266, 1
  store <2 x float> %270, ptr %269, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #12
  %271 = load i32, ptr %34, align 4, !tbaa !11
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %272
  %274 = load float, ptr %37, align 4, !tbaa !9
  %275 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %273, float noundef %274)
  %276 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, i32 0, i32 0
  %277 = extractvalue { <2 x float>, <2 x float> } %275, 0
  store <2 x float> %277, ptr %276, align 4
  %278 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, i32 0, i32 1
  %279 = extractvalue { <2 x float>, <2 x float> } %275, 1
  store <2 x float> %279, ptr %278, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 4 %43, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #12
  %280 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %43, float noundef 5.000000e-01)
  %281 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %45, i32 0, i32 0
  %282 = extractvalue { <2 x float>, <2 x float> } %280, 0
  store <2 x float> %282, ptr %281, align 4
  %283 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %45, i32 0, i32 1
  %284 = extractvalue { <2 x float>, <2 x float> } %280, 1
  store <2 x float> %284, ptr %283, align 4
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(64) %21)
  %285 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %44)
  %286 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %46, i32 0, i32 0
  %287 = extractvalue { <2 x float>, <2 x float> } %285, 0
  store <2 x float> %287, ptr %286, align 4
  %288 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %46, i32 0, i32 1
  %289 = extractvalue { <2 x float>, <2 x float> } %285, 1
  store <2 x float> %289, ptr %288, align 4
  call void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %45, ptr noundef nonnull align 4 dereferenceable(64) %21)
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #12
  %290 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %45, ptr noundef nonnull align 4 dereferenceable(16) %44)
  %291 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 0
  %292 = extractvalue { <2 x float>, <2 x float> } %290, 0
  store <2 x float> %292, ptr %291, align 4
  %293 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 1
  %294 = extractvalue { <2 x float>, <2 x float> } %290, 1
  store <2 x float> %294, ptr %293, align 4
  %295 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %47, i32 0, i32 3
  %296 = load float, ptr %295, align 4, !tbaa !27
  %297 = fcmp ogt float %296, 0.000000e+00
  br i1 %297, label %298, label %299

298:                                              ; preds = %220
  store i32 7, ptr %32, align 4
  br label %730

299:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #12
  %300 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %43, float noundef 5.000000e-01)
  %301 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 0
  %302 = extractvalue { <2 x float>, <2 x float> } %300, 0
  store <2 x float> %302, ptr %301, align 4
  %303 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 1
  %304 = extractvalue { <2 x float>, <2 x float> } %300, 1
  store <2 x float> %304, ptr %303, align 4
  %305 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %49, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %306 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %48, i32 0, i32 0
  %307 = extractvalue { <2 x float>, <2 x float> } %305, 0
  store <2 x float> %307, ptr %306, align 4
  %308 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %48, i32 0, i32 1
  %309 = extractvalue { <2 x float>, <2 x float> } %305, 1
  store <2 x float> %309, ptr %308, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #12
  %310 = call noundef float @_ZN8ImGuizmoL17IntersectRayPlaneERKNS_5vec_tES2_S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 15), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 16), ptr noundef nonnull align 4 dereferenceable(16) %48)
  store float %310, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #12
  %311 = load float, ptr %50, align 4, !tbaa !9
  %312 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 16), float noundef %311)
  %313 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 0
  %314 = extractvalue { <2 x float>, <2 x float> } %312, 0
  store <2 x float> %314, ptr %313, align 4
  %315 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 1
  %316 = extractvalue { <2 x float>, <2 x float> } %312, 1
  store <2 x float> %316, ptr %315, align 4
  %317 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 15), ptr noundef nonnull align 4 dereferenceable(16) %53)
  %318 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %52, i32 0, i32 0
  %319 = extractvalue { <2 x float>, <2 x float> } %317, 0
  store <2 x float> %319, ptr %318, align 4
  %320 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %52, i32 0, i32 1
  %321 = extractvalue { <2 x float>, <2 x float> } %317, 1
  store <2 x float> %321, ptr %320, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #12
  %322 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %43, float noundef 5.000000e-01)
  %323 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 0
  %324 = extractvalue { <2 x float>, <2 x float> } %322, 0
  store <2 x float> %324, ptr %323, align 4
  %325 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 1
  %326 = extractvalue { <2 x float>, <2 x float> } %322, 1
  store <2 x float> %326, ptr %325, align 4
  %327 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %52, ptr noundef nonnull align 4 dereferenceable(16) %54)
  %328 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %51, i32 0, i32 0
  %329 = extractvalue { <2 x float>, <2 x float> } %327, 0
  store <2 x float> %329, ptr %328, align 4
  %330 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %51, i32 0, i32 1
  %331 = extractvalue { <2 x float>, <2 x float> } %327, 1
  store <2 x float> %331, ptr %330, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #12
  %332 = load i32, ptr %35, align 4, !tbaa !11
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %333
  %335 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %334, ptr noundef nonnull align 4 dereferenceable(16) %51)
  %336 = load float, ptr %37, align 4, !tbaa !9
  %337 = call float @llvm.fmuladd.f32(float %335, float %336, float 5.000000e-01)
  store float %337, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #12
  %338 = load i32, ptr %36, align 4, !tbaa !11
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %339
  %341 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %340, ptr noundef nonnull align 4 dereferenceable(16) %51)
  %342 = load float, ptr %37, align 4, !tbaa !9
  %343 = call float @llvm.fmuladd.f32(float %341, float %342, float 5.000000e-01)
  store float %343, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #12
  %344 = load i32, ptr %35, align 4, !tbaa !11
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %345
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 16 %346, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #12
  %347 = load i32, ptr %36, align 4, !tbaa !11
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %348
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 16 %349, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #12
  %350 = load i32, ptr %34, align 4, !tbaa !11
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %351
  %353 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %352, ptr noundef nonnull align 4 dereferenceable(16) %57)
  %354 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %60, i32 0, i32 0
  %355 = extractvalue { <2 x float>, <2 x float> } %353, 0
  store <2 x float> %355, ptr %354, align 4
  %356 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %60, i32 0, i32 1
  %357 = extractvalue { <2 x float>, <2 x float> } %353, 1
  store <2 x float> %357, ptr %356, align 4
  %358 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %60, ptr noundef nonnull align 4 dereferenceable(16) %58)
  %359 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %59, i32 0, i32 0
  %360 = extractvalue { <2 x float>, <2 x float> } %358, 0
  store <2 x float> %360, ptr %359, align 4
  %361 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %59, i32 0, i32 1
  %362 = extractvalue { <2 x float>, <2 x float> } %358, 1
  store <2 x float> %362, ptr %361, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #12
  store i32 0, ptr %61, align 4, !tbaa !11
  br label %363

363:                                              ; preds = %726, %299
  %364 = load i32, ptr %61, align 4, !tbaa !11
  %365 = icmp slt i32 %364, 9
  br i1 %365, label %367, label %366

366:                                              ; preds = %363
  store i32 8, ptr %32, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  br label %729

367:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #12
  %368 = load i32, ptr %61, align 4, !tbaa !11
  %369 = srem i32 %368, 3
  %370 = sitofp i32 %369 to float
  %371 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %370)
  %372 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %65, i32 0, i32 0
  %373 = extractvalue { <2 x float>, <2 x float> } %371, 0
  store <2 x float> %373, ptr %372, align 4
  %374 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %65, i32 0, i32 1
  %375 = extractvalue { <2 x float>, <2 x float> } %371, 1
  store <2 x float> %375, ptr %374, align 4
  %376 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(16) %65)
  %377 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %64, i32 0, i32 0
  %378 = extractvalue { <2 x float>, <2 x float> } %376, 0
  store <2 x float> %378, ptr %377, align 4
  %379 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %64, i32 0, i32 1
  %380 = extractvalue { <2 x float>, <2 x float> } %376, 1
  store <2 x float> %380, ptr %379, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #12
  %381 = load i32, ptr %61, align 4, !tbaa !11
  %382 = sdiv i32 %381, 3
  %383 = sitofp i32 %382 to float
  %384 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %39, float noundef %383)
  %385 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %66, i32 0, i32 0
  %386 = extractvalue { <2 x float>, <2 x float> } %384, 0
  store <2 x float> %386, ptr %385, align 4
  %387 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %66, i32 0, i32 1
  %388 = extractvalue { <2 x float>, <2 x float> } %384, 1
  store <2 x float> %388, ptr %387, align 4
  %389 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(16) %66)
  %390 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %63, i32 0, i32 0
  %391 = extractvalue { <2 x float>, <2 x float> } %389, 0
  store <2 x float> %391, ptr %390, align 4
  %392 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %63, i32 0, i32 1
  %393 = extractvalue { <2 x float>, <2 x float> } %389, 1
  store <2 x float> %393, ptr %392, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #12
  %394 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %395 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %67, i32 0, i32 0
  %396 = extractvalue { <2 x float>, <2 x float> } %394, 0
  store <2 x float> %396, ptr %395, align 4
  %397 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %67, i32 0, i32 1
  %398 = extractvalue { <2 x float>, <2 x float> } %394, 1
  store <2 x float> %398, ptr %397, align 4
  %399 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %63, ptr noundef nonnull align 4 dereferenceable(16) %67)
  %400 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %62, i32 0, i32 0
  %401 = extractvalue { <2 x float>, <2 x float> } %399, 0
  store <2 x float> %401, ptr %400, align 4
  %402 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %62, i32 0, i32 1
  %403 = extractvalue { <2 x float>, <2 x float> } %399, 1
  store <2 x float> %403, ptr %402, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #12
  %404 = load i32, ptr %61, align 4, !tbaa !11
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %405
  %407 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %406, float noundef 2.000000e+00)
  store <2 x float> %407, ptr %68, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #12
  %408 = load i32, ptr %61, align 4, !tbaa !11
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %409
  %411 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %410, float noundef 2.000000e+00)
  store <2 x float> %411, ptr %69, align 4
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #12
  %412 = getelementptr inbounds [4 x %struct.ImVec2], ptr %70, i32 0, i32 0
  %413 = getelementptr inbounds %struct.ImVec2, ptr %412, i64 4
  br label %414

414:                                              ; preds = %414, %367
  %415 = phi ptr [ %412, %367 ], [ %416, %414 ]
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %415)
  %416 = getelementptr inbounds %struct.ImVec2, ptr %415, i64 1
  %417 = icmp eq ptr %416, %413
  br i1 %417, label %418, label %414

418:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 64, ptr %71) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #12
  %419 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 0
  %420 = load float, ptr %419, align 4, !tbaa !23
  %421 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %420)
  %422 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %72, i32 0, i32 0
  %423 = extractvalue { <2 x float>, <2 x float> } %421, 0
  store <2 x float> %423, ptr %422, align 4
  %424 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %72, i32 0, i32 1
  %425 = extractvalue { <2 x float>, <2 x float> } %421, 1
  store <2 x float> %425, ptr %424, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %73) #12
  %426 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 1
  %427 = load float, ptr %426, align 4, !tbaa !24
  %428 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef %427)
  %429 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %73, i32 0, i32 0
  %430 = extractvalue { <2 x float>, <2 x float> } %428, 0
  store <2 x float> %430, ptr %429, align 4
  %431 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %73, i32 0, i32 1
  %432 = extractvalue { <2 x float>, <2 x float> } %428, 1
  store <2 x float> %432, ptr %431, align 4
  %433 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %72, ptr noundef nonnull align 4 dereferenceable(16) %73)
  %434 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %71, i32 0, i32 0
  %435 = extractvalue { <2 x float>, <2 x float> } %433, 0
  store <2 x float> %435, ptr %434, align 16
  %436 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %71, i32 0, i32 1
  %437 = extractvalue { <2 x float>, <2 x float> } %433, 1
  store <2 x float> %437, ptr %436, align 8
  %438 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %71, i64 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #12
  %439 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 0
  %440 = load float, ptr %439, align 4, !tbaa !23
  %441 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %440)
  %442 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %74, i32 0, i32 0
  %443 = extractvalue { <2 x float>, <2 x float> } %441, 0
  store <2 x float> %443, ptr %442, align 4
  %444 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %74, i32 0, i32 1
  %445 = extractvalue { <2 x float>, <2 x float> } %441, 1
  store <2 x float> %445, ptr %444, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %75) #12
  %446 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 1
  %447 = load float, ptr %446, align 4, !tbaa !24
  %448 = getelementptr inbounds %struct.ImVec2, ptr %69, i32 0, i32 1
  %449 = load float, ptr %448, align 4, !tbaa !24
  %450 = fadd float %447, %449
  %451 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef %450)
  %452 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %75, i32 0, i32 0
  %453 = extractvalue { <2 x float>, <2 x float> } %451, 0
  store <2 x float> %453, ptr %452, align 4
  %454 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %75, i32 0, i32 1
  %455 = extractvalue { <2 x float>, <2 x float> } %451, 1
  store <2 x float> %455, ptr %454, align 4
  %456 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %74, ptr noundef nonnull align 4 dereferenceable(16) %75)
  %457 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %438, i32 0, i32 0
  %458 = extractvalue { <2 x float>, <2 x float> } %456, 0
  store <2 x float> %458, ptr %457, align 16
  %459 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %438, i32 0, i32 1
  %460 = extractvalue { <2 x float>, <2 x float> } %456, 1
  store <2 x float> %460, ptr %459, align 8
  %461 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %71, i64 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #12
  %462 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 0
  %463 = load float, ptr %462, align 4, !tbaa !23
  %464 = getelementptr inbounds %struct.ImVec2, ptr %69, i32 0, i32 0
  %465 = load float, ptr %464, align 4, !tbaa !23
  %466 = fadd float %463, %465
  %467 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %466)
  %468 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %76, i32 0, i32 0
  %469 = extractvalue { <2 x float>, <2 x float> } %467, 0
  store <2 x float> %469, ptr %468, align 4
  %470 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %76, i32 0, i32 1
  %471 = extractvalue { <2 x float>, <2 x float> } %467, 1
  store <2 x float> %471, ptr %470, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %77) #12
  %472 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 1
  %473 = load float, ptr %472, align 4, !tbaa !24
  %474 = getelementptr inbounds %struct.ImVec2, ptr %69, i32 0, i32 1
  %475 = load float, ptr %474, align 4, !tbaa !24
  %476 = fadd float %473, %475
  %477 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef %476)
  %478 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %77, i32 0, i32 0
  %479 = extractvalue { <2 x float>, <2 x float> } %477, 0
  store <2 x float> %479, ptr %478, align 4
  %480 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %77, i32 0, i32 1
  %481 = extractvalue { <2 x float>, <2 x float> } %477, 1
  store <2 x float> %481, ptr %480, align 4
  %482 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %76, ptr noundef nonnull align 4 dereferenceable(16) %77)
  %483 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %461, i32 0, i32 0
  %484 = extractvalue { <2 x float>, <2 x float> } %482, 0
  store <2 x float> %484, ptr %483, align 16
  %485 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %461, i32 0, i32 1
  %486 = extractvalue { <2 x float>, <2 x float> } %482, 1
  store <2 x float> %486, ptr %485, align 8
  %487 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %71, i64 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %78) #12
  %488 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 0
  %489 = load float, ptr %488, align 4, !tbaa !23
  %490 = getelementptr inbounds %struct.ImVec2, ptr %69, i32 0, i32 0
  %491 = load float, ptr %490, align 4, !tbaa !23
  %492 = fadd float %489, %491
  %493 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %492)
  %494 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %78, i32 0, i32 0
  %495 = extractvalue { <2 x float>, <2 x float> } %493, 0
  store <2 x float> %495, ptr %494, align 4
  %496 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %78, i32 0, i32 1
  %497 = extractvalue { <2 x float>, <2 x float> } %493, 1
  store <2 x float> %497, ptr %496, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %79) #12
  %498 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 1
  %499 = load float, ptr %498, align 4, !tbaa !24
  %500 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef %499)
  %501 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %79, i32 0, i32 0
  %502 = extractvalue { <2 x float>, <2 x float> } %500, 0
  store <2 x float> %502, ptr %501, align 4
  %503 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %79, i32 0, i32 1
  %504 = extractvalue { <2 x float>, <2 x float> } %500, 1
  store <2 x float> %504, ptr %503, align 4
  %505 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %78, ptr noundef nonnull align 4 dereferenceable(16) %79)
  %506 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %487, i32 0, i32 0
  %507 = extractvalue { <2 x float>, <2 x float> } %505, 0
  store <2 x float> %507, ptr %506, align 16
  %508 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %487, i32 0, i32 1
  %509 = extractvalue { <2 x float>, <2 x float> } %505, 1
  store <2 x float> %509, ptr %508, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %79) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #12
  store i32 0, ptr %80, align 4, !tbaa !11
  br label %510

510:                                              ; preds = %540, %418
  %511 = load i32, ptr %80, align 4, !tbaa !11
  %512 = icmp ult i32 %511, 4
  br i1 %512, label %514, label %513

513:                                              ; preds = %510
  store i32 11, ptr %32, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #12
  br label %543

514:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %82) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %84) #12
  %515 = load i32, ptr %80, align 4, !tbaa !11
  %516 = zext i32 %515 to i64
  %517 = getelementptr inbounds [4 x %"struct.ImGuizmo::vec_t"], ptr %71, i64 0, i64 %516
  %518 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %517, ptr noundef nonnull align 4 dereferenceable(16) %59)
  %519 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %84, i32 0, i32 0
  %520 = extractvalue { <2 x float>, <2 x float> } %518, 0
  store <2 x float> %520, ptr %519, align 4
  %521 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %84, i32 0, i32 1
  %522 = extractvalue { <2 x float>, <2 x float> } %518, 1
  store <2 x float> %522, ptr %521, align 4
  %523 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %84, float noundef 5.000000e-01)
  %524 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %83, i32 0, i32 0
  %525 = extractvalue { <2 x float>, <2 x float> } %523, 0
  store <2 x float> %525, ptr %524, align 4
  %526 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %83, i32 0, i32 1
  %527 = extractvalue { <2 x float>, <2 x float> } %523, 1
  store <2 x float> %527, ptr %526, align 4
  %528 = load float, ptr %37, align 4, !tbaa !9
  %529 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %83, float noundef %528)
  %530 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %82, i32 0, i32 0
  %531 = extractvalue { <2 x float>, <2 x float> } %529, 0
  store <2 x float> %531, ptr %530, align 4
  %532 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %82, i32 0, i32 1
  %533 = extractvalue { <2 x float>, <2 x float> } %529, 1
  store <2 x float> %533, ptr %532, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %85, ptr align 4 %6, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 %7, i64 8, i1 false), !tbaa.struct !25
  %534 = load <2 x float>, ptr %85, align 4
  %535 = load <2 x float>, ptr %86, align 4
  %536 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %82, ptr noundef nonnull align 4 dereferenceable(64) %29, <2 x float> %534, <2 x float> %535)
  store <2 x float> %536, ptr %81, align 4
  %537 = load i32, ptr %80, align 4, !tbaa !11
  %538 = zext i32 %537 to i64
  %539 = getelementptr inbounds [4 x %struct.ImVec2], ptr %70, i64 0, i64 %538
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %539, ptr align 4 %81, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %84) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #12
  br label %540

540:                                              ; preds = %514
  %541 = load i32, ptr %80, align 4, !tbaa !11
  %542 = add i32 %541, 1
  store i32 %542, ptr %80, align 4, !tbaa !11
  br label %510, !llvm.loop !28

543:                                              ; preds = %513
  call void @llvm.lifetime.start.p0(i64 16, ptr %87) #12
  %544 = load i32, ptr %61, align 4, !tbaa !11
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %545
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %87, ptr align 8 %546, i64 8, i1 false), !tbaa.struct !25
  %547 = getelementptr inbounds %struct.ImVec2, ptr %87, i64 1
  %548 = load i32, ptr %61, align 4, !tbaa !11
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %549
  %551 = load i32, ptr %61, align 4, !tbaa !11
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %552
  %554 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %550, ptr noundef nonnull align 4 dereferenceable(8) %553)
  store <2 x float> %554, ptr %547, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %88) #12
  %555 = load float, ptr %55, align 4, !tbaa !9
  %556 = getelementptr inbounds [2 x %struct.ImVec2], ptr %87, i64 0, i64 0
  %557 = getelementptr inbounds %struct.ImVec2, ptr %556, i32 0, i32 0
  %558 = load float, ptr %557, align 16, !tbaa !23
  %559 = fcmp ogt float %555, %558
  br i1 %559, label %560, label %578

560:                                              ; preds = %543
  %561 = load float, ptr %55, align 4, !tbaa !9
  %562 = getelementptr inbounds [2 x %struct.ImVec2], ptr %87, i64 0, i64 1
  %563 = getelementptr inbounds %struct.ImVec2, ptr %562, i32 0, i32 0
  %564 = load float, ptr %563, align 8, !tbaa !23
  %565 = fcmp olt float %561, %564
  br i1 %565, label %566, label %578

566:                                              ; preds = %560
  %567 = load float, ptr %56, align 4, !tbaa !9
  %568 = getelementptr inbounds [2 x %struct.ImVec2], ptr %87, i64 0, i64 0
  %569 = getelementptr inbounds %struct.ImVec2, ptr %568, i32 0, i32 1
  %570 = load float, ptr %569, align 4, !tbaa !24
  %571 = fcmp ogt float %567, %570
  br i1 %571, label %572, label %578

572:                                              ; preds = %566
  %573 = load float, ptr %56, align 4, !tbaa !9
  %574 = getelementptr inbounds [2 x %struct.ImVec2], ptr %87, i64 0, i64 1
  %575 = getelementptr inbounds %struct.ImVec2, ptr %574, i32 0, i32 1
  %576 = load float, ptr %575, align 4, !tbaa !24
  %577 = fcmp olt float %573, %576
  br label %578

578:                                              ; preds = %572, %566, %560, %543
  %579 = phi i1 [ false, %566 ], [ false, %560 ], [ false, %543 ], [ %577, %572 ]
  %580 = zext i1 %579 to i8
  store i8 %580, ptr %88, align 1, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #12
  %581 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %62, i32 0, i32 0
  %582 = load float, ptr %581, align 4, !tbaa !31
  %583 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %62, i32 0, i32 1
  %584 = load float, ptr %583, align 4, !tbaa !32
  %585 = fmul float %584, 3.000000e+00
  %586 = call float @llvm.fmuladd.f32(float %582, float 9.000000e+00, float %585)
  %587 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %62, i32 0, i32 2
  %588 = load float, ptr %587, align 4, !tbaa !33
  %589 = fadd float %586, %588
  %590 = fptosi float %589 to i32
  store i32 %590, ptr %89, align 4, !tbaa !11
  %591 = load i32, ptr %89, align 4, !tbaa !11
  %592 = icmp slt i32 %591, 27
  br i1 %592, label %593, label %594

593:                                              ; preds = %578
  br label %596

594:                                              ; preds = %578
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 2621, ptr noundef @__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j) #13
  unreachable

595:                                              ; No predecessors!
  br label %596

596:                                              ; preds = %595, %593
  %597 = load i8, ptr %88, align 1, !tbaa !30, !range !34, !noundef !35
  %598 = trunc i8 %597 to i1
  br i1 %598, label %599, label %603

599:                                              ; preds = %596
  %600 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30, !range !34, !noundef !35
  %601 = trunc i8 %600 to i1
  %602 = xor i1 %601, true
  br label %603

603:                                              ; preds = %599, %596
  %604 = phi i1 [ false, %596 ], [ %602, %599 ]
  %605 = zext i1 %604 to i32
  %606 = load i32, ptr %89, align 4, !tbaa !11
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds [27 x i8], ptr %30, i64 0, i64 %607
  %609 = load i8, ptr %608, align 1, !tbaa !30, !range !34, !noundef !35
  %610 = trunc i8 %609 to i1
  %611 = zext i1 %610 to i32
  %612 = or i32 %611, %605
  %613 = icmp ne i32 %612, 0
  %614 = zext i1 %613 to i8
  store i8 %614, ptr %608, align 1, !tbaa !30
  %615 = load i32, ptr %31, align 4, !tbaa !11
  %616 = icmp ne i32 %615, 0
  br i1 %616, label %617, label %725

617:                                              ; preds = %603
  %618 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  %619 = getelementptr inbounds [4 x %struct.ImVec2], ptr %70, i64 0, i64 0
  %620 = load i32, ptr %34, align 4, !tbaa !11
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds [3 x i32], ptr @_ZN8ImGuizmoL14directionColorE, i64 0, i64 %621
  %623 = load i32, ptr %622, align 4, !tbaa !11
  %624 = or i32 %623, -2139062144
  %625 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !30, !range !34, !noundef !35
  %626 = trunc i8 %625 to i1
  %627 = zext i1 %626 to i64
  %628 = select i1 %626, i32 526344, i32 0
  %629 = or i32 %624, %628
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %618, ptr noundef %619, i32 noundef 4, i32 noundef %629)
  %630 = load i32, ptr %89, align 4, !tbaa !11
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds [27 x i8], ptr %30, i64 0, i64 %631
  %633 = load i8, ptr %632, align 1, !tbaa !30, !range !34, !noundef !35
  %634 = trunc i8 %633 to i1
  br i1 %634, label %635, label %724

635:                                              ; preds = %617
  %636 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  %637 = getelementptr inbounds [4 x %struct.ImVec2], ptr %70, i64 0, i64 0
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %636, ptr noundef %637, i32 noundef 4, i32 noundef -2141150992)
  %638 = load ptr, ptr %14, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.ImGuiIO, ptr %638, i32 0, i32 68
  %640 = getelementptr inbounds [5 x i8], ptr %639, i64 0, i64 0
  %641 = load i8, ptr %640, align 8, !tbaa !30, !range !34, !noundef !35
  %642 = trunc i8 %641 to i1
  br i1 %642, label %713, label %643

643:                                              ; preds = %635
  %644 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30, !range !34, !noundef !35
  %645 = trunc i8 %644 to i1
  br i1 %645, label %713, label %646

646:                                              ; preds = %643
  %647 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !30, !range !34, !noundef !35
  %648 = trunc i8 %647 to i1
  br i1 %648, label %649, label %713

649:                                              ; preds = %646
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #12
  %650 = load i32, ptr %89, align 4, !tbaa !11
  %651 = sdiv i32 %650, 9
  store i32 %651, ptr %90, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #12
  %652 = load i32, ptr %89, align 4, !tbaa !11
  %653 = load i32, ptr %90, align 4, !tbaa !11
  %654 = mul nsw i32 %653, 9
  %655 = sub nsw i32 %652, %654
  %656 = sdiv i32 %655, 3
  store i32 %656, ptr %91, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #12
  %657 = load i32, ptr %89, align 4, !tbaa !11
  %658 = srem i32 %657, 3
  store i32 %658, ptr %92, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %93) #12
  %659 = load i32, ptr %90, align 4, !tbaa !11
  %660 = sitofp i32 %659 to float
  %661 = fsub float 1.000000e+00, %660
  %662 = load i32, ptr %91, align 4, !tbaa !11
  %663 = sitofp i32 %662 to float
  %664 = fsub float 1.000000e+00, %663
  %665 = load i32, ptr %92, align 4, !tbaa !11
  %666 = sitofp i32 %665 to float
  %667 = fsub float 1.000000e+00, %666
  %668 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %661, float noundef %664, float noundef %667, float noundef 0.000000e+00)
  %669 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %93, i32 0, i32 0
  %670 = extractvalue { <2 x float>, <2 x float> } %668, 0
  store <2 x float> %670, ptr %669, align 4
  %671 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %93, i32 0, i32 1
  %672 = extractvalue { <2 x float>, <2 x float> } %668, 1
  store <2 x float> %672, ptr %671, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr align 4 %93, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.end.p0(i64 16, ptr %93) #12
  %673 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir)
  %674 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %94, i32 0, i32 0
  %675 = extractvalue { <2 x float>, <2 x float> } %673, 0
  store <2 x float> %675, ptr %674, align 4
  %676 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %94, i32 0, i32 1
  %677 = extractvalue { <2 x float>, <2 x float> } %673, 1
  store <2 x float> %677, ptr %676, align 4
  %678 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %11)
  %679 = call float @llvm.fabs.f32(float %678)
  %680 = fcmp ogt float %679, 0x3FEFAE1480000000
  br i1 %680, label %681, label %711

681:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 16, ptr %95) #12
  %682 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %683 = getelementptr inbounds %struct.anon, ptr %682, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %95, ptr align 4 %683, i64 16, i1 false), !tbaa.struct !26
  %684 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %95, i32 0, i32 0
  %685 = load float, ptr %684, align 4, !tbaa !31
  %686 = call float @llvm.fabs.f32(float %685)
  %687 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %95, i32 0, i32 2
  %688 = load float, ptr %687, align 4, !tbaa !33
  %689 = call float @llvm.fabs.f32(float %688)
  %690 = fcmp ogt float %686, %689
  br i1 %690, label %691, label %693

691:                                              ; preds = %681
  %692 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %95, i32 0, i32 2
  store float 0.000000e+00, ptr %692, align 4, !tbaa !33
  br label %695

693:                                              ; preds = %681
  %694 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %95, i32 0, i32 0
  store float 0.000000e+00, ptr %694, align 4, !tbaa !31
  br label %695

695:                                              ; preds = %693, %691
  %696 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %95)
  %697 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %96, i32 0, i32 0
  %698 = extractvalue { <2 x float>, <2 x float> } %696, 0
  store <2 x float> %698, ptr %697, align 4
  %699 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %96, i32 0, i32 1
  %700 = extractvalue { <2 x float>, <2 x float> } %696, 1
  store <2 x float> %700, ptr %699, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %97) #12
  %701 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %95)
  %702 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %97, i32 0, i32 0
  %703 = extractvalue { <2 x float>, <2 x float> } %701, 0
  store <2 x float> %703, ptr %702, align 4
  %704 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %97, i32 0, i32 1
  %705 = extractvalue { <2 x float>, <2 x float> } %701, 1
  store <2 x float> %705, ptr %704, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, ptr align 4 %97, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.end.p0(i64 16, ptr %97) #12
  %706 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp)
  %707 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %98, i32 0, i32 0
  %708 = extractvalue { <2 x float>, <2 x float> } %706, 0
  store <2 x float> %708, ptr %707, align 4
  %709 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %98, i32 0, i32 1
  %710 = extractvalue { <2 x float>, <2 x float> } %706, 1
  store <2 x float> %710, ptr %709, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #12
  br label %712

711:                                              ; preds = %649
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, ptr align 4 %11, i64 16, i1 false), !tbaa.struct !26
  br label %712

712:                                              ; preds = %711, %695
  store i32 40, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #12
  br label %713

713:                                              ; preds = %712, %646, %643, %635
  %714 = load ptr, ptr %14, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.ImGuiIO, ptr %714, i32 0, i32 68
  %716 = getelementptr inbounds [5 x i8], ptr %715, i64 0, i64 0
  %717 = load i8, ptr %716, align 8, !tbaa !30, !range !34, !noundef !35
  %718 = trunc i8 %717 to i1
  br i1 %718, label %719, label %723

719:                                              ; preds = %713
  %720 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30, !range !34, !noundef !35
  %721 = trunc i8 %720 to i1
  br i1 %721, label %723, label %722

722:                                              ; preds = %719
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !30
  br label %723

723:                                              ; preds = %722, %719, %713
  br label %724

724:                                              ; preds = %723, %617
  br label %725

725:                                              ; preds = %724, %603
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %71) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #12
  br label %726

726:                                              ; preds = %725
  %727 = load i32, ptr %61, align 4, !tbaa !11
  %728 = add nsw i32 %727, 1
  store i32 %728, ptr %61, align 4, !tbaa !11
  br label %363, !llvm.loop !36

729:                                              ; preds = %366
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #12
  store i32 0, ptr %32, align 4
  br label %730

730:                                              ; preds = %729, %298
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #12
  %731 = load i32, ptr %32, align 4
  switch i32 %731, label %894 [
    i32 0, label %732
    i32 7, label %733
  ]

732:                                              ; preds = %730
  br label %733

733:                                              ; preds = %732, %730
  %734 = load i32, ptr %33, align 4, !tbaa !11
  %735 = add nsw i32 %734, 1
  store i32 %735, ptr %33, align 4, !tbaa !11
  br label %216, !llvm.loop !37

736:                                              ; preds = %219
  br label %737

737:                                              ; preds = %736
  %738 = load i32, ptr %31, align 4, !tbaa !11
  %739 = add nsw i32 %738, 1
  store i32 %739, ptr %31, align 4, !tbaa !11
  br label %211, !llvm.loop !38

740:                                              ; preds = %214
  %741 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  %742 = icmp ne i32 %741, 0
  br i1 %742, label %743, label %775

743:                                              ; preds = %740
  %744 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  %745 = add nsw i32 %744, -1
  store i32 %745, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %99) #12
  %746 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %747 = getelementptr inbounds %struct.anon, ptr %746, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %99, ptr align 4 %747, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %99, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, float noundef 0x3FC99999A0000000)
  %748 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %99)
  %749 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %100, i32 0, i32 0
  %750 = extractvalue { <2 x float>, <2 x float> } %748, 0
  store <2 x float> %750, ptr %749, align 4
  %751 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %100, i32 0, i32 1
  %752 = extractvalue { <2 x float>, <2 x float> } %748, 1
  store <2 x float> %752, ptr %751, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %101) #12
  %753 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %754 = getelementptr inbounds %struct.anon, ptr %753, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %101, ptr align 4 %754, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %101, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, float noundef 0x3FD3333340000000)
  %755 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %101)
  %756 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %102, i32 0, i32 0
  %757 = extractvalue { <2 x float>, <2 x float> } %755, 0
  store <2 x float> %757, ptr %756, align 4
  %758 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %102, i32 0, i32 1
  %759 = extractvalue { <2 x float>, <2 x float> } %755, 1
  store <2 x float> %759, ptr %758, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %101, ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %103) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %104) #12
  %760 = load float, ptr %9, align 4, !tbaa !9
  %761 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %99, float noundef %760)
  %762 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %104, i32 0, i32 0
  %763 = extractvalue { <2 x float>, <2 x float> } %761, 0
  store <2 x float> %763, ptr %762, align 4
  %764 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %104, i32 0, i32 1
  %765 = extractvalue { <2 x float>, <2 x float> } %761, 1
  store <2 x float> %765, ptr %764, align 4
  %766 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %104)
  %767 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %103, i32 0, i32 0
  %768 = extractvalue { <2 x float>, <2 x float> } %766, 0
  store <2 x float> %768, ptr %767, align 4
  %769 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %103, i32 0, i32 1
  %770 = extractvalue { <2 x float>, <2 x float> } %766, 1
  store <2 x float> %770, ptr %769, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %104) #12
  %771 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %103, i32 0, i32 0
  %772 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %17, i32 0, i32 0
  %773 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %101, i32 0, i32 0
  %774 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %771, ptr noundef %772, ptr noundef %773, ptr noundef %774)
  call void @llvm.lifetime.end.p0(i64 16, ptr %103) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %101) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %99) #12
  br label %775

775:                                              ; preds = %743, %740
  call void @llvm.lifetime.start.p0(i64 16, ptr %105) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #12
  %776 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %776, ptr %106, align 4
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %105, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %106)
  %777 = load ptr, ptr %14, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.ImGuiIO, ptr %777, i32 0, i32 67
  %779 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %105, ptr noundef nonnull align 4 dereferenceable(8) %778)
  %780 = zext i1 %779 to i8
  store i8 %780, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #12
  %781 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30, !range !34, !noundef !35
  %782 = trunc i8 %781 to i1
  br i1 %782, label %807, label %783

783:                                              ; preds = %775
  %784 = load ptr, ptr %14, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.ImGuiIO, ptr %784, i32 0, i32 68
  %786 = getelementptr inbounds [5 x i8], ptr %785, i64 0, i64 0
  %787 = load i8, ptr %786, align 8, !tbaa !30, !range !34, !noundef !35
  %788 = trunc i8 %787 to i1
  br i1 %788, label %789, label %807

789:                                              ; preds = %783
  %790 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !30, !range !34, !noundef !35
  %791 = trunc i8 %790 to i1
  br i1 %791, label %792, label %807

792:                                              ; preds = %789
  %793 = load ptr, ptr %14, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.ImGuiIO, ptr %793, i32 0, i32 62
  %795 = getelementptr inbounds %struct.ImVec2, ptr %794, i32 0, i32 0
  %796 = load float, ptr %795, align 8, !tbaa !39
  %797 = call float @llvm.fabs.f32(float %796)
  %798 = fcmp ogt float %797, 0.000000e+00
  br i1 %798, label %806, label %799

799:                                              ; preds = %792
  %800 = load ptr, ptr %14, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.ImGuiIO, ptr %800, i32 0, i32 62
  %802 = getelementptr inbounds %struct.ImVec2, ptr %801, i32 0, i32 1
  %803 = load float, ptr %802, align 4, !tbaa !44
  %804 = call float @llvm.fabs.f32(float %803)
  %805 = fcmp ogt float %804, 0.000000e+00
  br i1 %805, label %806, label %807

806:                                              ; preds = %799, %792
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !30
  br label %818

807:                                              ; preds = %799, %789, %783, %775
  %808 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30, !range !34, !noundef !35
  %809 = trunc i8 %808 to i1
  br i1 %809, label %810, label %817

810:                                              ; preds = %807
  %811 = load ptr, ptr %14, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.ImGuiIO, ptr %811, i32 0, i32 68
  %813 = getelementptr inbounds [5 x i8], ptr %812, i64 0, i64 0
  %814 = load i8, ptr %813, align 8, !tbaa !30, !range !34, !noundef !35
  %815 = trunc i8 %814 to i1
  br i1 %815, label %817, label %816

816:                                              ; preds = %810
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30
  br label %817

817:                                              ; preds = %816, %810, %807
  br label %818

818:                                              ; preds = %817, %806
  %819 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !30, !range !34, !noundef !35
  %820 = trunc i8 %819 to i1
  br i1 %820, label %821, label %888

821:                                              ; preds = %818
  call void @llvm.lifetime.start.p0(i64 64, ptr %107) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %107)
  call void @llvm.lifetime.start.p0(i64 64, ptr %108) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %108)
  call void @llvm.lifetime.start.p0(i64 64, ptr %109) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %109)
  %822 = load ptr, ptr %14, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.ImGuiIO, ptr %822, i32 0, i32 62
  %824 = getelementptr inbounds %struct.ImVec2, ptr %823, i32 0, i32 0
  %825 = load float, ptr %824, align 8, !tbaa !39
  %826 = fneg float %825
  %827 = fmul float %826, 0x3F847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %107, ptr noundef nonnull align 4 dereferenceable(16) %11, float noundef %827)
  %828 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %829 = getelementptr inbounds %struct.anon, ptr %828, i32 0, i32 0
  %830 = load ptr, ptr %14, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.ImGuiIO, ptr %830, i32 0, i32 62
  %832 = getelementptr inbounds %struct.ImVec2, ptr %831, i32 0, i32 1
  %833 = load float, ptr %832, align 4, !tbaa !44
  %834 = fneg float %833
  %835 = fmul float %834, 0x3F847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %108, ptr noundef nonnull align 4 dereferenceable(16) %829, float noundef %835)
  call void @llvm.lifetime.start.p0(i64 64, ptr %110) #12
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind writable sret(%"struct.ImGuizmo::matrix_t") align 4 %110, ptr noundef nonnull align 4 dereferenceable(64) %107, ptr noundef nonnull align 4 dereferenceable(64) %108)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %109, ptr align 4 %110, i64 64, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 64, ptr %110) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %111) #12
  %836 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %837 = getelementptr inbounds %struct.anon, ptr %836, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %111, ptr align 4 %837, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %111, ptr noundef nonnull align 4 dereferenceable(64) %109)
  %838 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %111)
  %839 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %112, i32 0, i32 0
  %840 = extractvalue { <2 x float>, <2 x float> } %838, 0
  store <2 x float> %840, ptr %839, align 4
  %841 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %112, i32 0, i32 1
  %842 = extractvalue { <2 x float>, <2 x float> } %838, 1
  store <2 x float> %842, ptr %841, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %113) #12
  %843 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %844 = getelementptr inbounds %struct.anon, ptr %843, i32 0, i32 0
  %845 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %844, ptr noundef nonnull align 4 dereferenceable(16) %11)
  %846 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %113, i32 0, i32 0
  %847 = extractvalue { <2 x float>, <2 x float> } %845, 0
  store <2 x float> %847, ptr %846, align 4
  %848 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %113, i32 0, i32 1
  %849 = extractvalue { <2 x float>, <2 x float> } %845, 1
  store <2 x float> %849, ptr %848, align 4
  %850 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %113, i32 0, i32 1
  store float 0.000000e+00, ptr %850, align 4, !tbaa !32
  %851 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %113)
  %852 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %114, i32 0, i32 0
  %853 = extractvalue { <2 x float>, <2 x float> } %851, 0
  store <2 x float> %853, ptr %852, align 4
  %854 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %114, i32 0, i32 1
  %855 = extractvalue { <2 x float>, <2 x float> } %851, 1
  store <2 x float> %855, ptr %854, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #12
  %856 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %113, ptr noundef nonnull align 4 dereferenceable(16) %111)
  store float %856, ptr %115, align 4, !tbaa !9
  %857 = load float, ptr %115, align 4, !tbaa !9
  %858 = fcmp olt float %857, 0.000000e+00
  br i1 %858, label %859, label %872

859:                                              ; preds = %821
  call void @llvm.lifetime.start.p0(i64 16, ptr %116) #12
  %860 = load float, ptr %115, align 4, !tbaa !9
  %861 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %113, float noundef %860)
  %862 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %116, i32 0, i32 0
  %863 = extractvalue { <2 x float>, <2 x float> } %861, 0
  store <2 x float> %863, ptr %862, align 4
  %864 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %116, i32 0, i32 1
  %865 = extractvalue { <2 x float>, <2 x float> } %861, 1
  store <2 x float> %865, ptr %864, align 4
  %866 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %111, ptr noundef nonnull align 4 dereferenceable(16) %116)
  call void @llvm.lifetime.end.p0(i64 16, ptr %116) #12
  %867 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %111)
  %868 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %117, i32 0, i32 0
  %869 = extractvalue { <2 x float>, <2 x float> } %867, 0
  store <2 x float> %869, ptr %868, align 4
  %870 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %117, i32 0, i32 1
  %871 = extractvalue { <2 x float>, <2 x float> } %867, 1
  store <2 x float> %871, ptr %870, align 4
  br label %872

872:                                              ; preds = %859, %821
  call void @llvm.lifetime.start.p0(i64 16, ptr %118) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %119) #12
  %873 = load float, ptr %9, align 4, !tbaa !9
  %874 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %111, float noundef %873)
  %875 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %119, i32 0, i32 0
  %876 = extractvalue { <2 x float>, <2 x float> } %874, 0
  store <2 x float> %876, ptr %875, align 4
  %877 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %119, i32 0, i32 1
  %878 = extractvalue { <2 x float>, <2 x float> } %874, 1
  store <2 x float> %878, ptr %877, align 4
  %879 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %119)
  %880 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %118, i32 0, i32 0
  %881 = extractvalue { <2 x float>, <2 x float> } %879, 0
  store <2 x float> %881, ptr %880, align 4
  %882 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %118, i32 0, i32 1
  %883 = extractvalue { <2 x float>, <2 x float> } %879, 1
  store <2 x float> %883, ptr %882, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %119) #12
  %884 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %118, i32 0, i32 0
  %885 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %17, i32 0, i32 0
  %886 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %11, i32 0, i32 0
  %887 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %884, ptr noundef %885, ptr noundef %886, ptr noundef %887)
  call void @llvm.lifetime.end.p0(i64 16, ptr %118) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %113) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %111) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %109) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %108) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %107) #12
  br label %888

888:                                              ; preds = %872, %818
  %889 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %12, i32 0, i32 0
  %890 = getelementptr inbounds [16 x float], ptr %889, i64 0, i64 0
  %891 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %13, i32 0, i32 0
  %892 = getelementptr inbounds [16 x float], ptr %891, i64 0, i64 0
  %893 = load i32, ptr getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 1), align 8, !tbaa !45
  call void @_ZN8ImGuizmoL14ComputeContextEPKfS1_PfNS_4MODEE(ptr noundef %890, ptr noundef %892, ptr noundef getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 6), i32 noundef %893)
  call void @llvm.lifetime.end.p0(i64 27, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #12
  ret void

894:                                              ; preds = %730
  unreachable
}

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

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

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

; Function Attrs: nounwind
declare float @acosf(float noundef) #3

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #10

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZN8ImGuizmoL17IntersectRayPlaneERKNS_5vec_tES2_S2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #2

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #11

; 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{i64 0, i64 64, !14}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"_ZTSN8ImGuizmo7ContextE", !6, i64 0, !17, i64 8, !18, i64 12, !18, i64 76, !18, i64 140, !18, i64 204, !18, i64 268, !18, i64 332, !18, i64 396, !18, i64 460, !19, i64 524, !19, i64 540, !19, i64 556, !19, i64 572, !19, i64 588, !19, i64 604, !19, i64 620, !10, i64 636, !20, i64 640, !20, i64 648, !20, i64 656, !10, i64 664, !19, i64 668, !21, i64 684, !21, i64 685, !21, i64 686, !19, i64 688, !19, i64 704, !19, i64 720, !19, i64 736, !19, i64 752, !10, i64 768, !10, i64 772, !19, i64 776, !19, i64 792, !19, i64 808, !10, i64 824, !7, i64 828, !7, i64 831, !7, i64 836, !19, i64 848, !19, i64 864, !19, i64 880, !19, i64 896, !12, i64 912, !7, i64 916, !21, i64 924, !18, i64 928, !12, i64 992, !10, i64 996, !10, i64 1000, !10, i64 1004, !10, i64 1008, !10, i64 1012, !10, i64 1016, !10, i64 1020, !21, i64 1024, !12, i64 1028, !12, i64 1032, !22, i64 1036, !21, i64 1040, !10, i64 1044}
!17 = !{!"_ZTSN8ImGuizmo4MODEE", !7, i64 0}
!18 = !{!"_ZTSN8ImGuizmo8matrix_tE", !7, i64 0}
!19 = !{!"_ZTSN8ImGuizmo5vec_tE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!20 = !{!"_ZTS6ImVec2", !10, i64 0, !10, i64 4}
!21 = !{!"bool", !7, i64 0}
!22 = !{!"_ZTSN8ImGuizmo9OPERATIONE", !7, i64 0}
!23 = !{!20, !10, i64 0}
!24 = !{!20, !10, i64 4}
!25 = !{i64 0, i64 4, !9, i64 4, i64 4, !9}
!26 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9}
!27 = !{!19, !10, i64 12}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!21, !21, i64 0}
!31 = !{!19, !10, i64 0}
!32 = !{!19, !10, i64 4}
!33 = !{!19, !10, i64 8}
!34 = !{i8 0, i8 2}
!35 = !{}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = distinct !{!38, !29}
!39 = !{!40, !10, i64 232}
!40 = !{!"_ZTS7ImGuiIO", !12, i64 0, !12, i64 4, !20, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !10, i64 56, !21, i64 60, !6, i64 64, !20, i64 72, !21, i64 80, !21, i64 81, !21, i64 82, !21, i64 83, !21, i64 84, !21, i64 85, !21, i64 86, !21, i64 87, !21, i64 88, !21, i64 89, !21, i64 90, !21, i64 91, !21, i64 92, !21, i64 93, !21, i64 94, !21, i64 95, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !21, i64 120, !21, i64 121, !21, i64 122, !21, i64 123, !21, i64 124, !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, !41, i64 200, !21, i64 202, !21, i64 203, !21, i64 204, !21, i64 205, !21, i64 206, !21, i64 207, !21, i64 208, !10, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !20, i64 232, !7, i64 240, !7, i64 2904, !7, i64 3572, !6, i64 3640, !20, i64 3648, !7, i64 3656, !10, i64 3664, !10, i64 3668, !42, i64 3672, !12, i64 3676, !21, i64 3680, !21, i64 3681, !21, i64 3682, !21, i64 3683, !12, i64 3684, !7, i64 3688, !21, i64 14344, !20, i64 14348, !7, i64 14356, !7, i64 14400, !7, i64 14440, !7, i64 14445, !7, i64 14450, !7, i64 14460, !7, i64 14470, !7, i64 14475, !7, i64 14480, !21, i64 14485, !7, i64 14488, !7, i64 14508, !7, i64 14528, !7, i64 14568, !10, i64 14588, !21, i64 14592, !21, i64 14593, !7, i64 14594, !21, i64 14595, !41, i64 14596, !43, i64 14600}
!41 = !{!"short", !7, i64 0}
!42 = !{!"_ZTS16ImGuiMouseSource", !7, i64 0}
!43 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!44 = !{!40, !10, i64 236}
!45 = !{!16, !17, i64 8}


; 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.ImGuizmo::Context" = type { ptr, i32, %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, %"struct.ImGuizmo::vec_t", i8, i8, i8, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, float, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, [3 x i8], [3 x i8], [3 x float], %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", i32, [2 x i32], i8, %"struct.ImGuizmo::matrix_t", i32, float, float, float, float, float, float, float, i8, i32, i32, i32, i8, float }
%struct.ImVec2 = type { float, float }
%"struct.ImGuizmo::vec_t" = type { float, float, float, float }
%"struct.ImGuizmo::matrix_t" = type { %union.anon }
%union.anon = type { [4 x [4 x float]] }
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }

@_ZN8ImGuizmoL8gContextE = external hidden global %"struct.ImGuizmo::Context", align 8
@_ZN8ImGuizmoL14directionUnaryE = external hidden global [3 x %"struct.ImGuizmo::vec_t"], align 16
@_ZN8ImGuizmoL14directionColorE = external hidden local_unnamed_addr constant [3 x i32], align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging = external hidden local_unnamed_addr global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking = external hidden local_unnamed_addr global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside = external hidden local_unnamed_addr global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp = external hidden global %"struct.ImGuizmo::vec_t", align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir = external hidden global %"struct.ImGuizmo::vec_t", align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames = external hidden local_unnamed_addr global i32, align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition = external hidden constant [9 x %struct.ImVec2], align 16
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize = external hidden constant [9 x %struct.ImVec2], align 16
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [75 x i8], align 1
@__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j = external hidden unnamed_addr constant [69 x i8], align 1

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef, float noundef, float noundef, float noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16), float noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress 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) #4

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(64), i1 noundef zeroext) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(16), float noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind noalias writable sret(%"struct.ImGuizmo::matrix_t") align 4, ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN8ImGuizmoL14ComputeContextEPKfS1_PfNS_4MODEE(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(64), <2 x float>, <2 x float>) local_unnamed_addr #6

declare void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), float noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j(ptr noundef %0, float noundef %1, <2 x float> %2, <2 x float> %3, i32 noundef %4) local_unnamed_addr #6 {
  %6 = alloca %struct.ImVec2, align 8
  %7 = alloca %struct.ImVec2, align 8
  %8 = alloca %"struct.ImGuizmo::vec_t", align 8
  %9 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %10 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %11 = alloca %struct.ImVec2, align 8
  %12 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %13 = alloca %"struct.ImGuizmo::vec_t", align 8
  %14 = alloca %"struct.ImGuizmo::vec_t", align 8
  %15 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %16 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %17 = alloca %"struct.ImGuizmo::vec_t", align 8
  %18 = alloca %"struct.ImGuizmo::vec_t", align 8
  %19 = alloca %"struct.ImGuizmo::vec_t", align 8
  %20 = alloca %"struct.ImGuizmo::vec_t", align 8
  %21 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %22 = alloca [27 x i8], align 16
  %23 = alloca %"struct.ImGuizmo::vec_t", align 8
  %24 = alloca %"struct.ImGuizmo::vec_t", align 8
  %25 = alloca %"struct.ImGuizmo::vec_t", align 8
  %26 = alloca %"struct.ImGuizmo::vec_t", align 8
  %27 = alloca %"struct.ImGuizmo::vec_t", align 8
  %28 = alloca %"struct.ImGuizmo::vec_t", align 8
  %29 = alloca %"struct.ImGuizmo::vec_t", align 4
  %30 = alloca %"struct.ImGuizmo::vec_t", align 8
  %31 = alloca %"struct.ImGuizmo::vec_t", align 8
  %32 = alloca %"struct.ImGuizmo::vec_t", align 8
  %33 = alloca %"struct.ImGuizmo::vec_t", align 8
  %34 = alloca %"struct.ImGuizmo::vec_t", align 8
  %35 = alloca %"struct.ImGuizmo::vec_t", align 8
  %36 = alloca %"struct.ImGuizmo::vec_t", align 8
  %37 = alloca %"struct.ImGuizmo::vec_t", align 4
  %38 = alloca %"struct.ImGuizmo::vec_t", align 4
  %39 = alloca %"struct.ImGuizmo::vec_t", align 8
  %40 = alloca %"struct.ImGuizmo::vec_t", align 8
  %41 = alloca %"struct.ImGuizmo::vec_t", align 8
  %42 = alloca %"struct.ImGuizmo::vec_t", align 8
  %43 = alloca %"struct.ImGuizmo::vec_t", align 8
  %44 = alloca %"struct.ImGuizmo::vec_t", align 8
  %45 = alloca %"struct.ImGuizmo::vec_t", align 8
  %46 = alloca [4 x %struct.ImVec2], align 16
  %47 = alloca [4 x %"struct.ImGuizmo::vec_t"], align 16
  %48 = alloca %"struct.ImGuizmo::vec_t", align 8
  %49 = alloca %"struct.ImGuizmo::vec_t", align 8
  %50 = alloca %"struct.ImGuizmo::vec_t", align 8
  %51 = alloca %"struct.ImGuizmo::vec_t", align 8
  %52 = alloca %"struct.ImGuizmo::vec_t", align 8
  %53 = alloca %"struct.ImGuizmo::vec_t", align 8
  %54 = alloca %"struct.ImGuizmo::vec_t", align 8
  %55 = alloca %"struct.ImGuizmo::vec_t", align 8
  %56 = alloca %"struct.ImGuizmo::vec_t", align 8
  %57 = alloca %"struct.ImGuizmo::vec_t", align 8
  %58 = alloca %"struct.ImGuizmo::vec_t", align 8
  %59 = alloca %"struct.ImGuizmo::vec_t", align 4
  %60 = alloca %"struct.ImGuizmo::vec_t", align 4
  %61 = alloca %"struct.ImGuizmo::vec_t", align 4
  %62 = alloca %"struct.ImGuizmo::vec_t", align 8
  %63 = alloca %"struct.ImGuizmo::vec_t", align 8
  %64 = alloca %struct.ImRect, align 4
  %65 = alloca %struct.ImVec2, align 8
  %66 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %67 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %68 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %69 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %70 = alloca %"struct.ImGuizmo::vec_t", align 4
  %71 = alloca %"struct.ImGuizmo::vec_t", align 8
  %72 = alloca %"struct.ImGuizmo::vec_t", align 8
  %73 = alloca %"struct.ImGuizmo::vec_t", align 8
  %74 = alloca %"struct.ImGuizmo::vec_t", align 8
  store <2 x float> %2, ptr %6, align 8
  store <2 x float> %3, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #11
  %75 = tail call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %76 = extractvalue { <2 x float>, <2 x float> } %75, 0
  store <2 x float> %76, ptr %8, align 8
  %77 = getelementptr inbounds i8, ptr %8, i64 8
  %78 = extractvalue { <2 x float>, <2 x float> } %75, 1
  store <2 x float> %78, ptr %77, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %9)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %10)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %9, ptr noundef nonnull align 4 dereferenceable(64) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 12), i64 64, i1 false), !tbaa.struct !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %10, ptr noundef nonnull align 4 dereferenceable(64) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 76), i64 64, i1 false), !tbaa.struct !5
  %79 = call noundef nonnull align 8 dereferenceable(14616) ptr @_ZN5ImGui5GetIOEv()
  %80 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #11
  %81 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %81, ptr %11, align 8
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %80, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %11, i32 noundef %4, float noundef 0.000000e+00, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %12)
  %82 = call noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64) %12, ptr noundef nonnull align 4 dereferenceable(64) %0, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  %83 = getelementptr inbounds i8, ptr %12, i64 48
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #11
  %84 = getelementptr inbounds i8, ptr %12, i64 32
  %85 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %84, float noundef %1)
  %86 = extractvalue { <2 x float>, <2 x float> } %85, 0
  store <2 x float> %86, ptr %14, align 8
  %87 = getelementptr inbounds i8, ptr %14, i64 8
  %88 = extractvalue { <2 x float>, <2 x float> } %85, 1
  store <2 x float> %88, ptr %87, align 8
  %89 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %83, ptr noundef nonnull align 4 dereferenceable(16) %14)
  %90 = extractvalue { <2 x float>, <2 x float> } %89, 0
  store <2 x float> %90, ptr %13, align 8
  %91 = getelementptr inbounds i8, ptr %13, i64 8
  %92 = extractvalue { <2 x float>, <2 x float> } %89, 1
  store <2 x float> %92, ptr %91, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %15)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %16) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %16)
  %93 = load float, ptr %7, align 8, !tbaa !20
  %94 = getelementptr inbounds i8, ptr %7, i64 4
  %95 = load float, ptr %94, align 4, !tbaa !21
  %96 = fdiv float %93, %95
  call void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef 0x4035369420000000, float noundef %96, float noundef 0x3F847AE140000000, float noundef 1.000000e+03, ptr noundef nonnull %15)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #11
  %97 = load float, ptr %84, align 4, !tbaa !6
  %98 = getelementptr inbounds i8, ptr %12, i64 36
  %99 = load float, ptr %98, align 4, !tbaa !6
  %100 = getelementptr inbounds i8, ptr %12, i64 40
  %101 = load float, ptr %100, align 4, !tbaa !6
  %102 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %97, float noundef %99, float noundef %101, float noundef 0.000000e+00)
  %103 = extractvalue { <2 x float>, <2 x float> } %102, 0
  store <2 x float> %103, ptr %17, align 8
  %104 = getelementptr inbounds i8, ptr %17, i64 8
  %105 = extractvalue { <2 x float>, <2 x float> } %102, 1
  store <2 x float> %105, ptr %104, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #11
  %106 = getelementptr inbounds i8, ptr %12, i64 16
  %107 = load float, ptr %106, align 4, !tbaa !6
  %108 = getelementptr inbounds i8, ptr %12, i64 20
  %109 = load float, ptr %108, align 4, !tbaa !6
  %110 = getelementptr inbounds i8, ptr %12, i64 24
  %111 = load float, ptr %110, align 4, !tbaa !6
  %112 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %107, float noundef %109, float noundef %111, float noundef 0.000000e+00)
  %113 = extractvalue { <2 x float>, <2 x float> } %112, 0
  store <2 x float> %113, ptr %18, align 8
  %114 = getelementptr inbounds i8, ptr %18, i64 8
  %115 = extractvalue { <2 x float>, <2 x float> } %112, 1
  store <2 x float> %115, ptr %114, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #11
  %116 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 3.000000e+00)
  %117 = extractvalue { <2 x float>, <2 x float> } %116, 0
  store <2 x float> %117, ptr %19, align 8
  %118 = getelementptr inbounds i8, ptr %19, i64 8
  %119 = extractvalue { <2 x float>, <2 x float> } %116, 1
  store <2 x float> %119, ptr %118, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #11
  %120 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %121 = extractvalue { <2 x float>, <2 x float> } %120, 0
  store <2 x float> %121, ptr %20, align 8
  %122 = getelementptr inbounds i8, ptr %20, i64 8
  %123 = extractvalue { <2 x float>, <2 x float> } %120, 1
  store <2 x float> %123, ptr %122, align 8
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef nonnull %16)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 12), ptr noundef nonnull align 4 dereferenceable(64) %16, i64 64, i1 false), !tbaa.struct !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 76), ptr noundef nonnull align 4 dereferenceable(64) %15, i64 64, i1 false), !tbaa.struct !5
  %.sroa.0102.0.copyload = load <2 x float>, ptr %6, align 8
  %.sroa.0101.0.copyload = load <2 x float>, ptr %7, align 8
  call void @_ZN8ImGuizmoL16ComputeCameraRayERNS_5vec_tES1_6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 604), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 620), <2 x float> %.sroa.0102.0.copyload, <2 x float> %.sroa.0101.0.copyload)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #11
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind nonnull writable sret(%"struct.ImGuizmo::matrix_t") align 4 %21, ptr noundef nonnull align 4 dereferenceable(64) %16, ptr noundef nonnull align 4 dereferenceable(64) %15)
  call void @llvm.lifetime.start.p0(i64 27, ptr nonnull %22) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(27) %22, i8 0, i64 27, i1 false)
  %124 = getelementptr inbounds i8, ptr %23, i64 8
  %125 = getelementptr inbounds i8, ptr %24, i64 8
  %126 = getelementptr inbounds i8, ptr %27, i64 8
  %127 = getelementptr inbounds i8, ptr %26, i64 8
  %128 = getelementptr inbounds i8, ptr %25, i64 8
  %129 = getelementptr inbounds i8, ptr %28, i64 8
  %130 = getelementptr inbounds i8, ptr %30, i64 8
  %131 = getelementptr inbounds i8, ptr %32, i64 8
  %132 = getelementptr inbounds i8, ptr %31, i64 8
  %133 = getelementptr inbounds i8, ptr %35, i64 8
  %134 = getelementptr inbounds i8, ptr %34, i64 8
  %135 = getelementptr inbounds i8, ptr %36, i64 8
  %136 = getelementptr inbounds i8, ptr %33, i64 8
  %137 = getelementptr inbounds i8, ptr %40, i64 8
  %138 = getelementptr inbounds i8, ptr %39, i64 8
  %139 = getelementptr inbounds i8, ptr %43, i64 8
  %140 = getelementptr inbounds i8, ptr %42, i64 8
  %141 = getelementptr inbounds i8, ptr %44, i64 8
  %142 = getelementptr inbounds i8, ptr %41, i64 8
  %143 = getelementptr inbounds i8, ptr %45, i64 8
  %144 = getelementptr inbounds i8, ptr %48, i64 8
  %145 = getelementptr inbounds i8, ptr %49, i64 8
  %146 = getelementptr inbounds i8, ptr %47, i64 8
  %147 = getelementptr inbounds i8, ptr %47, i64 16
  %148 = getelementptr inbounds i8, ptr %50, i64 8
  %149 = getelementptr inbounds i8, ptr %51, i64 8
  %150 = getelementptr inbounds i8, ptr %47, i64 24
  %151 = getelementptr inbounds i8, ptr %47, i64 32
  %152 = getelementptr inbounds i8, ptr %52, i64 8
  %153 = getelementptr inbounds i8, ptr %53, i64 8
  %154 = getelementptr inbounds i8, ptr %47, i64 40
  %155 = getelementptr inbounds i8, ptr %47, i64 48
  %156 = getelementptr inbounds i8, ptr %54, i64 8
  %157 = getelementptr inbounds i8, ptr %55, i64 8
  %158 = getelementptr inbounds i8, ptr %47, i64 56
  %159 = getelementptr inbounds i8, ptr %58, i64 8
  %160 = getelementptr inbounds i8, ptr %57, i64 8
  %161 = getelementptr inbounds i8, ptr %56, i64 8
  %162 = getelementptr inbounds i8, ptr %79, i64 3656
  %163 = getelementptr inbounds i8, ptr %59, i64 8
  %.ptr.1 = getelementptr inbounds i8, ptr %46, i64 8
  %.ptr.2 = getelementptr inbounds i8, ptr %46, i64 16
  %.ptr.3 = getelementptr inbounds i8, ptr %46, i64 24
  br label %.preheader

.preheader:                                       ; preds = %5, %166
  %.not129 = phi i1 [ true, %5 ], [ false, %166 ]
  br label %167

164:                                              ; preds = %166
  %165 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !22
  %.not = icmp eq i32 %165, 0
  br i1 %.not, label %444, label %432

166:                                              ; preds = %430
  br i1 %.not129, label %.preheader, label %164, !llvm.loop !23

167:                                              ; preds = %.preheader, %430
  %.0120140 = phi i32 [ 0, %.preheader ], [ %431, %430 ]
  %.urem = add nsw i32 %.0120140, -3
  %.cmp = icmp ult i32 %.0120140, 3
  %168 = select i1 %.cmp, i32 %.0120140, i32 %.urem
  %169 = add nuw nsw i32 %168, 1
  %170 = icmp eq i32 %169, 3
  %171 = select i1 %170, i32 0, i32 %169
  %172 = add nuw nsw i32 %168, 2
  %173 = urem i32 %172, 3
  %174 = icmp ugt i32 %.0120140, 2
  %175 = select i1 %174, float -1.000000e+00, float 1.000000e+00
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #11
  %176 = zext nneg i32 %171 to i64
  %177 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %176
  %178 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %177, float noundef %175)
  %179 = extractvalue { <2 x float>, <2 x float> } %178, 0
  store <2 x float> %179, ptr %23, align 8
  %180 = extractvalue { <2 x float>, <2 x float> } %178, 1
  store <2 x float> %180, ptr %124, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #11
  %181 = zext nneg i32 %173 to i64
  %182 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %181
  %183 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %182, float noundef %175)
  %184 = extractvalue { <2 x float>, <2 x float> } %183, 0
  store <2 x float> %184, ptr %24, align 8
  %185 = extractvalue { <2 x float>, <2 x float> } %183, 1
  store <2 x float> %185, ptr %125, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #11
  %186 = zext nneg i32 %168 to i64
  %187 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %186
  %188 = fneg float %175
  %189 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %187, float noundef %188)
  %190 = extractvalue { <2 x float>, <2 x float> } %189, 0
  store <2 x float> %190, ptr %27, align 8
  %191 = extractvalue { <2 x float>, <2 x float> } %189, 1
  store <2 x float> %191, ptr %126, align 8
  %192 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %27, ptr noundef nonnull align 4 dereferenceable(16) %23)
  %193 = extractvalue { <2 x float>, <2 x float> } %192, 0
  store <2 x float> %193, ptr %26, align 8
  %194 = extractvalue { <2 x float>, <2 x float> } %192, 1
  store <2 x float> %194, ptr %127, align 8
  %195 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %26, ptr noundef nonnull align 4 dereferenceable(16) %24)
  %196 = extractvalue { <2 x float>, <2 x float> } %195, 0
  store <2 x float> %196, ptr %25, align 8
  %197 = extractvalue { <2 x float>, <2 x float> } %195, 1
  store <2 x float> %197, ptr %128, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #11
  %198 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %187, float noundef %175)
  %199 = extractvalue { <2 x float>, <2 x float> } %198, 0
  store <2 x float> %199, ptr %28, align 8
  %200 = extractvalue { <2 x float>, <2 x float> } %198, 1
  store <2 x float> %200, ptr %129, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %28, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #11
  %201 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 5.000000e-01)
  %202 = extractvalue { <2 x float>, <2 x float> } %201, 0
  store <2 x float> %202, ptr %30, align 8
  %203 = extractvalue { <2 x float>, <2 x float> } %201, 1
  store <2 x float> %203, ptr %130, align 8
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(64) %16)
  %204 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %29)
  call void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(64) %16)
  %205 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %29)
  %206 = extractvalue { <2 x float>, <2 x float> } %205, 1
  %.sroa.3.12.vec.extract = extractelement <2 x float> %206, i64 1
  %207 = fcmp ogt float %.sroa.3.12.vec.extract, 0.000000e+00
  br i1 %207, label %430, label %208

208:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #11
  %209 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 5.000000e-01)
  %210 = extractvalue { <2 x float>, <2 x float> } %209, 0
  store <2 x float> %210, ptr %32, align 8
  %211 = extractvalue { <2 x float>, <2 x float> } %209, 1
  store <2 x float> %211, ptr %131, align 8
  %212 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %32, ptr noundef nonnull align 4 dereferenceable(16) %28)
  %213 = extractvalue { <2 x float>, <2 x float> } %212, 0
  store <2 x float> %213, ptr %31, align 8
  %214 = extractvalue { <2 x float>, <2 x float> } %212, 1
  store <2 x float> %214, ptr %132, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #11
  %215 = call noundef float @_ZN8ImGuizmoL17IntersectRayPlaneERKNS_5vec_tES2_S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 604), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 620), ptr noundef nonnull align 4 dereferenceable(16) %31)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #11
  %216 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 620), float noundef %215)
  %217 = extractvalue { <2 x float>, <2 x float> } %216, 0
  store <2 x float> %217, ptr %35, align 8
  %218 = extractvalue { <2 x float>, <2 x float> } %216, 1
  store <2 x float> %218, ptr %133, align 8
  %219 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 604), ptr noundef nonnull align 4 dereferenceable(16) %35)
  %220 = extractvalue { <2 x float>, <2 x float> } %219, 0
  store <2 x float> %220, ptr %34, align 8
  %221 = extractvalue { <2 x float>, <2 x float> } %219, 1
  store <2 x float> %221, ptr %134, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #11
  %222 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 5.000000e-01)
  %223 = extractvalue { <2 x float>, <2 x float> } %222, 0
  store <2 x float> %223, ptr %36, align 8
  %224 = extractvalue { <2 x float>, <2 x float> } %222, 1
  store <2 x float> %224, ptr %135, align 8
  %225 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(16) %36)
  %226 = extractvalue { <2 x float>, <2 x float> } %225, 0
  store <2 x float> %226, ptr %33, align 8
  %227 = extractvalue { <2 x float>, <2 x float> } %225, 1
  store <2 x float> %227, ptr %136, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #11
  %228 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %177, ptr noundef nonnull align 4 dereferenceable(16) %33)
  %229 = call float @llvm.fmuladd.f32(float %228, float %175, float 5.000000e-01)
  %230 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %182, ptr noundef nonnull align 4 dereferenceable(16) %33)
  %231 = call float @llvm.fmuladd.f32(float %230, float %175, float 5.000000e-01)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 16 dereferenceable(16) %177, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %38) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %38, ptr noundef nonnull align 16 dereferenceable(16) %182, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #11
  %232 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %187, ptr noundef nonnull align 4 dereferenceable(16) %37)
  %233 = extractvalue { <2 x float>, <2 x float> } %232, 0
  store <2 x float> %233, ptr %40, align 8
  %234 = extractvalue { <2 x float>, <2 x float> } %232, 1
  store <2 x float> %234, ptr %137, align 8
  %235 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(16) %38)
  %236 = extractvalue { <2 x float>, <2 x float> } %235, 0
  store <2 x float> %236, ptr %39, align 8
  %237 = extractvalue { <2 x float>, <2 x float> } %235, 1
  store <2 x float> %237, ptr %138, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #11
  %238 = getelementptr inbounds [3 x i32], ptr @_ZN8ImGuizmoL14directionColorE, i64 0, i64 %186
  br label %240

239:                                              ; preds = %429
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #11
  br label %430

240:                                              ; preds = %208, %429
  %indvars.iv = phi i64 [ 0, %208 ], [ %indvars.iv.next, %429 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %42) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %43) #11
  %.lhs.trunc = trunc i64 %indvars.iv to i8
  %241 = urem i8 %.lhs.trunc, 3
  %242 = uitofp nneg i8 %241 to float
  %243 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef %242)
  %244 = extractvalue { <2 x float>, <2 x float> } %243, 0
  store <2 x float> %244, ptr %43, align 8
  %245 = extractvalue { <2 x float>, <2 x float> } %243, 1
  store <2 x float> %245, ptr %139, align 8
  %246 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %247 = extractvalue { <2 x float>, <2 x float> } %246, 0
  store <2 x float> %247, ptr %42, align 8
  %248 = extractvalue { <2 x float>, <2 x float> } %246, 1
  store <2 x float> %248, ptr %140, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %44) #11
  %249 = udiv i8 %.lhs.trunc, 3
  %250 = uitofp nneg i8 %249 to float
  %251 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef %250)
  %252 = extractvalue { <2 x float>, <2 x float> } %251, 0
  store <2 x float> %252, ptr %44, align 8
  %253 = extractvalue { <2 x float>, <2 x float> } %251, 1
  store <2 x float> %253, ptr %141, align 8
  %254 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %44)
  %255 = extractvalue { <2 x float>, <2 x float> } %254, 0
  store <2 x float> %255, ptr %41, align 8
  %256 = extractvalue { <2 x float>, <2 x float> } %254, 1
  store <2 x float> %256, ptr %142, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %45) #11
  %257 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %258 = extractvalue { <2 x float>, <2 x float> } %257, 0
  store <2 x float> %258, ptr %45, align 8
  %259 = extractvalue { <2 x float>, <2 x float> } %257, 1
  store <2 x float> %259, ptr %143, align 8
  %260 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %41, ptr noundef nonnull align 4 dereferenceable(16) %45)
  %261 = extractvalue { <2 x float>, <2 x float> } %260, 0
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %44) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #11
  %262 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %indvars.iv
  %263 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %262, float noundef 2.000000e+00)
  %264 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %indvars.iv
  %265 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %264, float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #11
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %46)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.1)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.2)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.3)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %47) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #11
  %.sroa.043.0.vec.extract = extractelement <2 x float> %263, i64 0
  %266 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %.sroa.043.0.vec.extract)
  %267 = extractvalue { <2 x float>, <2 x float> } %266, 0
  store <2 x float> %267, ptr %48, align 8
  %268 = extractvalue { <2 x float>, <2 x float> } %266, 1
  store <2 x float> %268, ptr %144, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #11
  %.sroa.043.4.vec.extract = extractelement <2 x float> %263, i64 1
  %269 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %.sroa.043.4.vec.extract)
  %270 = extractvalue { <2 x float>, <2 x float> } %269, 0
  store <2 x float> %270, ptr %49, align 8
  %271 = extractvalue { <2 x float>, <2 x float> } %269, 1
  store <2 x float> %271, ptr %145, align 8
  %272 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %48, ptr noundef nonnull align 4 dereferenceable(16) %49)
  %273 = extractvalue { <2 x float>, <2 x float> } %272, 0
  store <2 x float> %273, ptr %47, align 16
  %274 = extractvalue { <2 x float>, <2 x float> } %272, 1
  store <2 x float> %274, ptr %146, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #11
  %275 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %.sroa.043.0.vec.extract)
  %276 = extractvalue { <2 x float>, <2 x float> } %275, 0
  store <2 x float> %276, ptr %50, align 8
  %277 = extractvalue { <2 x float>, <2 x float> } %275, 1
  store <2 x float> %277, ptr %148, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #11
  %278 = fadd <2 x float> %263, %265
  %279 = extractelement <2 x float> %278, i64 1
  %280 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %279)
  %281 = extractvalue { <2 x float>, <2 x float> } %280, 0
  store <2 x float> %281, ptr %51, align 8
  %282 = extractvalue { <2 x float>, <2 x float> } %280, 1
  store <2 x float> %282, ptr %149, align 8
  %283 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %50, ptr noundef nonnull align 4 dereferenceable(16) %51)
  %284 = extractvalue { <2 x float>, <2 x float> } %283, 0
  store <2 x float> %284, ptr %147, align 16
  %285 = extractvalue { <2 x float>, <2 x float> } %283, 1
  store <2 x float> %285, ptr %150, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %52) #11
  %286 = fadd <2 x float> %263, %265
  %287 = extractelement <2 x float> %286, i64 0
  %288 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %287)
  %289 = extractvalue { <2 x float>, <2 x float> } %288, 0
  store <2 x float> %289, ptr %52, align 8
  %290 = extractvalue { <2 x float>, <2 x float> } %288, 1
  store <2 x float> %290, ptr %152, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %53) #11
  %291 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %279)
  %292 = extractvalue { <2 x float>, <2 x float> } %291, 0
  store <2 x float> %292, ptr %53, align 8
  %293 = extractvalue { <2 x float>, <2 x float> } %291, 1
  store <2 x float> %293, ptr %153, align 8
  %294 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %52, ptr noundef nonnull align 4 dereferenceable(16) %53)
  %295 = extractvalue { <2 x float>, <2 x float> } %294, 0
  store <2 x float> %295, ptr %151, align 16
  %296 = extractvalue { <2 x float>, <2 x float> } %294, 1
  store <2 x float> %296, ptr %154, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %54) #11
  %297 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %287)
  %298 = extractvalue { <2 x float>, <2 x float> } %297, 0
  store <2 x float> %298, ptr %54, align 8
  %299 = extractvalue { <2 x float>, <2 x float> } %297, 1
  store <2 x float> %299, ptr %156, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %55) #11
  %300 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %.sroa.043.4.vec.extract)
  %301 = extractvalue { <2 x float>, <2 x float> } %300, 0
  store <2 x float> %301, ptr %55, align 8
  %302 = extractvalue { <2 x float>, <2 x float> } %300, 1
  store <2 x float> %302, ptr %157, align 8
  %303 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %54, ptr noundef nonnull align 4 dereferenceable(16) %55)
  %304 = extractvalue { <2 x float>, <2 x float> } %303, 0
  store <2 x float> %304, ptr %155, align 16
  %305 = extractvalue { <2 x float>, <2 x float> } %303, 1
  store <2 x float> %305, ptr %158, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %55) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %54) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %53) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %52) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #11
  %306 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %47, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %307 = extractvalue { <2 x float>, <2 x float> } %306, 0
  store <2 x float> %307, ptr %58, align 8
  %308 = extractvalue { <2 x float>, <2 x float> } %306, 1
  store <2 x float> %308, ptr %159, align 8
  %309 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %310 = extractvalue { <2 x float>, <2 x float> } %309, 0
  store <2 x float> %310, ptr %57, align 8
  %311 = extractvalue { <2 x float>, <2 x float> } %309, 1
  store <2 x float> %311, ptr %160, align 8
  %312 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %175)
  %313 = extractvalue { <2 x float>, <2 x float> } %312, 0
  store <2 x float> %313, ptr %56, align 8
  %314 = extractvalue { <2 x float>, <2 x float> } %312, 1
  store <2 x float> %314, ptr %161, align 8
  %.sroa.032.0.copyload = load <2 x float>, ptr %6, align 8
  %.sroa.031.0.copyload = load <2 x float>, ptr %7, align 8
  %315 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload, <2 x float> %.sroa.031.0.copyload)
  store <2 x float> %315, ptr %46, align 16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #11
  %316 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %147, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %317 = extractvalue { <2 x float>, <2 x float> } %316, 0
  store <2 x float> %317, ptr %58, align 8
  %318 = extractvalue { <2 x float>, <2 x float> } %316, 1
  store <2 x float> %318, ptr %159, align 8
  %319 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %320 = extractvalue { <2 x float>, <2 x float> } %319, 0
  store <2 x float> %320, ptr %57, align 8
  %321 = extractvalue { <2 x float>, <2 x float> } %319, 1
  store <2 x float> %321, ptr %160, align 8
  %322 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %175)
  %323 = extractvalue { <2 x float>, <2 x float> } %322, 0
  store <2 x float> %323, ptr %56, align 8
  %324 = extractvalue { <2 x float>, <2 x float> } %322, 1
  store <2 x float> %324, ptr %161, align 8
  %.sroa.032.0.copyload.1 = load <2 x float>, ptr %6, align 8
  %.sroa.031.0.copyload.1 = load <2 x float>, ptr %7, align 8
  %325 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload.1, <2 x float> %.sroa.031.0.copyload.1)
  store <2 x float> %325, ptr %.ptr.1, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #11
  %326 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %151, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %327 = extractvalue { <2 x float>, <2 x float> } %326, 0
  store <2 x float> %327, ptr %58, align 8
  %328 = extractvalue { <2 x float>, <2 x float> } %326, 1
  store <2 x float> %328, ptr %159, align 8
  %329 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %330 = extractvalue { <2 x float>, <2 x float> } %329, 0
  store <2 x float> %330, ptr %57, align 8
  %331 = extractvalue { <2 x float>, <2 x float> } %329, 1
  store <2 x float> %331, ptr %160, align 8
  %332 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %175)
  %333 = extractvalue { <2 x float>, <2 x float> } %332, 0
  store <2 x float> %333, ptr %56, align 8
  %334 = extractvalue { <2 x float>, <2 x float> } %332, 1
  store <2 x float> %334, ptr %161, align 8
  %.sroa.032.0.copyload.2 = load <2 x float>, ptr %6, align 8
  %.sroa.031.0.copyload.2 = load <2 x float>, ptr %7, align 8
  %335 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload.2, <2 x float> %.sroa.031.0.copyload.2)
  store <2 x float> %335, ptr %.ptr.2, align 16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %56) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #11
  %336 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %155, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %337 = extractvalue { <2 x float>, <2 x float> } %336, 0
  store <2 x float> %337, ptr %58, align 8
  %338 = extractvalue { <2 x float>, <2 x float> } %336, 1
  store <2 x float> %338, ptr %159, align 8
  %339 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %340 = extractvalue { <2 x float>, <2 x float> } %339, 0
  store <2 x float> %340, ptr %57, align 8
  %341 = extractvalue { <2 x float>, <2 x float> } %339, 1
  store <2 x float> %341, ptr %160, align 8
  %342 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %175)
  %343 = extractvalue { <2 x float>, <2 x float> } %342, 0
  store <2 x float> %343, ptr %56, align 8
  %344 = extractvalue { <2 x float>, <2 x float> } %342, 1
  store <2 x float> %344, ptr %161, align 8
  %.sroa.032.0.copyload.3 = load <2 x float>, ptr %6, align 8
  %.sroa.031.0.copyload.3 = load <2 x float>, ptr %7, align 8
  %345 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload.3, <2 x float> %.sroa.031.0.copyload.3)
  store <2 x float> %345, ptr %.ptr.3, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %57) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %56) #11
  %346 = extractvalue { <2 x float>, <2 x float> } %260, 1
  %.sroa.029.0.copyload = load float, ptr %262, align 8, !tbaa !26
  %.sroa.430.0..sroa_idx = getelementptr inbounds i8, ptr %262, i64 4
  %.sroa.430.0.copyload = load float, ptr %.sroa.430.0..sroa_idx, align 4, !tbaa !26
  %347 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %262, ptr noundef nonnull align 4 dereferenceable(8) %264)
  %348 = fcmp ogt float %229, %.sroa.029.0.copyload
  %.sroa.5.8.vec.extract = extractelement <2 x float> %347, i64 0
  %349 = fcmp olt float %229, %.sroa.5.8.vec.extract
  %or.cond = select i1 %348, i1 %349, i1 false
  %350 = fcmp ogt float %231, %.sroa.430.0.copyload
  %or.cond130 = select i1 %or.cond, i1 %350, i1 false
  br i1 %or.cond130, label %351, label %353

351:                                              ; preds = %240
  %.sroa.5.12.vec.extract = extractelement <2 x float> %347, i64 1
  %352 = fcmp olt float %231, %.sroa.5.12.vec.extract
  br label %353

353:                                              ; preds = %351, %240
  %354 = phi i1 [ false, %240 ], [ %352, %351 ]
  %.sroa.056.0.vec.extract = extractelement <2 x float> %261, i64 0
  %.sroa.056.4.vec.extract = extractelement <2 x float> %261, i64 1
  %355 = fmul float %.sroa.056.4.vec.extract, 3.000000e+00
  %356 = call float @llvm.fmuladd.f32(float %.sroa.056.0.vec.extract, float 9.000000e+00, float %355)
  %.sroa.557.8.vec.extract = extractelement <2 x float> %346, i64 0
  %357 = fadd float %.sroa.557.8.vec.extract, %356
  %358 = fptosi float %357 to i32
  %359 = icmp slt i32 %358, 27
  br i1 %359, label %361, label %360

360:                                              ; preds = %353
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 2621, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j) #12
  unreachable

361:                                              ; preds = %353
  %362 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !range !27
  %363 = xor i8 %362, 1
  %364 = select i1 %354, i8 %363, i8 0
  %365 = sext i32 %358 to i64
  %366 = getelementptr inbounds [27 x i8], ptr %22, i64 0, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !28, !range !27, !noundef !29
  %368 = or i8 %364, %367
  store i8 %368, ptr %366, align 1, !tbaa !28
  br i1 %.not129, label %429, label %369

369:                                              ; preds = %361
  %370 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  %371 = load i32, ptr %238, align 4, !tbaa !22
  %372 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !28, !range !27, !noundef !29
  %373 = trunc nuw i8 %372 to i1
  %374 = select i1 %373, i32 526344, i32 0
  %375 = or i32 %371, %374
  %376 = or i32 %375, -2139062144
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %370, ptr noundef nonnull %46, i32 noundef 4, i32 noundef %376)
  %377 = trunc nuw i8 %368 to i1
  br i1 %377, label %378, label %429

378:                                              ; preds = %369
  %379 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %379, ptr noundef nonnull %46, i32 noundef 4, i32 noundef -2141150992)
  %380 = load i8, ptr %162, align 8, !tbaa !28, !range !27, !noundef !29
  %381 = trunc nuw i8 %380 to i1
  br i1 %381, label %422, label %382

382:                                              ; preds = %378
  %383 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !28, !range !27, !noundef !29
  %384 = trunc nuw i8 %383 to i1
  br i1 %384, label %422, label %385

385:                                              ; preds = %382
  %386 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !28, !range !27, !noundef !29
  %387 = trunc nuw i8 %386 to i1
  br i1 %387, label %388, label %422

388:                                              ; preds = %385
  %389 = sdiv i32 %358, 9
  %.neg = mul nsw i32 %389, -9
  %390 = add i32 %.neg, %358
  %391 = sdiv i32 %390, 3
  %392 = srem i32 %358, 3
  %393 = sitofp i32 %389 to float
  %394 = fsub float 1.000000e+00, %393
  %395 = sitofp i32 %391 to float
  %396 = fsub float 1.000000e+00, %395
  %397 = sitofp i32 %392 to float
  %398 = fsub float 1.000000e+00, %397
  %399 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %394, float noundef %396, float noundef %398, float noundef 0.000000e+00)
  %400 = extractvalue { <2 x float>, <2 x float> } %399, 0
  %401 = extractvalue { <2 x float>, <2 x float> } %399, 1
  store <2 x float> %400, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, align 4
  store <2 x float> %401, ptr getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, i64 8), align 4
  %402 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir)
  %403 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %8)
  %404 = call float @llvm.fabs.f32(float %403)
  %405 = fcmp ogt float %404, 0x3FEFAE1480000000
  br i1 %405, label %406, label %420

406:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %59) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %59, ptr noundef nonnull align 4 dereferenceable(16) %12, i64 16, i1 false), !tbaa.struct !25
  %407 = load float, ptr %59, align 4, !tbaa !30
  %408 = call float @llvm.fabs.f32(float %407)
  %409 = load float, ptr %163, align 4, !tbaa !31
  %410 = call float @llvm.fabs.f32(float %409)
  %411 = fcmp ogt float %408, %410
  br i1 %411, label %412, label %413

412:                                              ; preds = %406
  store float 0.000000e+00, ptr %163, align 4, !tbaa !31
  br label %414

413:                                              ; preds = %406
  store float 0.000000e+00, ptr %59, align 4, !tbaa !30
  br label %414

414:                                              ; preds = %413, %412
  %415 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %59)
  %416 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %59)
  %417 = extractvalue { <2 x float>, <2 x float> } %416, 0
  %418 = extractvalue { <2 x float>, <2 x float> } %416, 1
  store <2 x float> %417, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, align 4
  store <2 x float> %418, ptr getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 8), align 4
  %419 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %59) #11
  br label %421

420:                                              ; preds = %388
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, ptr noundef nonnull align 8 dereferenceable(16) %8, i64 16, i1 false), !tbaa.struct !25
  br label %421

421:                                              ; preds = %420, %414
  store i32 40, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !22
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !28
  %.pre = load i8, ptr %162, align 8, !tbaa !28, !range !27
  br label %422

422:                                              ; preds = %421, %385, %382, %378
  %423 = phi i8 [ %.pre, %421 ], [ %380, %385 ], [ %380, %382 ], [ %380, %378 ]
  %424 = trunc nuw i8 %423 to i1
  br i1 %424, label %425, label %429

425:                                              ; preds = %422
  %426 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !28, !range !27, !noundef !29
  %427 = trunc nuw i8 %426 to i1
  br i1 %427, label %429, label %428

428:                                              ; preds = %425
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !28
  br label %429

429:                                              ; preds = %369, %428, %425, %422, %361
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %47) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 9
  br i1 %exitcond.not, label %239, label %240, !llvm.loop !32

430:                                              ; preds = %167, %239
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  %431 = add nuw nsw i32 %.0120140, 1
  %exitcond144.not = icmp eq i32 %431, 6
  br i1 %exitcond144.not, label %166, label %167, !llvm.loop !33

432:                                              ; preds = %164
  %433 = add nsw i32 %165, -1
  store i32 %433, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %60, ptr noundef nonnull align 4 dereferenceable(16) %84, i64 16, i1 false), !tbaa.struct !25
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %60, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, float noundef 0x3FC99999A0000000)
  %434 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %60)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %61, ptr noundef nonnull align 4 dereferenceable(16) %106, i64 16, i1 false), !tbaa.struct !25
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %61, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, float noundef 0x3FD3333340000000)
  %435 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %61)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %61, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %62) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %63) #11
  %436 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %60, float noundef %1)
  %437 = extractvalue { <2 x float>, <2 x float> } %436, 0
  store <2 x float> %437, ptr %63, align 8
  %438 = getelementptr inbounds i8, ptr %63, i64 8
  %439 = extractvalue { <2 x float>, <2 x float> } %436, 1
  store <2 x float> %439, ptr %438, align 8
  %440 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %63)
  %441 = extractvalue { <2 x float>, <2 x float> } %440, 0
  store <2 x float> %441, ptr %62, align 8
  %442 = getelementptr inbounds i8, ptr %62, i64 8
  %443 = extractvalue { <2 x float>, <2 x float> } %440, 1
  store <2 x float> %443, ptr %442, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %63) #11
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %62, ptr noundef nonnull %13, ptr noundef nonnull %61, ptr noundef nonnull %0)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %62) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #11
  br label %444

444:                                              ; preds = %432, %164
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %64) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #11
  %445 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %445, ptr %65, align 8
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %65)
  %446 = getelementptr inbounds i8, ptr %79, i64 3648
  %447 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(8) %446)
  %448 = zext i1 %447 to i8
  store i8 %448, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #11
  %449 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !28, !range !27, !noundef !29
  %450 = trunc nuw i8 %449 to i1
  %451 = load i8, ptr %162, align 8, !tbaa !28, !range !27, !noundef !29
  %452 = trunc nuw i8 %451 to i1
  br i1 %450, label %461, label %453

453:                                              ; preds = %444
  %brmerge.demorgan = and i1 %447, %452
  br i1 %brmerge.demorgan, label %454, label %.thread

454:                                              ; preds = %453
  %455 = getelementptr inbounds i8, ptr %79, i64 232
  %456 = load float, ptr %455, align 8, !tbaa !34
  %457 = fcmp ueq float %456, 0.000000e+00
  %458 = getelementptr inbounds i8, ptr %79, i64 236
  %459 = load float, ptr %458, align 4
  %460 = fcmp ueq float %459, 0.000000e+00
  %or.cond133 = select i1 %457, i1 %460, i1 false
  br i1 %or.cond133, label %.thread, label %.thread.thread

.thread.thread:                                   ; preds = %454
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !28
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !28
  br label %463

461:                                              ; preds = %444
  br i1 %452, label %.thread, label %.thread.thread145

.thread.thread145:                                ; preds = %461
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !28
  br label %495

.thread:                                          ; preds = %453, %454, %461
  %462 = trunc nuw i8 %449 to i1
  br i1 %462, label %463, label %495

463:                                              ; preds = %.thread.thread, %.thread
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %66) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %66)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %67) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %67)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %68) #11
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %68)
  %464 = getelementptr inbounds i8, ptr %79, i64 232
  %465 = load float, ptr %464, align 8, !tbaa !34
  %466 = fmul float %465, 0xBF847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %66, ptr noundef nonnull align 4 dereferenceable(16) %8, float noundef %466)
  %467 = getelementptr inbounds i8, ptr %79, i64 236
  %468 = load float, ptr %467, align 4, !tbaa !39
  %469 = fmul float %468, 0xBF847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %67, ptr noundef nonnull align 4 dereferenceable(16) %12, float noundef %469)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %69) #11
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind nonnull writable sret(%"struct.ImGuizmo::matrix_t") align 4 %69, ptr noundef nonnull align 4 dereferenceable(64) %66, ptr noundef nonnull align 4 dereferenceable(64) %67)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %68, ptr noundef nonnull align 4 dereferenceable(64) %69, i64 64, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %69) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %70) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(16) %84, i64 16, i1 false), !tbaa.struct !25
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(64) %68)
  %470 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %70)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %71) #11
  %471 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %12, ptr noundef nonnull align 4 dereferenceable(16) %8)
  %472 = extractvalue { <2 x float>, <2 x float> } %471, 0
  store <2 x float> %472, ptr %71, align 8
  %473 = getelementptr inbounds i8, ptr %71, i64 8
  %474 = extractvalue { <2 x float>, <2 x float> } %471, 1
  store <2 x float> %474, ptr %473, align 8
  %475 = getelementptr inbounds i8, ptr %71, i64 4
  store float 0.000000e+00, ptr %475, align 4, !tbaa !40
  %476 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %71)
  %477 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %71, ptr noundef nonnull align 4 dereferenceable(16) %70)
  %478 = fcmp olt float %477, 0.000000e+00
  br i1 %478, label %479, label %486

479:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %72) #11
  %480 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %71, float noundef %477)
  %481 = extractvalue { <2 x float>, <2 x float> } %480, 0
  store <2 x float> %481, ptr %72, align 8
  %482 = getelementptr inbounds i8, ptr %72, i64 8
  %483 = extractvalue { <2 x float>, <2 x float> } %480, 1
  store <2 x float> %483, ptr %482, align 8
  %484 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(16) %72)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %72) #11
  %485 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %70)
  br label %486

486:                                              ; preds = %479, %463
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %73) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %74) #11
  %487 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %70, float noundef %1)
  %488 = extractvalue { <2 x float>, <2 x float> } %487, 0
  store <2 x float> %488, ptr %74, align 8
  %489 = getelementptr inbounds i8, ptr %74, i64 8
  %490 = extractvalue { <2 x float>, <2 x float> } %487, 1
  store <2 x float> %490, ptr %489, align 8
  %491 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %74)
  %492 = extractvalue { <2 x float>, <2 x float> } %491, 0
  store <2 x float> %492, ptr %73, align 8
  %493 = getelementptr inbounds i8, ptr %73, i64 8
  %494 = extractvalue { <2 x float>, <2 x float> } %491, 1
  store <2 x float> %494, ptr %493, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #11
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %73, ptr noundef nonnull %13, ptr noundef nonnull %8, ptr noundef nonnull %0)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %71) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %68) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %67) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %66) #11
  br label %495

495:                                              ; preds = %.thread.thread145, %486, %.thread
  %496 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 8), align 8, !tbaa !41
  call void @_ZN8ImGuizmoL14ComputeContextEPKfS1_PfNS_4MODEE(ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 268), i32 noundef %496)
  call void @llvm.lifetime.end.p0(i64 27, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #11
  ret void
}

declare noundef nonnull align 8 dereferenceable(14616) ptr @_ZN5ImGui5GetIOEv() local_unnamed_addr #7

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN8ImGuizmoL16ComputeCameraRayERNS_5vec_tES1_6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), <2 x float>, <2 x float>) local_unnamed_addr #6

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZN8ImGuizmoL17IntersectRayPlaneERKNS_5vec_tES2_S2_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #2

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #10

; 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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nounwind }
attributes #12 = { noreturn 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 = !{i64 0, i64 64, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTSN8ImGuizmo7ContextE", !11, i64 0, !12, i64 8, !13, i64 12, !13, i64 76, !13, i64 140, !13, i64 204, !13, i64 268, !13, i64 332, !13, i64 396, !13, i64 460, !14, i64 524, !14, i64 540, !14, i64 556, !14, i64 572, !14, i64 588, !14, i64 604, !14, i64 620, !15, i64 636, !16, i64 640, !16, i64 648, !16, i64 656, !15, i64 664, !14, i64 668, !17, i64 684, !17, i64 685, !17, i64 686, !14, i64 688, !14, i64 704, !14, i64 720, !14, i64 736, !14, i64 752, !15, i64 768, !15, i64 772, !14, i64 776, !14, i64 792, !14, i64 808, !15, i64 824, !7, i64 828, !7, i64 831, !7, i64 836, !14, i64 848, !14, i64 864, !14, i64 880, !14, i64 896, !18, i64 912, !7, i64 916, !17, i64 924, !13, i64 928, !18, i64 992, !15, i64 996, !15, i64 1000, !15, i64 1004, !15, i64 1008, !15, i64 1012, !15, i64 1016, !15, i64 1020, !17, i64 1024, !18, i64 1028, !18, i64 1032, !19, i64 1036, !17, i64 1040, !15, i64 1044}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"_ZTSN8ImGuizmo4MODEE", !7, i64 0}
!13 = !{!"_ZTSN8ImGuizmo8matrix_tE", !7, i64 0}
!14 = !{!"_ZTSN8ImGuizmo5vec_tE", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12}
!15 = !{!"float", !7, i64 0}
!16 = !{!"_ZTS6ImVec2", !15, i64 0, !15, i64 4}
!17 = !{!"bool", !7, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!"_ZTSN8ImGuizmo9OPERATIONE", !7, i64 0}
!20 = !{!16, !15, i64 0}
!21 = !{!16, !15, i64 4}
!22 = !{!18, !18, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{i64 0, i64 4, !26, i64 4, i64 4, !26, i64 8, i64 4, !26, i64 12, i64 4, !26}
!26 = !{!15, !15, i64 0}
!27 = !{i8 0, i8 2}
!28 = !{!17, !17, i64 0}
!29 = !{}
!30 = !{!14, !15, i64 0}
!31 = !{!14, !15, i64 8}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = !{!35, !15, i64 232}
!35 = !{!"_ZTS7ImGuiIO", !18, i64 0, !18, i64 4, !16, i64 8, !15, i64 16, !15, i64 20, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !15, i64 56, !17, i64 60, !11, i64 64, !16, i64 72, !17, i64 80, !17, i64 81, !17, i64 82, !17, i64 83, !17, i64 84, !17, i64 85, !17, i64 86, !17, i64 87, !17, i64 88, !17, i64 89, !17, i64 90, !17, i64 91, !17, i64 92, !17, i64 93, !17, i64 94, !17, i64 95, !15, i64 96, !15, i64 100, !15, i64 104, !15, i64 108, !15, i64 112, !15, i64 116, !17, i64 120, !17, i64 121, !17, i64 122, !17, i64 123, !17, i64 124, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !11, i64 184, !11, i64 192, !36, i64 200, !17, i64 202, !17, i64 203, !17, i64 204, !17, i64 205, !17, i64 206, !17, i64 207, !17, i64 208, !15, i64 212, !18, i64 216, !18, i64 220, !18, i64 224, !18, i64 228, !16, i64 232, !7, i64 240, !7, i64 2904, !7, i64 3572, !11, i64 3640, !16, i64 3648, !7, i64 3656, !15, i64 3664, !15, i64 3668, !37, i64 3672, !18, i64 3676, !17, i64 3680, !17, i64 3681, !17, i64 3682, !17, i64 3683, !18, i64 3684, !7, i64 3688, !17, i64 14344, !16, i64 14348, !7, i64 14356, !7, i64 14400, !7, i64 14440, !7, i64 14445, !7, i64 14450, !7, i64 14460, !7, i64 14470, !7, i64 14475, !7, i64 14480, !17, i64 14485, !7, i64 14488, !7, i64 14508, !7, i64 14528, !7, i64 14568, !15, i64 14588, !17, i64 14592, !17, i64 14593, !7, i64 14594, !17, i64 14595, !36, i64 14596, !38, i64 14600}
!36 = !{!"short", !7, i64 0}
!37 = !{!"_ZTS16ImGuiMouseSource", !7, i64 0}
!38 = !{!"_ZTS8ImVectorItE", !18, i64 0, !18, i64 4, !11, i64 8}
!39 = !{!35, !15, i64 236}
!40 = !{!14, !15, i64 4}
!41 = !{!10, !12, i64 8}


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