; LLVM IR from mateeeeeee/Adria-DX11 :: ThirdParty/ImGui/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, %"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 }
%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, float, float, float, [22 x i32], float, float, ptr, ptr, float, i8, ptr, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.ImVec2, [5 x i8], float, float, i32, i8, i8, i8, i8, [512 x i8], [21 x float], i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, i32, i32, %struct.ImVec2, i32, %struct.ImVec2, [5 x %struct.ImVec2], [5 x double], [5 x i8], [5 x i8], [5 x i8], [5 x i8], [5 x i8], [5 x float], [5 x float], [5 x %struct.ImVec2], [5 x float], [512 x float], [512 x float], [21 x float], [21 x float], float, i16, %struct.ImVector }
%struct.ImVector = 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 global [9 x %struct.ImVec2], align 16
@_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition = external hidden global i64, align 8
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize = external hidden global [9 x %struct.ImVec2], align 16
@_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [91 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare ptr @llvm.invariant.start.p0(i64 immarg, ptr nocapture) #1

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

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

; Function Attrs: mustprogress 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 personality ptr @__gxx_personality_v0 {
  %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 ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca [27 x i8], align 16
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca float, 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 [4 x %"struct.ImGuizmo::vec_t"], align 16
  %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 %"struct.ImGuizmo::vec_t", 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 %"struct.ImGuizmo::vec_t", align 4
  %56 = alloca %"struct.ImGuizmo::vec_t", align 4
  %57 = alloca float, 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 %"struct.ImGuizmo::vec_t", align 4
  %62 = alloca float, align 4
  %63 = alloca float, 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 i32, align 4
  %69 = alloca %"struct.ImGuizmo::vec_t", align 4
  %70 = alloca %"struct.ImGuizmo::vec_t", align 4
  %71 = alloca %"struct.ImGuizmo::vec_t", align 4
  %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.ImVec2, align 4
  %76 = alloca %struct.ImVec2, align 4
  %77 = alloca [4 x %struct.ImVec2], align 16
  %78 = alloca [4 x %"struct.ImGuizmo::vec_t"], align 16
  %79 = alloca %"struct.ImGuizmo::vec_t", align 4
  %80 = alloca %"struct.ImGuizmo::vec_t", align 4
  %81 = alloca %"struct.ImGuizmo::vec_t", 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.ImGuizmo::vec_t", align 4
  %86 = alloca %"struct.ImGuizmo::vec_t", align 4
  %87 = alloca i32, align 4
  %88 = alloca %struct.ImVec2, align 4
  %89 = alloca %"struct.ImGuizmo::vec_t", align 4
  %90 = alloca %"struct.ImGuizmo::vec_t", align 4
  %91 = alloca %"struct.ImGuizmo::vec_t", align 4
  %92 = alloca %struct.ImVec2, align 4
  %93 = alloca %struct.ImVec2, align 4
  %94 = alloca [2 x %struct.ImVec2], align 16
  %95 = alloca i8, align 1
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, 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.ImGuizmo::vec_t", align 4
  %106 = alloca %"struct.ImGuizmo::vec_t", align 4
  %107 = alloca %"struct.ImGuizmo::vec_t", align 4
  %108 = alloca %"struct.ImGuizmo::vec_t", align 4
  %109 = alloca %"struct.ImGuizmo::vec_t", align 4
  %110 = alloca %"struct.ImGuizmo::vec_t", align 4
  %111 = alloca %"struct.ImGuizmo::vec_t", align 4
  %112 = alloca %struct.ImRect, align 4
  %113 = alloca %struct.ImVec2, align 4
  %114 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %115 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %116 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %117 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %118 = alloca %"struct.ImGuizmo::vec_t", align 4
  %119 = alloca %"struct.ImGuizmo::vec_t", align 4
  %120 = alloca %"struct.ImGuizmo::vec_t", align 4
  %121 = alloca %"struct.ImGuizmo::vec_t", align 4
  %122 = alloca float, align 4
  %123 = alloca %"struct.ImGuizmo::vec_t", align 4
  %124 = alloca %"struct.ImGuizmo::vec_t", align 4
  %125 = alloca %"struct.ImGuizmo::vec_t", align 4
  %126 = 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) #10
  %127 = 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)
  %128 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %11, i32 0, i32 0
  %129 = extractvalue { <2 x float>, <2 x float> } %127, 0
  store <2 x float> %129, ptr %128, align 4
  %130 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %11, i32 0, i32 1
  %131 = extractvalue { <2 x float>, <2 x float> } %127, 1
  store <2 x float> %131, ptr %130, align 4
  call void @llvm.lifetime.start.p0(i64 64, ptr %12) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %12)
  call void @llvm.lifetime.start.p0(i64 64, ptr %13) #10
  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) #10
  %132 = call noundef nonnull align 8 dereferenceable(5456) ptr @_ZN5ImGui5GetIOEv()
  store ptr %132, ptr %14, align 8, !tbaa !5
  %133 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %134 = 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> %134, ptr %15, align 4
  %135 = load i32, ptr %10, align 4, !tbaa !11
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %133, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %135, float noundef 0.000000e+00, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %16)
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = call noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64) %16, ptr noundef nonnull align 4 dereferenceable(64) %136, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #10
  %138 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %139 = getelementptr inbounds %struct.anon, ptr %138, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #10
  %140 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %141 = getelementptr inbounds %struct.anon, ptr %140, i32 0, i32 2
  %142 = load float, ptr %9, align 4, !tbaa !9
  %143 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %141, float noundef %142)
  %144 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 0
  %145 = extractvalue { <2 x float>, <2 x float> } %143, 0
  store <2 x float> %145, ptr %144, align 4
  %146 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 1
  %147 = extractvalue { <2 x float>, <2 x float> } %143, 1
  store <2 x float> %147, ptr %146, align 4
  %148 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %139, ptr noundef nonnull align 4 dereferenceable(16) %18)
  %149 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, i32 0, i32 0
  %150 = extractvalue { <2 x float>, <2 x float> } %148, 0
  store <2 x float> %150, ptr %149, align 4
  %151 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, i32 0, i32 1
  %152 = extractvalue { <2 x float>, <2 x float> } %148, 1
  store <2 x float> %152, ptr %151, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  store float 3.000000e+00, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %20) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %20)
  call void @llvm.lifetime.start.p0(i64 64, ptr %21) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %21)
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  %153 = call float @sqrtf(float noundef 1.200000e+01) #10
  %154 = fdiv float 3.000000e+00, %153
  %155 = call float @acosf(float noundef %154) #10
  %156 = fmul float %155, 0x404CA5DC00000000
  store float %156, ptr %22, align 4, !tbaa !9
  %157 = load float, ptr %22, align 4, !tbaa !9
  %158 = call float @sqrtf(float noundef 2.000000e+00) #10
  %159 = fdiv float %157, %158
  %160 = getelementptr inbounds %struct.ImVec2, ptr %7, i32 0, i32 0
  %161 = load float, ptr %160, align 4, !tbaa !23
  %162 = getelementptr inbounds %struct.ImVec2, ptr %7, i32 0, i32 1
  %163 = load float, ptr %162, align 4, !tbaa !24
  %164 = fdiv float %161, %163
  %165 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %20, i32 0, i32 0
  %166 = getelementptr inbounds [16 x float], ptr %165, i64 0, i64 0
  call void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef %159, float noundef %164, float noundef 0x3F847AE140000000, float noundef 1.000000e+03, ptr noundef %166)
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #10
  %167 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %168 = getelementptr inbounds [4 x [4 x float]], ptr %167, i64 0, i64 2
  %169 = getelementptr inbounds [4 x float], ptr %168, i64 0, i64 0
  %170 = load float, ptr %169, align 4, !tbaa !14
  %171 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %172 = getelementptr inbounds [4 x [4 x float]], ptr %171, i64 0, i64 2
  %173 = getelementptr inbounds [4 x float], ptr %172, i64 0, i64 1
  %174 = load float, ptr %173, align 4, !tbaa !14
  %175 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %176 = getelementptr inbounds [4 x [4 x float]], ptr %175, i64 0, i64 2
  %177 = getelementptr inbounds [4 x float], ptr %176, i64 0, i64 2
  %178 = load float, ptr %177, align 4, !tbaa !14
  %179 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %170, float noundef %174, float noundef %178, float noundef 0.000000e+00)
  %180 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %23, i32 0, i32 0
  %181 = extractvalue { <2 x float>, <2 x float> } %179, 0
  store <2 x float> %181, ptr %180, align 4
  %182 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %23, i32 0, i32 1
  %183 = extractvalue { <2 x float>, <2 x float> } %179, 1
  store <2 x float> %183, ptr %182, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #10
  %184 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %185 = getelementptr inbounds [4 x [4 x float]], ptr %184, i64 0, i64 1
  %186 = getelementptr inbounds [4 x float], ptr %185, i64 0, i64 0
  %187 = load float, ptr %186, align 4, !tbaa !14
  %188 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %189 = getelementptr inbounds [4 x [4 x float]], ptr %188, i64 0, i64 1
  %190 = getelementptr inbounds [4 x float], ptr %189, i64 0, i64 1
  %191 = load float, ptr %190, align 4, !tbaa !14
  %192 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %193 = getelementptr inbounds [4 x [4 x float]], ptr %192, i64 0, i64 1
  %194 = getelementptr inbounds [4 x float], ptr %193, i64 0, i64 2
  %195 = load float, ptr %194, align 4, !tbaa !14
  %196 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %187, float noundef %191, float noundef %195, float noundef 0.000000e+00)
  %197 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 0
  %198 = extractvalue { <2 x float>, <2 x float> } %196, 0
  store <2 x float> %198, ptr %197, align 4
  %199 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 1
  %200 = extractvalue { <2 x float>, <2 x float> } %196, 1
  store <2 x float> %200, ptr %199, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #10
  %201 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 3.000000e+00)
  %202 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %203 = extractvalue { <2 x float>, <2 x float> } %201, 0
  store <2 x float> %203, ptr %202, align 4
  %204 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %205 = extractvalue { <2 x float>, <2 x float> } %201, 1
  store <2 x float> %205, ptr %204, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #10
  %206 = 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)
  %207 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, i32 0, i32 0
  %208 = extractvalue { <2 x float>, <2 x float> } %206, 0
  store <2 x float> %208, ptr %207, align 4
  %209 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, i32 0, i32 1
  %210 = extractvalue { <2 x float>, <2 x float> } %206, 1
  store <2 x float> %210, ptr %209, align 4
  %211 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %25, i32 0, i32 0
  %212 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %26, i32 0, i32 0
  %213 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %24, i32 0, i32 0
  %214 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %21, i32 0, i32 0
  %215 = getelementptr inbounds [16 x float], ptr %214, i64 0, i64 0
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %211, ptr noundef %212, ptr noundef %213, ptr noundef %215)
  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
  %216 = load <2 x float>, ptr %27, align 4
  %217 = 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> %216, <2 x float> %217)
  call void @llvm.lifetime.start.p0(i64 64, ptr %29) #10
  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)
  %218 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition acquire, align 8
  %219 = icmp eq i8 %218, 0
  br i1 %219, label %220, label %234, !prof !26

220:                                              ; preds = %5
  %221 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #10
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %223, label %234

223:                                              ; preds = %220
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, float noundef 7.500000e-01, float noundef 7.500000e-01)
          to label %224 unwind label %256

224:                                              ; preds = %223
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 1), float noundef 2.500000e-01, float noundef 7.500000e-01)
          to label %225 unwind label %256

225:                                              ; preds = %224
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 2), float noundef 0.000000e+00, float noundef 7.500000e-01)
          to label %226 unwind label %256

226:                                              ; preds = %225
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 3), float noundef 7.500000e-01, float noundef 2.500000e-01)
          to label %227 unwind label %256

227:                                              ; preds = %226
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 4), float noundef 2.500000e-01, float noundef 2.500000e-01)
          to label %228 unwind label %256

228:                                              ; preds = %227
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 5), float noundef 0.000000e+00, float noundef 2.500000e-01)
          to label %229 unwind label %256

229:                                              ; preds = %228
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 6), float noundef 7.500000e-01, float noundef 0.000000e+00)
          to label %230 unwind label %256

230:                                              ; preds = %229
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 7), float noundef 2.500000e-01, float noundef 0.000000e+00)
          to label %231 unwind label %256

231:                                              ; preds = %230
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 8), float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %232 unwind label %256

232:                                              ; preds = %231
  %233 = call ptr @llvm.invariant.start.p0(i64 72, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition)
  call void @__cxa_guard_release(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #10
  br label %234

234:                                              ; preds = %232, %220, %5
  %235 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize acquire, align 8
  %236 = icmp eq i8 %235, 0
  br i1 %236, label %237, label %251, !prof !26

237:                                              ; preds = %234
  %238 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #10
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %251

240:                                              ; preds = %237
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, float noundef 2.500000e-01, float noundef 2.500000e-01)
          to label %241 unwind label %260

241:                                              ; preds = %240
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 1), float noundef 5.000000e-01, float noundef 2.500000e-01)
          to label %242 unwind label %260

242:                                              ; preds = %241
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 2), float noundef 2.500000e-01, float noundef 2.500000e-01)
          to label %243 unwind label %260

243:                                              ; preds = %242
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 3), float noundef 2.500000e-01, float noundef 5.000000e-01)
          to label %244 unwind label %260

244:                                              ; preds = %243
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 4), float noundef 5.000000e-01, float noundef 5.000000e-01)
          to label %245 unwind label %260

245:                                              ; preds = %244
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 5), float noundef 2.500000e-01, float noundef 5.000000e-01)
          to label %246 unwind label %260

246:                                              ; preds = %245
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 6), float noundef 2.500000e-01, float noundef 2.500000e-01)
          to label %247 unwind label %260

247:                                              ; preds = %246
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 7), float noundef 5.000000e-01, float noundef 2.500000e-01)
          to label %248 unwind label %260

248:                                              ; preds = %247
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (%struct.ImVec2, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 8), float noundef 2.500000e-01, float noundef 2.500000e-01)
          to label %249 unwind label %260

249:                                              ; preds = %248
  %250 = call ptr @llvm.invariant.start.p0(i64 72, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize)
  call void @__cxa_guard_release(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #10
  br label %251

251:                                              ; preds = %249, %237, %234
  call void @llvm.lifetime.start.p0(i64 27, ptr %32) #10
  call void @llvm.memset.p0.i64(ptr align 16 %32, i8 0, i64 27, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %252

252:                                              ; preds = %865, %251
  %253 = load i32, ptr %33, align 4, !tbaa !11
  %254 = icmp slt i32 %253, 2
  br i1 %254, label %264, label %255

255:                                              ; preds = %252
  store i32 2, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  br label %868

256:                                              ; preds = %231, %230, %229, %228, %227, %226, %225, %224, %223
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %30, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %31, align 4
  call void @__cxa_guard_abort(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #10
  br label %1022

260:                                              ; preds = %248, %247, %246, %245, %244, %243, %242, %241, %240
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %30, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %31, align 4
  call void @__cxa_guard_abort(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #10
  br label %1022

264:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  store i32 0, ptr %35, align 4, !tbaa !11
  br label %265

265:                                              ; preds = %861, %264
  %266 = load i32, ptr %35, align 4, !tbaa !11
  %267 = icmp slt i32 %266, 6
  br i1 %267, label %269, label %268

268:                                              ; preds = %265
  store i32 5, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  br label %864

269:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %270 = load i32, ptr %35, align 4, !tbaa !11
  %271 = srem i32 %270, 3
  store i32 %271, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  %272 = load i32, ptr %36, align 4, !tbaa !11
  %273 = add nsw i32 %272, 1
  %274 = srem i32 %273, 3
  store i32 %274, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #10
  %275 = load i32, ptr %36, align 4, !tbaa !11
  %276 = add nsw i32 %275, 2
  %277 = srem i32 %276, 3
  store i32 %277, ptr %38, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  %278 = load i32, ptr %35, align 4, !tbaa !11
  %279 = icmp sgt i32 %278, 2
  %280 = zext i1 %279 to i64
  %281 = select i1 %279, float -1.000000e+00, float 1.000000e+00
  store float %281, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #10
  %282 = load i32, ptr %37, align 4, !tbaa !11
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %283
  %285 = load float, ptr %39, align 4, !tbaa !9
  %286 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %284, float noundef %285)
  %287 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %40, i32 0, i32 0
  %288 = extractvalue { <2 x float>, <2 x float> } %286, 0
  store <2 x float> %288, ptr %287, align 4
  %289 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %40, i32 0, i32 1
  %290 = extractvalue { <2 x float>, <2 x float> } %286, 1
  store <2 x float> %290, ptr %289, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #10
  %291 = load i32, ptr %38, align 4, !tbaa !11
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %292
  %294 = load float, ptr %39, align 4, !tbaa !9
  %295 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %293, float noundef %294)
  %296 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 0
  %297 = extractvalue { <2 x float>, <2 x float> } %295, 0
  store <2 x float> %297, ptr %296, align 4
  %298 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 1
  %299 = extractvalue { <2 x float>, <2 x float> } %295, 1
  store <2 x float> %299, ptr %298, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #10
  %300 = load i32, ptr %36, align 4, !tbaa !11
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %301
  %303 = load float, ptr %39, align 4, !tbaa !9
  %304 = fneg float %303
  %305 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %302, float noundef %304)
  %306 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %44, 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 %44, i32 0, i32 1
  %309 = extractvalue { <2 x float>, <2 x float> } %305, 1
  store <2 x float> %309, ptr %308, align 4
  %310 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %40)
  %311 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, i32 0, i32 0
  %312 = extractvalue { <2 x float>, <2 x float> } %310, 0
  store <2 x float> %312, ptr %311, align 4
  %313 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, i32 0, i32 1
  %314 = extractvalue { <2 x float>, <2 x float> } %310, 1
  store <2 x float> %314, ptr %313, align 4
  %315 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(16) %41)
  %316 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %42, i32 0, i32 0
  %317 = extractvalue { <2 x float>, <2 x float> } %315, 0
  store <2 x float> %317, ptr %316, align 4
  %318 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %42, i32 0, i32 1
  %319 = extractvalue { <2 x float>, <2 x float> } %315, 1
  store <2 x float> %319, ptr %318, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #10
  %320 = load i32, ptr %36, align 4, !tbaa !11
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %321
  %323 = load i32, ptr %37, align 4, !tbaa !11
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %324
  %326 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %322, ptr noundef nonnull align 4 dereferenceable(16) %325)
  %327 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %46, i32 0, i32 0
  %328 = extractvalue { <2 x float>, <2 x float> } %326, 0
  store <2 x float> %328, ptr %327, align 4
  %329 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %46, i32 0, i32 1
  %330 = extractvalue { <2 x float>, <2 x float> } %326, 1
  store <2 x float> %330, ptr %329, align 4
  %331 = load i32, ptr %38, align 4, !tbaa !11
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %332
  %334 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %46, ptr noundef nonnull align 4 dereferenceable(16) %333)
  %335 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %45, i32 0, i32 0
  %336 = extractvalue { <2 x float>, <2 x float> } %334, 0
  store <2 x float> %336, ptr %335, align 16
  %337 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %45, i32 0, i32 1
  %338 = extractvalue { <2 x float>, <2 x float> } %334, 1
  store <2 x float> %338, ptr %337, align 8
  %339 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %45, i64 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #10
  %340 = load i32, ptr %36, align 4, !tbaa !11
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %341
  %343 = load i32, ptr %37, align 4, !tbaa !11
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %344
  %346 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %342, ptr noundef nonnull align 4 dereferenceable(16) %345)
  %347 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 0
  %348 = extractvalue { <2 x float>, <2 x float> } %346, 0
  store <2 x float> %348, ptr %347, align 4
  %349 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 1
  %350 = extractvalue { <2 x float>, <2 x float> } %346, 1
  store <2 x float> %350, ptr %349, align 4
  %351 = load i32, ptr %38, align 4, !tbaa !11
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %352
  %354 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %47, ptr noundef nonnull align 4 dereferenceable(16) %353)
  %355 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %339, i32 0, i32 0
  %356 = extractvalue { <2 x float>, <2 x float> } %354, 0
  store <2 x float> %356, ptr %355, align 16
  %357 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %339, i32 0, i32 1
  %358 = extractvalue { <2 x float>, <2 x float> } %354, 1
  store <2 x float> %358, ptr %357, align 8
  %359 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %45, i64 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #10
  %360 = load i32, ptr %36, align 4, !tbaa !11
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %361
  %363 = load i32, ptr %37, align 4, !tbaa !11
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %364
  %366 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %362, ptr noundef nonnull align 4 dereferenceable(16) %365)
  %367 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %48, i32 0, i32 0
  %368 = extractvalue { <2 x float>, <2 x float> } %366, 0
  store <2 x float> %368, ptr %367, align 4
  %369 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %48, i32 0, i32 1
  %370 = extractvalue { <2 x float>, <2 x float> } %366, 1
  store <2 x float> %370, ptr %369, align 4
  %371 = load i32, ptr %38, align 4, !tbaa !11
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %372
  %374 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %48, ptr noundef nonnull align 4 dereferenceable(16) %373)
  %375 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %359, i32 0, i32 0
  %376 = extractvalue { <2 x float>, <2 x float> } %374, 0
  store <2 x float> %376, ptr %375, align 16
  %377 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %359, i32 0, i32 1
  %378 = extractvalue { <2 x float>, <2 x float> } %374, 1
  store <2 x float> %378, ptr %377, align 8
  %379 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %45, i64 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #10
  %380 = load i32, ptr %36, align 4, !tbaa !11
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %381
  %383 = load i32, ptr %37, align 4, !tbaa !11
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %384
  %386 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %382, ptr noundef nonnull align 4 dereferenceable(16) %385)
  %387 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 0
  %388 = extractvalue { <2 x float>, <2 x float> } %386, 0
  store <2 x float> %388, ptr %387, align 4
  %389 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 1
  %390 = extractvalue { <2 x float>, <2 x float> } %386, 1
  store <2 x float> %390, ptr %389, align 4
  %391 = load i32, ptr %38, align 4, !tbaa !11
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %392
  %394 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %49, ptr noundef nonnull align 4 dereferenceable(16) %393)
  %395 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %379, i32 0, i32 0
  %396 = extractvalue { <2 x float>, <2 x float> } %394, 0
  store <2 x float> %396, ptr %395, align 16
  %397 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %379, i32 0, i32 1
  %398 = extractvalue { <2 x float>, <2 x float> } %394, 1
  store <2 x float> %398, ptr %397, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #10
  %399 = load i32, ptr %36, align 4, !tbaa !11
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %400
  %402 = load float, ptr %39, align 4, !tbaa !9
  %403 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %401, float noundef %402)
  %404 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %50, i32 0, i32 0
  %405 = extractvalue { <2 x float>, <2 x float> } %403, 0
  store <2 x float> %405, ptr %404, align 4
  %406 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %50, i32 0, i32 1
  %407 = extractvalue { <2 x float>, <2 x float> } %403, 1
  store <2 x float> %407, ptr %406, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %51, ptr align 4 %50, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #10
  %408 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %50, float noundef 5.000000e-01)
  %409 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %52, i32 0, i32 0
  %410 = extractvalue { <2 x float>, <2 x float> } %408, 0
  store <2 x float> %410, ptr %409, align 4
  %411 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %52, i32 0, i32 1
  %412 = extractvalue { <2 x float>, <2 x float> } %408, 1
  store <2 x float> %412, ptr %411, align 4
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %51, ptr noundef nonnull align 4 dereferenceable(64) %21)
  %413 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %51)
  %414 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 0
  %415 = extractvalue { <2 x float>, <2 x float> } %413, 0
  store <2 x float> %415, ptr %414, align 4
  %416 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 1
  %417 = extractvalue { <2 x float>, <2 x float> } %413, 1
  store <2 x float> %417, ptr %416, align 4
  call void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %52, ptr noundef nonnull align 4 dereferenceable(64) %21)
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #10
  %418 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %52, ptr noundef nonnull align 4 dereferenceable(16) %51)
  %419 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 0
  %420 = extractvalue { <2 x float>, <2 x float> } %418, 0
  store <2 x float> %420, ptr %419, align 4
  %421 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 1
  %422 = extractvalue { <2 x float>, <2 x float> } %418, 1
  store <2 x float> %422, ptr %421, align 4
  %423 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %54, i32 0, i32 3
  %424 = load float, ptr %423, align 4, !tbaa !28
  %425 = fcmp ogt float %424, 0.000000e+00
  br i1 %425, label %426, label %427

426:                                              ; preds = %269
  store i32 7, ptr %34, align 4
  br label %858

427:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #10
  %428 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %50, float noundef 5.000000e-01)
  %429 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %56, 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 %56, 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> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(16) %50)
  %434 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %55, i32 0, i32 0
  %435 = extractvalue { <2 x float>, <2 x float> } %433, 0
  store <2 x float> %435, ptr %434, align 4
  %436 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %55, i32 0, i32 1
  %437 = extractvalue { <2 x float>, <2 x float> } %433, 1
  store <2 x float> %437, ptr %436, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  %438 = 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) %55)
  store float %438, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #10
  %439 = load float, ptr %57, align 4, !tbaa !9
  %440 = 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 %439)
  %441 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %60, i32 0, i32 0
  %442 = extractvalue { <2 x float>, <2 x float> } %440, 0
  store <2 x float> %442, ptr %441, align 4
  %443 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %60, i32 0, i32 1
  %444 = extractvalue { <2 x float>, <2 x float> } %440, 1
  store <2 x float> %444, ptr %443, align 4
  %445 = 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) %60)
  %446 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %59, i32 0, i32 0
  %447 = extractvalue { <2 x float>, <2 x float> } %445, 0
  store <2 x float> %447, ptr %446, align 4
  %448 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %59, i32 0, i32 1
  %449 = extractvalue { <2 x float>, <2 x float> } %445, 1
  store <2 x float> %449, ptr %448, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #10
  %450 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %50, float noundef 5.000000e-01)
  %451 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %61, i32 0, i32 0
  %452 = extractvalue { <2 x float>, <2 x float> } %450, 0
  store <2 x float> %452, ptr %451, align 4
  %453 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %61, i32 0, i32 1
  %454 = extractvalue { <2 x float>, <2 x float> } %450, 1
  store <2 x float> %454, ptr %453, align 4
  %455 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %59, ptr noundef nonnull align 4 dereferenceable(16) %61)
  %456 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %58, i32 0, i32 0
  %457 = extractvalue { <2 x float>, <2 x float> } %455, 0
  store <2 x float> %457, ptr %456, align 4
  %458 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %58, i32 0, i32 1
  %459 = extractvalue { <2 x float>, <2 x float> } %455, 1
  store <2 x float> %459, ptr %458, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #10
  %460 = load i32, ptr %37, align 4, !tbaa !11
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %461
  %463 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %462, ptr noundef nonnull align 4 dereferenceable(16) %58)
  %464 = load float, ptr %39, align 4, !tbaa !9
  %465 = call float @llvm.fmuladd.f32(float %463, float %464, float 5.000000e-01)
  store float %465, ptr %62, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #10
  %466 = load i32, ptr %38, align 4, !tbaa !11
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %467
  %469 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %468, ptr noundef nonnull align 4 dereferenceable(16) %58)
  %470 = load float, ptr %39, align 4, !tbaa !9
  %471 = call float @llvm.fmuladd.f32(float %469, float %470, float 5.000000e-01)
  store float %471, ptr %63, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #10
  %472 = load i32, ptr %37, align 4, !tbaa !11
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %473
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %64, ptr align 16 %474, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #10
  %475 = load i32, ptr %38, align 4, !tbaa !11
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %476
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %65, ptr align 16 %477, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #10
  %478 = load i32, ptr %36, align 4, !tbaa !11
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %479
  %481 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %480, ptr noundef nonnull align 4 dereferenceable(16) %64)
  %482 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %67, i32 0, i32 0
  %483 = extractvalue { <2 x float>, <2 x float> } %481, 0
  store <2 x float> %483, ptr %482, align 4
  %484 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %67, i32 0, i32 1
  %485 = extractvalue { <2 x float>, <2 x float> } %481, 1
  store <2 x float> %485, ptr %484, align 4
  %486 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %67, ptr noundef nonnull align 4 dereferenceable(16) %65)
  %487 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %66, i32 0, i32 0
  %488 = extractvalue { <2 x float>, <2 x float> } %486, 0
  store <2 x float> %488, ptr %487, align 4
  %489 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %66, i32 0, i32 1
  %490 = extractvalue { <2 x float>, <2 x float> } %486, 1
  store <2 x float> %490, ptr %489, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #10
  store i32 0, ptr %68, align 4, !tbaa !11
  br label %491

491:                                              ; preds = %854, %427
  %492 = load i32, ptr %68, align 4, !tbaa !11
  %493 = icmp slt i32 %492, 9
  br i1 %493, label %495, label %494

494:                                              ; preds = %491
  store i32 8, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #10
  br label %857

495:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 16, ptr %69) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %70) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %71) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #10
  %496 = load i32, ptr %68, align 4, !tbaa !11
  %497 = srem i32 %496, 3
  %498 = sitofp i32 %497 to float
  %499 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %40, float noundef %498)
  %500 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %72, i32 0, i32 0
  %501 = extractvalue { <2 x float>, <2 x float> } %499, 0
  store <2 x float> %501, ptr %500, align 4
  %502 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %72, i32 0, i32 1
  %503 = extractvalue { <2 x float>, <2 x float> } %499, 1
  store <2 x float> %503, ptr %502, align 4
  %504 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %72)
  %505 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %71, i32 0, i32 0
  %506 = extractvalue { <2 x float>, <2 x float> } %504, 0
  store <2 x float> %506, ptr %505, align 4
  %507 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %71, i32 0, i32 1
  %508 = extractvalue { <2 x float>, <2 x float> } %504, 1
  store <2 x float> %508, ptr %507, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %73) #10
  %509 = load i32, ptr %68, align 4, !tbaa !11
  %510 = sdiv i32 %509, 3
  %511 = sitofp i32 %510 to float
  %512 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %41, float noundef %511)
  %513 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %73, i32 0, i32 0
  %514 = extractvalue { <2 x float>, <2 x float> } %512, 0
  store <2 x float> %514, ptr %513, align 4
  %515 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %73, i32 0, i32 1
  %516 = extractvalue { <2 x float>, <2 x float> } %512, 1
  store <2 x float> %516, ptr %515, align 4
  %517 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %71, ptr noundef nonnull align 4 dereferenceable(16) %73)
  %518 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %70, i32 0, i32 0
  %519 = extractvalue { <2 x float>, <2 x float> } %517, 0
  store <2 x float> %519, ptr %518, align 4
  %520 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %70, i32 0, i32 1
  %521 = extractvalue { <2 x float>, <2 x float> } %517, 1
  store <2 x float> %521, ptr %520, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #10
  %522 = 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)
  %523 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %74, i32 0, i32 0
  %524 = extractvalue { <2 x float>, <2 x float> } %522, 0
  store <2 x float> %524, ptr %523, align 4
  %525 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %74, i32 0, i32 1
  %526 = extractvalue { <2 x float>, <2 x float> } %522, 1
  store <2 x float> %526, ptr %525, align 4
  %527 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(16) %74)
  %528 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %69, i32 0, i32 0
  %529 = extractvalue { <2 x float>, <2 x float> } %527, 0
  store <2 x float> %529, ptr %528, align 4
  %530 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %69, i32 0, i32 1
  %531 = extractvalue { <2 x float>, <2 x float> } %527, 1
  store <2 x float> %531, ptr %530, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #10
  %532 = load i32, ptr %68, align 4, !tbaa !11
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %533
  %535 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %534, float noundef 2.000000e+00)
  store <2 x float> %535, ptr %75, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #10
  %536 = load i32, ptr %68, align 4, !tbaa !11
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %537
  %539 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %538, float noundef 2.000000e+00)
  store <2 x float> %539, ptr %76, align 4
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #10
  %540 = getelementptr inbounds [4 x %struct.ImVec2], ptr %77, i32 0, i32 0
  %541 = getelementptr inbounds %struct.ImVec2, ptr %540, i64 4
  br label %542

542:                                              ; preds = %542, %495
  %543 = phi ptr [ %540, %495 ], [ %544, %542 ]
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %543)
  %544 = getelementptr inbounds %struct.ImVec2, ptr %543, i64 1
  %545 = icmp eq ptr %544, %541
  br i1 %545, label %546, label %542

546:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 64, ptr %78) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %79) #10
  %547 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 0
  %548 = load float, ptr %547, align 4, !tbaa !23
  %549 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %64, float noundef %548)
  %550 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %79, i32 0, i32 0
  %551 = extractvalue { <2 x float>, <2 x float> } %549, 0
  store <2 x float> %551, ptr %550, align 4
  %552 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %79, i32 0, i32 1
  %553 = extractvalue { <2 x float>, <2 x float> } %549, 1
  store <2 x float> %553, ptr %552, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %80) #10
  %554 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 1
  %555 = load float, ptr %554, align 4, !tbaa !24
  %556 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %65, float noundef %555)
  %557 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %80, i32 0, i32 0
  %558 = extractvalue { <2 x float>, <2 x float> } %556, 0
  store <2 x float> %558, ptr %557, align 4
  %559 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %80, i32 0, i32 1
  %560 = extractvalue { <2 x float>, <2 x float> } %556, 1
  store <2 x float> %560, ptr %559, align 4
  %561 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %79, ptr noundef nonnull align 4 dereferenceable(16) %80)
  %562 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %78, i32 0, i32 0
  %563 = extractvalue { <2 x float>, <2 x float> } %561, 0
  store <2 x float> %563, ptr %562, align 16
  %564 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %78, i32 0, i32 1
  %565 = extractvalue { <2 x float>, <2 x float> } %561, 1
  store <2 x float> %565, ptr %564, align 8
  %566 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %78, i64 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %81) #10
  %567 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 0
  %568 = load float, ptr %567, align 4, !tbaa !23
  %569 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %64, float noundef %568)
  %570 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %81, i32 0, i32 0
  %571 = extractvalue { <2 x float>, <2 x float> } %569, 0
  store <2 x float> %571, ptr %570, align 4
  %572 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %81, i32 0, i32 1
  %573 = extractvalue { <2 x float>, <2 x float> } %569, 1
  store <2 x float> %573, ptr %572, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %82) #10
  %574 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 1
  %575 = load float, ptr %574, align 4, !tbaa !24
  %576 = getelementptr inbounds %struct.ImVec2, ptr %76, i32 0, i32 1
  %577 = load float, ptr %576, align 4, !tbaa !24
  %578 = fadd float %575, %577
  %579 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %65, float noundef %578)
  %580 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %82, i32 0, i32 0
  %581 = extractvalue { <2 x float>, <2 x float> } %579, 0
  store <2 x float> %581, ptr %580, align 4
  %582 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %82, i32 0, i32 1
  %583 = extractvalue { <2 x float>, <2 x float> } %579, 1
  store <2 x float> %583, ptr %582, align 4
  %584 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %81, ptr noundef nonnull align 4 dereferenceable(16) %82)
  %585 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %566, i32 0, i32 0
  %586 = extractvalue { <2 x float>, <2 x float> } %584, 0
  store <2 x float> %586, ptr %585, align 16
  %587 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %566, i32 0, i32 1
  %588 = extractvalue { <2 x float>, <2 x float> } %584, 1
  store <2 x float> %588, ptr %587, align 8
  %589 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %78, i64 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #10
  %590 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 0
  %591 = load float, ptr %590, align 4, !tbaa !23
  %592 = getelementptr inbounds %struct.ImVec2, ptr %76, i32 0, i32 0
  %593 = load float, ptr %592, align 4, !tbaa !23
  %594 = fadd float %591, %593
  %595 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %64, float noundef %594)
  %596 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %83, i32 0, i32 0
  %597 = extractvalue { <2 x float>, <2 x float> } %595, 0
  store <2 x float> %597, ptr %596, align 4
  %598 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %83, i32 0, i32 1
  %599 = extractvalue { <2 x float>, <2 x float> } %595, 1
  store <2 x float> %599, ptr %598, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %84) #10
  %600 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 1
  %601 = load float, ptr %600, align 4, !tbaa !24
  %602 = getelementptr inbounds %struct.ImVec2, ptr %76, i32 0, i32 1
  %603 = load float, ptr %602, align 4, !tbaa !24
  %604 = fadd float %601, %603
  %605 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %65, float noundef %604)
  %606 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %84, i32 0, i32 0
  %607 = extractvalue { <2 x float>, <2 x float> } %605, 0
  store <2 x float> %607, ptr %606, align 4
  %608 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %84, i32 0, i32 1
  %609 = extractvalue { <2 x float>, <2 x float> } %605, 1
  store <2 x float> %609, ptr %608, align 4
  %610 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %83, ptr noundef nonnull align 4 dereferenceable(16) %84)
  %611 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %589, i32 0, i32 0
  %612 = extractvalue { <2 x float>, <2 x float> } %610, 0
  store <2 x float> %612, ptr %611, align 16
  %613 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %589, i32 0, i32 1
  %614 = extractvalue { <2 x float>, <2 x float> } %610, 1
  store <2 x float> %614, ptr %613, align 8
  %615 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %78, i64 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %85) #10
  %616 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 0
  %617 = load float, ptr %616, align 4, !tbaa !23
  %618 = getelementptr inbounds %struct.ImVec2, ptr %76, i32 0, i32 0
  %619 = load float, ptr %618, align 4, !tbaa !23
  %620 = fadd float %617, %619
  %621 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %64, float noundef %620)
  %622 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %85, i32 0, i32 0
  %623 = extractvalue { <2 x float>, <2 x float> } %621, 0
  store <2 x float> %623, ptr %622, align 4
  %624 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %85, i32 0, i32 1
  %625 = extractvalue { <2 x float>, <2 x float> } %621, 1
  store <2 x float> %625, ptr %624, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #10
  %626 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 1
  %627 = load float, ptr %626, align 4, !tbaa !24
  %628 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %65, float noundef %627)
  %629 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %86, i32 0, i32 0
  %630 = extractvalue { <2 x float>, <2 x float> } %628, 0
  store <2 x float> %630, ptr %629, align 4
  %631 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %86, i32 0, i32 1
  %632 = extractvalue { <2 x float>, <2 x float> } %628, 1
  store <2 x float> %632, ptr %631, align 4
  %633 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %85, ptr noundef nonnull align 4 dereferenceable(16) %86)
  %634 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %615, i32 0, i32 0
  %635 = extractvalue { <2 x float>, <2 x float> } %633, 0
  store <2 x float> %635, ptr %634, align 16
  %636 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %615, i32 0, i32 1
  %637 = extractvalue { <2 x float>, <2 x float> } %633, 1
  store <2 x float> %637, ptr %636, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %85) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %80) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %79) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #10
  store i32 0, ptr %87, align 4, !tbaa !11
  br label %638

638:                                              ; preds = %668, %546
  %639 = load i32, ptr %87, align 4, !tbaa !11
  %640 = icmp ult i32 %639, 4
  br i1 %640, label %642, label %641

641:                                              ; preds = %638
  store i32 11, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #10
  br label %671

642:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %89) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %90) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %91) #10
  %643 = load i32, ptr %87, align 4, !tbaa !11
  %644 = zext i32 %643 to i64
  %645 = getelementptr inbounds [4 x %"struct.ImGuizmo::vec_t"], ptr %78, i64 0, i64 %644
  %646 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %645, ptr noundef nonnull align 4 dereferenceable(16) %66)
  %647 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %91, i32 0, i32 0
  %648 = extractvalue { <2 x float>, <2 x float> } %646, 0
  store <2 x float> %648, ptr %647, align 4
  %649 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %91, i32 0, i32 1
  %650 = extractvalue { <2 x float>, <2 x float> } %646, 1
  store <2 x float> %650, ptr %649, align 4
  %651 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %91, float noundef 5.000000e-01)
  %652 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %90, i32 0, i32 0
  %653 = extractvalue { <2 x float>, <2 x float> } %651, 0
  store <2 x float> %653, ptr %652, align 4
  %654 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %90, i32 0, i32 1
  %655 = extractvalue { <2 x float>, <2 x float> } %651, 1
  store <2 x float> %655, ptr %654, align 4
  %656 = load float, ptr %39, align 4, !tbaa !9
  %657 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %90, float noundef %656)
  %658 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %89, i32 0, i32 0
  %659 = extractvalue { <2 x float>, <2 x float> } %657, 0
  store <2 x float> %659, ptr %658, align 4
  %660 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %89, i32 0, i32 1
  %661 = extractvalue { <2 x float>, <2 x float> } %657, 1
  store <2 x float> %661, ptr %660, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %92, ptr align 4 %6, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %93, ptr align 4 %7, i64 8, i1 false), !tbaa.struct !25
  %662 = load <2 x float>, ptr %92, align 4
  %663 = load <2 x float>, ptr %93, align 4
  %664 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %89, ptr noundef nonnull align 4 dereferenceable(64) %29, <2 x float> %662, <2 x float> %663)
  store <2 x float> %664, ptr %88, align 4
  %665 = load i32, ptr %87, align 4, !tbaa !11
  %666 = zext i32 %665 to i64
  %667 = getelementptr inbounds [4 x %struct.ImVec2], ptr %77, i64 0, i64 %666
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %667, ptr align 4 %88, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  br label %668

668:                                              ; preds = %642
  %669 = load i32, ptr %87, align 4, !tbaa !11
  %670 = add i32 %669, 1
  store i32 %670, ptr %87, align 4, !tbaa !11
  br label %638, !llvm.loop !29

671:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 16, ptr %94) #10
  %672 = load i32, ptr %68, align 4, !tbaa !11
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %673
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %94, ptr align 8 %674, i64 8, i1 false), !tbaa.struct !25
  %675 = getelementptr inbounds %struct.ImVec2, ptr %94, i64 1
  %676 = load i32, ptr %68, align 4, !tbaa !11
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %677
  %679 = load i32, ptr %68, align 4, !tbaa !11
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %680
  %682 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %678, ptr noundef nonnull align 4 dereferenceable(8) %681)
  store <2 x float> %682, ptr %675, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %95) #10
  %683 = load float, ptr %62, align 4, !tbaa !9
  %684 = getelementptr inbounds [2 x %struct.ImVec2], ptr %94, i64 0, i64 0
  %685 = getelementptr inbounds %struct.ImVec2, ptr %684, i32 0, i32 0
  %686 = load float, ptr %685, align 16, !tbaa !23
  %687 = fcmp ogt float %683, %686
  br i1 %687, label %688, label %706

688:                                              ; preds = %671
  %689 = load float, ptr %62, align 4, !tbaa !9
  %690 = getelementptr inbounds [2 x %struct.ImVec2], ptr %94, i64 0, i64 1
  %691 = getelementptr inbounds %struct.ImVec2, ptr %690, i32 0, i32 0
  %692 = load float, ptr %691, align 8, !tbaa !23
  %693 = fcmp olt float %689, %692
  br i1 %693, label %694, label %706

694:                                              ; preds = %688
  %695 = load float, ptr %63, align 4, !tbaa !9
  %696 = getelementptr inbounds [2 x %struct.ImVec2], ptr %94, i64 0, i64 0
  %697 = getelementptr inbounds %struct.ImVec2, ptr %696, i32 0, i32 1
  %698 = load float, ptr %697, align 4, !tbaa !24
  %699 = fcmp ogt float %695, %698
  br i1 %699, label %700, label %706

700:                                              ; preds = %694
  %701 = load float, ptr %63, align 4, !tbaa !9
  %702 = getelementptr inbounds [2 x %struct.ImVec2], ptr %94, i64 0, i64 1
  %703 = getelementptr inbounds %struct.ImVec2, ptr %702, i32 0, i32 1
  %704 = load float, ptr %703, align 4, !tbaa !24
  %705 = fcmp olt float %701, %704
  br label %706

706:                                              ; preds = %700, %694, %688, %671
  %707 = phi i1 [ false, %694 ], [ false, %688 ], [ false, %671 ], [ %705, %700 ]
  %708 = zext i1 %707 to i8
  store i8 %708, ptr %95, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #10
  %709 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %69, i32 0, i32 0
  %710 = load float, ptr %709, align 4, !tbaa !32
  %711 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %69, i32 0, i32 1
  %712 = load float, ptr %711, align 4, !tbaa !33
  %713 = fmul float %712, 3.000000e+00
  %714 = call float @llvm.fmuladd.f32(float %710, float 9.000000e+00, float %713)
  %715 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %69, i32 0, i32 2
  %716 = load float, ptr %715, align 4, !tbaa !34
  %717 = fadd float %714, %716
  %718 = fptosi float %717 to i32
  store i32 %718, ptr %96, align 4, !tbaa !11
  %719 = load i32, ptr %96, align 4, !tbaa !11
  %720 = icmp slt i32 %719, 27
  br i1 %720, label %721, label %722

721:                                              ; preds = %706
  br label %724

722:                                              ; preds = %706
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.3, i32 noundef 2486, ptr noundef @__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j) #13
  unreachable

723:                                              ; No predecessors!
  br label %724

724:                                              ; preds = %723, %721
  %725 = load i8, ptr %95, align 1, !tbaa !31, !range !35, !noundef !36
  %726 = trunc i8 %725 to i1
  br i1 %726, label %727, label %731

727:                                              ; preds = %724
  %728 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %729 = trunc i8 %728 to i1
  %730 = xor i1 %729, true
  br label %731

731:                                              ; preds = %727, %724
  %732 = phi i1 [ false, %724 ], [ %730, %727 ]
  %733 = zext i1 %732 to i32
  %734 = load i32, ptr %96, align 4, !tbaa !11
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds [27 x i8], ptr %32, i64 0, i64 %735
  %737 = load i8, ptr %736, align 1, !tbaa !31, !range !35, !noundef !36
  %738 = trunc i8 %737 to i1
  %739 = zext i1 %738 to i32
  %740 = or i32 %739, %733
  %741 = icmp ne i32 %740, 0
  %742 = zext i1 %741 to i8
  store i8 %742, ptr %736, align 1, !tbaa !31
  %743 = load i32, ptr %33, align 4, !tbaa !11
  %744 = icmp ne i32 %743, 0
  br i1 %744, label %745, label %853

745:                                              ; preds = %731
  %746 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  %747 = getelementptr inbounds [4 x %struct.ImVec2], ptr %77, i64 0, i64 0
  %748 = load i32, ptr %36, align 4, !tbaa !11
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds [3 x i32], ptr @_ZN8ImGuizmoL14directionColorE, i64 0, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !11
  %752 = or i32 %751, -2139062144
  %753 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !31, !range !35, !noundef !36
  %754 = trunc i8 %753 to i1
  %755 = zext i1 %754 to i64
  %756 = select i1 %754, i32 526344, i32 0
  %757 = or i32 %752, %756
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %746, ptr noundef %747, i32 noundef 4, i32 noundef %757)
  %758 = load i32, ptr %96, align 4, !tbaa !11
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds [27 x i8], ptr %32, i64 0, i64 %759
  %761 = load i8, ptr %760, align 1, !tbaa !31, !range !35, !noundef !36
  %762 = trunc i8 %761 to i1
  br i1 %762, label %763, label %852

763:                                              ; preds = %745
  %764 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  %765 = getelementptr inbounds [4 x %struct.ImVec2], ptr %77, i64 0, i64 0
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %764, ptr noundef %765, i32 noundef 4, i32 noundef -2141150992)
  %766 = load ptr, ptr %14, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.ImGuiIO, ptr %766, i32 0, i32 42
  %768 = getelementptr inbounds [5 x i8], ptr %767, i64 0, i64 0
  %769 = load i8, ptr %768, align 8, !tbaa !31, !range !35, !noundef !36
  %770 = trunc i8 %769 to i1
  br i1 %770, label %841, label %771

771:                                              ; preds = %763
  %772 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %773 = trunc i8 %772 to i1
  br i1 %773, label %841, label %774

774:                                              ; preds = %771
  %775 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31, !range !35, !noundef !36
  %776 = trunc i8 %775 to i1
  br i1 %776, label %777, label %841

777:                                              ; preds = %774
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #10
  %778 = load i32, ptr %96, align 4, !tbaa !11
  %779 = sdiv i32 %778, 9
  store i32 %779, ptr %97, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #10
  %780 = load i32, ptr %96, align 4, !tbaa !11
  %781 = load i32, ptr %97, align 4, !tbaa !11
  %782 = mul nsw i32 %781, 9
  %783 = sub nsw i32 %780, %782
  %784 = sdiv i32 %783, 3
  store i32 %784, ptr %98, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #10
  %785 = load i32, ptr %96, align 4, !tbaa !11
  %786 = srem i32 %785, 3
  store i32 %786, ptr %99, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %100) #10
  %787 = load i32, ptr %97, align 4, !tbaa !11
  %788 = sitofp i32 %787 to float
  %789 = fsub float 1.000000e+00, %788
  %790 = load i32, ptr %98, align 4, !tbaa !11
  %791 = sitofp i32 %790 to float
  %792 = fsub float 1.000000e+00, %791
  %793 = load i32, ptr %99, align 4, !tbaa !11
  %794 = sitofp i32 %793 to float
  %795 = fsub float 1.000000e+00, %794
  %796 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %789, float noundef %792, float noundef %795, float noundef 0.000000e+00)
  %797 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %100, i32 0, i32 0
  %798 = extractvalue { <2 x float>, <2 x float> } %796, 0
  store <2 x float> %798, ptr %797, align 4
  %799 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %100, i32 0, i32 1
  %800 = extractvalue { <2 x float>, <2 x float> } %796, 1
  store <2 x float> %800, ptr %799, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr align 4 %100, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 16, ptr %100) #10
  %801 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir)
  %802 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %101, i32 0, i32 0
  %803 = extractvalue { <2 x float>, <2 x float> } %801, 0
  store <2 x float> %803, ptr %802, align 4
  %804 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %101, i32 0, i32 1
  %805 = extractvalue { <2 x float>, <2 x float> } %801, 1
  store <2 x float> %805, ptr %804, align 4
  %806 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %11)
  %807 = call float @llvm.fabs.f32(float %806)
  %808 = fcmp ogt float %807, 0x3FEFAE1480000000
  br i1 %808, label %809, label %839

809:                                              ; preds = %777
  call void @llvm.lifetime.start.p0(i64 16, ptr %102) #10
  %810 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %811 = getelementptr inbounds %struct.anon, ptr %810, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %102, ptr align 4 %811, i64 16, i1 false), !tbaa.struct !27
  %812 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %102, i32 0, i32 0
  %813 = load float, ptr %812, align 4, !tbaa !32
  %814 = call float @llvm.fabs.f32(float %813)
  %815 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %102, i32 0, i32 2
  %816 = load float, ptr %815, align 4, !tbaa !34
  %817 = call float @llvm.fabs.f32(float %816)
  %818 = fcmp ogt float %814, %817
  br i1 %818, label %819, label %821

819:                                              ; preds = %809
  %820 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %102, i32 0, i32 2
  store float 0.000000e+00, ptr %820, align 4, !tbaa !34
  br label %823

821:                                              ; preds = %809
  %822 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %102, i32 0, i32 0
  store float 0.000000e+00, ptr %822, align 4, !tbaa !32
  br label %823

823:                                              ; preds = %821, %819
  %824 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %102)
  %825 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %103, i32 0, i32 0
  %826 = extractvalue { <2 x float>, <2 x float> } %824, 0
  store <2 x float> %826, ptr %825, align 4
  %827 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %103, i32 0, i32 1
  %828 = extractvalue { <2 x float>, <2 x float> } %824, 1
  store <2 x float> %828, ptr %827, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %104) #10
  %829 = 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) %102)
  %830 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %104, i32 0, i32 0
  %831 = extractvalue { <2 x float>, <2 x float> } %829, 0
  store <2 x float> %831, ptr %830, align 4
  %832 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %104, i32 0, i32 1
  %833 = extractvalue { <2 x float>, <2 x float> } %829, 1
  store <2 x float> %833, ptr %832, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, ptr align 4 %104, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 16, ptr %104) #10
  %834 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp)
  %835 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %105, i32 0, i32 0
  %836 = extractvalue { <2 x float>, <2 x float> } %834, 0
  store <2 x float> %836, ptr %835, align 4
  %837 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %105, i32 0, i32 1
  %838 = extractvalue { <2 x float>, <2 x float> } %834, 1
  store <2 x float> %838, ptr %837, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %102) #10
  br label %840

839:                                              ; preds = %777
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, ptr align 4 %11, i64 16, i1 false), !tbaa.struct !27
  br label %840

840:                                              ; preds = %839, %823
  store i32 40, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #10
  br label %841

841:                                              ; preds = %840, %774, %771, %763
  %842 = load ptr, ptr %14, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.ImGuiIO, ptr %842, i32 0, i32 42
  %844 = getelementptr inbounds [5 x i8], ptr %843, i64 0, i64 0
  %845 = load i8, ptr %844, align 8, !tbaa !31, !range !35, !noundef !36
  %846 = trunc i8 %845 to i1
  br i1 %846, label %847, label %851

847:                                              ; preds = %841
  %848 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %849 = trunc i8 %848 to i1
  br i1 %849, label %851, label %850

850:                                              ; preds = %847
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31
  br label %851

851:                                              ; preds = %850, %847, %841
  br label %852

852:                                              ; preds = %851, %745
  br label %853

853:                                              ; preds = %852, %731
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #10
  br label %854

854:                                              ; preds = %853
  %855 = load i32, ptr %68, align 4, !tbaa !11
  %856 = add nsw i32 %855, 1
  store i32 %856, ptr %68, align 4, !tbaa !11
  br label %491, !llvm.loop !37

857:                                              ; preds = %494
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #10
  store i32 0, ptr %34, align 4
  br label %858

858:                                              ; preds = %857, %426
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  %859 = load i32, ptr %34, align 4
  switch i32 %859, label %1028 [
    i32 0, label %860
    i32 7, label %861
  ]

860:                                              ; preds = %858
  br label %861

861:                                              ; preds = %860, %858
  %862 = load i32, ptr %35, align 4, !tbaa !11
  %863 = add nsw i32 %862, 1
  store i32 %863, ptr %35, align 4, !tbaa !11
  br label %265, !llvm.loop !38

864:                                              ; preds = %268
  br label %865

865:                                              ; preds = %864
  %866 = load i32, ptr %33, align 4, !tbaa !11
  %867 = add nsw i32 %866, 1
  store i32 %867, ptr %33, align 4, !tbaa !11
  br label %252, !llvm.loop !39

868:                                              ; preds = %255
  %869 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  %870 = icmp ne i32 %869, 0
  br i1 %870, label %871, label %903

871:                                              ; preds = %868
  %872 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  %873 = add nsw i32 %872, -1
  store i32 %873, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %106) #10
  %874 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %875 = getelementptr inbounds %struct.anon, ptr %874, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %106, ptr align 4 %875, i64 16, i1 false), !tbaa.struct !27
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %106, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, float noundef 0x3FC99999A0000000)
  %876 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %106)
  %877 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %107, i32 0, i32 0
  %878 = extractvalue { <2 x float>, <2 x float> } %876, 0
  store <2 x float> %878, ptr %877, align 4
  %879 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %107, i32 0, i32 1
  %880 = extractvalue { <2 x float>, <2 x float> } %876, 1
  store <2 x float> %880, ptr %879, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %108) #10
  %881 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %882 = getelementptr inbounds %struct.anon, ptr %881, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %108, ptr align 4 %882, i64 16, i1 false), !tbaa.struct !27
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %108, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, float noundef 0x3FD3333340000000)
  %883 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %108)
  %884 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %109, i32 0, i32 0
  %885 = extractvalue { <2 x float>, <2 x float> } %883, 0
  store <2 x float> %885, ptr %884, align 4
  %886 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %109, i32 0, i32 1
  %887 = extractvalue { <2 x float>, <2 x float> } %883, 1
  store <2 x float> %887, ptr %886, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %108, ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %110) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %111) #10
  %888 = load float, ptr %9, align 4, !tbaa !9
  %889 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %106, float noundef %888)
  %890 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %111, i32 0, i32 0
  %891 = extractvalue { <2 x float>, <2 x float> } %889, 0
  store <2 x float> %891, ptr %890, align 4
  %892 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %111, i32 0, i32 1
  %893 = extractvalue { <2 x float>, <2 x float> } %889, 1
  store <2 x float> %893, ptr %892, align 4
  %894 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %111)
  %895 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %110, i32 0, i32 0
  %896 = extractvalue { <2 x float>, <2 x float> } %894, 0
  store <2 x float> %896, ptr %895, align 4
  %897 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %110, i32 0, i32 1
  %898 = extractvalue { <2 x float>, <2 x float> } %894, 1
  store <2 x float> %898, ptr %897, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %111) #10
  %899 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %110, i32 0, i32 0
  %900 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %17, i32 0, i32 0
  %901 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %108, i32 0, i32 0
  %902 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %899, ptr noundef %900, ptr noundef %901, ptr noundef %902)
  call void @llvm.lifetime.end.p0(i64 16, ptr %110) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %108) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %106) #10
  br label %903

903:                                              ; preds = %871, %868
  call void @llvm.lifetime.start.p0(i64 16, ptr %112) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #10
  %904 = 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> %904, ptr %113, align 4
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %112, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %113)
  %905 = load ptr, ptr %14, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.ImGuiIO, ptr %905, i32 0, i32 41
  %907 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %112, ptr noundef nonnull align 4 dereferenceable(8) %906)
  %908 = zext i1 %907 to i8
  store i8 %908, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %112) #10
  %909 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %910 = trunc i8 %909 to i1
  br i1 %910, label %935, label %911

911:                                              ; preds = %903
  %912 = load ptr, ptr %14, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.ImGuiIO, ptr %912, i32 0, i32 42
  %914 = getelementptr inbounds [5 x i8], ptr %913, i64 0, i64 0
  %915 = load i8, ptr %914, align 8, !tbaa !31, !range !35, !noundef !36
  %916 = trunc i8 %915 to i1
  br i1 %916, label %917, label %935

917:                                              ; preds = %911
  %918 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !31, !range !35, !noundef !36
  %919 = trunc i8 %918 to i1
  br i1 %919, label %920, label %935

920:                                              ; preds = %917
  %921 = load ptr, ptr %14, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.ImGuiIO, ptr %921, i32 0, i32 65
  %923 = getelementptr inbounds %struct.ImVec2, ptr %922, i32 0, i32 0
  %924 = load float, ptr %923, align 4, !tbaa !40
  %925 = call float @llvm.fabs.f32(float %924)
  %926 = fcmp ogt float %925, 0.000000e+00
  br i1 %926, label %934, label %927

927:                                              ; preds = %920
  %928 = load ptr, ptr %14, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.ImGuiIO, ptr %928, i32 0, i32 65
  %930 = getelementptr inbounds %struct.ImVec2, ptr %929, i32 0, i32 1
  %931 = load float, ptr %930, align 4, !tbaa !44
  %932 = call float @llvm.fabs.f32(float %931)
  %933 = fcmp ogt float %932, 0.000000e+00
  br i1 %933, label %934, label %935

934:                                              ; preds = %927, %920
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31
  br label %946

935:                                              ; preds = %927, %917, %911, %903
  %936 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %937 = trunc i8 %936 to i1
  br i1 %937, label %938, label %945

938:                                              ; preds = %935
  %939 = load ptr, ptr %14, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.ImGuiIO, ptr %939, i32 0, i32 42
  %941 = getelementptr inbounds [5 x i8], ptr %940, i64 0, i64 0
  %942 = load i8, ptr %941, align 8, !tbaa !31, !range !35, !noundef !36
  %943 = trunc i8 %942 to i1
  br i1 %943, label %945, label %944

944:                                              ; preds = %938
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31
  br label %945

945:                                              ; preds = %944, %938, %935
  br label %946

946:                                              ; preds = %945, %934
  %947 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %948 = trunc i8 %947 to i1
  br i1 %948, label %949, label %1016

949:                                              ; preds = %946
  call void @llvm.lifetime.start.p0(i64 64, ptr %114) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %114)
  call void @llvm.lifetime.start.p0(i64 64, ptr %115) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %115)
  call void @llvm.lifetime.start.p0(i64 64, ptr %116) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %116)
  %950 = load ptr, ptr %14, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.ImGuiIO, ptr %950, i32 0, i32 65
  %952 = getelementptr inbounds %struct.ImVec2, ptr %951, i32 0, i32 0
  %953 = load float, ptr %952, align 4, !tbaa !40
  %954 = fneg float %953
  %955 = fmul float %954, 0x3F847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %114, ptr noundef nonnull align 4 dereferenceable(16) %11, float noundef %955)
  %956 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %957 = getelementptr inbounds %struct.anon, ptr %956, i32 0, i32 0
  %958 = load ptr, ptr %14, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.ImGuiIO, ptr %958, i32 0, i32 65
  %960 = getelementptr inbounds %struct.ImVec2, ptr %959, i32 0, i32 1
  %961 = load float, ptr %960, align 4, !tbaa !44
  %962 = fneg float %961
  %963 = fmul float %962, 0x3F847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %115, ptr noundef nonnull align 4 dereferenceable(16) %957, float noundef %963)
  call void @llvm.lifetime.start.p0(i64 64, ptr %117) #10
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind writable sret(%"struct.ImGuizmo::matrix_t") align 4 %117, ptr noundef nonnull align 4 dereferenceable(64) %114, ptr noundef nonnull align 4 dereferenceable(64) %115)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %116, ptr align 4 %117, i64 64, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 64, ptr %117) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %118) #10
  %964 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %965 = getelementptr inbounds %struct.anon, ptr %964, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %118, ptr align 4 %965, i64 16, i1 false), !tbaa.struct !27
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %118, ptr noundef nonnull align 4 dereferenceable(64) %116)
  %966 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %118)
  %967 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %119, i32 0, i32 0
  %968 = extractvalue { <2 x float>, <2 x float> } %966, 0
  store <2 x float> %968, ptr %967, align 4
  %969 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %119, i32 0, i32 1
  %970 = extractvalue { <2 x float>, <2 x float> } %966, 1
  store <2 x float> %970, ptr %969, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %120) #10
  %971 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %972 = getelementptr inbounds %struct.anon, ptr %971, i32 0, i32 0
  %973 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %972, ptr noundef nonnull align 4 dereferenceable(16) %11)
  %974 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %120, i32 0, i32 0
  %975 = extractvalue { <2 x float>, <2 x float> } %973, 0
  store <2 x float> %975, ptr %974, align 4
  %976 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %120, i32 0, i32 1
  %977 = extractvalue { <2 x float>, <2 x float> } %973, 1
  store <2 x float> %977, ptr %976, align 4
  %978 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %120, i32 0, i32 1
  store float 0.000000e+00, ptr %978, align 4, !tbaa !33
  %979 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %120)
  %980 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %121, i32 0, i32 0
  %981 = extractvalue { <2 x float>, <2 x float> } %979, 0
  store <2 x float> %981, ptr %980, align 4
  %982 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %121, i32 0, i32 1
  %983 = extractvalue { <2 x float>, <2 x float> } %979, 1
  store <2 x float> %983, ptr %982, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #10
  %984 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %120, ptr noundef nonnull align 4 dereferenceable(16) %118)
  store float %984, ptr %122, align 4, !tbaa !9
  %985 = load float, ptr %122, align 4, !tbaa !9
  %986 = fcmp olt float %985, 0.000000e+00
  br i1 %986, label %987, label %1000

987:                                              ; preds = %949
  call void @llvm.lifetime.start.p0(i64 16, ptr %123) #10
  %988 = load float, ptr %122, align 4, !tbaa !9
  %989 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %120, float noundef %988)
  %990 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %123, i32 0, i32 0
  %991 = extractvalue { <2 x float>, <2 x float> } %989, 0
  store <2 x float> %991, ptr %990, align 4
  %992 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %123, i32 0, i32 1
  %993 = extractvalue { <2 x float>, <2 x float> } %989, 1
  store <2 x float> %993, ptr %992, align 4
  %994 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %118, ptr noundef nonnull align 4 dereferenceable(16) %123)
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #10
  %995 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %118)
  %996 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %124, i32 0, i32 0
  %997 = extractvalue { <2 x float>, <2 x float> } %995, 0
  store <2 x float> %997, ptr %996, align 4
  %998 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %124, i32 0, i32 1
  %999 = extractvalue { <2 x float>, <2 x float> } %995, 1
  store <2 x float> %999, ptr %998, align 4
  br label %1000

1000:                                             ; preds = %987, %949
  call void @llvm.lifetime.start.p0(i64 16, ptr %125) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %126) #10
  %1001 = load float, ptr %9, align 4, !tbaa !9
  %1002 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %118, float noundef %1001)
  %1003 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %126, i32 0, i32 0
  %1004 = extractvalue { <2 x float>, <2 x float> } %1002, 0
  store <2 x float> %1004, ptr %1003, align 4
  %1005 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %126, i32 0, i32 1
  %1006 = extractvalue { <2 x float>, <2 x float> } %1002, 1
  store <2 x float> %1006, ptr %1005, align 4
  %1007 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %126)
  %1008 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %125, i32 0, i32 0
  %1009 = extractvalue { <2 x float>, <2 x float> } %1007, 0
  store <2 x float> %1009, ptr %1008, align 4
  %1010 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %125, i32 0, i32 1
  %1011 = extractvalue { <2 x float>, <2 x float> } %1007, 1
  store <2 x float> %1011, ptr %1010, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %126) #10
  %1012 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %125, i32 0, i32 0
  %1013 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %17, i32 0, i32 0
  %1014 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %11, i32 0, i32 0
  %1015 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %1012, ptr noundef %1013, ptr noundef %1014, ptr noundef %1015)
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %118) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %116) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %115) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %114) #10
  br label %1016

1016:                                             ; preds = %1000, %946
  %1017 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %12, i32 0, i32 0
  %1018 = getelementptr inbounds [16 x float], ptr %1017, i64 0, i64 0
  %1019 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %13, i32 0, i32 0
  %1020 = getelementptr inbounds [16 x float], ptr %1019, i64 0, i64 0
  %1021 = 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 %1018, ptr noundef %1020, ptr noundef getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 6), i32 noundef %1021)
  call void @llvm.lifetime.end.p0(i64 27, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #10
  ret void

1022:                                             ; preds = %260, %256
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #10
  br label %1023

1023:                                             ; preds = %1022
  %1024 = load ptr, ptr %30, align 8
  %1025 = load i32, ptr %31, align 4
  %1026 = insertvalue { ptr, i32 } poison, ptr %1024, 0
  %1027 = insertvalue { ptr, i32 } %1026, i32 %1025, 1
  resume { ptr, i32 } %1027

1028:                                             ; preds = %858
  unreachable
}

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: nounwind
declare i32 @__cxa_guard_acquire(ptr) #10

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @__cxa_guard_abort(ptr) #10

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

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

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

; 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 = { nounwind }
attributes #11 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { 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 #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, !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}
!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 = !{!"branch_weights", i32 1, i32 1048575}
!27 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9}
!28 = !{!19, !10, i64 12}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!21, !21, i64 0}
!32 = !{!19, !10, i64 0}
!33 = !{!19, !10, i64 4}
!34 = !{!19, !10, i64 8}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !30}
!40 = !{!41, !10, i64 940}
!41 = !{!"_ZTS7ImGuiIO", !12, i64 0, !12, i64 4, !20, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !7, i64 52, !10, i64 140, !10, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !21, i64 172, !6, i64 176, !20, i64 184, !21, i64 192, !21, i64 193, !21, i64 194, !21, i64 195, !21, i64 196, !21, i64 197, !21, i64 198, !21, i64 199, !21, i64 200, !21, i64 201, !21, i64 202, !21, i64 203, !21, i64 204, !10, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !20, i64 280, !7, i64 288, !10, i64 296, !10, i64 300, !12, i64 304, !21, i64 308, !21, i64 309, !21, i64 310, !21, i64 311, !7, i64 312, !7, i64 824, !21, i64 908, !21, i64 909, !21, i64 910, !21, i64 911, !21, i64 912, !21, i64 913, !21, i64 914, !10, i64 916, !12, i64 920, !12, i64 924, !12, i64 928, !12, i64 932, !12, i64 936, !20, i64 940, !12, i64 948, !20, i64 952, !7, i64 960, !7, i64 1000, !7, i64 1040, !7, i64 1045, !7, i64 1050, !7, i64 1055, !7, i64 1060, !7, i64 1068, !7, i64 1088, !7, i64 1108, !7, i64 1148, !7, i64 1168, !7, i64 3216, !7, i64 5264, !7, i64 5348, !10, i64 5432, !42, i64 5436, !43, i64 5440}
!42 = !{!"short", !7, i64 0}
!43 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!44 = !{!41, !10, i64 944}
!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, %"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 }
%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 global [9 x %struct.ImVec2], align 16
@_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition = external hidden global i64, align 8
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize = external hidden global [9 x %struct.ImVec2], align 16
@_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [91 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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare ptr @llvm.invariant.start.p0(i64 immarg, ptr nocapture) #1

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

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

; Function Attrs: mustprogress 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 personality ptr @__gxx_personality_v0 {
  %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 8
  %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 4
  %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 8
  %38 = alloca %"struct.ImGuizmo::vec_t", align 8
  %39 = alloca %"struct.ImGuizmo::vec_t", align 8
  %40 = alloca %"struct.ImGuizmo::vec_t", align 8
  %41 = alloca %"struct.ImGuizmo::vec_t", align 4
  %42 = alloca %"struct.ImGuizmo::vec_t", align 4
  %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 %"struct.ImGuizmo::vec_t", align 8
  %47 = alloca %"struct.ImGuizmo::vec_t", align 8
  %48 = alloca %"struct.ImGuizmo::vec_t", align 8
  %49 = alloca %"struct.ImGuizmo::vec_t", align 8
  %50 = alloca [4 x %struct.ImVec2], align 16
  %51 = alloca [4 x %"struct.ImGuizmo::vec_t"], align 16
  %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 8
  %60 = alloca %"struct.ImGuizmo::vec_t", align 8
  %61 = alloca %"struct.ImGuizmo::vec_t", align 8
  %62 = alloca %"struct.ImGuizmo::vec_t", align 8
  %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 8
  %67 = alloca %"struct.ImGuizmo::vec_t", align 8
  %68 = alloca %struct.ImRect, align 4
  %69 = alloca %struct.ImVec2, align 8
  %70 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %71 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %72 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %73 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %74 = alloca %"struct.ImGuizmo::vec_t", align 4
  %75 = alloca %"struct.ImGuizmo::vec_t", align 8
  %76 = alloca %"struct.ImGuizmo::vec_t", align 8
  %77 = alloca %"struct.ImGuizmo::vec_t", align 8
  %78 = 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) #12
  %79 = 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)
  %80 = extractvalue { <2 x float>, <2 x float> } %79, 0
  store <2 x float> %80, ptr %8, align 8
  %81 = getelementptr inbounds i8, ptr %8, i64 8
  %82 = extractvalue { <2 x float>, <2 x float> } %79, 1
  store <2 x float> %82, ptr %81, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %9)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #12
  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
  %83 = call noundef nonnull align 8 dereferenceable(5456) ptr @_ZN5ImGui5GetIOEv()
  %84 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #12
  %85 = 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> %85, ptr %11, align 8
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %84, 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) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %12)
  %86 = 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) #12
  %87 = getelementptr inbounds i8, ptr %12, i64 48
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  %88 = getelementptr inbounds i8, ptr %12, i64 32
  %89 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %88, float noundef %1)
  %90 = extractvalue { <2 x float>, <2 x float> } %89, 0
  store <2 x float> %90, ptr %14, align 8
  %91 = getelementptr inbounds i8, ptr %14, i64 8
  %92 = extractvalue { <2 x float>, <2 x float> } %89, 1
  store <2 x float> %92, ptr %91, align 8
  %93 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %87, ptr noundef nonnull align 4 dereferenceable(16) %14)
  %94 = extractvalue { <2 x float>, <2 x float> } %93, 0
  store <2 x float> %94, ptr %13, align 8
  %95 = getelementptr inbounds i8, ptr %13, i64 8
  %96 = extractvalue { <2 x float>, <2 x float> } %93, 1
  store <2 x float> %96, ptr %95, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %15)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %16) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %16)
  %97 = load float, ptr %7, align 8, !tbaa !20
  %98 = getelementptr inbounds i8, ptr %7, i64 4
  %99 = load float, ptr %98, align 4, !tbaa !21
  %100 = fdiv float %97, %99
  call void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef 0x4035369420000000, float noundef %100, float noundef 0x3F847AE140000000, float noundef 1.000000e+03, ptr noundef nonnull %15)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  %101 = load float, ptr %88, align 4, !tbaa !6
  %102 = getelementptr inbounds i8, ptr %12, i64 36
  %103 = load float, ptr %102, align 4, !tbaa !6
  %104 = getelementptr inbounds i8, ptr %12, i64 40
  %105 = load float, ptr %104, align 4, !tbaa !6
  %106 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %101, float noundef %103, float noundef %105, float noundef 0.000000e+00)
  %107 = extractvalue { <2 x float>, <2 x float> } %106, 0
  store <2 x float> %107, ptr %17, align 8
  %108 = getelementptr inbounds i8, ptr %17, i64 8
  %109 = extractvalue { <2 x float>, <2 x float> } %106, 1
  store <2 x float> %109, ptr %108, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #12
  %110 = getelementptr inbounds i8, ptr %12, i64 16
  %111 = load float, ptr %110, align 4, !tbaa !6
  %112 = getelementptr inbounds i8, ptr %12, i64 20
  %113 = load float, ptr %112, align 4, !tbaa !6
  %114 = getelementptr inbounds i8, ptr %12, i64 24
  %115 = load float, ptr %114, align 4, !tbaa !6
  %116 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %111, float noundef %113, float noundef %115, float noundef 0.000000e+00)
  %117 = extractvalue { <2 x float>, <2 x float> } %116, 0
  store <2 x float> %117, ptr %18, align 8
  %118 = getelementptr inbounds i8, ptr %18, 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 %19) #12
  %120 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 3.000000e+00)
  %121 = extractvalue { <2 x float>, <2 x float> } %120, 0
  store <2 x float> %121, ptr %19, align 8
  %122 = getelementptr inbounds i8, ptr %19, i64 8
  %123 = extractvalue { <2 x float>, <2 x float> } %120, 1
  store <2 x float> %123, ptr %122, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #12
  %124 = 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)
  %125 = extractvalue { <2 x float>, <2 x float> } %124, 0
  store <2 x float> %125, ptr %20, align 8
  %126 = getelementptr inbounds i8, ptr %20, i64 8
  %127 = extractvalue { <2 x float>, <2 x float> } %124, 1
  store <2 x float> %127, ptr %126, 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.0118.0.copyload = load <2 x float>, ptr %6, align 8
  %.sroa.0117.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.0118.0.copyload, <2 x float> %.sroa.0117.0.copyload)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #12
  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)
  %128 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition acquire, align 8
  %129 = icmp eq i8 %128, 0
  br i1 %129, label %130, label %134, !prof !22

130:                                              ; preds = %5
  %131 = call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #12
  %.not = icmp eq i32 %131, 0
  br i1 %.not, label %134, label %132

132:                                              ; preds = %130
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, float noundef 7.500000e-01, float noundef 7.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 8), float noundef 2.500000e-01, float noundef 7.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 16), float noundef 0.000000e+00, float noundef 7.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 24), float noundef 7.500000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 32), float noundef 2.500000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 40), float noundef 0.000000e+00, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 48), float noundef 7.500000e-01, float noundef 0.000000e+00)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 56), float noundef 2.500000e-01, float noundef 0.000000e+00)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 64), float noundef 0.000000e+00, float noundef 0.000000e+00)
  %133 = call ptr @llvm.invariant.start.p0(i64 72, ptr nonnull @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition)
  call void @__cxa_guard_release(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #12
  br label %134

134:                                              ; preds = %132, %130, %5
  %135 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize acquire, align 8
  %136 = icmp eq i8 %135, 0
  br i1 %136, label %137, label %141, !prof !22

137:                                              ; preds = %134
  %138 = call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #12
  %.not144 = icmp eq i32 %138, 0
  br i1 %.not144, label %141, label %139

139:                                              ; preds = %137
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, float noundef 2.500000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 8), float noundef 5.000000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 16), float noundef 2.500000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 24), float noundef 2.500000e-01, float noundef 5.000000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 32), float noundef 5.000000e-01, float noundef 5.000000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 40), float noundef 2.500000e-01, float noundef 5.000000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 48), float noundef 2.500000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 56), float noundef 5.000000e-01, float noundef 2.500000e-01)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 64), float noundef 2.500000e-01, float noundef 2.500000e-01)
  %140 = call ptr @llvm.invariant.start.p0(i64 72, ptr nonnull @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize)
  call void @__cxa_guard_release(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #12
  br label %141

141:                                              ; preds = %139, %137, %134
  call void @llvm.lifetime.start.p0(i64 27, ptr nonnull %22) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(27) %22, i8 0, i64 27, i1 false)
  %142 = getelementptr inbounds i8, ptr %23, i64 8
  %143 = getelementptr inbounds i8, ptr %24, i64 8
  %144 = getelementptr inbounds i8, ptr %27, i64 8
  %145 = getelementptr inbounds i8, ptr %26, i64 8
  %146 = getelementptr inbounds i8, ptr %25, i64 8
  %147 = getelementptr inbounds i8, ptr %28, i64 8
  %148 = getelementptr inbounds i8, ptr %29, i64 8
  %149 = getelementptr inbounds i8, ptr %30, i64 8
  %150 = getelementptr inbounds i8, ptr %31, i64 8
  %151 = getelementptr inbounds i8, ptr %32, i64 8
  %152 = getelementptr inbounds i8, ptr %34, i64 8
  %153 = getelementptr inbounds i8, ptr %36, i64 8
  %154 = getelementptr inbounds i8, ptr %35, i64 8
  %155 = getelementptr inbounds i8, ptr %39, i64 8
  %156 = getelementptr inbounds i8, ptr %38, i64 8
  %157 = getelementptr inbounds i8, ptr %40, i64 8
  %158 = getelementptr inbounds i8, ptr %37, i64 8
  %159 = getelementptr inbounds i8, ptr %44, i64 8
  %160 = getelementptr inbounds i8, ptr %43, i64 8
  %161 = getelementptr inbounds i8, ptr %47, i64 8
  %162 = getelementptr inbounds i8, ptr %46, i64 8
  %163 = getelementptr inbounds i8, ptr %48, i64 8
  %164 = getelementptr inbounds i8, ptr %45, i64 8
  %165 = getelementptr inbounds i8, ptr %49, i64 8
  %166 = getelementptr inbounds i8, ptr %52, i64 8
  %167 = getelementptr inbounds i8, ptr %53, i64 8
  %168 = getelementptr inbounds i8, ptr %51, i64 8
  %169 = getelementptr inbounds i8, ptr %51, i64 16
  %170 = getelementptr inbounds i8, ptr %54, i64 8
  %171 = getelementptr inbounds i8, ptr %55, i64 8
  %172 = getelementptr inbounds i8, ptr %51, i64 24
  %173 = getelementptr inbounds i8, ptr %51, i64 32
  %174 = getelementptr inbounds i8, ptr %56, i64 8
  %175 = getelementptr inbounds i8, ptr %57, i64 8
  %176 = getelementptr inbounds i8, ptr %51, i64 40
  %177 = getelementptr inbounds i8, ptr %51, i64 48
  %178 = getelementptr inbounds i8, ptr %58, i64 8
  %179 = getelementptr inbounds i8, ptr %59, i64 8
  %180 = getelementptr inbounds i8, ptr %51, i64 56
  %181 = getelementptr inbounds i8, ptr %62, i64 8
  %182 = getelementptr inbounds i8, ptr %61, i64 8
  %183 = getelementptr inbounds i8, ptr %60, i64 8
  %184 = getelementptr inbounds i8, ptr %83, i64 288
  %185 = getelementptr inbounds i8, ptr %63, i64 8
  %.ptr.1 = getelementptr inbounds i8, ptr %50, i64 8
  %.ptr.2 = getelementptr inbounds i8, ptr %50, i64 16
  %.ptr.3 = getelementptr inbounds i8, ptr %50, i64 24
  br label %.preheader

.preheader:                                       ; preds = %141, %188
  %.not147 = phi i1 [ true, %141 ], [ false, %188 ]
  br label %189

186:                                              ; preds = %188
  %187 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !23
  %.not145 = icmp eq i32 %187, 0
  br i1 %.not145, label %482, label %470

188:                                              ; preds = %468
  br i1 %.not147, label %.preheader, label %186, !llvm.loop !24

189:                                              ; preds = %.preheader, %468
  %.0136158 = phi i32 [ 0, %.preheader ], [ %469, %468 ]
  %.urem = add nsw i32 %.0136158, -3
  %.cmp = icmp ult i32 %.0136158, 3
  %190 = select i1 %.cmp, i32 %.0136158, i32 %.urem
  %191 = add nuw nsw i32 %190, 1
  %192 = icmp eq i32 %191, 3
  %193 = select i1 %192, i32 0, i32 %191
  %194 = add nuw nsw i32 %190, 2
  %195 = urem i32 %194, 3
  %196 = icmp ugt i32 %.0136158, 2
  %197 = select i1 %196, float -1.000000e+00, float 1.000000e+00
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #12
  %198 = zext nneg i32 %193 to i64
  %199 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %198
  %200 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %199, float noundef %197)
  %201 = extractvalue { <2 x float>, <2 x float> } %200, 0
  store <2 x float> %201, ptr %23, align 8
  %202 = extractvalue { <2 x float>, <2 x float> } %200, 1
  store <2 x float> %202, ptr %142, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #12
  %203 = zext nneg i32 %195 to i64
  %204 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %203
  %205 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %204, float noundef %197)
  %206 = extractvalue { <2 x float>, <2 x float> } %205, 0
  store <2 x float> %206, ptr %24, align 8
  %207 = extractvalue { <2 x float>, <2 x float> } %205, 1
  store <2 x float> %207, ptr %143, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #12
  %208 = zext nneg i32 %190 to i64
  %209 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %208
  %210 = fneg float %197
  %211 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %209, float noundef %210)
  %212 = extractvalue { <2 x float>, <2 x float> } %211, 0
  store <2 x float> %212, ptr %27, align 8
  %213 = extractvalue { <2 x float>, <2 x float> } %211, 1
  store <2 x float> %213, ptr %144, align 8
  %214 = 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)
  %215 = extractvalue { <2 x float>, <2 x float> } %214, 0
  store <2 x float> %215, ptr %26, align 8
  %216 = extractvalue { <2 x float>, <2 x float> } %214, 1
  store <2 x float> %216, ptr %145, align 8
  %217 = 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)
  %218 = extractvalue { <2 x float>, <2 x float> } %217, 0
  store <2 x float> %218, ptr %25, align 8
  %219 = extractvalue { <2 x float>, <2 x float> } %217, 1
  store <2 x float> %219, ptr %146, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #12
  %220 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %209, ptr noundef nonnull align 4 dereferenceable(16) %199)
  %221 = extractvalue { <2 x float>, <2 x float> } %220, 0
  store <2 x float> %221, ptr %28, align 8
  %222 = extractvalue { <2 x float>, <2 x float> } %220, 1
  store <2 x float> %222, ptr %147, align 8
  %223 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %204)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #12
  %224 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %209, ptr noundef nonnull align 4 dereferenceable(16) %199)
  %225 = extractvalue { <2 x float>, <2 x float> } %224, 0
  store <2 x float> %225, ptr %29, align 8
  %226 = extractvalue { <2 x float>, <2 x float> } %224, 1
  store <2 x float> %226, ptr %148, align 8
  %227 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(16) %204)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #12
  %228 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %209, ptr noundef nonnull align 4 dereferenceable(16) %199)
  %229 = extractvalue { <2 x float>, <2 x float> } %228, 0
  store <2 x float> %229, ptr %30, align 8
  %230 = extractvalue { <2 x float>, <2 x float> } %228, 1
  store <2 x float> %230, ptr %149, align 8
  %231 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %204)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #12
  %232 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %209, ptr noundef nonnull align 4 dereferenceable(16) %199)
  %233 = extractvalue { <2 x float>, <2 x float> } %232, 0
  store <2 x float> %233, ptr %31, align 8
  %234 = extractvalue { <2 x float>, <2 x float> } %232, 1
  store <2 x float> %234, ptr %150, align 8
  %235 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %31, ptr noundef nonnull align 4 dereferenceable(16) %204)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #12
  %236 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %209, float noundef %197)
  %237 = extractvalue { <2 x float>, <2 x float> } %236, 0
  store <2 x float> %237, ptr %32, align 8
  %238 = extractvalue { <2 x float>, <2 x float> } %236, 1
  store <2 x float> %238, ptr %151, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %33, ptr noundef nonnull align 8 dereferenceable(16) %32, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #12
  %239 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %32, float noundef 5.000000e-01)
  %240 = extractvalue { <2 x float>, <2 x float> } %239, 0
  store <2 x float> %240, ptr %34, align 8
  %241 = extractvalue { <2 x float>, <2 x float> } %239, 1
  store <2 x float> %241, ptr %152, align 8
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %33, ptr noundef nonnull align 4 dereferenceable(64) %16)
  %242 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %33)
  call void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(64) %16)
  %243 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(16) %33)
  %244 = extractvalue { <2 x float>, <2 x float> } %243, 1
  %.sroa.3.12.vec.extract = extractelement <2 x float> %244, i64 1
  %245 = fcmp ogt float %.sroa.3.12.vec.extract, 0.000000e+00
  br i1 %245, label %468, label %246

246:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #12
  %247 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %32, float noundef 5.000000e-01)
  %248 = extractvalue { <2 x float>, <2 x float> } %247, 0
  store <2 x float> %248, ptr %36, align 8
  %249 = extractvalue { <2 x float>, <2 x float> } %247, 1
  store <2 x float> %249, ptr %153, align 8
  %250 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %36, ptr noundef nonnull align 4 dereferenceable(16) %32)
  %251 = extractvalue { <2 x float>, <2 x float> } %250, 0
  store <2 x float> %251, ptr %35, align 8
  %252 = extractvalue { <2 x float>, <2 x float> } %250, 1
  store <2 x float> %252, ptr %154, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #12
  %253 = 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) %35)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %38) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #12
  %254 = 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 %253)
  %255 = extractvalue { <2 x float>, <2 x float> } %254, 0
  store <2 x float> %255, ptr %39, align 8
  %256 = extractvalue { <2 x float>, <2 x float> } %254, 1
  store <2 x float> %256, ptr %155, align 8
  %257 = 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) %39)
  %258 = extractvalue { <2 x float>, <2 x float> } %257, 0
  store <2 x float> %258, ptr %38, align 8
  %259 = extractvalue { <2 x float>, <2 x float> } %257, 1
  store <2 x float> %259, ptr %156, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #12
  %260 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %32, float noundef 5.000000e-01)
  %261 = extractvalue { <2 x float>, <2 x float> } %260, 0
  store <2 x float> %261, ptr %40, align 8
  %262 = extractvalue { <2 x float>, <2 x float> } %260, 1
  store <2 x float> %262, ptr %157, align 8
  %263 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %38, ptr noundef nonnull align 4 dereferenceable(16) %40)
  %264 = extractvalue { <2 x float>, <2 x float> } %263, 0
  store <2 x float> %264, ptr %37, align 8
  %265 = extractvalue { <2 x float>, <2 x float> } %263, 1
  store <2 x float> %265, ptr %158, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #12
  %266 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %199, ptr noundef nonnull align 4 dereferenceable(16) %37)
  %267 = call float @llvm.fmuladd.f32(float %266, float %197, float 5.000000e-01)
  %268 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %204, ptr noundef nonnull align 4 dereferenceable(16) %37)
  %269 = call float @llvm.fmuladd.f32(float %268, float %197, float 5.000000e-01)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %41, ptr noundef nonnull align 16 dereferenceable(16) %199, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %42) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 16 dereferenceable(16) %204, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %43) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %44) #12
  %270 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %209, ptr noundef nonnull align 4 dereferenceable(16) %41)
  %271 = extractvalue { <2 x float>, <2 x float> } %270, 0
  store <2 x float> %271, ptr %44, align 8
  %272 = extractvalue { <2 x float>, <2 x float> } %270, 1
  store <2 x float> %272, ptr %159, align 8
  %273 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %42)
  %274 = extractvalue { <2 x float>, <2 x float> } %273, 0
  store <2 x float> %274, ptr %43, align 8
  %275 = extractvalue { <2 x float>, <2 x float> } %273, 1
  store <2 x float> %275, ptr %160, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %44) #12
  %276 = getelementptr inbounds [3 x i32], ptr @_ZN8ImGuizmoL14directionColorE, i64 0, i64 %208
  br label %278

277:                                              ; preds = %467
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #12
  br label %468

278:                                              ; preds = %246, %467
  %indvars.iv = phi i64 [ 0, %246 ], [ %indvars.iv.next, %467 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %45) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %46) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %47) #12
  %.lhs.trunc = trunc i64 %indvars.iv to i8
  %279 = urem i8 %.lhs.trunc, 3
  %280 = uitofp nneg i8 %279 to float
  %281 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef %280)
  %282 = extractvalue { <2 x float>, <2 x float> } %281, 0
  store <2 x float> %282, ptr %47, align 8
  %283 = extractvalue { <2 x float>, <2 x float> } %281, 1
  store <2 x float> %283, ptr %161, align 8
  %284 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(16) %47)
  %285 = extractvalue { <2 x float>, <2 x float> } %284, 0
  store <2 x float> %285, ptr %46, align 8
  %286 = extractvalue { <2 x float>, <2 x float> } %284, 1
  store <2 x float> %286, ptr %162, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #12
  %287 = udiv i8 %.lhs.trunc, 3
  %288 = uitofp nneg i8 %287 to float
  %289 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef %288)
  %290 = extractvalue { <2 x float>, <2 x float> } %289, 0
  store <2 x float> %290, ptr %48, align 8
  %291 = extractvalue { <2 x float>, <2 x float> } %289, 1
  store <2 x float> %291, ptr %163, align 8
  %292 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %46, ptr noundef nonnull align 4 dereferenceable(16) %48)
  %293 = extractvalue { <2 x float>, <2 x float> } %292, 0
  store <2 x float> %293, ptr %45, align 8
  %294 = extractvalue { <2 x float>, <2 x float> } %292, 1
  store <2 x float> %294, ptr %164, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #12
  %295 = 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)
  %296 = extractvalue { <2 x float>, <2 x float> } %295, 0
  store <2 x float> %296, ptr %49, align 8
  %297 = extractvalue { <2 x float>, <2 x float> } %295, 1
  store <2 x float> %297, ptr %165, align 8
  %298 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %45, ptr noundef nonnull align 4 dereferenceable(16) %49)
  %299 = extractvalue { <2 x float>, <2 x float> } %298, 0
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #12
  %300 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %indvars.iv
  %301 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %300, float noundef 2.000000e+00)
  %302 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %indvars.iv
  %303 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %302, float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #12
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %50)
  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 %51) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %52) #12
  %.sroa.043.0.vec.extract = extractelement <2 x float> %301, i64 0
  %304 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %41, float noundef %.sroa.043.0.vec.extract)
  %305 = extractvalue { <2 x float>, <2 x float> } %304, 0
  store <2 x float> %305, ptr %52, align 8
  %306 = extractvalue { <2 x float>, <2 x float> } %304, 1
  store <2 x float> %306, ptr %166, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %53) #12
  %.sroa.043.4.vec.extract = extractelement <2 x float> %301, i64 1
  %307 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %42, float noundef %.sroa.043.4.vec.extract)
  %308 = extractvalue { <2 x float>, <2 x float> } %307, 0
  store <2 x float> %308, ptr %53, align 8
  %309 = extractvalue { <2 x float>, <2 x float> } %307, 1
  store <2 x float> %309, ptr %167, align 8
  %310 = 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)
  %311 = extractvalue { <2 x float>, <2 x float> } %310, 0
  store <2 x float> %311, ptr %51, align 16
  %312 = extractvalue { <2 x float>, <2 x float> } %310, 1
  store <2 x float> %312, ptr %168, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %54) #12
  %313 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %41, float noundef %.sroa.043.0.vec.extract)
  %314 = extractvalue { <2 x float>, <2 x float> } %313, 0
  store <2 x float> %314, ptr %54, align 8
  %315 = extractvalue { <2 x float>, <2 x float> } %313, 1
  store <2 x float> %315, ptr %170, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %55) #12
  %316 = fadd <2 x float> %301, %303
  %317 = extractelement <2 x float> %316, i64 1
  %318 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %42, float noundef %317)
  %319 = extractvalue { <2 x float>, <2 x float> } %318, 0
  store <2 x float> %319, ptr %55, align 8
  %320 = extractvalue { <2 x float>, <2 x float> } %318, 1
  store <2 x float> %320, ptr %171, align 8
  %321 = 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)
  %322 = extractvalue { <2 x float>, <2 x float> } %321, 0
  store <2 x float> %322, ptr %169, align 16
  %323 = extractvalue { <2 x float>, <2 x float> } %321, 1
  store <2 x float> %323, ptr %172, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %56) #12
  %324 = fadd <2 x float> %301, %303
  %325 = extractelement <2 x float> %324, i64 0
  %326 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %41, float noundef %325)
  %327 = extractvalue { <2 x float>, <2 x float> } %326, 0
  store <2 x float> %327, ptr %56, align 8
  %328 = extractvalue { <2 x float>, <2 x float> } %326, 1
  store <2 x float> %328, ptr %174, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #12
  %329 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %42, float noundef %317)
  %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 %175, align 8
  %332 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(16) %57)
  %333 = extractvalue { <2 x float>, <2 x float> } %332, 0
  store <2 x float> %333, ptr %173, align 16
  %334 = extractvalue { <2 x float>, <2 x float> } %332, 1
  store <2 x float> %334, ptr %176, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #12
  %335 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %41, float noundef %325)
  %336 = extractvalue { <2 x float>, <2 x float> } %335, 0
  store <2 x float> %336, ptr %58, align 8
  %337 = extractvalue { <2 x float>, <2 x float> } %335, 1
  store <2 x float> %337, ptr %178, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %59) #12
  %338 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %42, float noundef %.sroa.043.4.vec.extract)
  %339 = extractvalue { <2 x float>, <2 x float> } %338, 0
  store <2 x float> %339, ptr %59, align 8
  %340 = extractvalue { <2 x float>, <2 x float> } %338, 1
  store <2 x float> %340, ptr %179, align 8
  %341 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %58, ptr noundef nonnull align 4 dereferenceable(16) %59)
  %342 = extractvalue { <2 x float>, <2 x float> } %341, 0
  store <2 x float> %342, ptr %177, align 16
  %343 = extractvalue { <2 x float>, <2 x float> } %341, 1
  store <2 x float> %343, ptr %180, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %59) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %57) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %56) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %55) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %54) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %53) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %52) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %62) #12
  %344 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %51, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %345 = extractvalue { <2 x float>, <2 x float> } %344, 0
  store <2 x float> %345, ptr %62, align 8
  %346 = extractvalue { <2 x float>, <2 x float> } %344, 1
  store <2 x float> %346, ptr %181, align 8
  %347 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %62, float noundef 5.000000e-01)
  %348 = extractvalue { <2 x float>, <2 x float> } %347, 0
  store <2 x float> %348, ptr %61, align 8
  %349 = extractvalue { <2 x float>, <2 x float> } %347, 1
  store <2 x float> %349, ptr %182, align 8
  %350 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %61, float noundef %197)
  %351 = extractvalue { <2 x float>, <2 x float> } %350, 0
  store <2 x float> %351, ptr %60, align 8
  %352 = extractvalue { <2 x float>, <2 x float> } %350, 1
  store <2 x float> %352, ptr %183, 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
  %353 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %60, 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> %353, ptr %50, align 16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %62) #12
  %354 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %169, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %355 = extractvalue { <2 x float>, <2 x float> } %354, 0
  store <2 x float> %355, ptr %62, align 8
  %356 = extractvalue { <2 x float>, <2 x float> } %354, 1
  store <2 x float> %356, ptr %181, align 8
  %357 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %62, float noundef 5.000000e-01)
  %358 = extractvalue { <2 x float>, <2 x float> } %357, 0
  store <2 x float> %358, ptr %61, align 8
  %359 = extractvalue { <2 x float>, <2 x float> } %357, 1
  store <2 x float> %359, ptr %182, align 8
  %360 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %61, float noundef %197)
  %361 = extractvalue { <2 x float>, <2 x float> } %360, 0
  store <2 x float> %361, ptr %60, align 8
  %362 = extractvalue { <2 x float>, <2 x float> } %360, 1
  store <2 x float> %362, ptr %183, 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
  %363 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %60, 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> %363, ptr %.ptr.1, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %62) #12
  %364 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %173, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %365 = extractvalue { <2 x float>, <2 x float> } %364, 0
  store <2 x float> %365, ptr %62, align 8
  %366 = extractvalue { <2 x float>, <2 x float> } %364, 1
  store <2 x float> %366, ptr %181, align 8
  %367 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %62, float noundef 5.000000e-01)
  %368 = extractvalue { <2 x float>, <2 x float> } %367, 0
  store <2 x float> %368, ptr %61, align 8
  %369 = extractvalue { <2 x float>, <2 x float> } %367, 1
  store <2 x float> %369, ptr %182, align 8
  %370 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %61, float noundef %197)
  %371 = extractvalue { <2 x float>, <2 x float> } %370, 0
  store <2 x float> %371, ptr %60, align 8
  %372 = extractvalue { <2 x float>, <2 x float> } %370, 1
  store <2 x float> %372, ptr %183, 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
  %373 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %60, 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> %373, ptr %.ptr.2, align 16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %62) #12
  %374 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %177, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %375 = extractvalue { <2 x float>, <2 x float> } %374, 0
  store <2 x float> %375, ptr %62, align 8
  %376 = extractvalue { <2 x float>, <2 x float> } %374, 1
  store <2 x float> %376, ptr %181, align 8
  %377 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %62, float noundef 5.000000e-01)
  %378 = extractvalue { <2 x float>, <2 x float> } %377, 0
  store <2 x float> %378, ptr %61, align 8
  %379 = extractvalue { <2 x float>, <2 x float> } %377, 1
  store <2 x float> %379, ptr %182, align 8
  %380 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %61, float noundef %197)
  %381 = extractvalue { <2 x float>, <2 x float> } %380, 0
  store <2 x float> %381, ptr %60, align 8
  %382 = extractvalue { <2 x float>, <2 x float> } %380, 1
  store <2 x float> %382, ptr %183, 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
  %383 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %60, 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> %383, ptr %.ptr.3, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #12
  %384 = extractvalue { <2 x float>, <2 x float> } %298, 1
  %.sroa.029.0.copyload = load float, ptr %300, align 8, !tbaa !27
  %.sroa.430.0..sroa_idx = getelementptr inbounds i8, ptr %300, i64 4
  %.sroa.430.0.copyload = load float, ptr %.sroa.430.0..sroa_idx, align 4, !tbaa !27
  %385 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %300, ptr noundef nonnull align 4 dereferenceable(8) %302)
  %386 = fcmp ogt float %267, %.sroa.029.0.copyload
  %.sroa.5.8.vec.extract = extractelement <2 x float> %385, i64 0
  %387 = fcmp olt float %267, %.sroa.5.8.vec.extract
  %or.cond = select i1 %386, i1 %387, i1 false
  %388 = fcmp ogt float %269, %.sroa.430.0.copyload
  %or.cond148 = select i1 %or.cond, i1 %388, i1 false
  br i1 %or.cond148, label %389, label %391

389:                                              ; preds = %278
  %.sroa.5.12.vec.extract = extractelement <2 x float> %385, i64 1
  %390 = fcmp olt float %269, %.sroa.5.12.vec.extract
  br label %391

391:                                              ; preds = %389, %278
  %392 = phi i1 [ false, %278 ], [ %390, %389 ]
  %.sroa.056.0.vec.extract = extractelement <2 x float> %299, i64 0
  %.sroa.056.4.vec.extract = extractelement <2 x float> %299, i64 1
  %393 = fmul float %.sroa.056.4.vec.extract, 3.000000e+00
  %394 = call float @llvm.fmuladd.f32(float %.sroa.056.0.vec.extract, float 9.000000e+00, float %393)
  %.sroa.557.8.vec.extract = extractelement <2 x float> %384, i64 0
  %395 = fadd float %.sroa.557.8.vec.extract, %394
  %396 = fptosi float %395 to i32
  %397 = icmp slt i32 %396, 27
  br i1 %397, label %399, label %398

398:                                              ; preds = %391
  call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, i32 noundef 2486, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j) #13
  unreachable

399:                                              ; preds = %391
  %400 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !range !28
  %401 = xor i8 %400, 1
  %402 = select i1 %392, i8 %401, i8 0
  %403 = sext i32 %396 to i64
  %404 = getelementptr inbounds [27 x i8], ptr %22, i64 0, i64 %403
  %405 = load i8, ptr %404, align 1, !tbaa !29, !range !28, !noundef !30
  %406 = or i8 %402, %405
  store i8 %406, ptr %404, align 1, !tbaa !29
  br i1 %.not147, label %467, label %407

407:                                              ; preds = %399
  %408 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  %409 = load i32, ptr %276, align 4, !tbaa !23
  %410 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !29, !range !28, !noundef !30
  %411 = trunc nuw i8 %410 to i1
  %412 = select i1 %411, i32 526344, i32 0
  %413 = or i32 %409, %412
  %414 = or i32 %413, -2139062144
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %408, ptr noundef nonnull %50, i32 noundef 4, i32 noundef %414)
  %415 = trunc nuw i8 %406 to i1
  br i1 %415, label %416, label %467

416:                                              ; preds = %407
  %417 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %417, ptr noundef nonnull %50, i32 noundef 4, i32 noundef -2141150992)
  %418 = load i8, ptr %184, align 8, !tbaa !29, !range !28, !noundef !30
  %419 = trunc nuw i8 %418 to i1
  br i1 %419, label %460, label %420

420:                                              ; preds = %416
  %421 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29, !range !28, !noundef !30
  %422 = trunc nuw i8 %421 to i1
  br i1 %422, label %460, label %423

423:                                              ; preds = %420
  %424 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29, !range !28, !noundef !30
  %425 = trunc nuw i8 %424 to i1
  br i1 %425, label %426, label %460

426:                                              ; preds = %423
  %427 = sdiv i32 %396, 9
  %.neg = mul nsw i32 %427, -9
  %428 = add i32 %.neg, %396
  %429 = sdiv i32 %428, 3
  %430 = srem i32 %396, 3
  %431 = sitofp i32 %427 to float
  %432 = fsub float 1.000000e+00, %431
  %433 = sitofp i32 %429 to float
  %434 = fsub float 1.000000e+00, %433
  %435 = sitofp i32 %430 to float
  %436 = fsub float 1.000000e+00, %435
  %437 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %432, float noundef %434, float noundef %436, float noundef 0.000000e+00)
  %438 = extractvalue { <2 x float>, <2 x float> } %437, 0
  %439 = extractvalue { <2 x float>, <2 x float> } %437, 1
  store <2 x float> %438, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, align 4
  store <2 x float> %439, ptr getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, i64 8), align 4
  %440 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir)
  %441 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %8)
  %442 = call float @llvm.fabs.f32(float %441)
  %443 = fcmp ogt float %442, 0x3FEFAE1480000000
  br i1 %443, label %444, label %458

444:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %63) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %63, ptr noundef nonnull align 4 dereferenceable(16) %12, i64 16, i1 false), !tbaa.struct !26
  %445 = load float, ptr %63, align 4, !tbaa !31
  %446 = call float @llvm.fabs.f32(float %445)
  %447 = load float, ptr %185, align 4, !tbaa !32
  %448 = call float @llvm.fabs.f32(float %447)
  %449 = fcmp ogt float %446, %448
  br i1 %449, label %450, label %451

450:                                              ; preds = %444
  store float 0.000000e+00, ptr %185, align 4, !tbaa !32
  br label %452

451:                                              ; preds = %444
  store float 0.000000e+00, ptr %63, align 4, !tbaa !31
  br label %452

452:                                              ; preds = %451, %450
  %453 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %63)
  %454 = 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) %63)
  %455 = extractvalue { <2 x float>, <2 x float> } %454, 0
  %456 = extractvalue { <2 x float>, <2 x float> } %454, 1
  store <2 x float> %455, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, align 4
  store <2 x float> %456, ptr getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 8), align 4
  %457 = 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 %63) #12
  br label %459

458:                                              ; preds = %426
  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 !26
  br label %459

459:                                              ; preds = %458, %452
  store i32 40, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !23
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29
  %.pre = load i8, ptr %184, align 8, !tbaa !29, !range !28
  br label %460

460:                                              ; preds = %459, %423, %420, %416
  %461 = phi i8 [ %.pre, %459 ], [ %418, %423 ], [ %418, %420 ], [ %418, %416 ]
  %462 = trunc nuw i8 %461 to i1
  br i1 %462, label %463, label %467

463:                                              ; preds = %460
  %464 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29, !range !28, !noundef !30
  %465 = trunc nuw i8 %464 to i1
  br i1 %465, label %467, label %466

466:                                              ; preds = %463
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29
  br label %467

467:                                              ; preds = %407, %466, %463, %460, %399
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %51) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 9
  br i1 %exitcond.not, label %277, label %278, !llvm.loop !33

468:                                              ; preds = %189, %277
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #12
  %469 = add nuw nsw i32 %.0136158, 1
  %exitcond162.not = icmp eq i32 %469, 6
  br i1 %exitcond162.not, label %188, label %189, !llvm.loop !34

470:                                              ; preds = %186
  %471 = add nsw i32 %187, -1
  store i32 %471, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %64) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(16) %88, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, float noundef 0x3FC99999A0000000)
  %472 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %64)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %65) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %65, ptr noundef nonnull align 4 dereferenceable(16) %110, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %65, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, float noundef 0x3FD3333340000000)
  %473 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %65)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %65, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %66) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %67) #12
  %474 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %64, float noundef %1)
  %475 = extractvalue { <2 x float>, <2 x float> } %474, 0
  store <2 x float> %475, ptr %67, align 8
  %476 = getelementptr inbounds i8, ptr %67, i64 8
  %477 = extractvalue { <2 x float>, <2 x float> } %474, 1
  store <2 x float> %477, ptr %476, align 8
  %478 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %67)
  %479 = extractvalue { <2 x float>, <2 x float> } %478, 0
  store <2 x float> %479, ptr %66, align 8
  %480 = getelementptr inbounds i8, ptr %66, i64 8
  %481 = extractvalue { <2 x float>, <2 x float> } %478, 1
  store <2 x float> %481, ptr %480, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %67) #12
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %66, ptr noundef nonnull %13, ptr noundef nonnull %65, ptr noundef nonnull %0)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %66) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %65) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #12
  br label %482

482:                                              ; preds = %470, %186
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %68) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #12
  %483 = 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> %483, ptr %69, align 8
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %68, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %69)
  %484 = getelementptr inbounds i8, ptr %83, i64 280
  %485 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %68, ptr noundef nonnull align 4 dereferenceable(8) %484)
  %486 = zext i1 %485 to i8
  store i8 %486, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %68) #12
  %487 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29, !range !28, !noundef !30
  %488 = trunc nuw i8 %487 to i1
  %489 = load i8, ptr %184, align 8, !tbaa !29, !range !28, !noundef !30
  %490 = trunc nuw i8 %489 to i1
  br i1 %488, label %499, label %491

491:                                              ; preds = %482
  %brmerge.demorgan = and i1 %485, %490
  br i1 %brmerge.demorgan, label %492, label %.thread

492:                                              ; preds = %491
  %493 = getelementptr inbounds i8, ptr %83, i64 940
  %494 = load float, ptr %493, align 4, !tbaa !35
  %495 = fcmp ueq float %494, 0.000000e+00
  %496 = getelementptr inbounds i8, ptr %83, i64 944
  %497 = load float, ptr %496, align 8
  %498 = fcmp ueq float %497, 0.000000e+00
  %or.cond151 = select i1 %495, i1 %498, i1 false
  br i1 %or.cond151, label %.thread, label %.thread.thread

.thread.thread:                                   ; preds = %492
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29
  br label %501

499:                                              ; preds = %482
  br i1 %490, label %.thread, label %.thread.thread163

.thread.thread163:                                ; preds = %499
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29
  br label %533

.thread:                                          ; preds = %491, %492, %499
  %500 = trunc nuw i8 %487 to i1
  br i1 %500, label %501, label %533

501:                                              ; preds = %.thread.thread, %.thread
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %70) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %70)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %71) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %71)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %72) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %72)
  %502 = getelementptr inbounds i8, ptr %83, i64 940
  %503 = load float, ptr %502, align 4, !tbaa !35
  %504 = fmul float %503, 0xBF847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %70, ptr noundef nonnull align 4 dereferenceable(16) %8, float noundef %504)
  %505 = getelementptr inbounds i8, ptr %83, i64 944
  %506 = load float, ptr %505, align 8, !tbaa !39
  %507 = fmul float %506, 0xBF847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %71, ptr noundef nonnull align 4 dereferenceable(16) %12, float noundef %507)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %73) #12
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind nonnull writable sret(%"struct.ImGuizmo::matrix_t") align 4 %73, ptr noundef nonnull align 4 dereferenceable(64) %70, ptr noundef nonnull align 4 dereferenceable(64) %71)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %72, ptr noundef nonnull align 4 dereferenceable(64) %73, i64 64, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %73) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %74) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %74, ptr noundef nonnull align 4 dereferenceable(16) %88, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %74, ptr noundef nonnull align 4 dereferenceable(64) %72)
  %508 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %74)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %75) #12
  %509 = 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)
  %510 = extractvalue { <2 x float>, <2 x float> } %509, 0
  store <2 x float> %510, ptr %75, align 8
  %511 = getelementptr inbounds i8, ptr %75, i64 8
  %512 = extractvalue { <2 x float>, <2 x float> } %509, 1
  store <2 x float> %512, ptr %511, align 8
  %513 = getelementptr inbounds i8, ptr %75, i64 4
  store float 0.000000e+00, ptr %513, align 4, !tbaa !40
  %514 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %75)
  %515 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %75, ptr noundef nonnull align 4 dereferenceable(16) %74)
  %516 = fcmp olt float %515, 0.000000e+00
  br i1 %516, label %517, label %524

517:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %76) #12
  %518 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %75, float noundef %515)
  %519 = extractvalue { <2 x float>, <2 x float> } %518, 0
  store <2 x float> %519, ptr %76, align 8
  %520 = getelementptr inbounds i8, ptr %76, i64 8
  %521 = extractvalue { <2 x float>, <2 x float> } %518, 1
  store <2 x float> %521, ptr %520, align 8
  %522 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %74, ptr noundef nonnull align 4 dereferenceable(16) %76)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %76) #12
  %523 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %74)
  br label %524

524:                                              ; preds = %517, %501
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %77) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %78) #12
  %525 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %74, float noundef %1)
  %526 = extractvalue { <2 x float>, <2 x float> } %525, 0
  store <2 x float> %526, ptr %78, align 8
  %527 = getelementptr inbounds i8, ptr %78, i64 8
  %528 = extractvalue { <2 x float>, <2 x float> } %525, 1
  store <2 x float> %528, ptr %527, align 8
  %529 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %78)
  %530 = extractvalue { <2 x float>, <2 x float> } %529, 0
  store <2 x float> %530, ptr %77, align 8
  %531 = getelementptr inbounds i8, ptr %77, i64 8
  %532 = extractvalue { <2 x float>, <2 x float> } %529, 1
  store <2 x float> %532, ptr %531, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %78) #12
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %77, ptr noundef nonnull %13, ptr noundef nonnull %8, ptr noundef nonnull %0)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %77) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %75) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %72) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %71) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %70) #12
  br label %533

533:                                              ; preds = %.thread.thread163, %524, %.thread
  %534 = 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 %534)
  call void @llvm.lifetime.end.p0(i64 27, ptr nonnull %22) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #12
  ret void
}

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: nofree nounwind
declare i32 @__cxa_guard_acquire(ptr) local_unnamed_addr #9

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress 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)) 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 #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)) 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 = { nofree nounwind }
attributes #10 = { mustprogress 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 = !{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, !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}
!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 = !{!"branch_weights", i32 1, i32 1048575}
!23 = !{!18, !18, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{i64 0, i64 4, !27, i64 4, i64 4, !27, i64 8, i64 4, !27, i64 12, i64 4, !27}
!27 = !{!15, !15, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{!17, !17, i64 0}
!30 = !{}
!31 = !{!14, !15, i64 0}
!32 = !{!14, !15, i64 8}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = !{!36, !15, i64 940}
!36 = !{!"_ZTS7ImGuiIO", !18, i64 0, !18, i64 4, !16, i64 8, !15, i64 16, !15, i64 20, !11, i64 24, !11, i64 32, !15, i64 40, !15, i64 44, !15, i64 48, !7, i64 52, !15, i64 140, !15, i64 144, !11, i64 152, !11, i64 160, !15, i64 168, !17, i64 172, !11, i64 176, !16, i64 184, !17, i64 192, !17, i64 193, !17, i64 194, !17, i64 195, !17, i64 196, !17, i64 197, !17, i64 198, !17, i64 199, !17, i64 200, !17, i64 201, !17, i64 202, !17, i64 203, !17, i64 204, !15, i64 208, !11, i64 216, !11, i64 224, !11, i64 232, !11, i64 240, !11, i64 248, !11, i64 256, !11, i64 264, !11, i64 272, !16, i64 280, !7, i64 288, !15, i64 296, !15, i64 300, !18, i64 304, !17, i64 308, !17, i64 309, !17, i64 310, !17, i64 311, !7, i64 312, !7, i64 824, !17, i64 908, !17, i64 909, !17, i64 910, !17, i64 911, !17, i64 912, !17, i64 913, !17, i64 914, !15, i64 916, !18, i64 920, !18, i64 924, !18, i64 928, !18, i64 932, !18, i64 936, !16, i64 940, !18, i64 948, !16, i64 952, !7, i64 960, !7, i64 1000, !7, i64 1040, !7, i64 1045, !7, i64 1050, !7, i64 1055, !7, i64 1060, !7, i64 1068, !7, i64 1088, !7, i64 1108, !7, i64 1148, !7, i64 1168, !7, i64 3216, !7, i64 5264, !7, i64 5348, !15, i64 5432, !37, i64 5436, !38, i64 5440}
!37 = !{!"short", !7, i64 0}
!38 = !{!"_ZTS8ImVectorItE", !18, i64 0, !18, i64 4, !11, i64 8}
!39 = !{!36, !15, i64 944}
!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