; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Constraints (RackAndPinionConstraintTest)

; 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::Body" = type <{ %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::AABox", %"class.JPH::RefConst", ptr, i64, %"class.JPH::CollisionGroup", float, float, %"class.JPH::BodyID", i16, i8, %"class.JPH::BroadPhaseLayer", i8, %"struct.std::atomic", [6 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i8 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::STLAllocator" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.12", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.8, i8, [7 x i8] }>
%union.anon.8 = 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.11 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.11 = type { i64, [8 x i8] }
%"class.JPH::RefConst.12" = type { ptr }
%"class.JPH::CylinderShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.13" }
%"class.JPH::Array.13" = type { i64, i64, 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.16", %"class.JPH::RefConst" }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.16" = type { ptr }
%"class.JPH::BoxShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::HingeConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.17", i8, i32, i32, i32, float, i64 }
%"class.JPH::RefTarget.17" = type { %"struct.std::atomic.6" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.18, float }
%union.anon.18 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"class.JPH::SliderConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, i8, [3 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"class.JPH::Ref.36" = type { ptr }
%"class.JPH::RackAndPinionConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%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 }

@_ZN3JPH4Body13sFixedToWorldE = external global %"class.JPH::Body", align 16

; 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: mustprogress uwtable
define dso_local void @_ZN27RackAndPinionConstraintTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca i32, align 4
  %6 = alloca float, align 4
  %7 = alloca float, align 4
  %8 = alloca float, align 4
  %9 = alloca i32, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca %"class.JPH::Array", align 8
  %14 = alloca %"class.std::initializer_list", align 8
  %15 = alloca [8 x %"class.JPH::Vec3"], align 16
  %16 = alloca %"class.JPH::STLAllocator", align 1
  %17 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca %"class.JPH::CylinderShapeSettings", align 8
  %21 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Quat", align 16
  %24 = alloca i32, align 4
  %25 = alloca %"class.JPH::Quat", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Quat", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Quat", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca ptr, align 8
  %34 = alloca %"class.JPH::BodyCreationSettings", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Quat", align 16
  %37 = alloca %"class.JPH::BoxShapeSettings", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Quat", align 16
  %42 = alloca i32, align 4
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Quat", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Quat", align 16
  %48 = alloca %"class.JPH::Quat", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Quat", align 16
  %51 = alloca ptr, align 8
  %52 = alloca %"class.JPH::BodyCreationSettings", align 16
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Quat", align 16
  %55 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca ptr, align 8
  %59 = alloca %"class.JPH::SliderConstraintSettings", align 16
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca ptr, align 8
  %63 = alloca %"class.JPH::Ref.36", align 8
  %64 = alloca %"class.JPH::CollisionGroup", align 8
  %65 = alloca %"class.JPH::CollisionGroup", align 8
  %66 = alloca %"class.JPH::RackAndPinionConstraintSettings", align 16
  %67 = alloca ptr, align 8
  %68 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %69 = load ptr, ptr %2, align 8
  %70 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %69, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #10
  store float 5.000000e-01, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #10
  store float 0x3FA99999A0000000, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #10
  store i32 100, ptr %5, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store float 1.000000e+01, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  store float 0x3FB99999A0000000, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store float 0x3FA99999A0000000, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  store i32 318, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  store float 0x3F847AE140000000, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #10
  store float 0x3F747AE140000000, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  store float 0x3F947AE140000000, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #10
  call void @llvm.lifetime.start.p0(i64 128, ptr %15) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0x3F847AE140000000)
  %71 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 1
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %71, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0x3F847AE140000000)
  %72 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 2
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %72, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0xBF847AE140000000)
  %73 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 3
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %73, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0xBF847AE140000000)
  %74 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 4
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %74, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0x3F747AE140000000)
  %75 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 5
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %75, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0x3F747AE140000000)
  %76 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 6
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %76, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0xBF747AE140000000)
  %77 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i64 7
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %77, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0xBF747AE140000000)
  %78 = getelementptr inbounds %"class.std::initializer_list", ptr %14, i32 0, i32 0
  store ptr %15, ptr %78, align 8, !tbaa !13
  %79 = getelementptr inbounds %"class.std::initializer_list", ptr %14, i32 0, i32 1
  store i64 8, ptr %79, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #10
  %80 = getelementptr inbounds { ptr, i64 }, ptr %14, i32 0, i32 0
  %81 = load ptr, ptr %80, align 8
  %82 = getelementptr inbounds { ptr, i64 }, ptr %14, i32 0, i32 1
  %83 = load i64, ptr %82, align 8
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr %81, i64 %83, ptr noundef nonnull align 1 dereferenceable(1) %16)
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr %15) #10
  call void @llvm.lifetime.start.p0(i64 120, ptr %17) #10
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %17, ptr noundef nonnull align 8 dereferenceable(24) %13, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %84 unwind label %123

84:                                               ; preds = %1
  %85 = getelementptr inbounds i8, ptr %17, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %85)
          to label %86 unwind label %127

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 88, ptr %20) #10
  invoke void @_ZN3JPH21CylinderShapeSettingsC2EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %20, float noundef 0x3FA99999A0000000, float noundef 5.000000e-01, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %87 unwind label %131

87:                                               ; preds = %86
  %88 = getelementptr inbounds i8, ptr %20, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %88)
          to label %89 unwind label %135

89:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 88, ptr %21) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21)
          to label %90 unwind label %139

90:                                               ; preds = %89
  %91 = getelementptr inbounds i8, ptr %21, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %91)
          to label %92 unwind label %143

92:                                               ; preds = %90
  %93 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %94 unwind label %143

94:                                               ; preds = %92
  %95 = getelementptr inbounds %"class.JPH::Vec3", ptr %22, i32 0, i32 0
  %96 = getelementptr inbounds %union.anon, ptr %95, i32 0, i32 0
  %97 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 0
  %98 = extractvalue { double, double } %93, 0
  store double %98, ptr %97, align 16
  %99 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 1
  %100 = extractvalue { double, double } %93, 1
  store double %100, ptr %99, align 8
  %101 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %102 unwind label %143

102:                                              ; preds = %94
  %103 = getelementptr inbounds %"class.JPH::Quat", ptr %23, i32 0, i32 0
  %104 = getelementptr inbounds %"class.JPH::Vec4", ptr %103, i32 0, i32 0
  %105 = getelementptr inbounds %union.anon.4, ptr %104, i32 0, i32 0
  %106 = getelementptr inbounds { double, double }, ptr %105, i32 0, i32 0
  %107 = extractvalue { double, double } %101, 0
  store double %107, ptr %106, align 16
  %108 = getelementptr inbounds { double, double }, ptr %105, i32 0, i32 1
  %109 = extractvalue { double, double } %101, 1
  store double %109, ptr %108, align 8
  %110 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %111 = load double, ptr %110, align 16
  %112 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %113 = load double, ptr %112, align 8
  %114 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %115 = load double, ptr %114, align 16
  %116 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %117 = load double, ptr %116, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %21, double %111, double %113, double %115, double %117, ptr noundef %20, i32 noundef 0)
          to label %118 unwind label %143

118:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  store i32 0, ptr %24, align 4, !tbaa !11
  br label %119

119:                                              ; preds = %195, %118
  %120 = load i32, ptr %24, align 4, !tbaa !11
  %121 = icmp slt i32 %120, 100
  br i1 %121, label %147, label %122

122:                                              ; preds = %119
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %202

123:                                              ; preds = %1
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %18, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %19, align 4
  br label %646

127:                                              ; preds = %84
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %18, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %19, align 4
  br label %645

131:                                              ; preds = %86
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %18, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %19, align 4
  br label %644

135:                                              ; preds = %87
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %18, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %19, align 4
  br label %643

139:                                              ; preds = %89
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %18, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %19, align 4
  br label %642

143:                                              ; preds = %102, %94, %92, %90
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %18, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %19, align 4
  br label %641

147:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #10
  %148 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %149 unwind label %198

149:                                              ; preds = %147
  %150 = getelementptr inbounds %"class.JPH::Vec3", ptr %26, i32 0, i32 0
  %151 = getelementptr inbounds %union.anon, ptr %150, i32 0, i32 0
  %152 = getelementptr inbounds { double, double }, ptr %151, i32 0, i32 0
  %153 = extractvalue { double, double } %148, 0
  store double %153, ptr %152, align 16
  %154 = getelementptr inbounds { double, double }, ptr %151, i32 0, i32 1
  %155 = extractvalue { double, double } %148, 1
  store double %155, ptr %154, align 8
  %156 = load i32, ptr %24, align 4, !tbaa !11
  %157 = sitofp i32 %156 to float
  %158 = fmul float 0x401921FB60000000, %157
  %159 = fdiv float %158, 1.000000e+02
  %160 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %161 = load double, ptr %160, align 16
  %162 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %163 = load double, ptr %162, align 8
  %164 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %161, double %163, float noundef %159)
          to label %165 unwind label %198

165:                                              ; preds = %149
  %166 = getelementptr inbounds %"class.JPH::Quat", ptr %25, i32 0, i32 0
  %167 = getelementptr inbounds %"class.JPH::Vec4", ptr %166, i32 0, i32 0
  %168 = getelementptr inbounds %union.anon.4, ptr %167, i32 0, i32 0
  %169 = getelementptr inbounds { double, double }, ptr %168, i32 0, i32 0
  %170 = extractvalue { double, double } %164, 0
  store double %170, ptr %169, align 16
  %171 = getelementptr inbounds { double, double }, ptr %168, i32 0, i32 1
  %172 = extractvalue { double, double } %164, 1
  store double %172, ptr %171, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 5.000000e-01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %173 unwind label %198

173:                                              ; preds = %165
  %174 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %175 = load double, ptr %174, align 16
  %176 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %177 = load double, ptr %176, align 8
  %178 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %25, double %175, double %177)
          to label %179 unwind label %198

179:                                              ; preds = %173
  %180 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %181 = getelementptr inbounds %union.anon, ptr %180, i32 0, i32 0
  %182 = getelementptr inbounds { double, double }, ptr %181, i32 0, i32 0
  %183 = extractvalue { double, double } %178, 0
  store double %183, ptr %182, align 16
  %184 = getelementptr inbounds { double, double }, ptr %181, i32 0, i32 1
  %185 = extractvalue { double, double } %178, 1
  store double %185, ptr %184, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %29, ptr align 16 %25, i64 16, i1 false), !tbaa.struct !17
  %186 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %187 = load double, ptr %186, align 16
  %188 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %189 = load double, ptr %188, align 8
  %190 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %191 = load double, ptr %190, align 16
  %192 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %193 = load double, ptr %192, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %21, double %187, double %189, double %191, double %193, ptr noundef %17, i32 noundef 0)
          to label %194 unwind label %198

194:                                              ; preds = %179
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  br label %195

195:                                              ; preds = %194
  %196 = load i32, ptr %24, align 4, !tbaa !11
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %24, align 4, !tbaa !11
  br label %119, !llvm.loop !19

198:                                              ; preds = %179, %173, %165, %149, %147
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %18, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %641

202:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %30, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
          to label %203 unwind label %285

203:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #10
  %204 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %205 unwind label %289

205:                                              ; preds = %203
  %206 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %207 = getelementptr inbounds %union.anon, ptr %206, i32 0, i32 0
  %208 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 0
  %209 = extractvalue { double, double } %204, 0
  store double %209, ptr %208, align 16
  %210 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 1
  %211 = extractvalue { double, double } %204, 1
  store double %211, ptr %210, align 8
  %212 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %213 = load double, ptr %212, align 16
  %214 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %215 = load double, ptr %214, align 8
  %216 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %213, double %215, float noundef 0x3FF921FB60000000)
          to label %217 unwind label %289

217:                                              ; preds = %205
  %218 = getelementptr inbounds %"class.JPH::Quat", ptr %31, i32 0, i32 0
  %219 = getelementptr inbounds %"class.JPH::Vec4", ptr %218, i32 0, i32 0
  %220 = getelementptr inbounds %union.anon.4, ptr %219, i32 0, i32 0
  %221 = getelementptr inbounds { double, double }, ptr %220, i32 0, i32 0
  %222 = extractvalue { double, double } %216, 0
  store double %222, ptr %221, align 16
  %223 = getelementptr inbounds { double, double }, ptr %220, i32 0, i32 1
  %224 = extractvalue { double, double } %216, 1
  store double %224, ptr %223, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %225 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 3
  %226 = load ptr, ptr %225, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 256, ptr %34) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %35, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %36, ptr align 16 %31, i64 16, i1 false), !tbaa.struct !17
  %227 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %228 = load double, ptr %227, align 16
  %229 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %230 = load double, ptr %229, align 8
  %231 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %232 = load double, ptr %231, align 16
  %233 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %234 = load double, ptr %233, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %34, ptr noundef %21, double %228, double %230, double %232, double %234, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %235 unwind label %293

235:                                              ; preds = %217
  %236 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %226, ptr noundef nonnull align 16 dereferenceable(256) %34)
          to label %237 unwind label %297

237:                                              ; preds = %235
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %34) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %34) #10
  store ptr %236, ptr %33, align 8, !tbaa !5
  %238 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 3
  %239 = load ptr, ptr %238, align 8, !tbaa !21
  %240 = load ptr, ptr %33, align 8, !tbaa !5
  %241 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %240)
          to label %242 unwind label %302

242:                                              ; preds = %237
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %239, ptr noundef nonnull align 4 dereferenceable(4) %241, i32 noundef 0)
          to label %243 unwind label %302

243:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 112, ptr %37) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0x3FB99999A0000000, float noundef 0x3FA99999A0000000, float noundef 5.000000e+00)
          to label %244 unwind label %306

244:                                              ; preds = %243
  %245 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %246 = load double, ptr %245, align 16
  %247 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %248 = load double, ptr %247, align 8
  invoke void @_ZN3JPH16BoxShapeSettingsC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(112) %37, double %246, double %248, float noundef 0.000000e+00, ptr noundef null)
          to label %249 unwind label %306

249:                                              ; preds = %244
  %250 = getelementptr inbounds i8, ptr %37, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %250)
          to label %251 unwind label %310

251:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 88, ptr %39) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %39)
          to label %252 unwind label %314

252:                                              ; preds = %251
  %253 = getelementptr inbounds i8, ptr %39, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %253)
          to label %254 unwind label %318

254:                                              ; preds = %252
  %255 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %256 unwind label %318

256:                                              ; preds = %254
  %257 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %258 = getelementptr inbounds %union.anon, ptr %257, i32 0, i32 0
  %259 = getelementptr inbounds { double, double }, ptr %258, i32 0, i32 0
  %260 = extractvalue { double, double } %255, 0
  store double %260, ptr %259, align 16
  %261 = getelementptr inbounds { double, double }, ptr %258, i32 0, i32 1
  %262 = extractvalue { double, double } %255, 1
  store double %262, ptr %261, align 8
  %263 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %264 unwind label %318

264:                                              ; preds = %256
  %265 = getelementptr inbounds %"class.JPH::Quat", ptr %41, i32 0, i32 0
  %266 = getelementptr inbounds %"class.JPH::Vec4", ptr %265, i32 0, i32 0
  %267 = getelementptr inbounds %union.anon.4, ptr %266, i32 0, i32 0
  %268 = getelementptr inbounds { double, double }, ptr %267, i32 0, i32 0
  %269 = extractvalue { double, double } %263, 0
  store double %269, ptr %268, align 16
  %270 = getelementptr inbounds { double, double }, ptr %267, i32 0, i32 1
  %271 = extractvalue { double, double } %263, 1
  store double %271, ptr %270, align 8
  %272 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %273 = load double, ptr %272, align 16
  %274 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %275 = load double, ptr %274, align 8
  %276 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %277 = load double, ptr %276, align 16
  %278 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %279 = load double, ptr %278, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %39, double %273, double %275, double %277, double %279, ptr noundef %37, i32 noundef 0)
          to label %280 unwind label %318

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

281:                                              ; preds = %348, %280
  %282 = load i32, ptr %42, align 4, !tbaa !11
  %283 = icmp slt i32 %282, 318
  br i1 %283, label %322, label %284

284:                                              ; preds = %281
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %355

285:                                              ; preds = %202
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %18, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %19, align 4
  br label %640

289:                                              ; preds = %205, %203
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %18, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %19, align 4
  br label %639

293:                                              ; preds = %217
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %18, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %19, align 4
  br label %301

297:                                              ; preds = %235
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %18, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %19, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %34) #10
  br label %301

301:                                              ; preds = %297, %293
  call void @llvm.lifetime.end.p0(i64 256, ptr %34) #10
  br label %638

302:                                              ; preds = %242, %237
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %18, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %19, align 4
  br label %638

306:                                              ; preds = %244, %243
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %18, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %19, align 4
  br label %637

310:                                              ; preds = %249
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %18, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %19, align 4
  br label %636

314:                                              ; preds = %251
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %18, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %19, align 4
  br label %635

318:                                              ; preds = %264, %256, %254, %252
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %18, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %19, align 4
  br label %634

322:                                              ; preds = %281
  %323 = load i32, ptr %42, align 4, !tbaa !11
  %324 = sitofp i32 %323 to float
  %325 = fadd float %324, 5.000000e-01
  %326 = fmul float %325, 1.000000e+01
  %327 = fdiv float %326, 3.180000e+02
  %328 = fadd float -5.000000e+00, %327
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %43, float noundef 0x3FB99999A0000000, float noundef 0.000000e+00, float noundef %328)
          to label %329 unwind label %351

329:                                              ; preds = %322
  %330 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %331 unwind label %351

331:                                              ; preds = %329
  %332 = getelementptr inbounds %"class.JPH::Quat", ptr %44, i32 0, i32 0
  %333 = getelementptr inbounds %"class.JPH::Vec4", ptr %332, i32 0, i32 0
  %334 = getelementptr inbounds %union.anon.4, ptr %333, i32 0, i32 0
  %335 = getelementptr inbounds { double, double }, ptr %334, i32 0, i32 0
  %336 = extractvalue { double, double } %330, 0
  store double %336, ptr %335, align 16
  %337 = getelementptr inbounds { double, double }, ptr %334, i32 0, i32 1
  %338 = extractvalue { double, double } %330, 1
  store double %338, ptr %337, align 8
  %339 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %340 = load double, ptr %339, align 16
  %341 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %342 = load double, ptr %341, align 8
  %343 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %344 = load double, ptr %343, align 16
  %345 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %346 = load double, ptr %345, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %39, double %340, double %342, double %344, double %346, ptr noundef %17, i32 noundef 0)
          to label %347 unwind label %351

347:                                              ; preds = %331
  br label %348

348:                                              ; preds = %347
  %349 = load i32, ptr %42, align 4, !tbaa !11
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %42, align 4, !tbaa !11
  br label %281, !llvm.loop !28

351:                                              ; preds = %331, %329, %322
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %18, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %634

355:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %46, float noundef 0.000000e+00, float noundef 0x3FE3D70A40000000, float noundef 0.000000e+00)
          to label %356 unwind label %526

356:                                              ; preds = %355
  %357 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %358 = load double, ptr %357, align 16
  %359 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %360 = load double, ptr %359, align 8
  %361 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %358, double %360)
          to label %362 unwind label %526

362:                                              ; preds = %356
  %363 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %364 = getelementptr inbounds %union.anon, ptr %363, i32 0, i32 0
  %365 = getelementptr inbounds { double, double }, ptr %364, i32 0, i32 0
  %366 = extractvalue { double, double } %361, 0
  store double %366, ptr %365, align 16
  %367 = getelementptr inbounds { double, double }, ptr %364, i32 0, i32 1
  %368 = extractvalue { double, double } %361, 1
  store double %368, ptr %367, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #10
  %369 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %370 unwind label %530

370:                                              ; preds = %362
  %371 = getelementptr inbounds %"class.JPH::Vec3", ptr %49, i32 0, i32 0
  %372 = getelementptr inbounds %union.anon, ptr %371, i32 0, i32 0
  %373 = getelementptr inbounds { double, double }, ptr %372, i32 0, i32 0
  %374 = extractvalue { double, double } %369, 0
  store double %374, ptr %373, align 16
  %375 = getelementptr inbounds { double, double }, ptr %372, i32 0, i32 1
  %376 = extractvalue { double, double } %369, 1
  store double %376, ptr %375, align 8
  %377 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %378 = load double, ptr %377, align 16
  %379 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %380 = load double, ptr %379, align 8
  %381 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %378, double %380, float noundef 0x3FF921FB60000000)
          to label %382 unwind label %530

382:                                              ; preds = %370
  %383 = getelementptr inbounds %"class.JPH::Quat", ptr %48, i32 0, i32 0
  %384 = getelementptr inbounds %"class.JPH::Vec4", ptr %383, i32 0, i32 0
  %385 = getelementptr inbounds %union.anon.4, ptr %384, i32 0, i32 0
  %386 = getelementptr inbounds { double, double }, ptr %385, i32 0, i32 0
  %387 = extractvalue { double, double } %381, 0
  store double %387, ptr %386, align 16
  %388 = getelementptr inbounds { double, double }, ptr %385, i32 0, i32 1
  %389 = extractvalue { double, double } %381, 1
  store double %389, ptr %388, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 %31, i64 16, i1 false), !tbaa.struct !17
  %390 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %391 = load double, ptr %390, align 16
  %392 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %393 = load double, ptr %392, align 8
  %394 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %391, double %393)
          to label %395 unwind label %530

395:                                              ; preds = %382
  %396 = getelementptr inbounds %"class.JPH::Quat", ptr %47, i32 0, i32 0
  %397 = getelementptr inbounds %"class.JPH::Vec4", ptr %396, i32 0, i32 0
  %398 = getelementptr inbounds %union.anon.4, ptr %397, i32 0, i32 0
  %399 = getelementptr inbounds { double, double }, ptr %398, i32 0, i32 0
  %400 = extractvalue { double, double } %394, 0
  store double %400, ptr %399, align 16
  %401 = getelementptr inbounds { double, double }, ptr %398, i32 0, i32 1
  %402 = extractvalue { double, double } %394, 1
  store double %402, ptr %401, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #10
  %403 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 3
  %404 = load ptr, ptr %403, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 256, ptr %52) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %53, ptr align 16 %45, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %47, i64 16, i1 false), !tbaa.struct !17
  %405 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %406 = load double, ptr %405, align 16
  %407 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %408 = load double, ptr %407, align 8
  %409 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %410 = load double, ptr %409, align 16
  %411 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %412 = load double, ptr %411, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %52, ptr noundef %39, double %406, double %408, double %410, double %412, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %413 unwind label %534

413:                                              ; preds = %395
  %414 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %404, ptr noundef nonnull align 16 dereferenceable(256) %52)
          to label %415 unwind label %538

415:                                              ; preds = %413
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %52) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %52) #10
  store ptr %414, ptr %51, align 8, !tbaa !5
  %416 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 3
  %417 = load ptr, ptr %416, align 8, !tbaa !21
  %418 = load ptr, ptr %51, align 8, !tbaa !5
  %419 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %418)
          to label %420 unwind label %543

420:                                              ; preds = %415
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %417, ptr noundef nonnull align 4 dereferenceable(4) %419, i32 noundef 0)
          to label %421 unwind label %543

421:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 208, ptr %55) #10
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %55)
          to label %422 unwind label %547

422:                                              ; preds = %421
  %423 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %423, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !17
  %424 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %424, ptr align 16 %423, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #10
  %425 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %426 unwind label %551

426:                                              ; preds = %422
  %427 = getelementptr inbounds %"class.JPH::Vec3", ptr %56, i32 0, i32 0
  %428 = getelementptr inbounds %union.anon, ptr %427, i32 0, i32 0
  %429 = getelementptr inbounds { double, double }, ptr %428, i32 0, i32 0
  %430 = extractvalue { double, double } %425, 0
  store double %430, ptr %429, align 16
  %431 = getelementptr inbounds { double, double }, ptr %428, i32 0, i32 1
  %432 = extractvalue { double, double } %425, 1
  store double %432, ptr %431, align 8
  %433 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %433, ptr align 16 %56, i64 16, i1 false), !tbaa.struct !17
  %434 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %434, ptr align 16 %433, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #10
  %435 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %436 unwind label %555

436:                                              ; preds = %426
  %437 = getelementptr inbounds %"class.JPH::Vec3", ptr %57, i32 0, i32 0
  %438 = getelementptr inbounds %union.anon, ptr %437, i32 0, i32 0
  %439 = getelementptr inbounds { double, double }, ptr %438, i32 0, i32 0
  %440 = extractvalue { double, double } %435, 0
  store double %440, ptr %439, align 16
  %441 = getelementptr inbounds { double, double }, ptr %438, i32 0, i32 1
  %442 = extractvalue { double, double } %435, 1
  store double %442, ptr %441, align 8
  %443 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %443, ptr align 16 %57, i64 16, i1 false), !tbaa.struct !17
  %444 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %444, ptr align 16 %443, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  %445 = load ptr, ptr %33, align 8, !tbaa !5
  %446 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %55, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %445)
          to label %447 unwind label %559

447:                                              ; preds = %436
  store ptr %446, ptr %58, align 8, !tbaa !5
  %448 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 2
  %449 = load ptr, ptr %448, align 8, !tbaa !29
  %450 = load ptr, ptr %58, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %449, ptr noundef %450)
          to label %451 unwind label %559

451:                                              ; preds = %447
  call void @llvm.lifetime.start.p0(i64 208, ptr %59) #10
  invoke void @_ZN3JPH24SliderConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %59)
          to label %452 unwind label %563

452:                                              ; preds = %451
  %453 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %453, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !17
  %454 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %454, ptr align 16 %453, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #10
  %455 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %456 unwind label %567

456:                                              ; preds = %452
  %457 = getelementptr inbounds %"class.JPH::Vec3", ptr %60, i32 0, i32 0
  %458 = getelementptr inbounds %union.anon, ptr %457, i32 0, i32 0
  %459 = getelementptr inbounds { double, double }, ptr %458, i32 0, i32 0
  %460 = extractvalue { double, double } %455, 0
  store double %460, ptr %459, align 16
  %461 = getelementptr inbounds { double, double }, ptr %458, i32 0, i32 1
  %462 = extractvalue { double, double } %455, 1
  store double %462, ptr %461, align 8
  %463 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %463, ptr align 16 %60, i64 16, i1 false), !tbaa.struct !17
  %464 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %464, ptr align 16 %463, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #10
  %465 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %466 unwind label %571

466:                                              ; preds = %456
  %467 = getelementptr inbounds %"class.JPH::Vec3", ptr %61, i32 0, i32 0
  %468 = getelementptr inbounds %union.anon, ptr %467, i32 0, i32 0
  %469 = getelementptr inbounds { double, double }, ptr %468, i32 0, i32 0
  %470 = extractvalue { double, double } %465, 0
  store double %470, ptr %469, align 16
  %471 = getelementptr inbounds { double, double }, ptr %468, i32 0, i32 1
  %472 = extractvalue { double, double } %465, 1
  store double %472, ptr %471, align 8
  %473 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %473, ptr align 16 %61, i64 16, i1 false), !tbaa.struct !17
  %474 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %474, ptr align 16 %473, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #10
  %475 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 10
  store float -5.000000e+00, ptr %475, align 16, !tbaa !30
  %476 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 11
  store float 5.000000e+00, ptr %476, align 4, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  %477 = load ptr, ptr %51, align 8, !tbaa !5
  %478 = invoke noundef ptr @_ZNK3JPH24SliderConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %59, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %477)
          to label %479 unwind label %575

479:                                              ; preds = %466
  store ptr %478, ptr %62, align 8, !tbaa !5
  %480 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 2
  %481 = load ptr, ptr %480, align 8, !tbaa !29
  %482 = load ptr, ptr %62, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %481, ptr noundef %482)
          to label %483 unwind label %575

483:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #10
  %484 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %485 unwind label %579

485:                                              ; preds = %483
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %484, i32 noundef 2)
          to label %486 unwind label %583

486:                                              ; preds = %485
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef %484)
          to label %487 unwind label %579

487:                                              ; preds = %486
  %488 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %489 unwind label %587

489:                                              ; preds = %487
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %488, i32 noundef 0, i32 noundef 1)
          to label %490 unwind label %587

490:                                              ; preds = %489
  %491 = load ptr, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #10
  %492 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %493 unwind label %591

493:                                              ; preds = %490
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %64, ptr noundef %492, i32 noundef 0, i32 noundef 0)
          to label %494 unwind label %591

494:                                              ; preds = %493
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %491, ptr noundef nonnull align 8 dereferenceable(16) %64)
          to label %495 unwind label %595

495:                                              ; preds = %494
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %64) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #10
  %496 = load ptr, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #10
  %497 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %498 unwind label %600

498:                                              ; preds = %495
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %65, ptr noundef %497, i32 noundef 0, i32 noundef 1)
          to label %499 unwind label %600

499:                                              ; preds = %498
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %496, ptr noundef nonnull align 8 dereferenceable(16) %65)
          to label %500 unwind label %604

500:                                              ; preds = %499
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %65) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #10
  call void @llvm.lifetime.start.p0(i64 96, ptr %66) #10
  invoke void @_ZN3JPH31RackAndPinionConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96) %66)
          to label %501 unwind label %609

501:                                              ; preds = %500
  %502 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %55, i32 0, i32 4
  %503 = getelementptr inbounds %"class.JPH::RackAndPinionConstraintSettings", ptr %66, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %503, ptr align 16 %502, i64 16, i1 false), !tbaa.struct !17
  %504 = getelementptr inbounds %"class.JPH::SliderConstraintSettings", ptr %59, i32 0, i32 8
  %505 = getelementptr inbounds %"class.JPH::RackAndPinionConstraintSettings", ptr %66, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %505, ptr align 16 %504, i64 16, i1 false), !tbaa.struct !17
  invoke void @_ZN3JPH31RackAndPinionConstraintSettings8SetRatioEifi(ptr noundef nonnull align 16 dereferenceable(96) %66, i32 noundef 318, float noundef 1.000000e+01, i32 noundef 100)
          to label %506 unwind label %613

506:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #10
  %507 = load ptr, ptr %33, align 8, !tbaa !5
  %508 = load ptr, ptr %51, align 8, !tbaa !5
  %509 = invoke noundef ptr @_ZNK3JPH31RackAndPinionConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96) %66, ptr noundef nonnull align 16 dereferenceable(122) %507, ptr noundef nonnull align 16 dereferenceable(122) %508)
          to label %510 unwind label %617

510:                                              ; preds = %506
  store ptr %509, ptr %67, align 8, !tbaa !5
  %511 = load ptr, ptr %67, align 8, !tbaa !5
  %512 = load ptr, ptr %58, align 8, !tbaa !5
  %513 = load ptr, ptr %62, align 8, !tbaa !5
  invoke void @_ZN3JPH23RackAndPinionConstraint14SetConstraintsEPKNS_10ConstraintES3_(ptr noundef nonnull align 16 dereferenceable(192) %511, ptr noundef %512, ptr noundef %513)
          to label %514 unwind label %617

514:                                              ; preds = %510
  %515 = getelementptr inbounds %class.Test, ptr %69, i32 0, i32 2
  %516 = load ptr, ptr %515, align 8, !tbaa !29
  %517 = load ptr, ptr %67, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %516, ptr noundef %517)
          to label %518 unwind label %617

518:                                              ; preds = %514
  %519 = load ptr, ptr %33, align 8, !tbaa !5
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %68, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 6.000000e+00)
          to label %520 unwind label %617

520:                                              ; preds = %518
  %521 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %522 = load double, ptr %521, align 16
  %523 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %524 = load double, ptr %523, align 8
  invoke void @_ZN3JPH4Body18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %519, double %522, double %524)
          to label %525 unwind label %617

525:                                              ; preds = %520
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %66) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr %66) #10
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %59) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %55) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %39) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %39) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %37) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %21) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %20) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %20) #10
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %17) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #10
  ret void

526:                                              ; preds = %356, %355
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %18, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %19, align 4
  br label %633

530:                                              ; preds = %382, %370, %362
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %18, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #10
  br label %632

534:                                              ; preds = %395
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %18, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %19, align 4
  br label %542

538:                                              ; preds = %413
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %18, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %19, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %52) #10
  br label %542

542:                                              ; preds = %538, %534
  call void @llvm.lifetime.end.p0(i64 256, ptr %52) #10
  br label %631

543:                                              ; preds = %420, %415
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %18, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %19, align 4
  br label %631

547:                                              ; preds = %421
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %18, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %19, align 4
  br label %630

551:                                              ; preds = %422
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %18, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #10
  br label %629

555:                                              ; preds = %426
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %18, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #10
  br label %629

559:                                              ; preds = %447, %436
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %18, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %19, align 4
  br label %628

563:                                              ; preds = %451
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %18, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %19, align 4
  br label %627

567:                                              ; preds = %452
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %18, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #10
  br label %626

571:                                              ; preds = %456
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %18, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #10
  br label %626

575:                                              ; preds = %479, %466
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %18, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %19, align 4
  br label %625

579:                                              ; preds = %486, %483
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %18, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %19, align 4
  br label %624

583:                                              ; preds = %485
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %18, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %19, align 4
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %484) #10
  br label %624

587:                                              ; preds = %489, %487
  %588 = landingpad { ptr, i32 }
          cleanup
  %589 = extractvalue { ptr, i32 } %588, 0
  store ptr %589, ptr %18, align 8
  %590 = extractvalue { ptr, i32 } %588, 1
  store i32 %590, ptr %19, align 4
  br label %623

591:                                              ; preds = %493, %490
  %592 = landingpad { ptr, i32 }
          cleanup
  %593 = extractvalue { ptr, i32 } %592, 0
  store ptr %593, ptr %18, align 8
  %594 = extractvalue { ptr, i32 } %592, 1
  store i32 %594, ptr %19, align 4
  br label %599

595:                                              ; preds = %494
  %596 = landingpad { ptr, i32 }
          cleanup
  %597 = extractvalue { ptr, i32 } %596, 0
  store ptr %597, ptr %18, align 8
  %598 = extractvalue { ptr, i32 } %596, 1
  store i32 %598, ptr %19, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %64) #10
  br label %599

599:                                              ; preds = %595, %591
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #10
  br label %623

600:                                              ; preds = %498, %495
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %18, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %19, align 4
  br label %608

604:                                              ; preds = %499
  %605 = landingpad { ptr, i32 }
          cleanup
  %606 = extractvalue { ptr, i32 } %605, 0
  store ptr %606, ptr %18, align 8
  %607 = extractvalue { ptr, i32 } %605, 1
  store i32 %607, ptr %19, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %65) #10
  br label %608

608:                                              ; preds = %604, %600
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #10
  br label %623

609:                                              ; preds = %500
  %610 = landingpad { ptr, i32 }
          cleanup
  %611 = extractvalue { ptr, i32 } %610, 0
  store ptr %611, ptr %18, align 8
  %612 = extractvalue { ptr, i32 } %610, 1
  store i32 %612, ptr %19, align 4
  br label %622

613:                                              ; preds = %501
  %614 = landingpad { ptr, i32 }
          cleanup
  %615 = extractvalue { ptr, i32 } %614, 0
  store ptr %615, ptr %18, align 8
  %616 = extractvalue { ptr, i32 } %614, 1
  store i32 %616, ptr %19, align 4
  br label %621

617:                                              ; preds = %520, %518, %514, %510, %506
  %618 = landingpad { ptr, i32 }
          cleanup
  %619 = extractvalue { ptr, i32 } %618, 0
  store ptr %619, ptr %18, align 8
  %620 = extractvalue { ptr, i32 } %618, 1
  store i32 %620, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  br label %621

621:                                              ; preds = %617, %613
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %66) #10
  br label %622

622:                                              ; preds = %621, %609
  call void @llvm.lifetime.end.p0(i64 96, ptr %66) #10
  br label %623

623:                                              ; preds = %622, %608, %599, %587
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #10
  br label %624

624:                                              ; preds = %623, %583, %579
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #10
  br label %625

625:                                              ; preds = %624, %575
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  br label %626

626:                                              ; preds = %625, %571, %567
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %59) #10
  br label %627

627:                                              ; preds = %626, %563
  call void @llvm.lifetime.end.p0(i64 208, ptr %59) #10
  br label %628

628:                                              ; preds = %627, %559
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %629

629:                                              ; preds = %628, %555, %551
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %55) #10
  br label %630

630:                                              ; preds = %629, %547
  call void @llvm.lifetime.end.p0(i64 208, ptr %55) #10
  br label %631

631:                                              ; preds = %630, %543, %542
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  br label %632

632:                                              ; preds = %631, %530
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  br label %633

633:                                              ; preds = %632, %526
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #10
  br label %634

634:                                              ; preds = %633, %351, %318
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %39) #10
  br label %635

635:                                              ; preds = %634, %314
  call void @llvm.lifetime.end.p0(i64 88, ptr %39) #10
  br label %636

636:                                              ; preds = %635, %310
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %37) #10
  br label %637

637:                                              ; preds = %636, %306
  call void @llvm.lifetime.end.p0(i64 112, ptr %37) #10
  br label %638

638:                                              ; preds = %637, %302, %301
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %639

639:                                              ; preds = %638, %289
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #10
  br label %640

640:                                              ; preds = %639, %285
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  br label %641

641:                                              ; preds = %640, %198, %143
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #10
  br label %642

642:                                              ; preds = %641, %139
  call void @llvm.lifetime.end.p0(i64 88, ptr %21) #10
  br label %643

643:                                              ; preds = %642, %135
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %20) #10
  br label %644

644:                                              ; preds = %643, %131
  call void @llvm.lifetime.end.p0(i64 88, ptr %20) #10
  br label %645

645:                                              ; preds = %644, %127
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #10
  br label %646

646:                                              ; preds = %645, %123
  call void @llvm.lifetime.end.p0(i64 120, ptr %17) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #10
  br label %647

647:                                              ; preds = %646
  %648 = load ptr, ptr %18, align 8
  %649 = load i32, ptr %19, align 4
  %650 = insertvalue { ptr, i32 } poison, ptr %648, 0
  %651 = insertvalue { ptr, i32 } %650, i32 %649, 1
  resume { ptr, i32 } %651
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(24), float noundef, ptr noundef) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

declare void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88), double, double, double, double, ptr noundef, i32 noundef) #2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double, double, float noundef) #5 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16), double, double) #5 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) #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) 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 #7 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #4 align 2

declare noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH24SliderConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #4 align 2

declare noundef ptr @_ZNK3JPH24SliderConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef) #1 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH31RackAndPinionConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH31RackAndPinionConstraintSettings8SetRatioEifi(ptr noundef nonnull align 16 dereferenceable(96), i32 noundef, float noundef, i32 noundef) #9 align 2

declare noundef ptr @_ZNK3JPH31RackAndPinionConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH4Body18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122), double, double) #1 align 2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSSt16initializer_listIN3JPH4Vec3EE", !6, i64 0, !15, i64 8}
!15 = !{!"long", !7, i64 0}
!16 = !{!14, !15, i64 8}
!17 = !{i64 0, i64 16, !18}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !6, i64 24}
!22 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !23, i64 48, !24, i64 56}
!23 = !{!"bool", !7, i64 0}
!24 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !25, i64 0}
!25 = !{!"_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, !15, i64 8, !26, i64 16, !15, i64 24, !27, i64 32, !6, i64 48}
!26 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!27 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !15, i64 8}
!28 = distinct !{!28, !20}
!29 = !{!22, !6, i64 16}
!30 = !{!31, !10, i64 144}
!31 = !{!"_ZTSN3JPH24SliderConstraintSettingsE", !32, i64 0, !38, i64 40, !23, i64 44, !39, i64 48, !39, i64 64, !39, i64 80, !39, i64 96, !39, i64 112, !39, i64 128, !10, i64 144, !10, i64 148, !40, i64 152, !10, i64 164, !42, i64 168}
!32 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !33, i64 0}
!33 = !{!"_ZTSN3JPH18ConstraintSettingsE", !34, i64 0, !35, i64 8, !23, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !10, i64 28, !15, i64 32}
!34 = !{!"_ZTSN3JPH18SerializableObjectE"}
!35 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !36, i64 0}
!36 = !{!"_ZTSSt6atomicIjE", !37, i64 0}
!37 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!38 = !{!"_ZTSN3JPH16EConstraintSpaceE", !7, i64 0}
!39 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!40 = !{!"_ZTSN3JPH14SpringSettingsE", !41, i64 0, !7, i64 4, !10, i64 8}
!41 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!42 = !{!"_ZTSN3JPH13MotorSettingsE", !40, i64 0, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24}
!43 = !{!31, !10, i64 148}


; 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::Body" = type <{ %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::AABox", %"class.JPH::RefConst", ptr, i64, %"class.JPH::CollisionGroup", float, float, %"class.JPH::BodyID", i16, i8, %"class.JPH::BroadPhaseLayer", i8, %"struct.std::atomic", [6 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i8 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::STLAllocator" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.12", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.8, i8, [7 x i8] }>
%union.anon.8 = 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.11 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.11 = type { i64, [8 x i8] }
%"class.JPH::RefConst.12" = type { ptr }
%"class.JPH::CylinderShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.13" }
%"class.JPH::Array.13" = type { i64, i64, 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.16", %"class.JPH::RefConst" }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.16" = type { ptr }
%"class.JPH::BoxShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::HingeConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.17", i8, i32, i32, i32, float, i64 }
%"class.JPH::RefTarget.17" = type { %"struct.std::atomic.6" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.18, float }
%union.anon.18 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"class.JPH::SliderConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, i8, [3 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"class.JPH::Ref.36" = type { ptr }
%"class.JPH::RackAndPinionConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>

@_ZN3JPH4Body13sFixedToWorldE = external global %"class.JPH::Body", align 16

; 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: mustprogress uwtable
define dso_local void @_ZN27RackAndPinionConstraintTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Array", align 8
  %3 = alloca [8 x %"class.JPH::Vec3"], align 16
  %4 = alloca %"class.JPH::STLAllocator", align 1
  %5 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %6 = alloca %"class.JPH::CylinderShapeSettings", align 8
  %7 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %8 = alloca %"class.JPH::Quat", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::BoxShapeSettings", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Quat", align 16
  %18 = alloca %"class.JPH::BodyCreationSettings", align 16
  %19 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %20 = alloca %"class.JPH::SliderConstraintSettings", align 16
  %21 = alloca %"class.JPH::Ref.36", align 8
  %22 = alloca %"class.JPH::CollisionGroup", align 8
  %23 = alloca %"class.JPH::CollisionGroup", align 8
  %24 = alloca %"class.JPH::RackAndPinionConstraintSettings", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #10
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %3) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0x3F847AE140000000)
  %27 = getelementptr inbounds i8, ptr %3, i64 16
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0x3F847AE140000000)
  %28 = getelementptr inbounds i8, ptr %3, i64 32
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0xBF847AE140000000)
  %29 = getelementptr inbounds i8, ptr %3, i64 48
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0xBF847AE140000000)
  %30 = getelementptr inbounds i8, ptr %3, i64 64
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %30, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0x3F747AE140000000)
  %31 = getelementptr inbounds i8, ptr %3, i64 80
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %31, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0x3F747AE140000000)
  %32 = getelementptr inbounds i8, ptr %3, i64 96
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0xBF747AE140000000)
  %33 = getelementptr inbounds i8, ptr %3, i64 112
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %33, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0xBF747AE140000000)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr nonnull %3, i64 8, ptr noundef nonnull align 1 dereferenceable(1) %4)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %5) #10
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %5, ptr noundef nonnull align 8 dereferenceable(24) %2, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %34 unwind label %54

34:                                               ; preds = %1
  %35 = getelementptr inbounds i8, ptr %5, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %36 unwind label %56

36:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %6) #10
  invoke void @_ZN3JPH21CylinderShapeSettingsC2EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %6, float noundef 0x3FA99999A0000000, float noundef 5.000000e-01, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %37 unwind label %58

37:                                               ; preds = %36
  %38 = getelementptr inbounds i8, ptr %6, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %39 unwind label %60

39:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %7) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %7)
          to label %40 unwind label %62

40:                                               ; preds = %39
  %41 = getelementptr inbounds i8, ptr %7, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %42 unwind label %64

42:                                               ; preds = %40
  %43 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %44 unwind label %64

44:                                               ; preds = %42
  %45 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %46 unwind label %64

46:                                               ; preds = %44
  %47 = extractvalue { double, double } %43, 1
  %48 = extractvalue { double, double } %43, 0
  %49 = extractvalue { double, double } %45, 0
  %50 = extractvalue { double, double } %45, 1
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %7, double %48, double %47, double %49, double %50, ptr noundef nonnull %6, i32 noundef 0)
          to label %.preheader131 unwind label %64

.preheader131:                                    ; preds = %46
  %51 = getelementptr inbounds i8, ptr %8, i64 8
  %52 = getelementptr inbounds i8, ptr %9, i64 8
  br label %66

53:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
          to label %89 unwind label %126

54:                                               ; preds = %1
  %55 = landingpad { ptr, i32 }
          cleanup
  br label %319

56:                                               ; preds = %34
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %318

58:                                               ; preds = %36
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %317

60:                                               ; preds = %37
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %316

62:                                               ; preds = %39
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %315

64:                                               ; preds = %46, %44, %42, %40
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %314

66:                                               ; preds = %.preheader131, %85
  %.094132 = phi i32 [ 0, %.preheader131 ], [ %86, %85 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #10
  %67 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %68 unwind label %87

68:                                               ; preds = %66
  %69 = extractvalue { double, double } %67, 0
  %70 = extractvalue { double, double } %67, 1
  %71 = uitofp nneg i32 %.094132 to float
  %72 = fmul float %71, 0x401921FB60000000
  %73 = fdiv float %72, 1.000000e+02
  %74 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %69, double %70, float noundef %73)
          to label %75 unwind label %87

75:                                               ; preds = %68
  %76 = extractvalue { double, double } %74, 0
  store double %76, ptr %8, align 16
  %77 = extractvalue { double, double } %74, 1
  store double %77, ptr %51, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 5.000000e-01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %78 unwind label %87

78:                                               ; preds = %75
  %79 = load double, ptr %9, align 16
  %80 = load double, ptr %52, align 8
  %81 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %8, double %79, double %80)
          to label %82 unwind label %87

82:                                               ; preds = %78
  %83 = extractvalue { double, double } %81, 0
  %84 = extractvalue { double, double } %81, 1
  %.sroa.047.0.copyload = load double, ptr %8, align 16
  %.sroa.248.0.copyload = load double, ptr %51, align 8, !tbaa !5
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %7, double %83, double %84, double %.sroa.047.0.copyload, double %.sroa.248.0.copyload, ptr noundef nonnull %5, i32 noundef 0)
          to label %85 unwind label %87

85:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  %86 = add nuw nsw i32 %.094132, 1
  %exitcond.not = icmp eq i32 %86, 100
  br i1 %exitcond.not, label %53, label %66, !llvm.loop !8

87:                                               ; preds = %82, %78, %75, %68, %66
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  br label %314

89:                                               ; preds = %53
  %90 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %91 unwind label %128

91:                                               ; preds = %89
  %92 = extractvalue { double, double } %90, 0
  %93 = extractvalue { double, double } %90, 1
  %94 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %92, double %93, float noundef 0x3FF921FB60000000)
          to label %95 unwind label %128

95:                                               ; preds = %91
  %96 = extractvalue { double, double } %94, 0
  %97 = extractvalue { double, double } %94, 1
  %98 = getelementptr inbounds i8, ptr %0, i64 24
  %99 = load ptr, ptr %98, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #10
  %.sroa.037.0.copyload = load double, ptr %10, align 16
  %.sroa.238.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.238.0.copyload = load double, ptr %.sroa.238.0..sroa_idx, align 8, !tbaa !5
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef nonnull %7, double %.sroa.037.0.copyload, double %.sroa.238.0.copyload, double %96, double %97, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %100 unwind label %130

100:                                              ; preds = %95
  %101 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %99, ptr noundef nonnull align 16 dereferenceable(256) %11)
          to label %102 unwind label %132

102:                                              ; preds = %100
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #10
  %103 = load ptr, ptr %98, align 8, !tbaa !10
  %104 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %103, ptr noundef nonnull align 4 dereferenceable(4) %104, i32 noundef 0)
          to label %105 unwind label %135

105:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %12) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 0x3FB99999A0000000, float noundef 0x3FA99999A0000000, float noundef 5.000000e+00)
          to label %106 unwind label %137

106:                                              ; preds = %105
  %107 = load double, ptr %13, align 16
  %108 = getelementptr inbounds i8, ptr %13, i64 8
  %109 = load double, ptr %108, align 8
  invoke void @_ZN3JPH16BoxShapeSettingsC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(112) %12, double %107, double %109, float noundef 0.000000e+00, ptr noundef null)
          to label %110 unwind label %137

110:                                              ; preds = %106
  %111 = getelementptr inbounds i8, ptr %12, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %111)
          to label %112 unwind label %139

112:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %14) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %14)
          to label %113 unwind label %141

113:                                              ; preds = %112
  %114 = getelementptr inbounds i8, ptr %14, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
          to label %115 unwind label %143

115:                                              ; preds = %113
  %116 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %117 unwind label %143

117:                                              ; preds = %115
  %118 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %119 unwind label %143

119:                                              ; preds = %117
  %120 = extractvalue { double, double } %116, 1
  %121 = extractvalue { double, double } %116, 0
  %122 = extractvalue { double, double } %118, 0
  %123 = extractvalue { double, double } %118, 1
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %14, double %121, double %120, double %122, double %123, ptr noundef nonnull %12, i32 noundef 0)
          to label %.preheader unwind label %143

.preheader:                                       ; preds = %119
  %124 = getelementptr inbounds i8, ptr %15, i64 8
  br label %145

125:                                              ; preds = %158
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef 0x3FE3D70A40000000, float noundef 0.000000e+00)
          to label %162 unwind label %255

126:                                              ; preds = %53
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %313

128:                                              ; preds = %91, %89
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %313

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

132:                                              ; preds = %100
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #10
  br label %134

134:                                              ; preds = %132, %130
  %.pn = phi { ptr, i32 } [ %133, %132 ], [ %131, %130 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #10
  br label %313

135:                                              ; preds = %102
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %313

137:                                              ; preds = %106, %105
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %312

139:                                              ; preds = %110
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %311

141:                                              ; preds = %112
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %310

143:                                              ; preds = %119, %117, %115, %113
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %309

145:                                              ; preds = %.preheader, %158
  %.095133 = phi i32 [ 0, %.preheader ], [ %159, %158 ]
  %146 = uitofp nneg i32 %.095133 to float
  %147 = fadd float %146, 5.000000e-01
  %148 = fmul float %147, 1.000000e+01
  %149 = fdiv float %148, 3.180000e+02
  %150 = fadd float %149, -5.000000e+00
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0x3FB99999A0000000, float noundef 0.000000e+00, float noundef %150)
          to label %151 unwind label %160

151:                                              ; preds = %145
  %152 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %153 unwind label %160

153:                                              ; preds = %151
  %154 = extractvalue { double, double } %152, 0
  %155 = extractvalue { double, double } %152, 1
  %156 = load double, ptr %15, align 16
  %157 = load double, ptr %124, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %14, double %156, double %157, double %154, double %155, ptr noundef nonnull %5, i32 noundef 0)
          to label %158 unwind label %160

158:                                              ; preds = %153
  %159 = add nuw nsw i32 %.095133, 1
  %exitcond134.not = icmp eq i32 %159, 318
  br i1 %exitcond134.not, label %125, label %145, !llvm.loop !20

160:                                              ; preds = %153, %151, %145
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %309

162:                                              ; preds = %125
  %163 = load double, ptr %16, align 16
  %164 = getelementptr inbounds i8, ptr %16, i64 8
  %165 = load double, ptr %164, align 8
  %166 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %163, double %165)
          to label %167 unwind label %255

167:                                              ; preds = %162
  %168 = extractvalue { double, double } %166, 0
  %169 = extractvalue { double, double } %166, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #10
  %170 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %171 unwind label %257

171:                                              ; preds = %167
  %172 = extractvalue { double, double } %170, 0
  %173 = extractvalue { double, double } %170, 1
  %174 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %172, double %173, float noundef 0x3FF921FB60000000)
          to label %175 unwind label %257

175:                                              ; preds = %171
  %176 = extractvalue { double, double } %174, 0
  store double %176, ptr %17, align 16
  %177 = getelementptr inbounds i8, ptr %17, i64 8
  %178 = extractvalue { double, double } %174, 1
  store double %178, ptr %177, align 8
  %179 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %96, double %97)
          to label %180 unwind label %257

180:                                              ; preds = %175
  %181 = extractvalue { double, double } %179, 0
  %182 = extractvalue { double, double } %179, 1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #10
  %183 = load ptr, ptr %98, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %18) #10
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %18, ptr noundef nonnull %14, double %168, double %169, double %181, double %182, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %184 unwind label %259

184:                                              ; preds = %180
  %185 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %183, ptr noundef nonnull align 16 dereferenceable(256) %18)
          to label %186 unwind label %261

186:                                              ; preds = %184
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %18) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %18) #10
  %187 = load ptr, ptr %98, align 8, !tbaa !10
  %188 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %185)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %187, ptr noundef nonnull align 4 dereferenceable(4) %188, i32 noundef 0)
          to label %189 unwind label %264

189:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %19) #10
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %19)
          to label %190 unwind label %266

190:                                              ; preds = %189
  %191 = getelementptr inbounds i8, ptr %19, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %191, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !21
  %192 = getelementptr inbounds i8, ptr %19, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %192, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false)
  %193 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %194 unwind label %268

194:                                              ; preds = %190
  %195 = extractvalue { double, double } %193, 0
  %196 = extractvalue { double, double } %193, 1
  %197 = getelementptr inbounds i8, ptr %19, i64 112
  store double %195, ptr %197, align 16
  %.sroa.511.0..sroa_idx = getelementptr inbounds i8, ptr %19, i64 120
  store double %196, ptr %.sroa.511.0..sroa_idx, align 8, !tbaa !5
  %198 = getelementptr inbounds i8, ptr %19, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %198, ptr noundef nonnull align 16 dereferenceable(16) %197, i64 16, i1 false), !tbaa.struct !21
  %199 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %200 unwind label %270

200:                                              ; preds = %194
  %201 = extractvalue { double, double } %199, 0
  %202 = extractvalue { double, double } %199, 1
  %203 = getelementptr inbounds i8, ptr %19, i64 128
  store double %201, ptr %203, align 16
  %.sroa.59.0..sroa_idx = getelementptr inbounds i8, ptr %19, i64 136
  store double %202, ptr %.sroa.59.0..sroa_idx, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %19, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %204, ptr noundef nonnull align 16 dereferenceable(16) %203, i64 16, i1 false), !tbaa.struct !21
  %205 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %19, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %101)
          to label %206 unwind label %272

206:                                              ; preds = %200
  %207 = getelementptr inbounds i8, ptr %0, i64 16
  %208 = load ptr, ptr %207, align 8, !tbaa !22
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %208, ptr noundef %205)
          to label %209 unwind label %272

209:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %20) #10
  invoke void @_ZN3JPH24SliderConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %20)
          to label %210 unwind label %274

210:                                              ; preds = %209
  %211 = getelementptr inbounds i8, ptr %20, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %211, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !21
  %212 = getelementptr inbounds i8, ptr %20, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %212, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false)
  %213 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %214 unwind label %276

214:                                              ; preds = %210
  %215 = extractvalue { double, double } %213, 0
  %216 = extractvalue { double, double } %213, 1
  %217 = getelementptr inbounds i8, ptr %20, i64 112
  store double %215, ptr %217, align 16
  %.sroa.55.0..sroa_idx = getelementptr inbounds i8, ptr %20, i64 120
  store double %216, ptr %.sroa.55.0..sroa_idx, align 8, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %20, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %218, ptr noundef nonnull align 16 dereferenceable(16) %217, i64 16, i1 false), !tbaa.struct !21
  %219 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %220 unwind label %278

220:                                              ; preds = %214
  %221 = extractvalue { double, double } %219, 0
  %222 = extractvalue { double, double } %219, 1
  %223 = getelementptr inbounds i8, ptr %20, i64 128
  store double %221, ptr %223, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %20, i64 136
  store double %222, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %20, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %224, ptr noundef nonnull align 16 dereferenceable(16) %223, i64 16, i1 false), !tbaa.struct !21
  %225 = getelementptr inbounds i8, ptr %20, i64 144
  store <2 x float> <float -5.000000e+00, float 5.000000e+00>, ptr %225, align 16, !tbaa !23
  %226 = invoke noundef ptr @_ZNK3JPH24SliderConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %20, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %185)
          to label %227 unwind label %280

227:                                              ; preds = %220
  %228 = load ptr, ptr %207, align 8, !tbaa !22
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %228, ptr noundef %226)
          to label %229 unwind label %280

229:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  %230 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %231 unwind label %282

231:                                              ; preds = %229
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %230, i32 noundef 2)
          to label %232 unwind label %284

232:                                              ; preds = %231
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull %230)
          to label %233 unwind label %282

233:                                              ; preds = %232
  %234 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %234, i32 noundef 0, i32 noundef 1)
          to label %235 unwind label %286

235:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #10
  %236 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %21)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef %236, i32 noundef 0, i32 noundef 0)
          to label %237 unwind label %288

237:                                              ; preds = %235
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %101, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %238 unwind label %290

238:                                              ; preds = %237
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #10
  %239 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %21)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef %239, i32 noundef 0, i32 noundef 1)
          to label %240 unwind label %293

240:                                              ; preds = %238
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %185, ptr noundef nonnull align 8 dereferenceable(16) %23)
          to label %241 unwind label %295

241:                                              ; preds = %240
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #10
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %24) #10
  invoke void @_ZN3JPH31RackAndPinionConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96) %24)
          to label %242 unwind label %298

242:                                              ; preds = %241
  %243 = getelementptr inbounds i8, ptr %24, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %243, ptr noundef nonnull align 16 dereferenceable(16) %198, i64 16, i1 false), !tbaa.struct !21
  %244 = getelementptr inbounds i8, ptr %24, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %244, ptr noundef nonnull align 16 dereferenceable(16) %217, i64 16, i1 false), !tbaa.struct !21
  call void @_ZN3JPH31RackAndPinionConstraintSettings8SetRatioEifi(ptr noundef nonnull align 16 dereferenceable(96) %24, i32 noundef 318, float noundef 1.000000e+01, i32 noundef 100)
  %245 = invoke noundef ptr @_ZNK3JPH31RackAndPinionConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96) %24, ptr noundef nonnull align 16 dereferenceable(122) %101, ptr noundef nonnull align 16 dereferenceable(122) %185)
          to label %246 unwind label %300

246:                                              ; preds = %242
  invoke void @_ZN3JPH23RackAndPinionConstraint14SetConstraintsEPKNS_10ConstraintES3_(ptr noundef nonnull align 16 dereferenceable(192) %245, ptr noundef %205, ptr noundef %226)
          to label %247 unwind label %300

247:                                              ; preds = %246
  %248 = load ptr, ptr %207, align 8, !tbaa !22
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %248, ptr noundef nonnull %245)
          to label %249 unwind label %300

249:                                              ; preds = %247
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %25, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 6.000000e+00)
          to label %250 unwind label %300

250:                                              ; preds = %249
  %251 = load double, ptr %25, align 16
  %252 = getelementptr inbounds i8, ptr %25, i64 8
  %253 = load double, ptr %252, align 8
  invoke void @_ZN3JPH4Body18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %101, double %251, double %253)
          to label %254 unwind label %300

254:                                              ; preds = %250
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %24) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %24) #10
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %20) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %20) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %19) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %19) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %14) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %14) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %12) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %7) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #10
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #10
  ret void

255:                                              ; preds = %162, %125
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %309

257:                                              ; preds = %175, %171, %167
  %258 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #10
  br label %309

259:                                              ; preds = %180
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %263

261:                                              ; preds = %184
  %262 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %18) #10
  br label %263

263:                                              ; preds = %261, %259
  %.pn97 = phi { ptr, i32 } [ %262, %261 ], [ %260, %259 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %18) #10
  br label %309

264:                                              ; preds = %186
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %309

266:                                              ; preds = %189
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %308

268:                                              ; preds = %190
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %307

270:                                              ; preds = %194
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %307

272:                                              ; preds = %206, %200
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %307

274:                                              ; preds = %209
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %306

276:                                              ; preds = %210
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %305

278:                                              ; preds = %214
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %305

280:                                              ; preds = %227, %220
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %305

282:                                              ; preds = %232, %229
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %304

284:                                              ; preds = %231
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %230) #10
  br label %304

286:                                              ; preds = %233
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %303

288:                                              ; preds = %235
  %289 = landingpad { ptr, i32 }
          cleanup
  br label %292

290:                                              ; preds = %237
  %291 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #10
  br label %292

292:                                              ; preds = %290, %288
  %.pn99 = phi { ptr, i32 } [ %291, %290 ], [ %289, %288 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #10
  br label %303

293:                                              ; preds = %238
  %294 = landingpad { ptr, i32 }
          cleanup
  br label %297

295:                                              ; preds = %240
  %296 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #10
  br label %297

297:                                              ; preds = %295, %293
  %.pn101 = phi { ptr, i32 } [ %296, %295 ], [ %294, %293 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #10
  br label %303

298:                                              ; preds = %241
  %299 = landingpad { ptr, i32 }
          cleanup
  br label %302

300:                                              ; preds = %250, %249, %247, %246, %242
  %301 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %24) #10
  br label %302

302:                                              ; preds = %300, %298
  %.pn103 = phi { ptr, i32 } [ %301, %300 ], [ %299, %298 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %24) #10
  br label %303

303:                                              ; preds = %302, %297, %292, %286
  %.pn103.pn = phi { ptr, i32 } [ %.pn103, %302 ], [ %.pn101, %297 ], [ %.pn99, %292 ], [ %287, %286 ]
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br label %304

304:                                              ; preds = %303, %284, %282
  %.pn103.pn.pn = phi { ptr, i32 } [ %.pn103.pn, %303 ], [ %283, %282 ], [ %285, %284 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %305

305:                                              ; preds = %280, %304, %278, %276
  %.pn103.pn.pn.pn.pn = phi { ptr, i32 } [ %279, %278 ], [ %277, %276 ], [ %.pn103.pn.pn, %304 ], [ %281, %280 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %20) #10
  br label %306

306:                                              ; preds = %305, %274
  %.pn103.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn103.pn.pn.pn.pn, %305 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %20) #10
  br label %307

307:                                              ; preds = %272, %306, %270, %268
  %.pn103.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %271, %270 ], [ %269, %268 ], [ %.pn103.pn.pn.pn.pn.pn, %306 ], [ %273, %272 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %19) #10
  br label %308

308:                                              ; preds = %307, %266
  %.pn103.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn103.pn.pn.pn.pn.pn.pn.pn, %307 ], [ %267, %266 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %19) #10
  br label %309

309:                                              ; preds = %255, %263, %264, %308, %257, %160, %143
  %.pn116 = phi { ptr, i32 } [ %161, %160 ], [ %144, %143 ], [ %256, %255 ], [ %258, %257 ], [ %.pn103.pn.pn.pn.pn.pn.pn.pn.pn, %308 ], [ %265, %264 ], [ %.pn97, %263 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %14) #10
  br label %310

310:                                              ; preds = %309, %141
  %.pn116.pn = phi { ptr, i32 } [ %.pn116, %309 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %14) #10
  br label %311

311:                                              ; preds = %310, %139
  %.pn116.pn.pn = phi { ptr, i32 } [ %.pn116.pn, %310 ], [ %140, %139 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %12) #10
  br label %312

312:                                              ; preds = %311, %137
  %.pn116.pn.pn.pn = phi { ptr, i32 } [ %.pn116.pn.pn, %311 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #10
  br label %313

313:                                              ; preds = %128, %312, %135, %134, %126
  %.pn116.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %127, %126 ], [ %129, %128 ], [ %.pn116.pn.pn.pn, %312 ], [ %136, %135 ], [ %.pn, %134 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  br label %314

314:                                              ; preds = %313, %87, %64
  %.pn124 = phi { ptr, i32 } [ %88, %87 ], [ %.pn116.pn.pn.pn.pn.pn.pn, %313 ], [ %65, %64 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %7) #10
  br label %315

315:                                              ; preds = %314, %62
  %.pn124.pn = phi { ptr, i32 } [ %.pn124, %314 ], [ %63, %62 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #10
  br label %316

316:                                              ; preds = %315, %60
  %.pn124.pn.pn = phi { ptr, i32 } [ %.pn124.pn, %315 ], [ %61, %60 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #10
  br label %317

317:                                              ; preds = %316, %58
  %.pn124.pn.pn.pn = phi { ptr, i32 } [ %.pn124.pn.pn, %316 ], [ %59, %58 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #10
  br label %318

318:                                              ; preds = %317, %56
  %.pn124.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn124.pn.pn.pn, %317 ], [ %57, %56 ]
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #10
  br label %319

319:                                              ; preds = %318, %54
  %.pn124.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn124.pn.pn.pn.pn, %318 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn124.pn.pn.pn.pn.pn
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(24), float noundef, ptr noundef) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

declare void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88), double, double, double, double, ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double, double, float noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #5 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) #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) 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 #7 align 2

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

; 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 #7 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #4 align 2

declare noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH24SliderConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #4 align 2

declare noundef ptr @_ZNK3JPH24SliderConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH31RackAndPinionConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH31RackAndPinionConstraintSettings8SetRatioEifi(ptr noundef nonnull align 16 dereferenceable(96), i32 noundef, float noundef, i32 noundef) local_unnamed_addr #9 align 2

declare noundef ptr @_ZNK3JPH31RackAndPinionConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH4Body18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122), double, double) local_unnamed_addr #1 align 2

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "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 = { 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 #4 = { 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 #5 = { 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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { 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 #9 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { 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 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!11, !12, i64 24}
!11 = !{!"_ZTS4Test", !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !13, i64 48, !14, i64 56}
!12 = !{!"any pointer", !6, i64 0}
!13 = !{!"bool", !6, i64 0}
!14 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !15, i64 0}
!15 = !{!"_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", !12, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !12, i64 48}
!16 = !{!"long", !6, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !12, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !19, i64 0, !16, i64 8}
!19 = !{!"float", !6, i64 0}
!20 = distinct !{!20, !9}
!21 = !{i64 0, i64 16, !5}
!22 = !{!11, !12, i64 16}
!23 = !{!19, !19, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,MemCpyOptPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass