; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Vehicle/MotorcycleTest.ll (ZN14MotorcycleTest10InitializeEv)

; 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"

%"class.JPH::Vec3" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"class.JPH::RefConst.32" = type { ptr }
%"class.JPH::Result" = type <{ %union.anon.33, i8, [7 x i8] }>
%union.anon.33 = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.37 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.37 = type { i64, [8 x i8] }
%"class.JPH::OffsetCenterOfMassShapeSettings" = type { %"class.JPH::DecoratedShapeSettings", %"class.JPH::Vec3" }
%"class.JPH::DecoratedShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::RefConst.39", %"class.JPH::RefConst.32" }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.38", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.38" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.39" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.39", %"class.JPH::RefConst.32" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.42", i32, i32 }
%"class.JPH::RefConst.42" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::VehicleConstraintSettings" = type { %"class.JPH::ConstraintSettings", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::Array.46", %"class.JPH::Array.24", %"class.JPH::Ref.49" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.45", i8, i32, i32, i32, float, i64 }
%"class.JPH::RefTarget.45" = type { %"struct.std::atomic" }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.JPH::Array.24" = type { i64, i64, ptr }
%"class.JPH::Ref.49" = type { ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::Ref.55" = type { ptr }
%"class.std::initializer_list.63" = type { ptr, i64 }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.MotorcycleTest = type { %class.VehicleTest, ptr, %"class.JPH::Ref", %"class.JPH::Mat44", float, float, float, float }
%class.VehicleTest = type { %class.Test, %"class.JPH::Array" }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::WheelSettings" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.50", [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, float, %"class.JPH::SpringSettings", float, float, i8, [15 x i8] }>
%"class.JPH::RefTarget.50" = type { %"struct.std::atomic" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.51, float }
%union.anon.51 = type { float }
%"class.JPH::WheelSettingsWV" = type { %"class.JPH::WheelSettings.base", float, float, float, %"class.JPH::LinearCurve", %"class.JPH::LinearCurve", float, float, [8 x i8] }
%"class.JPH::WheelSettings.base" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.50", [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, float, %"class.JPH::SpringSettings", float, float, i8 }>
%"class.JPH::LinearCurve" = type { %"class.JPH::Array.52" }
%"class.JPH::Array.52" = type { i64, i64, ptr }
%"class.JPH::WheeledVehicleControllerSettings" = type <{ %"class.JPH::VehicleControllerSettings.base", [4 x i8], %"class.JPH::VehicleEngineSettings", %"class.JPH::VehicleTransmissionSettings", %"class.JPH::Array.60", float, [4 x i8] }>
%"class.JPH::VehicleControllerSettings.base" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.56" }>
%"class.JPH::RefTarget.56" = type { %"struct.std::atomic" }
%"class.JPH::VehicleEngineSettings" = type { float, float, float, %"class.JPH::LinearCurve", float, float }
%"class.JPH::VehicleTransmissionSettings" = type { i8, %"class.JPH::Array.57", %"class.JPH::Array.57", float, float, float, float, float, float }
%"class.JPH::Array.57" = type { i64, i64, ptr }
%"class.JPH::Array.60" = type { i64, i64, ptr }
%"class.JPH::VehicleDifferentialSettings" = type { i32, i32, float, float, float, float }

@_ZN14MotorcycleTest34sOverrideFrontSuspensionForcePointE = external dso_local global i8, align 1
@_ZN14MotorcycleTest33sOverrideRearSuspensionForcePointE = external dso_local global i8, align 1
@constinit = external hidden constant [6 x float], align 4

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

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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14MotorcycleTest10InitializeEv(ptr noundef nonnull align 16 dereferenceable(240) %0) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca float, align 4
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::RefConst.32", align 8
  %24 = alloca %"class.JPH::Result", align 8
  %25 = alloca %"class.JPH::OffsetCenterOfMassShapeSettings", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.JPH::BodyCreationSettings", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Quat", align 16
  %33 = alloca %"class.JPH::VehicleConstraintSettings", align 16
  %34 = alloca ptr, align 8
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca ptr, align 8
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.std::initializer_list", align 8
  %46 = alloca [2 x %"class.JPH::Ref.55"], align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca %"class.std::initializer_list.63", align 8
  %50 = alloca [6 x float], align 4
  %51 = alloca %"class.std::initializer_list.63", align 8
  %52 = alloca [1 x float], align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %53 = load ptr, ptr %2, align 8
  call void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %53)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #11
  store float 0x3FD3D70A40000000, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #11
  store float 0x3FA99999A0000000, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #11
  store float -7.500000e-01, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #11
  store float 0x3FD3333340000000, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #11
  store float 5.000000e-01, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  store float 2.000000e+00, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  store float 2.500000e+02, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  store float 0x3FD3D70A40000000, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  store float 0x3FA99999A0000000, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  store float 7.500000e-01, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  store float 0x3FD3333340000000, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  store float 5.000000e-01, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  store float 1.500000e+00, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #11
  store float 5.000000e+02, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #11
  store float 0x3FD99999A0000000, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #11
  store float 0x3FC99999A0000000, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #11
  store float 0x3FD3333340000000, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  %54 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  store float %54, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  %55 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  store float %55, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.start.p0(i64 40, ptr %24) #11
  call void @llvm.lifetime.start.p0(i64 96, ptr %25) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 0.000000e+00, float noundef 0xBFD3333340000000, float noundef 0.000000e+00)
  %56 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0x3FC99999A0000000, float noundef 0x3FD3333340000000, float noundef 0x3FD99999A0000000)
          to label %57 unwind label %212

57:                                               ; preds = %1
  %58 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %59 = load double, ptr %58, align 16
  %60 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %61 = load double, ptr %60, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %56, double %59, double %61, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %62 unwind label %212

62:                                               ; preds = %57
  %63 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %64 = load double, ptr %63, align 16
  %65 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %66 = load double, ptr %65, align 8
  call void @_ZN3JPH31OffsetCenterOfMassShapeSettingsC2ENS_4Vec3EPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(96) %25, double %64, double %66, ptr noundef %56)
  invoke void @_ZNK3JPH31OffsetCenterOfMassShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %24, ptr noundef nonnull align 16 dereferenceable(96) %25)
          to label %67 unwind label %216

67:                                               ; preds = %62
  %68 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %24)
          to label %69 unwind label %220

69:                                               ; preds = %67
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %70 unwind label %220

70:                                               ; preds = %69
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %24) #11
  call void @_ZN3JPH22DecoratedShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %25) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #11
  call void @llvm.lifetime.start.p0(i64 256, ptr %30) #11
  %71 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %72 unwind label %226

72:                                               ; preds = %70
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %22, i64 16, i1 false), !tbaa.struct !11
  %73 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %74 unwind label %226

74:                                               ; preds = %72
  %75 = getelementptr inbounds %"class.JPH::Quat", ptr %32, i32 0, i32 0
  %76 = getelementptr inbounds %"class.JPH::Vec4", ptr %75, i32 0, i32 0
  %77 = getelementptr inbounds %union.anon, ptr %76, i32 0, i32 0
  %78 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %79 = extractvalue { double, double } %73, 0
  store double %79, ptr %78, align 16
  %80 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %81 = extractvalue { double, double } %73, 1
  store double %81, ptr %80, align 8
  %82 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %83 = load double, ptr %82, align 16
  %84 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %85 = load double, ptr %84, align 8
  %86 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %87 = load double, ptr %86, align 16
  %88 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %89 = load double, ptr %88, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %30, ptr noundef %71, double %83, double %85, double %87, double %89, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %90 unwind label %226

90:                                               ; preds = %74
  %91 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %30, i32 0, i32 26
  store i8 1, ptr %91, align 16, !tbaa !13
  %92 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %30, i32 0, i32 28
  %93 = getelementptr inbounds %"class.JPH::MassProperties", ptr %92, i32 0, i32 0
  store float 2.400000e+02, ptr %93, align 16, !tbaa !32
  %94 = getelementptr inbounds %class.Test, ptr %53, i32 0, i32 3
  %95 = load ptr, ptr %94, align 8, !tbaa !33
  %96 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %95, ptr noundef nonnull align 16 dereferenceable(256) %30)
          to label %97 unwind label %230

97:                                               ; preds = %90
  %98 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 1
  store ptr %96, ptr %98, align 8, !tbaa !39
  %99 = getelementptr inbounds %class.Test, ptr %53, i32 0, i32 3
  %100 = load ptr, ptr %99, align 8, !tbaa !33
  %101 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 1
  %102 = load ptr, ptr %101, align 8, !tbaa !39
  %103 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %102)
          to label %104 unwind label %230

104:                                              ; preds = %97
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %100, ptr noundef nonnull align 4 dereferenceable(4) %103, i32 noundef 0)
          to label %105 unwind label %230

105:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 144, ptr %33) #11
  invoke void @_ZN3JPH25VehicleConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %33)
          to label %106 unwind label %234

106:                                              ; preds = %105
  %107 = getelementptr inbounds %"class.JPH::ConstraintSettings", ptr %33, i32 0, i32 6
  store float 0x3FB99999A0000000, ptr %107, align 4, !tbaa !44
  %108 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 6.000000e+01)
          to label %109 unwind label %238

109:                                              ; preds = %106
  %110 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %33, i32 0, i32 3
  store float %108, ptr %110, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #11
  %111 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %112 unwind label %242

112:                                              ; preds = %109
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %111)
          to label %113 unwind label %246

113:                                              ; preds = %112
  store ptr %111, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %35, float noundef 0.000000e+00, float noundef 0xBFD147AE20000000, float noundef 7.500000e-01)
          to label %114 unwind label %250

114:                                              ; preds = %113
  %115 = load ptr, ptr %34, align 8, !tbaa !5
  %116 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %115, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %116, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #11
  %117 = load ptr, ptr %34, align 8, !tbaa !5
  %118 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %117, i32 0, i32 3
  store float 0x3FE0C15240000000, ptr %118, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #11
  %119 = invoke noundef float @_ZN3JPH3TanEf(float noundef 0x3FE0C15240000000)
          to label %120 unwind label %254

120:                                              ; preds = %114
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %37, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef %119)
          to label %121 unwind label %254

121:                                              ; preds = %120
  %122 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %37)
          to label %123 unwind label %254

123:                                              ; preds = %121
  %124 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %125 = getelementptr inbounds %union.anon.20, ptr %124, i32 0, i32 0
  %126 = getelementptr inbounds { double, double }, ptr %125, i32 0, i32 0
  %127 = extractvalue { double, double } %122, 0
  store double %127, ptr %126, align 16
  %128 = getelementptr inbounds { double, double }, ptr %125, i32 0, i32 1
  %129 = extractvalue { double, double } %122, 1
  store double %129, ptr %128, align 8
  %130 = load ptr, ptr %34, align 8, !tbaa !5
  %131 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %130, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %131, ptr align 16 %36, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #11
  %132 = load ptr, ptr %34, align 8, !tbaa !5
  %133 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %132, i32 0, i32 5
  %134 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %133)
          to label %135 unwind label %258

135:                                              ; preds = %123
  %136 = getelementptr inbounds %"class.JPH::Vec3", ptr %38, i32 0, i32 0
  %137 = getelementptr inbounds %union.anon.20, ptr %136, i32 0, i32 0
  %138 = getelementptr inbounds { double, double }, ptr %137, i32 0, i32 0
  %139 = extractvalue { double, double } %134, 0
  store double %139, ptr %138, align 16
  %140 = getelementptr inbounds { double, double }, ptr %137, i32 0, i32 1
  %141 = extractvalue { double, double } %134, 1
  store double %141, ptr %140, align 8
  %142 = load ptr, ptr %34, align 8, !tbaa !5
  %143 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %142, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %143, ptr align 16 %38, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #11
  %144 = load ptr, ptr %34, align 8, !tbaa !5
  %145 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %144, i32 0, i32 13
  store float 0x3FD3D70A40000000, ptr %145, align 8, !tbaa !63
  %146 = load ptr, ptr %34, align 8, !tbaa !5
  %147 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %146, i32 0, i32 14
  store float 0x3FA99999A0000000, ptr %147, align 4, !tbaa !64
  %148 = load ptr, ptr %34, align 8, !tbaa !5
  %149 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %148, i32 0, i32 9
  store float 0x3FD3333340000000, ptr %149, align 16, !tbaa !65
  %150 = load ptr, ptr %34, align 8, !tbaa !5
  %151 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %150, i32 0, i32 10
  store float 5.000000e-01, ptr %151, align 4, !tbaa !66
  %152 = load ptr, ptr %34, align 8, !tbaa !5
  %153 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %152, i32 0, i32 12
  %154 = getelementptr inbounds %"class.JPH::SpringSettings", ptr %153, i32 0, i32 1
  store float 1.500000e+00, ptr %154, align 4, !tbaa !12
  %155 = load ptr, ptr %34, align 8, !tbaa !5
  %156 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %155, i32 0, i32 6
  store float 5.000000e+02, ptr %156, align 16, !tbaa !67
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #11
  %157 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %158 unwind label %262

158:                                              ; preds = %135
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %157)
          to label %159 unwind label %266

159:                                              ; preds = %158
  store ptr %157, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %40, float noundef 0.000000e+00, float noundef 0xBFD147AE20000000, float noundef -7.500000e-01)
          to label %160 unwind label %270

160:                                              ; preds = %159
  %161 = load ptr, ptr %39, align 8, !tbaa !5
  %162 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %161, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %162, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  %163 = load ptr, ptr %39, align 8, !tbaa !5
  %164 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %163, i32 0, i32 3
  store float 0.000000e+00, ptr %164, align 4, !tbaa !55
  %165 = load ptr, ptr %39, align 8, !tbaa !5
  %166 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %165, i32 0, i32 13
  store float 0x3FD3D70A40000000, ptr %166, align 8, !tbaa !63
  %167 = load ptr, ptr %39, align 8, !tbaa !5
  %168 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %167, i32 0, i32 14
  store float 0x3FA99999A0000000, ptr %168, align 4, !tbaa !64
  %169 = load ptr, ptr %39, align 8, !tbaa !5
  %170 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %169, i32 0, i32 9
  store float 0x3FD3333340000000, ptr %170, align 16, !tbaa !65
  %171 = load ptr, ptr %39, align 8, !tbaa !5
  %172 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %171, i32 0, i32 10
  store float 5.000000e-01, ptr %172, align 4, !tbaa !66
  %173 = load ptr, ptr %39, align 8, !tbaa !5
  %174 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %173, i32 0, i32 12
  %175 = getelementptr inbounds %"class.JPH::SpringSettings", ptr %174, i32 0, i32 1
  store float 2.000000e+00, ptr %175, align 4, !tbaa !12
  %176 = load ptr, ptr %39, align 8, !tbaa !5
  %177 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %176, i32 0, i32 6
  store float 2.500000e+02, ptr %177, align 16, !tbaa !67
  %178 = load i8, ptr @_ZN14MotorcycleTest34sOverrideFrontSuspensionForcePointE, align 1, !tbaa !68, !range !69, !noundef !70
  %179 = trunc i8 %178 to i1
  br i1 %179, label %180, label %278

180:                                              ; preds = %160
  %181 = load ptr, ptr %34, align 8, !tbaa !5
  %182 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %181, i32 0, i32 15
  store i8 1, ptr %182, align 16, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #11
  %183 = load ptr, ptr %34, align 8, !tbaa !5
  %184 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %183, i32 0, i32 3
  %185 = load ptr, ptr %34, align 8, !tbaa !5
  %186 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %185, i32 0, i32 5
  %187 = load ptr, ptr %34, align 8, !tbaa !5
  %188 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %187, i32 0, i32 9
  %189 = load float, ptr %188, align 16, !tbaa !65
  %190 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %186, float noundef %189)
          to label %191 unwind label %274

191:                                              ; preds = %180
  %192 = getelementptr inbounds %"class.JPH::Vec3", ptr %42, i32 0, i32 0
  %193 = getelementptr inbounds %union.anon.20, ptr %192, i32 0, i32 0
  %194 = getelementptr inbounds { double, double }, ptr %193, i32 0, i32 0
  %195 = extractvalue { double, double } %190, 0
  store double %195, ptr %194, align 16
  %196 = getelementptr inbounds { double, double }, ptr %193, i32 0, i32 1
  %197 = extractvalue { double, double } %190, 1
  store double %197, ptr %196, align 8
  %198 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %199 = load double, ptr %198, align 16
  %200 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %201 = load double, ptr %200, align 8
  %202 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %184, double %199, double %201)
          to label %203 unwind label %274

203:                                              ; preds = %191
  %204 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %205 = getelementptr inbounds %union.anon.20, ptr %204, i32 0, i32 0
  %206 = getelementptr inbounds { double, double }, ptr %205, i32 0, i32 0
  %207 = extractvalue { double, double } %202, 0
  store double %207, ptr %206, align 16
  %208 = getelementptr inbounds { double, double }, ptr %205, i32 0, i32 1
  %209 = extractvalue { double, double } %202, 1
  store double %209, ptr %208, align 8
  %210 = load ptr, ptr %34, align 8, !tbaa !5
  %211 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %210, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %211, ptr align 16 %41, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #11
  br label %278

212:                                              ; preds = %57, %1
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %28, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %29, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %56) #11
  br label %225

216:                                              ; preds = %62
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %28, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %29, align 4
  br label %224

220:                                              ; preds = %69, %67
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %28, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %29, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %24) #11
  br label %224

224:                                              ; preds = %220, %216
  call void @_ZN3JPH22DecoratedShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %25) #11
  br label %225

