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

; 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 }
%"class.std::vector.46" = type { %"struct.std::_Vector_base.47" }
%"struct.std::_Vector_base.47" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"struct.TINY::TinyQuaternion" = type { float, float, float, float }
%"class.Eigen::Matrix.71" = type { %"class.Eigen::PlainObjectBase.72" }
%"class.Eigen::PlainObjectBase.72" = type { %"class.Eigen::DenseStorage.79" }
%"class.Eigen::DenseStorage.79" = type { ptr, i64 }
%"class.Eigen::Matrix.85" = type { %"class.Eigen::PlainObjectBase.86" }
%"class.Eigen::PlainObjectBase.86" = type { %"class.Eigen::DenseStorage.93" }
%"class.Eigen::DenseStorage.93" = type { ptr, i64, i64 }
%struct.DrawGridData = type { i32, float, i32, i8, [4 x float] }
%"class.std::chrono::duration" = type { double }
%"class.Eigen::Quaternion" = type { %"class.Eigen::Matrix.104" }
%"class.Eigen::Matrix.104" = type { %"class.Eigen::PlainObjectBase.105" }
%"class.Eigen::PlainObjectBase.105" = type { %"class.Eigen::DenseStorage.112" }
%"class.Eigen::DenseStorage.112" = type { %"struct.Eigen::internal::plain_array.113" }
%"struct.Eigen::internal::plain_array.113" = type { [4 x double] }
%"struct.tds::Transform" = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix.51" }
%"class.Eigen::Matrix.51" = type { %"class.Eigen::PlainObjectBase.52" }
%"class.Eigen::PlainObjectBase.52" = type { %"class.Eigen::DenseStorage.59" }
%"class.Eigen::DenseStorage.59" = type { %"struct.Eigen::internal::plain_array.60" }
%"struct.Eigen::internal::plain_array.60" = type { [9 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] }>
%"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.94", %"class.Eigen::Matrix.94", %"class.Eigen::Matrix.51", %"class.Eigen::Matrix.51", %"class.Eigen::Matrix", %"struct.tds::ForceVector", i32, i32, %"class.std::vector.66", %"class.std::vector.61", %"class.std::vector.41", %"class.std::vector.61", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i32, double, double, [8 x i8] }
%"struct.tds::RigidBodyInertia" = type { double, %"class.Eigen::Matrix", %"class.Eigen::Matrix.51" }
%"struct.tds::ArticulatedBodyInertia" = type { %"class.Eigen::Matrix.51", %"class.Eigen::Matrix.51", %"class.Eigen::Matrix.51" }
%"struct.tds::MotionVector" = type { %"struct.tds::SpatialVector" }
%"struct.tds::SpatialVector" = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix" }
%"class.Eigen::Matrix.94" = type { %"class.Eigen::PlainObjectBase.95" }
%"class.Eigen::PlainObjectBase.95" = type { %"class.Eigen::DenseStorage.102" }
%"class.Eigen::DenseStorage.102" = type { %"struct.Eigen::internal::plain_array.103" }
%"struct.Eigen::internal::plain_array.103" = type { [18 x double] }
%"struct.tds::ForceVector" = type { %"struct.tds::SpatialVector" }
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = 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.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = 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 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [110 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.19 = 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: 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 ptr, align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator", align 1
  %18 = alloca %"class.std::vector.46", align 8
  %19 = alloca %"class.std::vector.46", align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca %"struct.TINY::TinyVector3", align 4
  %23 = alloca %"struct.TINY::TinyQuaternion", align 4
  %24 = alloca %"struct.TINY::TinyVector3", align 4
  %25 = alloca %"struct.TINY::TinyVector3", align 4
  %26 = alloca i32, align 4
  %27 = alloca %"class.Eigen::Matrix.71", align 8
  %28 = alloca %"class.Eigen::Matrix.71", align 8
  %29 = alloca %"class.Eigen::Matrix.71", align 8
  %30 = alloca %"class.Eigen::Matrix.71", align 8
  %31 = alloca %"class.Eigen::Matrix", align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca %"class.Eigen::Matrix.85", align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca double, align 8
  %39 = alloca i32, align 4
  %40 = alloca %struct.DrawGridData, align 4
  %41 = alloca %struct.DrawGridData, align 8
  %42 = alloca %"class.std::chrono::duration", align 8
  %43 = alloca i32, align 4
  %44 = alloca %"struct.TINY::TinyVector3", align 4
  %45 = alloca %"struct.TINY::TinyVector3", align 4
  %46 = alloca float, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca i32, align 4
  %52 = alloca %"class.Eigen::Quaternion", align 16
  %53 = alloca ptr, align 8
  %54 = alloca %"struct.tds::Transform", align 8
  %55 = alloca %"struct.TINY::TinyVector3", align 4
  %56 = alloca %"class.Eigen::Quaternion", align 16
  %57 = alloca %"struct.TINY::TinyQuaternion", align 4
  %58 = alloca %"class.std::chrono::duration", align 8
  %59 = alloca double, align 8
  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) #13
  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)
  %60 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %61 = load ptr, ptr %60, align 8, !tbaa !11
  %62 = load ptr, ptr %61, align 8, !tbaa !15
  %63 = getelementptr inbounds ptr, ptr %62, i64 2
  %64 = load ptr, ptr %63, align 8
  invoke void %64(ptr noundef nonnull align 8 dereferenceable(60) %61)
          to label %65 unwind label %117

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

66:                                               ; preds = %65
  %67 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %68 = load ptr, ptr %67, align 8, !tbaa !11
  %69 = load ptr, ptr %68, align 8, !tbaa !15
  %70 = getelementptr inbounds ptr, ptr %69, i64 38
  %71 = load ptr, ptr %70, align 8
  %72 = invoke noundef ptr %71(ptr noundef nonnull align 8 dereferenceable(60) %68)
          to label %73 unwind label %117

73:                                               ; preds = %66
  %74 = load ptr, ptr %72, align 8, !tbaa !15
  %75 = getelementptr inbounds ptr, ptr %74, i64 8
  %76 = load ptr, ptr %75, align 8
  invoke void %76(ptr noundef nonnull align 8 dereferenceable(16) %72, float noundef 4.000000e+00)
          to label %77 unwind label %117

77:                                               ; preds = %73
  %78 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %79 = load ptr, ptr %78, align 8, !tbaa !11
  %80 = load ptr, ptr %79, align 8, !tbaa !15
  %81 = getelementptr inbounds ptr, ptr %80, i64 38
  %82 = load ptr, ptr %81, align 8
  %83 = invoke noundef ptr %82(ptr noundef nonnull align 8 dereferenceable(60) %79)
          to label %84 unwind label %117

84:                                               ; preds = %77
  %85 = load ptr, ptr %83, align 8, !tbaa !15
  %86 = getelementptr inbounds ptr, ptr %85, i64 15
  %87 = load ptr, ptr %86, align 8
  invoke void %87(ptr noundef nonnull align 8 dereferenceable(16) %83, float noundef -3.000000e+01)
          to label %88 unwind label %117

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

95:                                               ; preds = %88
  %96 = load ptr, ptr %94, align 8, !tbaa !15
  %97 = getelementptr inbounds ptr, ptr %96, i64 7
  %98 = load ptr, ptr %97, align 8
  invoke void %98(ptr noundef nonnull align 8 dereferenceable(16) %94, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %99 unwind label %117

99:                                               ; preds = %95
  call void @llvm.lifetime.start.p0(i64 512, ptr %9) #13
  %100 = invoke noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef -981, i32 noundef 100)
          to label %101 unwind label %121

101:                                              ; preds = %99
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEEC2Ed(ptr noundef nonnull align 8 dereferenceable(512) %9, double noundef %100)
          to label %102 unwind label %121

102:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #13
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #13
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #13
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #13
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #13
  store i32 5, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %103 unwind label %125

103:                                              ; preds = %102
  %104 = 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) %16)
          to label %105 unwind label %129

105:                                              ; preds = %103
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #13
  store ptr %104, ptr %15, align 8, !tbaa !9
  %106 = load ptr, ptr %15, align 8, !tbaa !9
  %107 = load i32, ptr %14, align 4, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %18, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #13
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #13
  invoke void @_Z22init_compound_pendulumIN3tds13EigenAlgebraTIdEEEvRNS0_9MultiBodyIT_EERNS0_5WorldIS4_EEiSt6vectorINS4_6ScalarESaISB_EESD_(ptr noundef nonnull align 8 dereferenceable(944) %106, ptr noundef nonnull align 8 dereferenceable(512) %9, i32 noundef %107, ptr noundef %18, ptr noundef %19)
          to label %108 unwind label %134

108:                                              ; preds = %105
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #13
  invoke void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %109 unwind label %138

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #13
  %110 = invoke noundef i32 @_ZN14TinyOpenGL3App35register_graphics_unit_sphere_shapeE23EnumSphereLevelOfDetaili(ptr noundef nonnull align 8 dereferenceable(104) %6, i32 noundef 3, i32 noundef -1)
          to label %111 unwind label %142

111:                                              ; preds = %109
  store i32 %110, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #13
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %112

112:                                              ; preds = %164, %111
  %113 = load i32, ptr %21, align 4, !tbaa !5
  %114 = load i32, ptr %14, align 4, !tbaa !5
  %115 = icmp slt i32 %113, %114
  br i1 %115, label %146, label %116

116:                                              ; preds = %112
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #13
  br label %191

117:                                              ; preds = %95, %88, %84, %77, %73, %66, %65, %2
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %7, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %8, align 4
  br label %568

121:                                              ; preds = %101, %99
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %7, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %8, align 4
  br label %567

125:                                              ; preds = %102
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %7, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %8, align 4
  br label %133

129:                                              ; preds = %103
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %7, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #13
  br label %133

133:                                              ; preds = %129, %125
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #13
  br label %566

134:                                              ; preds = %105
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %7, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %8, align 4
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #13
  br label %566

138:                                              ; preds = %108
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %7, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %8, align 4
  br label %566

142:                                              ; preds = %109
  %143 = landingpad { ptr, i32 }
          cleanup
  %144 = extractvalue { ptr, i32 } %143, 0
  store ptr %144, ptr %7, align 8
  %145 = extractvalue { ptr, i32 } %143, 1
  store i32 %145, ptr %8, align 4
  br label %565

146:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #13
  %147 = load i32, ptr %21, align 4, !tbaa !5
  %148 = sitofp i32 %147 to double
  %149 = fmul double %148, 1.000000e-01
  %150 = fptrunc double %149 to float
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %22, float noundef 0.000000e+00, float noundef %150, float noundef 0.000000e+00)
          to label %151 unwind label %167

151:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #13
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %152 unwind label %171

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #13
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
          to label %153 unwind label %175

153:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #13
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %25, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
          to label %154 unwind label %179

154:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #13
  %155 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %156 = load ptr, ptr %155, align 8, !tbaa !11
  %157 = load i32, ptr %20, align 4, !tbaa !5
  %158 = load ptr, ptr %156, align 8, !tbaa !15
  %159 = getelementptr inbounds ptr, ptr %158, i64 17
  %160 = load ptr, ptr %159, align 8
  %161 = invoke noundef i32 %160(ptr noundef nonnull align 8 dereferenceable(60) %156, i32 noundef %157, ptr noundef nonnull align 4 dereferenceable(16) %22, ptr noundef nonnull align 4 dereferenceable(16) %23, ptr noundef nonnull align 4 dereferenceable(16) %24, ptr noundef nonnull align 4 dereferenceable(16) %25, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %162 unwind label %183

162:                                              ; preds = %154
  store i32 %161, ptr %26, align 4, !tbaa !5
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %163 unwind label %183

163:                                              ; preds = %162
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #13
  br label %164

164:                                              ; preds = %163
  %165 = load i32, ptr %21, align 4, !tbaa !5
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %21, align 4, !tbaa !5
  br label %112, !llvm.loop !17

167:                                              ; preds = %146
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %7, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %8, align 4
  br label %190

171:                                              ; preds = %151
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %7, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %8, align 4
  br label %189

175:                                              ; preds = %152
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %7, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %8, align 4
  br label %188

179:                                              ; preds = %153
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %7, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %8, align 4
  br label %187

183:                                              ; preds = %162, %154
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %7, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #13
  br label %187

187:                                              ; preds = %183, %179
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #13
  br label %188

188:                                              ; preds = %187, %175
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #13
  br label %189

189:                                              ; preds = %188, %171
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #13
  br label %190

190:                                              ; preds = %189, %167
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #13
  br label %565

191:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #13
  %192 = load ptr, ptr %15, align 8, !tbaa !9
  %193 = invoke noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE3dofEv(ptr noundef nonnull align 8 dereferenceable(944) %192)
          to label %194 unwind label %290

194:                                              ; preds = %191
  %195 = sext i32 %193 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind writable sret(%"class.Eigen::Matrix.71") align 8 %27, i64 noundef %195)
          to label %196 unwind label %290

196:                                              ; preds = %194
  %197 = load ptr, ptr %15, align 8, !tbaa !9
  %198 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944) %197)
          to label %199 unwind label %294

199:                                              ; preds = %196
  %200 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %198, ptr noundef nonnull align 8 dereferenceable(16) %27) #13
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #13
  %201 = load ptr, ptr %15, align 8, !tbaa !9
  %202 = invoke noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(ptr noundef nonnull align 8 dereferenceable(944) %201)
          to label %203 unwind label %299

203:                                              ; preds = %199
  %204 = sext i32 %202 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind writable sret(%"class.Eigen::Matrix.71") align 8 %28, i64 noundef %204)
          to label %205 unwind label %299

205:                                              ; preds = %203
  %206 = load ptr, ptr %15, align 8, !tbaa !9
  %207 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %206)
          to label %208 unwind label %303

208:                                              ; preds = %205
  %209 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %207, ptr noundef nonnull align 8 dereferenceable(16) %28) #13
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #13
  %210 = load ptr, ptr %15, align 8, !tbaa !9
  %211 = invoke noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(ptr noundef nonnull align 8 dereferenceable(944) %210)
          to label %212 unwind label %308

212:                                              ; preds = %208
  %213 = sext i32 %211 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind writable sret(%"class.Eigen::Matrix.71") align 8 %29, i64 noundef %213)
          to label %214 unwind label %308

214:                                              ; preds = %212
  %215 = load ptr, ptr %15, align 8, !tbaa !9
  %216 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3tauEv(ptr noundef nonnull align 8 dereferenceable(944) %215)
          to label %217 unwind label %312

217:                                              ; preds = %214
  %218 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %216, ptr noundef nonnull align 8 dereferenceable(16) %29) #13
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #13
  %219 = load ptr, ptr %15, align 8, !tbaa !9
  %220 = invoke noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(ptr noundef nonnull align 8 dereferenceable(944) %219)
          to label %221 unwind label %317

221:                                              ; preds = %217
  %222 = sext i32 %220 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind writable sret(%"class.Eigen::Matrix.71") align 8 %30, i64 noundef %222)
          to label %223 unwind label %317

223:                                              ; preds = %221
  %224 = load ptr, ptr %15, align 8, !tbaa !9
  %225 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944) %224)
          to label %226 unwind label %321

226:                                              ; preds = %223
  %227 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %225, ptr noundef nonnull align 8 dereferenceable(16) %30) #13
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #13
  store double 0.000000e+00, ptr %32, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #13
  store double 0.000000e+00, ptr %33, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #13
  store double -9.810000e+00, ptr %34, align 8, !tbaa !19
  invoke void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %228 unwind label %326

228:                                              ; preds = %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #13
  %229 = load ptr, ptr %15, align 8, !tbaa !9
  %230 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %229)
          to label %231 unwind label %330

231:                                              ; preds = %228
  %232 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %230) #13
  store i64 %232, ptr %36, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #13
  %233 = load ptr, ptr %15, align 8, !tbaa !9
  %234 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %233)
          to label %235 unwind label %334

235:                                              ; preds = %231
  %236 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %234) #13
  store i64 %236, ptr %37, align 8, !tbaa !21
  invoke void @_ZN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEC2ImmEERKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %237 unwind label %334

237:                                              ; preds = %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #13
  store double 0x3F71111111111111, ptr %38, align 8, !tbaa !19
  %238 = load double, ptr %38, align 8, !tbaa !19
  %239 = fdiv double 1.000000e+00, %238
  %240 = fptosi double %239 to i32
  invoke void @_ZN14TinyOpenGL3App11set_mp4_fpsEi(ptr noundef nonnull align 8 dereferenceable(104) %6, i32 noundef %240)
          to label %241 unwind label %339

241:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #13
  store i32 2, ptr %39, align 4, !tbaa !5
  br label %242

242:                                              ; preds = %546, %241
  %243 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 1
  %244 = load ptr, ptr %243, align 8, !tbaa !23
  %245 = load ptr, ptr %244, align 8, !tbaa !15
  %246 = getelementptr inbounds ptr, ptr %245, i64 7
  %247 = load ptr, ptr %246, align 8
  %248 = invoke noundef zeroext i1 %247(ptr noundef nonnull align 8 dereferenceable(8) %244)
          to label %249 unwind label %343

249:                                              ; preds = %242
  %250 = xor i1 %248, true
  br i1 %250, label %251, label %559

251:                                              ; preds = %249
  %252 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %253 = load ptr, ptr %252, align 8, !tbaa !11
  %254 = load i32, ptr %39, align 4, !tbaa !5
  %255 = load ptr, ptr %253, align 8, !tbaa !15
  %256 = getelementptr inbounds ptr, ptr %255, i64 36
  %257 = load ptr, ptr %256, align 8
  invoke void %257(ptr noundef nonnull align 8 dereferenceable(60) %253, i32 noundef %254)
          to label %258 unwind label %343

258:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #13
  invoke void @_ZN12DrawGridDataC2Ei(ptr noundef nonnull align 4 dereferenceable(32) %40, i32 noundef 2)
          to label %259 unwind label %347

259:                                              ; preds = %258
  %260 = getelementptr inbounds %struct.DrawGridData, ptr %40, i32 0, i32 3
  store i8 1, ptr %260, align 4, !tbaa !24
  %261 = load i32, ptr %39, align 4, !tbaa !5
  %262 = getelementptr inbounds %struct.DrawGridData, ptr %40, i32 0, i32 2
  store i32 %261, ptr %262, align 4, !tbaa !26
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 4 %40, i64 32, i1 false), !tbaa.struct !27
  invoke void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104) %6, ptr noundef byval(%struct.DrawGridData) align 8 %41)
          to label %263 unwind label %347

263:                                              ; preds = %259
  %264 = load ptr, ptr %15, align 8, !tbaa !9
  invoke void @_ZN3tds18forward_kinematicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EE(ptr noundef nonnull align 8 dereferenceable(944) %264)
          to label %265 unwind label %347

265:                                              ; preds = %263
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE4stepERKd(ptr noundef nonnull align 8 dereferenceable(512) %9, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %266 unwind label %347

266:                                              ; preds = %265
  %267 = load ptr, ptr %15, align 8, !tbaa !9
  invoke void @_ZN3tds16forward_dynamicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERKNS4_7Vector3Eb(ptr noundef nonnull align 8 dereferenceable(944) %267, ptr noundef nonnull align 8 dereferenceable(24) %31, i1 noundef zeroext false)
          to label %268 unwind label %347

268:                                              ; preds = %266
  %269 = load ptr, ptr %15, align 8, !tbaa !9
  %270 = load ptr, ptr %15, align 8, !tbaa !9
  %271 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944) %270)
          to label %272 unwind label %347

272:                                              ; preds = %268
  %273 = load ptr, ptr %15, align 8, !tbaa !9
  %274 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %273)
          to label %275 unwind label %347

275:                                              ; preds = %272
  %276 = load ptr, ptr %15, align 8, !tbaa !9
  %277 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944) %276)
          to label %278 unwind label %347

278:                                              ; preds = %275
  invoke void @_ZN3tds15integrate_eulerINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERNS4_7VectorXES8_RKS7_RKNS4_6ScalarE(ptr noundef nonnull align 8 dereferenceable(944) %269, ptr noundef nonnull align 8 dereferenceable(16) %271, ptr noundef nonnull align 8 dereferenceable(16) %274, ptr noundef nonnull align 8 dereferenceable(16) %277, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %279 unwind label %347

279:                                              ; preds = %278
  %280 = load ptr, ptr %15, align 8, !tbaa !9
  invoke void @_ZN3tds11mass_matrixINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EEPNS4_7MatrixXE(ptr noundef nonnull align 8 dereferenceable(944) %280, ptr noundef %35)
          to label %281 unwind label %347

281:                                              ; preds = %279
  %282 = load ptr, ptr %15, align 8, !tbaa !9
  %283 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %282)
          to label %284 unwind label %347

284:                                              ; preds = %281
  %285 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %283, i64 noundef 0)
          to label %286 unwind label %347

286:                                              ; preds = %284
  %287 = load double, ptr %285, align 8, !tbaa !19
  %288 = fcmp olt double %287, -1.000000e+04
  br i1 %288, label %289, label %351

289:                                              ; preds = %286
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.18, i32 noundef 146, ptr noundef @__PRETTY_FUNCTION__.main) #14
  unreachable

290:                                              ; preds = %194, %191
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %7, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %8, align 4
  br label %298

294:                                              ; preds = %196
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %7, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %8, align 4
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #13
  br label %298

298:                                              ; preds = %294, %290
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #13
  br label %565

299:                                              ; preds = %203, %199
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %7, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %8, align 4
  br label %307

303:                                              ; preds = %205
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %7, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %8, align 4
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #13
  br label %307

307:                                              ; preds = %303, %299
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #13
  br label %565

308:                                              ; preds = %212, %208
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %7, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %8, align 4
  br label %316

312:                                              ; preds = %214
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %7, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %8, align 4
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #13
  br label %316

316:                                              ; preds = %312, %308
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #13
  br label %565

317:                                              ; preds = %221, %217
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %7, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %8, align 4
  br label %325

321:                                              ; preds = %223
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %7, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %8, align 4
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #13
  br label %325

325:                                              ; preds = %321, %317
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #13
  br label %565

326:                                              ; preds = %226
  %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 8, ptr %34) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #13
  br label %564

330:                                              ; preds = %228
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %7, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %8, align 4
  br label %338

334:                                              ; preds = %235, %231
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %7, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #13
  br label %338

338:                                              ; preds = %334, %330
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #13
  br label %563

339:                                              ; preds = %237
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %7, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %8, align 4
  br label %562

343:                                              ; preds = %251, %242
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %7, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %8, align 4
  br label %561

347:                                              ; preds = %284, %281, %279, %278, %275, %272, %268, %266, %265, %263, %259, %258
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %7, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %8, align 4
  br label %558

351:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #13
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IdvEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %352 unwind label %364

352:                                              ; preds = %351
  invoke void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %353 unwind label %364

353:                                              ; preds = %352
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #13
  store i32 0, ptr %43, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #13
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %44, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %354 unwind label %368

354:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #13
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %355 unwind label %372

355:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #13
  store float 1.000000e+00, ptr %46, align 4, !tbaa !28
  %356 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #13
  br i1 %356, label %534, label %357

357:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #13
  store i32 0, ptr %47, align 4, !tbaa !5
  br label %358

358:                                              ; preds = %530, %357
  %359 = load i32, ptr %47, align 4, !tbaa !5
  %360 = sext i32 %359 to i64
  %361 = call noundef i64 @_ZNKSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #13
  %362 = icmp ult i64 %360, %361
  br i1 %362, label %376, label %363

363:                                              ; preds = %358
  store i32 7, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #13
  br label %533

364:                                              ; preds = %352, %351
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %7, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #13
  br label %558

368:                                              ; preds = %353
  %369 = landingpad { ptr, i32 }
          cleanup
  %370 = extractvalue { ptr, i32 } %369, 0
  store ptr %370, ptr %7, align 8
  %371 = extractvalue { ptr, i32 } %369, 1
  store i32 %371, ptr %8, align 4
  br label %557

372:                                              ; preds = %354
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %7, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %8, align 4
  br label %556

376:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #13
  store i32 0, ptr %49, align 4, !tbaa !5
  br label %377

377:                                              ; preds = %521, %376
  %378 = load i32, ptr %49, align 4, !tbaa !5
  %379 = sext i32 %378 to i64
  %380 = load i32, ptr %47, align 4, !tbaa !5
  %381 = sext i32 %380 to i64
  %382 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %381) #13
  %383 = load ptr, ptr %382, align 8, !tbaa !9
  %384 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %383)
          to label %385 unwind label %389

385:                                              ; preds = %377
  %386 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %384) #13
  %387 = icmp ult i64 %379, %386
  br i1 %387, label %393, label %388

388:                                              ; preds = %385
  store i32 10, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #13
  br label %529

389:                                              ; preds = %377
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %7, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %8, align 4
  br label %528

393:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #13
  %394 = load i32, ptr %47, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %395) #13
  %397 = load ptr, ptr %396, align 8, !tbaa !9
  store ptr %397, ptr %50, align 8, !tbaa !9
  %398 = load ptr, ptr %50, align 8, !tbaa !9
  %399 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %398)
          to label %400 unwind label %407

400:                                              ; preds = %393
  %401 = load i32, ptr %49, align 4, !tbaa !5
  %402 = sext i32 %401 to i64
  %403 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %399, i64 noundef %402) #13
  %404 = getelementptr inbounds %"struct.tds::Link", ptr %403, i32 0, i32 30
  %405 = call noundef zeroext i1 @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %404) #13
  br i1 %405, label %406, label %411

406:                                              ; preds = %400
  store i32 12, ptr %48, align 4
  br label %518

407:                                              ; preds = %393
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %7, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %8, align 4
  br label %527

411:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #13
  %412 = load i32, ptr %43, align 4, !tbaa !5
  %413 = add nsw i32 %412, 1
  store i32 %413, ptr %43, align 4, !tbaa !5
  %414 = sext i32 %412 to i64
  %415 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %414) #13
  %416 = load i32, ptr %415, align 4, !tbaa !5
  store i32 %416, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #13
  invoke void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %52)
          to label %417 unwind label %484

417:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #13
  call void @llvm.lifetime.start.p0(i64 96, ptr %54) #13
  %418 = load ptr, ptr %50, align 8, !tbaa !9
  %419 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %418)
          to label %420 unwind label %488

420:                                              ; preds = %417
  %421 = load i32, ptr %49, align 4, !tbaa !5
  %422 = sext i32 %421 to i64
  %423 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %419, i64 noundef %422) #13
  %424 = getelementptr inbounds %"struct.tds::Link", ptr %423, i32 0, i32 4
  %425 = load ptr, ptr %50, align 8, !tbaa !9
  %426 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %425)
          to label %427 unwind label %488

427:                                              ; preds = %420
  %428 = load i32, ptr %49, align 4, !tbaa !5
  %429 = sext i32 %428 to i64
  %430 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %426, i64 noundef %429) #13
  %431 = getelementptr inbounds %"struct.tds::Link", ptr %430, i32 0, i32 30
  %432 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %431, i64 noundef 0) #13
  invoke void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind writable sret(%"struct.tds::Transform") align 8 %54, ptr noundef nonnull align 8 dereferenceable(96) %424, ptr noundef nonnull align 8 dereferenceable(96) %432)
          to label %433 unwind label %488

433:                                              ; preds = %427
  store ptr %54, ptr %53, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #13
  %434 = load ptr, ptr %53, align 8, !tbaa !9
  %435 = getelementptr inbounds %"struct.tds::Transform", ptr %434, i32 0, i32 0
  %436 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %435)
          to label %437 unwind label %492

437:                                              ; preds = %433
  %438 = load double, ptr %436, align 8, !tbaa !19
  %439 = fptrunc double %438 to float
  %440 = load ptr, ptr %53, align 8, !tbaa !9
  %441 = getelementptr inbounds %"struct.tds::Transform", ptr %440, i32 0, i32 0
  %442 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %441)
          to label %443 unwind label %492

443:                                              ; preds = %437
  %444 = load double, ptr %442, align 8, !tbaa !19
  %445 = fptrunc double %444 to float
  %446 = load ptr, ptr %53, align 8, !tbaa !9
  %447 = getelementptr inbounds %"struct.tds::Transform", ptr %446, i32 0, i32 0
  %448 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %447)
          to label %449 unwind label %492

449:                                              ; preds = %443
  %450 = load double, ptr %448, align 8, !tbaa !19
  %451 = fptrunc double %450 to float
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %55, float noundef %439, float noundef %445, float noundef %451)
          to label %452 unwind label %492

452:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #13
  %453 = load ptr, ptr %53, align 8, !tbaa !9
  %454 = getelementptr inbounds %"struct.tds::Transform", ptr %453, i32 0, i32 1
  invoke void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind writable sret(%"class.Eigen::Quaternion") align 16 %56, ptr noundef nonnull align 8 dereferenceable(72) %454)
          to label %455 unwind label %496

455:                                              ; preds = %452
  %456 = call noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32) %52, ptr noundef nonnull align 16 dereferenceable(32) %56) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #13
  %457 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %52)
          to label %458 unwind label %500

458:                                              ; preds = %455
  %459 = load double, ptr %457, align 8, !tbaa !19
  %460 = fptrunc double %459 to float
  %461 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %52)
          to label %462 unwind label %500

462:                                              ; preds = %458
  %463 = load double, ptr %461, align 8, !tbaa !19
  %464 = fptrunc double %463 to float
  %465 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %52)
          to label %466 unwind label %500

466:                                              ; preds = %462
  %467 = load double, ptr %465, align 8, !tbaa !19
  %468 = fptrunc double %467 to float
  %469 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1) %52)
          to label %470 unwind label %500

470:                                              ; preds = %466
  %471 = load double, ptr %469, align 8, !tbaa !19
  %472 = fptrunc double %471 to float
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %57, float noundef %460, float noundef %464, float noundef %468, float noundef %472)
          to label %473 unwind label %500

473:                                              ; preds = %470
  %474 = load i32, ptr %49, align 4, !tbaa !5
  %475 = icmp sge i32 %474, 0
  br i1 %475, label %476, label %504

476:                                              ; preds = %473
  %477 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %478 = load ptr, ptr %477, align 8, !tbaa !11
  %479 = load float, ptr %46, align 4, !tbaa !28
  %480 = load ptr, ptr %478, align 8, !tbaa !15
  %481 = getelementptr inbounds ptr, ptr %480, i64 31
  %482 = load ptr, ptr %481, align 8
  invoke void %482(ptr noundef nonnull align 8 dereferenceable(60) %478, ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %55, ptr noundef nonnull align 4 dereferenceable(16) %45, float noundef %479)
          to label %483 unwind label %500

483:                                              ; preds = %476
  br label %508

484:                                              ; preds = %411
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %7, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %8, align 4
  br label %526

488:                                              ; preds = %427, %420, %417
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %7, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %8, align 4
  br label %525

492:                                              ; preds = %449, %443, %437, %433
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %7, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %8, align 4
  br label %524

496:                                              ; preds = %452
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %7, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #13
  br label %524

500:                                              ; preds = %510, %508, %504, %476, %470, %466, %462, %458, %455
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %7, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #13
  br label %524

504:                                              ; preds = %473
  %505 = load i32, ptr %47, align 4, !tbaa !5
  %506 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef %505)
          to label %507 unwind label %500

507:                                              ; preds = %504
  br label %508

508:                                              ; preds = %507, %483
  %509 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEaSERKS2_(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %55)
          to label %510 unwind label %500

510:                                              ; preds = %508
  %511 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %512 = load ptr, ptr %511, align 8, !tbaa !11
  %513 = load i32, ptr %51, align 4, !tbaa !5
  %514 = load ptr, ptr %512, align 8, !tbaa !15
  %515 = getelementptr inbounds ptr, ptr %514, i64 19
  %516 = load ptr, ptr %515, align 8
  invoke void %516(ptr noundef nonnull align 8 dereferenceable(60) %512, ptr noundef nonnull align 4 dereferenceable(16) %55, ptr noundef nonnull align 4 dereferenceable(16) %57, i32 noundef %513)
          to label %517 unwind label %500

517:                                              ; preds = %510
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr %54) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #13
  store i32 0, ptr %48, align 4
  br label %518

518:                                              ; preds = %517, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #13
  %519 = load i32, ptr %48, align 4
  switch i32 %519, label %574 [
    i32 0, label %520
    i32 12, label %521
  ]

520:                                              ; preds = %518
  br label %521

521:                                              ; preds = %520, %518
  %522 = load i32, ptr %49, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %49, align 4, !tbaa !5
  br label %377, !llvm.loop !31

524:                                              ; preds = %500, %496, %492
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr %54) #13
  br label %525

525:                                              ; preds = %524, %488
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #13
  br label %526

526:                                              ; preds = %525, %484
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #13
  br label %527

527:                                              ; preds = %526, %407
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #13
  br label %528

528:                                              ; preds = %527, %389
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #13
  br label %555

529:                                              ; preds = %388
  br label %530

530:                                              ; preds = %529
  %531 = load i32, ptr %47, align 4, !tbaa !5
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %47, align 4, !tbaa !5
  br label %358, !llvm.loop !32

533:                                              ; preds = %363
  br label %534

534:                                              ; preds = %533, %355
  %535 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %536 = load ptr, ptr %535, align 8, !tbaa !11
  %537 = load ptr, ptr %536, align 8, !tbaa !15
  %538 = getelementptr inbounds ptr, ptr %537, i64 3
  %539 = load ptr, ptr %538, align 8
  invoke void %539(ptr noundef nonnull align 8 dereferenceable(60) %536)
          to label %540 unwind label %547

540:                                              ; preds = %534
  %541 = getelementptr inbounds %struct.TinyCommonGraphicsApp, ptr %6, i32 0, i32 2
  %542 = load ptr, ptr %541, align 8, !tbaa !11
  invoke void @_ZN24TinyGLInstancingRenderer16write_transformsEv(ptr noundef nonnull align 8 dereferenceable(60) %542)
          to label %543 unwind label %547

543:                                              ; preds = %540
  invoke void @_ZN14TinyOpenGL3App11swap_bufferEv(ptr noundef nonnull align 8 dereferenceable(104) %6)
          to label %544 unwind label %547

544:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #13
  store double 1.000000e-03, ptr %59, align 8, !tbaa !19
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IdvEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %545 unwind label %551

545:                                              ; preds = %544
  invoke void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %546 unwind label %551

546:                                              ; preds = %545
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #13
  br label %242, !llvm.loop !33

547:                                              ; preds = %543, %540, %534
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %7, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %8, align 4
  br label %555

551:                                              ; preds = %545, %544
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %7, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #13
  br label %555

555:                                              ; preds = %551, %547, %528
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #13
  br label %556

556:                                              ; preds = %555, %372
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #13
  br label %557

557:                                              ; preds = %556, %368
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #13
  br label %558

558:                                              ; preds = %557, %364, %347
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #13
  br label %561

559:                                              ; preds = %249
  store i32 0, ptr %3, align 4
  store i32 1, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #13
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #13
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #13
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #13
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %9) #13
  call void @llvm.lifetime.end.p0(i64 512, ptr %9) #13
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %6) #13
  call void @llvm.lifetime.end.p0(i64 104, ptr %6) #13
  %560 = load i32, ptr %3, align 4
  ret i32 %560

561:                                              ; preds = %558, %343
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #13
  br label %562

562:                                              ; preds = %561, %339
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #13
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #13
  br label %563

563:                                              ; preds = %562, %338
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #13
  br label %564

564:                                              ; preds = %563, %326
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #13
  br label %565

565:                                              ; preds = %564, %325, %316, %307, %298, %190, %142
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #13
  br label %566

566:                                              ; preds = %565, %138, %134, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #13
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #13
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #13
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %9) #13
  br label %567

567:                                              ; preds = %566, %121
  call void @llvm.lifetime.end.p0(i64 512, ptr %9) #13
  br label %568

568:                                              ; preds = %567, %117
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %6) #13
  call void @llvm.lifetime.end.p0(i64 104, ptr %6) #13
  br label %569

569:                                              ; preds = %568
  %570 = load ptr, ptr %7, align 8
  %571 = load i32, ptr %8, align 4
  %572 = insertvalue { ptr, i32 } poison, ptr %570, 0
  %573 = insertvalue { ptr, i32 } %572, i32 %571, 1
  resume { ptr, i32 } %573

574:                                              ; preds = %518
  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 uwtable
declare dso_local void @_Z22init_compound_pendulumIN3tds13EigenAlgebraTIdEEEvRNS0_9MultiBodyIT_EERNS0_5WorldIS4_EEiSt6vectorINS4_6ScalarESaISB_EESD_(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(512), i32 noundef, ptr noundef, ptr noundef) #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 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: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Matrix.71") align 8, i64 noundef) #7 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(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_13EigenAlgebraTIdEEE2qdEv(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_13EigenAlgebraTIdEEE3tauEv(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: 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 #9 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEC2ImmEERKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #9 align 2

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

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

; 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: mustprogress uwtable
declare dso_local void @_ZN3tds11mass_matrixINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EEPNS4_7MatrixXE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef) #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) #9 align 2

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

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

; 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 zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #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: 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 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 #9 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)) #9 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)) #9 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)) #9 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)) #7 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)) #9 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)) #9 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)) #9 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)) #9 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 @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #8 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

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

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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 #8 = { 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 #9 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { 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 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !7, i64 0}
!21 = !{!22, !22, i64 0}
!22 = !{!"long", !7, i64 0}
!23 = !{!12, !10, i64 8}
!24 = !{!25, !13, i64 12}
!25 = !{!"_ZTS12DrawGridData", !6, i64 0, !14, i64 4, !6, i64 8, !13, i64 12, !7, i64 16}
!26 = !{!25, !6, i64 8}
!27 = !{i64 0, i64 4, !5, i64 4, i64 4, !28, i64 8, i64 4, !5, i64 12, i64 1, !29, i64 16, i64 16, !30}
!28 = !{!14, !14, i64 0}
!29 = !{!13, !13, i64 0}
!30 = !{!7, !7, i64 0}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}


; 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 }
%"class.std::vector.46" = type { %"struct.std::_Vector_base.47" }
%"struct.std::_Vector_base.47" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"struct.TINY::TinyQuaternion" = type { float, float, float, float }
%"class.Eigen::Matrix.71" = type { %"class.Eigen::PlainObjectBase.72" }
%"class.Eigen::PlainObjectBase.72" = type { %"class.Eigen::DenseStorage.79" }
%"class.Eigen::DenseStorage.79" = type { ptr, i64 }
%"class.Eigen::Matrix.85" = type { %"class.Eigen::PlainObjectBase.86" }
%"class.Eigen::PlainObjectBase.86" = type { %"class.Eigen::DenseStorage.93" }
%"class.Eigen::DenseStorage.93" = type { ptr, i64, i64 }
%struct.DrawGridData = type { i32, float, i32, i8, [4 x float] }
%"class.std::chrono::duration" = type { double }
%"class.Eigen::Quaternion" = type { %"class.Eigen::Matrix.104" }
%"class.Eigen::Matrix.104" = type { %"class.Eigen::PlainObjectBase.105" }
%"class.Eigen::PlainObjectBase.105" = type { %"class.Eigen::DenseStorage.112" }
%"class.Eigen::DenseStorage.112" = type { %"struct.Eigen::internal::plain_array.113" }
%"struct.Eigen::internal::plain_array.113" = type { [4 x double] }
%"struct.tds::Transform" = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix.51" }
%"class.Eigen::Matrix.51" = type { %"class.Eigen::PlainObjectBase.52" }
%"class.Eigen::PlainObjectBase.52" = type { %"class.Eigen::DenseStorage.59" }
%"class.Eigen::DenseStorage.59" = type { %"struct.Eigen::internal::plain_array.60" }
%"struct.Eigen::internal::plain_array.60" = type { [9 x double] }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = 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 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 ptr, align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::allocator", align 1
  %12 = alloca %"class.std::vector.46", align 8
  %13 = alloca %"class.std::vector.46", align 8
  %14 = alloca %"struct.TINY::TinyVector3", align 4
  %15 = alloca %"struct.TINY::TinyQuaternion", align 4
  %16 = alloca %"struct.TINY::TinyVector3", align 4
  %17 = alloca %"struct.TINY::TinyVector3", align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.Eigen::Matrix.71", align 8
  %20 = alloca %"class.Eigen::Matrix.71", align 8
  %21 = alloca %"class.Eigen::Matrix.71", align 8
  %22 = alloca %"class.Eigen::Matrix.71", align 8
  %23 = alloca %"class.Eigen::Matrix", align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca %"class.Eigen::Matrix.85", align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca double, align 8
  %31 = alloca %struct.DrawGridData, align 8
  %32 = alloca %"class.std::chrono::duration", align 8
  %33 = alloca %"struct.TINY::TinyVector3", align 4
  %34 = alloca %"struct.TINY::TinyVector3", align 4
  %35 = alloca %"class.Eigen::Quaternion", align 16
  %36 = alloca %"struct.tds::Transform", align 8
  %37 = alloca %"struct.TINY::TinyVector3", align 4
  %38 = alloca %"class.Eigen::Quaternion", align 16
  %39 = alloca %"struct.TINY::TinyQuaternion", align 4
  %40 = alloca %"class.std::chrono::duration", align 8
  %41 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %3) #12
  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)
  %42 = getelementptr inbounds i8, ptr %3, i64 16
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  %44 = load ptr, ptr %43, align 8, !tbaa !12
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  %46 = load ptr, ptr %45, align 8
  invoke void %46(ptr noundef nonnull align 8 dereferenceable(60) %43)
          to label %47 unwind label %87

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

48:                                               ; preds = %47
  %49 = load ptr, ptr %42, align 8, !tbaa !5
  %50 = load ptr, ptr %49, align 8, !tbaa !12
  %51 = getelementptr inbounds i8, ptr %50, i64 304
  %52 = load ptr, ptr %51, align 8
  %53 = invoke noundef ptr %52(ptr noundef nonnull align 8 dereferenceable(60) %49)
          to label %54 unwind label %87

54:                                               ; preds = %48
  %55 = load ptr, ptr %53, align 8, !tbaa !12
  %56 = getelementptr inbounds i8, ptr %55, i64 64
  %57 = load ptr, ptr %56, align 8
  invoke void %57(ptr noundef nonnull align 8 dereferenceable(16) %53, float noundef 4.000000e+00)
          to label %58 unwind label %87

58:                                               ; preds = %54
  %59 = load ptr, ptr %42, align 8, !tbaa !5
  %60 = load ptr, ptr %59, align 8, !tbaa !12
  %61 = getelementptr inbounds i8, ptr %60, i64 304
  %62 = load ptr, ptr %61, align 8
  %63 = invoke noundef ptr %62(ptr noundef nonnull align 8 dereferenceable(60) %59)
          to label %64 unwind label %87

64:                                               ; preds = %58
  %65 = load ptr, ptr %63, align 8, !tbaa !12
  %66 = getelementptr inbounds i8, ptr %65, i64 120
  %67 = load ptr, ptr %66, align 8
  invoke void %67(ptr noundef nonnull align 8 dereferenceable(16) %63, float noundef -3.000000e+01)
          to label %68 unwind label %87

68:                                               ; preds = %64
  %69 = load ptr, ptr %42, align 8, !tbaa !5
  %70 = load ptr, ptr %69, align 8, !tbaa !12
  %71 = getelementptr inbounds i8, ptr %70, i64 304
  %72 = load ptr, ptr %71, align 8
  %73 = invoke noundef ptr %72(ptr noundef nonnull align 8 dereferenceable(60) %69)
          to label %74 unwind label %87

74:                                               ; preds = %68
  %75 = load ptr, ptr %73, align 8, !tbaa !12
  %76 = getelementptr inbounds i8, ptr %75, i64 56
  %77 = load ptr, ptr %76, align 8
  invoke void %77(ptr noundef nonnull align 8 dereferenceable(16) %73, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %78 unwind label %87

78:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %4) #12
  %79 = call noundef double @_ZN3tds13EigenAlgebraTIdE8fractionEii(i32 noundef -981, i32 noundef 100)
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEEC2Ed(ptr noundef nonnull align 8 dereferenceable(512) %4, double noundef %79)
          to label %80 unwind label %89

80:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #12
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #12
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #12
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #12
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #12
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %81 unwind label %91

81:                                               ; preds = %80
  %82 = 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) %10)
          to label %83 unwind label %93

83:                                               ; preds = %81
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #12
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #12
  store ptr %82, ptr %9, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %12, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %13, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  invoke void @_Z22init_compound_pendulumIN3tds13EigenAlgebraTIdEEEvRNS0_9MultiBodyIT_EERNS0_5WorldIS4_EEiSt6vectorINS4_6ScalarESaISB_EESD_(ptr noundef nonnull align 8 dereferenceable(944) %82, ptr noundef nonnull align 8 dereferenceable(512) %4, i32 noundef 5, ptr noundef nonnull %12, ptr noundef nonnull %13)
          to label %84 unwind label %96

84:                                               ; preds = %83
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #12
  invoke void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %85 unwind label %98

85:                                               ; preds = %84
  %86 = invoke noundef i32 @_ZN14TinyOpenGL3App35register_graphics_unit_sphere_shapeE23EnumSphereLevelOfDetaili(ptr noundef nonnull align 8 dereferenceable(104) %3, i32 noundef 3, i32 noundef -1)
          to label %.preheader74.preheader unwind label %100

.preheader74.preheader:                           ; preds = %85
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %14, 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 %15) #12
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %102 unwind label %141

87:                                               ; preds = %74, %68, %64, %58, %54, %48, %47, %2
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %349

89:                                               ; preds = %78
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %348

91:                                               ; preds = %80
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %95

93:                                               ; preds = %81
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #12
  br label %95

95:                                               ; preds = %93, %91
  %.pn = phi { ptr, i32 } [ %94, %93 ], [ %92, %91 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #12
  br label %347

96:                                               ; preds = %83
  %97 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #12
  br label %347

98:                                               ; preds = %84
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %347

100:                                              ; preds = %85
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %347

102:                                              ; preds = %.preheader74.preheader
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  %103 = load ptr, ptr %42, align 8, !tbaa !5
  %104 = load ptr, ptr %103, align 8, !tbaa !12
  %105 = getelementptr inbounds i8, ptr %104, i64 136
  %106 = load ptr, ptr %105, align 8
  %107 = invoke noundef i32 %106(ptr noundef nonnull align 8 dereferenceable(60) %103, i32 noundef %86, ptr noundef nonnull align 4 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %108 unwind label %143

108:                                              ; preds = %102
  store i32 %107, ptr %18, align 4, !tbaa !15
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %.preheader74.1 unwind label %143

.preheader74.1:                                   ; preds = %108
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %14, float noundef 0.000000e+00, float noundef 0x3FB99999A0000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %109 unwind label %141

109:                                              ; preds = %.preheader74.1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  %110 = load ptr, ptr %42, align 8, !tbaa !5
  %111 = load ptr, ptr %110, align 8, !tbaa !12
  %112 = getelementptr inbounds i8, ptr %111, i64 136
  %113 = load ptr, ptr %112, align 8
  %114 = invoke noundef i32 %113(ptr noundef nonnull align 8 dereferenceable(60) %110, i32 noundef %86, ptr noundef nonnull align 4 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %115 unwind label %143

115:                                              ; preds = %109
  store i32 %114, ptr %18, align 4, !tbaa !15
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %.preheader74.2 unwind label %143

.preheader74.2:                                   ; preds = %115
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %14, float noundef 0.000000e+00, float noundef 0x3FC99999A0000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %116 unwind label %141

116:                                              ; preds = %.preheader74.2
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  %117 = load ptr, ptr %42, align 8, !tbaa !5
  %118 = load ptr, ptr %117, align 8, !tbaa !12
  %119 = getelementptr inbounds i8, ptr %118, i64 136
  %120 = load ptr, ptr %119, align 8
  %121 = invoke noundef i32 %120(ptr noundef nonnull align 8 dereferenceable(60) %117, i32 noundef %86, ptr noundef nonnull align 4 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %122 unwind label %143

122:                                              ; preds = %116
  store i32 %121, ptr %18, align 4, !tbaa !15
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %.preheader74.3 unwind label %143

.preheader74.3:                                   ; preds = %122
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %14, float noundef 0.000000e+00, float noundef 0x3FD3333340000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %123 unwind label %141

123:                                              ; preds = %.preheader74.3
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  %124 = load ptr, ptr %42, align 8, !tbaa !5
  %125 = load ptr, ptr %124, align 8, !tbaa !12
  %126 = getelementptr inbounds i8, ptr %125, i64 136
  %127 = load ptr, ptr %126, align 8
  %128 = invoke noundef i32 %127(ptr noundef nonnull align 8 dereferenceable(60) %124, i32 noundef %86, ptr noundef nonnull align 4 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %129 unwind label %143

129:                                              ; preds = %123
  store i32 %128, ptr %18, align 4, !tbaa !15
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %.preheader74.4 unwind label %143

.preheader74.4:                                   ; preds = %129
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %14, float noundef 0.000000e+00, float noundef 0x3FD99999A0000000, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %130 unwind label %141

130:                                              ; preds = %.preheader74.4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0x3FE3333340000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000, float noundef 0x3FA99999A0000000)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  %131 = load ptr, ptr %42, align 8, !tbaa !5
  %132 = load ptr, ptr %131, align 8, !tbaa !12
  %133 = getelementptr inbounds i8, ptr %132, i64 136
  %134 = load ptr, ptr %133, align 8
  %135 = invoke noundef i32 %134(ptr noundef nonnull align 8 dereferenceable(60) %131, i32 noundef %86, ptr noundef nonnull align 4 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 1.000000e+00, i1 noundef zeroext true)
          to label %136 unwind label %143

136:                                              ; preds = %130
  store i32 %135, ptr %18, align 4, !tbaa !15
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %137 unwind label %143

137:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #12
  %138 = load ptr, ptr %9, align 8, !tbaa !14
  %139 = call noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE3dofEv(ptr noundef nonnull align 8 dereferenceable(944) %138)
  %140 = sext i32 %139 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Matrix.71") align 8 %19, i64 noundef %140)
          to label %146 unwind label %218

141:                                              ; preds = %.preheader74.4, %.preheader74.3, %.preheader74.2, %.preheader74.1, %.preheader74.preheader
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %145

143:                                              ; preds = %136, %130, %129, %123, %122, %116, %115, %109, %108, %102
  %144 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  br label %145

145:                                              ; preds = %143, %141
  %.pn66 = phi { ptr, i32 } [ %144, %143 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  br label %347

146:                                              ; preds = %137
  %147 = load ptr, ptr %9, align 8, !tbaa !14
  %148 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944) %147)
  %149 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %148, ptr noundef nonnull align 8 dereferenceable(16) %19) #12
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #12
  %150 = load ptr, ptr %9, align 8, !tbaa !14
  %151 = call noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(ptr noundef nonnull align 8 dereferenceable(944) %150)
  %152 = sext i32 %151 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Matrix.71") align 8 %20, i64 noundef %152)
          to label %153 unwind label %220

153:                                              ; preds = %146
  %154 = load ptr, ptr %9, align 8, !tbaa !14
  %155 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %154)
  %156 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %155, ptr noundef nonnull align 8 dereferenceable(16) %20) #12
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #12
  %157 = load ptr, ptr %9, align 8, !tbaa !14
  %158 = call noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(ptr noundef nonnull align 8 dereferenceable(944) %157)
  %159 = sext i32 %158 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Matrix.71") align 8 %21, i64 noundef %159)
          to label %160 unwind label %222

160:                                              ; preds = %153
  %161 = load ptr, ptr %9, align 8, !tbaa !14
  %162 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3tauEv(ptr noundef nonnull align 8 dereferenceable(944) %161)
  %163 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %162, ptr noundef nonnull align 8 dereferenceable(16) %21) #12
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #12
  %164 = load ptr, ptr %9, align 8, !tbaa !14
  %165 = call noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(ptr noundef nonnull align 8 dereferenceable(944) %164)
  %166 = sext i32 %165 to i64
  invoke void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Matrix.71") align 8 %22, i64 noundef %166)
          to label %167 unwind label %224

167:                                              ; preds = %160
  %168 = load ptr, ptr %9, align 8, !tbaa !14
  %169 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944) %168)
  %170 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(16) %169, ptr noundef nonnull align 8 dereferenceable(16) %22) #12
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #12
  store double 0.000000e+00, ptr %24, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #12
  store double 0.000000e+00, ptr %25, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #12
  store double -9.810000e+00, ptr %26, align 8, !tbaa !17
  invoke void @_ZN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEC2ERKdS3_S3_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %171 unwind label %226

171:                                              ; preds = %167
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #12
  %172 = load ptr, ptr %9, align 8, !tbaa !14
  %173 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %172)
  %174 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %173) #12
  store i64 %174, ptr %28, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #12
  %175 = load ptr, ptr %9, align 8, !tbaa !14
  %176 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %175)
  %177 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %176) #12
  store i64 %177, ptr %29, align 8, !tbaa !19
  invoke void @_ZN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEC2ImmEERKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %178 unwind label %228

178:                                              ; preds = %171
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #12
  store double 0x3F71111111111111, ptr %30, align 8, !tbaa !17
  invoke void @_ZN14TinyOpenGL3App11set_mp4_fpsEi(ptr noundef nonnull align 8 dereferenceable(104) %3, i32 noundef 240)
          to label %.preheader73 unwind label %230

.preheader73:                                     ; preds = %178
  %179 = getelementptr inbounds i8, ptr %3, i64 8
  %180 = getelementptr inbounds i8, ptr %31, i64 12
  %181 = getelementptr inbounds i8, ptr %31, i64 8
  %182 = getelementptr inbounds i8, ptr %36, i64 24
  br label %183

183:                                              ; preds = %.preheader73, %336
  %184 = load ptr, ptr %179, align 8, !tbaa !21
  %185 = load ptr, ptr %184, align 8, !tbaa !12
  %186 = getelementptr inbounds i8, ptr %185, i64 56
  %187 = load ptr, ptr %186, align 8
  %188 = invoke noundef zeroext i1 %187(ptr noundef nonnull align 8 dereferenceable(8) %184)
          to label %189 unwind label %232

189:                                              ; preds = %183
  br i1 %188, label %343, label %190

190:                                              ; preds = %189
  %191 = load ptr, ptr %42, align 8, !tbaa !5
  %192 = load ptr, ptr %191, align 8, !tbaa !12
  %193 = getelementptr inbounds i8, ptr %192, i64 288
  %194 = load ptr, ptr %193, align 8
  invoke void %194(ptr noundef nonnull align 8 dereferenceable(60) %191, i32 noundef 2)
          to label %195 unwind label %232

195:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #12
  call void @_ZN12DrawGridDataC2Ei(ptr noundef nonnull align 4 dereferenceable(32) %31, i32 noundef 2)
  store i8 1, ptr %180, align 4, !tbaa !22
  store i32 2, ptr %181, align 8, !tbaa !24
  invoke void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104) %3, ptr noundef nonnull byval(%struct.DrawGridData) align 8 %31)
          to label %196 unwind label %234

196:                                              ; preds = %195
  %197 = load ptr, ptr %9, align 8, !tbaa !14
  invoke void @_ZN3tds18forward_kinematicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EE(ptr noundef nonnull align 8 dereferenceable(944) %197)
          to label %198 unwind label %234

198:                                              ; preds = %196
  invoke void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEE4stepERKd(ptr noundef nonnull align 8 dereferenceable(512) %4, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %199 unwind label %234

199:                                              ; preds = %198
  %200 = load ptr, ptr %9, align 8, !tbaa !14
  invoke void @_ZN3tds16forward_dynamicsINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERKNS4_7Vector3Eb(ptr noundef nonnull align 8 dereferenceable(944) %200, ptr noundef nonnull align 8 dereferenceable(24) %23, i1 noundef zeroext false)
          to label %201 unwind label %234

201:                                              ; preds = %199
  %202 = load ptr, ptr %9, align 8, !tbaa !14
  %203 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE1qEv(ptr noundef nonnull align 8 dereferenceable(944) %202)
  %204 = load ptr, ptr %9, align 8, !tbaa !14
  %205 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %204)
  %206 = load ptr, ptr %9, align 8, !tbaa !14
  %207 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE3qddEv(ptr noundef nonnull align 8 dereferenceable(944) %206)
  invoke void @_ZN3tds15integrate_eulerINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EERNS4_7VectorXES8_RKS7_RKNS4_6ScalarE(ptr noundef nonnull align 8 dereferenceable(944) %202, ptr noundef nonnull align 8 dereferenceable(16) %203, ptr noundef nonnull align 8 dereferenceable(16) %205, ptr noundef nonnull align 8 dereferenceable(16) %207, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %208 unwind label %234

208:                                              ; preds = %201
  %209 = load ptr, ptr %9, align 8, !tbaa !14
  invoke void @_ZN3tds11mass_matrixINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EEPNS4_7MatrixXE(ptr noundef nonnull align 8 dereferenceable(944) %209, ptr noundef nonnull %27)
          to label %210 unwind label %234

210:                                              ; preds = %208
  %211 = load ptr, ptr %9, align 8, !tbaa !14
  %212 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3tds9MultiBodyINS_13EigenAlgebraTIdEEE2qdEv(ptr noundef nonnull align 8 dereferenceable(944) %211)
  %213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %212, i64 noundef 0)
          to label %214 unwind label %234

214:                                              ; preds = %210
  %215 = load double, ptr %213, align 8, !tbaa !17
  %216 = fcmp olt double %215, -1.000000e+04
  br i1 %216, label %217, label %236

217:                                              ; preds = %214
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.18, i32 noundef 146, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #13
  unreachable

218:                                              ; preds = %137
  %219 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #12
  br label %347

220:                                              ; preds = %146
  %221 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #12
  br label %347

222:                                              ; preds = %153
  %223 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  br label %347

224:                                              ; preds = %160
  %225 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #12
  br label %347

226:                                              ; preds = %167
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #12
  br label %346

228:                                              ; preds = %171
  %229 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #12
  br label %345

230:                                              ; preds = %178
  %231 = landingpad { ptr, i32 }
          cleanup
  br label %344

232:                                              ; preds = %190, %183
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %344

234:                                              ; preds = %210, %208, %201, %199, %198, %196, %195
  %235 = landingpad { ptr, i32 }
          cleanup
  br label %342

236:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #12
  call void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IdvEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %30)
  invoke void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %237 unwind label %244

237:                                              ; preds = %236
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %33, 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 %34) #12
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %34, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %238 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #12
  br i1 %238, label %.loopexit, label %.preheader72

.preheader72:                                     ; preds = %237
  %239 = call noundef i64 @_ZNKSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #12
  %.not = icmp eq i64 %239, 0
  br i1 %.not, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %.preheader72, %._crit_edge
  %indvars.iv87 = phi i64 [ %indvars.iv.next88, %._crit_edge ], [ 0, %.preheader72 ]
  %.04983 = phi i32 [ %.150.lcssa, %._crit_edge ], [ 0, %.preheader72 ]
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv87) #12
  %241 = load ptr, ptr %240, align 8, !tbaa !14
  %242 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %241)
  %243 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %242) #12
  %.not85 = icmp eq i64 %243, 0
  br i1 %.not85, label %._crit_edge, label %.lr.ph

244:                                              ; preds = %236
  %245 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #12
  br label %342

._crit_edge:                                      ; preds = %320, %.preheader
  %.150.lcssa = phi i32 [ %.04983, %.preheader ], [ %.251, %320 ]
  %indvars.iv.next88 = add nuw nsw i64 %indvars.iv87, 1
  %246 = call noundef i64 @_ZNKSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #12
  %247 = icmp ugt i64 %246, %indvars.iv.next88
  br i1 %247, label %.preheader, label %.loopexit, !llvm.loop !25

.lr.ph:                                           ; preds = %.preheader, %320
  %indvars.iv = phi i64 [ %indvars.iv.next, %320 ], [ 0, %.preheader ]
  %.15081 = phi i32 [ %.251, %320 ], [ %.04983, %.preheader ]
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv87) #12
  %249 = load ptr, ptr %248, align 8, !tbaa !14
  %250 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %249)
  %251 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %250, i64 noundef %indvars.iv) #12
  %252 = getelementptr inbounds i8, ptr %251, i64 1752
  %253 = call noundef zeroext i1 @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %252) #12
  br i1 %253, label %320, label %254

254:                                              ; preds = %.lr.ph
  %255 = add nsw i32 %.15081, 1
  %256 = sext i32 %.15081 to i64
  %257 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %256) #12
  %258 = load i32, ptr %257, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #12
  invoke void @_ZN5Eigen10QuaternionIdLi0EEC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %35)
          to label %259 unwind label %303

259:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %36) #12
  %260 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %249)
  %261 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %260, i64 noundef %indvars.iv) #12
  %262 = getelementptr inbounds i8, ptr %261, i64 296
  %263 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %249)
  %264 = call noundef nonnull align 16 dereferenceable(1864) ptr @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %263, i64 noundef %indvars.iv) #12
  %265 = getelementptr inbounds i8, ptr %264, i64 1752
  %266 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt6vectorIN3tds9TransformINS0_13EigenAlgebraTIdEEEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %265, i64 noundef 0) #12
  invoke void @_ZNK3tds9TransformINS_13EigenAlgebraTIdEEEmlERKS3_(ptr dead_on_unwind nonnull writable sret(%"struct.tds::Transform") align 8 %36, ptr noundef nonnull align 8 dereferenceable(96) %262, ptr noundef nonnull align 8 dereferenceable(96) %266)
          to label %267 unwind label %305

267:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #12
  %268 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %269 unwind label %307

269:                                              ; preds = %267
  %270 = load double, ptr %268, align 8, !tbaa !17
  %271 = fptrunc double %270 to float
  %272 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %273 unwind label %307

273:                                              ; preds = %269
  %274 = load double, ptr %272, align 8, !tbaa !17
  %275 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %276 unwind label %307

276:                                              ; preds = %273
  %277 = fptrunc double %274 to float
  %278 = load double, ptr %275, align 8, !tbaa !17
  %279 = fptrunc double %278 to float
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef %271, float noundef %277, float noundef %279)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #12
  invoke void @_ZN3tds13EigenAlgebraTIdE14matrix_to_quatERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Quaternion") align 16 %38, ptr noundef nonnull align 8 dereferenceable(72) %182)
          to label %280 unwind label %309

280:                                              ; preds = %276
  %281 = call noundef nonnull align 16 dereferenceable(32) ptr @_ZN5Eigen10QuaternionIdLi0EEaSEOS1_(ptr noundef nonnull align 16 dereferenceable(32) %35, ptr noundef nonnull align 16 dereferenceable(32) %38) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #12
  %282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %283 unwind label %311

283:                                              ; preds = %280
  %284 = load double, ptr %282, align 8, !tbaa !17
  %285 = fptrunc double %284 to float
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %287 unwind label %311

287:                                              ; preds = %283
  %288 = load double, ptr %286, align 8, !tbaa !17
  %289 = fptrunc double %288 to float
  %290 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %291 unwind label %311

291:                                              ; preds = %287
  %292 = load double, ptr %290, align 8, !tbaa !17
  %293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen14QuaternionBaseINS_10QuaternionIdLi0EEEE1wEv(ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %294 unwind label %311

294:                                              ; preds = %291
  %295 = fptrunc double %292 to float
  %296 = load double, ptr %293, align 8, !tbaa !17
  %297 = fptrunc double %296 to float
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %39, float noundef %285, float noundef %289, float noundef %295, float noundef %297)
          to label %298 unwind label %311

298:                                              ; preds = %294
  %299 = load ptr, ptr %42, align 8, !tbaa !5
  %300 = load ptr, ptr %299, align 8, !tbaa !12
  %301 = getelementptr inbounds i8, ptr %300, i64 248
  %302 = load ptr, ptr %301, align 8
  invoke void %302(ptr noundef nonnull align 8 dereferenceable(60) %299, ptr noundef nonnull align 4 dereferenceable(16) %33, ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 4 dereferenceable(16) %34, float noundef 1.000000e+00)
          to label %313 unwind label %311

303:                                              ; preds = %254
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %327

305:                                              ; preds = %259
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %327

307:                                              ; preds = %273, %269, %267
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %326

309:                                              ; preds = %276
  %310 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #12
  br label %326

311:                                              ; preds = %313, %298, %294, %291, %287, %283, %280
  %312 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #12
  br label %326

313:                                              ; preds = %298
  %314 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEaSERKS2_(ptr noundef nonnull align 4 dereferenceable(16) %33, ptr noundef nonnull align 4 dereferenceable(16) %37)
  %315 = load ptr, ptr %42, align 8, !tbaa !5
  %316 = load ptr, ptr %315, align 8, !tbaa !12
  %317 = getelementptr inbounds i8, ptr %316, i64 152
  %318 = load ptr, ptr %317, align 8
  invoke void %318(ptr noundef nonnull align 8 dereferenceable(60) %315, ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 4 dereferenceable(16) %39, i32 noundef %258)
          to label %319 unwind label %311

319:                                              ; preds = %313
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %36) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #12
  br label %320

320:                                              ; preds = %.lr.ph, %319
  %.251 = phi i32 [ %255, %319 ], [ %.15081, %.lr.ph ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %321 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv87) #12
  %322 = load ptr, ptr %321, align 8, !tbaa !14
  %323 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE5linksEv(ptr noundef nonnull align 8 dereferenceable(944) %322)
  %324 = call noundef i64 @_ZNKSt6vectorIN3tds4LinkINS0_13EigenAlgebraTIdEEEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %323) #12
  %325 = icmp ugt i64 %324, %indvars.iv.next
  br i1 %325, label %.lr.ph, label %._crit_edge, !llvm.loop !27

326:                                              ; preds = %311, %309, %307
  %.pn55 = phi { ptr, i32 } [ %312, %311 ], [ %310, %309 ], [ %308, %307 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %36) #12
  br label %327

327:                                              ; preds = %305, %326, %303
  %.pn55.pn.pn = phi { ptr, i32 } [ %304, %303 ], [ %.pn55, %326 ], [ %306, %305 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #12
  br label %341

.loopexit:                                        ; preds = %._crit_edge, %.preheader72, %237
  %328 = load ptr, ptr %42, align 8, !tbaa !5
  %329 = load ptr, ptr %328, align 8, !tbaa !12
  %330 = getelementptr inbounds i8, ptr %329, i64 24
  %331 = load ptr, ptr %330, align 8
  invoke void %331(ptr noundef nonnull align 8 dereferenceable(60) %328)
          to label %332 unwind label %337

332:                                              ; preds = %.loopexit
  %333 = load ptr, ptr %42, align 8, !tbaa !5
  invoke void @_ZN24TinyGLInstancingRenderer16write_transformsEv(ptr noundef nonnull align 8 dereferenceable(60) %333)
          to label %334 unwind label %337

334:                                              ; preds = %332
  invoke void @_ZN14TinyOpenGL3App11swap_bufferEv(ptr noundef nonnull align 8 dereferenceable(104) %3)
          to label %335 unwind label %337

335:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #12
  store double 1.000000e-03, ptr %41, align 8, !tbaa !17
  call void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IdvEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41)
  invoke void @_ZNSt11this_thread9sleep_forIdSt5ratioILl1ELl1EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %336 unwind label %339

336:                                              ; preds = %335
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #12
  br label %183, !llvm.loop !28

337:                                              ; preds = %334, %332, %.loopexit
  %338 = landingpad { ptr, i32 }
          cleanup
  br label %341

339:                                              ; preds = %335
  %340 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  br label %341

341:                                              ; preds = %339, %337, %327
  %.pn59 = phi { ptr, i32 } [ %340, %339 ], [ %338, %337 ], [ %.pn55.pn.pn, %327 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #12
  br label %342

342:                                              ; preds = %341, %244, %234
  %.pn59.pn = phi { ptr, i32 } [ %.pn59, %341 ], [ %245, %244 ], [ %235, %234 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #12
  br label %344

343:                                              ; preds = %189
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #12
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #12
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #12
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #12
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %4) #12
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %4) #12
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %3) #12
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %3) #12
  ret i32 0

344:                                              ; preds = %232, %342, %230
  %.pn59.pn.pn.pn = phi { ptr, i32 } [ %231, %230 ], [ %.pn59.pn, %342 ], [ %233, %232 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #12
  call void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #12
  br label %345

345:                                              ; preds = %344, %228
  %.pn59.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn59.pn.pn.pn, %344 ], [ %229, %228 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #12
  br label %346

346:                                              ; preds = %345, %226
  %.pn59.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn59.pn.pn.pn.pn, %345 ], [ %227, %226 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #12
  br label %347

347:                                              ; preds = %100, %145, %218, %220, %222, %224, %346, %98, %96, %95
  %.pn66.pn.pn = phi { ptr, i32 } [ %99, %98 ], [ %97, %96 ], [ %.pn, %95 ], [ %.pn66, %145 ], [ %.pn59.pn.pn.pn.pn.pn, %346 ], [ %225, %224 ], [ %223, %222 ], [ %221, %220 ], [ %219, %218 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #12
  call void @_ZNSt6vectorIPN3tds9MultiBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #12
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #12
  call void @_ZNSt6vectorIPN3tds9RigidBodyINS0_13EigenAlgebraTIdEEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  call void @_ZN3tds5WorldINS_13EigenAlgebraTIdEEED2Ev(ptr noundef nonnull align 8 dereferenceable(512) %4) #12
  br label %348

348:                                              ; preds = %347, %89
  %.pn66.pn.pn.pn = phi { ptr, i32 } [ %.pn66.pn.pn, %347 ], [ %90, %89 ]
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %4) #12
  br label %349

349:                                              ; preds = %348, %87
  %.pn66.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn66.pn.pn.pn, %348 ], [ %88, %87 ]
  call void @_ZN14TinyOpenGL3AppD1Ev(ptr noundef nonnull align 8 dereferenceable(104) %3) #12
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %3) #12
  resume { ptr, i32 } %.pn66.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 uwtable
declare dso_local void @_Z22init_compound_pendulumIN3tds13EigenAlgebraTIdEEEvRNS0_9MultiBodyIT_EERNS0_5WorldIS4_EEiSt6vectorINS4_6ScalarESaISB_EESD_(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(512), i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 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: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3tds13EigenAlgebraTIdE5zeroxEl(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Matrix.71") align 8, i64 noundef) local_unnamed_addr #7 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3tds9MultiBodyINS_13EigenAlgebraTIdEEE6dof_qdEv(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_13EigenAlgebraTIdEEE2qdEv(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_13EigenAlgebraTIdEEE3tauEv(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: 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 #9 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEC2ImmEERKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #9 align 2

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

; 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 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: mustprogress uwtable
declare dso_local void @_ZN3tds11mass_matrixINS_13EigenAlgebraTIdEEEEvRNS_9MultiBodyIT_EEPNS4_7MatrixXE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef) local_unnamed_addr #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 #9 align 2

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

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

; 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 zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_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: 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 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 #9 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 #9 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 #9 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 #9 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 #7 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 #9 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 #9 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 #9 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 #9 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 @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #8 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 #11

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!7, !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !8, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"long", !8, i64 0}
!21 = !{!6, !7, i64 8}
!22 = !{!23, !10, i64 12}
!23 = !{!"_ZTS12DrawGridData", !16, i64 0, !11, i64 4, !16, i64 8, !10, i64 12, !8, i64 16}
!24 = !{!23, !16, i64 8}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}


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