; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics (PhysicsSystem)

; 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::BodyAccess::Grant" = type { i8 }
%"class.JPH::BodyManager::GrantActiveBodiesAccess" = type { i8 }
%"class.JPH::ScopeExit" = type { %class.anon.55, i8, [7 x i8] }
%class.anon.55 = type <{ ptr, ptr, i32, [4 x i8] }>
%class.anon.57 = type { i8 }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::Vec3" = type { %union.anon.13 }
%union.anon.13 = type { <4 x float> }
%"class.JPH::AxisConstraintPart" = type { %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float3", float, %"class.JPH::SpringPart", float }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SpringPart" = type { float, float }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.42 }
%union.anon.42 = type { <4 x float> }
%"struct.JPH::PhysicsUpdateContext::Step" = type { ptr, i8, i8, %"struct.JPH::BroadPhase::UpdateState", i32, %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"class.JPH::StaticArray", i32, %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", ptr, i32, %"struct.std::atomic", %"struct.std::atomic", ptr, i32, %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle" }
%"struct.JPH::BroadPhase::UpdateState" = type { [4 x ptr] }
%"class.JPH::StaticArray" = type { i32, [32 x %"struct.JPH::StaticArray<JPH::PhysicsUpdateContext::BodyPairQueue, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::PhysicsUpdateContext::BodyPairQueue, 32>::Storage" = type { [128 x i8] }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::StaticArray.20" = type { i32, [4 x i8], [32 x %"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 32>::Storage" = type { [8 x i8] }
%"class.JPH::JobSystem::JobHandle" = type { %"class.JPH::Ref" }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::PhysicsUpdateContext" = type <{ ptr, ptr, ptr, ptr, float, float, %"struct.std::atomic", [4 x i8], ptr, ptr, ptr, %"class.JPH::Array.19", i32, [4 x i8], ptr, %"struct.std::atomic", [4 x i8] }>
%"class.JPH::Array.19" = type { %"class.JPH::STLTempAllocator", i64, i64, ptr }
%"class.JPH::STLTempAllocator" = type { ptr }
%"struct.JPH::PhysicsUpdateContext::Step::CCDBody" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::BodyID", %"class.JPH::BodyID", %"class.JPH::SubShapeID", float, float, float, float, %"class.JPH::ContactSettings" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::ContactSettings" = type { float, float, float, float, float, float, i8, %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::PhysicsSystem" = type <{ ptr, ptr, %"class.JPH::BodyManager", %"class.JPH::BodyLockInterfaceNoLock", %"class.JPH::BodyLockInterfaceLocking", %"class.JPH::BodyInterface", %"class.JPH::BodyInterface", %"class.JPH::NarrowPhaseQuery", %"class.JPH::NarrowPhaseQuery", ptr, ptr, ptr, %"class.std::function", %"struct.JPH::PhysicsSettings", [4 x i8], %"class.JPH::ContactConstraintManager", %"class.JPH::ConstraintManager", %"class.JPH::IslandBuilder", %"class.JPH::LargeIslandSplitter", %"class.JPH::Mutex", %"class.JPH::Array.10", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::BodyManager" = type <{ %"class.JPH::Array", i32, [4 x i8], i64, %"class.JPH::Mutex", %"class.JPH::MutexArray", %"class.JPH::Array.0", %"class.JPH::Mutex", [2 x ptr], [2 x %"struct.std::atomic"], i32, [4 x i8], %"class.JPH::Mutex", %"class.JPH::Array.3", ptr, ptr, i8, [7 x i8] }>
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::MutexArray" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::Array.0" = type { i64, i64, ptr }
%"class.JPH::Array.3" = type { i64, i64, ptr }
%"class.JPH::BodyLockInterfaceNoLock" = type { %"class.JPH::BodyLockInterface" }
%"class.JPH::BodyLockInterface" = type { ptr, ptr }
%"class.JPH::BodyLockInterfaceLocking" = type { %"class.JPH::BodyLockInterface" }
%"class.JPH::BodyInterface" = type { ptr, ptr, ptr }
%"class.JPH::NarrowPhaseQuery" = type { ptr, ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"struct.JPH::PhysicsSettings" = type <{ i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, i32, i32, float, float, float, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"class.JPH::ContactConstraintManager" = type { [8 x i8], [2 x %"class.JPH::ContactConstraintManager::ManifoldCache"], i32, ptr, ptr, ptr, ptr, ptr, i32, %"struct.std::atomic", ptr }
%"class.JPH::ContactConstraintManager::ManifoldCache" = type <{ %"class.JPH::LFHMAllocator", %"class.JPH::LockFreeHashMap", %"class.JPH::LockFreeHashMap.6", i8, [7 x i8] }>
%"class.JPH::LFHMAllocator" = type { ptr, i32, %"struct.std::atomic" }
%"class.JPH::LockFreeHashMap" = type { ptr, %"struct.std::atomic", ptr, i32, i32 }
%"class.JPH::LockFreeHashMap.6" = type { ptr, %"struct.std::atomic", ptr, i32, i32 }
%"class.JPH::ConstraintManager" = type { ptr, %"class.JPH::Array.7", %"class.JPH::Mutex" }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::IslandBuilder" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32 }
%"class.JPH::LargeIslandSplitter" = type <{ i32, [4 x i8], ptr, ptr, ptr, i32, %"struct.std::atomic", i32, [4 x i8], ptr, %"struct.std::atomic", [4 x i8] }>
%"class.JPH::Mutex" = type { %"class.std::mutex", %"class.std::thread::id" }
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::thread::id" = type { i64 }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"struct.JPH::SoftBodySharedSettings::Face" = type { [3 x i32], i32 }
%"class.JPH::SoftBodyVertex" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Plane", i32, i8, float, float }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }

@.str.24 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [90 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10BodyAccess5GrantC2ENS0_7EAccessES2_(ptr noundef nonnull align 1 dereferenceable(1), i8 noundef zeroext, i8 noundef zeroext) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessC2Ebb(ptr noundef nonnull align 1 dereferenceable(1), i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297), ptr noundef nonnull align 4 dereferenceable(4)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body8IsActiveEv(ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

declare void @_ZN3JPH11BodyManager14ActivateBodiesEPKNS_6BodyIDEi(ptr noundef nonnull align 8 dereferenceable(297), ptr noundef, i32 noundef) #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Body23GetCenterOfMassPositionEv(ptr noundef nonnull align 16 dereferenceable(122)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #5 align 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)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties19ClampLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties20ClampAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH16MotionProperties30GetIndexInActiveBodiesInternalEv(ptr noundef nonnull align 16 dereferenceable(182)) #5 align 2

declare void @_ZN3JPH4Body33CalculateWorldSpaceBoundsInternalEv(ptr noundef nonnull align 16 dereferenceable(122)) #6

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #9 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16), float noundef) #9 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS1_4StepE(ptr noundef nonnull align 16 dereferenceable(1172) %0, ptr noundef %1, ptr noundef %2) #4 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.JPH::BodyAccess::Grant", align 1
  %8 = alloca %"class.JPH::BodyManager::GrantActiveBodiesAccess", align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"class.JPH::ScopeExit", align 8
  %16 = alloca %class.anon.55, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %class.anon.57, align 1
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"struct.JPH::AssertLastParam", align 1
  %32 = alloca %"class.JPH::BodyID", align 4
  %33 = alloca ptr, align 8
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca float, align 4
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca float, align 4
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca float, align 4
  %51 = alloca float, align 4
  %52 = alloca %"class.JPH::AxisConstraintPart", align 4
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca %"class.JPH::Vec3", align 16
  %60 = alloca float, align 4
  %61 = alloca float, align 4
  %62 = alloca %"class.JPH::AxisConstraintPart", align 4
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca i32, align 4
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca float, align 4
  %76 = alloca float, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca float, align 4
  %82 = alloca %"class.JPH::Mat44", align 16
  %83 = alloca %"class.JPH::Vec3", align 16
  %84 = alloca %"class.JPH::Vec3", align 16
  %85 = alloca %"class.JPH::Vec3", align 16
  %86 = alloca %"class.JPH::Vec3", align 16
  %87 = alloca %"class.JPH::Vec3", align 16
  %88 = alloca %"class.JPH::Vec3", align 16
  %89 = alloca %"class.JPH::Vec3", align 16
  %90 = alloca %"class.JPH::Vec3", align 16
  %91 = alloca %"class.JPH::Vec3", align 16
  %92 = alloca %"class.JPH::Vec3", align 16
  %93 = alloca %"class.JPH::Vec3", align 16
  %94 = alloca %"class.JPH::Vec3", align 16
  %95 = alloca %"class.JPH::Vec3", align 16
  %96 = alloca %"class.JPH::Vec3", align 16
  %97 = alloca %"class.JPH::Vec3", align 16
  %98 = alloca %"class.JPH::Vec3", align 16
  %99 = alloca %"class.JPH::Vec3", align 16
  %100 = alloca float, align 4
  %101 = alloca %"class.JPH::Vec3", align 16
  %102 = alloca %"class.JPH::Vec3", align 16
  %103 = alloca %"class.JPH::Vec3", align 16
  %104 = alloca float, align 4
  %105 = alloca %"class.JPH::Vec3", align 16
  %106 = alloca %"class.JPH::Vec3", align 16
  %107 = alloca %"class.JPH::Vec3", align 16
  %108 = alloca %"class.JPH::Vec3", align 16
  %109 = alloca %"class.JPH::Mat44", align 16
  %110 = alloca %"class.JPH::Vec3", align 16
  %111 = alloca float, align 4
  %112 = alloca %"class.JPH::Vec3", align 16
  %113 = alloca float, align 4
  %114 = alloca %"class.JPH::Vec3", align 16
  %115 = alloca float, align 4
  %116 = alloca %"class.JPH::Vec3", align 16
  %117 = alloca %"class.JPH::Vec3", align 16
  %118 = alloca %"class.JPH::Vec3", align 16
  %119 = alloca %"class.JPH::Vec3", align 16
  %120 = alloca %"class.JPH::Vec3", align 16
  %121 = alloca %"class.JPH::Vec3", align 16
  %122 = alloca %"class.JPH::Vec3", align 16
  %123 = alloca %"class.JPH::Vec3", align 16
  %124 = alloca %"class.JPH::Vec3", align 16
  %125 = alloca %"class.JPH::Vec3", align 16
  %126 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %127 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #11
  call void @_ZN3JPH10BodyAccess5GrantC2ENS0_7EAccessES2_(ptr noundef nonnull align 1 dereferenceable(1) %7, i8 noundef zeroext 3, i8 noundef zeroext 3)
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #11
  invoke void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessC2Ebb(ptr noundef nonnull align 1 dereferenceable(1) %8, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %128 unwind label %175

128:                                              ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  %129 = load ptr, ptr %6, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %129, i32 0, i32 15
  %131 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %130) #11
  store i32 %131, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #11
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %132, i32 0, i32 1
  %134 = load ptr, ptr %133, align 8, !tbaa !11
  store ptr %134, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %135, i32 0, i32 27
  %137 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %136) #11
  store i32 %137, ptr %13, align 4, !tbaa !9
  %138 = load i32, ptr %13, align 4, !tbaa !9
  %139 = icmp ugt i32 %138, 0
  br i1 %139, label %140, label %1336

140:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  %141 = load ptr, ptr %12, align 8, !tbaa !5
  %142 = load i32, ptr %13, align 4, !tbaa !9
  %143 = zext i32 %142 to i64
  %144 = mul i64 %143, 8
  %145 = trunc i64 %144 to i32
  %146 = load ptr, ptr %141, align 8, !tbaa !19
  %147 = getelementptr inbounds ptr, ptr %146, i64 2
  %148 = load ptr, ptr %147, align 8
  %149 = invoke noundef ptr %148(ptr noundef nonnull align 8 dereferenceable(8) %141, i32 noundef %145)
          to label %150 unwind label %179

150:                                              ; preds = %140
  store ptr %149, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #11
  %151 = getelementptr inbounds %class.anon.55, ptr %16, i32 0, i32 0
  %152 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %152, ptr %151, align 8, !tbaa !21
  %153 = getelementptr inbounds %class.anon.55, ptr %16, i32 0, i32 1
  %154 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %154, ptr %153, align 8, !tbaa !23
  %155 = getelementptr inbounds %class.anon.55, ptr %16, i32 0, i32 2
  %156 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %156, ptr %155, align 8, !tbaa !24
  invoke void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0EC2EOS6_"(ptr noundef nonnull align 8 dereferenceable(25) %15, ptr noundef nonnull align 8 dereferenceable(20) %16)
          to label %157 unwind label %183

157:                                              ; preds = %150
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #11
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %158, i32 0, i32 25
  %160 = load ptr, ptr %159, align 8, !tbaa !25
  store ptr %160, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  %161 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %161, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  %162 = load ptr, ptr %18, align 8, !tbaa !5
  %163 = load i32, ptr %13, align 4, !tbaa !9
  %164 = zext i32 %163 to i64
  %165 = getelementptr inbounds ptr, ptr %162, i64 %164
  store ptr %165, ptr %19, align 8, !tbaa !5
  br label %166

166:                                              ; preds = %170, %157
  %167 = load ptr, ptr %18, align 8, !tbaa !5
  %168 = load ptr, ptr %19, align 8, !tbaa !5
  %169 = icmp ult ptr %167, %168
  br i1 %169, label %170, label %187

170:                                              ; preds = %166
  %171 = load ptr, ptr %17, align 8, !tbaa !5
  %172 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %171, i32 1
  store ptr %172, ptr %17, align 8, !tbaa !5
  %173 = load ptr, ptr %18, align 8, !tbaa !5
  %174 = getelementptr inbounds ptr, ptr %173, i32 1
  store ptr %174, ptr %18, align 8, !tbaa !5
  store ptr %171, ptr %173, align 8, !tbaa !5
  br label %166, !llvm.loop !33

175:                                              ; preds = %3
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %9, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %10, align 4
  br label %1378

179:                                              ; preds = %140
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %9, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %10, align 4
  br label %1335

183:                                              ; preds = %150
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %9, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #11
  br label %1334

187:                                              ; preds = %166
  %188 = load ptr, ptr %14, align 8, !tbaa !5
  %189 = load ptr, ptr %14, align 8, !tbaa !5
  %190 = load i32, ptr %13, align 4, !tbaa !9
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds ptr, ptr %189, i64 %191
  invoke void @"_ZN3JPH9QuickSortIPPNS_20PhysicsUpdateContext4Step7CCDBodyEZNS_13PhysicsSystem21JobResolveCCDContactsEPS1_PS2_E3$_1EEvT_SA_T0_"(ptr noundef %188, ptr noundef %192)
          to label %193 unwind label %201

193:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #11
  %194 = alloca i8, i64 256, align 16
  store ptr %194, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #11
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #11
  %195 = alloca i8, i64 256, align 16
  store ptr %195, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %1302, %193
  %197 = load i32, ptr %25, align 4, !tbaa !9
  %198 = load i32, ptr %13, align 4, !tbaa !9
  %199 = icmp ult i32 %197, %198
  br i1 %199, label %205, label %200

200:                                              ; preds = %196
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  br label %1307

201:                                              ; preds = %187
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %9, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #11
  br label %1333

205:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %206 = load ptr, ptr %14, align 8, !tbaa !5
  %207 = load i32, ptr %25, align 4, !tbaa !9
  %208 = zext i32 %207 to i64
  %209 = getelementptr inbounds ptr, ptr %206, i64 %208
  %210 = load ptr, ptr %209, align 8, !tbaa !5
  store ptr %210, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %211 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 2
  %212 = load ptr, ptr %26, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %212, i32 0, i32 3
  %214 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %211, ptr noundef nonnull align 4 dereferenceable(4) %213)
          to label %215 unwind label %247

215:                                              ; preds = %205
  store ptr %214, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %216 = load ptr, ptr %27, align 8, !tbaa !5
  %217 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %216)
          to label %218 unwind label %251

218:                                              ; preds = %215
  store ptr %217, ptr %28, align 8, !tbaa !5
  %219 = load ptr, ptr %26, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %219, i32 0, i32 4
  %221 = invoke noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4) %220)
          to label %222 unwind label %251

222:                                              ; preds = %218
  br i1 %221, label %1253, label %223

223:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %224 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 2
  %225 = load ptr, ptr %26, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %225, i32 0, i32 4
  %227 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %224, ptr noundef nonnull align 4 dereferenceable(4) %226)
          to label %228 unwind label %255

228:                                              ; preds = %223
  store ptr %227, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  %229 = load ptr, ptr %29, align 8, !tbaa !5
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = invoke noundef ptr @_ZN3JPHL11sGetCCDBodyERKNS_4BodyEPNS_20PhysicsUpdateContext4StepE(ptr noundef nonnull align 16 dereferenceable(122) %229, ptr noundef %230)
          to label %232 unwind label %259

232:                                              ; preds = %228
  store ptr %231, ptr %30, align 8, !tbaa !5
  %233 = load ptr, ptr %30, align 8, !tbaa !5
  %234 = icmp ne ptr %233, null
  br i1 %234, label %235, label %287

235:                                              ; preds = %232
  br label %236

236:                                              ; preds = %235
  %237 = load ptr, ptr %30, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %26, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %239, i32 0, i32 3
  %241 = invoke noundef zeroext i1 @_ZNK3JPH6BodyIDneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %238, ptr noundef nonnull align 4 dereferenceable(4) %240)
          to label %242 unwind label %259

242:                                              ; preds = %236
  br i1 %241, label %263, label %243

243:                                              ; preds = %242
  %244 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef @.str.63, ptr noundef @.str.24, i32 noundef 2051, ptr noundef @.str.64)
          to label %245 unwind label %259

245:                                              ; preds = %243
  br i1 %244, label %246, label %263

246:                                              ; preds = %245
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !35
  br label %263

247:                                              ; preds = %205
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %9, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %10, align 4
  br label %1306

251:                                              ; preds = %1291, %1280, %1278, %1272, %1261, %1253, %218, %215
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %9, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %10, align 4
  br label %1305

255:                                              ; preds = %223
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %9, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %10, align 4
  br label %1252

259:                                              ; preds = %243, %236, %228
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %9, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %10, align 4
  br label %1251

263:                                              ; preds = %246, %245, %242
  br label %264

264:                                              ; preds = %263
  br label %265

265:                                              ; preds = %264
  %266 = load ptr, ptr %30, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %266, i32 0, i32 6
  %268 = load float, ptr %267, align 4, !tbaa !36
  %269 = load ptr, ptr %26, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %269, i32 0, i32 6
  %271 = load float, ptr %270, align 4, !tbaa !36
  %272 = fcmp ogt float %268, %271
  br i1 %272, label %273, label %286

273:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #11
  invoke void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %274 unwind label %282

274:                                              ; preds = %273
  %275 = load ptr, ptr %30, align 8, !tbaa !5
  %276 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %275, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %276, ptr align 4 %32, i64 4, i1 false), !tbaa.struct !42
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #11
  %277 = load ptr, ptr %26, align 8, !tbaa !5
  %278 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %277, i32 0, i32 6
  %279 = load float, ptr %278, align 4, !tbaa !36
  %280 = load ptr, ptr %30, align 8, !tbaa !5
  %281 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %280, i32 0, i32 7
  store float %279, ptr %281, align 16, !tbaa !43
  br label %286

282:                                              ; preds = %273
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %9, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #11
  br label %1251

286:                                              ; preds = %274, %265
  br label %287

287:                                              ; preds = %286, %232
  %288 = load ptr, ptr %30, align 8, !tbaa !5
  %289 = icmp eq ptr %288, null
  br i1 %289, label %298, label %290

290:                                              ; preds = %287
  %291 = load ptr, ptr %30, align 8, !tbaa !5
  %292 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %291, i32 0, i32 6
  %293 = load float, ptr %292, align 4, !tbaa !36
  %294 = load ptr, ptr %26, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %294, i32 0, i32 6
  %296 = load float, ptr %295, align 4, !tbaa !36
  %297 = fcmp oge float %293, %296
  br i1 %297, label %298, label %1250

298:                                              ; preds = %290, %287
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #11
  %299 = load ptr, ptr %26, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %299, i32 0, i32 10
  store ptr %300, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #11
  %301 = load ptr, ptr %26, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %301, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #11
  %303 = load ptr, ptr %27, align 8, !tbaa !5
  %304 = invoke { double, double } @_ZNK3JPH4Body23GetCenterOfMassPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %303)
          to label %305 unwind label %450

305:                                              ; preds = %298
  %306 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %307 = getelementptr inbounds %union.anon.13, ptr %306, i32 0, i32 0
  %308 = getelementptr inbounds { double, double }, ptr %307, i32 0, i32 0
  %309 = extractvalue { double, double } %304, 0
  store double %309, ptr %308, align 16
  %310 = getelementptr inbounds { double, double }, ptr %307, i32 0, i32 1
  %311 = extractvalue { double, double } %304, 1
  store double %311, ptr %310, align 8
  %312 = load ptr, ptr %26, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %312, i32 0, i32 6
  %314 = load float, ptr %313, align 4, !tbaa !36
  %315 = load ptr, ptr %26, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %315, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %316, i64 16, i1 false), !tbaa.struct !44
  %317 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %318 = load double, ptr %317, align 16
  %319 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %320 = load double, ptr %319, align 8
  %321 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %314, double %318, double %320)
          to label %322 unwind label %450

322:                                              ; preds = %305
  %323 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %324 = getelementptr inbounds %union.anon.13, ptr %323, i32 0, i32 0
  %325 = getelementptr inbounds { double, double }, ptr %324, i32 0, i32 0
  %326 = extractvalue { double, double } %321, 0
  store double %326, ptr %325, align 16
  %327 = getelementptr inbounds { double, double }, ptr %324, i32 0, i32 1
  %328 = extractvalue { double, double } %321, 1
  store double %328, ptr %327, align 8
  %329 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %330 = load double, ptr %329, align 16
  %331 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %332 = load double, ptr %331, align 8
  %333 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %36, double %330, double %332)
          to label %334 unwind label %450

334:                                              ; preds = %322
  %335 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %336 = getelementptr inbounds %union.anon.13, ptr %335, i32 0, i32 0
  %337 = getelementptr inbounds { double, double }, ptr %336, i32 0, i32 0
  %338 = extractvalue { double, double } %333, 0
  store double %338, ptr %337, align 16
  %339 = getelementptr inbounds { double, double }, ptr %336, i32 0, i32 1
  %340 = extractvalue { double, double } %333, 1
  store double %340, ptr %339, align 8
  %341 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %342 = load double, ptr %341, align 16
  %343 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %344 = load double, ptr %343, align 8
  %345 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %302, double %342, double %344)
          to label %346 unwind label %450

346:                                              ; preds = %334
  %347 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %348 = getelementptr inbounds %union.anon.13, ptr %347, i32 0, i32 0
  %349 = getelementptr inbounds { double, double }, ptr %348, i32 0, i32 0
  %350 = extractvalue { double, double } %345, 0
  store double %350, ptr %349, align 16
  %351 = getelementptr inbounds { double, double }, ptr %348, i32 0, i32 1
  %352 = extractvalue { double, double } %345, 1
  store double %352, ptr %351, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #11
  %353 = load ptr, ptr %27, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !44
  %354 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %355 = load double, ptr %354, align 16
  %356 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %357 = load double, ptr %356, align 8
  %358 = invoke { double, double } @_ZNK3JPH4Body19GetPointVelocityCOMENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %353, double %355, double %357)
          to label %359 unwind label %454

359:                                              ; preds = %346
  %360 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, i32 0, i32 0
  %361 = getelementptr inbounds %union.anon.13, ptr %360, i32 0, i32 0
  %362 = getelementptr inbounds { double, double }, ptr %361, i32 0, i32 0
  %363 = extractvalue { double, double } %358, 0
  store double %363, ptr %362, align 16
  %364 = getelementptr inbounds { double, double }, ptr %361, i32 0, i32 1
  %365 = extractvalue { double, double } %358, 1
  store double %365, ptr %364, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #11
  %366 = load ptr, ptr %33, align 8, !tbaa !5
  %367 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %366, i32 0, i32 2
  %368 = load float, ptr %367, align 8, !tbaa !46
  %369 = load ptr, ptr %28, align 8, !tbaa !5
  %370 = invoke noundef float @_ZNK3JPH16MotionProperties14GetInverseMassEv(ptr noundef nonnull align 16 dereferenceable(182) %369)
          to label %371 unwind label %458

371:                                              ; preds = %359
  %372 = fmul float %368, %370
  store float %372, ptr %41, align 4, !tbaa !47
  %373 = load ptr, ptr %29, align 8, !tbaa !5
  %374 = invoke noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %373)
          to label %375 unwind label %458

375:                                              ; preds = %371
  br i1 %374, label %376, label %662

376:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #11
  %377 = load ptr, ptr %26, align 8, !tbaa !5
  %378 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %377, i32 0, i32 2
  %379 = load ptr, ptr %29, align 8, !tbaa !5
  %380 = invoke { double, double } @_ZNK3JPH4Body23GetCenterOfMassPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %379)
          to label %381 unwind label %462

381:                                              ; preds = %376
  %382 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %383 = getelementptr inbounds %union.anon.13, ptr %382, i32 0, i32 0
  %384 = getelementptr inbounds { double, double }, ptr %383, i32 0, i32 0
  %385 = extractvalue { double, double } %380, 0
  store double %385, ptr %384, align 16
  %386 = getelementptr inbounds { double, double }, ptr %383, i32 0, i32 1
  %387 = extractvalue { double, double } %380, 1
  store double %387, ptr %386, align 8
  %388 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %389 = load double, ptr %388, align 16
  %390 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %391 = load double, ptr %390, align 8
  %392 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %378, double %389, double %391)
          to label %393 unwind label %462

393:                                              ; preds = %381
  %394 = getelementptr inbounds %"class.JPH::Vec3", ptr %42, i32 0, i32 0
  %395 = getelementptr inbounds %union.anon.13, ptr %394, i32 0, i32 0
  %396 = getelementptr inbounds { double, double }, ptr %395, i32 0, i32 0
  %397 = extractvalue { double, double } %392, 0
  store double %397, ptr %396, align 16
  %398 = getelementptr inbounds { double, double }, ptr %395, i32 0, i32 1
  %399 = extractvalue { double, double } %392, 1
  store double %399, ptr %398, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #11
  %400 = load ptr, ptr %29, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %45, ptr align 16 %42, i64 16, i1 false), !tbaa.struct !44
  %401 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %402 = load double, ptr %401, align 16
  %403 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %404 = load double, ptr %403, align 8
  %405 = invoke { double, double } @_ZNK3JPH4Body19GetPointVelocityCOMENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %400, double %402, double %404)
          to label %406 unwind label %466

406:                                              ; preds = %393
  %407 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %408 = getelementptr inbounds %union.anon.13, ptr %407, i32 0, i32 0
  %409 = getelementptr inbounds { double, double }, ptr %408, i32 0, i32 0
  %410 = extractvalue { double, double } %405, 0
  store double %410, ptr %409, align 16
  %411 = getelementptr inbounds { double, double }, ptr %408, i32 0, i32 1
  %412 = extractvalue { double, double } %405, 1
  store double %412, ptr %411, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %39, i64 16, i1 false), !tbaa.struct !44
  %413 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %414 = load double, ptr %413, align 16
  %415 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %416 = load double, ptr %415, align 8
  %417 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %44, double %414, double %416)
          to label %418 unwind label %470

418:                                              ; preds = %406
  %419 = getelementptr inbounds %"class.JPH::Vec3", ptr %46, i32 0, i32 0
  %420 = getelementptr inbounds %union.anon.13, ptr %419, i32 0, i32 0
  %421 = getelementptr inbounds { double, double }, ptr %420, i32 0, i32 0
  %422 = extractvalue { double, double } %417, 0
  store double %422, ptr %421, align 16
  %423 = getelementptr inbounds { double, double }, ptr %420, i32 0, i32 1
  %424 = extractvalue { double, double } %417, 1
  store double %424, ptr %423, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #11
  %425 = load ptr, ptr %26, align 8, !tbaa !5
  %426 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %425, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %426, i64 16, i1 false), !tbaa.struct !44
  %427 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %428 = load double, ptr %427, align 16
  %429 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %430 = load double, ptr %429, align 8
  %431 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %46, double %428, double %430)
          to label %432 unwind label %474

432:                                              ; preds = %418
  store float %431, ptr %48, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #11
  %433 = load ptr, ptr %33, align 8, !tbaa !5
  %434 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %433, i32 0, i32 1
  %435 = load float, ptr %434, align 4, !tbaa !48
  %436 = fcmp ogt float %435, 0.000000e+00
  br i1 %436, label %437, label %478

437:                                              ; preds = %432
  %438 = load float, ptr %48, align 4, !tbaa !47
  %439 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 13
  %440 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %439, i32 0, i32 16
  %441 = load float, ptr %440, align 8, !tbaa !49
  %442 = fneg float %441
  %443 = fcmp olt float %438, %442
  br i1 %443, label %444, label %478

444:                                              ; preds = %437
  %445 = load ptr, ptr %33, align 8, !tbaa !5
  %446 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %445, i32 0, i32 1
  %447 = load float, ptr %446, align 4, !tbaa !48
  %448 = load float, ptr %48, align 4, !tbaa !47
  %449 = fmul float %447, %448
  store float %449, ptr %50, align 4, !tbaa !47
  br label %479

450:                                              ; preds = %334, %322, %305, %298
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %9, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #11
  br label %1249

454:                                              ; preds = %346
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %9, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %10, align 4
  br label %1248

458:                                              ; preds = %1240, %1226, %1222, %1220, %1218, %371, %359
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %9, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %10, align 4
  br label %1247

462:                                              ; preds = %381, %376
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %9, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %10, align 4
  br label %661

466:                                              ; preds = %393
  %467 = landingpad { ptr, i32 }
          cleanup
  %468 = extractvalue { ptr, i32 } %467, 0
  store ptr %468, ptr %9, align 8
  %469 = extractvalue { ptr, i32 } %467, 1
  store i32 %469, ptr %10, align 4
  br label %660

470:                                              ; preds = %406
  %471 = landingpad { ptr, i32 }
          cleanup
  %472 = extractvalue { ptr, i32 } %471, 0
  store ptr %472, ptr %9, align 8
  %473 = extractvalue { ptr, i32 } %471, 1
  store i32 %473, ptr %10, align 4
  br label %659

474:                                              ; preds = %418
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %9, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %10, align 4
  br label %658

478:                                              ; preds = %437, %432
  store float 0.000000e+00, ptr %50, align 4, !tbaa !47
  br label %479

479:                                              ; preds = %478, %444
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #11
  %480 = load ptr, ptr %29, align 8, !tbaa !5
  %481 = invoke noundef ptr @_ZN3JPH4Body28GetMotionPropertiesUncheckedEv(ptr noundef nonnull align 16 dereferenceable(122) %480)
          to label %482 unwind label %611

482:                                              ; preds = %479
  %483 = icmp ne ptr %481, null
  br i1 %483, label %484, label %494

484:                                              ; preds = %482
  %485 = load ptr, ptr %33, align 8, !tbaa !5
  %486 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %485, i32 0, i32 4
  %487 = load float, ptr %486, align 16, !tbaa !74
  %488 = load ptr, ptr %29, align 8, !tbaa !5
  %489 = invoke noundef ptr @_ZN3JPH4Body28GetMotionPropertiesUncheckedEv(ptr noundef nonnull align 16 dereferenceable(122) %488)
          to label %490 unwind label %611

490:                                              ; preds = %484
  %491 = invoke noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182) %489)
          to label %492 unwind label %611

492:                                              ; preds = %490
  %493 = fmul float %487, %491
  br label %495

494:                                              ; preds = %482
  br label %495

495:                                              ; preds = %494, %492
  %496 = phi float [ %493, %492 ], [ 0.000000e+00, %494 ]
  store float %496, ptr %51, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 64, ptr %52) #11
  call void @_ZN3JPH18AxisConstraintPartC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %52) #11
  %497 = load ptr, ptr %27, align 8, !tbaa !5
  %498 = load float, ptr %41, align 4, !tbaa !47
  %499 = load ptr, ptr %33, align 8, !tbaa !5
  %500 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %499, i32 0, i32 3
  %501 = load float, ptr %500, align 4, !tbaa !75
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %53, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !44
  %502 = load ptr, ptr %29, align 8, !tbaa !5
  %503 = load float, ptr %51, align 4, !tbaa !47
  %504 = load ptr, ptr %33, align 8, !tbaa !5
  %505 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %504, i32 0, i32 5
  %506 = load float, ptr %505, align 4, !tbaa !76
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %42, i64 16, i1 false), !tbaa.struct !44
  %507 = load ptr, ptr %26, align 8, !tbaa !5
  %508 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %507, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %55, ptr align 16 %508, i64 16, i1 false), !tbaa.struct !44
  %509 = load float, ptr %50, align 4, !tbaa !47
  %510 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %511 = load double, ptr %510, align 16
  %512 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %513 = load double, ptr %512, align 8
  %514 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %515 = load double, ptr %514, align 16
  %516 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %517 = load double, ptr %516, align 8
  invoke void @_ZN3JPH18AxisConstraintPart45CalculateConstraintPropertiesWithMassOverrideERKNS_4BodyEffNS_4Vec3ES3_ffS4_S4_f(ptr noundef nonnull align 4 dereferenceable(64) %52, ptr noundef nonnull align 16 dereferenceable(122) %497, float noundef %498, float noundef %501, double %511, double %513, ptr noundef nonnull align 16 dereferenceable(122) %502, float noundef %503, float noundef %506, double %515, double %517, ptr noundef byval(%"class.JPH::Vec3") align 16 %55, float noundef %509)
          to label %518 unwind label %615

518:                                              ; preds = %495
  %519 = load ptr, ptr %27, align 8, !tbaa !5
  %520 = load float, ptr %41, align 4, !tbaa !47
  %521 = load ptr, ptr %29, align 8, !tbaa !5
  %522 = load float, ptr %51, align 4, !tbaa !47
  %523 = load ptr, ptr %26, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %523, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %524, i64 16, i1 false), !tbaa.struct !44
  %525 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %526 = load double, ptr %525, align 16
  %527 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %528 = load double, ptr %527, align 8
  %529 = invoke noundef zeroext i1 @_ZN3JPH18AxisConstraintPart39SolveVelocityConstraintWithMassOverrideERNS_4BodyEfS2_fNS_4Vec3Eff(ptr noundef nonnull align 4 dereferenceable(64) %52, ptr noundef nonnull align 16 dereferenceable(122) %519, float noundef %520, ptr noundef nonnull align 16 dereferenceable(122) %521, float noundef %522, double %526, double %528, float noundef 0xC7EFFFFFE0000000, float noundef 0x47EFFFFFE0000000)
          to label %530 unwind label %615

530:                                              ; preds = %518
  %531 = load ptr, ptr %33, align 8, !tbaa !5
  %532 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %531, i32 0, i32 0
  %533 = load float, ptr %532, align 16, !tbaa !77
  %534 = fcmp ogt float %533, 0.000000e+00
  br i1 %534, label %535, label %639

535:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #11
  %536 = load float, ptr %48, align 4, !tbaa !47
  %537 = load ptr, ptr %26, align 8, !tbaa !5
  %538 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %537, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %59, ptr align 16 %538, i64 16, i1 false), !tbaa.struct !44
  %539 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %540 = load double, ptr %539, align 16
  %541 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %542 = load double, ptr %541, align 8
  %543 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %536, double %540, double %542)
          to label %544 unwind label %619

544:                                              ; preds = %535
  %545 = getelementptr inbounds %"class.JPH::Vec3", ptr %58, i32 0, i32 0
  %546 = getelementptr inbounds %union.anon.13, ptr %545, i32 0, i32 0
  %547 = getelementptr inbounds { double, double }, ptr %546, i32 0, i32 0
  %548 = extractvalue { double, double } %543, 0
  store double %548, ptr %547, align 16
  %549 = getelementptr inbounds { double, double }, ptr %546, i32 0, i32 1
  %550 = extractvalue { double, double } %543, 1
  store double %550, ptr %549, align 8
  %551 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 0
  %552 = load double, ptr %551, align 16
  %553 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 1
  %554 = load double, ptr %553, align 8
  %555 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %46, double %552, double %554)
          to label %556 unwind label %619

556:                                              ; preds = %544
  %557 = getelementptr inbounds %"class.JPH::Vec3", ptr %57, i32 0, i32 0
  %558 = getelementptr inbounds %union.anon.13, ptr %557, i32 0, i32 0
  %559 = getelementptr inbounds { double, double }, ptr %558, i32 0, i32 0
  %560 = extractvalue { double, double } %555, 0
  store double %560, ptr %559, align 16
  %561 = getelementptr inbounds { double, double }, ptr %558, i32 0, i32 1
  %562 = extractvalue { double, double } %555, 1
  store double %562, ptr %561, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #11
  %563 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %57)
          to label %564 unwind label %623

564:                                              ; preds = %556
  store float %563, ptr %60, align 4, !tbaa !47
  %565 = load float, ptr %60, align 4, !tbaa !47
  %566 = fcmp ogt float %565, 0x3D71979980000000
  br i1 %566, label %567, label %636

567:                                              ; preds = %564
  %568 = load float, ptr %60, align 4, !tbaa !47
  %569 = invoke noundef float @_ZSt4sqrtf(float noundef %568)
          to label %570 unwind label %623

570:                                              ; preds = %567
  %571 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %57, float noundef %569)
          to label %572 unwind label %623

572:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #11
  %573 = load ptr, ptr %33, align 8, !tbaa !5
  %574 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %573, i32 0, i32 0
  %575 = load float, ptr %574, align 16, !tbaa !77
  %576 = invoke noundef float @_ZNK3JPH18AxisConstraintPart14GetTotalLambdaEv(ptr noundef nonnull align 4 dereferenceable(64) %52)
          to label %577 unwind label %627

577:                                              ; preds = %572
  %578 = fmul float %575, %576
  store float %578, ptr %61, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 64, ptr %62) #11
  call void @_ZN3JPH18AxisConstraintPartC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %62) #11
  %579 = load ptr, ptr %27, align 8, !tbaa !5
  %580 = load float, ptr %41, align 4, !tbaa !47
  %581 = load ptr, ptr %33, align 8, !tbaa !5
  %582 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %581, i32 0, i32 3
  %583 = load float, ptr %582, align 4, !tbaa !75
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %63, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !44
  %584 = load ptr, ptr %29, align 8, !tbaa !5
  %585 = load float, ptr %51, align 4, !tbaa !47
  %586 = load ptr, ptr %33, align 8, !tbaa !5
  %587 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %586, i32 0, i32 5
  %588 = load float, ptr %587, align 4, !tbaa !76
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %64, ptr align 16 %42, i64 16, i1 false), !tbaa.struct !44
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %65, ptr align 16 %57, i64 16, i1 false), !tbaa.struct !44
  %589 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 0
  %590 = load double, ptr %589, align 16
  %591 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 1
  %592 = load double, ptr %591, align 8
  %593 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 0
  %594 = load double, ptr %593, align 16
  %595 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 1
  %596 = load double, ptr %595, align 8
  invoke void @_ZN3JPH18AxisConstraintPart45CalculateConstraintPropertiesWithMassOverrideERKNS_4BodyEffNS_4Vec3ES3_ffS4_S4_f(ptr noundef nonnull align 4 dereferenceable(64) %62, ptr noundef nonnull align 16 dereferenceable(122) %579, float noundef %580, float noundef %583, double %590, double %592, ptr noundef nonnull align 16 dereferenceable(122) %584, float noundef %585, float noundef %588, double %594, double %596, ptr noundef byval(%"class.JPH::Vec3") align 16 %65, float noundef 0.000000e+00)
          to label %597 unwind label %631

597:                                              ; preds = %577
  %598 = load ptr, ptr %27, align 8, !tbaa !5
  %599 = load float, ptr %41, align 4, !tbaa !47
  %600 = load ptr, ptr %29, align 8, !tbaa !5
  %601 = load float, ptr %51, align 4, !tbaa !47
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %66, ptr align 16 %57, i64 16, i1 false), !tbaa.struct !44
  %602 = load float, ptr %61, align 4, !tbaa !47
  %603 = fneg float %602
  %604 = load float, ptr %61, align 4, !tbaa !47
  %605 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %606 = load double, ptr %605, align 16
  %607 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %608 = load double, ptr %607, align 8
  %609 = invoke noundef zeroext i1 @_ZN3JPH18AxisConstraintPart39SolveVelocityConstraintWithMassOverrideERNS_4BodyEfS2_fNS_4Vec3Eff(ptr noundef nonnull align 4 dereferenceable(64) %62, ptr noundef nonnull align 16 dereferenceable(122) %598, float noundef %599, ptr noundef nonnull align 16 dereferenceable(122) %600, float noundef %601, double %606, double %608, float noundef %603, float noundef %604)
          to label %610 unwind label %631

610:                                              ; preds = %597
  call void @llvm.lifetime.end.p0(i64 64, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  br label %636

611:                                              ; preds = %490, %484, %479
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %9, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %10, align 4
  br label %657

615:                                              ; preds = %639, %518, %495
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %9, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %10, align 4
  br label %656

619:                                              ; preds = %544, %535
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %9, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %10, align 4
  br label %638

623:                                              ; preds = %570, %567, %556
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %9, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %10, align 4
  br label %637

627:                                              ; preds = %572
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %9, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %10, align 4
  br label %635

631:                                              ; preds = %597, %577
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %9, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %62) #11
  br label %635

635:                                              ; preds = %631, %627
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  br label %637

636:                                              ; preds = %610, %564
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #11
  br label %639

637:                                              ; preds = %635, %623
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #11
  br label %638

638:                                              ; preds = %637, %619
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #11
  br label %656

639:                                              ; preds = %636, %530
  %640 = load ptr, ptr %29, align 8, !tbaa !5
  %641 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %640)
          to label %642 unwind label %615

642:                                              ; preds = %639
  br i1 %641, label %643, label %655

643:                                              ; preds = %642
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #11
  %644 = load ptr, ptr %29, align 8, !tbaa !5
  %645 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %644)
          to label %646 unwind label %651

646:                                              ; preds = %643
  store ptr %645, ptr %67, align 8, !tbaa !5
  %647 = load ptr, ptr %67, align 8, !tbaa !5
  invoke void @_ZN3JPH16MotionProperties19ClampLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %647)
          to label %648 unwind label %651

648:                                              ; preds = %646
  %649 = load ptr, ptr %67, align 8, !tbaa !5
  invoke void @_ZN3JPH16MotionProperties20ClampAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %649)
          to label %650 unwind label %651

650:                                              ; preds = %648
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  br label %655

651:                                              ; preds = %648, %646, %643
  %652 = landingpad { ptr, i32 }
          cleanup
  %653 = extractvalue { ptr, i32 } %652, 0
  store ptr %653, ptr %9, align 8
  %654 = extractvalue { ptr, i32 } %652, 1
  store i32 %654, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  br label %656

655:                                              ; preds = %650, %642
  call void @llvm.lifetime.end.p0(i64 64, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #11
  br label %1218

656:                                              ; preds = %651, %638, %615
  call void @llvm.lifetime.end.p0(i64 64, ptr %52) #11
  br label %657

657:                                              ; preds = %656, %611
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #11
  br label %658

658:                                              ; preds = %657, %474
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  br label %659

659:                                              ; preds = %658, %470
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #11
  br label %660

660:                                              ; preds = %659, %466
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  br label %661

661:                                              ; preds = %660, %462
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #11
  br label %1247

662:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #11
  %663 = load ptr, ptr %29, align 8, !tbaa !5
  %664 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %663)
          to label %665 unwind label %931

665:                                              ; preds = %662
  store ptr %664, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #11
  %666 = load ptr, ptr %29, align 8, !tbaa !5
  %667 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %666)
          to label %668 unwind label %935

668:                                              ; preds = %665
  store ptr %667, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #11
  %669 = load ptr, ptr %69, align 8, !tbaa !5
  %670 = load ptr, ptr %26, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %670, i32 0, i32 5
  %672 = invoke noundef i32 @_ZNK3JPH13SoftBodyShape12GetFaceIndexERKNS_10SubShapeIDE(ptr noundef nonnull align 8 dereferenceable(40) %669, ptr noundef nonnull align 4 dereferenceable(4) %671)
          to label %673 unwind label %939

673:                                              ; preds = %668
  store i32 %672, ptr %70, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #11
  %674 = load ptr, ptr %68, align 8, !tbaa !5
  %675 = load i32, ptr %70, align 4, !tbaa !9
  %676 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH24SoftBodyMotionProperties7GetFaceEj(ptr noundef nonnull align 16 dereferenceable(372) %674, i32 noundef %675)
          to label %677 unwind label %943

677:                                              ; preds = %673
  store ptr %676, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #11
  %678 = load ptr, ptr %68, align 8, !tbaa !5
  %679 = load ptr, ptr %71, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %679, i32 0, i32 0
  %681 = getelementptr inbounds [3 x i32], ptr %680, i64 0, i64 0
  %682 = load i32, ptr %681, align 4, !tbaa !9
  %683 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %678, i32 noundef %682)
          to label %684 unwind label %947

684:                                              ; preds = %677
  store ptr %683, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #11
  %685 = load ptr, ptr %68, align 8, !tbaa !5
  %686 = load ptr, ptr %71, align 8, !tbaa !5
  %687 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %686, i32 0, i32 0
  %688 = getelementptr inbounds [3 x i32], ptr %687, i64 0, i64 1
  %689 = load i32, ptr %688, align 4, !tbaa !9
  %690 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %685, i32 noundef %689)
          to label %691 unwind label %951

691:                                              ; preds = %684
  store ptr %690, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #11
  %692 = load ptr, ptr %68, align 8, !tbaa !5
  %693 = load ptr, ptr %71, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %693, i32 0, i32 0
  %695 = getelementptr inbounds [3 x i32], ptr %694, i64 0, i64 2
  %696 = load i32, ptr %695, align 4, !tbaa !9
  %697 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %692, i32 noundef %696)
          to label %698 unwind label %955

698:                                              ; preds = %691
  store ptr %697, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #11
  %699 = load ptr, ptr %72, align 8, !tbaa !5
  %700 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %699, i32 0, i32 7
  %701 = load float, ptr %700, align 4, !tbaa !78
  %702 = fcmp ogt float %701, 0.000000e+00
  br i1 %702, label %703, label %708

703:                                              ; preds = %698
  %704 = load ptr, ptr %72, align 8, !tbaa !5
  %705 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %704, i32 0, i32 7
  %706 = load float, ptr %705, align 4, !tbaa !78
  %707 = fdiv float 1.000000e+00, %706
  br label %709

708:                                              ; preds = %698
  br label %709

709:                                              ; preds = %708, %703
  %710 = phi float [ %707, %703 ], [ 1.000000e+10, %708 ]
  store float %710, ptr %75, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #11
  %711 = load ptr, ptr %73, align 8, !tbaa !5
  %712 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %711, i32 0, i32 7
  %713 = load float, ptr %712, align 4, !tbaa !78
  %714 = fcmp ogt float %713, 0.000000e+00
  br i1 %714, label %715, label %720

715:                                              ; preds = %709
  %716 = load ptr, ptr %73, align 8, !tbaa !5
  %717 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %716, i32 0, i32 7
  %718 = load float, ptr %717, align 4, !tbaa !78
  %719 = fdiv float 1.000000e+00, %718
  br label %721

720:                                              ; preds = %709
  br label %721

721:                                              ; preds = %720, %715
  %722 = phi float [ %719, %715 ], [ 1.000000e+10, %720 ]
  store float %722, ptr %76, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #11
  %723 = load ptr, ptr %74, align 8, !tbaa !5
  %724 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %723, i32 0, i32 7
  %725 = load float, ptr %724, align 4, !tbaa !78
  %726 = fcmp ogt float %725, 0.000000e+00
  br i1 %726, label %727, label %732

727:                                              ; preds = %721
  %728 = load ptr, ptr %74, align 8, !tbaa !5
  %729 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %728, i32 0, i32 7
  %730 = load float, ptr %729, align 4, !tbaa !78
  %731 = fdiv float 1.000000e+00, %730
  br label %733

732:                                              ; preds = %721
  br label %733

733:                                              ; preds = %732, %727
  %734 = phi float [ %731, %727 ], [ 1.000000e+10, %732 ]
  store float %734, ptr %77, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #11
  %735 = load float, ptr %75, align 4, !tbaa !47
  %736 = load float, ptr %76, align 4, !tbaa !47
  %737 = fadd float %735, %736
  %738 = load float, ptr %77, align 4, !tbaa !47
  %739 = fadd float %737, %738
  %740 = fdiv float 1.000000e+00, %739
  store float %740, ptr %78, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %82) #11
  %741 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %82, ptr noundef nonnull align 16 dereferenceable(122) %741)
          to label %742 unwind label %959

742:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #11
  %743 = load ptr, ptr %26, align 8, !tbaa !5
  %744 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %743, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %84, ptr align 16 %744, i64 16, i1 false), !tbaa.struct !44
  %745 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %746 = load double, ptr %745, align 16
  %747 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  %748 = load double, ptr %747, align 8
  %749 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %82, double %746, double %748)
          to label %750 unwind label %963

750:                                              ; preds = %742
  %751 = getelementptr inbounds %"class.JPH::Vec3", ptr %83, i32 0, i32 0
  %752 = getelementptr inbounds %union.anon.13, ptr %751, i32 0, i32 0
  %753 = getelementptr inbounds { double, double }, ptr %752, i32 0, i32 0
  %754 = extractvalue { double, double } %749, 0
  store double %754, ptr %753, align 16
  %755 = getelementptr inbounds { double, double }, ptr %752, i32 0, i32 1
  %756 = extractvalue { double, double } %749, 1
  store double %756, ptr %755, align 8
  %757 = load ptr, ptr %72, align 8, !tbaa !5
  %758 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %757, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %86, ptr align 16 %83, i64 16, i1 false), !tbaa.struct !44
  %759 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %760 = load double, ptr %759, align 16
  %761 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  %762 = load double, ptr %761, align 8
  %763 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %758, double %760, double %762)
          to label %764 unwind label %963

764:                                              ; preds = %750
  %765 = getelementptr inbounds %"class.JPH::Vec3", ptr %85, i32 0, i32 0
  %766 = getelementptr inbounds %union.anon.13, ptr %765, i32 0, i32 0
  %767 = getelementptr inbounds { double, double }, ptr %766, i32 0, i32 0
  %768 = extractvalue { double, double } %763, 0
  store double %768, ptr %767, align 16
  %769 = getelementptr inbounds { double, double }, ptr %766, i32 0, i32 1
  %770 = extractvalue { double, double } %763, 1
  store double %770, ptr %769, align 8
  %771 = load ptr, ptr %73, align 8, !tbaa !5
  %772 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %771, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %88, ptr align 16 %83, i64 16, i1 false), !tbaa.struct !44
  %773 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %774 = load double, ptr %773, align 16
  %775 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  %776 = load double, ptr %775, align 8
  %777 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %772, double %774, double %776)
          to label %778 unwind label %963

778:                                              ; preds = %764
  %779 = getelementptr inbounds %"class.JPH::Vec3", ptr %87, i32 0, i32 0
  %780 = getelementptr inbounds %union.anon.13, ptr %779, i32 0, i32 0
  %781 = getelementptr inbounds { double, double }, ptr %780, i32 0, i32 0
  %782 = extractvalue { double, double } %777, 0
  store double %782, ptr %781, align 16
  %783 = getelementptr inbounds { double, double }, ptr %780, i32 0, i32 1
  %784 = extractvalue { double, double } %777, 1
  store double %784, ptr %783, align 8
  %785 = load ptr, ptr %74, align 8, !tbaa !5
  %786 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %785, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %90, ptr align 16 %83, i64 16, i1 false), !tbaa.struct !44
  %787 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 0
  %788 = load double, ptr %787, align 16
  %789 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 1
  %790 = load double, ptr %789, align 8
  %791 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %786, double %788, double %790)
          to label %792 unwind label %963

792:                                              ; preds = %778
  %793 = getelementptr inbounds %"class.JPH::Vec3", ptr %89, i32 0, i32 0
  %794 = getelementptr inbounds %union.anon.13, ptr %793, i32 0, i32 0
  %795 = getelementptr inbounds { double, double }, ptr %794, i32 0, i32 0
  %796 = extractvalue { double, double } %791, 0
  store double %796, ptr %795, align 16
  %797 = getelementptr inbounds { double, double }, ptr %794, i32 0, i32 1
  %798 = extractvalue { double, double } %791, 1
  store double %798, ptr %797, align 8
  %799 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 0
  %800 = load double, ptr %799, align 16
  %801 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 1
  %802 = load double, ptr %801, align 8
  %803 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %804 = load double, ptr %803, align 16
  %805 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %806 = load double, ptr %805, align 8
  %807 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %808 = load double, ptr %807, align 16
  %809 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  %810 = load double, ptr %809, align 8
  %811 = invoke noundef zeroext i1 @_ZN3JPH12ClosestPoint25GetBaryCentricCoordinatesENS_4Vec3ES1_S1_RfS2_S2_(double %800, double %802, double %804, double %806, double %808, double %810, ptr noundef nonnull align 4 dereferenceable(4) %79, ptr noundef nonnull align 4 dereferenceable(4) %80, ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %812 unwind label %963

812:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 16, ptr %91) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %93) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %94) #11
  %813 = load float, ptr %79, align 4, !tbaa !47
  %814 = load ptr, ptr %72, align 8, !tbaa !5
  %815 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %814, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %95, ptr align 16 %815, i64 16, i1 false), !tbaa.struct !44
  %816 = getelementptr inbounds { double, double }, ptr %95, i32 0, i32 0
  %817 = load double, ptr %816, align 16
  %818 = getelementptr inbounds { double, double }, ptr %95, i32 0, i32 1
  %819 = load double, ptr %818, align 8
  %820 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %813, double %817, double %819)
          to label %821 unwind label %967

821:                                              ; preds = %812
  %822 = getelementptr inbounds %"class.JPH::Vec3", ptr %94, i32 0, i32 0
  %823 = getelementptr inbounds %union.anon.13, ptr %822, i32 0, i32 0
  %824 = getelementptr inbounds { double, double }, ptr %823, i32 0, i32 0
  %825 = extractvalue { double, double } %820, 0
  store double %825, ptr %824, align 16
  %826 = getelementptr inbounds { double, double }, ptr %823, i32 0, i32 1
  %827 = extractvalue { double, double } %820, 1
  store double %827, ptr %826, align 8
  %828 = load float, ptr %80, align 4, !tbaa !47
  %829 = load ptr, ptr %73, align 8, !tbaa !5
  %830 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %829, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %97, ptr align 16 %830, i64 16, i1 false), !tbaa.struct !44
  %831 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 0
  %832 = load double, ptr %831, align 16
  %833 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 1
  %834 = load double, ptr %833, align 8
  %835 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %828, double %832, double %834)
          to label %836 unwind label %967

836:                                              ; preds = %821
  %837 = getelementptr inbounds %"class.JPH::Vec3", ptr %96, i32 0, i32 0
  %838 = getelementptr inbounds %union.anon.13, ptr %837, i32 0, i32 0
  %839 = getelementptr inbounds { double, double }, ptr %838, i32 0, i32 0
  %840 = extractvalue { double, double } %835, 0
  store double %840, ptr %839, align 16
  %841 = getelementptr inbounds { double, double }, ptr %838, i32 0, i32 1
  %842 = extractvalue { double, double } %835, 1
  store double %842, ptr %841, align 8
  %843 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 0
  %844 = load double, ptr %843, align 16
  %845 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 1
  %846 = load double, ptr %845, align 8
  %847 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %94, double %844, double %846)
          to label %848 unwind label %967

848:                                              ; preds = %836
  %849 = getelementptr inbounds %"class.JPH::Vec3", ptr %93, i32 0, i32 0
  %850 = getelementptr inbounds %union.anon.13, ptr %849, i32 0, i32 0
  %851 = getelementptr inbounds { double, double }, ptr %850, i32 0, i32 0
  %852 = extractvalue { double, double } %847, 0
  store double %852, ptr %851, align 16
  %853 = getelementptr inbounds { double, double }, ptr %850, i32 0, i32 1
  %854 = extractvalue { double, double } %847, 1
  store double %854, ptr %853, align 8
  %855 = load float, ptr %81, align 4, !tbaa !47
  %856 = load ptr, ptr %74, align 8, !tbaa !5
  %857 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %856, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %99, ptr align 16 %857, i64 16, i1 false), !tbaa.struct !44
  %858 = getelementptr inbounds { double, double }, ptr %99, i32 0, i32 0
  %859 = load double, ptr %858, align 16
  %860 = getelementptr inbounds { double, double }, ptr %99, i32 0, i32 1
  %861 = load double, ptr %860, align 8
  %862 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %855, double %859, double %861)
          to label %863 unwind label %967

863:                                              ; preds = %848
  %864 = getelementptr inbounds %"class.JPH::Vec3", ptr %98, i32 0, i32 0
  %865 = getelementptr inbounds %union.anon.13, ptr %864, i32 0, i32 0
  %866 = getelementptr inbounds { double, double }, ptr %865, i32 0, i32 0
  %867 = extractvalue { double, double } %862, 0
  store double %867, ptr %866, align 16
  %868 = getelementptr inbounds { double, double }, ptr %865, i32 0, i32 1
  %869 = extractvalue { double, double } %862, 1
  store double %869, ptr %868, align 8
  %870 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 0
  %871 = load double, ptr %870, align 16
  %872 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 1
  %873 = load double, ptr %872, align 8
  %874 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %93, double %871, double %873)
          to label %875 unwind label %967

875:                                              ; preds = %863
  %876 = getelementptr inbounds %"class.JPH::Vec3", ptr %92, i32 0, i32 0
  %877 = getelementptr inbounds %union.anon.13, ptr %876, i32 0, i32 0
  %878 = getelementptr inbounds { double, double }, ptr %877, i32 0, i32 0
  %879 = extractvalue { double, double } %874, 0
  store double %879, ptr %878, align 16
  %880 = getelementptr inbounds { double, double }, ptr %877, i32 0, i32 1
  %881 = extractvalue { double, double } %874, 1
  store double %881, ptr %880, align 8
  %882 = getelementptr inbounds { double, double }, ptr %92, i32 0, i32 0
  %883 = load double, ptr %882, align 16
  %884 = getelementptr inbounds { double, double }, ptr %92, i32 0, i32 1
  %885 = load double, ptr %884, align 8
  %886 = invoke { double, double } @_ZNK3JPH5Mat4421Multiply3x3TransposedENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %82, double %883, double %885)
          to label %887 unwind label %967

887:                                              ; preds = %875
  %888 = getelementptr inbounds %"class.JPH::Vec3", ptr %91, i32 0, i32 0
  %889 = getelementptr inbounds %union.anon.13, ptr %888, i32 0, i32 0
  %890 = getelementptr inbounds { double, double }, ptr %889, i32 0, i32 0
  %891 = extractvalue { double, double } %886, 0
  store double %891, ptr %890, align 16
  %892 = getelementptr inbounds { double, double }, ptr %889, i32 0, i32 1
  %893 = extractvalue { double, double } %886, 1
  store double %893, ptr %892, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %93) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %101) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %102, ptr align 16 %39, i64 16, i1 false), !tbaa.struct !44
  %894 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 0
  %895 = load double, ptr %894, align 16
  %896 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 1
  %897 = load double, ptr %896, align 8
  %898 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %91, double %895, double %897)
          to label %899 unwind label %971

899:                                              ; preds = %887
  %900 = getelementptr inbounds %"class.JPH::Vec3", ptr %101, i32 0, i32 0
  %901 = getelementptr inbounds %union.anon.13, ptr %900, i32 0, i32 0
  %902 = getelementptr inbounds { double, double }, ptr %901, i32 0, i32 0
  %903 = extractvalue { double, double } %898, 0
  store double %903, ptr %902, align 16
  %904 = getelementptr inbounds { double, double }, ptr %901, i32 0, i32 1
  %905 = extractvalue { double, double } %898, 1
  store double %905, ptr %904, align 8
  %906 = load ptr, ptr %26, align 8, !tbaa !5
  %907 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %906, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %103, ptr align 16 %907, i64 16, i1 false), !tbaa.struct !44
  %908 = getelementptr inbounds { double, double }, ptr %103, i32 0, i32 0
  %909 = load double, ptr %908, align 16
  %910 = getelementptr inbounds { double, double }, ptr %103, i32 0, i32 1
  %911 = load double, ptr %910, align 8
  %912 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %101, double %909, double %911)
          to label %913 unwind label %971

913:                                              ; preds = %899
  call void @llvm.lifetime.end.p0(i64 16, ptr %101) #11
  store float %912, ptr %100, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #11
  %914 = load ptr, ptr %33, align 8, !tbaa !5
  %915 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %914, i32 0, i32 1
  %916 = load float, ptr %915, align 4, !tbaa !48
  %917 = fcmp ogt float %916, 0.000000e+00
  br i1 %917, label %918, label %975

918:                                              ; preds = %913
  %919 = load float, ptr %100, align 4, !tbaa !47
  %920 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 13
  %921 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %920, i32 0, i32 16
  %922 = load float, ptr %921, align 8, !tbaa !49
  %923 = fneg float %922
  %924 = fcmp olt float %919, %923
  br i1 %924, label %925, label %975

925:                                              ; preds = %918
  %926 = load ptr, ptr %33, align 8, !tbaa !5
  %927 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %926, i32 0, i32 1
  %928 = load float, ptr %927, align 4, !tbaa !48
  %929 = load float, ptr %100, align 4, !tbaa !47
  %930 = fmul float %928, %929
  store float %930, ptr %104, align 4, !tbaa !47
  br label %976

931:                                              ; preds = %662
  %932 = landingpad { ptr, i32 }
          cleanup
  %933 = extractvalue { ptr, i32 } %932, 0
  store ptr %933, ptr %9, align 8
  %934 = extractvalue { ptr, i32 } %932, 1
  store i32 %934, ptr %10, align 4
  br label %1217

935:                                              ; preds = %665
  %936 = landingpad { ptr, i32 }
          cleanup
  %937 = extractvalue { ptr, i32 } %936, 0
  store ptr %937, ptr %9, align 8
  %938 = extractvalue { ptr, i32 } %936, 1
  store i32 %938, ptr %10, align 4
  br label %1216

939:                                              ; preds = %668
  %940 = landingpad { ptr, i32 }
          cleanup
  %941 = extractvalue { ptr, i32 } %940, 0
  store ptr %941, ptr %9, align 8
  %942 = extractvalue { ptr, i32 } %940, 1
  store i32 %942, ptr %10, align 4
  br label %1215

943:                                              ; preds = %673
  %944 = landingpad { ptr, i32 }
          cleanup
  %945 = extractvalue { ptr, i32 } %944, 0
  store ptr %945, ptr %9, align 8
  %946 = extractvalue { ptr, i32 } %944, 1
  store i32 %946, ptr %10, align 4
  br label %1214

947:                                              ; preds = %677
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %9, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %10, align 4
  br label %1213

951:                                              ; preds = %684
  %952 = landingpad { ptr, i32 }
          cleanup
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %9, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %10, align 4
  br label %1212

955:                                              ; preds = %691
  %956 = landingpad { ptr, i32 }
          cleanup
  %957 = extractvalue { ptr, i32 } %956, 0
  store ptr %957, ptr %9, align 8
  %958 = extractvalue { ptr, i32 } %956, 1
  store i32 %958, ptr %10, align 4
  br label %1211

959:                                              ; preds = %733
  %960 = landingpad { ptr, i32 }
          cleanup
  %961 = extractvalue { ptr, i32 } %960, 0
  store ptr %961, ptr %9, align 8
  %962 = extractvalue { ptr, i32 } %960, 1
  store i32 %962, ptr %10, align 4
  br label %1210

963:                                              ; preds = %792, %778, %764, %750, %742
  %964 = landingpad { ptr, i32 }
          cleanup
  %965 = extractvalue { ptr, i32 } %964, 0
  store ptr %965, ptr %9, align 8
  %966 = extractvalue { ptr, i32 } %964, 1
  store i32 %966, ptr %10, align 4
  br label %1209

967:                                              ; preds = %875, %863, %848, %836, %821, %812
  %968 = landingpad { ptr, i32 }
          cleanup
  %969 = extractvalue { ptr, i32 } %968, 0
  store ptr %969, ptr %9, align 8
  %970 = extractvalue { ptr, i32 } %968, 1
  store i32 %970, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %93) #11
  br label %1208

971:                                              ; preds = %899, %887
  %972 = landingpad { ptr, i32 }
          cleanup
  %973 = extractvalue { ptr, i32 } %972, 0
  store ptr %973, ptr %9, align 8
  %974 = extractvalue { ptr, i32 } %972, 1
  store i32 %974, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %101) #11
  br label %1207

975:                                              ; preds = %918, %913
  store float 0.000000e+00, ptr %104, align 4, !tbaa !47
  br label %976

976:                                              ; preds = %975, %925
  call void @llvm.lifetime.start.p0(i64 16, ptr %105) #11
  %977 = load ptr, ptr %26, align 8, !tbaa !5
  %978 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %977, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %106, ptr align 16 %978, i64 16, i1 false), !tbaa.struct !44
  %979 = getelementptr inbounds { double, double }, ptr %106, i32 0, i32 0
  %980 = load double, ptr %979, align 16
  %981 = getelementptr inbounds { double, double }, ptr %106, i32 0, i32 1
  %982 = load double, ptr %981, align 8
  %983 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %34, double %980, double %982)
          to label %984 unwind label %1178

984:                                              ; preds = %976
  %985 = getelementptr inbounds %"class.JPH::Vec3", ptr %105, i32 0, i32 0
  %986 = getelementptr inbounds %union.anon.13, ptr %985, i32 0, i32 0
  %987 = getelementptr inbounds { double, double }, ptr %986, i32 0, i32 0
  %988 = extractvalue { double, double } %983, 0
  store double %988, ptr %987, align 16
  %989 = getelementptr inbounds { double, double }, ptr %986, i32 0, i32 1
  %990 = extractvalue { double, double } %983, 1
  store double %990, ptr %989, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %107) #11
  %991 = load ptr, ptr %33, align 8, !tbaa !5
  %992 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %991, i32 0, i32 3
  %993 = load float, ptr %992, align 4, !tbaa !75
  call void @llvm.lifetime.start.p0(i64 64, ptr %109) #11
  %994 = load ptr, ptr %27, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body17GetInverseInertiaEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %109, ptr noundef nonnull align 16 dereferenceable(122) %994)
          to label %995 unwind label %1182

995:                                              ; preds = %984
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %110, ptr align 16 %105, i64 16, i1 false), !tbaa.struct !44
  %996 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 0
  %997 = load double, ptr %996, align 16
  %998 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 1
  %999 = load double, ptr %998, align 8
  %1000 = invoke { double, double } @_ZNK3JPH5Mat4411Multiply3x3ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %109, double %997, double %999)
          to label %1001 unwind label %1182

1001:                                             ; preds = %995
  %1002 = getelementptr inbounds %"class.JPH::Vec3", ptr %108, i32 0, i32 0
  %1003 = getelementptr inbounds %union.anon.13, ptr %1002, i32 0, i32 0
  %1004 = getelementptr inbounds { double, double }, ptr %1003, i32 0, i32 0
  %1005 = extractvalue { double, double } %1000, 0
  store double %1005, ptr %1004, align 16
  %1006 = getelementptr inbounds { double, double }, ptr %1003, i32 0, i32 1
  %1007 = extractvalue { double, double } %1000, 1
  store double %1007, ptr %1006, align 8
  %1008 = getelementptr inbounds { double, double }, ptr %108, i32 0, i32 0
  %1009 = load double, ptr %1008, align 16
  %1010 = getelementptr inbounds { double, double }, ptr %108, i32 0, i32 1
  %1011 = load double, ptr %1010, align 8
  %1012 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %993, double %1009, double %1011)
          to label %1013 unwind label %1182

1013:                                             ; preds = %1001
  %1014 = getelementptr inbounds %"class.JPH::Vec3", ptr %107, i32 0, i32 0
  %1015 = getelementptr inbounds %union.anon.13, ptr %1014, i32 0, i32 0
  %1016 = getelementptr inbounds { double, double }, ptr %1015, i32 0, i32 0
  %1017 = extractvalue { double, double } %1012, 0
  store double %1017, ptr %1016, align 16
  %1018 = getelementptr inbounds { double, double }, ptr %1015, i32 0, i32 1
  %1019 = extractvalue { double, double } %1012, 1
  store double %1019, ptr %1018, align 8
  call void @llvm.lifetime.end.p0(i64 64, ptr %109) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #11
  %1020 = load ptr, ptr %28, align 8, !tbaa !5
  %1021 = invoke { double, double } @_ZNK3JPH16MotionProperties18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %1020)
          to label %1022 unwind label %1186

1022:                                             ; preds = %1013
  %1023 = getelementptr inbounds %"class.JPH::Vec3", ptr %112, i32 0, i32 0
  %1024 = getelementptr inbounds %union.anon.13, ptr %1023, i32 0, i32 0
  %1025 = getelementptr inbounds { double, double }, ptr %1024, i32 0, i32 0
  %1026 = extractvalue { double, double } %1021, 0
  store double %1026, ptr %1025, align 16
  %1027 = getelementptr inbounds { double, double }, ptr %1024, i32 0, i32 1
  %1028 = extractvalue { double, double } %1021, 1
  store double %1028, ptr %1027, align 8
  %1029 = getelementptr inbounds { double, double }, ptr %112, i32 0, i32 0
  %1030 = load double, ptr %1029, align 16
  %1031 = getelementptr inbounds { double, double }, ptr %112, i32 0, i32 1
  %1032 = load double, ptr %1031, align 8
  %1033 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %105, double %1030, double %1032)
          to label %1034 unwind label %1186

1034:                                             ; preds = %1022
  %1035 = load float, ptr %100, align 4, !tbaa !47
  %1036 = fsub float %1033, %1035
  %1037 = load float, ptr %104, align 4, !tbaa !47
  %1038 = fsub float %1036, %1037
  store float %1038, ptr %111, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #11
  %1039 = load float, ptr %41, align 4, !tbaa !47
  %1040 = load float, ptr %78, align 4, !tbaa !47
  %1041 = fadd float %1039, %1040
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %114, ptr align 16 %105, i64 16, i1 false), !tbaa.struct !44
  %1042 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 0
  %1043 = load double, ptr %1042, align 16
  %1044 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 1
  %1045 = load double, ptr %1044, align 8
  %1046 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %107, double %1043, double %1045)
          to label %1047 unwind label %1190

1047:                                             ; preds = %1034
  %1048 = fadd float %1041, %1046
  store float %1048, ptr %113, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #11
  %1049 = load float, ptr %111, align 4, !tbaa !47
  %1050 = load float, ptr %113, align 4, !tbaa !47
  %1051 = fdiv float %1049, %1050
  store float %1051, ptr %115, align 4, !tbaa !47
  %1052 = load ptr, ptr %28, align 8, !tbaa !5
  %1053 = load float, ptr %115, align 4, !tbaa !47
  %1054 = load float, ptr %41, align 4, !tbaa !47
  %1055 = fmul float %1053, %1054
  %1056 = load ptr, ptr %26, align 8, !tbaa !5
  %1057 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %1056, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %117, ptr align 16 %1057, i64 16, i1 false), !tbaa.struct !44
  %1058 = getelementptr inbounds { double, double }, ptr %117, i32 0, i32 0
  %1059 = load double, ptr %1058, align 16
  %1060 = getelementptr inbounds { double, double }, ptr %117, i32 0, i32 1
  %1061 = load double, ptr %1060, align 8
  %1062 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %1055, double %1059, double %1061)
          to label %1063 unwind label %1194

1063:                                             ; preds = %1047
  %1064 = getelementptr inbounds %"class.JPH::Vec3", ptr %116, i32 0, i32 0
  %1065 = getelementptr inbounds %union.anon.13, ptr %1064, i32 0, i32 0
  %1066 = getelementptr inbounds { double, double }, ptr %1065, i32 0, i32 0
  %1067 = extractvalue { double, double } %1062, 0
  store double %1067, ptr %1066, align 16
  %1068 = getelementptr inbounds { double, double }, ptr %1065, i32 0, i32 1
  %1069 = extractvalue { double, double } %1062, 1
  store double %1069, ptr %1068, align 8
  %1070 = getelementptr inbounds { double, double }, ptr %116, i32 0, i32 0
  %1071 = load double, ptr %1070, align 16
  %1072 = getelementptr inbounds { double, double }, ptr %116, i32 0, i32 1
  %1073 = load double, ptr %1072, align 8
  invoke void @_ZN3JPH16MotionProperties21SubLinearVelocityStepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %1052, double %1071, double %1073)
          to label %1074 unwind label %1194

1074:                                             ; preds = %1063
  %1075 = load ptr, ptr %28, align 8, !tbaa !5
  %1076 = load float, ptr %115, align 4, !tbaa !47
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %119, ptr align 16 %107, i64 16, i1 false), !tbaa.struct !44
  %1077 = getelementptr inbounds { double, double }, ptr %119, i32 0, i32 0
  %1078 = load double, ptr %1077, align 16
  %1079 = getelementptr inbounds { double, double }, ptr %119, i32 0, i32 1
  %1080 = load double, ptr %1079, align 8
  %1081 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %1076, double %1078, double %1080)
          to label %1082 unwind label %1194

1082:                                             ; preds = %1074
  %1083 = getelementptr inbounds %"class.JPH::Vec3", ptr %118, i32 0, i32 0
  %1084 = getelementptr inbounds %union.anon.13, ptr %1083, i32 0, i32 0
  %1085 = getelementptr inbounds { double, double }, ptr %1084, i32 0, i32 0
  %1086 = extractvalue { double, double } %1081, 0
  store double %1086, ptr %1085, align 16
  %1087 = getelementptr inbounds { double, double }, ptr %1084, i32 0, i32 1
  %1088 = extractvalue { double, double } %1081, 1
  store double %1088, ptr %1087, align 8
  %1089 = getelementptr inbounds { double, double }, ptr %118, i32 0, i32 0
  %1090 = load double, ptr %1089, align 16
  %1091 = getelementptr inbounds { double, double }, ptr %118, i32 0, i32 1
  %1092 = load double, ptr %1091, align 8
  invoke void @_ZN3JPH16MotionProperties22SubAngularVelocityStepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %1075, double %1090, double %1092)
          to label %1093 unwind label %1194

1093:                                             ; preds = %1082
  call void @llvm.lifetime.start.p0(i64 16, ptr %120) #11
  %1094 = load float, ptr %115, align 4, !tbaa !47
  %1095 = load ptr, ptr %26, align 8, !tbaa !5
  %1096 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %1095, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %122, ptr align 16 %1096, i64 16, i1 false), !tbaa.struct !44
  %1097 = getelementptr inbounds { double, double }, ptr %122, i32 0, i32 0
  %1098 = load double, ptr %1097, align 16
  %1099 = getelementptr inbounds { double, double }, ptr %122, i32 0, i32 1
  %1100 = load double, ptr %1099, align 8
  %1101 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %1094, double %1098, double %1100)
          to label %1102 unwind label %1198

1102:                                             ; preds = %1093
  %1103 = getelementptr inbounds %"class.JPH::Vec3", ptr %121, i32 0, i32 0
  %1104 = getelementptr inbounds %union.anon.13, ptr %1103, i32 0, i32 0
  %1105 = getelementptr inbounds { double, double }, ptr %1104, i32 0, i32 0
  %1106 = extractvalue { double, double } %1101, 0
  store double %1106, ptr %1105, align 16
  %1107 = getelementptr inbounds { double, double }, ptr %1104, i32 0, i32 1
  %1108 = extractvalue { double, double } %1101, 1
  store double %1108, ptr %1107, align 8
  %1109 = getelementptr inbounds { double, double }, ptr %121, i32 0, i32 0
  %1110 = load double, ptr %1109, align 16
  %1111 = getelementptr inbounds { double, double }, ptr %121, i32 0, i32 1
  %1112 = load double, ptr %1111, align 8
  %1113 = invoke { double, double } @_ZNK3JPH5Mat4411Multiply3x3ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %82, double %1110, double %1112)
          to label %1114 unwind label %1198

1114:                                             ; preds = %1102
  %1115 = getelementptr inbounds %"class.JPH::Vec3", ptr %120, i32 0, i32 0
  %1116 = getelementptr inbounds %union.anon.13, ptr %1115, i32 0, i32 0
  %1117 = getelementptr inbounds { double, double }, ptr %1116, i32 0, i32 0
  %1118 = extractvalue { double, double } %1113, 0
  store double %1118, ptr %1117, align 16
  %1119 = getelementptr inbounds { double, double }, ptr %1116, i32 0, i32 1
  %1120 = extractvalue { double, double } %1113, 1
  store double %1120, ptr %1119, align 8
  %1121 = load ptr, ptr %72, align 8, !tbaa !5
  %1122 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %1121, i32 0, i32 7
  %1123 = load float, ptr %1122, align 4, !tbaa !78
  %1124 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %120, float noundef %1123)
          to label %1125 unwind label %1198

1125:                                             ; preds = %1114
  %1126 = getelementptr inbounds %"class.JPH::Vec3", ptr %123, i32 0, i32 0
  %1127 = getelementptr inbounds %union.anon.13, ptr %1126, i32 0, i32 0
  %1128 = getelementptr inbounds { double, double }, ptr %1127, i32 0, i32 0
  %1129 = extractvalue { double, double } %1124, 0
  store double %1129, ptr %1128, align 16
  %1130 = getelementptr inbounds { double, double }, ptr %1127, i32 0, i32 1
  %1131 = extractvalue { double, double } %1124, 1
  store double %1131, ptr %1130, align 8
  %1132 = load ptr, ptr %72, align 8, !tbaa !5
  %1133 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %1132, i32 0, i32 2
  %1134 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 0
  %1135 = load double, ptr %1134, align 16
  %1136 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 1
  %1137 = load double, ptr %1136, align 8
  %1138 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %1133, double %1135, double %1137)
          to label %1139 unwind label %1198

1139:                                             ; preds = %1125
  %1140 = load ptr, ptr %73, align 8, !tbaa !5
  %1141 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %1140, i32 0, i32 7
  %1142 = load float, ptr %1141, align 4, !tbaa !78
  %1143 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %120, float noundef %1142)
          to label %1144 unwind label %1198

1144:                                             ; preds = %1139
  %1145 = getelementptr inbounds %"class.JPH::Vec3", ptr %124, i32 0, i32 0
  %1146 = getelementptr inbounds %union.anon.13, ptr %1145, i32 0, i32 0
  %1147 = getelementptr inbounds { double, double }, ptr %1146, i32 0, i32 0
  %1148 = extractvalue { double, double } %1143, 0
  store double %1148, ptr %1147, align 16
  %1149 = getelementptr inbounds { double, double }, ptr %1146, i32 0, i32 1
  %1150 = extractvalue { double, double } %1143, 1
  store double %1150, ptr %1149, align 8
  %1151 = load ptr, ptr %73, align 8, !tbaa !5
  %1152 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %1151, i32 0, i32 2
  %1153 = getelementptr inbounds { double, double }, ptr %124, i32 0, i32 0
  %1154 = load double, ptr %1153, align 16
  %1155 = getelementptr inbounds { double, double }, ptr %124, i32 0, i32 1
  %1156 = load double, ptr %1155, align 8
  %1157 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %1152, double %1154, double %1156)
          to label %1158 unwind label %1198

1158:                                             ; preds = %1144
  %1159 = load ptr, ptr %74, align 8, !tbaa !5
  %1160 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %1159, i32 0, i32 7
  %1161 = load float, ptr %1160, align 4, !tbaa !78
  %1162 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %120, float noundef %1161)
          to label %1163 unwind label %1198

1163:                                             ; preds = %1158
  %1164 = getelementptr inbounds %"class.JPH::Vec3", ptr %125, i32 0, i32 0
  %1165 = getelementptr inbounds %union.anon.13, ptr %1164, i32 0, i32 0
  %1166 = getelementptr inbounds { double, double }, ptr %1165, i32 0, i32 0
  %1167 = extractvalue { double, double } %1162, 0
  store double %1167, ptr %1166, align 16
  %1168 = getelementptr inbounds { double, double }, ptr %1165, i32 0, i32 1
  %1169 = extractvalue { double, double } %1162, 1
  store double %1169, ptr %1168, align 8
  %1170 = load ptr, ptr %74, align 8, !tbaa !5
  %1171 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %1170, i32 0, i32 2
  %1172 = getelementptr inbounds { double, double }, ptr %125, i32 0, i32 0
  %1173 = load double, ptr %1172, align 16
  %1174 = getelementptr inbounds { double, double }, ptr %125, i32 0, i32 1
  %1175 = load double, ptr %1174, align 8
  %1176 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %1171, double %1173, double %1175)
          to label %1177 unwind label %1198

1177:                                             ; preds = %1163
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %82) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  br label %1218

1178:                                             ; preds = %976
  %1179 = landingpad { ptr, i32 }
          cleanup
  %1180 = extractvalue { ptr, i32 } %1179, 0
  store ptr %1180, ptr %9, align 8
  %1181 = extractvalue { ptr, i32 } %1179, 1
  store i32 %1181, ptr %10, align 4
  br label %1206

1182:                                             ; preds = %1001, %995, %984
  %1183 = landingpad { ptr, i32 }
          cleanup
  %1184 = extractvalue { ptr, i32 } %1183, 0
  store ptr %1184, ptr %9, align 8
  %1185 = extractvalue { ptr, i32 } %1183, 1
  store i32 %1185, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %109) #11
  br label %1205

1186:                                             ; preds = %1022, %1013
  %1187 = landingpad { ptr, i32 }
          cleanup
  %1188 = extractvalue { ptr, i32 } %1187, 0
  store ptr %1188, ptr %9, align 8
  %1189 = extractvalue { ptr, i32 } %1187, 1
  store i32 %1189, ptr %10, align 4
  br label %1204

1190:                                             ; preds = %1034
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %9, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, ptr %10, align 4
  br label %1203

1194:                                             ; preds = %1082, %1074, %1063, %1047
  %1195 = landingpad { ptr, i32 }
          cleanup
  %1196 = extractvalue { ptr, i32 } %1195, 0
  store ptr %1196, ptr %9, align 8
  %1197 = extractvalue { ptr, i32 } %1195, 1
  store i32 %1197, ptr %10, align 4
  br label %1202

1198:                                             ; preds = %1163, %1158, %1144, %1139, %1125, %1114, %1102, %1093
  %1199 = landingpad { ptr, i32 }
          cleanup
  %1200 = extractvalue { ptr, i32 } %1199, 0
  store ptr %1200, ptr %9, align 8
  %1201 = extractvalue { ptr, i32 } %1199, 1
  store i32 %1201, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #11
  br label %1202

1202:                                             ; preds = %1198, %1194
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #11
  br label %1203

1203:                                             ; preds = %1202, %1190
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #11
  br label %1204

1204:                                             ; preds = %1203, %1186
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #11
  br label %1205

1205:                                             ; preds = %1204, %1182
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #11
  br label %1206

1206:                                             ; preds = %1205, %1178
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #11
  br label %1207

1207:                                             ; preds = %1206, %971
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #11
  br label %1208

1208:                                             ; preds = %1207, %967
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #11
  br label %1209

1209:                                             ; preds = %1208, %963
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #11
  br label %1210

1210:                                             ; preds = %1209, %959
  call void @llvm.lifetime.end.p0(i64 64, ptr %82) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #11
  br label %1211

1211:                                             ; preds = %1210, %955
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  br label %1212

1212:                                             ; preds = %1211, %951
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  br label %1213

1213:                                             ; preds = %1212, %947
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #11
  br label %1214

1214:                                             ; preds = %1213, %943
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  br label %1215

1215:                                             ; preds = %1214, %939
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  br label %1216

1216:                                             ; preds = %1215, %935
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #11
  br label %1217

1217:                                             ; preds = %1216, %931
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  br label %1247

1218:                                             ; preds = %1177, %655
  %1219 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN3JPH16MotionProperties19ClampLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %1219)
          to label %1220 unwind label %458

1220:                                             ; preds = %1218
  %1221 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN3JPH16MotionProperties20ClampAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %1221)
          to label %1222 unwind label %458

1222:                                             ; preds = %1220
  %1223 = load ptr, ptr %29, align 8, !tbaa !5
  %1224 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %1223)
          to label %1225 unwind label %458

1225:                                             ; preds = %1222
  br i1 %1224, label %1226, label %1246

1226:                                             ; preds = %1225
  %1227 = load ptr, ptr %29, align 8, !tbaa !5
  %1228 = invoke noundef zeroext i1 @_ZNK3JPH4Body8IsActiveEv(ptr noundef nonnull align 16 dereferenceable(122) %1227)
          to label %1229 unwind label %458

1229:                                             ; preds = %1226
  br i1 %1228, label %1246, label %1230

1230:                                             ; preds = %1229
  %1231 = load ptr, ptr %26, align 8, !tbaa !5
  %1232 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %1231, i32 0, i32 4
  %1233 = load ptr, ptr %21, align 8, !tbaa !5
  %1234 = load i32, ptr %22, align 4, !tbaa !9
  %1235 = add nsw i32 %1234, 1
  store i32 %1235, ptr %22, align 4, !tbaa !9
  %1236 = sext i32 %1234 to i64
  %1237 = getelementptr inbounds %"class.JPH::BodyID", ptr %1233, i64 %1236
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1237, ptr align 4 %1232, i64 4, i1 false), !tbaa.struct !42
  %1238 = load i32, ptr %22, align 4, !tbaa !9
  %1239 = icmp eq i32 %1238, 64
  br i1 %1239, label %1240, label %1245

1240:                                             ; preds = %1230
  %1241 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 2
  %1242 = load ptr, ptr %21, align 8, !tbaa !5
  %1243 = load i32, ptr %22, align 4, !tbaa !9
  invoke void @_ZN3JPH11BodyManager14ActivateBodiesEPKNS_6BodyIDEi(ptr noundef nonnull align 8 dereferenceable(297) %1241, ptr noundef %1242, i32 noundef %1243)
          to label %1244 unwind label %458

1244:                                             ; preds = %1240
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %1245

1245:                                             ; preds = %1244, %1230
  br label %1246

1246:                                             ; preds = %1245, %1229, %1225
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  br label %1250

1247:                                             ; preds = %1217, %661, %458
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  br label %1248

1248:                                             ; preds = %1247, %454
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #11
  br label %1249

1249:                                             ; preds = %1248, %450
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  br label %1251

1250:                                             ; preds = %1246, %290
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  br label %1253

1251:                                             ; preds = %1249, %282, %259
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  br label %1252

1252:                                             ; preds = %1251, %255
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  br label %1305

1253:                                             ; preds = %1250, %222
  %1254 = load ptr, ptr %27, align 8, !tbaa !5
  %1255 = load ptr, ptr %26, align 8, !tbaa !5
  %1256 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %1255, i32 0, i32 0
  %1257 = load ptr, ptr %26, align 8, !tbaa !5
  %1258 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %1257, i32 0, i32 7
  %1259 = load float, ptr %1258, align 16, !tbaa !43
  %1260 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %1256, float noundef %1259)
          to label %1261 unwind label %251

1261:                                             ; preds = %1253
  %1262 = getelementptr inbounds %"class.JPH::Vec3", ptr %126, i32 0, i32 0
  %1263 = getelementptr inbounds %union.anon.13, ptr %1262, i32 0, i32 0
  %1264 = getelementptr inbounds { double, double }, ptr %1263, i32 0, i32 0
  %1265 = extractvalue { double, double } %1260, 0
  store double %1265, ptr %1264, align 16
  %1266 = getelementptr inbounds { double, double }, ptr %1263, i32 0, i32 1
  %1267 = extractvalue { double, double } %1260, 1
  store double %1267, ptr %1266, align 8
  %1268 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 0
  %1269 = load double, ptr %1268, align 16
  %1270 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 1
  %1271 = load double, ptr %1270, align 8
  invoke void @_ZN3JPH4Body15AddPositionStepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %1254, double %1269, double %1271)
          to label %1272 unwind label %251

1272:                                             ; preds = %1261
  %1273 = load ptr, ptr %28, align 8, !tbaa !5
  %1274 = invoke noundef i32 @_ZNK3JPH16MotionProperties30GetIndexInActiveBodiesInternalEv(ptr noundef nonnull align 16 dereferenceable(182) %1273)
          to label %1275 unwind label %251

1275:                                             ; preds = %1272
  %1276 = load i32, ptr %11, align 4, !tbaa !9
  %1277 = icmp uge i32 %1274, %1276
  br i1 %1277, label %1278, label %1301

1278:                                             ; preds = %1275
  %1279 = load ptr, ptr %27, align 8, !tbaa !5
  invoke void @_ZN3JPH4Body33CalculateWorldSpaceBoundsInternalEv(ptr noundef nonnull align 16 dereferenceable(122) %1279)
          to label %1280 unwind label %251

1280:                                             ; preds = %1278
  %1281 = load ptr, ptr %27, align 8, !tbaa !5
  %1282 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %1281)
          to label %1283 unwind label %251

1283:                                             ; preds = %1280
  %1284 = load ptr, ptr %23, align 8, !tbaa !5
  %1285 = load i32, ptr %24, align 4, !tbaa !9
  %1286 = add nsw i32 %1285, 1
  store i32 %1286, ptr %24, align 4, !tbaa !9
  %1287 = sext i32 %1285 to i64
  %1288 = getelementptr inbounds %"class.JPH::BodyID", ptr %1284, i64 %1287
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1288, ptr align 4 %1282, i64 4, i1 false), !tbaa.struct !42
  %1289 = load i32, ptr %24, align 4, !tbaa !9
  %1290 = icmp eq i32 %1289, 64
  br i1 %1290, label %1291, label %1300

1291:                                             ; preds = %1283
  %1292 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 9
  %1293 = load ptr, ptr %1292, align 16, !tbaa !82
  %1294 = load ptr, ptr %23, align 8, !tbaa !5
  %1295 = load i32, ptr %24, align 4, !tbaa !9
  %1296 = load ptr, ptr %1293, align 8, !tbaa !19
  %1297 = getelementptr inbounds ptr, ptr %1296, i64 19
  %1298 = load ptr, ptr %1297, align 8
  invoke void %1298(ptr noundef nonnull align 8 dereferenceable(16) %1293, ptr noundef %1294, i32 noundef %1295, i1 noundef zeroext false)
          to label %1299 unwind label %251

1299:                                             ; preds = %1291
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %1300

1300:                                             ; preds = %1299, %1283
  br label %1301

1301:                                             ; preds = %1300, %1275
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  br label %1302

1302:                                             ; preds = %1301
  %1303 = load i32, ptr %25, align 4, !tbaa !9
  %1304 = add i32 %1303, 1
  store i32 %1304, ptr %25, align 4, !tbaa !9
  br label %196, !llvm.loop !83

1305:                                             ; preds = %1252, %251
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  br label %1306

1306:                                             ; preds = %1305, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  br label %1332

1307:                                             ; preds = %200
  %1308 = load i32, ptr %22, align 4, !tbaa !9
  %1309 = icmp sgt i32 %1308, 0
  br i1 %1309, label %1310, label %1319

1310:                                             ; preds = %1307
  %1311 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 2
  %1312 = load ptr, ptr %21, align 8, !tbaa !5
  %1313 = load i32, ptr %22, align 4, !tbaa !9
  invoke void @_ZN3JPH11BodyManager14ActivateBodiesEPKNS_6BodyIDEi(ptr noundef nonnull align 8 dereferenceable(297) %1311, ptr noundef %1312, i32 noundef %1313)
          to label %1314 unwind label %1315

1314:                                             ; preds = %1310
  br label %1319

1315:                                             ; preds = %1322, %1310
  %1316 = landingpad { ptr, i32 }
          cleanup
  %1317 = extractvalue { ptr, i32 } %1316, 0
  store ptr %1317, ptr %9, align 8
  %1318 = extractvalue { ptr, i32 } %1316, 1
  store i32 %1318, ptr %10, align 4
  br label %1332

1319:                                             ; preds = %1314, %1307
  %1320 = load i32, ptr %24, align 4, !tbaa !9
  %1321 = icmp sgt i32 %1320, 0
  br i1 %1321, label %1322, label %1331

1322:                                             ; preds = %1319
  %1323 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %127, i32 0, i32 9
  %1324 = load ptr, ptr %1323, align 16, !tbaa !82
  %1325 = load ptr, ptr %23, align 8, !tbaa !5
  %1326 = load i32, ptr %24, align 4, !tbaa !9
  %1327 = load ptr, ptr %1324, align 8, !tbaa !19
  %1328 = getelementptr inbounds ptr, ptr %1327, i64 19
  %1329 = load ptr, ptr %1328, align 8
  invoke void %1329(ptr noundef nonnull align 8 dereferenceable(16) %1324, ptr noundef %1325, i32 noundef %1326, i1 noundef zeroext false)
          to label %1330 unwind label %1315

1330:                                             ; preds = %1322
  br label %1331

1331:                                             ; preds = %1330, %1319
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  call void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %15) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %1336

1332:                                             ; preds = %1315, %1306
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  br label %1333

1333:                                             ; preds = %1332, %201
  call void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %15) #11
  br label %1334

1334:                                             ; preds = %1333, %183
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #11
  br label %1335

1335:                                             ; preds = %1334, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %1377

1336:                                             ; preds = %1331, %128
  %1337 = load ptr, ptr %12, align 8, !tbaa !5
  %1338 = load ptr, ptr %6, align 8, !tbaa !5
  %1339 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1338, i32 0, i32 29
  %1340 = load ptr, ptr %1339, align 8, !tbaa !84
  %1341 = load ptr, ptr %6, align 8, !tbaa !5
  %1342 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1341, i32 0, i32 30
  %1343 = load i32, ptr %1342, align 8, !tbaa !85
  %1344 = zext i32 %1343 to i64
  %1345 = mul i64 %1344, 4
  %1346 = trunc i64 %1345 to i32
  %1347 = load ptr, ptr %1337, align 8, !tbaa !19
  %1348 = getelementptr inbounds ptr, ptr %1347, i64 3
  %1349 = load ptr, ptr %1348, align 8
  invoke void %1349(ptr noundef nonnull align 8 dereferenceable(8) %1337, ptr noundef %1340, i32 noundef %1346)
          to label %1350 unwind label %1373

1350:                                             ; preds = %1336
  %1351 = load ptr, ptr %6, align 8, !tbaa !5
  %1352 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1351, i32 0, i32 29
  store ptr null, ptr %1352, align 8, !tbaa !84
  %1353 = load ptr, ptr %6, align 8, !tbaa !5
  %1354 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1353, i32 0, i32 30
  store i32 0, ptr %1354, align 8, !tbaa !85
  %1355 = load ptr, ptr %12, align 8, !tbaa !5
  %1356 = load ptr, ptr %6, align 8, !tbaa !5
  %1357 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1356, i32 0, i32 25
  %1358 = load ptr, ptr %1357, align 8, !tbaa !25
  %1359 = load ptr, ptr %6, align 8, !tbaa !5
  %1360 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1359, i32 0, i32 26
  %1361 = load i32, ptr %1360, align 8, !tbaa !86
  %1362 = zext i32 %1361 to i64
  %1363 = mul i64 %1362, 144
  %1364 = trunc i64 %1363 to i32
  %1365 = load ptr, ptr %1355, align 8, !tbaa !19
  %1366 = getelementptr inbounds ptr, ptr %1365, i64 3
  %1367 = load ptr, ptr %1366, align 8
  invoke void %1367(ptr noundef nonnull align 8 dereferenceable(8) %1355, ptr noundef %1358, i32 noundef %1364)
          to label %1368 unwind label %1373

1368:                                             ; preds = %1350
  %1369 = load ptr, ptr %6, align 8, !tbaa !5
  %1370 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1369, i32 0, i32 25
  store ptr null, ptr %1370, align 8, !tbaa !25
  %1371 = load ptr, ptr %6, align 8, !tbaa !5
  %1372 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1371, i32 0, i32 26
  store i32 0, ptr %1372, align 8, !tbaa !86
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #11
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #11
  ret void

1373:                                             ; preds = %1350, %1336
  %1374 = landingpad { ptr, i32 }
          cleanup
  %1375 = extractvalue { ptr, i32 } %1374, 0
  store ptr %1375, ptr %9, align 8
  %1376 = extractvalue { ptr, i32 } %1374, 1
  store i32 %1376, ptr %10, align 4
  br label %1377

1377:                                             ; preds = %1373, %1335
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #11
  br label %1378

1378:                                             ; preds = %1377, %175
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #11
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #11
  br label %1379

1379:                                             ; preds = %1378
  %1380 = load ptr, ptr %9, align 8
  %1381 = load i32, ptr %10, align 4
  %1382 = insertvalue { ptr, i32 } poison, ptr %1380, 0
  %1383 = insertvalue { ptr, i32 } %1382, i32 %1381, 1
  resume { ptr, i32 } %1383
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0EC2EOS6_"(ptr noundef nonnull align 8 dereferenceable(25), ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZN3JPH9QuickSortIPPNS_20PhysicsUpdateContext4Step7CCDBodyEZNS_13PhysicsSystem21JobResolveCCDContactsEPS1_PS2_E3$_1EEvT_SA_T0_"(ptr noundef, ptr noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @_ZN3JPHL11sGetCCDBodyERKNS_4BodyEPNS_20PhysicsUpdateContext4StepE(ptr noundef nonnull align 16 dereferenceable(122), ptr noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyIDneERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Body19GetPointVelocityCOMENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122), double, double) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties14GetInverseMassEv(ptr noundef nonnull align 16 dereferenceable(182)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH4Body28GetMotionPropertiesUncheckedEv(ptr noundef nonnull align 16 dereferenceable(122)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH18AxisConstraintPartC2Ev(ptr noundef nonnull align 4 dereferenceable(64)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH18AxisConstraintPart45CalculateConstraintPropertiesWithMassOverrideERKNS_4BodyEffNS_4Vec3ES3_ffS4_S4_f(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(122), float noundef, float noundef, double, double, ptr noundef nonnull align 16 dereferenceable(122), float noundef, float noundef, double, double, ptr noundef byval(%"class.JPH::Vec3") align 16, float noundef) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH18AxisConstraintPart39SolveVelocityConstraintWithMassOverrideERNS_4BodyEfS2_fNS_4Vec3Eff(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(122), float noundef, ptr noundef nonnull align 16 dereferenceable(122), float noundef, double, double, float noundef, float noundef) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH18AxisConstraintPart14GetTotalLambdaEv(ptr noundef nonnull align 4 dereferenceable(64)) #3 align 2

declare noundef i32 @_ZNK3JPH13SoftBodyShape12GetFaceIndexERKNS_10SubShapeIDE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 4 dereferenceable(4)) #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH24SoftBodyMotionProperties7GetFaceEj(ptr noundef nonnull align 16 dereferenceable(372), i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372), i32 noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH12ClosestPoint25GetBaryCentricCoordinatesENS_4Vec3ES1_S1_RfS2_S2_(double, double, double, double, double, double, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body17GetInverseInertiaEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH16MotionProperties18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) #1 align 2

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25)) unnamed_addr #8 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 8}
!12 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 36, !14, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !16, i64 72, !10, i64 104, !6, i64 112, !14, i64 120}
!13 = !{!"float", !7, i64 0}
!14 = !{!"_ZTSSt6atomicIjE", !15, i64 0}
!15 = !{!"_ZTSSt13__atomic_baseIjE", !10, i64 0}
!16 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !17, i64 0, !18, i64 8, !18, i64 16, !6, i64 24}
!17 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !8, i64 0}
!21 = !{!22, !6, i64 0}
!22 = !{!"_ZTSZN3JPH13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS1_4StepEE3$_0", !6, i64 0, !6, i64 8, !10, i64 16}
!23 = !{!22, !6, i64 8}
!24 = !{!22, !10, i64 16}
!25 = !{!26, !6, i64 4568}
!26 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !6, i64 0, !27, i64 8, !27, i64 9, !28, i64 16, !10, i64 48, !14, i64 52, !7, i64 56, !14, i64 116, !7, i64 120, !14, i64 180, !7, i64 184, !14, i64 244, !7, i64 248, !14, i64 308, !7, i64 312, !14, i64 372, !7, i64 376, !29, i64 436, !10, i64 4536, !14, i64 4540, !14, i64 4544, !14, i64 4548, !14, i64 4552, !14, i64 4556, !14, i64 4560, !6, i64 4568, !10, i64 4576, !14, i64 4580, !14, i64 4584, !6, i64 4592, !10, i64 4600, !30, i64 4608, !32, i64 4616, !32, i64 4880, !32, i64 5144, !32, i64 5408, !30, i64 5672, !32, i64 5680, !30, i64 5944, !30, i64 5952, !30, i64 5960, !32, i64 5968, !30, i64 6232, !32, i64 6240, !30, i64 6504, !30, i64 6512, !32, i64 6520, !30, i64 6784, !30, i64 6792, !32, i64 6800, !32, i64 7064, !30, i64 7328, !30, i64 7336}
!27 = !{!"bool", !7, i64 0}
!28 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !7, i64 0}
!29 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !10, i64 0, !7, i64 4}
!30 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !31, i64 0}
!31 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !6, i64 0}
!32 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !10, i64 0, !7, i64 8}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{i64 2160030606}
!36 = !{!37, !13, i64 60}
!37 = !{!"_ZTSN3JPH20PhysicsUpdateContext4Step7CCDBodyE", !38, i64 0, !38, i64 16, !38, i64 32, !39, i64 48, !39, i64 52, !40, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !41, i64 80}
!38 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!39 = !{!"_ZTSN3JPH6BodyIDE", !10, i64 0}
!40 = !{!"_ZTSN3JPH10SubShapeIDE", !10, i64 0}
!41 = !{!"_ZTSN3JPH15ContactSettingsE", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !27, i64 24, !38, i64 32, !38, i64 48}
!42 = !{i64 0, i64 4, !9}
!43 = !{!37, !13, i64 64}
!44 = !{i64 0, i64 16, !45}
!45 = !{!7, !7, i64 0}
!46 = !{!41, !13, i64 8}
!47 = !{!13, !13, i64 0}
!48 = !{!41, !13, i64 4}
!49 = !{!50, !13, i64 552}
!50 = !{!"_ZTSN3JPH13PhysicsSystemE", !6, i64 0, !6, i64 8, !51, i64 16, !60, i64 320, !62, i64 336, !63, i64 352, !63, i64 376, !64, i64 400, !64, i64 416, !6, i64 432, !6, i64 440, !6, i64 448, !65, i64 456, !67, i64 488, !68, i64 576, !69, i64 824, !71, i64 904, !72, i64 1016, !53, i64 1080, !73, i64 1128, !38, i64 1152, !13, i64 1168}
!51 = !{!"_ZTSN3JPH11BodyManagerE", !52, i64 0, !10, i64 24, !18, i64 32, !53, i64 40, !57, i64 88, !58, i64 104, !53, i64 128, !7, i64 176, !7, i64 192, !10, i64 200, !53, i64 208, !59, i64 256, !6, i64 280, !6, i64 288, !27, i64 296}
!52 = !{!"_ZTSN3JPH5ArrayIPNS_4BodyENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!53 = !{!"_ZTSN3JPH5MutexE", !54, i64 0, !56, i64 40}
!54 = !{!"_ZTSSt5mutex", !55, i64 0}
!55 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!56 = !{!"_ZTSNSt6thread2idE", !18, i64 0}
!57 = !{!"_ZTSN3JPH10MutexArrayINS_11SharedMutexEEE", !6, i64 0, !10, i64 8}
!58 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!59 = !{!"_ZTSN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!60 = !{!"_ZTSN3JPH23BodyLockInterfaceNoLockE", !61, i64 0}
!61 = !{!"_ZTSN3JPH17BodyLockInterfaceE", !6, i64 8}
!62 = !{!"_ZTSN3JPH24BodyLockInterfaceLockingE", !61, i64 0}
!63 = !{!"_ZTSN3JPH13BodyInterfaceE", !6, i64 0, !6, i64 8, !6, i64 16}
!64 = !{!"_ZTSN3JPH16NarrowPhaseQueryE", !6, i64 0, !6, i64 8}
!65 = !{!"_ZTSSt8functionIFvRKN3JPH4BodyES3_RKNS0_5Mat44ES6_RNS0_20CollideShapeSettingsERNS0_18CollisionCollectorINS0_18CollideShapeResultENS0_36CollisionCollectorTraitsCollideShapeEEERKNS0_11ShapeFilterEEE", !66, i64 0, !6, i64 24}
!66 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!67 = !{!"_ZTSN3JPH15PhysicsSettingsE", !10, i64 0, !10, i64 4, !10, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !10, i64 56, !10, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !27, i64 76, !27, i64 77, !27, i64 78, !27, i64 79, !27, i64 80, !27, i64 81, !27, i64 82}
!68 = !{!"_ZTSN3JPH24ContactConstraintManagerE", !7, i64 8, !10, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !10, i64 232, !14, i64 236, !6, i64 240}
!69 = !{!"_ZTSN3JPH17ConstraintManagerE", !6, i64 0, !70, i64 8, !53, i64 32}
!70 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!71 = !{!"_ZTSN3JPH13IslandBuilderE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108}
!72 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !14, i64 36, !10, i64 40, !6, i64 48, !14, i64 56}
!73 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!74 = !{!41, !13, i64 16}
!75 = !{!41, !13, i64 12}
!76 = !{!41, !13, i64 20}
!77 = !{!41, !13, i64 0}
!78 = !{!79, !13, i64 76}
!79 = !{!"_ZTSN3JPH14SoftBodyVertexE", !38, i64 0, !38, i64 16, !38, i64 32, !80, i64 48, !10, i64 64, !27, i64 68, !13, i64 72, !13, i64 76}
!80 = !{!"_ZTSN3JPH5PlaneE", !81, i64 0}
!81 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!82 = !{!50, !6, i64 432}
!83 = distinct !{!83, !34}
!84 = !{!26, !6, i64 4592}
!85 = !{!26, !10, i64 4600}
!86 = !{!26, !10, i64 4576}


; 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::BodyAccess::Grant" = type { i8 }
%"class.JPH::BodyManager::GrantActiveBodiesAccess" = type { i8 }
%"class.JPH::ScopeExit" = type { %class.anon.55, i8, [7 x i8] }
%class.anon.55 = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::Vec3" = type { %union.anon.13 }
%union.anon.13 = type { <4 x float> }
%"class.JPH::AxisConstraintPart" = type { %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float3", float, %"class.JPH::SpringPart", float }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SpringPart" = type { float, float }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.42 }
%union.anon.42 = type { <4 x float> }

@.str.24 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [90 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10BodyAccess5GrantC2ENS0_7EAccessES2_(ptr noundef nonnull align 1 dereferenceable(1), i8 noundef zeroext, i8 noundef zeroext) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessC2Ebb(ptr noundef nonnull align 1 dereferenceable(1), i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body8IsActiveEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #2 align 2

declare void @_ZN3JPH11BodyManager14ActivateBodiesEPKNS_6BodyIDEi(ptr noundef nonnull align 8 dereferenceable(297), ptr noundef, i32 noundef) local_unnamed_addr #5

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #4 align 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 #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties19ClampLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties20ClampAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #1 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH16MotionProperties30GetIndexInActiveBodiesInternalEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #4 align 2

declare void @_ZN3JPH4Body33CalculateWorldSpaceBoundsInternalEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #5

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS1_4StepE(ptr noundef nonnull align 16 dereferenceable(1172) %0, ptr nocapture noundef readonly %1, ptr noundef %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.JPH::BodyAccess::Grant", align 1
  %5 = alloca %"class.JPH::BodyManager::GrantActiveBodiesAccess", align 1
  %6 = alloca %"class.JPH::ScopeExit", align 8
  %7 = alloca %class.anon.55, align 8
  %8 = alloca %"class.JPH::BodyID", align 4
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::AxisConstraintPart", align 4
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::AxisConstraintPart", align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca %"class.JPH::Mat44", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Mat44", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #11
  call void @_ZN3JPH10BodyAccess5GrantC2ENS0_7EAccessES2_(ptr noundef nonnull align 1 dereferenceable(1) %4, i8 noundef zeroext 3, i8 noundef zeroext 3)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #11
  invoke void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessC2Ebb(ptr noundef nonnull align 1 dereferenceable(1) %5, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %28 unwind label %64

28:                                               ; preds = %3
  %29 = getelementptr inbounds i8, ptr %2, i64 372
  %30 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %29) #11
  %31 = getelementptr inbounds i8, ptr %1, i64 8
  %32 = load ptr, ptr %31, align 8, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %2, i64 4580
  %34 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %33) #11
  %.not = icmp eq i32 %34, 0
  br i1 %.not, label %523, label %35

35:                                               ; preds = %28
  %36 = shl i32 %34, 3
  %37 = load ptr, ptr %32, align 8, !tbaa !17
  %38 = getelementptr inbounds i8, ptr %37, i64 16
  %39 = load ptr, ptr %38, align 8
  %40 = invoke noundef ptr %39(ptr noundef nonnull align 8 dereferenceable(8) %32, i32 noundef %36)
          to label %.lr.ph.preheader unwind label %66

.lr.ph.preheader:                                 ; preds = %35
  %41 = ptrtoint ptr %40 to i64
  %42 = zext i32 %34 to i64
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #11
  store ptr %32, ptr %7, align 8, !tbaa !19
  %43 = getelementptr inbounds i8, ptr %7, i64 8
  store ptr %40, ptr %43, align 8, !tbaa !21
  %44 = getelementptr inbounds i8, ptr %7, i64 16
  store i32 %34, ptr %44, align 8, !tbaa !22
  call void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0EC2EOS6_"(ptr noundef nonnull align 8 dereferenceable(25) %6, ptr noundef nonnull align 8 dereferenceable(20) %7)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #11
  %45 = getelementptr inbounds ptr, ptr %40, i64 %42
  %46 = getelementptr inbounds i8, ptr %2, i64 4568
  %47 = load ptr, ptr %46, align 8, !tbaa !23
  %48 = shl nuw nsw i64 %42, 3
  %49 = add i64 %48, %41
  %50 = add i64 %41, 8
  %umax453 = call i64 @llvm.umax.i64(i64 %49, i64 %50)
  %51 = xor i64 %41, -1
  %52 = add i64 %umax453, %51
  %53 = lshr i64 %52, 3
  %54 = add nuw nsw i64 %53, 1
  %min.iters.check = icmp ult i64 %52, 24
  br i1 %min.iters.check, label %.lr.ph.preheader457, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %54, 4611686018427387900
  %55 = mul i64 %n.vec, 144
  %ind.end = getelementptr i8, ptr %47, i64 %55
  %56 = shl i64 %n.vec, 3
  %ind.end454 = getelementptr i8, ptr %40, i64 %56
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %pointer.phi = phi ptr [ %47, %vector.ph ], [ %ptr.ind, %vector.body ]
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %57 = getelementptr i8, ptr %pointer.phi, <2 x i64> <i64 0, i64 144>
  %58 = getelementptr i8, ptr %pointer.phi, <2 x i64> <i64 288, i64 432>
  %offset.idx = shl i64 %index, 3
  %next.gep = getelementptr i8, ptr %40, i64 %offset.idx
  %59 = getelementptr i8, ptr %next.gep, i64 16
  store <2 x ptr> %57, ptr %next.gep, align 8, !tbaa !31
  store <2 x ptr> %58, ptr %59, align 8, !tbaa !31
  %index.next = add nuw i64 %index, 4
  %ptr.ind = getelementptr i8, ptr %pointer.phi, i64 576
  %60 = icmp eq i64 %index.next, %n.vec
  br i1 %60, label %middle.block, label %vector.body, !llvm.loop !32

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %54, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader457

.lr.ph.preheader457:                              ; preds = %middle.block, %.lr.ph.preheader
  %.0321448.ph = phi ptr [ %47, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0322447.ph = phi ptr [ %40, %.lr.ph.preheader ], [ %ind.end454, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader457, %.lr.ph
  %.0321448 = phi ptr [ %61, %.lr.ph ], [ %.0321448.ph, %.lr.ph.preheader457 ]
  %.0322447 = phi ptr [ %62, %.lr.ph ], [ %.0322447.ph, %.lr.ph.preheader457 ]
  %61 = getelementptr inbounds i8, ptr %.0321448, i64 144
  %62 = getelementptr inbounds i8, ptr %.0322447, i64 8
  store ptr %.0321448, ptr %.0322447, align 8, !tbaa !31
  %63 = icmp ult ptr %62, %45
  br i1 %63, label %.lr.ph, label %._crit_edge, !llvm.loop !36

64:                                               ; preds = %3
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %545

66:                                               ; preds = %35
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %544

._crit_edge:                                      ; preds = %.lr.ph, %middle.block
  invoke void @"_ZN3JPH9QuickSortIPPNS_20PhysicsUpdateContext4Step7CCDBodyEZNS_13PhysicsSystem21JobResolveCCDContactsEPS1_PS2_E3$_1EEvT_SA_T0_"(ptr noundef %40, ptr noundef nonnull %45)
          to label %68 unwind label %88

68:                                               ; preds = %._crit_edge
  %69 = alloca [256 x i8], align 16
  %70 = alloca [256 x i8], align 16
  %71 = getelementptr inbounds i8, ptr %0, i64 16
  %72 = getelementptr inbounds i8, ptr %10, i64 8
  %73 = getelementptr inbounds i8, ptr %9, i64 8
  %74 = getelementptr inbounds i8, ptr %22, i64 8
  %75 = getelementptr inbounds i8, ptr %21, i64 8
  %76 = getelementptr inbounds i8, ptr %20, i64 8
  %77 = getelementptr inbounds i8, ptr %23, i64 8
  %78 = getelementptr inbounds i8, ptr %0, i64 552
  %79 = getelementptr inbounds i8, ptr %24, i64 8
  %80 = getelementptr inbounds i8, ptr %25, i64 8
  %81 = getelementptr inbounds i8, ptr %27, i64 8
  %82 = getelementptr inbounds i8, ptr %11, i64 8
  %83 = getelementptr inbounds i8, ptr %12, i64 8
  %84 = getelementptr inbounds i8, ptr %14, i64 8
  %85 = getelementptr inbounds i8, ptr %0, i64 432
  %umax = call i32 @llvm.umax.i32(i32 %34, i32 1)
  %wide.trip.count = zext i32 %umax to i64
  br label %90

86:                                               ; preds = %510
  %87 = icmp sgt i32 %.3326, 0
  br i1 %87, label %511, label %514

88:                                               ; preds = %._crit_edge
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %522

90:                                               ; preds = %68, %510
  %indvars.iv = phi i64 [ 0, %68 ], [ %indvars.iv.next, %510 ]
  %.0323451 = phi i32 [ 0, %68 ], [ %.3326, %510 ]
  %.0327450 = phi i32 [ 0, %68 ], [ %.1328, %510 ]
  %91 = getelementptr inbounds ptr, ptr %40, i64 %indvars.iv
  %92 = load ptr, ptr %91, align 8, !tbaa !31
  %93 = getelementptr inbounds i8, ptr %92, i64 48
  %94 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %71, ptr noundef nonnull align 4 dereferenceable(4) %93)
          to label %95 unwind label %112

95:                                               ; preds = %90
  %96 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %94)
          to label %97 unwind label %114

97:                                               ; preds = %95
  %98 = getelementptr inbounds i8, ptr %92, i64 52
  %99 = call noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4) %98)
  br i1 %99, label %488, label %100

100:                                              ; preds = %97
  %101 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %71, ptr noundef nonnull align 4 dereferenceable(4) %98)
          to label %102 unwind label %116

102:                                              ; preds = %100
  %103 = invoke noundef ptr @_ZN3JPHL11sGetCCDBodyERKNS_4BodyEPNS_20PhysicsUpdateContext4StepE(ptr noundef nonnull align 16 dereferenceable(122) %101, ptr noundef %2)
          to label %104 unwind label %118

104:                                              ; preds = %102
  %cond = icmp eq ptr %103, null
  br i1 %cond, label %134, label %105

105:                                              ; preds = %104
  %106 = getelementptr inbounds i8, ptr %103, i64 52
  %107 = call noundef zeroext i1 @_ZNK3JPH6BodyIDneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 4 dereferenceable(4) %93)
  br i1 %107, label %120, label %108

108:                                              ; preds = %105
  %109 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef nonnull @.str.63, ptr noundef nonnull @.str.24, i32 noundef 2051, ptr noundef nonnull @.str.64)
          to label %110 unwind label %118

110:                                              ; preds = %108
  br i1 %109, label %111, label %120

111:                                              ; preds = %110
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !37
  br label %120

112:                                              ; preds = %90
  %113 = landingpad { ptr, i32 }
          cleanup
  br label %522

114:                                              ; preds = %505, %497, %492, %488, %95
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %522

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

118:                                              ; preds = %108, %102
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %522

120:                                              ; preds = %111, %110, %105
  %121 = getelementptr inbounds i8, ptr %103, i64 60
  %122 = load float, ptr %121, align 4, !tbaa !38
  %123 = getelementptr inbounds i8, ptr %92, i64 60
  %124 = load float, ptr %123, align 4, !tbaa !38
  %125 = fcmp ogt float %122, %124
  br i1 %125, label %126, label %130

126:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #11
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %127 = load i32, ptr %8, align 4, !tbaa !44
  store i32 %127, ptr %106, align 4, !tbaa !44
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  %128 = load float, ptr %123, align 4, !tbaa !38
  %129 = getelementptr inbounds i8, ptr %103, i64 64
  store float %128, ptr %129, align 16, !tbaa !45
  %.pre = load float, ptr %121, align 4, !tbaa !38
  br label %130

130:                                              ; preds = %126, %120
  %131 = phi float [ %128, %126 ], [ %124, %120 ]
  %132 = phi float [ %.pre, %126 ], [ %122, %120 ]
  %133 = fcmp ult float %132, %131
  br i1 %133, label %488, label %134

134:                                              ; preds = %104, %130
  %135 = getelementptr inbounds i8, ptr %92, i64 80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #11
  %136 = getelementptr inbounds i8, ptr %92, i64 32
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #11
  %137 = invoke { double, double } @_ZNK3JPH4Body23GetCenterOfMassPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %94)
          to label %138 unwind label %193

138:                                              ; preds = %134
  %139 = extractvalue { double, double } %137, 0
  store double %139, ptr %10, align 16
  %140 = extractvalue { double, double } %137, 1
  store double %140, ptr %72, align 8
  %141 = getelementptr inbounds i8, ptr %92, i64 60
  %142 = load float, ptr %141, align 4, !tbaa !38
  %.sroa.0147.0.copyload = load double, ptr %92, align 16
  %.sroa.2148.0..sroa_idx = getelementptr inbounds i8, ptr %92, i64 8
  %.sroa.2148.0.copyload = load double, ptr %.sroa.2148.0..sroa_idx, align 8, !tbaa !46
  %143 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %142, double %.sroa.0147.0.copyload, double %.sroa.2148.0.copyload)
          to label %144 unwind label %193

144:                                              ; preds = %138
  %145 = extractvalue { double, double } %143, 0
  %146 = extractvalue { double, double } %143, 1
  %147 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %145, double %146)
          to label %148 unwind label %193

148:                                              ; preds = %144
  %149 = extractvalue { double, double } %147, 0
  %150 = extractvalue { double, double } %147, 1
  %151 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %136, double %149, double %150)
          to label %152 unwind label %193

152:                                              ; preds = %148
  %153 = extractvalue { double, double } %151, 0
  store double %153, ptr %9, align 16
  %154 = extractvalue { double, double } %151, 1
  store double %154, ptr %73, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  %155 = invoke { double, double } @_ZNK3JPH4Body19GetPointVelocityCOMENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %94, double %153, double %154)
          to label %156 unwind label %195

156:                                              ; preds = %152
  %157 = extractvalue { double, double } %155, 0
  %158 = extractvalue { double, double } %155, 1
  %159 = getelementptr inbounds i8, ptr %92, i64 88
  %160 = load float, ptr %159, align 8, !tbaa !47
  %161 = invoke noundef float @_ZNK3JPH16MotionProperties14GetInverseMassEv(ptr noundef nonnull align 16 dereferenceable(182) %96)
          to label %162 unwind label %197

162:                                              ; preds = %156
  %163 = fmul float %160, %161
  %164 = call noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  br i1 %164, label %165, label %267

165:                                              ; preds = %162
  %166 = invoke { double, double } @_ZNK3JPH4Body23GetCenterOfMassPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
          to label %167 unwind label %199

167:                                              ; preds = %165
  %168 = extractvalue { double, double } %166, 0
  %169 = extractvalue { double, double } %166, 1
  %170 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %136, double %168, double %169)
          to label %171 unwind label %199

171:                                              ; preds = %167
  %172 = extractvalue { double, double } %170, 0
  %173 = extractvalue { double, double } %170, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #11
  %174 = invoke { double, double } @_ZNK3JPH4Body19GetPointVelocityCOMENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %101, double %172, double %173)
          to label %175 unwind label %201

175:                                              ; preds = %171
  %176 = extractvalue { double, double } %174, 0
  store double %176, ptr %11, align 16
  %177 = extractvalue { double, double } %174, 1
  store double %177, ptr %82, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #11
  %178 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %157, double %158)
          to label %179 unwind label %203

179:                                              ; preds = %175
  %180 = extractvalue { double, double } %178, 0
  store double %180, ptr %12, align 16
  %181 = extractvalue { double, double } %178, 1
  store double %181, ptr %83, align 8
  %182 = getelementptr inbounds i8, ptr %92, i64 16
  %.sroa.0125.0.copyload = load double, ptr %182, align 16
  %.sroa.2126.0..sroa_idx = getelementptr inbounds i8, ptr %92, i64 24
  %.sroa.2126.0.copyload = load double, ptr %.sroa.2126.0..sroa_idx, align 8, !tbaa !46
  %183 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %.sroa.0125.0.copyload, double %.sroa.2126.0.copyload)
  %184 = getelementptr inbounds i8, ptr %92, i64 84
  %185 = load float, ptr %184, align 4, !tbaa !48
  %186 = fcmp ogt float %185, 0.000000e+00
  br i1 %186, label %187, label %205

187:                                              ; preds = %179
  %188 = load float, ptr %78, align 8, !tbaa !49
  %189 = fneg float %188
  %190 = fcmp olt float %183, %189
  br i1 %190, label %191, label %205

191:                                              ; preds = %187
  %192 = fmul float %183, %185
  br label %205

193:                                              ; preds = %148, %144, %138, %134
  %194 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  br label %487

195:                                              ; preds = %152
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %487

197:                                              ; preds = %485, %474, %473, %156
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %487

199:                                              ; preds = %167, %165
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %487

201:                                              ; preds = %171
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %266

203:                                              ; preds = %175
  %204 = landingpad { ptr, i32 }
          cleanup
  br label %265

205:                                              ; preds = %179, %187, %191
  %.0330 = phi float [ %192, %191 ], [ 0.000000e+00, %187 ], [ 0.000000e+00, %179 ]
  %206 = call noundef ptr @_ZN3JPH4Body28GetMotionPropertiesUncheckedEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  %.not364 = icmp eq ptr %206, null
  br i1 %.not364, label %213, label %207

207:                                              ; preds = %205
  %208 = getelementptr inbounds i8, ptr %92, i64 96
  %209 = load float, ptr %208, align 16, !tbaa !74
  %210 = call noundef ptr @_ZN3JPH4Body28GetMotionPropertiesUncheckedEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  %211 = call noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182) %210)
  %212 = fmul float %209, %211
  br label %213

213:                                              ; preds = %205, %207
  %214 = phi float [ %212, %207 ], [ 0.000000e+00, %205 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #11
  call void @_ZN3JPH18AxisConstraintPartC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %13) #11
  %215 = getelementptr inbounds i8, ptr %92, i64 92
  %216 = load float, ptr %215, align 4, !tbaa !75
  %.sroa.0118.0.copyload = load double, ptr %9, align 16
  %.sroa.2119.0.copyload = load double, ptr %73, align 8, !tbaa !46
  %217 = getelementptr inbounds i8, ptr %92, i64 100
  %218 = load float, ptr %217, align 4, !tbaa !76
  invoke void @_ZN3JPH18AxisConstraintPart45CalculateConstraintPropertiesWithMassOverrideERKNS_4BodyEffNS_4Vec3ES3_ffS4_S4_f(ptr noundef nonnull align 4 dereferenceable(64) %13, ptr noundef nonnull align 16 dereferenceable(122) %94, float noundef %163, float noundef %216, double %.sroa.0118.0.copyload, double %.sroa.2119.0.copyload, ptr noundef nonnull align 16 dereferenceable(122) %101, float noundef %214, float noundef %218, double %172, double %173, ptr noundef nonnull byval(%"class.JPH::Vec3") align 16 %182, float noundef %.0330)
          to label %219 unwind label %247

219:                                              ; preds = %213
  %.sroa.0114.0.copyload = load double, ptr %182, align 16
  %.sroa.2115.0.copyload = load double, ptr %.sroa.2126.0..sroa_idx, align 8, !tbaa !46
  %220 = invoke noundef zeroext i1 @_ZN3JPH18AxisConstraintPart39SolveVelocityConstraintWithMassOverrideERNS_4BodyEfS2_fNS_4Vec3Eff(ptr noundef nonnull align 4 dereferenceable(64) %13, ptr noundef nonnull align 16 dereferenceable(122) %94, float noundef %163, ptr noundef nonnull align 16 dereferenceable(122) %101, float noundef %214, double %.sroa.0114.0.copyload, double %.sroa.2115.0.copyload, float noundef 0xC7EFFFFFE0000000, float noundef 0x47EFFFFFE0000000)
          to label %221 unwind label %247

221:                                              ; preds = %219
  %222 = load float, ptr %135, align 16, !tbaa !77
  %223 = fcmp ogt float %222, 0.000000e+00
  br i1 %223, label %224, label %255

224:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #11
  %.sroa.0110.0.copyload = load double, ptr %182, align 16
  %.sroa.2111.0.copyload = load double, ptr %.sroa.2126.0..sroa_idx, align 8, !tbaa !46
  %225 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %183, double %.sroa.0110.0.copyload, double %.sroa.2111.0.copyload)
          to label %226 unwind label %249

226:                                              ; preds = %224
  %227 = extractvalue { double, double } %225, 0
  %228 = extractvalue { double, double } %225, 1
  %229 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %227, double %228)
          to label %230 unwind label %249

230:                                              ; preds = %226
  %231 = extractvalue { double, double } %229, 0
  store double %231, ptr %14, align 16
  %232 = extractvalue { double, double } %229, 1
  store double %232, ptr %84, align 8
  %233 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %14)
  %234 = fcmp ogt float %233, 0x3D71979980000000
  br i1 %234, label %235, label %253

235:                                              ; preds = %230
  %236 = call noundef float @_ZSt4sqrtf(float noundef %233)
  %237 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %14, float noundef %236)
  %238 = load float, ptr %135, align 16, !tbaa !77
  %239 = call noundef float @_ZNK3JPH18AxisConstraintPart14GetTotalLambdaEv(ptr noundef nonnull align 4 dereferenceable(64) %13)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #11
  call void @_ZN3JPH18AxisConstraintPartC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %15) #11
  %240 = load float, ptr %215, align 4, !tbaa !75
  %.sroa.0104.0.copyload = load double, ptr %9, align 16
  %.sroa.2105.0.copyload = load double, ptr %73, align 8, !tbaa !46
  %241 = load float, ptr %217, align 4, !tbaa !76
  invoke void @_ZN3JPH18AxisConstraintPart45CalculateConstraintPropertiesWithMassOverrideERKNS_4BodyEffNS_4Vec3ES3_ffS4_S4_f(ptr noundef nonnull align 4 dereferenceable(64) %15, ptr noundef nonnull align 16 dereferenceable(122) %94, float noundef %163, float noundef %240, double %.sroa.0104.0.copyload, double %.sroa.2105.0.copyload, ptr noundef nonnull align 16 dereferenceable(122) %101, float noundef %214, float noundef %241, double %172, double %173, ptr noundef nonnull byval(%"class.JPH::Vec3") align 16 %14, float noundef 0.000000e+00)
          to label %242 unwind label %251

242:                                              ; preds = %235
  %243 = fmul float %238, %239
  %.sroa.0100.0.copyload = load double, ptr %14, align 16
  %.sroa.2101.0.copyload = load double, ptr %84, align 8, !tbaa !46
  %244 = fneg float %243
  %245 = invoke noundef zeroext i1 @_ZN3JPH18AxisConstraintPart39SolveVelocityConstraintWithMassOverrideERNS_4BodyEfS2_fNS_4Vec3Eff(ptr noundef nonnull align 4 dereferenceable(64) %15, ptr noundef nonnull align 16 dereferenceable(122) %94, float noundef %163, ptr noundef nonnull align 16 dereferenceable(122) %101, float noundef %214, double %.sroa.0100.0.copyload, double %.sroa.2101.0.copyload, float noundef %244, float noundef %243)
          to label %246 unwind label %251

246:                                              ; preds = %242
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #11
  br label %253

247:                                              ; preds = %219, %213
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %264

249:                                              ; preds = %226, %224
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %254

251:                                              ; preds = %242, %235
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #11
  br label %254

253:                                              ; preds = %246, %230
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #11
  br label %255

254:                                              ; preds = %251, %249
  %.pn365 = phi { ptr, i32 } [ %252, %251 ], [ %250, %249 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #11
  br label %264

255:                                              ; preds = %253, %221
  %256 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  br i1 %256, label %257, label %263

257:                                              ; preds = %255
  %258 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
          to label %259 unwind label %261

259:                                              ; preds = %257
  invoke void @_ZN3JPH16MotionProperties19ClampLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %258)
          to label %260 unwind label %261

260:                                              ; preds = %259
  invoke void @_ZN3JPH16MotionProperties20ClampAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %258)
          to label %263 unwind label %261

261:                                              ; preds = %260, %259, %257
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %264

263:                                              ; preds = %260, %255
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  br label %473

264:                                              ; preds = %261, %254, %247
  %.pn367 = phi { ptr, i32 } [ %262, %261 ], [ %.pn365, %254 ], [ %248, %247 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #11
  br label %265

265:                                              ; preds = %264, %203
  %.pn367.pn = phi { ptr, i32 } [ %.pn367, %264 ], [ %204, %203 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  br label %266

266:                                              ; preds = %265, %201
  %.pn367.pn.pn = phi { ptr, i32 } [ %.pn367.pn, %265 ], [ %202, %201 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  br label %487

267:                                              ; preds = %162
  %268 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
          to label %269 unwind label %373

269:                                              ; preds = %267
  %270 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
          to label %271 unwind label %375

271:                                              ; preds = %269
  %272 = getelementptr inbounds i8, ptr %92, i64 56
  %273 = invoke noundef i32 @_ZNK3JPH13SoftBodyShape12GetFaceIndexERKNS_10SubShapeIDE(ptr noundef nonnull align 8 dereferenceable(40) %270, ptr noundef nonnull align 4 dereferenceable(4) %272)
          to label %274 unwind label %377

274:                                              ; preds = %271
  %275 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH24SoftBodyMotionProperties7GetFaceEj(ptr noundef nonnull align 16 dereferenceable(372) %268, i32 noundef %273)
          to label %276 unwind label %379

276:                                              ; preds = %274
  %277 = load i32, ptr %275, align 4, !tbaa !44
  %278 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %268, i32 noundef %277)
          to label %279 unwind label %381

279:                                              ; preds = %276
  %280 = getelementptr inbounds i8, ptr %275, i64 4
  %281 = load i32, ptr %280, align 4, !tbaa !44
  %282 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %268, i32 noundef %281)
          to label %283 unwind label %383

283:                                              ; preds = %279
  %284 = getelementptr inbounds i8, ptr %275, i64 8
  %285 = load i32, ptr %284, align 4, !tbaa !44
  %286 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %268, i32 noundef %285)
          to label %287 unwind label %385

287:                                              ; preds = %283
  %288 = getelementptr inbounds i8, ptr %278, i64 76
  %289 = load float, ptr %288, align 4, !tbaa !78
  %290 = fcmp ogt float %289, 0.000000e+00
  %291 = fdiv float 1.000000e+00, %289
  %292 = select i1 %290, float %291, float 1.000000e+10
  %293 = getelementptr inbounds i8, ptr %282, i64 76
  %294 = load float, ptr %293, align 4, !tbaa !78
  %295 = fcmp ogt float %294, 0.000000e+00
  %296 = fdiv float 1.000000e+00, %294
  %297 = select i1 %295, float %296, float 1.000000e+10
  %298 = getelementptr inbounds i8, ptr %286, i64 76
  %299 = load float, ptr %298, align 4, !tbaa !78
  %300 = fcmp ogt float %299, 0.000000e+00
  %301 = fdiv float 1.000000e+00, %299
  %302 = select i1 %300, float %301, float 1.000000e+10
  %303 = fadd float %292, %297
  %304 = fadd float %303, %302
  %305 = fdiv float 1.000000e+00, %304
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %19) #11
  invoke void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %19, ptr noundef nonnull align 16 dereferenceable(122) %101)
          to label %306 unwind label %387

306:                                              ; preds = %287
  %.sroa.065.0.copyload = load double, ptr %136, align 16
  %.sroa.266.0..sroa_idx = getelementptr inbounds i8, ptr %92, i64 40
  %.sroa.266.0.copyload = load double, ptr %.sroa.266.0..sroa_idx, align 8, !tbaa !46
  %307 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %19, double %.sroa.065.0.copyload, double %.sroa.266.0.copyload)
          to label %308 unwind label %389

308:                                              ; preds = %306
  %309 = extractvalue { double, double } %307, 0
  %310 = extractvalue { double, double } %307, 1
  %311 = getelementptr inbounds i8, ptr %278, i64 16
  %312 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %311, double %309, double %310)
          to label %313 unwind label %389

313:                                              ; preds = %308
  %314 = extractvalue { double, double } %312, 0
  %315 = extractvalue { double, double } %312, 1
  %316 = getelementptr inbounds i8, ptr %282, i64 16
  %317 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %316, double %309, double %310)
          to label %318 unwind label %389

318:                                              ; preds = %313
  %319 = getelementptr inbounds i8, ptr %286, i64 16
  %320 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %319, double %309, double %310)
          to label %321 unwind label %389

321:                                              ; preds = %318
  %322 = extractvalue { double, double } %317, 1
  %323 = extractvalue { double, double } %317, 0
  %324 = extractvalue { double, double } %320, 0
  %325 = extractvalue { double, double } %320, 1
  %326 = invoke noundef zeroext i1 @_ZN3JPH12ClosestPoint25GetBaryCentricCoordinatesENS_4Vec3ES1_S1_RfS2_S2_(double %314, double %315, double %323, double %322, double %324, double %325, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %327 unwind label %389

327:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #11
  %328 = load float, ptr %16, align 4, !tbaa !82
  %329 = getelementptr inbounds i8, ptr %278, i64 32
  %.sroa.049.0.copyload = load double, ptr %329, align 16
  %.sroa.250.0..sroa_idx = getelementptr inbounds i8, ptr %278, i64 40
  %.sroa.250.0.copyload = load double, ptr %.sroa.250.0..sroa_idx, align 8, !tbaa !46
  %330 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %328, double %.sroa.049.0.copyload, double %.sroa.250.0.copyload)
          to label %331 unwind label %391

331:                                              ; preds = %327
  %332 = extractvalue { double, double } %330, 0
  store double %332, ptr %22, align 16
  %333 = extractvalue { double, double } %330, 1
  store double %333, ptr %74, align 8
  %334 = load float, ptr %17, align 4, !tbaa !82
  %335 = getelementptr inbounds i8, ptr %282, i64 32
  %.sroa.045.0.copyload = load double, ptr %335, align 16
  %.sroa.246.0..sroa_idx = getelementptr inbounds i8, ptr %282, i64 40
  %.sroa.246.0.copyload = load double, ptr %.sroa.246.0..sroa_idx, align 8, !tbaa !46
  %336 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %334, double %.sroa.045.0.copyload, double %.sroa.246.0.copyload)
          to label %337 unwind label %391

337:                                              ; preds = %331
  %338 = extractvalue { double, double } %336, 0
  %339 = extractvalue { double, double } %336, 1
  %340 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %22, double %338, double %339)
          to label %341 unwind label %391

341:                                              ; preds = %337
  %342 = extractvalue { double, double } %340, 0
  store double %342, ptr %21, align 16
  %343 = extractvalue { double, double } %340, 1
  store double %343, ptr %75, align 8
  %344 = load float, ptr %18, align 4, !tbaa !82
  %345 = getelementptr inbounds i8, ptr %286, i64 32
  %.sroa.041.0.copyload = load double, ptr %345, align 16
  %.sroa.242.0..sroa_idx = getelementptr inbounds i8, ptr %286, i64 40
  %.sroa.242.0.copyload = load double, ptr %.sroa.242.0..sroa_idx, align 8, !tbaa !46
  %346 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %344, double %.sroa.041.0.copyload, double %.sroa.242.0.copyload)
          to label %347 unwind label %391

347:                                              ; preds = %341
  %348 = extractvalue { double, double } %346, 0
  %349 = extractvalue { double, double } %346, 1
  %350 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %348, double %349)
          to label %351 unwind label %391

351:                                              ; preds = %347
  %352 = extractvalue { double, double } %350, 0
  %353 = extractvalue { double, double } %350, 1
  %354 = invoke { double, double } @_ZNK3JPH5Mat4421Multiply3x3TransposedENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %19, double %352, double %353)
          to label %355 unwind label %391

355:                                              ; preds = %351
  %356 = extractvalue { double, double } %354, 0
  store double %356, ptr %20, align 16
  %357 = extractvalue { double, double } %354, 1
  store double %357, ptr %76, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #11
  %358 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %20, double %157, double %158)
          to label %359 unwind label %393

359:                                              ; preds = %355
  %360 = extractvalue { double, double } %358, 0
  store double %360, ptr %23, align 16
  %361 = extractvalue { double, double } %358, 1
  store double %361, ptr %77, align 8
  %362 = getelementptr inbounds i8, ptr %92, i64 16
  %.sroa.034.0.copyload = load double, ptr %362, align 16
  %.sroa.235.0..sroa_idx = getelementptr inbounds i8, ptr %92, i64 24
  %.sroa.235.0.copyload = load double, ptr %.sroa.235.0..sroa_idx, align 8, !tbaa !46
  %363 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %.sroa.034.0.copyload, double %.sroa.235.0.copyload)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  %364 = getelementptr inbounds i8, ptr %92, i64 84
  %365 = load float, ptr %364, align 4, !tbaa !48
  %366 = fcmp ogt float %365, 0.000000e+00
  br i1 %366, label %367, label %395

367:                                              ; preds = %359
  %368 = load float, ptr %78, align 8, !tbaa !49
  %369 = fneg float %368
  %370 = fcmp olt float %363, %369
  br i1 %370, label %371, label %395

371:                                              ; preds = %367
  %372 = fmul float %363, %365
  br label %395

373:                                              ; preds = %267
  %374 = landingpad { ptr, i32 }
          cleanup
  br label %487

375:                                              ; preds = %269
  %376 = landingpad { ptr, i32 }
          cleanup
  br label %487

377:                                              ; preds = %271
  %378 = landingpad { ptr, i32 }
          cleanup
  br label %487

379:                                              ; preds = %274
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %487

381:                                              ; preds = %276
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %487

383:                                              ; preds = %279
  %384 = landingpad { ptr, i32 }
          cleanup
  br label %487

385:                                              ; preds = %283
  %386 = landingpad { ptr, i32 }
          cleanup
  br label %487

387:                                              ; preds = %287
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %472

389:                                              ; preds = %321, %318, %313, %308, %306
  %390 = landingpad { ptr, i32 }
          cleanup
  br label %472

391:                                              ; preds = %351, %347, %341, %337, %331, %327
  %392 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #11
  br label %471

393:                                              ; preds = %355
  %394 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  br label %471

395:                                              ; preds = %359, %367, %371
  %.0331 = phi float [ %372, %371 ], [ 0.000000e+00, %367 ], [ 0.000000e+00, %359 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #11
  %.sroa.031.0.copyload = load double, ptr %362, align 16
  %.sroa.232.0.copyload = load double, ptr %.sroa.235.0..sroa_idx, align 8, !tbaa !46
  %396 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %.sroa.031.0.copyload, double %.sroa.232.0.copyload)
          to label %397 unwind label %459

397:                                              ; preds = %395
  %398 = extractvalue { double, double } %396, 0
  store double %398, ptr %24, align 16
  %399 = extractvalue { double, double } %396, 1
  store double %399, ptr %79, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #11
  %400 = getelementptr inbounds i8, ptr %92, i64 92
  %401 = load float, ptr %400, align 4, !tbaa !75
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %26) #11
  invoke void @_ZNK3JPH4Body17GetInverseInertiaEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %26, ptr noundef nonnull align 16 dereferenceable(122) %94)
          to label %402 unwind label %461

402:                                              ; preds = %397
  %.sroa.027.0.copyload = load double, ptr %24, align 16
  %.sroa.228.0.copyload = load double, ptr %79, align 8, !tbaa !46
  %403 = invoke { double, double } @_ZNK3JPH5Mat4411Multiply3x3ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %26, double %.sroa.027.0.copyload, double %.sroa.228.0.copyload)
          to label %404 unwind label %461

404:                                              ; preds = %402
  %405 = extractvalue { double, double } %403, 0
  %406 = extractvalue { double, double } %403, 1
  %407 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %401, double %405, double %406)
          to label %408 unwind label %461

408:                                              ; preds = %404
  %409 = extractvalue { double, double } %407, 0
  store double %409, ptr %25, align 16
  %410 = extractvalue { double, double } %407, 1
  store double %410, ptr %80, align 8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %26) #11
  %411 = invoke { double, double } @_ZNK3JPH16MotionProperties18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %96)
          to label %412 unwind label %463

412:                                              ; preds = %408
  %413 = extractvalue { double, double } %411, 0
  %414 = extractvalue { double, double } %411, 1
  %415 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %24, double %413, double %414)
  %416 = fsub float %415, %363
  %417 = fsub float %416, %.0331
  %418 = fadd float %163, %305
  %.sroa.021.0.copyload = load double, ptr %24, align 16
  %.sroa.222.0.copyload = load double, ptr %79, align 8, !tbaa !46
  %419 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %25, double %.sroa.021.0.copyload, double %.sroa.222.0.copyload)
  %420 = fadd float %418, %419
  %421 = fdiv float %417, %420
  %422 = fmul float %163, %421
  %.sroa.015.0.copyload = load double, ptr %362, align 16
  %.sroa.216.0.copyload = load double, ptr %.sroa.235.0..sroa_idx, align 8, !tbaa !46
  %423 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %422, double %.sroa.015.0.copyload, double %.sroa.216.0.copyload)
          to label %424 unwind label %465

424:                                              ; preds = %412
  %425 = extractvalue { double, double } %423, 0
  %426 = extractvalue { double, double } %423, 1
  invoke void @_ZN3JPH16MotionProperties21SubLinearVelocityStepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %96, double %425, double %426)
          to label %427 unwind label %465

427:                                              ; preds = %424
  %.sroa.011.0.copyload = load double, ptr %25, align 16
  %.sroa.212.0.copyload = load double, ptr %80, align 8, !tbaa !46
  %428 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %421, double %.sroa.011.0.copyload, double %.sroa.212.0.copyload)
          to label %429 unwind label %465

429:                                              ; preds = %427
  %430 = extractvalue { double, double } %428, 0
  %431 = extractvalue { double, double } %428, 1
  invoke void @_ZN3JPH16MotionProperties22SubAngularVelocityStepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %96, double %430, double %431)
          to label %432 unwind label %465

432:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #11
  %.sroa.07.0.copyload = load double, ptr %362, align 16
  %.sroa.28.0.copyload = load double, ptr %.sroa.235.0..sroa_idx, align 8, !tbaa !46
  %433 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %421, double %.sroa.07.0.copyload, double %.sroa.28.0.copyload)
          to label %434 unwind label %467

434:                                              ; preds = %432
  %435 = extractvalue { double, double } %433, 0
  %436 = extractvalue { double, double } %433, 1
  %437 = invoke { double, double } @_ZNK3JPH5Mat4411Multiply3x3ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %19, double %435, double %436)
          to label %438 unwind label %467

438:                                              ; preds = %434
  %439 = extractvalue { double, double } %437, 0
  store double %439, ptr %27, align 16
  %440 = extractvalue { double, double } %437, 1
  store double %440, ptr %81, align 8
  %441 = load float, ptr %288, align 4, !tbaa !78
  %442 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef %441)
          to label %443 unwind label %467

443:                                              ; preds = %438
  %444 = extractvalue { double, double } %442, 0
  %445 = extractvalue { double, double } %442, 1
  %446 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %329, double %444, double %445)
  %447 = load float, ptr %293, align 4, !tbaa !78
  %448 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef %447)
          to label %449 unwind label %467

449:                                              ; preds = %443
  %450 = extractvalue { double, double } %448, 0
  %451 = extractvalue { double, double } %448, 1
  %452 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %335, double %450, double %451)
  %453 = load float, ptr %298, align 4, !tbaa !78
  %454 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef %453)
          to label %455 unwind label %467

455:                                              ; preds = %449
  %456 = extractvalue { double, double } %454, 0
  %457 = extractvalue { double, double } %454, 1
  %458 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %345, double %456, double %457)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  br label %473

459:                                              ; preds = %395
  %460 = landingpad { ptr, i32 }
          cleanup
  br label %470

461:                                              ; preds = %404, %402, %397
  %462 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %26) #11
  br label %469

463:                                              ; preds = %408
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %469

465:                                              ; preds = %429, %427, %424, %412
  %466 = landingpad { ptr, i32 }
          cleanup
  br label %469

467:                                              ; preds = %449, %443, %438, %434, %432
  %468 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #11
  br label %469

469:                                              ; preds = %463, %467, %465, %461
  %.pn.pn.pn = phi { ptr, i32 } [ %462, %461 ], [ %464, %463 ], [ %468, %467 ], [ %466, %465 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #11
  br label %470

470:                                              ; preds = %469, %459
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %469 ], [ %460, %459 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  br label %471

471:                                              ; preds = %393, %470, %391
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %392, %391 ], [ %.pn.pn.pn.pn, %470 ], [ %394, %393 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  br label %472

472:                                              ; preds = %389, %471, %387
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %388, %387 ], [ %.pn.pn.pn.pn.pn.pn, %471 ], [ %390, %389 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  br label %487

473:                                              ; preds = %455, %263
  invoke void @_ZN3JPH16MotionProperties19ClampLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %96)
          to label %474 unwind label %197

474:                                              ; preds = %473
  invoke void @_ZN3JPH16MotionProperties20ClampAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %96)
          to label %475 unwind label %197

475:                                              ; preds = %474
  %476 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  br i1 %476, label %477, label %486

477:                                              ; preds = %475
  %478 = call noundef zeroext i1 @_ZNK3JPH4Body8IsActiveEv(ptr noundef nonnull align 16 dereferenceable(122) %101)
  br i1 %478, label %486, label %479

479:                                              ; preds = %477
  %480 = add nsw i32 %.0323451, 1
  %481 = sext i32 %.0323451 to i64
  %482 = getelementptr inbounds %"class.JPH::BodyID", ptr %69, i64 %481
  %483 = load i32, ptr %98, align 4, !tbaa !44
  store i32 %483, ptr %482, align 4, !tbaa !44
  %484 = icmp eq i32 %480, 64
  br i1 %484, label %485, label %486

485:                                              ; preds = %479
  invoke void @_ZN3JPH11BodyManager14ActivateBodiesEPKNS_6BodyIDEi(ptr noundef nonnull align 8 dereferenceable(297) %71, ptr noundef nonnull %69, i32 noundef 64)
          to label %486 unwind label %197

486:                                              ; preds = %485, %479, %477, %475
  %.1324 = phi i32 [ %.0323451, %477 ], [ %480, %479 ], [ %.0323451, %475 ], [ 0, %485 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #11
  br label %488

487:                                              ; preds = %195, %373, %377, %381, %385, %472, %383, %379, %375, %199, %266, %197, %193
  %.pn372.pn.pn = phi { ptr, i32 } [ %194, %193 ], [ %196, %195 ], [ %198, %197 ], [ %.pn367.pn.pn, %266 ], [ %200, %199 ], [ %374, %373 ], [ %376, %375 ], [ %378, %377 ], [ %380, %379 ], [ %382, %381 ], [ %384, %383 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn, %472 ], [ %386, %385 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #11
  br label %522

488:                                              ; preds = %130, %486, %97
  %.3326 = phi i32 [ %.0323451, %97 ], [ %.1324, %486 ], [ %.0323451, %130 ]
  %489 = getelementptr inbounds i8, ptr %92, i64 64
  %490 = load float, ptr %489, align 16, !tbaa !45
  %491 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %92, float noundef %490)
          to label %492 unwind label %114

492:                                              ; preds = %488
  %493 = extractvalue { double, double } %491, 0
  %494 = extractvalue { double, double } %491, 1
  invoke void @_ZN3JPH4Body15AddPositionStepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %94, double %493, double %494)
          to label %495 unwind label %114

495:                                              ; preds = %492
  %496 = call noundef i32 @_ZNK3JPH16MotionProperties30GetIndexInActiveBodiesInternalEv(ptr noundef nonnull align 16 dereferenceable(182) %96)
  %.not378 = icmp ult i32 %496, %30
  br i1 %.not378, label %510, label %497

497:                                              ; preds = %495
  invoke void @_ZN3JPH4Body33CalculateWorldSpaceBoundsInternalEv(ptr noundef nonnull align 16 dereferenceable(122) %94)
          to label %498 unwind label %114

498:                                              ; preds = %497
  %499 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %94)
  %500 = add nsw i32 %.0327450, 1
  %501 = sext i32 %.0327450 to i64
  %502 = getelementptr inbounds %"class.JPH::BodyID", ptr %70, i64 %501
  %503 = load i32, ptr %499, align 4, !tbaa !44
  store i32 %503, ptr %502, align 4, !tbaa !44
  %504 = icmp eq i32 %500, 64
  br i1 %504, label %505, label %510

505:                                              ; preds = %498
  %506 = load ptr, ptr %85, align 16, !tbaa !83
  %507 = load ptr, ptr %506, align 8, !tbaa !17
  %508 = getelementptr inbounds i8, ptr %507, i64 152
  %509 = load ptr, ptr %508, align 8
  invoke void %509(ptr noundef nonnull align 8 dereferenceable(16) %506, ptr noundef nonnull %70, i32 noundef 64, i1 noundef zeroext false)
          to label %510 unwind label %114

510:                                              ; preds = %505, %498, %495
  %.1328 = phi i32 [ %500, %498 ], [ %.0327450, %495 ], [ 0, %505 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %86, label %90, !llvm.loop !84

511:                                              ; preds = %86
  invoke void @_ZN3JPH11BodyManager14ActivateBodiesEPKNS_6BodyIDEi(ptr noundef nonnull align 8 dereferenceable(297) %71, ptr noundef nonnull %69, i32 noundef %.3326)
          to label %514 unwind label %512

512:                                              ; preds = %516, %511
  %513 = landingpad { ptr, i32 }
          cleanup
  br label %522

514:                                              ; preds = %511, %86
  %515 = icmp sgt i32 %.1328, 0
  br i1 %515, label %516, label %521

516:                                              ; preds = %514
  %517 = load ptr, ptr %85, align 16, !tbaa !83
  %518 = load ptr, ptr %517, align 8, !tbaa !17
  %519 = getelementptr inbounds i8, ptr %518, i64 152
  %520 = load ptr, ptr %519, align 8
  invoke void %520(ptr noundef nonnull align 8 dereferenceable(16) %517, ptr noundef nonnull %70, i32 noundef %.1328, i1 noundef zeroext false)
          to label %521 unwind label %512

521:                                              ; preds = %516, %514
  call void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %6) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #11
  br label %523

522:                                              ; preds = %512, %114, %118, %487, %116, %112, %88
  %.pn379.pn.pn.pn = phi { ptr, i32 } [ %89, %88 ], [ %513, %512 ], [ %113, %112 ], [ %115, %114 ], [ %117, %116 ], [ %.pn372.pn.pn, %487 ], [ %119, %118 ]
  call void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %6) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #11
  br label %544

523:                                              ; preds = %521, %28
  %524 = getelementptr inbounds i8, ptr %2, i64 4592
  %525 = load ptr, ptr %524, align 8, !tbaa !85
  %526 = getelementptr inbounds i8, ptr %2, i64 4600
  %527 = load i32, ptr %526, align 8, !tbaa !86
  %528 = shl i32 %527, 2
  %529 = load ptr, ptr %32, align 8, !tbaa !17
  %530 = getelementptr inbounds i8, ptr %529, i64 24
  %531 = load ptr, ptr %530, align 8
  invoke void %531(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef %525, i32 noundef %528)
          to label %532 unwind label %542

532:                                              ; preds = %523
  store ptr null, ptr %524, align 8, !tbaa !85
  store i32 0, ptr %526, align 8, !tbaa !86
  %533 = getelementptr inbounds i8, ptr %2, i64 4568
  %534 = load ptr, ptr %533, align 8, !tbaa !23
  %535 = getelementptr inbounds i8, ptr %2, i64 4576
  %536 = load i32, ptr %535, align 8, !tbaa !87
  %537 = mul i32 %536, 144
  %538 = load ptr, ptr %32, align 8, !tbaa !17
  %539 = getelementptr inbounds i8, ptr %538, i64 24
  %540 = load ptr, ptr %539, align 8
  invoke void %540(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef %534, i32 noundef %537)
          to label %541 unwind label %542

541:                                              ; preds = %532
  store ptr null, ptr %533, align 8, !tbaa !23
  store i32 0, ptr %535, align 8, !tbaa !87
  call void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #11
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #11
  ret void

542:                                              ; preds = %532, %523
  %543 = landingpad { ptr, i32 }
          cleanup
  br label %544

544:                                              ; preds = %66, %522, %542
  %.pn379.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %543, %542 ], [ %.pn379.pn.pn.pn, %522 ], [ %67, %66 ]
  call void @_ZN3JPH11BodyManager23GrantActiveBodiesAccessD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #11
  br label %545

545:                                              ; preds = %544, %64
  %.pn379.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn379.pn.pn.pn.pn.pn, %544 ], [ %65, %64 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #11
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn379.pn.pn.pn.pn.pn.pn
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0EC2EOS6_"(ptr noundef nonnull align 8 dereferenceable(25), ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZN3JPH9QuickSortIPPNS_20PhysicsUpdateContext4Step7CCDBodyEZNS_13PhysicsSystem21JobResolveCCDContactsEPS1_PS2_E3$_1EEvT_SA_T0_"(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @_ZN3JPHL11sGetCCDBodyERKNS_4BodyEPNS_20PhysicsUpdateContext4StepE(ptr noundef nonnull align 16 dereferenceable(122), ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyIDneERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties14GetInverseMassEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #7 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH18AxisConstraintPart45CalculateConstraintPropertiesWithMassOverrideERKNS_4BodyEffNS_4Vec3ES3_ffS4_S4_f(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(122), float noundef, float noundef, double, double, ptr noundef nonnull align 16 dereferenceable(122), float noundef, float noundef, double, double, ptr noundef byval(%"class.JPH::Vec3") align 16, float noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH18AxisConstraintPart39SolveVelocityConstraintWithMassOverrideERNS_4BodyEfS2_fNS_4Vec3Eff(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(122), float noundef, ptr noundef nonnull align 16 dereferenceable(122), float noundef, double, double, float noundef, float noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH18AxisConstraintPart14GetTotalLambdaEv(ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #2 align 2

declare noundef i32 @_ZNK3JPH13SoftBodyShape12GetFaceIndexERKNS_10SubShapeIDE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH24SoftBodyMotionProperties7GetFaceEj(ptr noundef nonnull align 16 dereferenceable(372), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH12ClosestPoint25GetBaryCentricCoordinatesENS_4Vec3ES1_S1_RfS2_S2_(double, double, double, double, double, double, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body17GetInverseInertiaEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH16MotionProperties18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS2_4StepEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25)) unnamed_addr #7 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #10

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #10

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !11, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !14, i64 72, !13, i64 104, !7, i64 112, !11, i64 120}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"_ZTSSt6atomicIjE", !12, i64 0}
!12 = !{!"_ZTSSt13__atomic_baseIjE", !13, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !15, i64 0, !16, i64 8, !16, i64 16, !7, i64 24}
!15 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !7, i64 0}
!16 = !{!"long", !8, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"vtable pointer", !9, i64 0}
!19 = !{!20, !7, i64 0}
!20 = !{!"_ZTSZN3JPH13PhysicsSystem21JobResolveCCDContactsEPNS_20PhysicsUpdateContextEPNS1_4StepEE3$_0", !7, i64 0, !7, i64 8, !13, i64 16}
!21 = !{!20, !7, i64 8}
!22 = !{!20, !13, i64 16}
!23 = !{!24, !7, i64 4568}
!24 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !7, i64 0, !25, i64 8, !25, i64 9, !26, i64 16, !13, i64 48, !11, i64 52, !8, i64 56, !11, i64 116, !8, i64 120, !11, i64 180, !8, i64 184, !11, i64 244, !8, i64 248, !11, i64 308, !8, i64 312, !11, i64 372, !8, i64 376, !27, i64 436, !13, i64 4536, !11, i64 4540, !11, i64 4544, !11, i64 4548, !11, i64 4552, !11, i64 4556, !11, i64 4560, !7, i64 4568, !13, i64 4576, !11, i64 4580, !11, i64 4584, !7, i64 4592, !13, i64 4600, !28, i64 4608, !30, i64 4616, !30, i64 4880, !30, i64 5144, !30, i64 5408, !28, i64 5672, !30, i64 5680, !28, i64 5944, !28, i64 5952, !28, i64 5960, !30, i64 5968, !28, i64 6232, !30, i64 6240, !28, i64 6504, !28, i64 6512, !30, i64 6520, !28, i64 6784, !28, i64 6792, !30, i64 6800, !30, i64 7064, !28, i64 7328, !28, i64 7336}
!25 = !{!"bool", !8, i64 0}
!26 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !8, i64 0}
!27 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !13, i64 0, !8, i64 4}
!28 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !29, i64 0}
!29 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !7, i64 0}
!30 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !13, i64 0, !8, i64 8}
!31 = !{!7, !7, i64 0}
!32 = distinct !{!32, !33, !34, !35}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!"llvm.loop.isvectorized", i32 1}
!35 = !{!"llvm.loop.unroll.runtime.disable"}
!36 = distinct !{!36, !33, !35, !34}
!37 = !{i64 2160030606}
!38 = !{!39, !10, i64 60}
!39 = !{!"_ZTSN3JPH20PhysicsUpdateContext4Step7CCDBodyE", !40, i64 0, !40, i64 16, !40, i64 32, !41, i64 48, !41, i64 52, !42, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !43, i64 80}
!40 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!41 = !{!"_ZTSN3JPH6BodyIDE", !13, i64 0}
!42 = !{!"_ZTSN3JPH10SubShapeIDE", !13, i64 0}
!43 = !{!"_ZTSN3JPH15ContactSettingsE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !25, i64 24, !40, i64 32, !40, i64 48}
!44 = !{!13, !13, i64 0}
!45 = !{!39, !10, i64 64}
!46 = !{!8, !8, i64 0}
!47 = !{!43, !10, i64 8}
!48 = !{!43, !10, i64 4}
!49 = !{!50, !10, i64 552}
!50 = !{!"_ZTSN3JPH13PhysicsSystemE", !7, i64 0, !7, i64 8, !51, i64 16, !60, i64 320, !62, i64 336, !63, i64 352, !63, i64 376, !64, i64 400, !64, i64 416, !7, i64 432, !7, i64 440, !7, i64 448, !65, i64 456, !67, i64 488, !68, i64 576, !69, i64 824, !71, i64 904, !72, i64 1016, !53, i64 1080, !73, i64 1128, !40, i64 1152, !10, i64 1168}
!51 = !{!"_ZTSN3JPH11BodyManagerE", !52, i64 0, !13, i64 24, !16, i64 32, !53, i64 40, !57, i64 88, !58, i64 104, !53, i64 128, !8, i64 176, !8, i64 192, !13, i64 200, !53, i64 208, !59, i64 256, !7, i64 280, !7, i64 288, !25, i64 296}
!52 = !{!"_ZTSN3JPH5ArrayIPNS_4BodyENS_12STLAllocatorIS2_EEEE", !16, i64 0, !16, i64 8, !7, i64 16}
!53 = !{!"_ZTSN3JPH5MutexE", !54, i64 0, !56, i64 40}
!54 = !{!"_ZTSSt5mutex", !55, i64 0}
!55 = !{!"_ZTSSt12__mutex_base", !8, i64 0}
!56 = !{!"_ZTSNSt6thread2idE", !16, i64 0}
!57 = !{!"_ZTSN3JPH10MutexArrayINS_11SharedMutexEEE", !7, i64 0, !13, i64 8}
!58 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !16, i64 0, !16, i64 8, !7, i64 16}
!59 = !{!"_ZTSN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEE", !16, i64 0, !16, i64 8, !7, i64 16}
!60 = !{!"_ZTSN3JPH23BodyLockInterfaceNoLockE", !61, i64 0}
!61 = !{!"_ZTSN3JPH17BodyLockInterfaceE", !7, i64 8}
!62 = !{!"_ZTSN3JPH24BodyLockInterfaceLockingE", !61, i64 0}
!63 = !{!"_ZTSN3JPH13BodyInterfaceE", !7, i64 0, !7, i64 8, !7, i64 16}
!64 = !{!"_ZTSN3JPH16NarrowPhaseQueryE", !7, i64 0, !7, i64 8}
!65 = !{!"_ZTSSt8functionIFvRKN3JPH4BodyES3_RKNS0_5Mat44ES6_RNS0_20CollideShapeSettingsERNS0_18CollisionCollectorINS0_18CollideShapeResultENS0_36CollisionCollectorTraitsCollideShapeEEERKNS0_11ShapeFilterEEE", !66, i64 0, !7, i64 24}
!66 = !{!"_ZTSSt14_Function_base", !8, i64 0, !7, i64 16}
!67 = !{!"_ZTSN3JPH15PhysicsSettingsE", !13, i64 0, !13, i64 4, !13, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !13, i64 56, !13, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !25, i64 76, !25, i64 77, !25, i64 78, !25, i64 79, !25, i64 80, !25, i64 81, !25, i64 82}
!68 = !{!"_ZTSN3JPH24ContactConstraintManagerE", !8, i64 8, !13, i64 184, !7, i64 192, !7, i64 200, !7, i64 208, !7, i64 216, !7, i64 224, !13, i64 232, !11, i64 236, !7, i64 240}
!69 = !{!"_ZTSN3JPH17ConstraintManagerE", !7, i64 0, !70, i64 8, !53, i64 32}
!70 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !16, i64 0, !16, i64 8, !7, i64 16}
!71 = !{!"_ZTSN3JPH13IslandBuilderE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !13, i64 88, !13, i64 92, !13, i64 96, !13, i64 100, !13, i64 104, !13, i64 108}
!72 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !13, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !13, i64 32, !11, i64 36, !13, i64 40, !7, i64 48, !11, i64 56}
!73 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !16, i64 0, !16, i64 8, !7, i64 16}
!74 = !{!43, !10, i64 16}
!75 = !{!43, !10, i64 12}
!76 = !{!43, !10, i64 20}
!77 = !{!43, !10, i64 0}
!78 = !{!79, !10, i64 76}
!79 = !{!"_ZTSN3JPH14SoftBodyVertexE", !40, i64 0, !40, i64 16, !40, i64 32, !80, i64 48, !13, i64 64, !25, i64 68, !10, i64 72, !10, i64 76}
!80 = !{!"_ZTSN3JPH5PlaneE", !81, i64 0}
!81 = !{!"_ZTSN3JPH4Vec4E", !8, i64 0}
!82 = !{!10, !10, i64 0}
!83 = !{!50, !7, i64 432}
!84 = distinct !{!84, !33}
!85 = !{!24, !7, i64 4592}
!86 = !{!24, !13, i64 4600}
!87 = !{!24, !13, i64 4576}


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