225:                                              ; preds = %224, %212
  call void @llvm.lifetime.end.p0(i64 96, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #11
  br label %491

226:                                              ; preds = %74, %72, %70
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %28, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %29, align 4
  br label %490

230:                                              ; preds = %104, %97, %90
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %28, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %29, align 4
  br label %489

234:                                              ; preds = %105
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %28, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %29, align 4
  br label %488

238:                                              ; preds = %106
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %28, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %29, align 4
  br label %487

242:                                              ; preds = %109
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %28, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %29, align 4
  br label %486

246:                                              ; preds = %112
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %28, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %29, align 4
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %111) #11
  br label %486

250:                                              ; preds = %113
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %28, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #11
  br label %486

254:                                              ; preds = %121, %120, %114
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %28, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #11
  br label %486

258:                                              ; preds = %123
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %28, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #11
  br label %486

262:                                              ; preds = %135
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %28, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %29, align 4
  br label %485

266:                                              ; preds = %158
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %28, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %29, align 4
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %157) #11
  br label %485

270:                                              ; preds = %159
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %28, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  br label %485

274:                                              ; preds = %191, %180
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %28, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #11
  br label %485

278:                                              ; preds = %203, %160
  %279 = load i8, ptr @_ZN14MotorcycleTest33sOverrideRearSuspensionForcePointE, align 1, !tbaa !68, !range !69, !noundef !70
  %280 = trunc i8 %279 to i1
  br i1 %280, label %281, label %317

281:                                              ; preds = %278
  %282 = load ptr, ptr %39, align 8, !tbaa !5
  %283 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %282, i32 0, i32 15
  store i8 1, ptr %283, align 16, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #11
  %284 = load ptr, ptr %39, align 8, !tbaa !5
  %285 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %284, i32 0, i32 3
  %286 = load ptr, ptr %39, align 8, !tbaa !5
  %287 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %286, i32 0, i32 5
  %288 = load ptr, ptr %39, align 8, !tbaa !5
  %289 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %288, i32 0, i32 9
  %290 = load float, ptr %289, align 16, !tbaa !65
  %291 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %287, float noundef %290)
          to label %292 unwind label %313

292:                                              ; preds = %281
  %293 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %294 = getelementptr inbounds %union.anon.20, ptr %293, i32 0, i32 0
  %295 = getelementptr inbounds { double, double }, ptr %294, i32 0, i32 0
  %296 = extractvalue { double, double } %291, 0
  store double %296, ptr %295, align 16
  %297 = getelementptr inbounds { double, double }, ptr %294, i32 0, i32 1
  %298 = extractvalue { double, double } %291, 1
  store double %298, ptr %297, align 8
  %299 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %300 = load double, ptr %299, align 16
  %301 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %302 = load double, ptr %301, align 8
  %303 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %285, double %300, double %302)
          to label %304 unwind label %313

304:                                              ; preds = %292
  %305 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %306 = getelementptr inbounds %union.anon.20, ptr %305, i32 0, i32 0
  %307 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 0
  %308 = extractvalue { double, double } %303, 0
  store double %308, ptr %307, align 16
  %309 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 1
  %310 = extractvalue { double, double } %303, 1
  store double %310, ptr %309, align 8
  %311 = load ptr, ptr %39, align 8, !tbaa !5
  %312 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %311, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %312, ptr align 16 %43, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #11
  br label %317

313:                                              ; preds = %292, %281
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %28, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #11
  br label %485

317:                                              ; preds = %304, %278
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #11
  store ptr %46, ptr %47, align 8
  %318 = load ptr, ptr %34, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef %318)
          to label %319 unwind label %437

319:                                              ; preds = %317
  %320 = getelementptr inbounds %"class.JPH::Ref.55", ptr %46, i64 1
  store ptr %320, ptr %47, align 8
  %321 = load ptr, ptr %39, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %320, ptr noundef %321)
          to label %322 unwind label %437

322:                                              ; preds = %319
  %323 = getelementptr inbounds %"class.std::initializer_list", ptr %45, i32 0, i32 0
  store ptr %46, ptr %323, align 8, !tbaa !72
  %324 = getelementptr inbounds %"class.std::initializer_list", ptr %45, i32 0, i32 1
  store i64 2, ptr %324, align 8, !tbaa !74
  %325 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %33, i32 0, i32 4
  %326 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8
  %328 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 1
  %329 = load i64, ptr %328, align 8
  %330 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEaSESt16initializer_listIS3_E(ptr noundef nonnull align 8 dereferenceable(24) %325, ptr %327, i64 %329)
          to label %331 unwind label %448

331:                                              ; preds = %322
  %332 = getelementptr inbounds [2 x %"class.JPH::Ref.55"], ptr %46, i32 0, i32 0
  %333 = getelementptr inbounds %"class.JPH::Ref.55", ptr %332, i64 2
  br label %334

334:                                              ; preds = %334, %331
  %335 = phi ptr [ %333, %331 ], [ %336, %334 ]
  %336 = getelementptr inbounds %"class.JPH::Ref.55", ptr %335, i64 -1
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %336) #11
  %337 = icmp eq ptr %336, %332
  br i1 %337, label %338, label %334

338:                                              ; preds = %334
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #11
  %339 = invoke noundef ptr @_ZN3JPH28MotorcycleControllerSettingsnwEm(i64 noundef 200)
          to label %340 unwind label %460

340:                                              ; preds = %338
  invoke void @_ZN3JPH28MotorcycleControllerSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(196) %339)
          to label %341 unwind label %464

341:                                              ; preds = %340
  store ptr %339, ptr %48, align 8, !tbaa !5
  %342 = load ptr, ptr %48, align 8, !tbaa !5
  %343 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %342, i32 0, i32 2
  %344 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %343, i32 0, i32 0
  store float 1.500000e+02, ptr %344, align 8, !tbaa !75
  %345 = load ptr, ptr %48, align 8, !tbaa !5
  %346 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %345, i32 0, i32 2
  %347 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %346, i32 0, i32 1
  store float 1.000000e+03, ptr %347, align 4, !tbaa !84
  %348 = load ptr, ptr %48, align 8, !tbaa !5
  %349 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %348, i32 0, i32 2
  %350 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %349, i32 0, i32 2
  store float 1.000000e+04, ptr %350, align 8, !tbaa !85
  %351 = load ptr, ptr %48, align 8, !tbaa !5
  %352 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %351, i32 0, i32 3
  %353 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %352, i32 0, i32 7
  store float 2.000000e+03, ptr %353, align 8, !tbaa !86
  %354 = load ptr, ptr %48, align 8, !tbaa !5
  %355 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %354, i32 0, i32 3
  %356 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %355, i32 0, i32 6
  store float 8.000000e+03, ptr %356, align 4, !tbaa !87
  call void @llvm.lifetime.start.p0(i64 24, ptr %50) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 @constinit, i64 24, i1 false), !tbaa.struct !88
  %357 = getelementptr inbounds %"class.std::initializer_list.63", ptr %49, i32 0, i32 0
  store ptr %50, ptr %357, align 8, !tbaa !89
  %358 = getelementptr inbounds %"class.std::initializer_list.63", ptr %49, i32 0, i32 1
  store i64 6, ptr %358, align 8, !tbaa !91
  %359 = load ptr, ptr %48, align 8, !tbaa !5
  %360 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %359, i32 0, i32 3
  %361 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %360, i32 0, i32 1
  %362 = getelementptr inbounds { ptr, i64 }, ptr %49, i32 0, i32 0
  %363 = load ptr, ptr %362, align 8
  %364 = getelementptr inbounds { ptr, i64 }, ptr %49, i32 0, i32 1
  %365 = load i64, ptr %364, align 8
  %366 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEaSESt16initializer_listIfE(ptr noundef nonnull align 8 dereferenceable(24) %361, ptr %363, i64 %365)
          to label %367 unwind label %468

367:                                              ; preds = %341
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #11
  store float -4.000000e+00, ptr %52, align 4, !tbaa !9
  %368 = getelementptr inbounds %"class.std::initializer_list.63", ptr %51, i32 0, i32 0
  store ptr %52, ptr %368, align 8, !tbaa !89
  %369 = getelementptr inbounds %"class.std::initializer_list.63", ptr %51, i32 0, i32 1
  store i64 1, ptr %369, align 8, !tbaa !91
  %370 = load ptr, ptr %48, align 8, !tbaa !5
  %371 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %370, i32 0, i32 3
  %372 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %371, i32 0, i32 2
  %373 = getelementptr inbounds { ptr, i64 }, ptr %51, i32 0, i32 0
  %374 = load ptr, ptr %373, align 8
  %375 = getelementptr inbounds { ptr, i64 }, ptr %51, i32 0, i32 1
  %376 = load i64, ptr %375, align 8
  %377 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEaSESt16initializer_listIfE(ptr noundef nonnull align 8 dereferenceable(24) %372, ptr %374, i64 %376)
          to label %378 unwind label %472

378:                                              ; preds = %367
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #11
  %379 = load ptr, ptr %48, align 8, !tbaa !5
  %380 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %379, i32 0, i32 3
  %381 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %380, i32 0, i32 8
  store float 2.000000e+00, ptr %381, align 4, !tbaa !92
  %382 = load ptr, ptr %48, align 8, !tbaa !5
  %383 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %33, i32 0, i32 6
  %384 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_25VehicleControllerSettingsEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %383, ptr noundef %382)
          to label %385 unwind label %460

385:                                              ; preds = %378
  %386 = load ptr, ptr %48, align 8, !tbaa !5
  %387 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %386, i32 0, i32 4
  invoke void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %387, i64 noundef 1)
          to label %388 unwind label %460

388:                                              ; preds = %385
  %389 = load ptr, ptr %48, align 8, !tbaa !5
  %390 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %389, i32 0, i32 4
  %391 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %390, i64 noundef 0)
          to label %392 unwind label %460

392:                                              ; preds = %388
  %393 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %391, i32 0, i32 0
  store i32 -1, ptr %393, align 4, !tbaa !93
  %394 = load ptr, ptr %48, align 8, !tbaa !5
  %395 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %394, i32 0, i32 4
  %396 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %395, i64 noundef 0)
          to label %397 unwind label %460

397:                                              ; preds = %392
  %398 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %396, i32 0, i32 1
  store i32 1, ptr %398, align 4, !tbaa !95
  %399 = load ptr, ptr %48, align 8, !tbaa !5
  %400 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %399, i32 0, i32 4
  %401 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %400, i64 noundef 0)
          to label %402 unwind label %460

402:                                              ; preds = %397
  %403 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %401, i32 0, i32 2
  store float 0x40134CCCC0000000, ptr %403, align 4, !tbaa !96
  %404 = invoke noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef 416)
          to label %405 unwind label %460

405:                                              ; preds = %402
  %406 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 1
  %407 = load ptr, ptr %406, align 8, !tbaa !39
  invoke void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408) %404, ptr noundef nonnull align 16 dereferenceable(122) %407, ptr noundef nonnull align 16 dereferenceable(144) %33)
          to label %408 unwind label %476

408:                                              ; preds = %405
  %409 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 2
  %410 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_17VehicleConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %409, ptr noundef %404)
          to label %411 unwind label %460

411:                                              ; preds = %408
  %412 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 2
  %413 = invoke noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %412)
          to label %414 unwind label %460

414:                                              ; preds = %411
  %415 = invoke noundef ptr @_ZN3JPH34VehicleCollisionTesterCastCylindernwEm(i64 noundef 48)
          to label %416 unwind label %460

416:                                              ; preds = %414
  invoke void @_ZN3JPH34VehicleCollisionTesterCastCylinderC2Etf(ptr noundef nonnull align 8 dereferenceable(48) %415, i16 noundef zeroext 1, float noundef 1.000000e+00)
          to label %417 unwind label %480

417:                                              ; preds = %416
  invoke void @_ZN3JPH17VehicleConstraint25SetVehicleCollisionTesterEPKNS_22VehicleCollisionTesterE(ptr noundef nonnull align 16 dereferenceable(408) %413, ptr noundef %415)
          to label %418 unwind label %460

418:                                              ; preds = %417
  %419 = getelementptr inbounds %class.Test, ptr %53, i32 0, i32 2
  %420 = load ptr, ptr %419, align 16, !tbaa !97
  %421 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 2
  %422 = invoke noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %421)
          to label %423 unwind label %460

423:                                              ; preds = %418
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %420, ptr noundef %422)
          to label %424 unwind label %460

424:                                              ; preds = %423
  %425 = getelementptr inbounds %class.Test, ptr %53, i32 0, i32 2
  %426 = load ptr, ptr %425, align 16, !tbaa !97
  %427 = getelementptr inbounds %class.MotorcycleTest, ptr %53, i32 0, i32 2
  %428 = invoke noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %427)
          to label %429 unwind label %460

429:                                              ; preds = %424
  %430 = icmp eq ptr %428, null
  br i1 %430, label %433, label %431

431:                                              ; preds = %429
  %432 = getelementptr inbounds i8, ptr %428, i64 32
  br label %433

433:                                              ; preds = %431, %429
  %434 = phi ptr [ %432, %431 ], [ null, %429 ]
  invoke void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172) %426, ptr noundef %434)
          to label %435 unwind label %460

435:                                              ; preds = %433
  invoke void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240) %53)
          to label %436 unwind label %460

436:                                              ; preds = %435
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %33) #11
  call void @llvm.lifetime.end.p0(i64 144, ptr %33) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %30) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %30) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #11
  ret void

437:                                              ; preds = %319, %317
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %28, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %29, align 4
  %441 = load ptr, ptr %47, align 8
  %442 = icmp eq ptr %46, %441
  br i1 %442, label %447, label %443

443:                                              ; preds = %443, %437
  %444 = phi ptr [ %441, %437 ], [ %445, %443 ]
  %445 = getelementptr inbounds %"class.JPH::Ref.55", ptr %444, i64 -1
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %445) #11
  %446 = icmp eq ptr %445, %46
  br i1 %446, label %447, label %443

447:                                              ; preds = %443, %437
  br label %459

448:                                              ; preds = %322
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %28, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %29, align 4
  %452 = getelementptr inbounds [2 x %"class.JPH::Ref.55"], ptr %46, i32 0, i32 0
  %453 = getelementptr inbounds %"class.JPH::Ref.55", ptr %452, i64 2
  br label %454

454:                                              ; preds = %454, %448
  %455 = phi ptr [ %453, %448 ], [ %456, %454 ]
  %456 = getelementptr inbounds %"class.JPH::Ref.55", ptr %455, i64 -1
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %456) #11
  %457 = icmp eq ptr %456, %452
  br i1 %457, label %458, label %454

458:                                              ; preds = %454
  br label %459

459:                                              ; preds = %458, %447
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #11
  br label %485

460:                                              ; preds = %435, %433, %424, %423, %418, %417, %414, %411, %408, %402, %397, %392, %388, %385, %378, %338
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %28, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %29, align 4
  br label %484

464:                                              ; preds = %340
  %465 = landingpad { ptr, i32 }
          cleanup
  %466 = extractvalue { ptr, i32 } %465, 0
  store ptr %466, ptr %28, align 8
  %467 = extractvalue { ptr, i32 } %465, 1
  store i32 %467, ptr %29, align 4
  call void @_ZN3JPH28MotorcycleControllerSettingsdlEPv(ptr noundef %339) #11
  br label %484

468:                                              ; preds = %341
  %469 = landingpad { ptr, i32 }
          cleanup
  %470 = extractvalue { ptr, i32 } %469, 0
  store ptr %470, ptr %28, align 8
  %471 = extractvalue { ptr, i32 } %469, 1
  store i32 %471, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #11
  br label %484

472:                                              ; preds = %367
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %28, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #11
  br label %484

476:                                              ; preds = %405
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %28, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %29, align 4
  call void @_ZN3JPH10ConstraintdlEPv(ptr noundef %404) #11
  br label %484

480:                                              ; preds = %416
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %28, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %29, align 4
  call void @_ZN3JPH34VehicleCollisionTesterCastCylinderdlEPv(ptr noundef %415) #11
  br label %484

484:                                              ; preds = %480, %476, %472, %468, %464, %460
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  br label %485

485:                                              ; preds = %484, %459, %313, %274, %270, %266, %262
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  br label %486

486:                                              ; preds = %485, %258, %254, %250, %246, %242
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  br label %487

487:                                              ; preds = %486, %238
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %33) #11
  br label %488

488:                                              ; preds = %487, %234
  call void @llvm.lifetime.end.p0(i64 144, ptr %33) #11
  br label %489

489:                                              ; preds = %488, %230
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %30) #11
  br label %490

490:                                              ; preds = %489, %226
  call void @llvm.lifetime.end.p0(i64 256, ptr %30) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  br label %491

491:                                              ; preds = %490, %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #11
  br label %492

492:                                              ; preds = %491
  %493 = load ptr, ptr %28, align 8
  %494 = load i32, ptr %29, align 4
  %495 = insertvalue { ptr, i32 } poison, ptr %493, 0
  %496 = insertvalue { ptr, i32 } %495, i32 %494, 1
  resume { ptr, i32 } %496
}

declare void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136)) unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef) #4

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #6 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH31OffsetCenterOfMassShapeSettingsC2ENS_4Vec3EPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(96), double, double, ptr noundef) unnamed_addr #2 align 2

declare void @_ZNK3JPH31OffsetCenterOfMassShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 16 dereferenceable(96)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33)) #2 align 2

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #2 align 2

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) #3

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH25VehicleConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef) #6 align 2

declare void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216)) unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef) #4 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3TanEf(float noundef) #6

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16)) #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16)) #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16), float noundef) #10 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH28MotorcycleControllerSettingsnwEm(i64 noundef) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28MotorcycleControllerSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(196)) unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH28MotorcycleControllerSettingsdlEPv(ptr noundef) #4 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef) #6 align 2

declare void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10ConstraintdlEPv(ptr noundef) #4 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH34VehicleCollisionTesterCastCylindernwEm(i64 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH34VehicleCollisionTesterCastCylinderC2Etf(ptr noundef nonnull align 8 dereferenceable(48), i16 noundef zeroext, float noundef) unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH34VehicleCollisionTesterCastCylinderdlEPv(ptr noundef) #4 align 2

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

declare void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172), ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240)) #2 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{i64 0, i64 16, !12}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !27, i64 144}
!14 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !15, i64 0, !16, i64 16, !15, i64 32, !15, i64 48, !18, i64 64, !19, i64 72, !20, i64 80, !23, i64 96, !24, i64 97, !25, i64 98, !25, i64 99, !25, i64 100, !25, i64 101, !25, i64 102, !26, i64 103, !25, i64 104, !25, i64 105, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !22, i64 136, !22, i64 140, !27, i64 144, !10, i64 148, !28, i64 160, !30, i64 240, !31, i64 248}
!15 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!16 = !{!"_ZTSN3JPH4QuatE", !17, i64 0}
!17 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"short", !7, i64 0}
!20 = !{!"_ZTSN3JPH14CollisionGroupE", !21, i64 0, !22, i64 8, !22, i64 12}
!21 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!24 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!27 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!28 = !{!"_ZTSN3JPH14MassPropertiesE", !10, i64 0, !29, i64 16}
!29 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!30 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!31 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!32 = !{!14, !10, i64 160}
!33 = !{!34, !6, i64 24}
!34 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !25, i64 48, !35, i64 56}
!35 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !36, i64 0}
!36 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !18, i64 8, !37, i64 16, !18, i64 24, !38, i64 32, !6, i64 48}
!37 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!38 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !18, i64 8}
!39 = !{!40, !6, i64 136}
!40 = !{!"_ZTS14MotorcycleTest", !41, i64 0, !6, i64 136, !43, i64 144, !29, i64 160, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236}
!41 = !{!"_ZTS11VehicleTest", !34, i64 0, !42, i64 112}
!42 = !{!"_ZTSN3JPH5ArrayIN11VehicleTest4LineENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!43 = !{!"_ZTSN3JPH3RefINS_17VehicleConstraintEEE", !6, i64 0}
!44 = !{!45, !10, i64 28}
!45 = !{!"_ZTSN3JPH18ConstraintSettingsE", !46, i64 0, !47, i64 8, !25, i64 12, !22, i64 16, !22, i64 20, !22, i64 24, !10, i64 28, !18, i64 32}
!46 = !{!"_ZTSN3JPH18SerializableObjectE"}
!47 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !48, i64 0}
!48 = !{!"_ZTSSt6atomicIjE", !49, i64 0}
!49 = !{!"_ZTSSt13__atomic_baseIjE", !22, i64 0}
!50 = !{!51, !10, i64 80}
!51 = !{!"_ZTSN3JPH25VehicleConstraintSettingsE", !45, i64 0, !15, i64 48, !15, i64 64, !10, i64 80, !52, i64 88, !53, i64 112, !54, i64 136}
!52 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!53 = !{!"_ZTSN3JPH5ArrayINS_18VehicleAntiRollBarENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!54 = !{!"_ZTSN3JPH3RefINS_25VehicleControllerSettingsEEE", !6, i64 0}
!55 = !{!56, !10, i64 156}
!56 = !{!"_ZTSN3JPH15WheelSettingsWVE", !57, i64 0, !10, i64 148, !10, i64 152, !10, i64 156, !61, i64 160, !61, i64 184, !10, i64 208, !10, i64 212}
!57 = !{!"_ZTSN3JPH13WheelSettingsE", !46, i64 0, !58, i64 8, !15, i64 16, !15, i64 32, !15, i64 48, !15, i64 64, !15, i64 80, !15, i64 96, !10, i64 112, !10, i64 116, !10, i64 120, !59, i64 124, !10, i64 136, !10, i64 140, !25, i64 144}
!58 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !48, i64 0}
!59 = !{!"_ZTSN3JPH14SpringSettingsE", !60, i64 0, !7, i64 4, !10, i64 8}
!60 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!61 = !{!"_ZTSN3JPH11LinearCurveE", !62, i64 0}
!62 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!63 = !{!57, !10, i64 136}
!64 = !{!57, !10, i64 140}
!65 = !{!57, !10, i64 112}
!66 = !{!57, !10, i64 116}
!67 = !{!56, !10, i64 208}
!68 = !{!25, !25, i64 0}
!69 = !{i8 0, i8 2}
!70 = !{}
!71 = !{!57, !25, i64 144}
!72 = !{!73, !6, i64 0}
!73 = !{!"_ZTSSt16initializer_listIN3JPH3RefINS0_13WheelSettingsEEEE", !6, i64 0, !18, i64 8}
!74 = !{!73, !18, i64 8}
!75 = !{!76, !10, i64 16}
!76 = !{!"_ZTSN3JPH32WheeledVehicleControllerSettingsE", !77, i64 0, !79, i64 16, !80, i64 64, !83, i64 144, !10, i64 168}
!77 = !{!"_ZTSN3JPH25VehicleControllerSettingsE", !46, i64 0, !78, i64 8}
!78 = !{!"_ZTSN3JPH9RefTargetINS_25VehicleControllerSettingsEEE", !48, i64 0}
!79 = !{!"_ZTSN3JPH21VehicleEngineSettingsE", !10, i64 0, !10, i64 4, !10, i64 8, !61, i64 16, !10, i64 40, !10, i64 44}
!80 = !{!"_ZTSN3JPH27VehicleTransmissionSettingsE", !81, i64 0, !82, i64 8, !82, i64 32, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76}
!81 = !{!"_ZTSN3JPH17ETransmissionModeE", !7, i64 0}
!82 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!83 = !{!"_ZTSN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!84 = !{!76, !10, i64 20}
!85 = !{!76, !10, i64 24}
!86 = !{!76, !10, i64 136}
!87 = !{!76, !10, i64 132}
!88 = !{i64 0, i64 24, !12}
!89 = !{!90, !6, i64 0}
!90 = !{!"_ZTSSt16initializer_listIfE", !6, i64 0, !18, i64 8}
!91 = !{!90, !18, i64 8}
!92 = !{!76, !10, i64 140}
!93 = !{!94, !22, i64 0}
!94 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !22, i64 0, !22, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!95 = !{!94, !22, i64 4}
!96 = !{!94, !10, i64 8}
!97 = !{!34, !6, i64 16}


; 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"

%"class.JPH::Vec3" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"class.JPH::RefConst.32" = type { ptr }
%"class.JPH::Result" = type <{ %union.anon.33, i8, [7 x i8] }>
%union.anon.33 = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.37 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.37 = type { i64, [8 x i8] }
%"class.JPH::OffsetCenterOfMassShapeSettings" = type { %"class.JPH::DecoratedShapeSettings", %"class.JPH::Vec3" }
%"class.JPH::DecoratedShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::RefConst.39", %"class.JPH::RefConst.32" }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.38", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.38" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.39" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.39", %"class.JPH::RefConst.32" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.42", i32, i32 }
%"class.JPH::RefConst.42" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::VehicleConstraintSettings" = type { %"class.JPH::ConstraintSettings", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::Array.46", %"class.JPH::Array.24", %"class.JPH::Ref.49" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.45", i8, i32, i32, i32, float, i64 }
%"class.JPH::RefTarget.45" = type { %"struct.std::atomic" }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.JPH::Array.24" = type { i64, i64, ptr }
%"class.JPH::Ref.49" = type { ptr }
%"class.JPH::Ref.55" = type { ptr }

@_ZN14MotorcycleTest34sOverrideFrontSuspensionForcePointE = external dso_local local_unnamed_addr global i8, align 1
@_ZN14MotorcycleTest33sOverrideRearSuspensionForcePointE = external dso_local local_unnamed_addr global i8, align 1
@constinit = external hidden local_unnamed_addr constant [6 x float], align 4

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

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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14MotorcycleTest10InitializeEv(ptr noundef nonnull align 16 dereferenceable(240) %0) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Vec3", align 16
  %3 = alloca %"class.JPH::RefConst.32", align 8
  %4 = alloca %"class.JPH::Result", align 8
  %5 = alloca %"class.JPH::OffsetCenterOfMassShapeSettings", align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::VehicleConstraintSettings", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca [2 x %"class.JPH::Ref.55"], align 8
  %14 = alloca [6 x float], align 4
  %15 = alloca [1 x float], align 4
  tail call void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %0)
  %16 = tail call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  %17 = tail call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %2, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #11
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #11
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %5) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 0.000000e+00, float noundef 0xBFD3333340000000, float noundef 0.000000e+00)
  %18 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 0x3FC99999A0000000, float noundef 0x3FD3333340000000, float noundef 0x3FD99999A0000000)
  %19 = load double, ptr %7, align 16
  %20 = getelementptr inbounds i8, ptr %7, i64 8
  %21 = load double, ptr %20, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %18, double %19, double %21, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %22 unwind label %94

22:                                               ; preds = %1
  %23 = load double, ptr %6, align 16
  %24 = getelementptr inbounds i8, ptr %6, i64 8
  %25 = load double, ptr %24, align 8
  call void @_ZN3JPH31OffsetCenterOfMassShapeSettingsC2ENS_4Vec3EPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(96) %5, double %23, double %25, ptr noundef nonnull %18)
  invoke void @_ZNK3JPH31OffsetCenterOfMassShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %4, ptr noundef nonnull align 16 dereferenceable(96) %5)
          to label %26 unwind label %96

26:                                               ; preds = %22
  %27 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %4)
          to label %28 unwind label %98

28:                                               ; preds = %26
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %29 unwind label %98

29:                                               ; preds = %28
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %4) #11
  call void @_ZN3JPH22DecoratedShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %5) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #11
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #11
  %30 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %.sroa.062.0.copyload = load double, ptr %2, align 16
  %.sroa.263.0..sroa_idx = getelementptr inbounds i8, ptr %2, i64 8
  %.sroa.263.0.copyload = load double, ptr %.sroa.263.0..sroa_idx, align 8, !tbaa !5
  %31 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %32 unwind label %102

32:                                               ; preds = %29
  %33 = extractvalue { double, double } %31, 0
  %34 = extractvalue { double, double } %31, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef %30, double %.sroa.062.0.copyload, double %.sroa.263.0.copyload, double %33, double %34, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %35 unwind label %102

35:                                               ; preds = %32
  %36 = getelementptr inbounds i8, ptr %8, i64 144
  store i8 1, ptr %36, align 16, !tbaa !8
  %37 = getelementptr inbounds i8, ptr %8, i64 160
  store float 2.400000e+02, ptr %37, align 16, !tbaa !29
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = load ptr, ptr %38, align 8, !tbaa !30
  %40 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %39, ptr noundef nonnull align 16 dereferenceable(256) %8)
          to label %41 unwind label %104

41:                                               ; preds = %35
  %42 = getelementptr inbounds i8, ptr %0, i64 136
  store ptr %40, ptr %42, align 8, !tbaa !36
  %43 = load ptr, ptr %38, align 8, !tbaa !30
  %44 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %40)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 4 dereferenceable(4) %44, i32 noundef 0)
          to label %45 unwind label %104

45:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %9) #11
  invoke void @_ZN3JPH25VehicleConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %9)
          to label %46 unwind label %106

46:                                               ; preds = %45
  %47 = getelementptr inbounds i8, ptr %9, i64 28
  store float 0x3FB99999A0000000, ptr %47, align 4, !tbaa !41
  %48 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 6.000000e+01)
  %49 = getelementptr inbounds i8, ptr %9, i64 80
  store float %48, ptr %49, align 16, !tbaa !47
  %50 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %51 unwind label %108

51:                                               ; preds = %46
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %50)
          to label %52 unwind label %110

52:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef 0.000000e+00, float noundef 0xBFD147AE20000000, float noundef 7.500000e-01)
  %53 = getelementptr inbounds i8, ptr %50, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %53, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  %54 = getelementptr inbounds i8, ptr %50, i64 156
  store float 0x3FE0C15240000000, ptr %54, align 4, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #11
  %55 = invoke noundef float @_ZN3JPH3TanEf(float noundef 0x3FE0C15240000000)
          to label %56 unwind label %112

56:                                               ; preds = %52
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef %55)
  %57 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %58 unwind label %112

58:                                               ; preds = %56
  %59 = extractvalue { double, double } %57, 0
  %60 = extractvalue { double, double } %57, 1
  %61 = getelementptr inbounds i8, ptr %50, i64 48
  store double %59, ptr %61, align 16
  %.sroa.542.0..sroa_idx = getelementptr inbounds i8, ptr %50, i64 56
  store double %60, ptr %.sroa.542.0..sroa_idx, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  %62 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %61)
          to label %63 unwind label %114

63:                                               ; preds = %58
  %64 = extractvalue { double, double } %62, 0
  %65 = extractvalue { double, double } %62, 1
  %66 = getelementptr inbounds i8, ptr %50, i64 64
  store double %64, ptr %66, align 16
  %.sroa.540.0..sroa_idx = getelementptr inbounds i8, ptr %50, i64 72
  store double %65, ptr %.sroa.540.0..sroa_idx, align 8, !tbaa !5
  %67 = getelementptr inbounds i8, ptr %50, i64 136
  store <2 x float> <float 0x3FD3D70A40000000, float 0x3FA99999A0000000>, ptr %67, align 8, !tbaa !61
  %68 = getelementptr inbounds i8, ptr %50, i64 112
  store <2 x float> <float 0x3FD3333340000000, float 5.000000e-01>, ptr %68, align 16, !tbaa !61
  %69 = getelementptr inbounds i8, ptr %50, i64 128
  store float 1.500000e+00, ptr %69, align 4, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %50, i64 208
  store float 5.000000e+02, ptr %70, align 16, !tbaa !62
  %71 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %72 unwind label %116

72:                                               ; preds = %63
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %71)
          to label %73 unwind label %118

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0.000000e+00, float noundef 0xBFD147AE20000000, float noundef -7.500000e-01)
  %74 = getelementptr inbounds i8, ptr %71, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %74, ptr noundef nonnull align 16 dereferenceable(16) %12, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  %75 = getelementptr inbounds i8, ptr %71, i64 156
  store float 0.000000e+00, ptr %75, align 4, !tbaa !53
  %76 = getelementptr inbounds i8, ptr %71, i64 136
  store <2 x float> <float 0x3FD3D70A40000000, float 0x3FA99999A0000000>, ptr %76, align 8, !tbaa !61
  %77 = getelementptr inbounds i8, ptr %71, i64 112
  store <2 x float> <float 0x3FD3333340000000, float 5.000000e-01>, ptr %77, align 16, !tbaa !61
  %78 = getelementptr inbounds i8, ptr %71, i64 128
  store float 2.000000e+00, ptr %78, align 4, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %71, i64 208
  store float 2.500000e+02, ptr %79, align 16, !tbaa !62
  %80 = load i8, ptr @_ZN14MotorcycleTest34sOverrideFrontSuspensionForcePointE, align 1, !tbaa !63, !range !64, !noundef !65
  %81 = trunc nuw i8 %80 to i1
  br i1 %81, label %82, label %122

82:                                               ; preds = %73
  %83 = getelementptr inbounds i8, ptr %50, i64 144
  store i8 1, ptr %83, align 16, !tbaa !66
  %84 = load float, ptr %68, align 16, !tbaa !67
  %85 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %61, float noundef %84)
          to label %86 unwind label %120

86:                                               ; preds = %82
  %87 = extractvalue { double, double } %85, 0
  %88 = extractvalue { double, double } %85, 1
  %89 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %53, double %87, double %88)
          to label %90 unwind label %120

90:                                               ; preds = %86
  %91 = extractvalue { double, double } %89, 0
  %92 = extractvalue { double, double } %89, 1
  %93 = getelementptr inbounds i8, ptr %50, i64 32
  store double %91, ptr %93, align 16
  %.sroa.524.0..sroa_idx = getelementptr inbounds i8, ptr %50, i64 40
  store double %92, ptr %.sroa.524.0..sroa_idx, align 8, !tbaa !5
  br label %122

94:                                               ; preds = %1
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %18) #11
  br label %101

96:                                               ; preds = %22
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %100

98:                                               ; preds = %28, %26
  %99 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %4) #11
  br label %100

100:                                              ; preds = %98, %96
  %.pn = phi { ptr, i32 } [ %99, %98 ], [ %97, %96 ]
  call void @_ZN3JPH22DecoratedShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %5) #11
  br label %101

101:                                              ; preds = %100, %94
  %.pn.pn = phi { ptr, i32 } [ %.pn, %100 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #11
  br label %217

102:                                              ; preds = %32, %29
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %216

104:                                              ; preds = %41, %35
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %215

106:                                              ; preds = %45
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %214

108:                                              ; preds = %46
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %213

110:                                              ; preds = %51
  %111 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %50) #11
  br label %213

112:                                              ; preds = %56, %52
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  br label %213

114:                                              ; preds = %58
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %213

116:                                              ; preds = %63
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %213

118:                                              ; preds = %72
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %71) #11
  br label %213

120:                                              ; preds = %86, %82
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %213

122:                                              ; preds = %90, %73
  %123 = load i8, ptr @_ZN14MotorcycleTest33sOverrideRearSuspensionForcePointE, align 1, !tbaa !63, !range !64, !noundef !65
  %124 = trunc nuw i8 %123 to i1
  br i1 %124, label %125, label %140

125:                                              ; preds = %122
  %126 = getelementptr inbounds i8, ptr %71, i64 144
  store i8 1, ptr %126, align 16, !tbaa !66
  %127 = getelementptr inbounds i8, ptr %71, i64 48
  %128 = load float, ptr %77, align 16, !tbaa !67
  %129 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %127, float noundef %128)
          to label %130 unwind label %138

130:                                              ; preds = %125
  %131 = extractvalue { double, double } %129, 0
  %132 = extractvalue { double, double } %129, 1
  %133 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %74, double %131, double %132)
          to label %134 unwind label %138

134:                                              ; preds = %130
  %135 = extractvalue { double, double } %133, 0
  %136 = extractvalue { double, double } %133, 1
  %137 = getelementptr inbounds i8, ptr %71, i64 32
  store double %135, ptr %137, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %71, i64 40
  store double %136, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  br label %140

138:                                              ; preds = %130, %125
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %213

140:                                              ; preds = %134, %122
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull %50)
          to label %142 unwind label %.thread

.thread:                                          ; preds = %140
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

142:                                              ; preds = %140
  %143 = getelementptr inbounds i8, ptr %13, i64 8
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %143, ptr noundef nonnull %71)
          to label %144 unwind label %.loopexit.loopexit92

144:                                              ; preds = %142
  %145 = getelementptr inbounds i8, ptr %9, i64 88
  %146 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEaSESt16initializer_listIS3_E(ptr noundef nonnull align 8 dereferenceable(24) %145, ptr nonnull %13, i64 2)
          to label %147 unwind label %.loopexit.loopexit

147:                                              ; preds = %144
  %148 = getelementptr inbounds i8, ptr %13, i64 8
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %148) #11
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  %149 = invoke noundef ptr @_ZN3JPH28MotorcycleControllerSettingsnwEm(i64 noundef 200)
          to label %150 unwind label %201

150:                                              ; preds = %147
  invoke void @_ZN3JPH28MotorcycleControllerSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(196) %149)
          to label %151 unwind label %203

151:                                              ; preds = %150
  %152 = getelementptr inbounds i8, ptr %149, i64 16
  store <2 x float> <float 1.500000e+02, float 1.000000e+03>, ptr %152, align 8, !tbaa !61
  %153 = getelementptr inbounds i8, ptr %149, i64 24
  store float 1.000000e+04, ptr %153, align 8, !tbaa !68
  %154 = getelementptr inbounds i8, ptr %149, i64 132
  store <2 x float> <float 8.000000e+03, float 2.000000e+03>, ptr %154, align 4, !tbaa !61
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(24) @constinit, i64 24, i1 false), !tbaa.struct !77
  %155 = getelementptr inbounds i8, ptr %149, i64 72
  %156 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEaSESt16initializer_listIfE(ptr noundef nonnull align 8 dereferenceable(24) %155, ptr nonnull %14, i64 6)
          to label %157 unwind label %205

157:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #11
  store float -4.000000e+00, ptr %15, align 4, !tbaa !61
  %158 = getelementptr inbounds i8, ptr %149, i64 96
  %159 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEaSESt16initializer_listIfE(ptr noundef nonnull align 8 dereferenceable(24) %158, ptr nonnull %15, i64 1)
          to label %160 unwind label %207

160:                                              ; preds = %157
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  %161 = getelementptr inbounds i8, ptr %149, i64 140
  store float 2.000000e+00, ptr %161, align 4, !tbaa !78
  %162 = getelementptr inbounds i8, ptr %9, i64 136
  %163 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_25VehicleControllerSettingsEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %162, ptr noundef nonnull %149)
          to label %164 unwind label %201

164:                                              ; preds = %160
  %165 = getelementptr inbounds i8, ptr %149, i64 144
  invoke void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %165, i64 noundef 1)
          to label %166 unwind label %201

166:                                              ; preds = %164
  %167 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %165, i64 noundef 0)
          to label %168 unwind label %201

168:                                              ; preds = %166
  store i32 -1, ptr %167, align 4, !tbaa !79
  %169 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %165, i64 noundef 0)
          to label %170 unwind label %201

170:                                              ; preds = %168
  %171 = getelementptr inbounds i8, ptr %169, i64 4
  store i32 1, ptr %171, align 4, !tbaa !81
  %172 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %165, i64 noundef 0)
          to label %173 unwind label %201

173:                                              ; preds = %170
  %174 = getelementptr inbounds i8, ptr %172, i64 8
  store float 0x40134CCCC0000000, ptr %174, align 4, !tbaa !82
  %175 = invoke noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef 416)
          to label %176 unwind label %201

176:                                              ; preds = %173
  %177 = load ptr, ptr %42, align 8, !tbaa !36
  invoke void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408) %175, ptr noundef nonnull align 16 dereferenceable(122) %177, ptr noundef nonnull align 16 dereferenceable(144) %9)
          to label %178 unwind label %209

178:                                              ; preds = %176
  %179 = getelementptr inbounds i8, ptr %0, i64 144
  %180 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_17VehicleConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %179, ptr noundef nonnull %175)
          to label %181 unwind label %201

181:                                              ; preds = %178
  %182 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %179)
  %183 = invoke noundef ptr @_ZN3JPH34VehicleCollisionTesterCastCylindernwEm(i64 noundef 48)
          to label %184 unwind label %201

184:                                              ; preds = %181
  invoke void @_ZN3JPH34VehicleCollisionTesterCastCylinderC2Etf(ptr noundef nonnull align 8 dereferenceable(48) %183, i16 noundef zeroext 1, float noundef 1.000000e+00)
          to label %185 unwind label %211

185:                                              ; preds = %184
  invoke void @_ZN3JPH17VehicleConstraint25SetVehicleCollisionTesterEPKNS_22VehicleCollisionTesterE(ptr noundef nonnull align 16 dereferenceable(408) %182, ptr noundef nonnull %183)
          to label %186 unwind label %201

186:                                              ; preds = %185
  %187 = getelementptr inbounds i8, ptr %0, i64 16
  %188 = load ptr, ptr %187, align 16, !tbaa !83
  %189 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %179)
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %188, ptr noundef %189)
          to label %190 unwind label %201

190:                                              ; preds = %186
  %191 = load ptr, ptr %187, align 16, !tbaa !83
  %192 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %179)
  %193 = icmp eq ptr %192, null
  %194 = getelementptr inbounds i8, ptr %192, i64 32
  %195 = select i1 %193, ptr null, ptr %194
  invoke void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172) %191, ptr noundef %195)
          to label %196 unwind label %201

196:                                              ; preds = %190
  invoke void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240) %0)
          to label %197 unwind label %201

197:                                              ; preds = %196
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %9) #11
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %9) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #11
  ret void

.loopexit.loopexit92:                             ; preds = %142
  %198 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #11
  br label %.loopexit

.loopexit.loopexit:                               ; preds = %144
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = getelementptr inbounds i8, ptr %13, i64 8
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %200) #11
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #11
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit92, %.loopexit.loopexit, %.thread
  %.pn80 = phi { ptr, i32 } [ %141, %.thread ], [ %199, %.loopexit.loopexit ], [ %198, %.loopexit.loopexit92 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  br label %213

201:                                              ; preds = %196, %190, %186, %185, %181, %178, %173, %170, %168, %166, %164, %160, %147
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %213

203:                                              ; preds = %150
  %204 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH28MotorcycleControllerSettingsdlEPv(ptr noundef %149) #11
  br label %213

205:                                              ; preds = %151
  %206 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #11
  br label %213

207:                                              ; preds = %157
  %208 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  br label %213

209:                                              ; preds = %176
  %210 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH10ConstraintdlEPv(ptr noundef %175) #11
  br label %213

211:                                              ; preds = %184
  %212 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH34VehicleCollisionTesterCastCylinderdlEPv(ptr noundef %183) #11
  br label %213

213:                                              ; preds = %116, %118, %120, %138, %.loopexit, %211, %209, %207, %205, %203, %201, %114, %112, %110, %108
  %.pn82.pn.pn = phi { ptr, i32 } [ %115, %114 ], [ %113, %112 ], [ %111, %110 ], [ %109, %108 ], [ %.pn80, %.loopexit ], [ %139, %138 ], [ %121, %120 ], [ %119, %118 ], [ %117, %116 ], [ %202, %201 ], [ %212, %211 ], [ %210, %209 ], [ %208, %207 ], [ %206, %205 ], [ %204, %203 ]
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %9) #11
  br label %214

214:                                              ; preds = %213, %106
  %.pn82.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn, %213 ], [ %107, %106 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %9) #11
  br label %215

215:                                              ; preds = %214, %104
  %.pn82.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn, %214 ], [ %105, %104 ]
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #11
  br label %216

216:                                              ; preds = %215, %102
  %.pn82.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn, %215 ], [ %103, %102 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #11
  br label %217

217:                                              ; preds = %216, %101
  %.pn82.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn, %216 ], [ %.pn.pn, %101 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #11
  resume { ptr, i32 } %.pn82.pn.pn.pn.pn.pn.pn
}

declare void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136)) unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef) local_unnamed_addr #4

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #6 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH31OffsetCenterOfMassShapeSettingsC2ENS_4Vec3EPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(96), double, double, ptr noundef) unnamed_addr #2 align 2

declare void @_ZNK3JPH31OffsetCenterOfMassShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 16 dereferenceable(96)) unnamed_addr #3

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #2 align 2

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #3

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH25VehicleConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef) local_unnamed_addr #6 align 2

declare void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216)) unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef) local_unnamed_addr #4 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3TanEf(float noundef) local_unnamed_addr #6

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16), float noundef) local_unnamed_addr #10 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH28MotorcycleControllerSettingsnwEm(i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28MotorcycleControllerSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(196)) unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH28MotorcycleControllerSettingsdlEPv(ptr noundef) local_unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef) local_unnamed_addr #6 align 2

declare void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10ConstraintdlEPv(ptr noundef) local_unnamed_addr #4 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH34VehicleCollisionTesterCastCylindernwEm(i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH34VehicleCollisionTesterCastCylinderC2Etf(ptr noundef nonnull align 8 dereferenceable(48), i16 noundef zeroext, float noundef) unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH34VehicleCollisionTesterCastCylinderdlEPv(ptr noundef) local_unnamed_addr #4 align 2

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

declare void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172), ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240)) local_unnamed_addr #2 align 2

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

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

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

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !24, i64 144}
!9 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !10, i64 0, !11, i64 16, !10, i64 32, !10, i64 48, !13, i64 64, !14, i64 72, !15, i64 80, !19, i64 96, !20, i64 97, !21, i64 98, !21, i64 99, !21, i64 100, !21, i64 101, !21, i64 102, !22, i64 103, !21, i64 104, !21, i64 105, !23, i64 108, !23, i64 112, !23, i64 116, !23, i64 120, !23, i64 124, !23, i64 128, !23, i64 132, !18, i64 136, !18, i64 140, !24, i64 144, !23, i64 148, !25, i64 160, !27, i64 240, !28, i64 248}
!10 = !{!"_ZTSN3JPH4Vec3E", !6, i64 0}
!11 = !{!"_ZTSN3JPH4QuatE", !12, i64 0}
!12 = !{!"_ZTSN3JPH4Vec4E", !6, i64 0}
!13 = !{!"long", !6, i64 0}
!14 = !{!"short", !6, i64 0}
!15 = !{!"_ZTSN3JPH14CollisionGroupE", !16, i64 0, !18, i64 8, !18, i64 12}
!16 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !17, i64 0}
!17 = !{!"any pointer", !6, i64 0}
!18 = !{!"int", !6, i64 0}
!19 = !{!"_ZTSN3JPH11EMotionTypeE", !6, i64 0}
!20 = !{!"_ZTSN3JPH12EAllowedDOFsE", !6, i64 0}
!21 = !{!"bool", !6, i64 0}
!22 = !{!"_ZTSN3JPH14EMotionQualityE", !6, i64 0}
!23 = !{!"float", !6, i64 0}
!24 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !6, i64 0}
!25 = !{!"_ZTSN3JPH14MassPropertiesE", !23, i64 0, !26, i64 16}
!26 = !{!"_ZTSN3JPH5Mat44E", !6, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !17, i64 0}
!28 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !17, i64 0}
!29 = !{!9, !23, i64 160}
!30 = !{!31, !17, i64 24}
!31 = !{!"_ZTS4Test", !17, i64 8, !17, i64 16, !17, i64 24, !17, i64 32, !17, i64 40, !21, i64 48, !32, i64 56}
!32 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !33, i64 0}
!33 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !17, i64 0, !13, i64 8, !34, i64 16, !13, i64 24, !35, i64 32, !17, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !17, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !23, i64 0, !13, i64 8}
!36 = !{!37, !17, i64 136}
!37 = !{!"_ZTS14MotorcycleTest", !38, i64 0, !17, i64 136, !40, i64 144, !26, i64 160, !23, i64 224, !23, i64 228, !23, i64 232, !23, i64 236}
!38 = !{!"_ZTS11VehicleTest", !31, i64 0, !39, i64 112}
!39 = !{!"_ZTSN3JPH5ArrayIN11VehicleTest4LineENS_12STLAllocatorIS2_EEEE", !13, i64 0, !13, i64 8, !17, i64 16}
!40 = !{!"_ZTSN3JPH3RefINS_17VehicleConstraintEEE", !17, i64 0}
!41 = !{!42, !23, i64 28}
!42 = !{!"_ZTSN3JPH18ConstraintSettingsE", !43, i64 0, !44, i64 8, !21, i64 12, !18, i64 16, !18, i64 20, !18, i64 24, !23, i64 28, !13, i64 32}
!43 = !{!"_ZTSN3JPH18SerializableObjectE"}
!44 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !45, i64 0}
!45 = !{!"_ZTSSt6atomicIjE", !46, i64 0}
!46 = !{!"_ZTSSt13__atomic_baseIjE", !18, i64 0}
!47 = !{!48, !23, i64 80}
!48 = !{!"_ZTSN3JPH25VehicleConstraintSettingsE", !42, i64 0, !10, i64 48, !10, i64 64, !23, i64 80, !49, i64 88, !50, i64 112, !51, i64 136}
!49 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEE", !13, i64 0, !13, i64 8, !17, i64 16}
!50 = !{!"_ZTSN3JPH5ArrayINS_18VehicleAntiRollBarENS_12STLAllocatorIS1_EEEE", !13, i64 0, !13, i64 8, !17, i64 16}
!51 = !{!"_ZTSN3JPH3RefINS_25VehicleControllerSettingsEEE", !17, i64 0}
!52 = !{i64 0, i64 16, !5}
!53 = !{!54, !23, i64 156}
!54 = !{!"_ZTSN3JPH15WheelSettingsWVE", !55, i64 0, !23, i64 148, !23, i64 152, !23, i64 156, !59, i64 160, !59, i64 184, !23, i64 208, !23, i64 212}
!55 = !{!"_ZTSN3JPH13WheelSettingsE", !43, i64 0, !56, i64 8, !10, i64 16, !10, i64 32, !10, i64 48, !10, i64 64, !10, i64 80, !10, i64 96, !23, i64 112, !23, i64 116, !23, i64 120, !57, i64 124, !23, i64 136, !23, i64 140, !21, i64 144}
!56 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !45, i64 0}
!57 = !{!"_ZTSN3JPH14SpringSettingsE", !58, i64 0, !6, i64 4, !23, i64 8}
!58 = !{!"_ZTSN3JPH11ESpringModeE", !6, i64 0}
!59 = !{!"_ZTSN3JPH11LinearCurveE", !60, i64 0}
!60 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !13, i64 0, !13, i64 8, !17, i64 16}
!61 = !{!23, !23, i64 0}
!62 = !{!54, !23, i64 208}
!63 = !{!21, !21, i64 0}
!64 = !{i8 0, i8 2}
!65 = !{}
!66 = !{!55, !21, i64 144}
!67 = !{!55, !23, i64 112}
!68 = !{!69, !23, i64 24}
!69 = !{!"_ZTSN3JPH32WheeledVehicleControllerSettingsE", !70, i64 0, !72, i64 16, !73, i64 64, !76, i64 144, !23, i64 168}
!70 = !{!"_ZTSN3JPH25VehicleControllerSettingsE", !43, i64 0, !71, i64 8}
!71 = !{!"_ZTSN3JPH9RefTargetINS_25VehicleControllerSettingsEEE", !45, i64 0}
!72 = !{!"_ZTSN3JPH21VehicleEngineSettingsE", !23, i64 0, !23, i64 4, !23, i64 8, !59, i64 16, !23, i64 40, !23, i64 44}
!73 = !{!"_ZTSN3JPH27VehicleTransmissionSettingsE", !74, i64 0, !75, i64 8, !75, i64 32, !23, i64 56, !23, i64 60, !23, i64 64, !23, i64 68, !23, i64 72, !23, i64 76}
!74 = !{!"_ZTSN3JPH17ETransmissionModeE", !6, i64 0}
!75 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !13, i64 0, !13, i64 8, !17, i64 16}
!76 = !{!"_ZTSN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEE", !13, i64 0, !13, i64 8, !17, i64 16}
!77 = !{i64 0, i64 24, !5}
!78 = !{!69, !23, i64 140}
!79 = !{!80, !18, i64 0}
!80 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !18, i64 0, !18, i64 4, !23, i64 8, !23, i64 12, !23, i64 16, !23, i64 20}
!81 = !{!80, !18, i64 4}
!82 = !{!80, !23, i64 8}
!83 = !{!31, !17, i64 16}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopSimplifyPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass