; LLVM IR from erwincoumans/tiny-differentiable-simulator :: examples (spherical_joint_test)

; 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.TinyOpenGL3App = type { %struct.TinyCommonGraphicsApp.base, ptr, ptr, ptr }
%struct.TinyCommonGraphicsApp.base = type <{ ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, float, float, float, float, i8, [3 x i8], [3 x float] }>
%"class.tds::World" = type { ptr, %"class.std::vector.9", %"class.std::vector.14", %"class.Eigen::Matrix", %"class.std::vector.21", %"class.tds::CollisionDispatcher", ptr, ptr, ptr, %"class.std::vector.26", %"class.std::vector.31", i32, double, double, %"class.std::vector.36" }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [3 x double] }
%"class.std::vector.21" = type { %"struct.std::_Vector_base.22" }
%"struct.std::_Vector_base.22" = type { %"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.tds::CollisionDispatcher" = type { [6 x [6 x ptr]] }
%"class.std::vector.26" = type { %"struct.std::_Vector_base.27" }
%"struct.std::_Vector_base.27" = type { %"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.36" = type { %"struct.std::_Vector_base.37" }
%"struct.std::_Vector_base.37" = type { %"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.41" = type { %"struct.std::_Vector_base.42" }
%"struct.std::_Vector_base.42" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"struct.tds::Transform" = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix.46" }
%"class.Eigen::Matrix.46" = type { %"class.Eigen::PlainObjectBase.47" }
%"class.Eigen::PlainObjectBase.47" = type { %"class.Eigen::DenseStorage.54" }
%"class.Eigen::DenseStorage.54" = type { %"struct.Eigen::internal::plain_array.55" }
%"struct.Eigen::internal::plain_array.55" = type { [9 x double] }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl" }
%"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.tds::UrdfCache" = type { %"class.std::map" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"struct.TINY::TinyQuaternion" = type { float, float, float, float }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%struct.DrawGridData = type { i32, float, i32, i8, [4 x float] }
%"class.__gnu_cxx::__normal_iterator.98" = type { ptr }
%"class.std::chrono::duration" = type { double }
%"class.Eigen::Quaternion" = type { %"class.Eigen::Matrix.99" }
%"class.Eigen::Matrix.99" = type { %"class.Eigen::PlainObjectBase.100" }
%"class.Eigen::PlainObjectBase.100" = type { %"class.Eigen::DenseStorage.107" }
%"class.Eigen::DenseStorage.107" = type { %"struct.Eigen::internal::plain_array.108" }
%"struct.Eigen::internal::plain_array.108" = type { [4 x double] }
%struct.TinyCommonGraphicsApp = type <{ ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, float, float, float, float, i8, [3 x i8], [3 x float], [4 x i8] }>
%"class.tds::MultiBody" = type { i32, i32, double, i8, %"class.std::vector.41", %"struct.tds::MotionVector", %"struct.tds::MotionVector", %"struct.tds::ForceVector", %"struct.tds::ForceVector", %"struct.tds::ForceVector", %"struct.tds::RigidBodyInertia", %"struct.tds::ArticulatedBodyInertia", %"struct.tds::Transform", %"class.std::vector.41", %"class.std::vector.41", %"class.std::vector.56", %"class.std::vector.61", %"class.std::vector.56", %"class.Eigen::Matrix.66", %"class.Eigen::Matrix.66", %"class.Eigen::Matrix.66", %"class.Eigen::Matrix.66", %"class.std::__cxx11::basic_string", %"class.std::vector.75" }
%"struct.tds::MotionVector" = type { %"struct.tds::SpatialVector" }
%"struct.tds::SpatialVector" = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix" }
%"struct.tds::ForceVector" = type { %"struct.tds::SpatialVector" }
%"struct.tds::RigidBodyInertia" = type { double, %"class.Eigen::Matrix", %"class.Eigen::Matrix.46" }
%"struct.tds::ArticulatedBodyInertia" = type { %"class.Eigen::Matrix.46", %"class.Eigen::Matrix.46", %"class.Eigen::Matrix.46" }
%"class.std::vector.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<const tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<const tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<const tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<const tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<const tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<const tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<tds::Transform<tds::EigenAlgebraT<>>, std::allocator<tds::Transform<tds::EigenAlgebraT<>>>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::Transform<tds::EigenAlgebraT<>>, std::allocator<tds::Transform<tds::EigenAlgebraT<>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::Transform<tds::EigenAlgebraT<>>, std::allocator<tds::Transform<tds::EigenAlgebraT<>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::Transform<tds::EigenAlgebraT<>>, std::allocator<tds::Transform<tds::EigenAlgebraT<>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.Eigen::Matrix.66" = type { %"class.Eigen::PlainObjectBase.67" }
%"class.Eigen::PlainObjectBase.67" = type { %"class.Eigen::DenseStorage.74" }
%"class.Eigen::DenseStorage.74" = type { ptr, i64 }
%"class.std::vector.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = type { %"struct.std::_Vector_base<tds::Link<tds::EigenAlgebraT<>>, std::allocator<tds::Link<tds::EigenAlgebraT<>>>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::Link<tds::EigenAlgebraT<>>, std::allocator<tds::Link<tds::EigenAlgebraT<>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::Link<tds::EigenAlgebraT<>>, std::allocator<tds::Link<tds::EigenAlgebraT<>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::Link<tds::EigenAlgebraT<>>, std::allocator<tds::Link<tds::EigenAlgebraT<>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tds::Link" = type { i32, %"struct.tds::Transform", %"struct.tds::Transform", %"struct.tds::Transform", %"struct.tds::Transform", %"struct.tds::MotionVector", %"struct.tds::MotionVector", %"struct.tds::MotionVector", %"struct.tds::MotionVector", %"struct.tds::MotionVector", %"struct.tds::RigidBodyInertia", %"struct.tds::ArticulatedBodyInertia", %"struct.tds::ForceVector", %"struct.tds::MotionVector", %"struct.tds::ForceVector", double, double, %"struct.tds::ForceVector", [8 x i8], %"class.Eigen::Matrix.88", %"class.Eigen::Matrix.88", %"class.Eigen::Matrix.46", %"class.Eigen::Matrix.46", %"class.Eigen::Matrix", %"struct.tds::ForceVector", i32, i32, %"class.std::vector.61", %"class.std::vector.56", %"class.std::vector.41", %"class.std::vector.56", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i32, double, double, [8 x i8] }
%"class.Eigen::Matrix.88" = type { %"class.Eigen::PlainObjectBase.89" }
%"class.Eigen::PlainObjectBase.89" = type { %"class.Eigen::DenseStorage.96" }
%"class.Eigen::DenseStorage.96" = type { %"struct.Eigen::internal::plain_array.97" }
%"struct.Eigen::internal::plain_array.97" = type { [18 x double] }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [110 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [9 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #3 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.TinyOpenGL3App, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.tds::World", align 8
  %10 = alloca %"class.std::vector.9", align 8
  %11 = alloca %"class.std::vector.41", align 8
  %12 = alloca %"class.std::vector.14", align 8
  %13 = alloca %"class.std::vector.41", align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator", align 1
  %20 = alloca %"struct.tds::Transform", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.Eigen::Matrix", align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i1, align 1
  %26 = alloca ptr, align 8
  %27 = alloca %"class.std::vector.80", align 8
  %28 = alloca %"class.tds::UrdfCache", align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator", align 1
  %33 = alloca ptr, align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::allocator", align 1
  %36 = alloca %"class.Eigen::Matrix", align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %"struct.TINY::TinyVector3", align 4
  %43 = alloca %"struct.TINY::TinyQuaternion", align 4
  %44 = alloca %"struct.TINY::TinyVector3", align 4
  %45 = alloca %"struct.TINY::TinyVector3", align 4
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %50 = alloca ptr, align 8
  %51 = alloca %"class.Eigen::Matrix", align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca i32, align 4
  %56 = alloca double, align 8
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca %struct.DrawGridData, align 4
  %61 = alloca %struct.DrawGridData, align 8
  %62 = alloca ptr, align 8
  %63 = alloca %"class.__gnu_cxx::__normal_iterator.98", align 8
  %64 = alloca %"class.__gnu_cxx::__normal_iterator.98", align 8
  %65 = alloca ptr, align 8
  %66 = alloca i32, align 4
  %67 = alloca %"struct.TINY::TinyVector3", align 4
  %68 = alloca %"struct.TINY::TinyVector3", align 4
  %69 = alloca float, align 4
  %70 = alloca %"class.std::chrono::duration", align 8
  %71 = alloca double, align 8
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca ptr, align 8
  %76 = alloca i32, align 4
  %77 = alloca %"class.Eigen::Quaternion", align 16
  %78 = alloca ptr, align 8
  %79 = alloca %"struct.tds::Transform", align 8
  %80 = alloca %"struct.TINY::TinyVector3", align 4
  %81 = alloca %"class.Eigen::Quaternion", align 16
  %82 = alloca %"struct.TINY::TinyQuaternion", align 4
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca float, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 104, ptr %6) #14
  call void @_ZN14TinyOpenGL3AppC1EPKciibiiii(ptr noundef nonnull align 8 dereferenceable(104) %6, ptr noundef @.str.16, i32 noundef 1024, i32 noundef 768, i1 noundef zeroext true, i32 noundef 0, i32 noundef -1, i32 noundef 131072, i32 noundef 134217728)
  %86 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %87 = load ptr, ptr %86, align 8, !tbaa !11
  %88 = load ptr, ptr %87, align 8, !tbaa !15
  %89 = getelementptr inbounds ptr, ptr %88, i64 2
  %90 = load ptr, ptr %89, align 8
  invoke void %90(ptr noundef nonnull align 8 dereferenceable(60) %87)
          to label %91 unwind label %165

91:                                               ; preds = %2
  invoke void @_ZN14TinyOpenGL3App11set_up_axisEi(ptr noundef nonnull align 8 dereferenceable(104) %6, i32 noundef 2)
          to label %92 unwind label %165

92:                                               ; preds = %91
  %93 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %94 = load ptr, ptr %93, align 8, !tbaa !11
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  %96 = getelementptr inbounds ptr, ptr %95, i64 38
  %97 = load ptr, ptr %96, align 8
  %98 = invoke noundef ptr %97(ptr noundef nonnull align 8 dereferenceable(60) %94)
          to label %99 unwind label %165

99:                                               ; preds = %92
  %100 = load ptr, ptr %98, align 8, !tbaa !15
  %101 = getelementptr inbounds ptr, ptr %100, i64 8
  %102 = load ptr, ptr %101, align 8
  invoke void %102(ptr noundef nonnull align 8 dereferenceable(16) %98, float noundef 4.000000e+00)
          to label %103 unwind label %165

103:                                              ; preds = %99
  %104 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %105 = load ptr, ptr %104, align 8, !tbaa !11
  %106 = load ptr, ptr %105, align 8, !tbaa !15
  %107 = getelementptr inbounds ptr, ptr %106, i64 38
  %108 = load ptr, ptr %107, align 8
  %109 = invoke noundef ptr %108(ptr noundef nonnull align 8 dereferenceable(60) %105)
          to label %110 unwind label %165

110:                                              ; preds = %103
  %111 = load ptr, ptr %109, align 8, !tbaa !15
  %112 = getelementptr inbounds ptr, ptr %111, i64 15
  %113 = load ptr, ptr %112, align 8
  invoke void %113(ptr noundef nonnull align 8 dereferenceable(16) %109, float noundef -3.000000e+01)
          to label %114 unwind label %165

114:                                              ; preds = %110
  %115 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %116 = load ptr, ptr %115, align 8, !tbaa !11
  %117 = load ptr, ptr %116, align 8, !tbaa !15
  %118 = getelementptr inbounds ptr, ptr %117, i64 38
  %119 = load ptr, ptr %118, align 8
  %120 = invoke noundef ptr %119(ptr noundef nonnull align 8 dereferenceable(60) %116)
          to label %121 unwind label %165

121:                                              ; preds = %114
  %122 = load ptr, ptr %120, align 8, !tbaa !15
  %123 = getelementptr inbounds ptr, ptr %122, i64 13
  %124 = load ptr, ptr %123, align 8
  invoke void %124(ptr noundef nonnull align 8 dereferenceable(16) %120, float noundef 9.000000e+01)
          to label %125 unwind label %165

125:                                              ; preds = %121
  %126 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %127 = load ptr, ptr %126, align 8, !tbaa !11
  %128 = load ptr, ptr %127, align 8, !tbaa !15
  %129 = getelementptr inbounds ptr, ptr %128, i64 38
  %130 = load ptr, ptr %129, align 8
  %131 = invoke noundef ptr %130(ptr noundef nonnull align 8 dereferenceable(60) %127)
          to label %132 unwind label %165

132:                                              ; preds = %125
  %133 = load ptr, ptr %131, align 8, !tbaa !15
  %134 = getelementptr inbounds ptr, ptr %133, i64 7
  %135 = load ptr, ptr %134, align 8
  invoke void %135(ptr noundef nonnull align 8 dereferenceable(16) %131, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %136 unwind label %165

136:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 512, ptr %9) #14
  %137 = invoke noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef -981, i32 noundef 100)
          to label %138 unwind label %169

138:                                              ; preds = %136
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEEC2Ed(ptr noundef nonnull align 8 dereferenceable(512) %9, double noundef %137)
          to label %139 unwind label %169

139:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #14
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #14
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #14
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #14
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #14
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #14
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #14
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #14
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #14
  store i32 5, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #14
  store i32 1, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #14
  store i8 1, ptr %16, align 1, !tbaa !17
  %140 = load i8, ptr %16, align 1, !tbaa !17, !range !18, !noundef !19
  %141 = trunc i8 %140 to i1
  br i1 %141, label %142, label %218

142:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #14
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #14
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #14
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #14
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %143 unwind label %173

143:                                              ; preds = %142
  %144 = invoke noundef ptr @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE17create_multi_bodyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(512) %9, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %145 unwind label %177

145:                                              ; preds = %143
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #14
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #14
  store ptr %144, ptr %17, align 8, !tbaa !9
  %146 = load ptr, ptr %17, align 8, !tbaa !9
  invoke void @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE17set_floating_baseEb(ptr noundef nonnull align 8 dereferenceable(944) %146, i1 noundef zeroext false)
          to label %147 unwind label %182

147:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 96, ptr %20) #14
  invoke void @_ZN3tds9TransformINS_13EigenAlgebraTIdEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %20)
          to label %148 unwind label %186

148:                                              ; preds = %147
  invoke void @_ZN3tds9TransformINS_13EigenAlgebraTIdEEE12set_identityEv(ptr noundef nonnull align 8 dereferenceable(96) %20)
          to label %149 unwind label %186

149:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #14
  %150 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #15
          to label %151 unwind label %190

151:                                              ; preds = %149
  store i1 true, ptr %25, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #14
  invoke void @_ZN3tds13EigenAlgebraTIdE7unit3_zEv(ptr dead_on_unwind writable sret(%"class.Eigen::Matrix") align 8 %22)
          to label %152 unwind label %194

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #14
  %153 = invoke noundef double @_ZN3tds13EigenAlgebraTIdE4zeroEv()
          to label %154 unwind label %198

154:                                              ; preds = %152
  store double %153, ptr %23, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #14
  store double 5.000000e+02, ptr %24, align 8, !tbaa !20
  invoke void @_ZN3tds5PlaneINS_13EigenAlgebraTIdEEEC2ERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEERKdSA_(ptr noundef nonnull align 8 dereferenceable(96) %150, ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %155 unwind label %202

155:                                              ; preds = %154
  store i1 false, ptr %25, align 1
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #14
  store ptr %150, ptr %21, align 8, !tbaa !9
  %156 = load ptr, ptr %17, align 8, !tbaa !9
  %157 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_geometriesEv(ptr noundef nonnull align 8 dereferenceable(944) %156)
          to label %158 unwind label %190

158:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #14
  %159 = load ptr, ptr %21, align 8, !tbaa !9
  store ptr %159, ptr %26, align 8, !tbaa !9
  invoke void @_ZNSt6vectorIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(24) %157, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %160 unwind label %211

160:                                              ; preds = %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #14
  %161 = load ptr, ptr %17, align 8, !tbaa !9
  %162 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_transformsEi(ptr noundef nonnull align 8 dereferenceable(944) %161, i32 noundef -1)
          to label %163 unwind label %190

163:                                              ; preds = %160
  invoke void @_ZNSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE9push_backERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %162, ptr noundef nonnull align 8 dereferenceable(96) %20)
          to label %164 unwind label %190

164:                                              ; preds = %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #14
  call void @llvm.lifetime.end.p0(i64 96, ptr %20) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #14
  br label %218

165:                                              ; preds = %132, %125, %121, %114, %110, %103, %99, %92, %91, %2
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %7, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %8, align 4
  br label %723

169:                                              ; preds = %138, %136
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %7, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %8, align 4
  br label %722

173:                                              ; preds = %142
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %7, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %8, align 4
  br label %181

177:                                              ; preds = %143
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %7, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #14
  br label %181

181:                                              ; preds = %177, %173
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #14
  br label %217

182:                                              ; preds = %145
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %7, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %8, align 4
  br label %217

186:                                              ; preds = %148, %147
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %7, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %8, align 4
  br label %216

190:                                              ; preds = %163, %160, %155, %149
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %7, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %8, align 4
  br label %215

194:                                              ; preds = %151
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %7, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %8, align 4
  br label %207

198:                                              ; preds = %152
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %7, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %8, align 4
  br label %206

202:                                              ; preds = %154
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %7, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #14
  br label %206

206:                                              ; preds = %202, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #14
  br label %207

207:                                              ; preds = %206, %194
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #14
  %208 = load i1, ptr %25, align 1
  br i1 %208, label %209, label %210

209:                                              ; preds = %207
  call void @_ZdlPvm(ptr noundef %150, i64 noundef 96) #16
  br label %210

210:                                              ; preds = %209, %207
  br label %215

211:                                              ; preds = %158
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %7, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #14
  br label %215

215:                                              ; preds = %211, %210, %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #14
  br label %216

216:                                              ; preds = %215, %186
  call void @llvm.lifetime.end.p0(i64 96, ptr %20) #14
  br label %217

217:                                              ; preds = %216, %182, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #14
  br label %721

218:                                              ; preds = %164, %139
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #14
  call void @_ZNSt6vectorIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #14
  call void @llvm.lifetime.start.p0(i64 48, ptr %28) #14
  call void @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #14
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #14
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %219

219:                                              ; preds = %244, %218
  %220 = load i32, ptr %29, align 4, !tbaa !5
  %221 = load i32, ptr %15, align 4, !tbaa !5
  %222 = icmp slt i32 %220, %221
  br i1 %222, label %224, label %223

223:                                              ; preds = %219
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #14
  br label %275

224:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #14
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #14
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #14
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #14
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #14
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %225 unwind label %247

225:                                              ; preds = %224
  %226 = invoke noundef zeroext i1 @_ZN3tds9FileUtils9find_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS6_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %227 unwind label %251

227:                                              ; preds = %225
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #14
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #14
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #14
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #14
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #14
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %228 unwind label %256

228:                                              ; preds = %227
  %229 = invoke noundef ptr @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEE9constructERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_5WorldIS2_EEbbSB_(ptr noundef nonnull align 8 dereferenceable(48) %28, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(512) %9, i1 noundef zeroext false, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %230 unwind label %260

230:                                              ; preds = %228
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #14
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #14
  store ptr %229, ptr %33, align 8, !tbaa !9
  %231 = invoke noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef 1, i32 noundef 2)
          to label %232 unwind label %265

232:                                              ; preds = %230
  %233 = load ptr, ptr %33, align 8, !tbaa !9
  %234 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %233)
          to label %235 unwind label %265

235:                                              ; preds = %232
  %236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %234, i64 noundef 2)
          to label %237 unwind label %265

237:                                              ; preds = %235
  store double %231, ptr %236, align 8, !tbaa !20
  %238 = load ptr, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #14
  %239 = load i32, ptr %29, align 4, !tbaa !5
  %240 = sitofp i32 %239 to double
  store double %240, ptr %37, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #14
  store double 0.000000e+00, ptr %38, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #14
  store double 2.000000e+00, ptr %39, align 8, !tbaa !20
  invoke void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %241 unwind label %269

241:                                              ; preds = %237
  invoke void @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE12set_positionERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEE(ptr noundef nonnull align 8 dereferenceable(944) %238, ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %242 unwind label %269

242:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #14
  invoke void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %243 unwind label %265

243:                                              ; preds = %242
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #14
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #14
  br label %244

244:                                              ; preds = %243
  %245 = load i32, ptr %29, align 4, !tbaa !5
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %29, align 4, !tbaa !5
  br label %219, !llvm.loop !22

247:                                              ; preds = %224
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %7, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %8, align 4
  br label %255

251:                                              ; preds = %225
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %7, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #14
  br label %255

255:                                              ; preds = %251, %247
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #14
  br label %274

256:                                              ; preds = %227
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %7, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %8, align 4
  br label %264

260:                                              ; preds = %228
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %7, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #14
  br label %264

264:                                              ; preds = %260, %256
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #14
  br label %273

265:                                              ; preds = %242, %235, %232, %230
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %7, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %8, align 4
  br label %273

269:                                              ; preds = %241, %237
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %7, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #14
  br label %273

273:                                              ; preds = %269, %265, %264
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #14
  br label %274

274:                                              ; preds = %273, %255
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #14
  br label %720

275:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #14
  %276 = invoke noundef i32 @_ZN14TinyOpenGL3App35register_graphics_unit_sphere_shapeE23EnumSphereLevelOfDetaili(ptr noundef nonnull align 8 dereferenceable(104) %6, i32 noundef 3, i32 noundef -1)
          to label %277 unwind label %285

277:                                              ; preds = %275
  store i32 %276, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #14
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %278

278:                                              ; preds = %307, %277
  %279 = load i32, ptr %41, align 4, !tbaa !5
  %280 = load i32, ptr %14, align 4, !tbaa !5
  %281 = load i32, ptr %15, align 4, !tbaa !5
  %282 = mul nsw i32 %280, %281
  %283 = icmp slt i32 %279, %282
  br i1 %283, label %289, label %284

284:                                              ; preds = %278
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #14
  br label %334

285:                                              ; preds = %275
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %7, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %8, align 4
  br label %719

289:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #14
  %290 = load i32, ptr %41, align 4, !tbaa !5
  %291 = sitofp i32 %290 to double
  %292 = fmul double %291, 1.000000e-01
  %293 = fptrunc double %292 to float
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %42, float noundef 0.000000e+00, float noundef %293, float noundef 0.000000e+00)
          to label %294 unwind label %310

294:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #14
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %43, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %295 unwind label %314

295:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #14
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %44, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
          to label %296 unwind label %318

296:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #14
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
          to label %297 unwind label %322

297:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #14
  %298 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %299 = load ptr, ptr %298, align 8, !tbaa !11
  %300 = load i32, ptr %40, align 4, !tbaa !5
  %301 = load ptr, ptr %299, align 8, !tbaa !15
  %302 = getelementptr inbounds ptr, ptr %301, i64 17
  %303 = load ptr, ptr %302, align 8
  %304 = invoke noundef i32 %303(ptr noundef nonnull align 8 dereferenceable(60) %299, i32 noundef %300, ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %305 unwind label %326

305:                                              ; preds = %297
  store i32 %304, ptr %46, align 4, !tbaa !5
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %306 unwind label %326

306:                                              ; preds = %305
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #14
  br label %307

307:                                              ; preds = %306
  %308 = load i32, ptr %41, align 4, !tbaa !5
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %41, align 4, !tbaa !5
  br label %278, !llvm.loop !24

310:                                              ; preds = %289
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %7, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %8, align 4
  br label %333

314:                                              ; preds = %294
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %7, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %8, align 4
  br label %332

318:                                              ; preds = %295
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %7, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %8, align 4
  br label %331

322:                                              ; preds = %296
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %7, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %8, align 4
  br label %330

326:                                              ; preds = %305, %297
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %7, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #14
  br label %330

330:                                              ; preds = %326, %322
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #14
  br label %331

331:                                              ; preds = %330, %318
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #14
  br label %332

332:                                              ; preds = %331, %314
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #14
  br label %333

333:                                              ; preds = %332, %310
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #14
  br label %719

334:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #14
  %335 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef 0) #14
  %336 = load ptr, ptr %335, align 8, !tbaa !9
  %337 = getelementptr inbounds %"class.tds::MultiBody", ptr %336, i32 0, i32 23
  store ptr %337, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #14
  %338 = load ptr, ptr %47, align 8, !tbaa !9
  %339 = call ptr @_ZNSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %338) #14
  %340 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %48, i32 0, i32 0
  store ptr %339, ptr %340, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #14
  %341 = load ptr, ptr %47, align 8, !tbaa !9
  %342 = call ptr @_ZNSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %341) #14
  %343 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %49, i32 0, i32 0
  store ptr %342, ptr %343, align 8
  br label %344

344:                                              ; preds = %354, %334
  %345 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #14
  br i1 %345, label %347, label %346

346:                                              ; preds = %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #14
  br label %360

347:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #14
  %348 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #14
  store ptr %348, ptr %50, align 8, !tbaa !9
  %349 = invoke noundef double @_ZN3tds13EigenAlgebraTIdE3oneEv()
          to label %350 unwind label %356

350:                                              ; preds = %347
  %351 = fmul double %349, 5.000000e-01
  %352 = load ptr, ptr %50, align 8, !tbaa !9
  %353 = getelementptr inbounds %"struct.tds::Link", ptr %352, i32 0, i32 36
  store double %351, ptr %353, align 16, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #14
  br label %354

354:                                              ; preds = %350
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #14
  br label %344

356:                                              ; preds = %347
  %357 = landingpad { ptr, i32 }
          cleanup
  %358 = extractvalue { ptr, i32 } %357, 0
  store ptr %358, ptr %7, align 8
  %359 = extractvalue { ptr, i32 } %357, 1
  store i32 %359, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #14
  br label %719

360:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 24, ptr %51) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #14
  store double 0.000000e+00, ptr %52, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #14
  store double 0.000000e+00, ptr %53, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #14
  store double -9.810000e+00, ptr %54, align 8, !tbaa !20
  invoke void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %361 unwind label %396

361:                                              ; preds = %360
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #14
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #14
  store i32 480, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #14
  %362 = load i32, ptr %55, align 4, !tbaa !5
  %363 = sitofp i32 %362 to double
  %364 = fdiv double 1.000000e+00, %363
  store double %364, ptr %56, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #14
  store i32 2, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #14
  store i32 0, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #14
  store i32 10, ptr %59, align 4, !tbaa !5
  br label %365

365:                                              ; preds = %710, %361
  %366 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 1
  %367 = load ptr, ptr %366, align 8, !tbaa !61
  %368 = load ptr, ptr %367, align 8, !tbaa !15
  %369 = getelementptr inbounds ptr, ptr %368, i64 7
  %370 = load ptr, ptr %369, align 8
  %371 = invoke noundef zeroext i1 %370(ptr noundef nonnull align 8 dereferenceable(8) %367)
          to label %372 unwind label %400

372:                                              ; preds = %365
  %373 = xor i1 %371, true
  br i1 %373, label %374, label %715

374:                                              ; preds = %372
  %375 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %376 = load ptr, ptr %375, align 8, !tbaa !11
  %377 = load i32, ptr %57, align 4, !tbaa !5
  %378 = load ptr, ptr %376, align 8, !tbaa !15
  %379 = getelementptr inbounds ptr, ptr %378, i64 36
  %380 = load ptr, ptr %379, align 8
  invoke void %380(ptr noundef nonnull align 8 dereferenceable(60) %376, i32 noundef %377)
          to label %381 unwind label %400

381:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #14
  invoke void @_ZN12DrawGridDataC2Ei(ptr noundef nonnull align 4 dereferenceable(32) %60, i32 noundef 2)
          to label %382 unwind label %404

382:                                              ; preds = %381
  %383 = getelementptr inbounds %struct.DrawGridData, ptr %60, i32 0, i32 3
  store i8 1, ptr %383, align 4, !tbaa !62
  %384 = load i32, ptr %57, align 4, !tbaa !5
  %385 = getelementptr inbounds %struct.DrawGridData, ptr %60, i32 0, i32 2
  store i32 %384, ptr %385, align 4, !tbaa !64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %61, ptr align 4 %60, i64 32, i1 false), !tbaa.struct !65
  invoke void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104) %6, ptr noundef byval(%struct.DrawGridData) align 8 %61)
          to label %386 unwind label %404

386:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #14
  store ptr %12, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #14
  %387 = load ptr, ptr %62, align 8, !tbaa !9
  %388 = call ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %387) #14
  %389 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.98", ptr %63, i32 0, i32 0
  store ptr %388, ptr %389, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #14
  %390 = load ptr, ptr %62, align 8, !tbaa !9
  %391 = call ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %390) #14
  %392 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.98", ptr %64, i32 0, i32 0
  store ptr %391, ptr %392, align 8
  br label %393

393:                                              ; preds = %449, %386
  %394 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef nonnull align 8 dereferenceable(8) %64) #14
  br i1 %394, label %408, label %395

395:                                              ; preds = %393
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #14
  br label %451

396:                                              ; preds = %360
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %7, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #14
  br label %718

400:                                              ; preds = %374, %365
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %7, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %8, align 4
  br label %717

404:                                              ; preds = %382, %381
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %7, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %8, align 4
  br label %714

408:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #14
  %409 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #14
  store ptr %409, ptr %65, align 8, !tbaa !9
  %410 = load ptr, ptr %65, align 8, !tbaa !9
  %411 = load ptr, ptr %410, align 8, !tbaa !9
  invoke void @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE12clear_forcesEv(ptr noundef nonnull align 8 dereferenceable(944) %411)
          to label %412 unwind label %444

412:                                              ; preds = %408
  %413 = load ptr, ptr %65, align 8, !tbaa !9
  %414 = load ptr, ptr %413, align 8, !tbaa !9
  invoke void @_ZN3tds18forward_kinematicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EE(ptr noundef nonnull align 8 dereferenceable(944) %414)
          to label %415 unwind label %444

415:                                              ; preds = %412
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE4stepERKd(ptr noundef nonnull align 8 dereferenceable(512) %9, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %416 unwind label %444

416:                                              ; preds = %415
  %417 = load ptr, ptr %65, align 8, !tbaa !9
  %418 = load ptr, ptr %417, align 8, !tbaa !9
  invoke void @_ZN3tds16forward_dynamicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERKNS4_7Vector3Eb(ptr noundef nonnull align 8 dereferenceable(944) %418, ptr noundef nonnull align 8 dereferenceable(24) %51, i1 noundef zeroext false)
          to label %419 unwind label %444

419:                                              ; preds = %416
  %420 = load ptr, ptr %65, align 8, !tbaa !9
  %421 = load ptr, ptr %420, align 8, !tbaa !9
  %422 = load ptr, ptr %65, align 8, !tbaa !9
  %423 = load ptr, ptr %422, align 8, !tbaa !9
  %424 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944) %423)
          to label %425 unwind label %444

425:                                              ; preds = %419
  %426 = load ptr, ptr %65, align 8, !tbaa !9
  %427 = load ptr, ptr %426, align 8, !tbaa !9
  %428 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %427)
          to label %429 unwind label %444

429:                                              ; preds = %425
  %430 = load ptr, ptr %65, align 8, !tbaa !9
  %431 = load ptr, ptr %430, align 8, !tbaa !9
  %432 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944) %431)
          to label %433 unwind label %444

433:                                              ; preds = %429
  invoke void @_ZN3tds15integrate_eulerINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERNS4_7VectorXES8_RKS7_RKNS4_6ScalarE(ptr noundef nonnull align 8 dereferenceable(944) %421, ptr noundef nonnull align 8 dereferenceable(16) %424, ptr noundef nonnull align 8 dereferenceable(16) %428, ptr noundef nonnull align 8 dereferenceable(16) %432, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %434 unwind label %444

434:                                              ; preds = %433
  %435 = load ptr, ptr %65, align 8, !tbaa !9
  %436 = load ptr, ptr %435, align 8, !tbaa !9
  %437 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %436)
          to label %438 unwind label %444

438:                                              ; preds = %434
  %439 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %437, i64 noundef 0)
          to label %440 unwind label %444

440:                                              ; preds = %438
  %441 = load double, ptr %439, align 8, !tbaa !20
  %442 = fcmp olt double %441, -1.000000e+04
  br i1 %442, label %443, label %448

443:                                              ; preds = %440
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.19, i32 noundef 190, ptr noundef @__PRETTY_FUNCTION__.main) #17
  unreachable

444:                                              ; preds = %438, %434, %433, %429, %425, %419, %416, %415, %412, %408
  %445 = landingpad { ptr, i32 }
          cleanup
  %446 = extractvalue { ptr, i32 } %445, 0
  store ptr %446, ptr %7, align 8
  %447 = extractvalue { ptr, i32 } %445, 1
  store i32 %447, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #14
  br label %714

448:                                              ; preds = %440
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #14
  br label %449

449:                                              ; preds = %448
  %450 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #14
  br label %393

451:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #14
  store i32 0, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #14
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %67, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %452 unwind label %474

452:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 16, ptr %68) #14
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %68, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %453 unwind label %478

453:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #14
  store float 1.000000e+00, ptr %69, align 4, !tbaa !66
  %454 = load i32, ptr %58, align 4, !tbaa !5
  %455 = add nsw i32 %454, 1
  store i32 %455, ptr %58, align 4, !tbaa !5
  %456 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #14
  br i1 %456, label %710, label %457

457:                                              ; preds = %453
  %458 = load i32, ptr %58, align 4, !tbaa !5
  %459 = load i32, ptr %59, align 4, !tbaa !5
  %460 = icmp sgt i32 %458, %459
  br i1 %460, label %461, label %710

461:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #14
  %462 = load double, ptr %56, align 8, !tbaa !20
  %463 = load i32, ptr %59, align 4, !tbaa !5
  %464 = sitofp i32 %463 to double
  %465 = fmul double %462, %464
  store double %465, ptr %71, align 8, !tbaa !20
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IdvEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71)
          to label %466 unwind label %482

466:                                              ; preds = %461
  invoke void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %467 unwind label %482

467:                                              ; preds = %466
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #14
  store i32 0, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #14
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %468

468:                                              ; preds = %692, %467
  %469 = load i32, ptr %72, align 4, !tbaa !5
  %470 = sext i32 %469 to i64
  %471 = call noundef i64 @_ZNKSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #14
  %472 = icmp ult i64 %470, %471
  br i1 %472, label %486, label %473

473:                                              ; preds = %468
  store i32 14, ptr %73, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #14
  br label %695

474:                                              ; preds = %451
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %7, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %8, align 4
  br label %713

478:                                              ; preds = %452
  %479 = landingpad { ptr, i32 }
          cleanup
  %480 = extractvalue { ptr, i32 } %479, 0
  store ptr %480, ptr %7, align 8
  %481 = extractvalue { ptr, i32 } %479, 1
  store i32 %481, ptr %8, align 4
  br label %712

482:                                              ; preds = %466, %461
  %483 = landingpad { ptr, i32 }
          cleanup
  %484 = extractvalue { ptr, i32 } %483, 0
  store ptr %484, ptr %7, align 8
  %485 = extractvalue { ptr, i32 } %483, 1
  store i32 %485, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #14
  br label %711

486:                                              ; preds = %468
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #14
  store i32 0, ptr %74, align 4, !tbaa !5
  br label %487

487:                                              ; preds = %682, %486
  %488 = load i32, ptr %74, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = load i32, ptr %72, align 4, !tbaa !5
  %491 = sext i32 %490 to i64
  %492 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %491) #14
  %493 = load ptr, ptr %492, align 8, !tbaa !9
  %494 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %493)
          to label %495 unwind label %499

495:                                              ; preds = %487
  %496 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %494) #14
  %497 = icmp ult i64 %489, %496
  br i1 %497, label %503, label %498

498:                                              ; preds = %495
  store i32 17, ptr %73, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #14
  br label %691

499:                                              ; preds = %487
  %500 = landingpad { ptr, i32 }
          cleanup
  %501 = extractvalue { ptr, i32 } %500, 0
  store ptr %501, ptr %7, align 8
  %502 = extractvalue { ptr, i32 } %500, 1
  store i32 %502, ptr %8, align 4
  br label %690

503:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #14
  %504 = load i32, ptr %72, align 4, !tbaa !5
  %505 = sext i32 %504 to i64
  %506 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %505) #14
  %507 = load ptr, ptr %506, align 8, !tbaa !9
  store ptr %507, ptr %75, align 8, !tbaa !9
  %508 = load ptr, ptr %75, align 8, !tbaa !9
  %509 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %508)
          to label %510 unwind label %517

510:                                              ; preds = %503
  %511 = load i32, ptr %74, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %509, i64 noundef %512) #14
  %514 = getelementptr inbounds %"struct.tds::Link", ptr %513, i32 0, i32 30
  %515 = call noundef zeroext i1 @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %514) #14
  br i1 %515, label %516, label %521

516:                                              ; preds = %510
  store i32 19, ptr %73, align 4
  br label %679

517:                                              ; preds = %503
  %518 = landingpad { ptr, i32 }
          cleanup
  %519 = extractvalue { ptr, i32 } %518, 0
  store ptr %519, ptr %7, align 8
  %520 = extractvalue { ptr, i32 } %518, 1
  store i32 %520, ptr %8, align 4
  br label %689

521:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #14
  %522 = load i32, ptr %66, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %66, align 4, !tbaa !5
  %524 = sext i32 %522 to i64
  %525 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %524) #14
  %526 = load i32, ptr %525, align 4, !tbaa !5
  store i32 %526, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #14
  invoke void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %77)
          to label %527 unwind label %619

527:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #14
  call void @llvm.lifetime.start.p0(i64 96, ptr %79) #14
  %528 = load ptr, ptr %75, align 8, !tbaa !9
  %529 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %528)
          to label %530 unwind label %623

530:                                              ; preds = %527
  %531 = load i32, ptr %74, align 4, !tbaa !5
  %532 = sext i32 %531 to i64
  %533 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %529, i64 noundef %532) #14
  %534 = getelementptr inbounds %"struct.tds::Link", ptr %533, i32 0, i32 4
  %535 = load ptr, ptr %75, align 8, !tbaa !9
  %536 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %535)
          to label %537 unwind label %623

537:                                              ; preds = %530
  %538 = load i32, ptr %74, align 4, !tbaa !5
  %539 = sext i32 %538 to i64
  %540 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %536, i64 noundef %539) #14
  %541 = getelementptr inbounds %"struct.tds::Link", ptr %540, i32 0, i32 30
  %542 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %541, i64 noundef 0) #14
  invoke void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind writable sret(%"struct.tds::Transform") align 8 %79, ptr noundef nonnull align 8 dereferenceable(96) %534, ptr noundef nonnull align 8 dereferenceable(96) %542)
          to label %543 unwind label %623

543:                                              ; preds = %537
  store ptr %79, ptr %78, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %80) #14
  %544 = load ptr, ptr %78, align 8, !tbaa !9
  %545 = getelementptr inbounds %"struct.tds::Transform", ptr %544, i32 0, i32 0
  %546 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %545)
          to label %547 unwind label %627

547:                                              ; preds = %543
  %548 = load double, ptr %546, align 8, !tbaa !20
  %549 = fptrunc double %548 to float
  %550 = load ptr, ptr %78, align 8, !tbaa !9
  %551 = getelementptr inbounds %"struct.tds::Transform", ptr %550, i32 0, i32 0
  %552 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %551)
          to label %553 unwind label %627

553:                                              ; preds = %547
  %554 = load double, ptr %552, align 8, !tbaa !20
  %555 = fptrunc double %554 to float
  %556 = load ptr, ptr %78, align 8, !tbaa !9
  %557 = getelementptr inbounds %"struct.tds::Transform", ptr %556, i32 0, i32 0
  %558 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %557)
          to label %559 unwind label %627

559:                                              ; preds = %553
  %560 = load double, ptr %558, align 8, !tbaa !20
  %561 = fptrunc double %560 to float
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %80, float noundef %549, float noundef %555, float noundef %561)
          to label %562 unwind label %627

562:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #14
  %563 = load ptr, ptr %78, align 8, !tbaa !9
  %564 = getelementptr inbounds %"struct.tds::Transform", ptr %563, i32 0, i32 1
  invoke void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind writable sret(%"class.Eigen::Quaternion") align 16 %81, ptr noundef nonnull align 8 dereferenceable(72) %564)
          to label %565 unwind label %631

565:                                              ; preds = %562
  %566 = call noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32) %77, ptr noundef nonnull align 16 dereferenceable(32) %81) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #14
  call void @llvm.lifetime.start.p0(i64 16, ptr %82) #14
  %567 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %568 unwind label %635

568:                                              ; preds = %565
  %569 = load double, ptr %567, align 8, !tbaa !20
  %570 = fptrunc double %569 to float
  %571 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %572 unwind label %635

572:                                              ; preds = %568
  %573 = load double, ptr %571, align 8, !tbaa !20
  %574 = fptrunc double %573 to float
  %575 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %576 unwind label %635

576:                                              ; preds = %572
  %577 = load double, ptr %575, align 8, !tbaa !20
  %578 = fptrunc double %577 to float
  %579 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %580 unwind label %635

580:                                              ; preds = %576
  %581 = load double, ptr %579, align 8, !tbaa !20
  %582 = fptrunc double %581 to float
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %82, float noundef %570, float noundef %574, float noundef %578, float noundef %582)
          to label %583 unwind label %635

583:                                              ; preds = %580
  %584 = load i32, ptr %74, align 4, !tbaa !5
  %585 = icmp eq i32 %584, 0
  br i1 %585, label %586, label %653

586:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #14
  %587 = load ptr, ptr %75, align 8, !tbaa !9
  %588 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944) %587, i32 noundef -1)
          to label %589 unwind label %639

589:                                              ; preds = %586
  %590 = getelementptr inbounds %"struct.tds::Transform", ptr %588, i32 0, i32 0
  %591 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %590, i64 noundef 0)
          to label %592 unwind label %639

592:                                              ; preds = %589
  %593 = load double, ptr %591, align 8, !tbaa !20
  %594 = fptrunc double %593 to float
  store float %594, ptr %83, align 4, !tbaa !66
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #14
  %595 = load ptr, ptr %75, align 8, !tbaa !9
  %596 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944) %595, i32 noundef -1)
          to label %597 unwind label %643

597:                                              ; preds = %592
  %598 = getelementptr inbounds %"struct.tds::Transform", ptr %596, i32 0, i32 0
  %599 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %598, i64 noundef 1)
          to label %600 unwind label %643

600:                                              ; preds = %597
  %601 = load double, ptr %599, align 8, !tbaa !20
  %602 = fptrunc double %601 to float
  store float %602, ptr %84, align 4, !tbaa !66
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #14
  %603 = load ptr, ptr %75, align 8, !tbaa !9
  %604 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944) %603, i32 noundef -1)
          to label %605 unwind label %647

605:                                              ; preds = %600
  %606 = getelementptr inbounds %"struct.tds::Transform", ptr %604, i32 0, i32 0
  %607 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %606, i64 noundef 2)
          to label %608 unwind label %647

608:                                              ; preds = %605
  %609 = load double, ptr %607, align 8, !tbaa !20
  %610 = fptrunc double %609 to float
  store float %610, ptr %85, align 4, !tbaa !66
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEE8setValueERKfS4_S4_(ptr noundef nonnull align 4 dereferenceable(16) %67, ptr noundef nonnull align 4 dereferenceable(4) %83, ptr noundef nonnull align 4 dereferenceable(4) %84, ptr noundef nonnull align 4 dereferenceable(4) %85)
          to label %611 unwind label %647

611:                                              ; preds = %608
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #14
  %612 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %613 = load ptr, ptr %612, align 8, !tbaa !11
  %614 = load float, ptr %69, align 4, !tbaa !66
  %615 = load ptr, ptr %613, align 8, !tbaa !15
  %616 = getelementptr inbounds ptr, ptr %615, i64 31
  %617 = load ptr, ptr %616, align 8
  invoke void %617(ptr noundef nonnull align 8 dereferenceable(60) %613, ptr noundef nonnull align 4 dereferenceable(16) %67, ptr noundef nonnull align 4 dereferenceable(16) %80, ptr noundef nonnull align 4 dereferenceable(16) %68, float noundef %614)
          to label %618 unwind label %635

618:                                              ; preds = %611
  br label %669

619:                                              ; preds = %521
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %7, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %8, align 4
  br label %688

623:                                              ; preds = %537, %530, %527
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %7, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %8, align 4
  br label %687

627:                                              ; preds = %559, %553, %547, %543
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %7, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %8, align 4
  br label %686

631:                                              ; preds = %562
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %7, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #14
  br label %686

635:                                              ; preds = %671, %669, %664, %656, %611, %580, %576, %572, %568, %565
  %636 = landingpad { ptr, i32 }
          cleanup
  %637 = extractvalue { ptr, i32 } %636, 0
  store ptr %637, ptr %7, align 8
  %638 = extractvalue { ptr, i32 } %636, 1
  store i32 %638, ptr %8, align 4
  br label %685

639:                                              ; preds = %589, %586
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %7, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %8, align 4
  br label %652

643:                                              ; preds = %597, %592
  %644 = landingpad { ptr, i32 }
          cleanup
  %645 = extractvalue { ptr, i32 } %644, 0
  store ptr %645, ptr %7, align 8
  %646 = extractvalue { ptr, i32 } %644, 1
  store i32 %646, ptr %8, align 4
  br label %651

647:                                              ; preds = %608, %605, %600
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %7, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #14
  br label %651

651:                                              ; preds = %647, %643
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #14
  br label %652

652:                                              ; preds = %651, %639
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #14
  br label %685

653:                                              ; preds = %583
  %654 = load i32, ptr %74, align 4, !tbaa !5
  %655 = icmp sgt i32 %654, 0
  br i1 %655, label %656, label %664

656:                                              ; preds = %653
  %657 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %658 = load ptr, ptr %657, align 8, !tbaa !11
  %659 = load float, ptr %69, align 4, !tbaa !66
  %660 = load ptr, ptr %658, align 8, !tbaa !15
  %661 = getelementptr inbounds ptr, ptr %660, i64 31
  %662 = load ptr, ptr %661, align 8
  invoke void %662(ptr noundef nonnull align 8 dereferenceable(60) %658, ptr noundef nonnull align 4 dereferenceable(16) %67, ptr noundef nonnull align 4 dereferenceable(16) %80, ptr noundef nonnull align 4 dereferenceable(16) %68, float noundef %659)
          to label %663 unwind label %635

663:                                              ; preds = %656
  br label %668

664:                                              ; preds = %653
  %665 = load i32, ptr %72, align 4, !tbaa !5
  %666 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %665)
          to label %667 unwind label %635

667:                                              ; preds = %664
  br label %668

668:                                              ; preds = %667, %663
  br label %669

669:                                              ; preds = %668, %618
  %670 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEaSERKS2_(ptr noundef nonnull align 4 dereferenceable(16) %67, ptr noundef nonnull align 4 dereferenceable(16) %80)
          to label %671 unwind label %635

671:                                              ; preds = %669
  %672 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %673 = load ptr, ptr %672, align 8, !tbaa !11
  %674 = load i32, ptr %76, align 4, !tbaa !5
  %675 = load ptr, ptr %673, align 8, !tbaa !15
  %676 = getelementptr inbounds ptr, ptr %675, i64 19
  %677 = load ptr, ptr %676, align 8
  invoke void %677(ptr noundef nonnull align 8 dereferenceable(60) %673, ptr noundef nonnull align 4 dereferenceable(16) %80, ptr noundef nonnull align 4 dereferenceable(16) %82, i32 noundef %674)
          to label %678 unwind label %635

678:                                              ; preds = %671
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %80) #14
  call void @llvm.lifetime.end.p0(i64 96, ptr %79) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #14
  store i32 0, ptr %73, align 4
  br label %679

679:                                              ; preds = %678, %516
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #14
  %680 = load i32, ptr %73, align 4
  switch i32 %680, label %729 [
    i32 0, label %681
    i32 19, label %682
  ]

681:                                              ; preds = %679
  br label %682

682:                                              ; preds = %681, %679
  %683 = load i32, ptr %74, align 4, !tbaa !5
  %684 = add nsw i32 %683, 1
  store i32 %684, ptr %74, align 4, !tbaa !5
  br label %487, !llvm.loop !68

685:                                              ; preds = %652, %635
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #14
  br label %686

686:                                              ; preds = %685, %631, %627
  call void @llvm.lifetime.end.p0(i64 16, ptr %80) #14
  call void @llvm.lifetime.end.p0(i64 96, ptr %79) #14
  br label %687

687:                                              ; preds = %686, %623
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #14
  br label %688

688:                                              ; preds = %687, %619
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #14
  br label %689

689:                                              ; preds = %688, %517
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #14
  br label %690

690:                                              ; preds = %689, %499
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #14
  br label %711

691:                                              ; preds = %498
  br label %692

692:                                              ; preds = %691
  %693 = load i32, ptr %72, align 4, !tbaa !5
  %694 = add nsw i32 %693, 1
  store i32 %694, ptr %72, align 4, !tbaa !5
  br label %468, !llvm.loop !69

695:                                              ; preds = %473
  %696 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %697 = load ptr, ptr %696, align 8, !tbaa !11
  invoke void @_ZN24TinyGLInstancingRenderer16write_transformsEv(ptr noundef nonnull align 8 dereferenceable(60) %697)
          to label %698 unwind label %706

698:                                              ; preds = %695
  %699 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %700 = load ptr, ptr %699, align 8, !tbaa !11
  %701 = load ptr, ptr %700, align 8, !tbaa !15
  %702 = getelementptr inbounds ptr, ptr %701, i64 3
  %703 = load ptr, ptr %702, align 8
  invoke void %703(ptr noundef nonnull align 8 dereferenceable(60) %700)
          to label %704 unwind label %706

704:                                              ; preds = %698
  invoke void @_ZN14TinyOpenGL3App11swap_bufferEv(ptr noundef nonnull align 8 dereferenceable(104) %6)
          to label %705 unwind label %706

705:                                              ; preds = %704
  br label %710

706:                                              ; preds = %704, %698, %695
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %7, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %8, align 4
  br label %711

710:                                              ; preds = %705, %457, %453
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #14
  br label %365, !llvm.loop !70

711:                                              ; preds = %706, %690, %482
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #14
  br label %712

712:                                              ; preds = %711, %478
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #14
  br label %713

713:                                              ; preds = %712, %474
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #14
  br label %714

714:                                              ; preds = %713, %444, %404
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #14
  br label %717

715:                                              ; preds = %372
  store i32 0, ptr %3, align 4
  store i32 1, ptr %73, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %51) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #14
  call void @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #14
  call void @llvm.lifetime.end.p0(i64 48, ptr %28) #14
  call void @_ZNSt6vectorIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #14
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #14
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #14
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #14
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #14
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %9) #14
  call void @llvm.lifetime.end.p0(i64 512, ptr %9) #14
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %6) #14
  call void @llvm.lifetime.end.p0(i64 104, ptr %6) #14
  %716 = load i32, ptr %3, align 4
  ret i32 %716

717:                                              ; preds = %714, %400
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #14
  br label %718

718:                                              ; preds = %717, %396
  call void @llvm.lifetime.end.p0(i64 24, ptr %51) #14
  br label %719

719:                                              ; preds = %718, %356, %333, %285
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #14
  br label %720

720:                                              ; preds = %719, %274
  call void @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #14
  call void @llvm.lifetime.end.p0(i64 48, ptr %28) #14
  call void @_ZNSt6vectorIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #14
  br label %721

721:                                              ; preds = %720, %217
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #14
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #14
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #14
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #14
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #14
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %9) #14
  br label %722

722:                                              ; preds = %721, %169
  call void @llvm.lifetime.end.p0(i64 512, ptr %9) #14
  br label %723

723:                                              ; preds = %722, %165
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %6) #14
  call void @llvm.lifetime.end.p0(i64 104, ptr %6) #14
  br label %724

724:                                              ; preds = %723
  %725 = load ptr, ptr %7, align 8
  %726 = load i32, ptr %8, align 4
  %727 = insertvalue { ptr, i32 } poison, ptr %725, 0
  %728 = insertvalue { ptr, i32 } %727, i32 %726, 1
  resume { ptr, i32 } %728

729:                                              ; preds = %679
  unreachable
}

declare void @_ZN14TinyOpenGL3AppC1EPKciibiiii(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #4

declare void @_ZN14TinyOpenGL3App11set_up_axisEi(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef) unnamed_addr #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef, i32 noundef) #5 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE17create_multi_bodyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(512), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds9TransformINS_13EigenAlgebraTIdEEE12set_identityEv(ptr noundef nonnull align 8 dereferenceable(96)) #6 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #7

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds13EigenAlgebraTIdE7unit3_zEv(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Matrix") align 8) #6 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef double @_ZN3tds13EigenAlgebraTIdE4zeroEv() #5 align 2

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #8

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_geometriesEv(ptr noundef nonnull align 8 dereferenceable(944)) #5 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_transformsEi(ptr noundef nonnull align 8 dereferenceable(944), i32 noundef) #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEE9constructERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_5WorldIS2_EEbbSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(512), i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) #10 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #10 align 2

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

declare noundef i32 @_ZN14TinyOpenGL3App35register_graphics_unit_sphere_shapeE23EnumSphereLevelOfDetaili(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef, i32 noundef) unnamed_addr #4

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef double @_ZN3tds13EigenAlgebraTIdE3oneEv() #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12DrawGridDataC2Ei(ptr noundef nonnull align 4 dereferenceable(32), i32 noundef) unnamed_addr #1 align 2

declare void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef byval(%struct.DrawGridData) align 8) unnamed_addr #4

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3tds16forward_dynamicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERKNS4_7Vector3Eb(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3tds15integrate_eulerINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERNS4_7VectorXES8_RKS7_RKNS4_6ScalarE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944)) #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944)) #5 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 noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8)) #10

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944)) #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #10 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind noalias writable sret(%"struct.tds::Transform") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96)) #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Quaternion") align 16, ptr noundef nonnull align 8 dereferenceable(72)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 16 dereferenceable(32)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1)) #10 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944), i32 noundef) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) #10 align 2

declare i32 @printf(ptr noundef, ...) #4

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

declare void @_ZN24TinyGLInstancingRenderer16write_transformsEv(ptr noundef nonnull align 8 dereferenceable(60)) #4

declare void @_ZN14TinyOpenGL3App11swap_bufferEv(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #4

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

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #13

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress norecurse 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { alwaysinline 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 = { nobuiltin allocsize(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 #8 = { nobuiltin 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 #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { 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 #14 = { nounwind }
attributes #15 = { builtin allocsize(0) }
attributes #16 = { builtin nounwind }
attributes #17 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"_ZTS21TinyCommonGraphicsApp", !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !13, i64 40, !13, i64 41, !13, i64 42, !14, i64 44, !14, i64 48, !14, i64 52, !14, i64 56, !13, i64 60, !7, i64 64}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"vtable pointer", !8, i64 0}
!17 = !{!13, !13, i64 0}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = !{!21, !21, i64 0}
!21 = !{!"double", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = !{!26, !21, i64 1856}
!26 = !{!"_ZTSN3tds4LinkINS_13EigenAlgebraTIdEEEE", !27, i64 0, !28, i64 8, !28, i64 104, !28, i64 200, !28, i64 296, !37, i64 392, !37, i64 440, !37, i64 488, !37, i64 536, !37, i64 584, !39, i64 632, !40, i64 736, !41, i64 952, !37, i64 1000, !41, i64 1048, !21, i64 1096, !21, i64 1104, !41, i64 1112, !42, i64 1168, !42, i64 1312, !33, i64 1456, !33, i64 1528, !29, i64 1600, !41, i64 1624, !6, i64 1672, !6, i64 1676, !46, i64 1680, !50, i64 1704, !54, i64 1728, !50, i64 1752, !58, i64 1776, !58, i64 1808, !6, i64 1840, !6, i64 1844, !21, i64 1848, !21, i64 1856}
!27 = !{!"_ZTSN3tds9JointTypeE", !7, i64 0}
!28 = !{!"_ZTSN3tds9TransformINS_13EigenAlgebraTIdEEEE", !29, i64 0, !33, i64 24}
!29 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEE", !30, i64 0}
!30 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE", !31, i64 0}
!31 = !{!"_ZTSN5Eigen12DenseStorageIdLi3ELi3ELi1ELi0EEE", !32, i64 0}
!32 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi3ELi0ELi0EEE", !7, i64 0}
!33 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE", !34, i64 0}
!34 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi3ELi0ELi3ELi3EEEEE", !35, i64 0}
!35 = !{!"_ZTSN5Eigen12DenseStorageIdLi9ELi3ELi3ELi0EEE", !36, i64 0}
!36 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi9ELi0ELi0EEE", !7, i64 0}
!37 = !{!"_ZTSN3tds12MotionVectorINS_13EigenAlgebraTIdEEEE", !38, i64 0}
!38 = !{!"_ZTSN3tds13SpatialVectorINS_13EigenAlgebraTIdEEEE", !29, i64 0, !29, i64 24}
!39 = !{!"_ZTSN3tds16RigidBodyInertiaINS_13EigenAlgebraTIdEEEE", !21, i64 0, !29, i64 8, !33, i64 32}
!40 = !{!"_ZTSN3tds22ArticulatedBodyInertiaINS_13EigenAlgebraTIdEEEE", !33, i64 0, !33, i64 72, !33, i64 144}
!41 = !{!"_ZTSN3tds11ForceVectorINS_13EigenAlgebraTIdEEEE", !38, i64 0}
!42 = !{!"_ZTSN5Eigen6MatrixIdLi6ELi3ELi0ELi6ELi3EEE", !43, i64 0}
!43 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi6ELi3ELi0ELi6ELi3EEEEE", !44, i64 0}
!44 = !{!"_ZTSN5Eigen12DenseStorageIdLi18ELi6ELi3ELi0EEE", !45, i64 0}
!45 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi18ELi0ELi16EEE", !7, i64 0}
!46 = !{!"_ZTSSt6vectorIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!50 = !{!"_ZTSSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!54 = !{!"_ZTSSt6vectorIiSaIiEE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!58 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !59, i64 0, !60, i64 8, !7, i64 16}
!59 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !10, i64 0}
!60 = !{!"long", !7, i64 0}
!61 = !{!12, !10, i64 8}
!62 = !{!63, !13, i64 12}
!63 = !{!"_ZTS12DrawGridData", !6, i64 0, !14, i64 4, !6, i64 8, !13, i64 12, !7, i64 16}
!64 = !{!63, !6, i64 8}
!65 = !{i64 0, i64 4, !5, i64 4, i64 4, !66, i64 8, i64 4, !5, i64 12, i64 1, !17, i64 16, i64 16, !67}
!66 = !{!14, !14, i64 0}
!67 = !{!7, !7, i64 0}
!68 = distinct !{!68, !23}
!69 = distinct !{!69, !23}
!70 = distinct !{!70, !23}


; 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.TinyOpenGL3App = type { %struct.TinyCommonGraphicsApp.base, ptr, ptr, ptr }
%struct.TinyCommonGraphicsApp.base = type <{ ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, float, float, float, float, i8, [3 x i8], [3 x float] }>
%"class.tds::World" = type { ptr, %"class.std::vector.9", %"class.std::vector.14", %"class.Eigen::Matrix", %"class.std::vector.21", %"class.tds::CollisionDispatcher", ptr, ptr, ptr, %"class.std::vector.26", %"class.std::vector.31", i32, double, double, %"class.std::vector.36" }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::RigidBody<tds::EigenAlgebraT<>> *, std::allocator<tds::RigidBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::MultiBody<tds::EigenAlgebraT<>> *, std::allocator<tds::MultiBody<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [3 x double] }
%"class.std::vector.21" = type { %"struct.std::_Vector_base.22" }
%"struct.std::_Vector_base.22" = type { %"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::Geometry<tds::EigenAlgebraT<>> *, std::allocator<tds::Geometry<tds::EigenAlgebraT<>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.tds::CollisionDispatcher" = type { [6 x [6 x ptr]] }
%"class.std::vector.26" = type { %"struct.std::_Vector_base.27" }
%"struct.std::_Vector_base.27" = type { %"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::RigidBodyContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>, std::allocator<std::vector<tds::MultiBodyContactPoint<tds::EigenAlgebraT<>>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.36" = type { %"struct.std::_Vector_base.37" }
%"struct.std::_Vector_base.37" = type { %"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" }
%"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tds::ContactPoint<tds::EigenAlgebraT<>>, std::allocator<tds::ContactPoint<tds::EigenAlgebraT<>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.41" = type { %"struct.std::_Vector_base.42" }
%"struct.std::_Vector_base.42" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"struct.tds::Transform" = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix.46" }
%"class.Eigen::Matrix.46" = type { %"class.Eigen::PlainObjectBase.47" }
%"class.Eigen::PlainObjectBase.47" = type { %"class.Eigen::DenseStorage.54" }
%"class.Eigen::DenseStorage.54" = type { %"struct.Eigen::internal::plain_array.55" }
%"struct.Eigen::internal::plain_array.55" = type { [9 x double] }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl" }
%"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Eigen::Matrix<double, -1, -1>, std::allocator<Eigen::Matrix<double, -1, -1>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.tds::UrdfCache" = type { %"class.std::map" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, tds::UrdfStructures<tds::EigenAlgebraT<>>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"struct.TINY::TinyQuaternion" = type { float, float, float, float }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%struct.DrawGridData = type { i32, float, i32, i8, [4 x float] }
%"class.__gnu_cxx::__normal_iterator.98" = type { ptr }
%"class.std::chrono::duration" = type { double }
%"class.Eigen::Quaternion" = type { %"class.Eigen::Matrix.99" }
%"class.Eigen::Matrix.99" = type { %"class.Eigen::PlainObjectBase.100" }
%"class.Eigen::PlainObjectBase.100" = type { %"class.Eigen::DenseStorage.107" }
%"class.Eigen::DenseStorage.107" = type { %"struct.Eigen::internal::plain_array.108" }
%"struct.Eigen::internal::plain_array.108" = type { [4 x double] }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [110 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #3 personality ptr @__gxx_personality_v0 {
  %3 = alloca %struct.TinyOpenGL3App, align 8
  %4 = alloca %"class.tds::World", align 8
  %5 = alloca %"class.std::vector.9", align 8
  %6 = alloca %"class.std::vector.41", align 8
  %7 = alloca %"class.std::vector.14", align 8
  %8 = alloca %"class.std::vector.41", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator", align 1
  %11 = alloca %"struct.tds::Transform", align 8
  %12 = alloca %"class.Eigen::Matrix", align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca ptr, align 8
  %16 = alloca %"class.std::vector.80", align 8
  %17 = alloca %"class.tds::UrdfCache", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::allocator", align 1
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator", align 1
  %24 = alloca %"class.Eigen::Matrix", align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca %"struct.TINY::TinyVector3", align 4
  %29 = alloca %"struct.TINY::TinyQuaternion", align 4
  %30 = alloca %"struct.TINY::TinyVector3", align 4
  %31 = alloca %"struct.TINY::TinyVector3", align 4
  %32 = alloca i32, align 4
  %33 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %35 = alloca %"class.Eigen::Matrix", align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca %struct.DrawGridData, align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.98", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator.98", align 8
  %43 = alloca %"struct.TINY::TinyVector3", align 4
  %44 = alloca %"struct.TINY::TinyVector3", align 4
  %45 = alloca %"class.std::chrono::duration", align 8
  %46 = alloca double, align 8
  %47 = alloca %"class.Eigen::Quaternion", align 16
  %48 = alloca %"struct.tds::Transform", align 8
  %49 = alloca %"struct.TINY::TinyVector3", align 4
  %50 = alloca %"class.Eigen::Quaternion", align 16
  %51 = alloca %"struct.TINY::TinyQuaternion", align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %3) #13
  call void @_ZN14TinyOpenGL3AppC1EPKciibiiii(ptr noundef nonnull align 8 dereferenceable(104) %3, ptr noundef nonnull @.str.16, i32 noundef 1024, i32 noundef 768, i1 noundef zeroext true, i32 noundef 0, i32 noundef -1, i32 noundef 131072, i32 noundef 134217728)
  %55 = getelementptr inbounds i8, ptr %3, i64 16
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = load ptr, ptr %56, align 8, !tbaa !12
  %58 = getelementptr inbounds i8, ptr %57, i64 16
  %59 = load ptr, ptr %58, align 8
  invoke void %59(ptr noundef nonnull align 8 dereferenceable(60) %56)
          to label %60 unwind label %117

60:                                               ; preds = %2
  invoke void @_ZN14TinyOpenGL3App11set_up_axisEi(ptr noundef nonnull align 8 dereferenceable(104) %3, i32 noundef 2)
          to label %61 unwind label %117

61:                                               ; preds = %60
  %62 = load ptr, ptr %55, align 8, !tbaa !5
  %63 = load ptr, ptr %62, align 8, !tbaa !12
  %64 = getelementptr inbounds i8, ptr %63, i64 304
  %65 = load ptr, ptr %64, align 8
  %66 = invoke noundef ptr %65(ptr noundef nonnull align 8 dereferenceable(60) %62)
          to label %67 unwind label %117

67:                                               ; preds = %61
  %68 = load ptr, ptr %66, align 8, !tbaa !12
  %69 = getelementptr inbounds i8, ptr %68, i64 64
  %70 = load ptr, ptr %69, align 8
  invoke void %70(ptr noundef nonnull align 8 dereferenceable(16) %66, float noundef 4.000000e+00)
          to label %71 unwind label %117

71:                                               ; preds = %67
  %72 = load ptr, ptr %55, align 8, !tbaa !5
  %73 = load ptr, ptr %72, align 8, !tbaa !12
  %74 = getelementptr inbounds i8, ptr %73, i64 304
  %75 = load ptr, ptr %74, align 8
  %76 = invoke noundef ptr %75(ptr noundef nonnull align 8 dereferenceable(60) %72)
          to label %77 unwind label %117

77:                                               ; preds = %71
  %78 = load ptr, ptr %76, align 8, !tbaa !12
  %79 = getelementptr inbounds i8, ptr %78, i64 120
  %80 = load ptr, ptr %79, align 8
  invoke void %80(ptr noundef nonnull align 8 dereferenceable(16) %76, float noundef -3.000000e+01)
          to label %81 unwind label %117

81:                                               ; preds = %77
  %82 = load ptr, ptr %55, align 8, !tbaa !5
  %83 = load ptr, ptr %82, align 8, !tbaa !12
  %84 = getelementptr inbounds i8, ptr %83, i64 304
  %85 = load ptr, ptr %84, align 8
  %86 = invoke noundef ptr %85(ptr noundef nonnull align 8 dereferenceable(60) %82)
          to label %87 unwind label %117

87:                                               ; preds = %81
  %88 = load ptr, ptr %86, align 8, !tbaa !12
  %89 = getelementptr inbounds i8, ptr %88, i64 104
  %90 = load ptr, ptr %89, align 8
  invoke void %90(ptr noundef nonnull align 8 dereferenceable(16) %86, float noundef 9.000000e+01)
          to label %91 unwind label %117

91:                                               ; preds = %87
  %92 = load ptr, ptr %55, align 8, !tbaa !5
  %93 = load ptr, ptr %92, align 8, !tbaa !12
  %94 = getelementptr inbounds i8, ptr %93, i64 304
  %95 = load ptr, ptr %94, align 8
  %96 = invoke noundef ptr %95(ptr noundef nonnull align 8 dereferenceable(60) %92)
          to label %97 unwind label %117

97:                                               ; preds = %91
  %98 = load ptr, ptr %96, align 8, !tbaa !12
  %99 = getelementptr inbounds i8, ptr %98, i64 56
  %100 = load ptr, ptr %99, align 8
  invoke void %100(ptr noundef nonnull align 8 dereferenceable(16) %96, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %101 unwind label %117

101:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %4) #13
  %102 = call noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef -981, i32 noundef 100)
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEEC2Ed(ptr noundef nonnull align 8 dereferenceable(512) %4, double noundef %102)
          to label %103 unwind label %119

103:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #13
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #13
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #13
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #13
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %104 unwind label %121

104:                                              ; preds = %103
  %105 = invoke noundef ptr @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE17create_multi_bodyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(512) %4, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %106 unwind label %123

106:                                              ; preds = %104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #13
  call void @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE17set_floating_baseEb(ptr noundef nonnull align 8 dereferenceable(944) %105, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %11) #13
  invoke void @_ZN3tds9TransformINS_13EigenAlgebraTIdEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %11)
          to label %107 unwind label %126

107:                                              ; preds = %106
  invoke void @_ZN3tds9TransformINS_13EigenAlgebraTIdEEE12set_identityEv(ptr noundef nonnull align 8 dereferenceable(96) %11)
          to label %108 unwind label %126

108:                                              ; preds = %107
  %109 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #14
          to label %110 unwind label %128

110:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #13
  invoke void @_ZN3tds13EigenAlgebraTIdE7unit3_zEv(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Matrix") align 8 %12)
          to label %111 unwind label %130

111:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #13
  %112 = call noundef double @_ZN3tds13EigenAlgebraTIdE4zeroEv()
  store double %112, ptr %13, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #13
  store double 5.000000e+02, ptr %14, align 8, !tbaa !14
  invoke void @_ZN3tds5PlaneINS_13EigenAlgebraTIdEEEC2ERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEERKdSA_(ptr noundef nonnull align 8 dereferenceable(96) %109, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %113 unwind label %132

113:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #13
  %114 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_geometriesEv(ptr noundef nonnull align 8 dereferenceable(944) %105)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #13
  store ptr %109, ptr %15, align 8, !tbaa !16
  invoke void @_ZNSt6vectorIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(24) %114, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %115 unwind label %135

115:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #13
  %116 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_transformsEi(ptr noundef nonnull align 8 dereferenceable(944) %105, i32 noundef -1)
  invoke void @_ZNSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE9push_backERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %116, ptr noundef nonnull align 8 dereferenceable(96) %11)
          to label %.critedge unwind label %128

.critedge:                                        ; preds = %115
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %11) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #13
  call void @_ZNSt6vectorIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #13
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %17) #13
  call void @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %138 unwind label %154

117:                                              ; preds = %97, %91, %87, %81, %77, %71, %67, %61, %60, %2
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %469

119:                                              ; preds = %101
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %468

121:                                              ; preds = %103
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %125

123:                                              ; preds = %104
  %124 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #13
  br label %125

125:                                              ; preds = %123, %121
  %.pn = phi { ptr, i32 } [ %124, %123 ], [ %122, %121 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #13
  br label %467

126:                                              ; preds = %107, %106
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %137

128:                                              ; preds = %115, %108
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %137

130:                                              ; preds = %110
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %134

132:                                              ; preds = %111
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #13
  br label %134

134:                                              ; preds = %132, %130
  %.pn102 = phi { ptr, i32 } [ %133, %132 ], [ %131, %130 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #13
  call void @_ZdlPvm(ptr noundef nonnull %109, i64 noundef 96) #15
  br label %137

135:                                              ; preds = %113
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #13
  br label %137

137:                                              ; preds = %128, %135, %134, %126
  %.pn104.pn = phi { ptr, i32 } [ %127, %126 ], [ %129, %128 ], [ %136, %135 ], [ %.pn102, %134 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %11) #13
  br label %467

138:                                              ; preds = %.critedge
  %139 = invoke noundef zeroext i1 @_ZN3tds9FileUtils9find_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS6_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %140 unwind label %156

140:                                              ; preds = %138
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %141 unwind label %159

141:                                              ; preds = %140
  %142 = invoke noundef ptr @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEE9constructERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_5WorldIS2_EEbbSB_(ptr noundef nonnull align 8 dereferenceable(48) %17, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(512) %4, i1 noundef zeroext false, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %143 unwind label %161

143:                                              ; preds = %141
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #13
  store ptr %142, ptr %21, align 8, !tbaa !16
  %144 = call noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef 1, i32 noundef 2)
  %145 = load ptr, ptr %21, align 8, !tbaa !16
  %146 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %145)
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %146, i64 noundef 2)
          to label %148 unwind label %164

148:                                              ; preds = %143
  store double %144, ptr %147, align 8, !tbaa !14
  %149 = load ptr, ptr %21, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #13
  store double 0.000000e+00, ptr %25, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #13
  store double 0.000000e+00, ptr %26, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #13
  store double 2.000000e+00, ptr %27, align 8, !tbaa !14
  invoke void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %150 unwind label %166

150:                                              ; preds = %148
  invoke void @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE12set_positionERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEE(ptr noundef nonnull align 8 dereferenceable(944) %149, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %151 unwind label %166

151:                                              ; preds = %150
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #13
  invoke void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %152 unwind label %164

152:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #13
  %153 = invoke noundef i32 @_ZN14TinyOpenGL3App35register_graphics_unit_sphere_shapeE23EnumSphereLevelOfDetaili(ptr noundef nonnull align 8 dereferenceable(104) %3, i32 noundef 3, i32 noundef -1)
          to label %.preheader136.preheader unwind label %170

.preheader136.preheader:                          ; preds = %152
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #13
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %172 unwind label %214

154:                                              ; preds = %.critedge
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %158

156:                                              ; preds = %138
  %157 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #13
  br label %158

158:                                              ; preds = %156, %154
  %.pn124 = phi { ptr, i32 } [ %157, %156 ], [ %155, %154 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #13
  br label %169

159:                                              ; preds = %140
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %163

161:                                              ; preds = %141
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #13
  br label %163

163:                                              ; preds = %161, %159
  %.pn126 = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #13
  br label %168

164:                                              ; preds = %151, %143
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %168

166:                                              ; preds = %150, %148
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #13
  br label %168

168:                                              ; preds = %166, %164, %163
  %.pn128 = phi { ptr, i32 } [ %165, %164 ], [ %167, %166 ], [ %.pn126, %163 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #13
  br label %169

169:                                              ; preds = %168, %158
  %.pn128.pn = phi { ptr, i32 } [ %.pn128, %168 ], [ %.pn124, %158 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #13
  br label %466

170:                                              ; preds = %152
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %466

172:                                              ; preds = %.preheader136.preheader
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #13
  %173 = load ptr, ptr %55, align 8, !tbaa !5
  %174 = load ptr, ptr %173, align 8, !tbaa !12
  %175 = getelementptr inbounds i8, ptr %174, i64 136
  %176 = load ptr, ptr %175, align 8
  %177 = invoke noundef i32 %176(ptr noundef nonnull align 8 dereferenceable(60) %173, i32 noundef %153, ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %178 unwind label %216

178:                                              ; preds = %172
  store i32 %177, ptr %32, align 4, !tbaa !17
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %.preheader136.1 unwind label %216

.preheader136.1:                                  ; preds = %178
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0x3FB99999A0000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #13
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %179 unwind label %214

179:                                              ; preds = %.preheader136.1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #13
  %180 = load ptr, ptr %55, align 8, !tbaa !5
  %181 = load ptr, ptr %180, align 8, !tbaa !12
  %182 = getelementptr inbounds i8, ptr %181, i64 136
  %183 = load ptr, ptr %182, align 8
  %184 = invoke noundef i32 %183(ptr noundef nonnull align 8 dereferenceable(60) %180, i32 noundef %153, ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %185 unwind label %216

185:                                              ; preds = %179
  store i32 %184, ptr %32, align 4, !tbaa !17
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %.preheader136.2 unwind label %216

.preheader136.2:                                  ; preds = %185
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0x3FC99999A0000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #13
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %186 unwind label %214

186:                                              ; preds = %.preheader136.2
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #13
  %187 = load ptr, ptr %55, align 8, !tbaa !5
  %188 = load ptr, ptr %187, align 8, !tbaa !12
  %189 = getelementptr inbounds i8, ptr %188, i64 136
  %190 = load ptr, ptr %189, align 8
  %191 = invoke noundef i32 %190(ptr noundef nonnull align 8 dereferenceable(60) %187, i32 noundef %153, ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %192 unwind label %216

192:                                              ; preds = %186
  store i32 %191, ptr %32, align 4, !tbaa !17
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %.preheader136.3 unwind label %216

.preheader136.3:                                  ; preds = %192
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0x3FD3333340000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #13
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %193 unwind label %214

193:                                              ; preds = %.preheader136.3
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #13
  %194 = load ptr, ptr %55, align 8, !tbaa !5
  %195 = load ptr, ptr %194, align 8, !tbaa !12
  %196 = getelementptr inbounds i8, ptr %195, i64 136
  %197 = load ptr, ptr %196, align 8
  %198 = invoke noundef i32 %197(ptr noundef nonnull align 8 dereferenceable(60) %194, i32 noundef %153, ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %199 unwind label %216

199:                                              ; preds = %193
  store i32 %198, ptr %32, align 4, !tbaa !17
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %.preheader136.4 unwind label %216

.preheader136.4:                                  ; preds = %199
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0x3FD99999A0000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #13
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %200 unwind label %214

200:                                              ; preds = %.preheader136.4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #13
  %201 = load ptr, ptr %55, align 8, !tbaa !5
  %202 = load ptr, ptr %201, align 8, !tbaa !12
  %203 = getelementptr inbounds i8, ptr %202, i64 136
  %204 = load ptr, ptr %203, align 8
  %205 = invoke noundef i32 %204(ptr noundef nonnull align 8 dereferenceable(60) %201, i32 noundef %153, ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %29, ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %206 unwind label %216

206:                                              ; preds = %200
  store i32 %205, ptr %32, align 4, !tbaa !17
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %207 unwind label %216

207:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #13
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #13
  %209 = load ptr, ptr %208, align 8, !tbaa !16
  %210 = getelementptr inbounds i8, ptr %209, i64 920
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #13
  %211 = call ptr @_ZNSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %210) #13
  store ptr %211, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #13
  %212 = call ptr @_ZNSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %210) #13
  store ptr %212, ptr %34, align 8
  %213 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #13
  br i1 %213, label %.lr.ph, label %._crit_edge

214:                                              ; preds = %.preheader136.4, %.preheader136.3, %.preheader136.2, %.preheader136.1, %.preheader136.preheader
  %215 = landingpad { ptr, i32 }
          cleanup
  br label %218

216:                                              ; preds = %206, %200, %199, %193, %192, %186, %185, %179, %178, %172
  %217 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #13
  br label %218

218:                                              ; preds = %216, %214
  %.pn121 = phi { ptr, i32 } [ %217, %216 ], [ %215, %214 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #13
  br label %466

._crit_edge:                                      ; preds = %.lr.ph, %207
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %35) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #13
  store double 0.000000e+00, ptr %36, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #13
  store double 0.000000e+00, ptr %37, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #13
  store double -9.810000e+00, ptr %38, align 8, !tbaa !14
  invoke void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %225 unwind label %250

.lr.ph:                                           ; preds = %207, %.lr.ph
  %219 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #13
  %220 = call noundef double @_ZN3tds13EigenAlgebraTIdE3oneEv()
  %221 = fmul double %220, 5.000000e-01
  %222 = getelementptr inbounds i8, ptr %219, i64 1856
  store double %221, ptr %222, align 16, !tbaa !19
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #13
  %224 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3tds4LinkINS1_13EigenAlgebraTIdEEEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #13
  br i1 %224, label %.lr.ph, label %._crit_edge

225:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #13
  store double 0x3F61111111111111, ptr %39, align 8, !tbaa !14
  %226 = getelementptr inbounds i8, ptr %3, i64 8
  %227 = getelementptr inbounds i8, ptr %40, i64 12
  %228 = getelementptr inbounds i8, ptr %40, i64 8
  %229 = getelementptr inbounds i8, ptr %48, i64 24
  br label %230

230:                                              ; preds = %460, %225
  %.096 = phi i32 [ 0, %225 ], [ %.197, %460 ]
  %231 = load ptr, ptr %226, align 8, !tbaa !55
  %232 = load ptr, ptr %231, align 8, !tbaa !12
  %233 = getelementptr inbounds i8, ptr %232, i64 56
  %234 = load ptr, ptr %233, align 8
  %235 = invoke noundef zeroext i1 %234(ptr noundef nonnull align 8 dereferenceable(8) %231)
          to label %236 unwind label %252

236:                                              ; preds = %230
  br i1 %235, label %463, label %237

237:                                              ; preds = %236
  %238 = load ptr, ptr %55, align 8, !tbaa !5
  %239 = load ptr, ptr %238, align 8, !tbaa !12
  %240 = getelementptr inbounds i8, ptr %239, i64 288
  %241 = load ptr, ptr %240, align 8
  invoke void %241(ptr noundef nonnull align 8 dereferenceable(60) %238, i32 noundef 2)
          to label %242 unwind label %252

242:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #13
  call void @_ZN12DrawGridDataC2Ei(ptr noundef nonnull align 4 dereferenceable(32) %40, i32 noundef 2)
  store i8 1, ptr %227, align 4, !tbaa !56
  store i32 2, ptr %228, align 8, !tbaa !58
  invoke void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104) %3, ptr noundef nonnull byval(%struct.DrawGridData) align 8 %40)
          to label %243 unwind label %254

243:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #13
  %244 = call ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  store ptr %244, ptr %41, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #13
  %245 = call ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  store ptr %245, ptr %42, align 8
  %246 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #13
  br i1 %246, label %.lr.ph147, label %._crit_edge148

._crit_edge148:                                   ; preds = %280, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %43) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %43, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %44) #13
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %44, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %247 = add nsw i32 %.096, 1
  %248 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #13
  %249 = icmp slt i32 %.096, 10
  %or.cond.not = select i1 %248, i1 true, i1 %249
  br i1 %or.cond.not, label %460, label %283

250:                                              ; preds = %._crit_edge
  %251 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #13
  br label %465

252:                                              ; preds = %237, %230
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %464

254:                                              ; preds = %242
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %462

.lr.ph147:                                        ; preds = %243, %280
  %256 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #13
  %257 = load ptr, ptr %256, align 8, !tbaa !16
  invoke void @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE12clear_forcesEv(ptr noundef nonnull align 8 dereferenceable(944) %257)
          to label %258 unwind label %278

258:                                              ; preds = %.lr.ph147
  %259 = load ptr, ptr %256, align 8, !tbaa !16
  invoke void @_ZN3tds18forward_kinematicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EE(ptr noundef nonnull align 8 dereferenceable(944) %259)
          to label %260 unwind label %278

260:                                              ; preds = %258
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE4stepERKd(ptr noundef nonnull align 8 dereferenceable(512) %4, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %261 unwind label %278

261:                                              ; preds = %260
  %262 = load ptr, ptr %256, align 8, !tbaa !16
  invoke void @_ZN3tds16forward_dynamicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERKNS4_7Vector3Eb(ptr noundef nonnull align 8 dereferenceable(944) %262, ptr noundef nonnull align 8 dereferenceable(24) %35, i1 noundef zeroext false)
          to label %263 unwind label %278

263:                                              ; preds = %261
  %264 = load ptr, ptr %256, align 8, !tbaa !16
  %265 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944) %264)
  %266 = load ptr, ptr %256, align 8, !tbaa !16
  %267 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %266)
  %268 = load ptr, ptr %256, align 8, !tbaa !16
  %269 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944) %268)
  invoke void @_ZN3tds15integrate_eulerINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERNS4_7VectorXES8_RKS7_RKNS4_6ScalarE(ptr noundef nonnull align 8 dereferenceable(944) %264, ptr noundef nonnull align 8 dereferenceable(16) %265, ptr noundef nonnull align 8 dereferenceable(16) %267, ptr noundef nonnull align 8 dereferenceable(16) %269, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %270 unwind label %278

270:                                              ; preds = %263
  %271 = load ptr, ptr %256, align 8, !tbaa !16
  %272 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %271)
  %273 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %272, i64 noundef 0)
          to label %274 unwind label %278

274:                                              ; preds = %270
  %275 = load double, ptr %273, align 8, !tbaa !14
  %276 = fcmp olt double %275, -1.000000e+04
  br i1 %276, label %277, label %280

277:                                              ; preds = %274
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.19, i32 noundef 190, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #16
  unreachable

278:                                              ; preds = %270, %263, %261, %260, %258, %.lr.ph147
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #13
  br label %462

280:                                              ; preds = %274
  %281 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #13
  %282 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #13
  br i1 %282, label %.lr.ph147, label %._crit_edge148

283:                                              ; preds = %._crit_edge148
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #13
  %284 = load double, ptr %39, align 8, !tbaa !14
  %285 = fmul double %284, 1.000000e+01
  store double %285, ptr %46, align 8, !tbaa !14
  call void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IdvEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46)
  invoke void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %286 unwind label %375

286:                                              ; preds = %283
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #13
  %287 = call noundef i64 @_ZNKSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %.not = icmp eq i64 %287, 0
  br i1 %.not, label %._crit_edge155, label %.preheader

.preheader:                                       ; preds = %286, %._crit_edge152
  %indvars.iv158 = phi i64 [ %indvars.iv.next159, %._crit_edge152 ], [ 0, %286 ]
  %.091153 = phi i32 [ %.192.lcssa, %._crit_edge152 ], [ 0, %286 ]
  %288 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv158) #13
  %289 = load ptr, ptr %288, align 8, !tbaa !16
  %290 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %289)
  %291 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %290) #13
  %.not156 = icmp eq i64 %291, 0
  br i1 %.not156, label %._crit_edge152, label %.lr.ph151.peel

.lr.ph151.peel:                                   ; preds = %.preheader
  %292 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv158) #13
  %293 = load ptr, ptr %292, align 8, !tbaa !16
  %294 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %293)
  %295 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %294, i64 noundef 0) #13
  %296 = getelementptr inbounds i8, ptr %295, i64 1752
  %297 = call noundef zeroext i1 @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %296) #13
  br i1 %297, label %368, label %298

298:                                              ; preds = %.lr.ph151.peel
  %299 = add nsw i32 %.091153, 1
  %300 = sext i32 %.091153 to i64
  %301 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %300) #13
  %302 = load i32, ptr %301, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #13
  invoke void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %47)
          to label %303 unwind label %.loopexit.split-lp

303:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %48) #13
  %304 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %293)
  %305 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %304, i64 noundef 0) #13
  %306 = getelementptr inbounds i8, ptr %305, i64 296
  %307 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %293)
  %308 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %307, i64 noundef 0) #13
  %309 = getelementptr inbounds i8, ptr %308, i64 1752
  %310 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %309, i64 noundef 0) #13
  invoke void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind nonnull writable sret(%"struct.tds::Transform") align 8 %48, ptr noundef nonnull align 8 dereferenceable(96) %306, ptr noundef nonnull align 8 dereferenceable(96) %310)
          to label %311 unwind label %.loopexit.split-lp164

311:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #13
  %312 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %313 unwind label %.loopexit.split-lp169

313:                                              ; preds = %311
  %314 = load double, ptr %312, align 8, !tbaa !14
  %315 = fptrunc double %314 to float
  %316 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %317 unwind label %.loopexit.split-lp169

317:                                              ; preds = %313
  %318 = load double, ptr %316, align 8, !tbaa !14
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %320 unwind label %.loopexit.split-lp169

320:                                              ; preds = %317
  %321 = fptrunc double %318 to float
  %322 = load double, ptr %319, align 8, !tbaa !14
  %323 = fptrunc double %322 to float
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %49, float noundef %315, float noundef %321, float noundef %323)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #13
  invoke void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Quaternion") align 16 %50, ptr noundef nonnull align 8 dereferenceable(72) %229)
          to label %324 unwind label %.loopexit.split-lp174

324:                                              ; preds = %320
  %325 = call noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32) %47, ptr noundef nonnull align 16 dereferenceable(32) %50) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #13
  %326 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %327 unwind label %.loopexit.split-lp179

327:                                              ; preds = %324
  %328 = load double, ptr %326, align 8, !tbaa !14
  %329 = fptrunc double %328 to float
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %331 unwind label %.loopexit.split-lp179

331:                                              ; preds = %327
  %332 = load double, ptr %330, align 8, !tbaa !14
  %333 = fptrunc double %332 to float
  %334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %335 unwind label %.loopexit.split-lp179

335:                                              ; preds = %331
  %336 = load double, ptr %334, align 8, !tbaa !14
  %337 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %338 unwind label %.loopexit.split-lp179

338:                                              ; preds = %335
  %339 = fptrunc double %336 to float
  %340 = load double, ptr %337, align 8, !tbaa !14
  %341 = fptrunc double %340 to float
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %51, float noundef %329, float noundef %333, float noundef %339, float noundef %341)
          to label %342 unwind label %.loopexit.split-lp179

342:                                              ; preds = %338
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %52) #13
  %343 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944) %293, i32 noundef -1)
  %344 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %343, i64 noundef 0)
          to label %345 unwind label %.loopexit.split-lp184

345:                                              ; preds = %342
  %346 = load double, ptr %344, align 8, !tbaa !14
  %347 = fptrunc double %346 to float
  store float %347, ptr %52, align 4, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %53) #13
  %348 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944) %293, i32 noundef -1)
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %348, i64 noundef 1)
          to label %350 unwind label %.loopexit.split-lp189

350:                                              ; preds = %345
  %351 = load double, ptr %349, align 8, !tbaa !14
  %352 = fptrunc double %351 to float
  store float %352, ptr %53, align 4, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #13
  %353 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944) %293, i32 noundef -1)
  %354 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %353, i64 noundef 2)
          to label %.invoke.peel unwind label %.loopexit.split-lp194

.invoke.peel:                                     ; preds = %350
  %355 = load double, ptr %354, align 8, !tbaa !14
  %356 = fptrunc double %355 to float
  store float %356, ptr %54, align 4, !tbaa !59
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEE8setValueERKfS4_S4_(ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(4) %52, ptr noundef nonnull align 4 dereferenceable(4) %53, ptr noundef nonnull align 4 dereferenceable(4) %54)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %53) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #13
  %357 = load ptr, ptr %55, align 8, !tbaa !5
  %358 = load ptr, ptr %357, align 8, !tbaa !12
  %359 = getelementptr inbounds i8, ptr %358, i64 248
  %360 = load ptr, ptr %359, align 8
  invoke void %360(ptr noundef nonnull align 8 dereferenceable(60) %357, ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(16) %49, ptr noundef nonnull align 4 dereferenceable(16) %44, float noundef 1.000000e+00)
          to label %361 unwind label %.loopexit.split-lp179

361:                                              ; preds = %.invoke.peel
  %362 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEaSERKS2_(ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(16) %49)
  %363 = load ptr, ptr %55, align 8, !tbaa !5
  %364 = load ptr, ptr %363, align 8, !tbaa !12
  %365 = getelementptr inbounds i8, ptr %364, i64 152
  %366 = load ptr, ptr %365, align 8
  invoke void %366(ptr noundef nonnull align 8 dereferenceable(60) %363, ptr noundef nonnull align 4 dereferenceable(16) %49, ptr noundef nonnull align 4 dereferenceable(16) %51, i32 noundef %302)
          to label %367 unwind label %.loopexit.split-lp179

367:                                              ; preds = %361
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %48) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #13
  br label %368

368:                                              ; preds = %367, %.lr.ph151.peel
  %.293.peel = phi i32 [ %299, %367 ], [ %.091153, %.lr.ph151.peel ]
  %369 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv158) #13
  %370 = load ptr, ptr %369, align 8, !tbaa !16
  %371 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %370)
  %372 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %371) #13
  %373 = icmp ugt i64 %372, 1
  br i1 %373, label %.lr.ph151, label %._crit_edge152

._crit_edge155:                                   ; preds = %._crit_edge152, %286
  %374 = load ptr, ptr %55, align 8, !tbaa !5
  invoke void @_ZN24TinyGLInstancingRenderer16write_transformsEv(ptr noundef nonnull align 8 dereferenceable(60) %374)
          to label %452 unwind label %458

375:                                              ; preds = %283
  %376 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #13
  br label %461

._crit_edge152:                                   ; preds = %368, %443, %.preheader
  %.192.lcssa = phi i32 [ %.091153, %.preheader ], [ %.293.peel, %368 ], [ %.293, %443 ]
  %indvars.iv.next159 = add nuw nsw i64 %indvars.iv158, 1
  %377 = call noundef i64 @_ZNKSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %378 = icmp ugt i64 %377, %indvars.iv.next159
  br i1 %378, label %.preheader, label %._crit_edge155, !llvm.loop !60

.lr.ph151:                                        ; preds = %368, %443
  %indvars.iv = phi i64 [ %indvars.iv.next, %443 ], [ 1, %368 ]
  %.192149 = phi i32 [ %.293, %443 ], [ %.293.peel, %368 ]
  %379 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv158) #13
  %380 = load ptr, ptr %379, align 8, !tbaa !16
  %381 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %380)
  %382 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %381, i64 noundef %indvars.iv) #13
  %383 = getelementptr inbounds i8, ptr %382, i64 1752
  %384 = call noundef zeroext i1 @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %383) #13
  br i1 %384, label %443, label %385

385:                                              ; preds = %.lr.ph151
  %386 = add nsw i32 %.192149, 1
  %387 = sext i32 %.192149 to i64
  %388 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %387) #13
  %389 = load i32, ptr %388, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #13
  invoke void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %47)
          to label %390 unwind label %.loopexit

390:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %48) #13
  %391 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %380)
  %392 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %391, i64 noundef %indvars.iv) #13
  %393 = getelementptr inbounds i8, ptr %392, i64 296
  %394 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %380)
  %395 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %394, i64 noundef %indvars.iv) #13
  %396 = getelementptr inbounds i8, ptr %395, i64 1752
  %397 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %396, i64 noundef 0) #13
  invoke void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind nonnull writable sret(%"struct.tds::Transform") align 8 %48, ptr noundef nonnull align 8 dereferenceable(96) %393, ptr noundef nonnull align 8 dereferenceable(96) %397)
          to label %398 unwind label %.loopexit163

398:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #13
  %399 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %400 unwind label %.loopexit168

400:                                              ; preds = %398
  %401 = load double, ptr %399, align 8, !tbaa !14
  %402 = fptrunc double %401 to float
  %403 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %404 unwind label %.loopexit168

404:                                              ; preds = %400
  %405 = load double, ptr %403, align 8, !tbaa !14
  %406 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %407 unwind label %.loopexit168

407:                                              ; preds = %404
  %408 = fptrunc double %405 to float
  %409 = load double, ptr %406, align 8, !tbaa !14
  %410 = fptrunc double %409 to float
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %49, float noundef %402, float noundef %408, float noundef %410)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #13
  invoke void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Quaternion") align 16 %50, ptr noundef nonnull align 8 dereferenceable(72) %229)
          to label %411 unwind label %.loopexit173

411:                                              ; preds = %407
  %412 = call noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32) %47, ptr noundef nonnull align 16 dereferenceable(32) %50) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #13
  %413 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %414 unwind label %.loopexit178

414:                                              ; preds = %411
  %415 = load double, ptr %413, align 8, !tbaa !14
  %416 = fptrunc double %415 to float
  %417 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %418 unwind label %.loopexit178

418:                                              ; preds = %414
  %419 = load double, ptr %417, align 8, !tbaa !14
  %420 = fptrunc double %419 to float
  %421 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %422 unwind label %.loopexit178

422:                                              ; preds = %418
  %423 = load double, ptr %421, align 8, !tbaa !14
  %424 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %425 unwind label %.loopexit178

425:                                              ; preds = %422
  %426 = fptrunc double %423 to float
  %427 = load double, ptr %424, align 8, !tbaa !14
  %428 = fptrunc double %427 to float
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %51, float noundef %416, float noundef %420, float noundef %426, float noundef %428)
          to label %.invoke unwind label %.loopexit178

.loopexit:                                        ; preds = %385
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %451

.loopexit.split-lp:                               ; preds = %298
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %451

.loopexit163:                                     ; preds = %390
  %lpad.loopexit165 = landingpad { ptr, i32 }
          cleanup
  br label %451

.loopexit.split-lp164:                            ; preds = %303
  %lpad.loopexit.split-lp166 = landingpad { ptr, i32 }
          cleanup
  br label %451

.loopexit168:                                     ; preds = %398, %400, %404
  %lpad.loopexit170 = landingpad { ptr, i32 }
          cleanup
  br label %450

.loopexit.split-lp169:                            ; preds = %311, %313, %317
  %lpad.loopexit.split-lp171 = landingpad { ptr, i32 }
          cleanup
  br label %450

.loopexit173:                                     ; preds = %407
  %lpad.loopexit175 = landingpad { ptr, i32 }
          cleanup
  br label %429

.loopexit.split-lp174:                            ; preds = %320
  %lpad.loopexit.split-lp176 = landingpad { ptr, i32 }
          cleanup
  br label %429

429:                                              ; preds = %.loopexit.split-lp174, %.loopexit173
  %lpad.phi177 = phi { ptr, i32 } [ %lpad.loopexit175, %.loopexit173 ], [ %lpad.loopexit.split-lp176, %.loopexit.split-lp174 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #13
  br label %450

.loopexit178:                                     ; preds = %411, %414, %418, %422, %425, %436, %.invoke
  %lpad.loopexit180 = landingpad { ptr, i32 }
          cleanup
  br label %449

.loopexit.split-lp179:                            ; preds = %324, %327, %331, %335, %338, %.invoke.peel, %361
  %lpad.loopexit.split-lp181 = landingpad { ptr, i32 }
          cleanup
  br label %449

.loopexit.split-lp184:                            ; preds = %342
  %lpad.loopexit.split-lp186 = landingpad { ptr, i32 }
          cleanup
  br label %431

.loopexit.split-lp189:                            ; preds = %345
  %lpad.loopexit.split-lp191 = landingpad { ptr, i32 }
          cleanup
  br label %430

.loopexit.split-lp194:                            ; preds = %350
  %lpad.loopexit.split-lp196 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #13
  br label %430

430:                                              ; preds = %.loopexit.split-lp194, %.loopexit.split-lp189
  %.pn108 = phi { ptr, i32 } [ %lpad.loopexit.split-lp196, %.loopexit.split-lp194 ], [ %lpad.loopexit.split-lp191, %.loopexit.split-lp189 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %53) #13
  br label %431

431:                                              ; preds = %430, %.loopexit.split-lp184
  %.pn108.pn = phi { ptr, i32 } [ %.pn108, %430 ], [ %lpad.loopexit.split-lp186, %.loopexit.split-lp184 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #13
  br label %449

.invoke:                                          ; preds = %425
  %432 = load ptr, ptr %55, align 8, !tbaa !5
  %433 = load ptr, ptr %432, align 8, !tbaa !12
  %434 = getelementptr inbounds i8, ptr %433, i64 248
  %435 = load ptr, ptr %434, align 8
  invoke void %435(ptr noundef nonnull align 8 dereferenceable(60) %432, ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(16) %49, ptr noundef nonnull align 4 dereferenceable(16) %44, float noundef 1.000000e+00)
          to label %436 unwind label %.loopexit178

436:                                              ; preds = %.invoke
  %437 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEaSERKS2_(ptr noundef nonnull align 4 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(16) %49)
  %438 = load ptr, ptr %55, align 8, !tbaa !5
  %439 = load ptr, ptr %438, align 8, !tbaa !12
  %440 = getelementptr inbounds i8, ptr %439, i64 152
  %441 = load ptr, ptr %440, align 8
  invoke void %441(ptr noundef nonnull align 8 dereferenceable(60) %438, ptr noundef nonnull align 4 dereferenceable(16) %49, ptr noundef nonnull align 4 dereferenceable(16) %51, i32 noundef %389)
          to label %442 unwind label %.loopexit178

442:                                              ; preds = %436
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %48) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #13
  br label %443

443:                                              ; preds = %.lr.ph151, %442
  %.293 = phi i32 [ %386, %442 ], [ %.192149, %.lr.ph151 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %444 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv158) #13
  %445 = load ptr, ptr %444, align 8, !tbaa !16
  %446 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %445)
  %447 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %446) #13
  %448 = icmp ugt i64 %447, %indvars.iv.next
  br i1 %448, label %.lr.ph151, label %._crit_edge152, !llvm.loop !62

449:                                              ; preds = %.loopexit178, %.loopexit.split-lp179, %431
  %.pn111 = phi { ptr, i32 } [ %.pn108.pn, %431 ], [ %lpad.loopexit180, %.loopexit178 ], [ %lpad.loopexit.split-lp181, %.loopexit.split-lp179 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #13
  br label %450

450:                                              ; preds = %.loopexit168, %.loopexit.split-lp169, %449, %429
  %.pn111.pn = phi { ptr, i32 } [ %.pn111, %449 ], [ %lpad.phi177, %429 ], [ %lpad.loopexit170, %.loopexit168 ], [ %lpad.loopexit.split-lp171, %.loopexit.split-lp169 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %48) #13
  br label %451

451:                                              ; preds = %.loopexit163, %.loopexit.split-lp164, %.loopexit, %.loopexit.split-lp, %450
  %.pn111.pn.pn.pn = phi { ptr, i32 } [ %.pn111.pn, %450 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit165, %.loopexit163 ], [ %lpad.loopexit.split-lp166, %.loopexit.split-lp164 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #13
  br label %461

452:                                              ; preds = %._crit_edge155
  %453 = load ptr, ptr %55, align 8, !tbaa !5
  %454 = load ptr, ptr %453, align 8, !tbaa !12
  %455 = getelementptr inbounds i8, ptr %454, i64 24
  %456 = load ptr, ptr %455, align 8
  invoke void %456(ptr noundef nonnull align 8 dereferenceable(60) %453)
          to label %457 unwind label %458

457:                                              ; preds = %452
  invoke void @_ZN14TinyOpenGL3App11swap_bufferEv(ptr noundef nonnull align 8 dereferenceable(104) %3)
          to label %460 unwind label %458

458:                                              ; preds = %457, %452, %._crit_edge155
  %459 = landingpad { ptr, i32 }
          cleanup
  br label %461

460:                                              ; preds = %457, %._crit_edge148
  %.197 = phi i32 [ %247, %._crit_edge148 ], [ 0, %457 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %44) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #13
  br label %230, !llvm.loop !64

461:                                              ; preds = %458, %451, %375
  %.pn111.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn111.pn.pn.pn, %451 ], [ %459, %458 ], [ %376, %375 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %44) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #13
  br label %462

462:                                              ; preds = %461, %278, %254
  %.pn117 = phi { ptr, i32 } [ %279, %278 ], [ %.pn111.pn.pn.pn.pn, %461 ], [ %255, %254 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #13
  br label %464

463:                                              ; preds = %236
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #13
  call void @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #13
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %17) #13
  call void @_ZNSt6vectorIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #13
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #13
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #13
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %4) #13
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %4) #13
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %3) #13
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %3) #13
  ret i32 0

464:                                              ; preds = %462, %252
  %.pn117.pn = phi { ptr, i32 } [ %.pn117, %462 ], [ %253, %252 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #13
  br label %465

465:                                              ; preds = %464, %250
  %.pn117.pn.pn = phi { ptr, i32 } [ %.pn117.pn, %464 ], [ %251, %250 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #13
  br label %466

466:                                              ; preds = %170, %218, %465, %169
  %.pn128.pn.pn = phi { ptr, i32 } [ %.pn128.pn, %169 ], [ %.pn121, %218 ], [ %.pn117.pn.pn, %465 ], [ %171, %170 ]
  call void @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #13
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %17) #13
  call void @_ZNSt6vectorIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #13
  br label %467

467:                                              ; preds = %125, %137, %466
  %.pn128.pn.pn.pn = phi { ptr, i32 } [ %.pn128.pn.pn, %466 ], [ %.pn104.pn, %137 ], [ %.pn, %125 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #13
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #13
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #13
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %4) #13
  br label %468

468:                                              ; preds = %467, %119
  %.pn128.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn128.pn.pn.pn, %467 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %4) #13
  br label %469

469:                                              ; preds = %468, %117
  %.pn128.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn128.pn.pn.pn.pn, %468 ], [ %118, %117 ]
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %3) #13
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %3) #13
  resume { ptr, i32 } %.pn128.pn.pn.pn.pn.pn
}

declare void @_ZN14TinyOpenGL3AppC1EPKciibiiii(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #4

declare void @_ZN14TinyOpenGL3App11set_up_axisEi(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef) unnamed_addr #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef, i32 noundef) local_unnamed_addr #5 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE17create_multi_bodyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(512), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds9TransformINS_13EigenAlgebraTIdEEE12set_identityEv(ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #6 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #7

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds13EigenAlgebraTIdE7unit3_zEv(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Matrix") align 8) local_unnamed_addr #6 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef double @_ZN3tds13EigenAlgebraTIdE4zeroEv() local_unnamed_addr #5 align 2

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #8

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_geometriesEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #5 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE20collision_transformsEi(ptr noundef nonnull align 8 dereferenceable(944), i32 noundef) local_unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3tds9UrdfCacheINS_13EigenAlgebraTIdEEE9constructERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_5WorldIS2_EEbbSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(512), i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) local_unnamed_addr #10 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #10 align 2

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

declare noundef i32 @_ZN14TinyOpenGL3App35register_graphics_unit_sphere_shapeE23EnumSphereLevelOfDetaili(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef, i32 noundef) unnamed_addr #4

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef double @_ZN3tds13EigenAlgebraTIdE3oneEv() local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12DrawGridDataC2Ei(ptr noundef nonnull align 4 dereferenceable(32), i32 noundef) unnamed_addr #1 align 2

declare void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef byval(%struct.DrawGridData) align 8) unnamed_addr #4

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3tds16forward_dynamicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERKNS4_7Vector3Eb(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3tds15integrate_eulerINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERNS4_7VectorXES8_RKS7_RKNS4_6ScalarE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #5 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 noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN3tds9MultiBodyINS1_13EigenAlgebraTIdEEEESt6vectorIS6_SaIS6_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #10

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #5 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #10 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind noalias writable sret(%"struct.tds::Transform") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Quaternion") align 16, ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 16 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #10 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE19get_world_transformEi(ptr noundef nonnull align 8 dereferenceable(944), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EEixEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) local_unnamed_addr #10 align 2

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

declare void @_ZN24TinyGLInstancingRenderer16write_transformsEv(ptr noundef nonnull align 8 dereferenceable(60)) local_unnamed_addr #4

declare void @_ZN14TinyOpenGL3App11swap_bufferEv(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #4

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

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #12

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress norecurse 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { alwaysinline 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 = { nobuiltin allocsize(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 #8 = { nobuiltin 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 #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
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 "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 = { nounwind }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin nounwind }
attributes #16 = { 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, !7, i64 16}
!6 = !{!"_ZTS21TinyCommonGraphicsApp", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40, !10, i64 41, !10, i64 42, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !10, i64 60, !8, i64 64}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"vtable pointer", !9, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !8, i64 0}
!16 = !{!7, !7, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"int", !8, i64 0}
!19 = !{!20, !15, i64 1856}
!20 = !{!"_ZTSN3tds4LinkINS_13EigenAlgebraTIdEEEE", !21, i64 0, !22, i64 8, !22, i64 104, !22, i64 200, !22, i64 296, !31, i64 392, !31, i64 440, !31, i64 488, !31, i64 536, !31, i64 584, !33, i64 632, !34, i64 736, !35, i64 952, !31, i64 1000, !35, i64 1048, !15, i64 1096, !15, i64 1104, !35, i64 1112, !36, i64 1168, !36, i64 1312, !27, i64 1456, !27, i64 1528, !23, i64 1600, !35, i64 1624, !18, i64 1672, !18, i64 1676, !40, i64 1680, !44, i64 1704, !48, i64 1728, !44, i64 1752, !52, i64 1776, !52, i64 1808, !18, i64 1840, !18, i64 1844, !15, i64 1848, !15, i64 1856}
!21 = !{!"_ZTSN3tds9JointTypeE", !8, i64 0}
!22 = !{!"_ZTSN3tds9TransformINS_13EigenAlgebraTIdEEEE", !23, i64 0, !27, i64 24}
!23 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEE", !24, i64 0}
!24 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE", !25, i64 0}
!25 = !{!"_ZTSN5Eigen12DenseStorageIdLi3ELi3ELi1ELi0EEE", !26, i64 0}
!26 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi3ELi0ELi0EEE", !8, i64 0}
!27 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE", !28, i64 0}
!28 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi3ELi0ELi3ELi3EEEEE", !29, i64 0}
!29 = !{!"_ZTSN5Eigen12DenseStorageIdLi9ELi3ELi3ELi0EEE", !30, i64 0}
!30 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi9ELi0ELi0EEE", !8, i64 0}
!31 = !{!"_ZTSN3tds12MotionVectorINS_13EigenAlgebraTIdEEEE", !32, i64 0}
!32 = !{!"_ZTSN3tds13SpatialVectorINS_13EigenAlgebraTIdEEEE", !23, i64 0, !23, i64 24}
!33 = !{!"_ZTSN3tds16RigidBodyInertiaINS_13EigenAlgebraTIdEEEE", !15, i64 0, !23, i64 8, !27, i64 32}
!34 = !{!"_ZTSN3tds22ArticulatedBodyInertiaINS_13EigenAlgebraTIdEEEE", !27, i64 0, !27, i64 72, !27, i64 144}
!35 = !{!"_ZTSN3tds11ForceVectorINS_13EigenAlgebraTIdEEEE", !32, i64 0}
!36 = !{!"_ZTSN5Eigen6MatrixIdLi6ELi3ELi0ELi6ELi3EEE", !37, i64 0}
!37 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi6ELi3ELi0ELi6ELi3EEEEE", !38, i64 0}
!38 = !{!"_ZTSN5Eigen12DenseStorageIdLi18ELi6ELi3ELi0EEE", !39, i64 0}
!39 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi18ELi0ELi16EEE", !8, i64 0}
!40 = !{!"_ZTSSt6vectorIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIPKN3tds8GeometryINS0_13EigenAlgebraTIdEEEESaIS6_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!44 = !{!"_ZTSSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!48 = !{!"_ZTSSt6vectorIiSaIiEE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!52 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !53, i64 0, !54, i64 8, !8, i64 16}
!53 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !7, i64 0}
!54 = !{!"long", !8, i64 0}
!55 = !{!6, !7, i64 8}
!56 = !{!57, !10, i64 12}
!57 = !{!"_ZTS12DrawGridData", !18, i64 0, !11, i64 4, !18, i64 8, !10, i64 12, !8, i64 16}
!58 = !{!57, !18, i64 8}
!59 = !{!11, !11, i64 0}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}
!62 = distinct !{!62, !61, !63}
!63 = !{!"llvm.loop.peeled.count", i32 1}
!64 = distinct !{!64, !61}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass