; LLVM IR from yangfengzzz/DigitalVox4 :: editor/imgui_zmo.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::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, %"struct.ImGuizmo::vec_t", i8, i8, i8, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, float, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, [3 x i8], [3 x i8], [3 x float], %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", i32, [2 x i32], i8, %"struct.ImGuizmo::matrix_t", i32, float, float, float, float, float, float, float, i8, i32, i32, i32, i8, float }
%struct.ImVec2 = type { float, float }
%"struct.ImGuizmo::vec_t" = type { float, float, float, float }
%"struct.ImGuizmo::matrix_t" = type { %union.anon }
%union.anon = type { [4 x [4 x float]] }
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }
%struct.anon = type { %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t" }
%struct.ImGuiIO = type { i32, i32, %struct.ImVec2, float, float, ptr, ptr, float, float, float, float, float, ptr, ptr, float, i8, ptr, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, i32, i32, %struct.ImVec2, [641 x i32], [512 x i8], %struct.ImVec2, [5 x i8], float, float, i8, i8, i8, i8, [20 x float], i32, i32, [641 x %struct.ImGuiKeyData], i8, %struct.ImVec2, [5 x %struct.ImVec2], [5 x double], [5 x i8], [5 x i8], [5 x i16], [5 x i16], [5 x i8], [5 x i8], [5 x i8], [5 x float], [5 x float], [5 x float], [20 x float], [20 x float], float, i8, i8, i8, i16, %struct.ImVector }
%struct.ImGuiKeyData = type { i8, float, float, float }
%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.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [78 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(14080) 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 %"struct.ImGuizmo::vec_t", align 4
  %46 = alloca %"struct.ImGuizmo::vec_t", align 4
  %47 = alloca %"struct.ImGuizmo::vec_t", align 4
  %48 = alloca %"struct.ImGuizmo::vec_t", align 4
  %49 = alloca %"struct.ImGuizmo::vec_t", align 4
  %50 = alloca %"struct.ImGuizmo::vec_t", align 4
  %51 = alloca %"struct.ImGuizmo::vec_t", align 4
  %52 = alloca float, 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 float, 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 %"struct.ImGuizmo::vec_t", align 4
  %63 = alloca i32, align 4
  %64 = alloca %"struct.ImGuizmo::vec_t", align 4
  %65 = alloca %"struct.ImGuizmo::vec_t", align 4
  %66 = alloca %"struct.ImGuizmo::vec_t", align 4
  %67 = alloca %"struct.ImGuizmo::vec_t", align 4
  %68 = alloca %"struct.ImGuizmo::vec_t", align 4
  %69 = alloca %"struct.ImGuizmo::vec_t", align 4
  %70 = alloca %struct.ImVec2, align 4
  %71 = alloca %struct.ImVec2, align 4
  %72 = alloca [4 x %struct.ImVec2], align 16
  %73 = alloca [4 x %"struct.ImGuizmo::vec_t"], align 16
  %74 = alloca %"struct.ImGuizmo::vec_t", align 4
  %75 = alloca %"struct.ImGuizmo::vec_t", align 4
  %76 = alloca %"struct.ImGuizmo::vec_t", align 4
  %77 = alloca %"struct.ImGuizmo::vec_t", align 4
  %78 = alloca %"struct.ImGuizmo::vec_t", align 4
  %79 = alloca %"struct.ImGuizmo::vec_t", align 4
  %80 = alloca %"struct.ImGuizmo::vec_t", align 4
  %81 = alloca %"struct.ImGuizmo::vec_t", align 4
  %82 = alloca i32, align 4
  %83 = alloca %struct.ImVec2, 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 %struct.ImVec2, align 4
  %88 = alloca %struct.ImVec2, align 4
  %89 = alloca [2 x %struct.ImVec2], align 16
  %90 = alloca i8, align 1
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca i32, align 4
  %95 = alloca %"struct.ImGuizmo::vec_t", align 4
  %96 = alloca %"struct.ImGuizmo::vec_t", align 4
  %97 = alloca %"struct.ImGuizmo::vec_t", align 4
  %98 = alloca %"struct.ImGuizmo::vec_t", align 4
  %99 = alloca %"struct.ImGuizmo::vec_t", align 4
  %100 = alloca %"struct.ImGuizmo::vec_t", align 4
  %101 = alloca %"struct.ImGuizmo::vec_t", align 4
  %102 = alloca %"struct.ImGuizmo::vec_t", align 4
  %103 = alloca %"struct.ImGuizmo::vec_t", align 4
  %104 = alloca %"struct.ImGuizmo::vec_t", align 4
  %105 = alloca %"struct.ImGuizmo::vec_t", align 4
  %106 = alloca %"struct.ImGuizmo::vec_t", align 4
  %107 = alloca %struct.ImRect, align 4
  %108 = alloca %struct.ImVec2, align 4
  %109 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %110 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %111 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %112 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %113 = alloca %"struct.ImGuizmo::vec_t", align 4
  %114 = alloca %"struct.ImGuizmo::vec_t", align 4
  %115 = alloca %"struct.ImGuizmo::vec_t", align 4
  %116 = alloca %"struct.ImGuizmo::vec_t", align 4
  %117 = alloca float, 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
  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
  %122 = 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)
  %123 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %11, i32 0, i32 0
  %124 = extractvalue { <2 x float>, <2 x float> } %122, 0
  store <2 x float> %124, ptr %123, align 4
  %125 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %11, i32 0, i32 1
  %126 = extractvalue { <2 x float>, <2 x float> } %122, 1
  store <2 x float> %126, ptr %125, 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
  %127 = call noundef nonnull align 8 dereferenceable(14080) ptr @_ZN5ImGui5GetIOEv()
  store ptr %127, ptr %14, align 8, !tbaa !5
  %128 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %129 = 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> %129, ptr %15, align 4
  %130 = load i32, ptr %10, align 4, !tbaa !11
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %128, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %130, 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)
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = call noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64) %16, ptr noundef nonnull align 4 dereferenceable(64) %131, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #10
  %133 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %134 = getelementptr inbounds %struct.anon, ptr %133, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #10
  %135 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %136 = getelementptr inbounds %struct.anon, ptr %135, i32 0, i32 2
  %137 = load float, ptr %9, align 4, !tbaa !9
  %138 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %136, float noundef %137)
  %139 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 0
  %140 = extractvalue { <2 x float>, <2 x float> } %138, 0
  store <2 x float> %140, ptr %139, align 4
  %141 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 1
  %142 = extractvalue { <2 x float>, <2 x float> } %138, 1
  store <2 x float> %142, ptr %141, align 4
  %143 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %134, ptr noundef nonnull align 4 dereferenceable(16) %18)
  %144 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, 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 %17, i32 0, i32 1
  %147 = extractvalue { <2 x float>, <2 x float> } %143, 1
  store <2 x float> %147, ptr %146, 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
  %148 = call float @sqrtf(float noundef 1.200000e+01) #10
  %149 = fdiv float 3.000000e+00, %148
  %150 = call float @acosf(float noundef %149) #10
  %151 = fmul float %150, 0x404CA5DC00000000
  store float %151, ptr %22, align 4, !tbaa !9
  %152 = load float, ptr %22, align 4, !tbaa !9
  %153 = call float @sqrtf(float noundef 2.000000e+00) #10
  %154 = fdiv float %152, %153
  %155 = getelementptr inbounds %struct.ImVec2, ptr %7, i32 0, i32 0
  %156 = load float, ptr %155, align 4, !tbaa !23
  %157 = getelementptr inbounds %struct.ImVec2, ptr %7, i32 0, i32 1
  %158 = load float, ptr %157, align 4, !tbaa !24
  %159 = fdiv float %156, %158
  %160 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %20, i32 0, i32 0
  %161 = getelementptr inbounds [16 x float], ptr %160, i64 0, i64 0
  call void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef %154, float noundef %159, float noundef 0x3F847AE140000000, float noundef 1.000000e+03, ptr noundef %161)
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #10
  %162 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %163 = getelementptr inbounds [4 x [4 x float]], ptr %162, i64 0, i64 2
  %164 = getelementptr inbounds [4 x float], ptr %163, i64 0, i64 0
  %165 = load float, ptr %164, align 4, !tbaa !14
  %166 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %167 = getelementptr inbounds [4 x [4 x float]], ptr %166, i64 0, i64 2
  %168 = getelementptr inbounds [4 x float], ptr %167, i64 0, i64 1
  %169 = load float, ptr %168, align 4, !tbaa !14
  %170 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %171 = getelementptr inbounds [4 x [4 x float]], ptr %170, i64 0, i64 2
  %172 = getelementptr inbounds [4 x float], ptr %171, i64 0, i64 2
  %173 = load float, ptr %172, align 4, !tbaa !14
  %174 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %165, float noundef %169, float noundef %173, float noundef 0.000000e+00)
  %175 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %23, i32 0, i32 0
  %176 = extractvalue { <2 x float>, <2 x float> } %174, 0
  store <2 x float> %176, ptr %175, align 4
  %177 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %23, i32 0, i32 1
  %178 = extractvalue { <2 x float>, <2 x float> } %174, 1
  store <2 x float> %178, ptr %177, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #10
  %179 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %180 = getelementptr inbounds [4 x [4 x float]], ptr %179, i64 0, i64 1
  %181 = getelementptr inbounds [4 x float], ptr %180, i64 0, i64 0
  %182 = load float, ptr %181, align 4, !tbaa !14
  %183 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %184 = getelementptr inbounds [4 x [4 x float]], ptr %183, i64 0, i64 1
  %185 = getelementptr inbounds [4 x float], ptr %184, i64 0, i64 1
  %186 = load float, ptr %185, align 4, !tbaa !14
  %187 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %188 = getelementptr inbounds [4 x [4 x float]], ptr %187, i64 0, i64 1
  %189 = getelementptr inbounds [4 x float], ptr %188, i64 0, i64 2
  %190 = load float, ptr %189, align 4, !tbaa !14
  %191 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %182, float noundef %186, float noundef %190, float noundef 0.000000e+00)
  %192 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 0
  %193 = extractvalue { <2 x float>, <2 x float> } %191, 0
  store <2 x float> %193, ptr %192, align 4
  %194 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 1
  %195 = extractvalue { <2 x float>, <2 x float> } %191, 1
  store <2 x float> %195, ptr %194, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #10
  %196 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 3.000000e+00)
  %197 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, 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 %25, 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 %26) #10
  %201 = 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)
  %202 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, 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 %26, i32 0, i32 1
  %205 = extractvalue { <2 x float>, <2 x float> } %201, 1
  store <2 x float> %205, ptr %204, align 4
  %206 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %25, i32 0, i32 0
  %207 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %26, i32 0, i32 0
  %208 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %24, i32 0, i32 0
  %209 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %21, i32 0, i32 0
  %210 = getelementptr inbounds [16 x float], ptr %209, i64 0, i64 0
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %206, ptr noundef %207, ptr noundef %208, ptr noundef %210)
  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
  %211 = load <2 x float>, ptr %27, align 4
  %212 = 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 17), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 18), <2 x float> %211, <2 x float> %212)
  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)
  %213 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition acquire, align 8
  %214 = icmp eq i8 %213, 0
  br i1 %214, label %215, label %229, !prof !26

215:                                              ; preds = %5
  %216 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #10
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %218, label %229

218:                                              ; preds = %215
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, float noundef 7.500000e-01, float noundef 7.500000e-01)
          to label %219 unwind label %251

219:                                              ; preds = %218
  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 %220 unwind label %251

220:                                              ; preds = %219
  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 %221 unwind label %251

221:                                              ; preds = %220
  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 %222 unwind label %251

222:                                              ; preds = %221
  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 %223 unwind label %251

223:                                              ; preds = %222
  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 %224 unwind label %251

224:                                              ; preds = %223
  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 %225 unwind label %251

225:                                              ; preds = %224
  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 %226 unwind label %251

226:                                              ; preds = %225
  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 %227 unwind label %251

227:                                              ; preds = %226
  %228 = call ptr @llvm.invariant.start.p0(i64 72, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition)
  call void @__cxa_guard_release(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #10
  br label %229

229:                                              ; preds = %227, %215, %5
  %230 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize acquire, align 8
  %231 = icmp eq i8 %230, 0
  br i1 %231, label %232, label %246, !prof !26

232:                                              ; preds = %229
  %233 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #10
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %235, label %246

235:                                              ; preds = %232
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, float noundef 2.500000e-01, float noundef 2.500000e-01)
          to label %236 unwind label %255

236:                                              ; preds = %235
  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 %237 unwind label %255

237:                                              ; preds = %236
  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 %238 unwind label %255

238:                                              ; preds = %237
  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 %239 unwind label %255

239:                                              ; preds = %238
  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 %240 unwind label %255

240:                                              ; preds = %239
  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 %241 unwind label %255

241:                                              ; preds = %240
  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 %242 unwind label %255

242:                                              ; preds = %241
  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 %243 unwind label %255

243:                                              ; preds = %242
  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 %244 unwind label %255

244:                                              ; preds = %243
  %245 = call ptr @llvm.invariant.start.p0(i64 72, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize)
  call void @__cxa_guard_release(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #10
  br label %246

246:                                              ; preds = %244, %232, %229
  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 %247

247:                                              ; preds = %781, %246
  %248 = load i32, ptr %33, align 4, !tbaa !11
  %249 = icmp slt i32 %248, 2
  br i1 %249, label %259, label %250

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

251:                                              ; preds = %226, %225, %224, %223, %222, %221, %220, %219, %218
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %30, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %31, align 4
  call void @__cxa_guard_abort(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #10
  br label %938

255:                                              ; preds = %243, %242, %241, %240, %239, %238, %237, %236, %235
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %30, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %31, align 4
  call void @__cxa_guard_abort(ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #10
  br label %938

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

260:                                              ; preds = %777, %259
  %261 = load i32, ptr %35, align 4, !tbaa !11
  %262 = icmp slt i32 %261, 6
  br i1 %262, label %264, label %263

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

264:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %265 = load i32, ptr %35, align 4, !tbaa !11
  %266 = srem i32 %265, 3
  store i32 %266, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  %267 = load i32, ptr %36, align 4, !tbaa !11
  %268 = add nsw i32 %267, 1
  %269 = srem i32 %268, 3
  store i32 %269, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #10
  %270 = load i32, ptr %36, align 4, !tbaa !11
  %271 = add nsw i32 %270, 2
  %272 = srem i32 %271, 3
  store i32 %272, ptr %38, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  %273 = load i32, ptr %35, align 4, !tbaa !11
  %274 = icmp sgt i32 %273, 2
  %275 = zext i1 %274 to i64
  %276 = select i1 %274, float -1.000000e+00, float 1.000000e+00
  store float %276, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #10
  %277 = load i32, ptr %37, align 4, !tbaa !11
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %278
  %280 = load float, ptr %39, align 4, !tbaa !9
  %281 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %279, float noundef %280)
  %282 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %40, i32 0, i32 0
  %283 = extractvalue { <2 x float>, <2 x float> } %281, 0
  store <2 x float> %283, ptr %282, align 4
  %284 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %40, i32 0, i32 1
  %285 = extractvalue { <2 x float>, <2 x float> } %281, 1
  store <2 x float> %285, ptr %284, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #10
  %286 = load i32, ptr %38, align 4, !tbaa !11
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %287
  %289 = load float, ptr %39, align 4, !tbaa !9
  %290 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %288, float noundef %289)
  %291 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 0
  %292 = extractvalue { <2 x float>, <2 x float> } %290, 0
  store <2 x float> %292, ptr %291, align 4
  %293 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 1
  %294 = extractvalue { <2 x float>, <2 x float> } %290, 1
  store <2 x float> %294, ptr %293, 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
  %295 = load i32, ptr %36, align 4, !tbaa !11
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %296
  %298 = load float, ptr %39, align 4, !tbaa !9
  %299 = fneg float %298
  %300 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %297, float noundef %299)
  %301 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %44, i32 0, i32 0
  %302 = extractvalue { <2 x float>, <2 x float> } %300, 0
  store <2 x float> %302, ptr %301, align 4
  %303 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %44, i32 0, i32 1
  %304 = extractvalue { <2 x float>, <2 x float> } %300, 1
  store <2 x float> %304, ptr %303, align 4
  %305 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %40)
  %306 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, 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 %43, 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) %43, ptr noundef nonnull align 4 dereferenceable(16) %41)
  %311 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %42, 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 %42, i32 0, i32 1
  %314 = extractvalue { <2 x float>, <2 x float> } %310, 1
  store <2 x float> %314, ptr %313, 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 16, ptr %45) #10
  %315 = load i32, ptr %36, align 4, !tbaa !11
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %316
  %318 = load float, ptr %39, align 4, !tbaa !9
  %319 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %317, float noundef %318)
  %320 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %45, i32 0, i32 0
  %321 = extractvalue { <2 x float>, <2 x float> } %319, 0
  store <2 x float> %321, ptr %320, align 4
  %322 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %45, i32 0, i32 1
  %323 = extractvalue { <2 x float>, <2 x float> } %319, 1
  store <2 x float> %323, ptr %322, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 4 %45, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #10
  %324 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef 5.000000e-01)
  %325 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 0
  %326 = extractvalue { <2 x float>, <2 x float> } %324, 0
  store <2 x float> %326, ptr %325, align 4
  %327 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 1
  %328 = extractvalue { <2 x float>, <2 x float> } %324, 1
  store <2 x float> %328, ptr %327, align 4
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %46, ptr noundef nonnull align 4 dereferenceable(64) %21)
  %329 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %46)
  %330 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %48, i32 0, i32 0
  %331 = extractvalue { <2 x float>, <2 x float> } %329, 0
  store <2 x float> %331, ptr %330, align 4
  %332 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %48, i32 0, i32 1
  %333 = extractvalue { <2 x float>, <2 x float> } %329, 1
  store <2 x float> %333, ptr %332, align 4
  call void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %47, ptr noundef nonnull align 4 dereferenceable(64) %21)
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #10
  %334 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %47, ptr noundef nonnull align 4 dereferenceable(16) %46)
  %335 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 0
  %336 = extractvalue { <2 x float>, <2 x float> } %334, 0
  store <2 x float> %336, ptr %335, align 4
  %337 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 1
  %338 = extractvalue { <2 x float>, <2 x float> } %334, 1
  store <2 x float> %338, ptr %337, align 4
  %339 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %49, i32 0, i32 3
  %340 = load float, ptr %339, align 4, !tbaa !28
  %341 = fcmp ogt float %340, 0.000000e+00
  br i1 %341, label %342, label %343

342:                                              ; preds = %264
  store i32 7, ptr %34, align 4
  br label %774

343:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #10
  %344 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef 5.000000e-01)
  %345 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %51, i32 0, i32 0
  %346 = extractvalue { <2 x float>, <2 x float> } %344, 0
  store <2 x float> %346, ptr %345, align 4
  %347 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %51, i32 0, i32 1
  %348 = extractvalue { <2 x float>, <2 x float> } %344, 1
  store <2 x float> %348, ptr %347, align 4
  %349 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %51, ptr noundef nonnull align 4 dereferenceable(16) %45)
  %350 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %50, i32 0, i32 0
  %351 = extractvalue { <2 x float>, <2 x float> } %349, 0
  store <2 x float> %351, ptr %350, align 4
  %352 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %50, i32 0, i32 1
  %353 = extractvalue { <2 x float>, <2 x float> } %349, 1
  store <2 x float> %353, ptr %352, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  %354 = call noundef float @_ZN8ImGuizmoL17IntersectRayPlaneERKNS_5vec_tES2_S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 17), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 18), ptr noundef nonnull align 4 dereferenceable(16) %50)
  store float %354, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #10
  %355 = load float, ptr %52, align 4, !tbaa !9
  %356 = 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 18), float noundef %355)
  %357 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %55, i32 0, i32 0
  %358 = extractvalue { <2 x float>, <2 x float> } %356, 0
  store <2 x float> %358, ptr %357, align 4
  %359 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %55, i32 0, i32 1
  %360 = extractvalue { <2 x float>, <2 x float> } %356, 1
  store <2 x float> %360, ptr %359, align 4
  %361 = 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 17), ptr noundef nonnull align 4 dereferenceable(16) %55)
  %362 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 0
  %363 = extractvalue { <2 x float>, <2 x float> } %361, 0
  store <2 x float> %363, ptr %362, align 4
  %364 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 1
  %365 = extractvalue { <2 x float>, <2 x float> } %361, 1
  store <2 x float> %365, ptr %364, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #10
  %366 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef 5.000000e-01)
  %367 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %56, 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 %56, i32 0, i32 1
  %370 = extractvalue { <2 x float>, <2 x float> } %366, 1
  store <2 x float> %370, ptr %369, align 4
  %371 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %54, ptr noundef nonnull align 4 dereferenceable(16) %56)
  %372 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 0
  %373 = extractvalue { <2 x float>, <2 x float> } %371, 0
  store <2 x float> %373, ptr %372, align 4
  %374 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 1
  %375 = extractvalue { <2 x float>, <2 x float> } %371, 1
  store <2 x float> %375, ptr %374, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  %376 = load i32, ptr %37, align 4, !tbaa !11
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %377
  %379 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %378, ptr noundef nonnull align 4 dereferenceable(16) %53)
  %380 = load float, ptr %39, align 4, !tbaa !9
  %381 = call float @llvm.fmuladd.f32(float %379, float %380, float 5.000000e-01)
  store float %381, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #10
  %382 = load i32, ptr %38, align 4, !tbaa !11
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %383
  %385 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %384, ptr noundef nonnull align 4 dereferenceable(16) %53)
  %386 = load float, ptr %39, align 4, !tbaa !9
  %387 = call float @llvm.fmuladd.f32(float %385, float %386, float 5.000000e-01)
  store float %387, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #10
  %388 = load i32, ptr %37, align 4, !tbaa !11
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %389
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %59, ptr align 16 %390, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #10
  %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
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 16 %393, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #10
  %394 = load i32, ptr %36, align 4, !tbaa !11
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %395
  %397 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %396, ptr noundef nonnull align 4 dereferenceable(16) %59)
  %398 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %62, i32 0, i32 0
  %399 = extractvalue { <2 x float>, <2 x float> } %397, 0
  store <2 x float> %399, ptr %398, align 4
  %400 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %62, i32 0, i32 1
  %401 = extractvalue { <2 x float>, <2 x float> } %397, 1
  store <2 x float> %401, ptr %400, align 4
  %402 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %62, ptr noundef nonnull align 4 dereferenceable(16) %60)
  %403 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %61, i32 0, i32 0
  %404 = extractvalue { <2 x float>, <2 x float> } %402, 0
  store <2 x float> %404, ptr %403, align 4
  %405 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %61, i32 0, i32 1
  %406 = extractvalue { <2 x float>, <2 x float> } %402, 1
  store <2 x float> %406, ptr %405, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #10
  store i32 0, ptr %63, align 4, !tbaa !11
  br label %407

407:                                              ; preds = %770, %343
  %408 = load i32, ptr %63, align 4, !tbaa !11
  %409 = icmp slt i32 %408, 9
  br i1 %409, label %411, label %410

410:                                              ; preds = %407
  store i32 8, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #10
  br label %773

411:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #10
  %412 = load i32, ptr %63, align 4, !tbaa !11
  %413 = srem i32 %412, 3
  %414 = sitofp i32 %413 to float
  %415 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %40, float noundef %414)
  %416 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %67, i32 0, i32 0
  %417 = extractvalue { <2 x float>, <2 x float> } %415, 0
  store <2 x float> %417, ptr %416, align 4
  %418 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %67, i32 0, i32 1
  %419 = extractvalue { <2 x float>, <2 x float> } %415, 1
  store <2 x float> %419, ptr %418, align 4
  %420 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %67)
  %421 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %66, i32 0, i32 0
  %422 = extractvalue { <2 x float>, <2 x float> } %420, 0
  store <2 x float> %422, ptr %421, align 4
  %423 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %66, i32 0, i32 1
  %424 = extractvalue { <2 x float>, <2 x float> } %420, 1
  store <2 x float> %424, ptr %423, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %68) #10
  %425 = load i32, ptr %63, align 4, !tbaa !11
  %426 = sdiv i32 %425, 3
  %427 = sitofp i32 %426 to float
  %428 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %41, float noundef %427)
  %429 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %68, 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 %68, i32 0, i32 1
  %432 = extractvalue { <2 x float>, <2 x float> } %428, 1
  store <2 x float> %432, ptr %431, align 4
  %433 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %66, ptr noundef nonnull align 4 dereferenceable(16) %68)
  %434 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %65, 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 %65, 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.start.p0(i64 16, ptr %69) #10
  %438 = 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)
  %439 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %69, i32 0, i32 0
  %440 = extractvalue { <2 x float>, <2 x float> } %438, 0
  store <2 x float> %440, ptr %439, align 4
  %441 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %69, i32 0, i32 1
  %442 = extractvalue { <2 x float>, <2 x float> } %438, 1
  store <2 x float> %442, ptr %441, align 4
  %443 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %65, ptr noundef nonnull align 4 dereferenceable(16) %69)
  %444 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %64, i32 0, i32 0
  %445 = extractvalue { <2 x float>, <2 x float> } %443, 0
  store <2 x float> %445, ptr %444, align 4
  %446 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %64, i32 0, i32 1
  %447 = extractvalue { <2 x float>, <2 x float> } %443, 1
  store <2 x float> %447, ptr %446, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #10
  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.start.p0(i64 8, ptr %70) #10
  %448 = load i32, ptr %63, align 4, !tbaa !11
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %449
  %451 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %450, float noundef 2.000000e+00)
  store <2 x float> %451, ptr %70, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %452 = load i32, ptr %63, align 4, !tbaa !11
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %453
  %455 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %454, float noundef 2.000000e+00)
  store <2 x float> %455, ptr %71, align 4
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #10
  %456 = getelementptr inbounds [4 x %struct.ImVec2], ptr %72, i32 0, i32 0
  %457 = getelementptr inbounds %struct.ImVec2, ptr %456, i64 4
  br label %458

458:                                              ; preds = %458, %411
  %459 = phi ptr [ %456, %411 ], [ %460, %458 ]
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %459)
  %460 = getelementptr inbounds %struct.ImVec2, ptr %459, i64 1
  %461 = icmp eq ptr %460, %457
  br i1 %461, label %462, label %458

462:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 64, ptr %73) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #10
  %463 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 0
  %464 = load float, ptr %463, align 4, !tbaa !23
  %465 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %59, float noundef %464)
  %466 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %74, i32 0, i32 0
  %467 = extractvalue { <2 x float>, <2 x float> } %465, 0
  store <2 x float> %467, ptr %466, align 4
  %468 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %74, i32 0, i32 1
  %469 = extractvalue { <2 x float>, <2 x float> } %465, 1
  store <2 x float> %469, ptr %468, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %75) #10
  %470 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 1
  %471 = load float, ptr %470, align 4, !tbaa !24
  %472 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %60, float noundef %471)
  %473 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %75, i32 0, i32 0
  %474 = extractvalue { <2 x float>, <2 x float> } %472, 0
  store <2 x float> %474, ptr %473, align 4
  %475 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %75, i32 0, i32 1
  %476 = extractvalue { <2 x float>, <2 x float> } %472, 1
  store <2 x float> %476, ptr %475, align 4
  %477 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %74, ptr noundef nonnull align 4 dereferenceable(16) %75)
  %478 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %73, i32 0, i32 0
  %479 = extractvalue { <2 x float>, <2 x float> } %477, 0
  store <2 x float> %479, ptr %478, align 16
  %480 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %73, i32 0, i32 1
  %481 = extractvalue { <2 x float>, <2 x float> } %477, 1
  store <2 x float> %481, ptr %480, align 8
  %482 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %73, i64 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #10
  %483 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 0
  %484 = load float, ptr %483, align 4, !tbaa !23
  %485 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %59, float noundef %484)
  %486 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %76, i32 0, i32 0
  %487 = extractvalue { <2 x float>, <2 x float> } %485, 0
  store <2 x float> %487, ptr %486, align 4
  %488 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %76, i32 0, i32 1
  %489 = extractvalue { <2 x float>, <2 x float> } %485, 1
  store <2 x float> %489, ptr %488, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %77) #10
  %490 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 1
  %491 = load float, ptr %490, align 4, !tbaa !24
  %492 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 1
  %493 = load float, ptr %492, align 4, !tbaa !24
  %494 = fadd float %491, %493
  %495 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %60, float noundef %494)
  %496 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %77, i32 0, i32 0
  %497 = extractvalue { <2 x float>, <2 x float> } %495, 0
  store <2 x float> %497, ptr %496, align 4
  %498 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %77, i32 0, i32 1
  %499 = extractvalue { <2 x float>, <2 x float> } %495, 1
  store <2 x float> %499, ptr %498, align 4
  %500 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %76, ptr noundef nonnull align 4 dereferenceable(16) %77)
  %501 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %482, i32 0, i32 0
  %502 = extractvalue { <2 x float>, <2 x float> } %500, 0
  store <2 x float> %502, ptr %501, align 16
  %503 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %482, i32 0, i32 1
  %504 = extractvalue { <2 x float>, <2 x float> } %500, 1
  store <2 x float> %504, ptr %503, align 8
  %505 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %73, i64 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %78) #10
  %506 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 0
  %507 = load float, ptr %506, align 4, !tbaa !23
  %508 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 0
  %509 = load float, ptr %508, align 4, !tbaa !23
  %510 = fadd float %507, %509
  %511 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %59, float noundef %510)
  %512 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %78, i32 0, i32 0
  %513 = extractvalue { <2 x float>, <2 x float> } %511, 0
  store <2 x float> %513, ptr %512, align 4
  %514 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %78, i32 0, i32 1
  %515 = extractvalue { <2 x float>, <2 x float> } %511, 1
  store <2 x float> %515, ptr %514, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %79) #10
  %516 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 1
  %517 = load float, ptr %516, align 4, !tbaa !24
  %518 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 1
  %519 = load float, ptr %518, align 4, !tbaa !24
  %520 = fadd float %517, %519
  %521 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %60, float noundef %520)
  %522 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %79, i32 0, i32 0
  %523 = extractvalue { <2 x float>, <2 x float> } %521, 0
  store <2 x float> %523, ptr %522, align 4
  %524 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %79, i32 0, i32 1
  %525 = extractvalue { <2 x float>, <2 x float> } %521, 1
  store <2 x float> %525, ptr %524, align 4
  %526 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %78, ptr noundef nonnull align 4 dereferenceable(16) %79)
  %527 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %505, i32 0, i32 0
  %528 = extractvalue { <2 x float>, <2 x float> } %526, 0
  store <2 x float> %528, ptr %527, align 16
  %529 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %505, i32 0, i32 1
  %530 = extractvalue { <2 x float>, <2 x float> } %526, 1
  store <2 x float> %530, ptr %529, align 8
  %531 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %73, i64 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %80) #10
  %532 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 0
  %533 = load float, ptr %532, align 4, !tbaa !23
  %534 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 0
  %535 = load float, ptr %534, align 4, !tbaa !23
  %536 = fadd float %533, %535
  %537 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %59, float noundef %536)
  %538 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %80, i32 0, i32 0
  %539 = extractvalue { <2 x float>, <2 x float> } %537, 0
  store <2 x float> %539, ptr %538, align 4
  %540 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %80, i32 0, i32 1
  %541 = extractvalue { <2 x float>, <2 x float> } %537, 1
  store <2 x float> %541, ptr %540, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %81) #10
  %542 = getelementptr inbounds %struct.ImVec2, ptr %70, i32 0, i32 1
  %543 = load float, ptr %542, align 4, !tbaa !24
  %544 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %60, float noundef %543)
  %545 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %81, i32 0, i32 0
  %546 = extractvalue { <2 x float>, <2 x float> } %544, 0
  store <2 x float> %546, ptr %545, align 4
  %547 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %81, i32 0, i32 1
  %548 = extractvalue { <2 x float>, <2 x float> } %544, 1
  store <2 x float> %548, ptr %547, align 4
  %549 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %80, ptr noundef nonnull align 4 dereferenceable(16) %81)
  %550 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %531, i32 0, i32 0
  %551 = extractvalue { <2 x float>, <2 x float> } %549, 0
  store <2 x float> %551, ptr %550, align 16
  %552 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %531, i32 0, i32 1
  %553 = extractvalue { <2 x float>, <2 x float> } %549, 1
  store <2 x float> %553, ptr %552, align 8
  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.end.p0(i64 16, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #10
  store i32 0, ptr %82, align 4, !tbaa !11
  br label %554

554:                                              ; preds = %584, %462
  %555 = load i32, ptr %82, align 4, !tbaa !11
  %556 = icmp ult i32 %555, 4
  br i1 %556, label %558, label %557

557:                                              ; preds = %554
  store i32 11, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #10
  br label %587

558:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %84) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %85) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #10
  %559 = load i32, ptr %82, align 4, !tbaa !11
  %560 = zext i32 %559 to i64
  %561 = getelementptr inbounds [4 x %"struct.ImGuizmo::vec_t"], ptr %73, i64 0, i64 %560
  %562 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %561, ptr noundef nonnull align 4 dereferenceable(16) %61)
  %563 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %86, i32 0, i32 0
  %564 = extractvalue { <2 x float>, <2 x float> } %562, 0
  store <2 x float> %564, ptr %563, align 4
  %565 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %86, i32 0, i32 1
  %566 = extractvalue { <2 x float>, <2 x float> } %562, 1
  store <2 x float> %566, ptr %565, align 4
  %567 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %86, float noundef 5.000000e-01)
  %568 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %85, i32 0, i32 0
  %569 = extractvalue { <2 x float>, <2 x float> } %567, 0
  store <2 x float> %569, ptr %568, align 4
  %570 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %85, i32 0, i32 1
  %571 = extractvalue { <2 x float>, <2 x float> } %567, 1
  store <2 x float> %571, ptr %570, align 4
  %572 = load float, ptr %39, align 4, !tbaa !9
  %573 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %85, float noundef %572)
  %574 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %84, i32 0, i32 0
  %575 = extractvalue { <2 x float>, <2 x float> } %573, 0
  store <2 x float> %575, ptr %574, align 4
  %576 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %84, i32 0, i32 1
  %577 = extractvalue { <2 x float>, <2 x float> } %573, 1
  store <2 x float> %577, ptr %576, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %87, ptr align 4 %6, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %88, ptr align 4 %7, i64 8, i1 false), !tbaa.struct !25
  %578 = load <2 x float>, ptr %87, align 4
  %579 = load <2 x float>, ptr %88, align 4
  %580 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %84, ptr noundef nonnull align 4 dereferenceable(64) %29, <2 x float> %578, <2 x float> %579)
  store <2 x float> %580, ptr %83, align 4
  %581 = load i32, ptr %82, align 4, !tbaa !11
  %582 = zext i32 %581 to i64
  %583 = getelementptr inbounds [4 x %struct.ImVec2], ptr %72, i64 0, i64 %582
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %583, ptr align 4 %83, i64 8, i1 false), !tbaa.struct !25
  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 8, ptr %83) #10
  br label %584

584:                                              ; preds = %558
  %585 = load i32, ptr %82, align 4, !tbaa !11
  %586 = add i32 %585, 1
  store i32 %586, ptr %82, align 4, !tbaa !11
  br label %554, !llvm.loop !29

587:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 16, ptr %89) #10
  %588 = load i32, ptr %63, align 4, !tbaa !11
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %589
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %89, ptr align 8 %590, i64 8, i1 false), !tbaa.struct !25
  %591 = getelementptr inbounds %struct.ImVec2, ptr %89, i64 1
  %592 = load i32, ptr %63, align 4, !tbaa !11
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %593
  %595 = load i32, ptr %63, align 4, !tbaa !11
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %596
  %598 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %594, ptr noundef nonnull align 4 dereferenceable(8) %597)
  store <2 x float> %598, ptr %591, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %90) #10
  %599 = load float, ptr %57, align 4, !tbaa !9
  %600 = getelementptr inbounds [2 x %struct.ImVec2], ptr %89, i64 0, i64 0
  %601 = getelementptr inbounds %struct.ImVec2, ptr %600, i32 0, i32 0
  %602 = load float, ptr %601, align 16, !tbaa !23
  %603 = fcmp ogt float %599, %602
  br i1 %603, label %604, label %622

604:                                              ; preds = %587
  %605 = load float, ptr %57, align 4, !tbaa !9
  %606 = getelementptr inbounds [2 x %struct.ImVec2], ptr %89, i64 0, i64 1
  %607 = getelementptr inbounds %struct.ImVec2, ptr %606, i32 0, i32 0
  %608 = load float, ptr %607, align 8, !tbaa !23
  %609 = fcmp olt float %605, %608
  br i1 %609, label %610, label %622

610:                                              ; preds = %604
  %611 = load float, ptr %58, align 4, !tbaa !9
  %612 = getelementptr inbounds [2 x %struct.ImVec2], ptr %89, i64 0, i64 0
  %613 = getelementptr inbounds %struct.ImVec2, ptr %612, i32 0, i32 1
  %614 = load float, ptr %613, align 4, !tbaa !24
  %615 = fcmp ogt float %611, %614
  br i1 %615, label %616, label %622

616:                                              ; preds = %610
  %617 = load float, ptr %58, align 4, !tbaa !9
  %618 = getelementptr inbounds [2 x %struct.ImVec2], ptr %89, i64 0, i64 1
  %619 = getelementptr inbounds %struct.ImVec2, ptr %618, i32 0, i32 1
  %620 = load float, ptr %619, align 4, !tbaa !24
  %621 = fcmp olt float %617, %620
  br label %622

622:                                              ; preds = %616, %610, %604, %587
  %623 = phi i1 [ false, %610 ], [ false, %604 ], [ false, %587 ], [ %621, %616 ]
  %624 = zext i1 %623 to i8
  store i8 %624, ptr %90, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #10
  %625 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %64, i32 0, i32 0
  %626 = load float, ptr %625, align 4, !tbaa !32
  %627 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %64, i32 0, i32 1
  %628 = load float, ptr %627, align 4, !tbaa !33
  %629 = fmul float %628, 3.000000e+00
  %630 = call float @llvm.fmuladd.f32(float %626, float 9.000000e+00, float %629)
  %631 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %64, i32 0, i32 2
  %632 = load float, ptr %631, align 4, !tbaa !34
  %633 = fadd float %630, %632
  %634 = fptosi float %633 to i32
  store i32 %634, ptr %91, align 4, !tbaa !11
  %635 = load i32, ptr %91, align 4, !tbaa !11
  %636 = icmp slt i32 %635, 27
  br i1 %636, label %637, label %638

637:                                              ; preds = %622
  br label %640

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

639:                                              ; No predecessors!
  br label %640

640:                                              ; preds = %639, %637
  %641 = load i8, ptr %90, align 1, !tbaa !31, !range !35, !noundef !36
  %642 = trunc i8 %641 to i1
  br i1 %642, label %643, label %647

643:                                              ; preds = %640
  %644 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %645 = trunc i8 %644 to i1
  %646 = xor i1 %645, true
  br label %647

647:                                              ; preds = %643, %640
  %648 = phi i1 [ false, %640 ], [ %646, %643 ]
  %649 = zext i1 %648 to i32
  %650 = load i32, ptr %91, align 4, !tbaa !11
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds [27 x i8], ptr %32, i64 0, i64 %651
  %653 = load i8, ptr %652, align 1, !tbaa !31, !range !35, !noundef !36
  %654 = trunc i8 %653 to i1
  %655 = zext i1 %654 to i32
  %656 = or i32 %655, %649
  %657 = icmp ne i32 %656, 0
  %658 = zext i1 %657 to i8
  store i8 %658, ptr %652, align 1, !tbaa !31
  %659 = load i32, ptr %33, align 4, !tbaa !11
  %660 = icmp ne i32 %659, 0
  br i1 %660, label %661, label %769

661:                                              ; preds = %647
  %662 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  %663 = getelementptr inbounds [4 x %struct.ImVec2], ptr %72, i64 0, i64 0
  %664 = load i32, ptr %36, align 4, !tbaa !11
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds [3 x i32], ptr @_ZN8ImGuizmoL14directionColorE, i64 0, i64 %665
  %667 = load i32, ptr %666, align 4, !tbaa !11
  %668 = or i32 %667, -2139062144
  %669 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !31, !range !35, !noundef !36
  %670 = trunc i8 %669 to i1
  %671 = zext i1 %670 to i64
  %672 = select i1 %670, i32 526344, i32 0
  %673 = or i32 %668, %672
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %662, ptr noundef %663, i32 noundef 4, i32 noundef %673)
  %674 = load i32, ptr %91, align 4, !tbaa !11
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds [27 x i8], ptr %32, i64 0, i64 %675
  %677 = load i8, ptr %676, align 1, !tbaa !31, !range !35, !noundef !36
  %678 = trunc i8 %677 to i1
  br i1 %678, label %679, label %768

679:                                              ; preds = %661
  %680 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !15
  %681 = getelementptr inbounds [4 x %struct.ImVec2], ptr %72, i64 0, i64 0
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %680, ptr noundef %681, i32 noundef 4, i32 noundef -2141150992)
  %682 = load ptr, ptr %14, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.ImGuiIO, ptr %682, i32 0, i32 53
  %684 = getelementptr inbounds [5 x i8], ptr %683, i64 0, i64 0
  %685 = load i8, ptr %684, align 4, !tbaa !31, !range !35, !noundef !36
  %686 = trunc i8 %685 to i1
  br i1 %686, label %757, label %687

687:                                              ; preds = %679
  %688 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %689 = trunc i8 %688 to i1
  br i1 %689, label %757, label %690

690:                                              ; preds = %687
  %691 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31, !range !35, !noundef !36
  %692 = trunc i8 %691 to i1
  br i1 %692, label %693, label %757

693:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #10
  %694 = load i32, ptr %91, align 4, !tbaa !11
  %695 = sdiv i32 %694, 9
  store i32 %695, ptr %92, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #10
  %696 = load i32, ptr %91, align 4, !tbaa !11
  %697 = load i32, ptr %92, align 4, !tbaa !11
  %698 = mul nsw i32 %697, 9
  %699 = sub nsw i32 %696, %698
  %700 = sdiv i32 %699, 3
  store i32 %700, ptr %93, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #10
  %701 = load i32, ptr %91, align 4, !tbaa !11
  %702 = srem i32 %701, 3
  store i32 %702, ptr %94, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %95) #10
  %703 = load i32, ptr %92, align 4, !tbaa !11
  %704 = sitofp i32 %703 to float
  %705 = fsub float 1.000000e+00, %704
  %706 = load i32, ptr %93, align 4, !tbaa !11
  %707 = sitofp i32 %706 to float
  %708 = fsub float 1.000000e+00, %707
  %709 = load i32, ptr %94, align 4, !tbaa !11
  %710 = sitofp i32 %709 to float
  %711 = fsub float 1.000000e+00, %710
  %712 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %705, float noundef %708, float noundef %711, float noundef 0.000000e+00)
  %713 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %95, i32 0, i32 0
  %714 = extractvalue { <2 x float>, <2 x float> } %712, 0
  store <2 x float> %714, ptr %713, align 4
  %715 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %95, i32 0, i32 1
  %716 = extractvalue { <2 x float>, <2 x float> } %712, 1
  store <2 x float> %716, ptr %715, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr align 4 %95, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #10
  %717 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir)
  %718 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %96, i32 0, i32 0
  %719 = extractvalue { <2 x float>, <2 x float> } %717, 0
  store <2 x float> %719, ptr %718, align 4
  %720 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %96, i32 0, i32 1
  %721 = extractvalue { <2 x float>, <2 x float> } %717, 1
  store <2 x float> %721, ptr %720, align 4
  %722 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %11)
  %723 = call float @llvm.fabs.f32(float %722)
  %724 = fcmp ogt float %723, 0x3FEFAE1480000000
  br i1 %724, label %725, label %755

725:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 16, ptr %97) #10
  %726 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %727 = getelementptr inbounds %struct.anon, ptr %726, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %97, ptr align 4 %727, i64 16, i1 false), !tbaa.struct !27
  %728 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %97, i32 0, i32 0
  %729 = load float, ptr %728, align 4, !tbaa !32
  %730 = call float @llvm.fabs.f32(float %729)
  %731 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %97, i32 0, i32 2
  %732 = load float, ptr %731, align 4, !tbaa !34
  %733 = call float @llvm.fabs.f32(float %732)
  %734 = fcmp ogt float %730, %733
  br i1 %734, label %735, label %737

735:                                              ; preds = %725
  %736 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %97, i32 0, i32 2
  store float 0.000000e+00, ptr %736, align 4, !tbaa !34
  br label %739

737:                                              ; preds = %725
  %738 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %97, i32 0, i32 0
  store float 0.000000e+00, ptr %738, align 4, !tbaa !32
  br label %739

739:                                              ; preds = %737, %735
  %740 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %97)
  %741 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %98, i32 0, i32 0
  %742 = extractvalue { <2 x float>, <2 x float> } %740, 0
  store <2 x float> %742, ptr %741, align 4
  %743 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %98, i32 0, i32 1
  %744 = extractvalue { <2 x float>, <2 x float> } %740, 1
  store <2 x float> %744, ptr %743, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %99) #10
  %745 = 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) %97)
  %746 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %99, i32 0, i32 0
  %747 = extractvalue { <2 x float>, <2 x float> } %745, 0
  store <2 x float> %747, ptr %746, align 4
  %748 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %99, i32 0, i32 1
  %749 = extractvalue { <2 x float>, <2 x float> } %745, 1
  store <2 x float> %749, ptr %748, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, ptr align 4 %99, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 16, ptr %99) #10
  %750 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp)
  %751 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %100, i32 0, i32 0
  %752 = extractvalue { <2 x float>, <2 x float> } %750, 0
  store <2 x float> %752, ptr %751, align 4
  %753 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %100, i32 0, i32 1
  %754 = extractvalue { <2 x float>, <2 x float> } %750, 1
  store <2 x float> %754, ptr %753, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %97) #10
  br label %756

755:                                              ; preds = %693
  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 %756

756:                                              ; preds = %755, %739
  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 %94) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #10
  br label %757

757:                                              ; preds = %756, %690, %687, %679
  %758 = load ptr, ptr %14, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.ImGuiIO, ptr %758, i32 0, i32 53
  %760 = getelementptr inbounds [5 x i8], ptr %759, i64 0, i64 0
  %761 = load i8, ptr %760, align 4, !tbaa !31, !range !35, !noundef !36
  %762 = trunc i8 %761 to i1
  br i1 %762, label %763, label %767

763:                                              ; preds = %757
  %764 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %765 = trunc i8 %764 to i1
  br i1 %765, label %767, label %766

766:                                              ; preds = %763
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31
  br label %767

767:                                              ; preds = %766, %763, %757
  br label %768

768:                                              ; preds = %767, %661
  br label %769

769:                                              ; preds = %768, %647
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #10
  br label %770

770:                                              ; preds = %769
  %771 = load i32, ptr %63, align 4, !tbaa !11
  %772 = add nsw i32 %771, 1
  store i32 %772, ptr %63, align 4, !tbaa !11
  br label %407, !llvm.loop !37

773:                                              ; preds = %410
  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.end.p0(i64 4, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #10
  store i32 0, ptr %34, align 4
  br label %774

774:                                              ; preds = %773, %342
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #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.end.p0(i64 16, 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
  %775 = load i32, ptr %34, align 4
  switch i32 %775, label %944 [
    i32 0, label %776
    i32 7, label %777
  ]

776:                                              ; preds = %774
  br label %777

777:                                              ; preds = %776, %774
  %778 = load i32, ptr %35, align 4, !tbaa !11
  %779 = add nsw i32 %778, 1
  store i32 %779, ptr %35, align 4, !tbaa !11
  br label %260, !llvm.loop !38

780:                                              ; preds = %263
  br label %781

781:                                              ; preds = %780
  %782 = load i32, ptr %33, align 4, !tbaa !11
  %783 = add nsw i32 %782, 1
  store i32 %783, ptr %33, align 4, !tbaa !11
  br label %247, !llvm.loop !39

784:                                              ; preds = %250
  %785 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  %786 = icmp ne i32 %785, 0
  br i1 %786, label %787, label %819

787:                                              ; preds = %784
  %788 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  %789 = add nsw i32 %788, -1
  store i32 %789, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %101) #10
  %790 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %791 = getelementptr inbounds %struct.anon, ptr %790, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %101, ptr align 4 %791, i64 16, i1 false), !tbaa.struct !27
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %101, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, float noundef 0x3FC99999A0000000)
  %792 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %101)
  %793 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %102, i32 0, i32 0
  %794 = extractvalue { <2 x float>, <2 x float> } %792, 0
  store <2 x float> %794, ptr %793, align 4
  %795 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %102, i32 0, i32 1
  %796 = extractvalue { <2 x float>, <2 x float> } %792, 1
  store <2 x float> %796, ptr %795, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %103) #10
  %797 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %798 = getelementptr inbounds %struct.anon, ptr %797, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %103, ptr align 4 %798, i64 16, i1 false), !tbaa.struct !27
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %103, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, float noundef 0x3FD3333340000000)
  %799 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %103)
  %800 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %104, i32 0, i32 0
  %801 = extractvalue { <2 x float>, <2 x float> } %799, 0
  store <2 x float> %801, ptr %800, align 4
  %802 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %104, i32 0, i32 1
  %803 = extractvalue { <2 x float>, <2 x float> } %799, 1
  store <2 x float> %803, ptr %802, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %103, ptr align 4 @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 16, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %105) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %106) #10
  %804 = load float, ptr %9, align 4, !tbaa !9
  %805 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %101, float noundef %804)
  %806 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %106, i32 0, i32 0
  %807 = extractvalue { <2 x float>, <2 x float> } %805, 0
  store <2 x float> %807, ptr %806, align 4
  %808 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %106, i32 0, i32 1
  %809 = extractvalue { <2 x float>, <2 x float> } %805, 1
  store <2 x float> %809, ptr %808, align 4
  %810 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %106)
  %811 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %105, i32 0, i32 0
  %812 = extractvalue { <2 x float>, <2 x float> } %810, 0
  store <2 x float> %812, ptr %811, align 4
  %813 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %105, i32 0, i32 1
  %814 = extractvalue { <2 x float>, <2 x float> } %810, 1
  store <2 x float> %814, ptr %813, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %106) #10
  %815 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %105, i32 0, i32 0
  %816 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %17, i32 0, i32 0
  %817 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %103, i32 0, i32 0
  %818 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %815, ptr noundef %816, ptr noundef %817, ptr noundef %818)
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %103) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %101) #10
  br label %819

819:                                              ; preds = %787, %784
  call void @llvm.lifetime.start.p0(i64 16, ptr %107) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #10
  %820 = 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> %820, ptr %108, align 4
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %107, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %108)
  %821 = load ptr, ptr %14, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.ImGuiIO, ptr %821, i32 0, i32 52
  %823 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %107, ptr noundef nonnull align 4 dereferenceable(8) %822)
  %824 = zext i1 %823 to i8
  store i8 %824, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #10
  %825 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %826 = trunc i8 %825 to i1
  br i1 %826, label %851, label %827

827:                                              ; preds = %819
  %828 = load ptr, ptr %14, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.ImGuiIO, ptr %828, i32 0, i32 53
  %830 = getelementptr inbounds [5 x i8], ptr %829, i64 0, i64 0
  %831 = load i8, ptr %830, align 4, !tbaa !31, !range !35, !noundef !36
  %832 = trunc i8 %831 to i1
  br i1 %832, label %833, label %851

833:                                              ; preds = %827
  %834 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !31, !range !35, !noundef !36
  %835 = trunc i8 %834 to i1
  br i1 %835, label %836, label %851

836:                                              ; preds = %833
  %837 = load ptr, ptr %14, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.ImGuiIO, ptr %837, i32 0, i32 49
  %839 = getelementptr inbounds %struct.ImVec2, ptr %838, i32 0, i32 0
  %840 = load float, ptr %839, align 8, !tbaa !40
  %841 = call float @llvm.fabs.f32(float %840)
  %842 = fcmp ogt float %841, 0.000000e+00
  br i1 %842, label %850, label %843

843:                                              ; preds = %836
  %844 = load ptr, ptr %14, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.ImGuiIO, ptr %844, i32 0, i32 49
  %846 = getelementptr inbounds %struct.ImVec2, ptr %845, i32 0, i32 1
  %847 = load float, ptr %846, align 4, !tbaa !44
  %848 = call float @llvm.fabs.f32(float %847)
  %849 = fcmp ogt float %848, 0.000000e+00
  br i1 %849, label %850, label %851

850:                                              ; preds = %843, %836
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !31
  br label %862

851:                                              ; preds = %843, %833, %827, %819
  %852 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %853 = trunc i8 %852 to i1
  br i1 %853, label %854, label %861

854:                                              ; preds = %851
  %855 = load ptr, ptr %14, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.ImGuiIO, ptr %855, i32 0, i32 53
  %857 = getelementptr inbounds [5 x i8], ptr %856, i64 0, i64 0
  %858 = load i8, ptr %857, align 4, !tbaa !31, !range !35, !noundef !36
  %859 = trunc i8 %858 to i1
  br i1 %859, label %861, label %860

860:                                              ; preds = %854
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31
  br label %861

861:                                              ; preds = %860, %854, %851
  br label %862

862:                                              ; preds = %861, %850
  %863 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !31, !range !35, !noundef !36
  %864 = trunc i8 %863 to i1
  br i1 %864, label %865, label %932

865:                                              ; preds = %862
  call void @llvm.lifetime.start.p0(i64 64, ptr %109) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %109)
  call void @llvm.lifetime.start.p0(i64 64, ptr %110) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %110)
  call void @llvm.lifetime.start.p0(i64 64, ptr %111) #10
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %111)
  %866 = load ptr, ptr %14, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.ImGuiIO, ptr %866, i32 0, i32 49
  %868 = getelementptr inbounds %struct.ImVec2, ptr %867, i32 0, i32 0
  %869 = load float, ptr %868, align 8, !tbaa !40
  %870 = fneg float %869
  %871 = fmul float %870, 0x3F847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %109, ptr noundef nonnull align 4 dereferenceable(16) %11, float noundef %871)
  %872 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %873 = getelementptr inbounds %struct.anon, ptr %872, i32 0, i32 0
  %874 = load ptr, ptr %14, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.ImGuiIO, ptr %874, i32 0, i32 49
  %876 = getelementptr inbounds %struct.ImVec2, ptr %875, i32 0, i32 1
  %877 = load float, ptr %876, align 4, !tbaa !44
  %878 = fneg float %877
  %879 = fmul float %878, 0x3F847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %110, ptr noundef nonnull align 4 dereferenceable(16) %873, float noundef %879)
  call void @llvm.lifetime.start.p0(i64 64, ptr %112) #10
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind writable sret(%"struct.ImGuizmo::matrix_t") align 4 %112, ptr noundef nonnull align 4 dereferenceable(64) %109, ptr noundef nonnull align 4 dereferenceable(64) %110)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %111, ptr align 4 %112, i64 64, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 64, ptr %112) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %113) #10
  %880 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %881 = getelementptr inbounds %struct.anon, ptr %880, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %113, ptr align 4 %881, i64 16, i1 false), !tbaa.struct !27
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %113, ptr noundef nonnull align 4 dereferenceable(64) %111)
  %882 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %113)
  %883 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %114, i32 0, i32 0
  %884 = extractvalue { <2 x float>, <2 x float> } %882, 0
  store <2 x float> %884, ptr %883, align 4
  %885 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %114, i32 0, i32 1
  %886 = extractvalue { <2 x float>, <2 x float> } %882, 1
  store <2 x float> %886, ptr %885, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %115) #10
  %887 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %16, i32 0, i32 0
  %888 = getelementptr inbounds %struct.anon, ptr %887, i32 0, i32 0
  %889 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %888, ptr noundef nonnull align 4 dereferenceable(16) %11)
  %890 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %115, 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 %115, i32 0, i32 1
  %893 = extractvalue { <2 x float>, <2 x float> } %889, 1
  store <2 x float> %893, ptr %892, align 4
  %894 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %115, i32 0, i32 1
  store float 0.000000e+00, ptr %894, align 4, !tbaa !33
  %895 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %115)
  %896 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %116, i32 0, i32 0
  %897 = extractvalue { <2 x float>, <2 x float> } %895, 0
  store <2 x float> %897, ptr %896, align 4
  %898 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %116, i32 0, i32 1
  %899 = extractvalue { <2 x float>, <2 x float> } %895, 1
  store <2 x float> %899, ptr %898, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %117) #10
  %900 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %115, ptr noundef nonnull align 4 dereferenceable(16) %113)
  store float %900, ptr %117, align 4, !tbaa !9
  %901 = load float, ptr %117, align 4, !tbaa !9
  %902 = fcmp olt float %901, 0.000000e+00
  br i1 %902, label %903, label %916

903:                                              ; preds = %865
  call void @llvm.lifetime.start.p0(i64 16, ptr %118) #10
  %904 = load float, ptr %117, align 4, !tbaa !9
  %905 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %115, float noundef %904)
  %906 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %118, i32 0, i32 0
  %907 = extractvalue { <2 x float>, <2 x float> } %905, 0
  store <2 x float> %907, ptr %906, align 4
  %908 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %118, i32 0, i32 1
  %909 = extractvalue { <2 x float>, <2 x float> } %905, 1
  store <2 x float> %909, ptr %908, align 4
  %910 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %113, ptr noundef nonnull align 4 dereferenceable(16) %118)
  call void @llvm.lifetime.end.p0(i64 16, ptr %118) #10
  %911 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %113)
  %912 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %119, i32 0, i32 0
  %913 = extractvalue { <2 x float>, <2 x float> } %911, 0
  store <2 x float> %913, ptr %912, align 4
  %914 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %119, i32 0, i32 1
  %915 = extractvalue { <2 x float>, <2 x float> } %911, 1
  store <2 x float> %915, ptr %914, align 4
  br label %916

916:                                              ; preds = %903, %865
  call void @llvm.lifetime.start.p0(i64 16, ptr %120) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %121) #10
  %917 = load float, ptr %9, align 4, !tbaa !9
  %918 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %113, float noundef %917)
  %919 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %121, i32 0, i32 0
  %920 = extractvalue { <2 x float>, <2 x float> } %918, 0
  store <2 x float> %920, ptr %919, align 4
  %921 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %121, i32 0, i32 1
  %922 = extractvalue { <2 x float>, <2 x float> } %918, 1
  store <2 x float> %922, ptr %921, align 4
  %923 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %121)
  %924 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %120, i32 0, i32 0
  %925 = extractvalue { <2 x float>, <2 x float> } %923, 0
  store <2 x float> %925, ptr %924, align 4
  %926 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %120, i32 0, i32 1
  %927 = extractvalue { <2 x float>, <2 x float> } %923, 1
  store <2 x float> %927, ptr %926, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %121) #10
  %928 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %120, i32 0, i32 0
  %929 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %17, i32 0, i32 0
  %930 = getelementptr inbounds %"struct.ImGuizmo::vec_t", ptr %11, i32 0, i32 0
  %931 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef %928, ptr noundef %929, ptr noundef %930, ptr noundef %931)
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %115) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %113) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %111) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %110) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %109) #10
  br label %932

932:                                              ; preds = %916, %862
  %933 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %12, i32 0, i32 0
  %934 = getelementptr inbounds [16 x float], ptr %933, i64 0, i64 0
  %935 = getelementptr inbounds %"struct.ImGuizmo::matrix_t", ptr %13, i32 0, i32 0
  %936 = getelementptr inbounds [16 x float], ptr %935, i64 0, i64 0
  %937 = 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 %934, ptr noundef %936, ptr noundef getelementptr inbounds (%"struct.ImGuizmo::Context", ptr @_ZN8ImGuizmoL8gContextE, i32 0, i32 7), i32 noundef %937)
  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

938:                                              ; preds = %255, %251
  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 %939

939:                                              ; preds = %938
  %940 = load ptr, ptr %30, align 8
  %941 = load i32, ptr %31, align 4
  %942 = insertvalue { ptr, i32 } poison, ptr %940, 0
  %943 = insertvalue { ptr, i32 } %942, i32 %941, 1
  resume { ptr, i32 } %943

944:                                              ; preds = %774
  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, !18, i64 524, !18, i64 588, !19, i64 652, !19, i64 668, !19, i64 684, !19, i64 700, !19, i64 716, !19, i64 732, !19, i64 748, !10, i64 764, !20, i64 768, !20, i64 776, !20, i64 784, !10, i64 792, !19, i64 796, !21, i64 812, !21, i64 813, !21, i64 814, !19, i64 816, !19, i64 832, !19, i64 848, !19, i64 864, !19, i64 880, !10, i64 896, !10, i64 900, !19, i64 904, !19, i64 920, !19, i64 936, !10, i64 952, !7, i64 956, !7, i64 959, !7, i64 964, !19, i64 976, !19, i64 992, !19, i64 1008, !19, i64 1024, !12, i64 1040, !7, i64 1044, !21, i64 1052, !18, i64 1056, !12, i64 1120, !10, i64 1124, !10, i64 1128, !10, i64 1132, !10, i64 1136, !10, i64 1140, !10, i64 1144, !10, i64 1148, !21, i64 1152, !12, i64 1156, !12, i64 1160, !22, i64 1164, !21, i64 1168, !10, i64 1172}
!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 232}
!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, !10, i64 52, !10, i64 56, !6, i64 64, !6, i64 72, !10, i64 80, !21, i64 84, !6, i64 88, !20, i64 96, !21, i64 104, !21, i64 105, !21, i64 106, !21, i64 107, !21, i64 108, !21, i64 109, !21, i64 110, !10, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !21, i64 200, !21, i64 201, !21, i64 202, !21, i64 203, !21, i64 204, !21, i64 205, !21, i64 206, !10, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !20, i64 232, !7, i64 240, !7, i64 2804, !20, i64 3316, !7, i64 3324, !10, i64 3332, !10, i64 3336, !21, i64 3340, !21, i64 3341, !21, i64 3342, !21, i64 3343, !7, i64 3344, !12, i64 3424, !12, i64 3428, !7, i64 3432, !21, i64 13688, !20, i64 13692, !7, i64 13700, !7, i64 13744, !7, i64 13784, !7, i64 13789, !7, i64 13794, !7, i64 13804, !7, i64 13814, !7, i64 13819, !7, i64 13824, !7, i64 13832, !7, i64 13852, !7, i64 13872, !7, i64 13892, !7, i64 13972, !10, i64 14052, !21, i64 14056, !7, i64 14057, !21, i64 14058, !42, i64 14060, !43, i64 14064}
!42 = !{!"short", !7, i64 0}
!43 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!44 = !{!41, !10, i64 236}
!45 = !{!16, !17, i64 8}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.ImGuizmo::Context" = type { ptr, i32, %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::matrix_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, %"struct.ImGuizmo::vec_t", i8, i8, i8, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, float, %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", float, [3 x i8], [3 x i8], [3 x float], %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", %"struct.ImGuizmo::vec_t", i32, [2 x i32], i8, %"struct.ImGuizmo::matrix_t", i32, float, float, float, float, float, float, float, i8, i32, i32, i32, i8, float }
%struct.ImVec2 = type { float, float }
%"struct.ImGuizmo::vec_t" = type { float, float, float, float }
%"struct.ImGuizmo::matrix_t" = type { %union.anon }
%union.anon = type { [4 x [4 x float]] }
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }

@_ZN8ImGuizmoL8gContextE = external hidden global %"struct.ImGuizmo::Context", align 8
@_ZN8ImGuizmoL14directionUnaryE = external hidden global [3 x %"struct.ImGuizmo::vec_t"], align 16
@_ZN8ImGuizmoL14directionColorE = external hidden local_unnamed_addr constant [3 x i32], align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging = external hidden local_unnamed_addr global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking = external hidden local_unnamed_addr global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside = external hidden local_unnamed_addr global i8, align 1
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp = external hidden global %"struct.ImGuizmo::vec_t", align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir = external hidden global %"struct.ImGuizmo::vec_t", align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames = external hidden local_unnamed_addr global i32, align 4
@_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition = external hidden 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.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [78 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(14080) 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 4
  %30 = alloca %"struct.ImGuizmo::vec_t", align 8
  %31 = alloca %"struct.ImGuizmo::vec_t", align 8
  %32 = alloca %"struct.ImGuizmo::vec_t", align 8
  %33 = alloca %"struct.ImGuizmo::vec_t", align 8
  %34 = alloca %"struct.ImGuizmo::vec_t", align 8
  %35 = alloca %"struct.ImGuizmo::vec_t", align 8
  %36 = alloca %"struct.ImGuizmo::vec_t", align 8
  %37 = alloca %"struct.ImGuizmo::vec_t", align 4
  %38 = alloca %"struct.ImGuizmo::vec_t", align 4
  %39 = alloca %"struct.ImGuizmo::vec_t", align 8
  %40 = alloca %"struct.ImGuizmo::vec_t", align 8
  %41 = alloca %"struct.ImGuizmo::vec_t", align 8
  %42 = alloca %"struct.ImGuizmo::vec_t", align 8
  %43 = alloca %"struct.ImGuizmo::vec_t", align 8
  %44 = alloca %"struct.ImGuizmo::vec_t", align 8
  %45 = alloca %"struct.ImGuizmo::vec_t", align 8
  %46 = alloca [4 x %struct.ImVec2], align 16
  %47 = alloca [4 x %"struct.ImGuizmo::vec_t"], align 16
  %48 = alloca %"struct.ImGuizmo::vec_t", align 8
  %49 = alloca %"struct.ImGuizmo::vec_t", align 8
  %50 = alloca %"struct.ImGuizmo::vec_t", align 8
  %51 = alloca %"struct.ImGuizmo::vec_t", align 8
  %52 = alloca %"struct.ImGuizmo::vec_t", align 8
  %53 = alloca %"struct.ImGuizmo::vec_t", align 8
  %54 = alloca %"struct.ImGuizmo::vec_t", align 8
  %55 = alloca %"struct.ImGuizmo::vec_t", align 8
  %56 = alloca %"struct.ImGuizmo::vec_t", align 8
  %57 = alloca %"struct.ImGuizmo::vec_t", align 8
  %58 = alloca %"struct.ImGuizmo::vec_t", align 8
  %59 = alloca %"struct.ImGuizmo::vec_t", align 4
  %60 = alloca %"struct.ImGuizmo::vec_t", align 4
  %61 = alloca %"struct.ImGuizmo::vec_t", align 4
  %62 = alloca %"struct.ImGuizmo::vec_t", align 8
  %63 = alloca %"struct.ImGuizmo::vec_t", align 8
  %64 = alloca %struct.ImRect, align 4
  %65 = alloca %struct.ImVec2, align 8
  %66 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %67 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %68 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %69 = alloca %"struct.ImGuizmo::matrix_t", align 4
  %70 = alloca %"struct.ImGuizmo::vec_t", align 4
  %71 = alloca %"struct.ImGuizmo::vec_t", align 8
  %72 = alloca %"struct.ImGuizmo::vec_t", align 8
  %73 = alloca %"struct.ImGuizmo::vec_t", align 8
  %74 = alloca %"struct.ImGuizmo::vec_t", align 8
  store <2 x float> %2, ptr %6, align 8
  store <2 x float> %3, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #12
  %75 = tail call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %76 = extractvalue { <2 x float>, <2 x float> } %75, 0
  store <2 x float> %76, ptr %8, align 8
  %77 = getelementptr inbounds i8, ptr %8, i64 8
  %78 = extractvalue { <2 x float>, <2 x float> } %75, 1
  store <2 x float> %78, ptr %77, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #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
  %79 = call noundef nonnull align 8 dereferenceable(14080) ptr @_ZN5ImGui5GetIOEv()
  %80 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #12
  %81 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %81, ptr %11, align 8
  call void @_ZN10ImDrawList13AddRectFilledERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(196) %80, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %11, i32 noundef %4, float noundef 0.000000e+00, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #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)
  %82 = call noundef float @_ZN8ImGuizmo8matrix_t7InverseERKS0_b(ptr noundef nonnull align 4 dereferenceable(64) %12, ptr noundef nonnull align 4 dereferenceable(64) %0, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #12
  %83 = getelementptr inbounds i8, ptr %12, i64 48
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  %84 = getelementptr inbounds i8, ptr %12, i64 32
  %85 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %84, float noundef %1)
  %86 = extractvalue { <2 x float>, <2 x float> } %85, 0
  store <2 x float> %86, ptr %14, align 8
  %87 = getelementptr inbounds i8, ptr %14, i64 8
  %88 = extractvalue { <2 x float>, <2 x float> } %85, 1
  store <2 x float> %88, ptr %87, align 8
  %89 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %83, ptr noundef nonnull align 4 dereferenceable(16) %14)
  %90 = extractvalue { <2 x float>, <2 x float> } %89, 0
  store <2 x float> %90, ptr %13, align 8
  %91 = getelementptr inbounds i8, ptr %13, i64 8
  %92 = extractvalue { <2 x float>, <2 x float> } %89, 1
  store <2 x float> %92, ptr %91, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #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)
  %93 = load float, ptr %7, align 8, !tbaa !20
  %94 = getelementptr inbounds i8, ptr %7, i64 4
  %95 = load float, ptr %94, align 4, !tbaa !21
  %96 = fdiv float %93, %95
  call void @_ZN8ImGuizmo11PerspectiveEffffPf(float noundef 0x4035369420000000, float noundef %96, float noundef 0x3F847AE140000000, float noundef 1.000000e+03, ptr noundef nonnull %15)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  %97 = load float, ptr %84, align 4, !tbaa !6
  %98 = getelementptr inbounds i8, ptr %12, i64 36
  %99 = load float, ptr %98, align 4, !tbaa !6
  %100 = getelementptr inbounds i8, ptr %12, i64 40
  %101 = load float, ptr %100, align 4, !tbaa !6
  %102 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %97, float noundef %99, float noundef %101, float noundef 0.000000e+00)
  %103 = extractvalue { <2 x float>, <2 x float> } %102, 0
  store <2 x float> %103, ptr %17, align 8
  %104 = getelementptr inbounds i8, ptr %17, i64 8
  %105 = extractvalue { <2 x float>, <2 x float> } %102, 1
  store <2 x float> %105, ptr %104, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #12
  %106 = getelementptr inbounds i8, ptr %12, i64 16
  %107 = load float, ptr %106, align 4, !tbaa !6
  %108 = getelementptr inbounds i8, ptr %12, i64 20
  %109 = load float, ptr %108, align 4, !tbaa !6
  %110 = getelementptr inbounds i8, ptr %12, i64 24
  %111 = load float, ptr %110, align 4, !tbaa !6
  %112 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %107, float noundef %109, float noundef %111, float noundef 0.000000e+00)
  %113 = extractvalue { <2 x float>, <2 x float> } %112, 0
  store <2 x float> %113, ptr %18, align 8
  %114 = getelementptr inbounds i8, ptr %18, i64 8
  %115 = extractvalue { <2 x float>, <2 x float> } %112, 1
  store <2 x float> %115, ptr %114, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #12
  %116 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 3.000000e+00)
  %117 = extractvalue { <2 x float>, <2 x float> } %116, 0
  store <2 x float> %117, ptr %19, align 8
  %118 = getelementptr inbounds i8, ptr %19, i64 8
  %119 = extractvalue { <2 x float>, <2 x float> } %116, 1
  store <2 x float> %119, ptr %118, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #12
  %120 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %121 = extractvalue { <2 x float>, <2 x float> } %120, 0
  store <2 x float> %121, ptr %20, align 8
  %122 = getelementptr inbounds i8, ptr %20, i64 8
  %123 = extractvalue { <2 x float>, <2 x float> } %120, 1
  store <2 x float> %123, ptr %122, align 8
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef nonnull %16)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 12), ptr noundef nonnull align 4 dereferenceable(64) %16, i64 64, i1 false), !tbaa.struct !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 76), ptr noundef nonnull align 4 dereferenceable(64) %15, i64 64, i1 false), !tbaa.struct !5
  %.sroa.0102.0.copyload = load <2 x float>, ptr %6, align 8
  %.sroa.0101.0.copyload = load <2 x float>, ptr %7, align 8
  call void @_ZN8ImGuizmoL16ComputeCameraRayERNS_5vec_tES1_6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 732), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 748), <2 x float> %.sroa.0102.0.copyload, <2 x float> %.sroa.0101.0.copyload)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #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)
  %124 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition acquire, align 8
  %125 = icmp eq i8 %124, 0
  br i1 %125, label %126, label %130, !prof !22

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

128:                                              ; preds = %126
  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)
  %129 = call ptr @llvm.invariant.start.p0(i64 72, ptr nonnull @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition)
  call void @__cxa_guard_release(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition) #12
  br label %130

130:                                              ; preds = %128, %126, %5
  %131 = load atomic i8, ptr @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize acquire, align 8
  %132 = icmp eq i8 %131, 0
  br i1 %132, label %133, label %137, !prof !22

133:                                              ; preds = %130
  %134 = call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #12
  %.not128 = icmp eq i32 %134, 0
  br i1 %.not128, label %137, label %135

135:                                              ; preds = %133
  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)
  %136 = call ptr @llvm.invariant.start.p0(i64 72, ptr nonnull @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize)
  call void @__cxa_guard_release(ptr nonnull @_ZGVZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize) #12
  br label %137

137:                                              ; preds = %135, %133, %130
  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)
  %138 = getelementptr inbounds i8, ptr %23, i64 8
  %139 = getelementptr inbounds i8, ptr %24, i64 8
  %140 = getelementptr inbounds i8, ptr %27, i64 8
  %141 = getelementptr inbounds i8, ptr %26, i64 8
  %142 = getelementptr inbounds i8, ptr %25, i64 8
  %143 = getelementptr inbounds i8, ptr %28, i64 8
  %144 = getelementptr inbounds i8, ptr %30, i64 8
  %145 = getelementptr inbounds i8, ptr %32, i64 8
  %146 = getelementptr inbounds i8, ptr %31, i64 8
  %147 = getelementptr inbounds i8, ptr %35, i64 8
  %148 = getelementptr inbounds i8, ptr %34, i64 8
  %149 = getelementptr inbounds i8, ptr %36, i64 8
  %150 = getelementptr inbounds i8, ptr %33, i64 8
  %151 = getelementptr inbounds i8, ptr %40, i64 8
  %152 = getelementptr inbounds i8, ptr %39, i64 8
  %153 = getelementptr inbounds i8, ptr %43, i64 8
  %154 = getelementptr inbounds i8, ptr %42, i64 8
  %155 = getelementptr inbounds i8, ptr %44, i64 8
  %156 = getelementptr inbounds i8, ptr %41, i64 8
  %157 = getelementptr inbounds i8, ptr %45, i64 8
  %158 = getelementptr inbounds i8, ptr %48, i64 8
  %159 = getelementptr inbounds i8, ptr %49, i64 8
  %160 = getelementptr inbounds i8, ptr %47, i64 8
  %161 = getelementptr inbounds i8, ptr %47, i64 16
  %162 = getelementptr inbounds i8, ptr %50, i64 8
  %163 = getelementptr inbounds i8, ptr %51, i64 8
  %164 = getelementptr inbounds i8, ptr %47, i64 24
  %165 = getelementptr inbounds i8, ptr %47, i64 32
  %166 = getelementptr inbounds i8, ptr %52, i64 8
  %167 = getelementptr inbounds i8, ptr %53, i64 8
  %168 = getelementptr inbounds i8, ptr %47, i64 40
  %169 = getelementptr inbounds i8, ptr %47, i64 48
  %170 = getelementptr inbounds i8, ptr %54, i64 8
  %171 = getelementptr inbounds i8, ptr %55, i64 8
  %172 = getelementptr inbounds i8, ptr %47, i64 56
  %173 = getelementptr inbounds i8, ptr %58, i64 8
  %174 = getelementptr inbounds i8, ptr %57, i64 8
  %175 = getelementptr inbounds i8, ptr %56, i64 8
  %176 = getelementptr inbounds i8, ptr %79, i64 3324
  %177 = getelementptr inbounds i8, ptr %59, i64 8
  %.ptr.1 = getelementptr inbounds i8, ptr %46, i64 8
  %.ptr.2 = getelementptr inbounds i8, ptr %46, i64 16
  %.ptr.3 = getelementptr inbounds i8, ptr %46, i64 24
  br label %.preheader

.preheader:                                       ; preds = %137, %180
  %.not131 = phi i1 [ true, %137 ], [ false, %180 ]
  br label %181

178:                                              ; preds = %180
  %179 = load i32, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !23
  %.not129 = icmp eq i32 %179, 0
  br i1 %.not129, label %458, label %446

180:                                              ; preds = %444
  br i1 %.not131, label %.preheader, label %178, !llvm.loop !24

181:                                              ; preds = %.preheader, %444
  %.0120142 = phi i32 [ 0, %.preheader ], [ %445, %444 ]
  %.urem = add nsw i32 %.0120142, -3
  %.cmp = icmp ult i32 %.0120142, 3
  %182 = select i1 %.cmp, i32 %.0120142, i32 %.urem
  %183 = add nuw nsw i32 %182, 1
  %184 = icmp eq i32 %183, 3
  %185 = select i1 %184, i32 0, i32 %183
  %186 = add nuw nsw i32 %182, 2
  %187 = urem i32 %186, 3
  %188 = icmp ugt i32 %.0120142, 2
  %189 = select i1 %188, float -1.000000e+00, float 1.000000e+00
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #12
  %190 = zext nneg i32 %185 to i64
  %191 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %190
  %192 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %191, float noundef %189)
  %193 = extractvalue { <2 x float>, <2 x float> } %192, 0
  store <2 x float> %193, ptr %23, align 8
  %194 = extractvalue { <2 x float>, <2 x float> } %192, 1
  store <2 x float> %194, ptr %138, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #12
  %195 = zext nneg i32 %187 to i64
  %196 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %195
  %197 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %196, float noundef %189)
  %198 = extractvalue { <2 x float>, <2 x float> } %197, 0
  store <2 x float> %198, ptr %24, align 8
  %199 = extractvalue { <2 x float>, <2 x float> } %197, 1
  store <2 x float> %199, ptr %139, 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
  %200 = zext nneg i32 %182 to i64
  %201 = getelementptr inbounds [3 x %"struct.ImGuizmo::vec_t"], ptr @_ZN8ImGuizmoL14directionUnaryE, i64 0, i64 %200
  %202 = fneg float %189
  %203 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %201, float noundef %202)
  %204 = extractvalue { <2 x float>, <2 x float> } %203, 0
  store <2 x float> %204, ptr %27, align 8
  %205 = extractvalue { <2 x float>, <2 x float> } %203, 1
  store <2 x float> %205, ptr %140, align 8
  %206 = 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)
  %207 = extractvalue { <2 x float>, <2 x float> } %206, 0
  store <2 x float> %207, ptr %26, align 8
  %208 = extractvalue { <2 x float>, <2 x float> } %206, 1
  store <2 x float> %208, ptr %141, align 8
  %209 = 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)
  %210 = extractvalue { <2 x float>, <2 x float> } %209, 0
  store <2 x float> %210, ptr %25, align 8
  %211 = extractvalue { <2 x float>, <2 x float> } %209, 1
  store <2 x float> %211, ptr %142, 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
  %212 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %201, float noundef %189)
  %213 = extractvalue { <2 x float>, <2 x float> } %212, 0
  store <2 x float> %213, ptr %28, align 8
  %214 = extractvalue { <2 x float>, <2 x float> } %212, 1
  store <2 x float> %214, ptr %143, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %28, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #12
  %215 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 5.000000e-01)
  %216 = extractvalue { <2 x float>, <2 x float> } %215, 0
  store <2 x float> %216, ptr %30, align 8
  %217 = extractvalue { <2 x float>, <2 x float> } %215, 1
  store <2 x float> %217, ptr %144, align 8
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(64) %16)
  %218 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %29)
  call void @_ZN8ImGuizmo5vec_t14TransformPointERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(64) %16)
  %219 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %29)
  %220 = extractvalue { <2 x float>, <2 x float> } %219, 1
  %.sroa.3.12.vec.extract = extractelement <2 x float> %220, i64 1
  %221 = fcmp ogt float %.sroa.3.12.vec.extract, 0.000000e+00
  br i1 %221, label %444, label %222

222:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #12
  %223 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 5.000000e-01)
  %224 = extractvalue { <2 x float>, <2 x float> } %223, 0
  store <2 x float> %224, ptr %32, align 8
  %225 = extractvalue { <2 x float>, <2 x float> } %223, 1
  store <2 x float> %225, ptr %145, align 8
  %226 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo9BuildPlanERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %32, ptr noundef nonnull align 4 dereferenceable(16) %28)
  %227 = extractvalue { <2 x float>, <2 x float> } %226, 0
  store <2 x float> %227, ptr %31, align 8
  %228 = extractvalue { <2 x float>, <2 x float> } %226, 1
  store <2 x float> %228, ptr %146, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #12
  %229 = call noundef float @_ZN8ImGuizmoL17IntersectRayPlaneERKNS_5vec_tES2_S2_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 732), ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 748), ptr noundef nonnull align 4 dereferenceable(16) %31)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #12
  %230 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 748), float noundef %229)
  %231 = extractvalue { <2 x float>, <2 x float> } %230, 0
  store <2 x float> %231, ptr %35, align 8
  %232 = extractvalue { <2 x float>, <2 x float> } %230, 1
  store <2 x float> %232, ptr %147, align 8
  %233 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) getelementptr inbounds (i8, ptr @_ZN8ImGuizmoL8gContextE, i64 732), ptr noundef nonnull align 4 dereferenceable(16) %35)
  %234 = extractvalue { <2 x float>, <2 x float> } %233, 0
  store <2 x float> %234, ptr %34, align 8
  %235 = extractvalue { <2 x float>, <2 x float> } %233, 1
  store <2 x float> %235, ptr %148, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #12
  %236 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 5.000000e-01)
  %237 = extractvalue { <2 x float>, <2 x float> } %236, 0
  store <2 x float> %237, ptr %36, align 8
  %238 = extractvalue { <2 x float>, <2 x float> } %236, 1
  store <2 x float> %238, ptr %149, align 8
  %239 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(16) %36)
  %240 = extractvalue { <2 x float>, <2 x float> } %239, 0
  store <2 x float> %240, ptr %33, align 8
  %241 = extractvalue { <2 x float>, <2 x float> } %239, 1
  store <2 x float> %241, ptr %150, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #12
  %242 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %191, ptr noundef nonnull align 4 dereferenceable(16) %33)
  %243 = call float @llvm.fmuladd.f32(float %242, float %189, float 5.000000e-01)
  %244 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %196, ptr noundef nonnull align 4 dereferenceable(16) %33)
  %245 = call float @llvm.fmuladd.f32(float %244, float %189, float 5.000000e-01)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 16 dereferenceable(16) %191, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %38) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %38, ptr noundef nonnull align 16 dereferenceable(16) %196, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #12
  %246 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %201, ptr noundef nonnull align 4 dereferenceable(16) %37)
  %247 = extractvalue { <2 x float>, <2 x float> } %246, 0
  store <2 x float> %247, ptr %40, align 8
  %248 = extractvalue { <2 x float>, <2 x float> } %246, 1
  store <2 x float> %248, ptr %151, align 8
  %249 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(16) %38)
  %250 = extractvalue { <2 x float>, <2 x float> } %249, 0
  store <2 x float> %250, ptr %39, align 8
  %251 = extractvalue { <2 x float>, <2 x float> } %249, 1
  store <2 x float> %251, ptr %152, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #12
  %252 = getelementptr inbounds [3 x i32], ptr @_ZN8ImGuizmoL14directionColorE, i64 0, i64 %200
  br label %254

253:                                              ; preds = %443
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #12
  br label %444

254:                                              ; preds = %222, %443
  %indvars.iv = phi i64 [ 0, %222 ], [ %indvars.iv.next, %443 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %42) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %43) #12
  %.lhs.trunc = trunc i64 %indvars.iv to i8
  %255 = urem i8 %.lhs.trunc, 3
  %256 = uitofp nneg i8 %255 to float
  %257 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef %256)
  %258 = extractvalue { <2 x float>, <2 x float> } %257, 0
  store <2 x float> %258, ptr %43, align 8
  %259 = extractvalue { <2 x float>, <2 x float> } %257, 1
  store <2 x float> %259, ptr %153, align 8
  %260 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(16) %43)
  %261 = extractvalue { <2 x float>, <2 x float> } %260, 0
  store <2 x float> %261, ptr %42, align 8
  %262 = extractvalue { <2 x float>, <2 x float> } %260, 1
  store <2 x float> %262, ptr %154, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %44) #12
  %263 = udiv i8 %.lhs.trunc, 3
  %264 = uitofp nneg i8 %263 to float
  %265 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef %264)
  %266 = extractvalue { <2 x float>, <2 x float> } %265, 0
  store <2 x float> %266, ptr %44, align 8
  %267 = extractvalue { <2 x float>, <2 x float> } %265, 1
  store <2 x float> %267, ptr %155, align 8
  %268 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %44)
  %269 = extractvalue { <2 x float>, <2 x float> } %268, 0
  store <2 x float> %269, ptr %41, align 8
  %270 = extractvalue { <2 x float>, <2 x float> } %268, 1
  store <2 x float> %270, ptr %156, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %45) #12
  %271 = 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)
  %272 = extractvalue { <2 x float>, <2 x float> } %271, 0
  store <2 x float> %272, ptr %45, align 8
  %273 = extractvalue { <2 x float>, <2 x float> } %271, 1
  store <2 x float> %273, ptr %157, align 8
  %274 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %41, ptr noundef nonnull align 4 dereferenceable(16) %45)
  %275 = extractvalue { <2 x float>, <2 x float> } %274, 0
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %44) #12
  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
  %276 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE13panelPosition, i64 0, i64 %indvars.iv
  %277 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %276, float noundef 2.000000e+00)
  %278 = getelementptr inbounds [9 x %struct.ImVec2], ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9panelSize, i64 0, i64 %indvars.iv
  %279 = call <2 x float> @_ZmlRK6ImVec2f(ptr noundef nonnull align 4 dereferenceable(8) %278, float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #12
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %46)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.1)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.2)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.3)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %47) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #12
  %.sroa.043.0.vec.extract = extractelement <2 x float> %277, i64 0
  %280 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %.sroa.043.0.vec.extract)
  %281 = extractvalue { <2 x float>, <2 x float> } %280, 0
  store <2 x float> %281, ptr %48, align 8
  %282 = extractvalue { <2 x float>, <2 x float> } %280, 1
  store <2 x float> %282, ptr %158, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #12
  %.sroa.043.4.vec.extract = extractelement <2 x float> %277, i64 1
  %283 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %.sroa.043.4.vec.extract)
  %284 = extractvalue { <2 x float>, <2 x float> } %283, 0
  store <2 x float> %284, ptr %49, align 8
  %285 = extractvalue { <2 x float>, <2 x float> } %283, 1
  store <2 x float> %285, ptr %159, align 8
  %286 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %48, ptr noundef nonnull align 4 dereferenceable(16) %49)
  %287 = extractvalue { <2 x float>, <2 x float> } %286, 0
  store <2 x float> %287, ptr %47, align 16
  %288 = extractvalue { <2 x float>, <2 x float> } %286, 1
  store <2 x float> %288, ptr %160, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #12
  %289 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %.sroa.043.0.vec.extract)
  %290 = extractvalue { <2 x float>, <2 x float> } %289, 0
  store <2 x float> %290, ptr %50, align 8
  %291 = extractvalue { <2 x float>, <2 x float> } %289, 1
  store <2 x float> %291, ptr %162, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #12
  %292 = fadd <2 x float> %277, %279
  %293 = extractelement <2 x float> %292, i64 1
  %294 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %293)
  %295 = extractvalue { <2 x float>, <2 x float> } %294, 0
  store <2 x float> %295, ptr %51, align 8
  %296 = extractvalue { <2 x float>, <2 x float> } %294, 1
  store <2 x float> %296, ptr %163, align 8
  %297 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %50, ptr noundef nonnull align 4 dereferenceable(16) %51)
  %298 = extractvalue { <2 x float>, <2 x float> } %297, 0
  store <2 x float> %298, ptr %161, align 16
  %299 = extractvalue { <2 x float>, <2 x float> } %297, 1
  store <2 x float> %299, ptr %164, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %52) #12
  %300 = fadd <2 x float> %277, %279
  %301 = extractelement <2 x float> %300, i64 0
  %302 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %301)
  %303 = extractvalue { <2 x float>, <2 x float> } %302, 0
  store <2 x float> %303, ptr %52, align 8
  %304 = extractvalue { <2 x float>, <2 x float> } %302, 1
  store <2 x float> %304, ptr %166, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %53) #12
  %305 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %293)
  %306 = extractvalue { <2 x float>, <2 x float> } %305, 0
  store <2 x float> %306, ptr %53, align 8
  %307 = extractvalue { <2 x float>, <2 x float> } %305, 1
  store <2 x float> %307, ptr %167, align 8
  %308 = 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)
  %309 = extractvalue { <2 x float>, <2 x float> } %308, 0
  store <2 x float> %309, ptr %165, align 16
  %310 = extractvalue { <2 x float>, <2 x float> } %308, 1
  store <2 x float> %310, ptr %168, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %54) #12
  %311 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %301)
  %312 = extractvalue { <2 x float>, <2 x float> } %311, 0
  store <2 x float> %312, ptr %54, align 8
  %313 = extractvalue { <2 x float>, <2 x float> } %311, 1
  store <2 x float> %313, ptr %170, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %55) #12
  %314 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef %.sroa.043.4.vec.extract)
  %315 = extractvalue { <2 x float>, <2 x float> } %314, 0
  store <2 x float> %315, ptr %55, align 8
  %316 = extractvalue { <2 x float>, <2 x float> } %314, 1
  store <2 x float> %316, ptr %171, align 8
  %317 = 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)
  %318 = extractvalue { <2 x float>, <2 x float> } %317, 0
  store <2 x float> %318, ptr %169, align 16
  %319 = extractvalue { <2 x float>, <2 x float> } %317, 1
  store <2 x float> %319, ptr %172, align 8
  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.end.p0(i64 16, ptr nonnull %51) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #12
  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.start.p0(i64 16, ptr nonnull %56) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #12
  %320 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %47, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %321 = extractvalue { <2 x float>, <2 x float> } %320, 0
  store <2 x float> %321, ptr %58, align 8
  %322 = extractvalue { <2 x float>, <2 x float> } %320, 1
  store <2 x float> %322, ptr %173, align 8
  %323 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %324 = extractvalue { <2 x float>, <2 x float> } %323, 0
  store <2 x float> %324, ptr %57, align 8
  %325 = extractvalue { <2 x float>, <2 x float> } %323, 1
  store <2 x float> %325, ptr %174, align 8
  %326 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %189)
  %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 %175, 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
  %329 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload, <2 x float> %.sroa.031.0.copyload)
  store <2 x float> %329, ptr %46, align 16
  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.start.p0(i64 16, ptr nonnull %56) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #12
  %330 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %161, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %331 = extractvalue { <2 x float>, <2 x float> } %330, 0
  store <2 x float> %331, ptr %58, align 8
  %332 = extractvalue { <2 x float>, <2 x float> } %330, 1
  store <2 x float> %332, ptr %173, align 8
  %333 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %334 = extractvalue { <2 x float>, <2 x float> } %333, 0
  store <2 x float> %334, ptr %57, align 8
  %335 = extractvalue { <2 x float>, <2 x float> } %333, 1
  store <2 x float> %335, ptr %174, align 8
  %336 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %189)
  %337 = extractvalue { <2 x float>, <2 x float> } %336, 0
  store <2 x float> %337, ptr %56, align 8
  %338 = extractvalue { <2 x float>, <2 x float> } %336, 1
  store <2 x float> %338, ptr %175, 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
  %339 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload.1, <2 x float> %.sroa.031.0.copyload.1)
  store <2 x float> %339, ptr %.ptr.1, align 8
  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.start.p0(i64 16, ptr nonnull %56) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #12
  %340 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %165, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %341 = extractvalue { <2 x float>, <2 x float> } %340, 0
  store <2 x float> %341, ptr %58, align 8
  %342 = extractvalue { <2 x float>, <2 x float> } %340, 1
  store <2 x float> %342, ptr %173, align 8
  %343 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %344 = extractvalue { <2 x float>, <2 x float> } %343, 0
  store <2 x float> %344, ptr %57, align 8
  %345 = extractvalue { <2 x float>, <2 x float> } %343, 1
  store <2 x float> %345, ptr %174, align 8
  %346 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %189)
  %347 = extractvalue { <2 x float>, <2 x float> } %346, 0
  store <2 x float> %347, ptr %56, align 8
  %348 = extractvalue { <2 x float>, <2 x float> } %346, 1
  store <2 x float> %348, ptr %175, 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
  %349 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload.2, <2 x float> %.sroa.031.0.copyload.2)
  store <2 x float> %349, ptr %.ptr.2, align 16
  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.start.p0(i64 16, ptr nonnull %56) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %57) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #12
  %350 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %169, ptr noundef nonnull align 4 dereferenceable(16) %39)
  %351 = extractvalue { <2 x float>, <2 x float> } %350, 0
  store <2 x float> %351, ptr %58, align 8
  %352 = extractvalue { <2 x float>, <2 x float> } %350, 1
  store <2 x float> %352, ptr %173, align 8
  %353 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 5.000000e-01)
  %354 = extractvalue { <2 x float>, <2 x float> } %353, 0
  store <2 x float> %354, ptr %57, align 8
  %355 = extractvalue { <2 x float>, <2 x float> } %353, 1
  store <2 x float> %355, ptr %174, align 8
  %356 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %189)
  %357 = extractvalue { <2 x float>, <2 x float> } %356, 0
  store <2 x float> %357, ptr %56, align 8
  %358 = extractvalue { <2 x float>, <2 x float> } %356, 1
  store <2 x float> %358, ptr %175, 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
  %359 = call <2 x float> @_ZN8ImGuizmoL10worldToPosERKNS_5vec_tERKNS_8matrix_tE6ImVec2S6_(ptr noundef nonnull align 4 dereferenceable(16) %56, ptr noundef nonnull align 4 dereferenceable(64) %21, <2 x float> %.sroa.032.0.copyload.3, <2 x float> %.sroa.031.0.copyload.3)
  store <2 x float> %359, ptr %.ptr.3, align 8
  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
  %360 = extractvalue { <2 x float>, <2 x float> } %274, 1
  %.sroa.029.0.copyload = load float, ptr %276, align 8, !tbaa !27
  %.sroa.430.0..sroa_idx = getelementptr inbounds i8, ptr %276, i64 4
  %.sroa.430.0.copyload = load float, ptr %.sroa.430.0..sroa_idx, align 4, !tbaa !27
  %361 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %276, ptr noundef nonnull align 4 dereferenceable(8) %278)
  %362 = fcmp ogt float %243, %.sroa.029.0.copyload
  %.sroa.5.8.vec.extract = extractelement <2 x float> %361, i64 0
  %363 = fcmp olt float %243, %.sroa.5.8.vec.extract
  %or.cond = select i1 %362, i1 %363, i1 false
  %364 = fcmp ogt float %245, %.sroa.430.0.copyload
  %or.cond132 = select i1 %or.cond, i1 %364, i1 false
  br i1 %or.cond132, label %365, label %367

365:                                              ; preds = %254
  %.sroa.5.12.vec.extract = extractelement <2 x float> %361, i64 1
  %366 = fcmp olt float %245, %.sroa.5.12.vec.extract
  br label %367

367:                                              ; preds = %365, %254
  %368 = phi i1 [ false, %254 ], [ %366, %365 ]
  %.sroa.056.0.vec.extract = extractelement <2 x float> %275, i64 0
  %.sroa.056.4.vec.extract = extractelement <2 x float> %275, i64 1
  %369 = fmul float %.sroa.056.4.vec.extract, 3.000000e+00
  %370 = call float @llvm.fmuladd.f32(float %.sroa.056.0.vec.extract, float 9.000000e+00, float %369)
  %.sroa.557.8.vec.extract = extractelement <2 x float> %360, i64 0
  %371 = fadd float %.sroa.557.8.vec.extract, %370
  %372 = fptosi float %371 to i32
  %373 = icmp slt i32 %372, 27
  br i1 %373, label %375, label %374

374:                                              ; preds = %367
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 2630, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_j) #13
  unreachable

375:                                              ; preds = %367
  %376 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !range !28
  %377 = xor i8 %376, 1
  %378 = select i1 %368, i8 %377, i8 0
  %379 = sext i32 %372 to i64
  %380 = getelementptr inbounds [27 x i8], ptr %22, i64 0, i64 %379
  %381 = load i8, ptr %380, align 1, !tbaa !29, !range !28, !noundef !30
  %382 = or i8 %378, %381
  store i8 %382, ptr %380, align 1, !tbaa !29
  br i1 %.not131, label %443, label %383

383:                                              ; preds = %375
  %384 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  %385 = load i32, ptr %252, align 4, !tbaa !23
  %386 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !29, !range !28, !noundef !30
  %387 = trunc nuw i8 %386 to i1
  %388 = select i1 %387, i32 526344, i32 0
  %389 = or i32 %385, %388
  %390 = or i32 %389, -2139062144
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %384, ptr noundef nonnull %46, i32 noundef 4, i32 noundef %390)
  %391 = trunc nuw i8 %382 to i1
  br i1 %391, label %392, label %443

392:                                              ; preds = %383
  %393 = load ptr, ptr @_ZN8ImGuizmoL8gContextE, align 8, !tbaa !9
  call void @_ZN10ImDrawList19AddConvexPolyFilledEPK6ImVec2ij(ptr noundef nonnull align 8 dereferenceable(196) %393, ptr noundef nonnull %46, i32 noundef 4, i32 noundef -2141150992)
  %394 = load i8, ptr %176, align 4, !tbaa !29, !range !28, !noundef !30
  %395 = trunc nuw i8 %394 to i1
  br i1 %395, label %436, label %396

396:                                              ; preds = %392
  %397 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29, !range !28, !noundef !30
  %398 = trunc nuw i8 %397 to i1
  br i1 %398, label %436, label %399

399:                                              ; preds = %396
  %400 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29, !range !28, !noundef !30
  %401 = trunc nuw i8 %400 to i1
  br i1 %401, label %402, label %436

402:                                              ; preds = %399
  %403 = sdiv i32 %372, 9
  %.neg = mul nsw i32 %403, -9
  %404 = add i32 %.neg, %372
  %405 = sdiv i32 %404, 3
  %406 = srem i32 %372, 3
  %407 = sitofp i32 %403 to float
  %408 = fsub float 1.000000e+00, %407
  %409 = sitofp i32 %405 to float
  %410 = fsub float 1.000000e+00, %409
  %411 = sitofp i32 %406 to float
  %412 = fsub float 1.000000e+00, %411
  %413 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo8makeVectEffff(float noundef %408, float noundef %410, float noundef %412, float noundef 0.000000e+00)
  %414 = extractvalue { <2 x float>, <2 x float> } %413, 0
  %415 = extractvalue { <2 x float>, <2 x float> } %413, 1
  store <2 x float> %414, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, align 4
  store <2 x float> %415, ptr getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, i64 8), align 4
  %416 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir)
  %417 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %8)
  %418 = call float @llvm.fabs.f32(float %417)
  %419 = fcmp ogt float %418, 0x3FEFAE1480000000
  br i1 %419, label %420, label %434

420:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %59) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %59, ptr noundef nonnull align 4 dereferenceable(16) %12, i64 16, i1 false), !tbaa.struct !26
  %421 = load float, ptr %59, align 4, !tbaa !31
  %422 = call float @llvm.fabs.f32(float %421)
  %423 = load float, ptr %177, align 4, !tbaa !32
  %424 = call float @llvm.fabs.f32(float %423)
  %425 = fcmp ogt float %422, %424
  br i1 %425, label %426, label %427

426:                                              ; preds = %420
  store float 0.000000e+00, ptr %177, align 4, !tbaa !32
  br label %428

427:                                              ; preds = %420
  store float 0.000000e+00, ptr %59, align 4, !tbaa !31
  br label %428

428:                                              ; preds = %427, %426
  %429 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %59)
  %430 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5CrossERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, ptr noundef nonnull align 4 dereferenceable(16) %59)
  %431 = extractvalue { <2 x float>, <2 x float> } %430, 0
  %432 = extractvalue { <2 x float>, <2 x float> } %430, 1
  store <2 x float> %431, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, align 4
  store <2 x float> %432, ptr getelementptr inbounds (i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 8), align 4
  %433 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %59) #12
  br label %435

434:                                              ; preds = %402
  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 %435

435:                                              ; preds = %434, %428
  store i32 40, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !23
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29
  %.pre = load i8, ptr %176, align 4, !tbaa !29, !range !28
  br label %436

436:                                              ; preds = %435, %399, %396, %392
  %437 = phi i8 [ %.pre, %435 ], [ %394, %399 ], [ %394, %396 ], [ %394, %392 ]
  %438 = trunc nuw i8 %437 to i1
  br i1 %438, label %439, label %443

439:                                              ; preds = %436
  %440 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29, !range !28, !noundef !30
  %441 = trunc nuw i8 %440 to i1
  br i1 %441, label %443, label %442

442:                                              ; preds = %439
  store i8 1, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE10isClicking, align 1, !tbaa !29
  br label %443

443:                                              ; preds = %383, %442, %439, %436, %375
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %47) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #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 %253, label %254, !llvm.loop !33

444:                                              ; preds = %181, %253
  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.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
  %445 = add nuw nsw i32 %.0120142, 1
  %exitcond146.not = icmp eq i32 %445, 6
  br i1 %exitcond146.not, label %180, label %181, !llvm.loop !34

446:                                              ; preds = %178
  %447 = add nsw i32 %179, -1
  store i32 %447, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE19interpolationFrames, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %60, ptr noundef nonnull align 4 dereferenceable(16) %84, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %60, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE16interpolationDir, float noundef 0x3FC99999A0000000)
  %448 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %60)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %61, ptr noundef nonnull align 4 dereferenceable(16) %106, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t4LerpERKS0_f(ptr noundef nonnull align 4 dereferenceable(16) %61, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, float noundef 0x3FD3333340000000)
  %449 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %61)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %61, ptr noundef nonnull align 4 dereferenceable(16) @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE15interpolationUp, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %62) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %63) #12
  %450 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %60, float noundef %1)
  %451 = extractvalue { <2 x float>, <2 x float> } %450, 0
  store <2 x float> %451, ptr %63, align 8
  %452 = getelementptr inbounds i8, ptr %63, i64 8
  %453 = extractvalue { <2 x float>, <2 x float> } %450, 1
  store <2 x float> %453, ptr %452, align 8
  %454 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %63)
  %455 = extractvalue { <2 x float>, <2 x float> } %454, 0
  store <2 x float> %455, ptr %62, align 8
  %456 = getelementptr inbounds i8, ptr %62, i64 8
  %457 = extractvalue { <2 x float>, <2 x float> } %454, 1
  store <2 x float> %457, ptr %456, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %63) #12
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %62, ptr noundef nonnull %13, ptr noundef nonnull %61, ptr noundef nonnull %0)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %62) #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
  br label %458

458:                                              ; preds = %446, %178
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %64) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #12
  %459 = 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> %459, ptr %65, align 8
  call void @_ZN6ImRectC2ERK6ImVec2S2_(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %65)
  %460 = getelementptr inbounds i8, ptr %79, i64 3316
  %461 = call noundef zeroext i1 @_ZNK6ImRect8ContainsERK6ImVec2(ptr noundef nonnull align 4 dereferenceable(16) %64, ptr noundef nonnull align 4 dereferenceable(8) %460)
  %462 = zext i1 %461 to i8
  store i8 %462, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE8isInside, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #12
  %463 = load i8, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29, !range !28, !noundef !30
  %464 = trunc nuw i8 %463 to i1
  %465 = load i8, ptr %176, align 4, !tbaa !29, !range !28, !noundef !30
  %466 = trunc nuw i8 %465 to i1
  br i1 %464, label %475, label %467

467:                                              ; preds = %458
  %brmerge.demorgan = and i1 %461, %466
  br i1 %brmerge.demorgan, label %468, label %.thread

468:                                              ; preds = %467
  %469 = getelementptr inbounds i8, ptr %79, i64 232
  %470 = load float, ptr %469, align 8, !tbaa !35
  %471 = fcmp ueq float %470, 0.000000e+00
  %472 = getelementptr inbounds i8, ptr %79, i64 236
  %473 = load float, ptr %472, align 4
  %474 = fcmp ueq float %473, 0.000000e+00
  %or.cond135 = select i1 %471, i1 %474, i1 false
  br i1 %or.cond135, label %.thread, label %.thread.thread

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

475:                                              ; preds = %458
  br i1 %466, label %.thread, label %.thread.thread147

.thread.thread147:                                ; preds = %475
  store i8 0, ptr @_ZZN8ImGuizmo14ViewManipulateEPff6ImVec2S1_jE9isDraging, align 1, !tbaa !29
  br label %509

.thread:                                          ; preds = %467, %468, %475
  %476 = trunc nuw i8 %463 to i1
  br i1 %476, label %477, label %509

477:                                              ; preds = %.thread.thread, %.thread
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %66) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %66)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %67) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %67)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %68) #12
  call void @_ZN8ImGuizmo8matrix_tC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %68)
  %478 = getelementptr inbounds i8, ptr %79, i64 232
  %479 = load float, ptr %478, align 8, !tbaa !35
  %480 = fmul float %479, 0xBF847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %66, ptr noundef nonnull align 4 dereferenceable(16) %8, float noundef %480)
  %481 = getelementptr inbounds i8, ptr %79, i64 236
  %482 = load float, ptr %481, align 4, !tbaa !39
  %483 = fmul float %482, 0xBF847AE140000000
  call void @_ZN8ImGuizmo8matrix_t12RotationAxisERKNS_5vec_tEf(ptr noundef nonnull align 4 dereferenceable(64) %67, ptr noundef nonnull align 4 dereferenceable(16) %12, float noundef %483)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %69) #12
  call void @_ZNK8ImGuizmo8matrix_tmlERKS0_(ptr dead_on_unwind nonnull writable sret(%"struct.ImGuizmo::matrix_t") align 4 %69, ptr noundef nonnull align 4 dereferenceable(64) %66, ptr noundef nonnull align 4 dereferenceable(64) %67)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %68, ptr noundef nonnull align 4 dereferenceable(64) %69, i64 64, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %69) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %70) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(16) %84, i64 16, i1 false), !tbaa.struct !26
  call void @_ZN8ImGuizmo5vec_t15TransformVectorERKNS_8matrix_tE(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(64) %68)
  %484 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %70)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %71) #12
  %485 = 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)
  %486 = extractvalue { <2 x float>, <2 x float> } %485, 0
  store <2 x float> %486, ptr %71, align 8
  %487 = getelementptr inbounds i8, ptr %71, i64 8
  %488 = extractvalue { <2 x float>, <2 x float> } %485, 1
  store <2 x float> %488, ptr %487, align 8
  %489 = getelementptr inbounds i8, ptr %71, i64 4
  store float 0.000000e+00, ptr %489, align 4, !tbaa !40
  %490 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %71)
  %491 = call noundef float @_ZN8ImGuizmo3DotERKNS_5vec_tES2_(ptr noundef nonnull align 4 dereferenceable(16) %71, ptr noundef nonnull align 4 dereferenceable(16) %70)
  %492 = fcmp olt float %491, 0.000000e+00
  br i1 %492, label %493, label %500

493:                                              ; preds = %477
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %72) #12
  %494 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %71, float noundef %491)
  %495 = extractvalue { <2 x float>, <2 x float> } %494, 0
  store <2 x float> %495, ptr %72, align 8
  %496 = getelementptr inbounds i8, ptr %72, i64 8
  %497 = extractvalue { <2 x float>, <2 x float> } %494, 1
  store <2 x float> %497, ptr %496, align 8
  %498 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN8ImGuizmo5vec_tpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %70, ptr noundef nonnull align 4 dereferenceable(16) %72)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %72) #12
  %499 = call { <2 x float>, <2 x float> } @_ZN8ImGuizmo5vec_t9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(16) %70)
  br label %500

500:                                              ; preds = %493, %477
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %73) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %74) #12
  %501 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tmlEf(ptr noundef nonnull align 4 dereferenceable(16) %70, float noundef %1)
  %502 = extractvalue { <2 x float>, <2 x float> } %501, 0
  store <2 x float> %502, ptr %74, align 8
  %503 = getelementptr inbounds i8, ptr %74, i64 8
  %504 = extractvalue { <2 x float>, <2 x float> } %501, 1
  store <2 x float> %504, ptr %503, align 8
  %505 = call { <2 x float>, <2 x float> } @_ZNK8ImGuizmo5vec_tplERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %74)
  %506 = extractvalue { <2 x float>, <2 x float> } %505, 0
  store <2 x float> %506, ptr %73, align 8
  %507 = getelementptr inbounds i8, ptr %73, i64 8
  %508 = extractvalue { <2 x float>, <2 x float> } %505, 1
  store <2 x float> %508, ptr %507, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #12
  call void @_ZN8ImGuizmo6LookAtEPKfS1_S1_Pf(ptr noundef nonnull %73, ptr noundef nonnull %13, ptr noundef nonnull %8, ptr noundef nonnull %0)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %71) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %68) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %67) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %66) #12
  br label %509

509:                                              ; preds = %.thread.thread147, %500, %.thread
  %510 = 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 332), i32 noundef %510)
  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, !13, i64 524, !13, i64 588, !14, i64 652, !14, i64 668, !14, i64 684, !14, i64 700, !14, i64 716, !14, i64 732, !14, i64 748, !15, i64 764, !16, i64 768, !16, i64 776, !16, i64 784, !15, i64 792, !14, i64 796, !17, i64 812, !17, i64 813, !17, i64 814, !14, i64 816, !14, i64 832, !14, i64 848, !14, i64 864, !14, i64 880, !15, i64 896, !15, i64 900, !14, i64 904, !14, i64 920, !14, i64 936, !15, i64 952, !7, i64 956, !7, i64 959, !7, i64 964, !14, i64 976, !14, i64 992, !14, i64 1008, !14, i64 1024, !18, i64 1040, !7, i64 1044, !17, i64 1052, !13, i64 1056, !18, i64 1120, !15, i64 1124, !15, i64 1128, !15, i64 1132, !15, i64 1136, !15, i64 1140, !15, i64 1144, !15, i64 1148, !17, i64 1152, !18, i64 1156, !18, i64 1160, !19, i64 1164, !17, i64 1168, !15, i64 1172}
!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 232}
!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, !15, i64 52, !15, i64 56, !11, i64 64, !11, i64 72, !15, i64 80, !17, i64 84, !11, i64 88, !16, i64 96, !17, i64 104, !17, i64 105, !17, i64 106, !17, i64 107, !17, i64 108, !17, i64 109, !17, i64 110, !15, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !11, i64 184, !11, i64 192, !17, i64 200, !17, i64 201, !17, i64 202, !17, i64 203, !17, i64 204, !17, i64 205, !17, i64 206, !15, i64 208, !18, i64 212, !18, i64 216, !18, i64 220, !18, i64 224, !18, i64 228, !16, i64 232, !7, i64 240, !7, i64 2804, !16, i64 3316, !7, i64 3324, !15, i64 3332, !15, i64 3336, !17, i64 3340, !17, i64 3341, !17, i64 3342, !17, i64 3343, !7, i64 3344, !18, i64 3424, !18, i64 3428, !7, i64 3432, !17, i64 13688, !16, i64 13692, !7, i64 13700, !7, i64 13744, !7, i64 13784, !7, i64 13789, !7, i64 13794, !7, i64 13804, !7, i64 13814, !7, i64 13819, !7, i64 13824, !7, i64 13832, !7, i64 13852, !7, i64 13872, !7, i64 13892, !7, i64 13972, !15, i64 14052, !17, i64 14056, !7, i64 14057, !17, i64 14058, !37, i64 14060, !38, i64 14064}
!37 = !{!"short", !7, i64 0}
!38 = !{!"_ZTS8ImVectorItE", !18, i64 0, !18, i64 4, !11, i64 8}
!39 = !{!36, !15, i64 236}
!40 = !{!14, !15, i64 4}
!41 = !{!10, !12, i64 8}


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