; 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::ContactConstraintManager::ContactAllocator" = type { %"class.JPH::LFHMAllocatorContext.base", i32, i32, i32 }
%"class.JPH::LFHMAllocatorContext.base" = type <{ ptr, i32, i32, i32 }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.42 }
%union.anon.42 = type { <4 x float> }
%"class.JPH::BodyAccess::Grant" = type { i8 }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::Vec3" = type { %union.anon.13 }
%union.anon.13 = type { <4 x float> }
%"class.JPH::DefaultBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", ptr, i16, [6 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::DefaultObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", ptr, i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::CollideShapeResult" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", %"class.JPH::BodyID", %"class.JPH::StaticArray.52", %"class.JPH::StaticArray.52" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.52" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%class.CCDNarrowPhaseCollector = type { %"class.JPH::CollisionCollector.53", i8, i8, ptr, ptr, ptr, ptr, float, %"class.JPH::BodyID" }
%"class.JPH::CollisionCollector.53" = type { ptr, float, ptr }
%"union.JPH::SimShapeFilterWrapperUnion" = type { %"class.JPH::SimShapeFilterWrapper" }
%"class.JPH::SimShapeFilterWrapper" = type { %"class.JPH::ShapeFilter.base", ptr, ptr, ptr }
%"class.JPH::ShapeFilter.base" = type <{ ptr, %"class.JPH::BodyID" }>
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT" }
%"struct.JPH::ShapeCastT" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%class.CCDBroadPhaseCollector = type <{ %"class.JPH::CollisionCollector.54", ptr, ptr, [8 x i8], %"class.JPH::Vec3", %"struct.JPH::RShapeCast", ptr, ptr, ptr, ptr, ptr, float, [4 x i8] }>
%"class.JPH::CollisionCollector.54" = type { ptr, float, ptr }
%"struct.JPH::AABoxCast" = type { %"class.JPH::AABox", %"class.JPH::Vec3" }
%"class.JPH::ContactManifold" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", [4 x i8], %"class.JPH::StaticArray.50", %"class.JPH::StaticArray.50" }
%"class.JPH::StaticArray.50" = type { i32, [12 x i8], [64 x %"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage" = type { [16 x i8] }
%"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 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"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::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] }
%"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 }
%"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::ContactSettings" = type { float, float, float, float, float, float, i8, %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"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 }

; 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: 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) #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 #2 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: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24ContactConstraintManager19GetContactAllocatorEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::ContactConstraintManager::ContactAllocator") align 8, ptr noundef nonnull align 8 dereferenceable(248)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3JPHL25sFinalizeContactAllocatorERNS_20PhysicsUpdateContext4StepERKNS_24ContactConstraintManager16ContactAllocatorE(ptr noundef nonnull align 8 dereferenceable(7344), ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH26SimShapeFilterWrapperUnionD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 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: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt13__atomic_baseIjEppEi(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_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::ContactConstraintManager::ContactAllocator", align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.JPH::ShapeCastSettings", align 16
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca %"class.JPH::DefaultBroadPhaseLayerFilter", align 8
  %17 = alloca %"class.JPH::DefaultObjectLayerFilter", align 8
  %18 = alloca %"class.JPH::ShapeCastResult", align 16
  %19 = alloca %class.CCDNarrowPhaseCollector, align 8
  %20 = alloca %"union.JPH::SimShapeFilterWrapperUnion", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"struct.JPH::RShapeCast", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Mat44", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %class.CCDBroadPhaseCollector, align 16
  %27 = alloca %"struct.JPH::AABoxCast", align 16
  %28 = alloca ptr, align 8
  %29 = alloca %"class.JPH::ContactManifold", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::BodyID", align 4
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  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
  %45 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #10
  call void @_ZN3JPH10BodyAccess5GrantC2ENS0_7EAccessES2_(ptr noundef nonnull align 1 dereferenceable(1) %7, i8 noundef zeroext 1, i8 noundef zeroext 1)
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #10
  %46 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 15
  invoke void @_ZN3JPH24ContactConstraintManager19GetContactAllocatorEv(ptr dead_on_unwind writable sret(%"class.JPH::ContactConstraintManager::ContactAllocator") align 8 %8, ptr noundef nonnull align 8 dereferenceable(248) %46)
          to label %47 unwind label %71

47:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 48, ptr %11) #10
  invoke void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %11)
          to label %48 unwind label %75

48:                                               ; preds = %47
  %49 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %11, i32 0, i32 3
  store i8 1, ptr %49, align 2, !tbaa !9
  %50 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %11, i32 0, i32 1
  store i8 0, ptr %50, align 16, !tbaa !18
  %51 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %11, i32 0, i32 2
  store i8 0, ptr %51, align 1, !tbaa !19
  %52 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %11, i32 0, i32 4
  store i8 1, ptr %52, align 1, !tbaa !20
  %53 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %11, i32 0, i32 1
  store i8 0, ptr %53, align 1, !tbaa !21
  %54 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 13
  %55 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %54, i32 0, i32 25
  %56 = load i8, ptr %55, align 2, !tbaa !22, !range !51, !noundef !52
  %57 = trunc i8 %56 to i1
  %58 = zext i1 %57 to i64
  %59 = select i1 %57, i8 0, i8 1
  %60 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %11, i32 0, i32 0
  store i8 %59, ptr %60, align 16, !tbaa !53
  br label %61

61:                                               ; preds = %397, %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %62, i32 0, i32 28
  %64 = call noundef i32 @_ZNSt13__atomic_baseIjEppEi(ptr noundef nonnull align 4 dereferenceable(4) %63, i32 noundef 0) #10
  store i32 %64, ptr %12, align 4, !tbaa !54
  %65 = load i32, ptr %12, align 4, !tbaa !54
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %66, i32 0, i32 27
  %68 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %67) #10
  %69 = icmp uge i32 %65, %68
  br i1 %69, label %70, label %79

70:                                               ; preds = %61
  store i32 2, ptr %13, align 4
  br label %395

71:                                               ; preds = %3
  %72 = landingpad { ptr, i32 }
          cleanup
  %73 = extractvalue { ptr, i32 } %72, 0
  store ptr %73, ptr %9, align 8
  %74 = extractvalue { ptr, i32 } %72, 1
  store i32 %74, ptr %10, align 4
  br label %412

75:                                               ; preds = %408, %47
  %76 = landingpad { ptr, i32 }
          cleanup
  %77 = extractvalue { ptr, i32 } %76, 0
  store ptr %77, ptr %9, align 8
  %78 = extractvalue { ptr, i32 } %76, 1
  store i32 %78, ptr %10, align 4
  br label %411

79:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %80, i32 0, i32 25
  %82 = load ptr, ptr %81, align 8, !tbaa !55
  %83 = load i32, ptr %12, align 4, !tbaa !54
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %82, i64 %84
  store ptr %85, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %86 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 2
  %87 = load ptr, ptr %14, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %87, i32 0, i32 3
  %89 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %86, ptr noundef nonnull align 4 dereferenceable(4) %88)
          to label %90 unwind label %226

90:                                               ; preds = %79
  store ptr %89, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #10
  %91 = load ptr, ptr %15, align 8, !tbaa !5
  %92 = invoke noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122) %91)
          to label %93 unwind label %230

93:                                               ; preds = %90
  invoke void @_ZNK3JPH13PhysicsSystem31GetDefaultBroadPhaseLayerFilterEt(ptr dead_on_unwind writable sret(%"class.JPH::DefaultBroadPhaseLayerFilter") align 8 %16, ptr noundef nonnull align 16 dereferenceable(1172) %45, i16 noundef zeroext %92)
          to label %94 unwind label %230

94:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #10
  %95 = load ptr, ptr %15, align 8, !tbaa !5
  %96 = invoke noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122) %95)
          to label %97 unwind label %234

97:                                               ; preds = %94
  invoke void @_ZNK3JPH13PhysicsSystem21GetDefaultLayerFilterEt(ptr dead_on_unwind writable sret(%"class.JPH::DefaultObjectLayerFilter") align 8 %17, ptr noundef nonnull align 16 dereferenceable(1172) %45, i16 noundef zeroext %96)
          to label %98 unwind label %234

98:                                               ; preds = %97
  call void @llvm.lifetime.start.p0(i64 1136, ptr %18) #10
  invoke void @_ZN3JPH15ShapeCastResultC2Ev(ptr noundef nonnull align 16 dereferenceable(1125) %18)
          to label %99 unwind label %238

99:                                               ; preds = %98
  call void @llvm.lifetime.start.p0(i64 72, ptr %19) #10
  %100 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 2
  %101 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 15
  %102 = load ptr, ptr %14, align 8, !tbaa !5
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %103, i32 0, i32 4
  %105 = load float, ptr %104, align 8, !tbaa !62
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN23CCDNarrowPhaseCollectorC2ERKNS_11BodyManagerERNS_24ContactConstraintManagerERNS4_7CCDBodyERNS_15ShapeCastResultEf(ptr noundef nonnull align 8 dereferenceable(72) %19, ptr noundef nonnull align 8 dereferenceable(297) %100, ptr noundef nonnull align 8 dereferenceable(248) %101, ptr noundef nonnull align 16 dereferenceable(144) %102, ptr noundef nonnull align 16 dereferenceable(1125) %18, float noundef %105)
          to label %106 unwind label %242

106:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 40, ptr %20) #10
  %107 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 11
  %108 = load ptr, ptr %107, align 16, !tbaa !66
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN3JPH26SimShapeFilterWrapperUnionC2EPKNS_14SimShapeFilterEPKNS_4BodyE(ptr noundef nonnull align 8 dereferenceable(40) %20, ptr noundef %108, ptr noundef %109)
          to label %110 unwind label %246

110:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %111 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH26SimShapeFilterWrapperUnion24GetSimShapeFilterWrapperEv(ptr noundef nonnull align 8 dereferenceable(40) %20)
          to label %112 unwind label %250

112:                                              ; preds = %110
  store ptr %111, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 144, ptr %22) #10
  %113 = load ptr, ptr %15, align 8, !tbaa !5
  %114 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %113)
          to label %115 unwind label %254

115:                                              ; preds = %112
  %116 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %117 unwind label %254

117:                                              ; preds = %115
  %118 = getelementptr inbounds %"class.JPH::Vec3", ptr %23, i32 0, i32 0
  %119 = getelementptr inbounds %union.anon.13, ptr %118, i32 0, i32 0
  %120 = getelementptr inbounds { double, double }, ptr %119, i32 0, i32 0
  %121 = extractvalue { double, double } %116, 0
  store double %121, ptr %120, align 16
  %122 = getelementptr inbounds { double, double }, ptr %119, i32 0, i32 1
  %123 = extractvalue { double, double } %116, 1
  store double %123, ptr %122, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #10
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %24, ptr noundef nonnull align 16 dereferenceable(122) %124)
          to label %125 unwind label %258

125:                                              ; preds = %117
  %126 = load ptr, ptr %14, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %126, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %25, ptr align 16 %127, i64 16, i1 false), !tbaa.struct !67
  %128 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %129 = load double, ptr %128, align 16
  %130 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %131 = load double, ptr %130, align 8
  %132 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %133 = load double, ptr %132, align 16
  %134 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %135 = load double, ptr %134, align 8
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %22, ptr noundef %114, double %129, double %131, ptr noundef nonnull align 16 dereferenceable(64) %24, double %133, double %135)
          to label %136 unwind label %258

136:                                              ; preds = %125
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #10
  call void @llvm.lifetime.start.p0(i64 256, ptr %26) #10
  %137 = load ptr, ptr %14, align 8, !tbaa !5
  %138 = load ptr, ptr %15, align 8, !tbaa !5
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  %140 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 2
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %142, i32 0, i32 4
  %144 = load float, ptr %143, align 8, !tbaa !62
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN22CCDBroadPhaseCollectorC2ERKNS4_7CCDBodyERKNS_4BodyERKNS_10RShapeCastERNS_17ShapeCastSettingsERNS_21SimShapeFilterWrapperERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(252) %26, ptr noundef nonnull align 16 dereferenceable(144) %137, ptr noundef nonnull align 16 dereferenceable(122) %138, ptr noundef nonnull align 16 dereferenceable(144) %22, ptr noundef nonnull align 16 dereferenceable(36) %11, ptr noundef nonnull align 8 dereferenceable(40) %139, ptr noundef nonnull align 8 dereferenceable(72) %19, ptr noundef nonnull align 8 dereferenceable(297) %140, ptr noundef %141, float noundef %144)
          to label %145 unwind label %262

145:                                              ; preds = %136
  %146 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 9
  %147 = load ptr, ptr %146, align 16, !tbaa !69
  call void @llvm.lifetime.start.p0(i64 48, ptr %27) #10
  %148 = getelementptr inbounds %"struct.JPH::AABoxCast", ptr %27, i32 0, i32 0
  %149 = getelementptr inbounds %"struct.JPH::ShapeCastT", ptr %22, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %148, ptr align 16 %149, i64 32, i1 false), !tbaa.struct !70
  %150 = getelementptr inbounds %"struct.JPH::AABoxCast", ptr %27, i32 0, i32 1
  %151 = getelementptr inbounds %"struct.JPH::ShapeCastT", ptr %22, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %150, ptr align 16 %151, i64 16, i1 false), !tbaa.struct !67
  %152 = load ptr, ptr %147, align 8, !tbaa !71
  %153 = getelementptr inbounds ptr, ptr %152, i64 22
  %154 = load ptr, ptr %153, align 8
  invoke void %154(ptr noundef nonnull align 8 dereferenceable(16) %147, ptr noundef nonnull align 16 dereferenceable(48) %27, ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %155 unwind label %266

155:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #10
  %156 = load ptr, ptr %14, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %156, i32 0, i32 7
  %158 = load float, ptr %157, align 16, !tbaa !73
  %159 = fcmp olt float %158, 1.000000e+00
  br i1 %159, label %160, label %394

160:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %161 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 2
  %162 = load ptr, ptr %14, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %162, i32 0, i32 4
  %164 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %161, ptr noundef nonnull align 4 dereferenceable(4) %163)
          to label %165 unwind label %270

165:                                              ; preds = %160
  store ptr %164, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2128, ptr %29) #10
  call void @_ZN3JPH15ContactManifoldC2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %29) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #10
  %166 = getelementptr inbounds %"struct.JPH::ShapeCastT", ptr %22, i32 0, i32 2
  %167 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %166)
          to label %168 unwind label %274

168:                                              ; preds = %165
  %169 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %170 = getelementptr inbounds %union.anon.13, ptr %169, i32 0, i32 0
  %171 = getelementptr inbounds { double, double }, ptr %170, i32 0, i32 0
  %172 = extractvalue { double, double } %167, 0
  store double %172, ptr %171, align 16
  %173 = getelementptr inbounds { double, double }, ptr %170, i32 0, i32 1
  %174 = extractvalue { double, double } %167, 1
  store double %174, ptr %173, align 8
  %175 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %175, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !67
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  %176 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %176, i64 16, i1 false), !tbaa.struct !67
  %177 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 %177, i64 16, i1 false), !tbaa.struct !67
  %178 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %178, i64 16, i1 false), !tbaa.struct !67
  %179 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 13
  %180 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %179, i32 0, i32 8
  %181 = load float, ptr %180, align 8, !tbaa !78
  %182 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 7
  %183 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 8
  %184 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 6
  %185 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 7
  %186 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %187 = load double, ptr %186, align 16
  %188 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %189 = load double, ptr %188, align 8
  %190 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %191 = load double, ptr %190, align 16
  %192 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %193 = load double, ptr %192, align 8
  %194 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %195 = load double, ptr %194, align 16
  %196 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %197 = load double, ptr %196, align 8
  invoke void @_ZN3JPH23ManifoldBetweenTwoFacesENS_4Vec3ES0_S0_fRKNS_11StaticArrayIS0_Lj32EEES4_RNS1_IS0_Lj64EEES6_(double %187, double %189, double %191, double %193, double %195, double %197, float noundef %181, ptr noundef nonnull align 16 dereferenceable(528) %182, ptr noundef nonnull align 16 dereferenceable(528) %183, ptr noundef nonnull align 16 dereferenceable(1040) %184, ptr noundef nonnull align 16 dereferenceable(1040) %185)
          to label %198 unwind label %278

198:                                              ; preds = %168
  %199 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 4
  %200 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %200, ptr align 4 %199, i64 4, i1 false), !tbaa.struct !79
  %201 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 5
  %202 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %202, ptr align 8 %201, i64 4, i1 false), !tbaa.struct !79
  %203 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 3
  %204 = load float, ptr %203, align 16, !tbaa !80
  %205 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 2
  store float %204, ptr %205, align 16, !tbaa !83
  %206 = load ptr, ptr %14, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %206, i32 0, i32 1
  %208 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %208, ptr align 16 %207, i64 16, i1 false), !tbaa.struct !67
  %209 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %45, i32 0, i32 15
  %210 = load ptr, ptr %15, align 8, !tbaa !5
  %211 = load ptr, ptr %28, align 8, !tbaa !5
  %212 = load ptr, ptr %14, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %212, i32 0, i32 10
  invoke void @_ZN3JPH24ContactConstraintManager17OnCCDContactAddedERNS0_16ContactAllocatorERKNS_4BodyES5_RKNS_15ContactManifoldERNS_15ContactSettingsE(ptr noundef nonnull align 8 dereferenceable(248) %209, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 16 dereferenceable(122) %210, ptr noundef nonnull align 16 dereferenceable(122) %211, ptr noundef nonnull align 16 dereferenceable(2128) %29, ptr noundef nonnull align 16 dereferenceable(64) %213)
          to label %214 unwind label %278

214:                                              ; preds = %198
  %215 = load ptr, ptr %14, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %215, i32 0, i32 10
  %217 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %216, i32 0, i32 6
  %218 = load i8, ptr %217, align 8, !tbaa !86, !range !51, !noundef !52
  %219 = trunc i8 %218 to i1
  br i1 %219, label %220, label %286

220:                                              ; preds = %214
  %221 = load ptr, ptr %14, align 8, !tbaa !5
  %222 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %221, i32 0, i32 7
  store float 1.000000e+00, ptr %222, align 16, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  invoke void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %223 unwind label %282

223:                                              ; preds = %220
  %224 = load ptr, ptr %14, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %224, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %225, ptr align 4 %34, i64 4, i1 false), !tbaa.struct !79
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %391

226:                                              ; preds = %79
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %9, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %10, align 4
  br label %407

230:                                              ; preds = %93, %90
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %9, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %10, align 4
  br label %406

234:                                              ; preds = %97, %94
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %9, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %10, align 4
  br label %405

238:                                              ; preds = %98
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %9, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %10, align 4
  br label %404

242:                                              ; preds = %99
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %9, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %10, align 4
  br label %403

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

250:                                              ; preds = %110
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %9, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %10, align 4
  br label %401

254:                                              ; preds = %115, %112
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %9, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %10, align 4
  br label %400

258:                                              ; preds = %125, %117
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %9, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #10
  br label %400

262:                                              ; preds = %136
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %9, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %10, align 4
  br label %399

266:                                              ; preds = %145
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %9, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #10
  br label %398

270:                                              ; preds = %160
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %9, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %10, align 4
  br label %393

274:                                              ; preds = %165
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %9, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  br label %392

278:                                              ; preds = %286, %198, %168
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %9, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %10, align 4
  br label %392

282:                                              ; preds = %220
  %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 %34) #10
  br label %392

286:                                              ; preds = %214
  %287 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 7
  %288 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %287)
          to label %289 unwind label %278

289:                                              ; preds = %286
  %290 = icmp ugt i32 %288, 1
  br i1 %290, label %291, label %369

291:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #10
  %292 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %293 unwind label %312

293:                                              ; preds = %291
  %294 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %295 = getelementptr inbounds %union.anon.13, ptr %294, i32 0, i32 0
  %296 = getelementptr inbounds { double, double }, ptr %295, i32 0, i32 0
  %297 = extractvalue { double, double } %292, 0
  store double %297, ptr %296, align 16
  %298 = getelementptr inbounds { double, double }, ptr %295, i32 0, i32 1
  %299 = extractvalue { double, double } %292, 1
  store double %299, ptr %298, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %300 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 7
  store ptr %300, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  %301 = load ptr, ptr %36, align 8, !tbaa !5
  %302 = invoke noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE5beginEv(ptr noundef nonnull align 16 dereferenceable(1040) %301)
          to label %303 unwind label %316

303:                                              ; preds = %293
  store ptr %302, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %304 = load ptr, ptr %36, align 8, !tbaa !5
  %305 = invoke noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE3endEv(ptr noundef nonnull align 16 dereferenceable(1040) %304)
          to label %306 unwind label %320

306:                                              ; preds = %303
  store ptr %305, ptr %38, align 8, !tbaa !5
  br label %307

307:                                              ; preds = %333, %306
  %308 = load ptr, ptr %37, align 8, !tbaa !5
  %309 = load ptr, ptr %38, align 8, !tbaa !5
  %310 = icmp ne ptr %308, %309
  br i1 %310, label %324, label %311

311:                                              ; preds = %307
  store i32 4, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %342

312:                                              ; preds = %345, %342, %291
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %9, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %10, align 4
  br label %368

316:                                              ; preds = %293
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %9, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %10, align 4
  br label %341

320:                                              ; preds = %303
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  store ptr %322, ptr %9, align 8
  %323 = extractvalue { ptr, i32 } %321, 1
  store i32 %323, ptr %10, align 4
  br label %340

324:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %325 = load ptr, ptr %37, align 8, !tbaa !5
  store ptr %325, ptr %39, align 8, !tbaa !5
  %326 = load ptr, ptr %39, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %326, i64 16, i1 false), !tbaa.struct !67
  %327 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %328 = load double, ptr %327, align 16
  %329 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %330 = load double, ptr %329, align 8
  %331 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %35, double %328, double %330)
          to label %332 unwind label %336

332:                                              ; preds = %324
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %333

333:                                              ; preds = %332
  %334 = load ptr, ptr %37, align 8, !tbaa !5
  %335 = getelementptr inbounds %"class.JPH::Vec3", ptr %334, i32 1
  store ptr %335, ptr %37, align 8, !tbaa !5
  br label %307

336:                                              ; preds = %324
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %9, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %340

340:                                              ; preds = %336, %320
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  br label %341

341:                                              ; preds = %340, %316
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %368

342:                                              ; preds = %311
  %343 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 7
  %344 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %343)
          to label %345 unwind label %312

345:                                              ; preds = %342
  %346 = uitofp i32 %344 to float
  %347 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %35, float noundef %346)
          to label %348 unwind label %312

348:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #10
  %349 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !67
  %350 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %351 = load double, ptr %350, align 16
  %352 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %353 = load double, ptr %352, align 8
  %354 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %349, double %351, double %353)
          to label %355 unwind label %364

355:                                              ; preds = %348
  %356 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %357 = getelementptr inbounds %union.anon.13, ptr %356, i32 0, i32 0
  %358 = getelementptr inbounds { double, double }, ptr %357, i32 0, i32 0
  %359 = extractvalue { double, double } %354, 0
  store double %359, ptr %358, align 16
  %360 = getelementptr inbounds { double, double }, ptr %357, i32 0, i32 1
  %361 = extractvalue { double, double } %354, 1
  store double %361, ptr %360, align 8
  %362 = load ptr, ptr %14, align 8, !tbaa !5
  %363 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %362, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %363, ptr align 16 %41, i64 16, i1 false), !tbaa.struct !67
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  br label %390

364:                                              ; preds = %348
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %9, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #10
  br label %368

368:                                              ; preds = %364, %341, %312
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  br label %392

369:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #10
  %370 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %29, i32 0, i32 0
  %371 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %44, ptr align 16 %371, i64 16, i1 false), !tbaa.struct !67
  %372 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %373 = load double, ptr %372, align 16
  %374 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %375 = load double, ptr %374, align 8
  %376 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %370, double %373, double %375)
          to label %377 unwind label %386

377:                                              ; preds = %369
  %378 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %379 = getelementptr inbounds %union.anon.13, ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds { double, double }, ptr %379, i32 0, i32 0
  %381 = extractvalue { double, double } %376, 0
  store double %381, ptr %380, align 16
  %382 = getelementptr inbounds { double, double }, ptr %379, i32 0, i32 1
  %383 = extractvalue { double, double } %376, 1
  store double %383, ptr %382, align 8
  %384 = load ptr, ptr %14, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %384, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %385, ptr align 16 %43, i64 16, i1 false), !tbaa.struct !67
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #10
  br label %390

386:                                              ; preds = %369
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %9, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #10
  br label %392

390:                                              ; preds = %377, %355
  br label %391

391:                                              ; preds = %390, %223
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %29) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  br label %394

392:                                              ; preds = %386, %368, %282, %278, %274
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %29) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr %29) #10
  br label %393

393:                                              ; preds = %392, %270
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  br label %398

394:                                              ; preds = %391, %155
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(252) %26) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @_ZN3JPH26SimShapeFilterWrapperUnionD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %20) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %20) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %19) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %19) #10
  call void @_ZN3JPH18CollideShapeResultD2Ev(ptr noundef nonnull align 16 dereferenceable(1125) %18) #10
  call void @llvm.lifetime.end.p0(i64 1136, ptr %18) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %17) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  store i32 0, ptr %13, align 4
  br label %395

395:                                              ; preds = %394, %70
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  %396 = load i32, ptr %13, align 4
  switch i32 %396, label %418 [
    i32 0, label %397
    i32 2, label %408
  ]

397:                                              ; preds = %395
  br label %61, !llvm.loop !87

398:                                              ; preds = %393, %266
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(252) %26) #10
  br label %399

399:                                              ; preds = %398, %262
  call void @llvm.lifetime.end.p0(i64 256, ptr %26) #10
  br label %400

400:                                              ; preds = %399, %258, %254
  call void @llvm.lifetime.end.p0(i64 144, ptr %22) #10
  br label %401

401:                                              ; preds = %400, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @_ZN3JPH26SimShapeFilterWrapperUnionD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %20) #10
  br label %402

402:                                              ; preds = %401, %246
  call void @llvm.lifetime.end.p0(i64 40, ptr %20) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %19) #10
  br label %403

403:                                              ; preds = %402, %242
  call void @llvm.lifetime.end.p0(i64 72, ptr %19) #10
  call void @_ZN3JPH18CollideShapeResultD2Ev(ptr noundef nonnull align 16 dereferenceable(1125) %18) #10
  br label %404

404:                                              ; preds = %403, %238
  call void @llvm.lifetime.end.p0(i64 1136, ptr %18) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %17) #10
  br label %405

405:                                              ; preds = %404, %234
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %16) #10
  br label %406

406:                                              ; preds = %405, %230
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #10
  br label %407

407:                                              ; preds = %406, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  br label %411

408:                                              ; preds = %395
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPHL25sFinalizeContactAllocatorERNS_20PhysicsUpdateContext4StepERKNS_24ContactConstraintManager16ContactAllocatorE(ptr noundef nonnull align 8 dereferenceable(7344) %409, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %410 unwind label %75

410:                                              ; preds = %408
  call void @llvm.lifetime.end.p0(i64 48, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #10
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #10
  ret void

411:                                              ; preds = %407, %75
  call void @llvm.lifetime.end.p0(i64 48, ptr %11) #10
  br label %412

412:                                              ; preds = %411, %71
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #10
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #10
  br label %413

413:                                              ; preds = %412
  %414 = load ptr, ptr %9, align 8
  %415 = load i32, ptr %10, align 4
  %416 = insertvalue { ptr, i32 } poison, ptr %414, 0
  %417 = insertvalue { ptr, i32 } %416, i32 %415, 1
  resume { ptr, i32 } %417

418:                                              ; preds = %395
  unreachable
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH13PhysicsSystem31GetDefaultBroadPhaseLayerFilterEt(ptr dead_on_unwind noalias writable sret(%"class.JPH::DefaultBroadPhaseLayerFilter") align 8, ptr noundef nonnull align 16 dereferenceable(1172), i16 noundef zeroext) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH13PhysicsSystem21GetDefaultLayerFilterEt(ptr dead_on_unwind noalias writable sret(%"class.JPH::DefaultObjectLayerFilter") align 8, ptr noundef nonnull align 16 dereferenceable(1172), i16 noundef zeroext) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN23CCDNarrowPhaseCollectorC2ERKNS_11BodyManagerERNS_24ContactConstraintManagerERNS4_7CCDBodyERNS_15ShapeCastResultEf(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(297), ptr noundef nonnull align 8 dereferenceable(248), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(1125), float noundef) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN22CCDBroadPhaseCollectorC2ERKNS4_7CCDBodyERKNS_4BodyERKNS_10RShapeCastERNS_17ShapeCastSettingsERNS_21SimShapeFilterWrapperERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(252), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(297), ptr noundef, float noundef) unnamed_addr #4 align 2

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

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

declare void @_ZN3JPH23ManifoldBetweenTwoFacesENS_4Vec3ES0_S0_fRKNS_11StaticArrayIS0_Lj32EEES4_RNS1_IS0_Lj64EEES6_(double, double, double, double, double, double, float noundef, ptr noundef nonnull align 16 dereferenceable(528), ptr noundef nonnull align 16 dereferenceable(528), ptr noundef nonnull align 16 dereferenceable(1040), ptr noundef nonnull align 16 dereferenceable(1040)) #7

declare void @_ZN3JPH24ContactConstraintManager17OnCCDContactAddedERNS0_16ContactAllocatorERKNS_4BodyES5_RKNS_15ContactManifoldERNS_15ContactSettingsE(ptr noundef nonnull align 8 dereferenceable(248), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(2128), ptr noundef nonnull align 16 dereferenceable(64)) #7

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #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 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { "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 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 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 = { 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, !17, i64 34}
!10 = !{!"_ZTSN3JPH17ShapeCastSettingsE", !11, i64 0, !16, i64 32, !16, i64 33, !17, i64 34, !17, i64 35}
!11 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !12, i64 0, !13, i64 1, !14, i64 4, !14, i64 8, !15, i64 16}
!12 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!13 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!16 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!10, !16, i64 32}
!19 = !{!10, !16, i64 33}
!20 = !{!10, !17, i64 35}
!21 = !{!11, !13, i64 1}
!22 = !{!23, !17, i64 570}
!23 = !{!"_ZTSN3JPH13PhysicsSystemE", !6, i64 0, !6, i64 8, !24, i64 16, !35, i64 320, !37, i64 336, !38, i64 352, !38, i64 376, !39, i64 400, !39, i64 416, !6, i64 432, !6, i64 440, !6, i64 448, !40, i64 456, !42, i64 488, !43, i64 576, !46, i64 824, !48, i64 904, !49, i64 1016, !28, i64 1080, !50, i64 1128, !15, i64 1152, !14, i64 1168}
!24 = !{!"_ZTSN3JPH11BodyManagerE", !25, i64 0, !27, i64 24, !26, i64 32, !28, i64 40, !32, i64 88, !33, i64 104, !28, i64 128, !7, i64 176, !7, i64 192, !27, i64 200, !28, i64 208, !34, i64 256, !6, i64 280, !6, i64 288, !17, i64 296}
!25 = !{!"_ZTSN3JPH5ArrayIPNS_4BodyENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!26 = !{!"long", !7, i64 0}
!27 = !{!"int", !7, i64 0}
!28 = !{!"_ZTSN3JPH5MutexE", !29, i64 0, !31, i64 40}
!29 = !{!"_ZTSSt5mutex", !30, i64 0}
!30 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!31 = !{!"_ZTSNSt6thread2idE", !26, i64 0}
!32 = !{!"_ZTSN3JPH10MutexArrayINS_11SharedMutexEEE", !6, i64 0, !27, i64 8}
!33 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!34 = !{!"_ZTSN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!35 = !{!"_ZTSN3JPH23BodyLockInterfaceNoLockE", !36, i64 0}
!36 = !{!"_ZTSN3JPH17BodyLockInterfaceE", !6, i64 8}
!37 = !{!"_ZTSN3JPH24BodyLockInterfaceLockingE", !36, i64 0}
!38 = !{!"_ZTSN3JPH13BodyInterfaceE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSN3JPH16NarrowPhaseQueryE", !6, i64 0, !6, i64 8}
!40 = !{!"_ZTSSt8functionIFvRKN3JPH4BodyES3_RKNS0_5Mat44ES6_RNS0_20CollideShapeSettingsERNS0_18CollisionCollectorINS0_18CollideShapeResultENS0_36CollisionCollectorTraitsCollideShapeEEERKNS0_11ShapeFilterEEE", !41, i64 0, !6, i64 24}
!41 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!42 = !{!"_ZTSN3JPH15PhysicsSettingsE", !27, i64 0, !27, i64 4, !27, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !27, i64 56, !27, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !17, i64 76, !17, i64 77, !17, i64 78, !17, i64 79, !17, i64 80, !17, i64 81, !17, i64 82}
!43 = !{!"_ZTSN3JPH24ContactConstraintManagerE", !7, i64 8, !27, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !27, i64 232, !44, i64 236, !6, i64 240}
!44 = !{!"_ZTSSt6atomicIjE", !45, i64 0}
!45 = !{!"_ZTSSt13__atomic_baseIjE", !27, i64 0}
!46 = !{!"_ZTSN3JPH17ConstraintManagerE", !6, i64 0, !47, i64 8, !28, i64 32}
!47 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!48 = !{!"_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, !27, i64 88, !27, i64 92, !27, i64 96, !27, i64 100, !27, i64 104, !27, i64 108}
!49 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !27, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !27, i64 32, !44, i64 36, !27, i64 40, !6, i64 48, !44, i64 56}
!50 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!51 = !{i8 0, i8 2}
!52 = !{}
!53 = !{!11, !12, i64 0}
!54 = !{!27, !27, i64 0}
!55 = !{!56, !6, i64 4568}
!56 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !6, i64 0, !17, i64 8, !17, i64 9, !57, i64 16, !27, i64 48, !44, i64 52, !7, i64 56, !44, i64 116, !7, i64 120, !44, i64 180, !7, i64 184, !44, i64 244, !7, i64 248, !44, i64 308, !7, i64 312, !44, i64 372, !7, i64 376, !58, i64 436, !27, i64 4536, !44, i64 4540, !44, i64 4544, !44, i64 4548, !44, i64 4552, !44, i64 4556, !44, i64 4560, !6, i64 4568, !27, i64 4576, !44, i64 4580, !44, i64 4584, !6, i64 4592, !27, i64 4600, !59, i64 4608, !61, i64 4616, !61, i64 4880, !61, i64 5144, !61, i64 5408, !59, i64 5672, !61, i64 5680, !59, i64 5944, !59, i64 5952, !59, i64 5960, !61, i64 5968, !59, i64 6232, !61, i64 6240, !59, i64 6504, !59, i64 6512, !61, i64 6520, !59, i64 6784, !59, i64 6792, !61, i64 6800, !61, i64 7064, !59, i64 7328, !59, i64 7336}
!57 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !7, i64 0}
!58 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !27, i64 0, !7, i64 4}
!59 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !60, i64 0}
!60 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !6, i64 0}
!61 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !27, i64 0, !7, i64 8}
!62 = !{!63, !14, i64 32}
!63 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !14, i64 32, !14, i64 36, !44, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !64, i64 72, !27, i64 104, !6, i64 112, !44, i64 120}
!64 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !65, i64 0, !26, i64 8, !26, i64 16, !6, i64 24}
!65 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !6, i64 0}
!66 = !{!23, !6, i64 448}
!67 = !{i64 0, i64 16, !68}
!68 = !{!7, !7, i64 0}
!69 = !{!23, !6, i64 432}
!70 = !{i64 0, i64 16, !68, i64 16, i64 16, !68}
!71 = !{!72, !72, i64 0}
!72 = !{!"vtable pointer", !8, i64 0}
!73 = !{!74, !14, i64 64}
!74 = !{!"_ZTSN3JPH20PhysicsUpdateContext4Step7CCDBodyE", !15, i64 0, !15, i64 16, !15, i64 32, !75, i64 48, !75, i64 52, !76, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !77, i64 80}
!75 = !{!"_ZTSN3JPH6BodyIDE", !27, i64 0}
!76 = !{!"_ZTSN3JPH10SubShapeIDE", !27, i64 0}
!77 = !{!"_ZTSN3JPH15ContactSettingsE", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !17, i64 24, !15, i64 32, !15, i64 48}
!78 = !{!23, !14, i64 520}
!79 = !{i64 0, i64 4, !54}
!80 = !{!81, !14, i64 48}
!81 = !{!"_ZTSN3JPH18CollideShapeResultE", !15, i64 0, !15, i64 16, !15, i64 32, !14, i64 48, !76, i64 52, !76, i64 56, !75, i64 60, !82, i64 64, !82, i64 592}
!82 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !27, i64 0, !7, i64 16}
!83 = !{!84, !14, i64 32}
!84 = !{!"_ZTSN3JPH15ContactManifoldE", !15, i64 0, !15, i64 16, !14, i64 32, !76, i64 36, !76, i64 40, !85, i64 48, !85, i64 1088}
!85 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj64EEE", !27, i64 0, !7, i64 16}
!86 = !{!74, !17, i64 104}
!87 = distinct !{!87, !88}
!88 = !{!"llvm.loop.mustprogress"}


; 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::ContactConstraintManager::ContactAllocator" = type { %"class.JPH::LFHMAllocatorContext.base", i32, i32, i32 }
%"class.JPH::LFHMAllocatorContext.base" = type <{ ptr, i32, i32, i32 }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.42 }
%union.anon.42 = type { <4 x float> }
%"class.JPH::BodyAccess::Grant" = type { i8 }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::Vec3" = type { %union.anon.13 }
%union.anon.13 = type { <4 x float> }
%"class.JPH::DefaultBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", ptr, i16, [6 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::DefaultObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", ptr, i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::CollideShapeResult" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", %"class.JPH::BodyID", %"class.JPH::StaticArray.52", %"class.JPH::StaticArray.52" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.52" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%class.CCDNarrowPhaseCollector = type { %"class.JPH::CollisionCollector.53", i8, i8, ptr, ptr, ptr, ptr, float, %"class.JPH::BodyID" }
%"class.JPH::CollisionCollector.53" = type { ptr, float, ptr }
%"union.JPH::SimShapeFilterWrapperUnion" = type { %"class.JPH::SimShapeFilterWrapper" }
%"class.JPH::SimShapeFilterWrapper" = type { %"class.JPH::ShapeFilter.base", ptr, ptr, ptr }
%"class.JPH::ShapeFilter.base" = type <{ ptr, %"class.JPH::BodyID" }>
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT" }
%"struct.JPH::ShapeCastT" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%class.CCDBroadPhaseCollector = type <{ %"class.JPH::CollisionCollector.54", ptr, ptr, [8 x i8], %"class.JPH::Vec3", %"struct.JPH::RShapeCast", ptr, ptr, ptr, ptr, ptr, float, [4 x i8] }>
%"class.JPH::CollisionCollector.54" = type { ptr, float, ptr }
%"struct.JPH::AABoxCast" = type { %"class.JPH::AABox", %"class.JPH::Vec3" }
%"class.JPH::ContactManifold" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", [4 x i8], %"class.JPH::StaticArray.50", %"class.JPH::StaticArray.50" }
%"class.JPH::StaticArray.50" = type { i32, [12 x i8], [64 x %"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage" = type { [16 x i8] }
%"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::ContactSettings" = type { float, float, float, float, float, float, i8, %"class.JPH::Vec3", %"class.JPH::Vec3" }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress 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) #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 #2 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)) local_unnamed_addr #4 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 #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24ContactConstraintManager19GetContactAllocatorEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::ContactConstraintManager::ContactAllocator") align 8, ptr noundef nonnull align 8 dereferenceable(248)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3JPHL25sFinalizeContactAllocatorERNS_20PhysicsUpdateContext4StepERKNS_24ContactConstraintManager16ContactAllocatorE(ptr noundef nonnull align 8 dereferenceable(7344), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH26SimShapeFilterWrapperUnionD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 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: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt13__atomic_baseIjEppEi(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepE(ptr noundef nonnull align 16 dereferenceable(1172) %0, ptr nocapture noundef readonly %1, ptr noundef %2) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.JPH::BodyAccess::Grant", align 1
  %5 = alloca %"class.JPH::ContactConstraintManager::ContactAllocator", align 8
  %6 = alloca %"class.JPH::ShapeCastSettings", align 16
  %7 = alloca %"class.JPH::DefaultBroadPhaseLayerFilter", align 8
  %8 = alloca %"class.JPH::DefaultObjectLayerFilter", align 8
  %9 = alloca %"class.JPH::ShapeCastResult", align 16
  %10 = alloca %class.CCDNarrowPhaseCollector, align 8
  %11 = alloca %"union.JPH::SimShapeFilterWrapperUnion", align 8
  %12 = alloca %"struct.JPH::RShapeCast", align 16
  %13 = alloca %"class.JPH::Mat44", align 16
  %14 = alloca %class.CCDBroadPhaseCollector, align 16
  %15 = alloca %"struct.JPH::AABoxCast", align 16
  %16 = alloca %"class.JPH::ContactManifold", align 16
  %17 = alloca %"class.JPH::BodyID", align 4
  %18 = alloca %"class.JPH::Vec3", align 16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #10
  call void @_ZN3JPH10BodyAccess5GrantC2ENS0_7EAccessES2_(ptr noundef nonnull align 1 dereferenceable(1) %4, i8 noundef zeroext 1, i8 noundef zeroext 1)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #10
  %19 = getelementptr inbounds i8, ptr %0, i64 576
  invoke void @_ZN3JPH24ContactConstraintManager19GetContactAllocatorEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::ContactConstraintManager::ContactAllocator") align 8 %5, ptr noundef nonnull align 8 dereferenceable(248) %19)
          to label %20 unwind label %52

20:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #10
  invoke void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %6)
          to label %21 unwind label %54

21:                                               ; preds = %20
  %22 = getelementptr inbounds i8, ptr %6, i64 32
  store <4 x i8> <i8 0, i8 0, i8 1, i8 1>, ptr %22, align 16, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %6, i64 1
  store i8 0, ptr %23, align 1, !tbaa !8
  %24 = getelementptr inbounds i8, ptr %0, i64 570
  %25 = load i8, ptr %24, align 2, !tbaa !14, !range !45, !noundef !46
  %not. = xor i8 %25, 1
  store i8 %not., ptr %6, align 16, !tbaa !47
  %26 = getelementptr inbounds i8, ptr %2, i64 4584
  %27 = call noundef i32 @_ZNSt13__atomic_baseIjEppEi(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef 0) #10
  %28 = getelementptr inbounds i8, ptr %2, i64 4580
  %29 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %28) #10
  %.not96 = icmp ult i32 %27, %29
  br i1 %.not96, label %.lr.ph98, label %._crit_edge99

.lr.ph98:                                         ; preds = %21
  %30 = getelementptr inbounds i8, ptr %2, i64 4568
  %31 = getelementptr inbounds i8, ptr %0, i64 16
  %32 = getelementptr inbounds i8, ptr %1, i64 32
  %33 = getelementptr inbounds i8, ptr %0, i64 448
  %34 = getelementptr inbounds i8, ptr %0, i64 432
  %35 = getelementptr inbounds i8, ptr %12, i64 112
  %36 = getelementptr inbounds i8, ptr %15, i64 32
  %37 = getelementptr inbounds i8, ptr %12, i64 96
  %38 = getelementptr inbounds i8, ptr %12, i64 32
  %.sroa.521.0..sroa_idx = getelementptr inbounds i8, ptr %16, i64 8
  %.sroa.219.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %39 = getelementptr inbounds i8, ptr %9, i64 16
  %.sroa.217.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 24
  %40 = getelementptr inbounds i8, ptr %9, i64 32
  %.sroa.215.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 40
  %41 = getelementptr inbounds i8, ptr %0, i64 520
  %42 = getelementptr inbounds i8, ptr %9, i64 64
  %43 = getelementptr inbounds i8, ptr %9, i64 592
  %44 = getelementptr inbounds i8, ptr %16, i64 48
  %45 = getelementptr inbounds i8, ptr %16, i64 1088
  %46 = getelementptr inbounds i8, ptr %9, i64 52
  %47 = getelementptr inbounds i8, ptr %16, i64 36
  %48 = getelementptr inbounds i8, ptr %9, i64 48
  %49 = getelementptr inbounds i8, ptr %16, i64 32
  %50 = getelementptr inbounds i8, ptr %16, i64 16
  %51 = getelementptr inbounds i8, ptr %18, i64 8
  br label %56

52:                                               ; preds = %3
  %53 = landingpad { ptr, i32 }
          cleanup
  br label %185

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

56:                                               ; preds = %.lr.ph98, %173
  %57 = phi i32 [ %27, %.lr.ph98 ], [ %174, %173 ]
  %58 = load ptr, ptr %30, align 8, !tbaa !48
  %59 = zext i32 %57 to i64
  %60 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %58, i64 %59
  %61 = getelementptr inbounds i8, ptr %60, i64 48
  %62 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %31, ptr noundef nonnull align 4 dereferenceable(4) %61)
          to label %63 unwind label %112

63:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #10
  %64 = call noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122) %62)
  invoke void @_ZNK3JPH13PhysicsSystem31GetDefaultBroadPhaseLayerFilterEt(ptr dead_on_unwind nonnull writable sret(%"class.JPH::DefaultBroadPhaseLayerFilter") align 8 %7, ptr noundef nonnull align 16 dereferenceable(1172) %0, i16 noundef zeroext %64)
          to label %65 unwind label %114

65:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #10
  %66 = call noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122) %62)
  invoke void @_ZNK3JPH13PhysicsSystem21GetDefaultLayerFilterEt(ptr dead_on_unwind nonnull writable sret(%"class.JPH::DefaultObjectLayerFilter") align 8 %8, ptr noundef nonnull align 16 dereferenceable(1172) %0, i16 noundef zeroext %66)
          to label %67 unwind label %116

67:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 1136, ptr nonnull %9) #10
  invoke void @_ZN3JPH15ShapeCastResultC2Ev(ptr noundef nonnull align 16 dereferenceable(1125) %9)
          to label %68 unwind label %118

68:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %10) #10
  %69 = load float, ptr %32, align 8, !tbaa !55
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN23CCDNarrowPhaseCollectorC2ERKNS_11BodyManagerERNS_24ContactConstraintManagerERNS4_7CCDBodyERNS_15ShapeCastResultEf(ptr noundef nonnull align 8 dereferenceable(72) %10, ptr noundef nonnull align 8 dereferenceable(297) %31, ptr noundef nonnull align 8 dereferenceable(248) %19, ptr noundef nonnull align 16 dereferenceable(144) %60, ptr noundef nonnull align 16 dereferenceable(1125) %9, float noundef %69)
          to label %70 unwind label %120

70:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #10
  %71 = load ptr, ptr %33, align 16, !tbaa !59
  invoke void @_ZN3JPH26SimShapeFilterWrapperUnionC2EPKNS_14SimShapeFilterEPKNS_4BodyE(ptr noundef nonnull align 8 dereferenceable(40) %11, ptr noundef %71, ptr noundef nonnull %62)
          to label %72 unwind label %122

72:                                               ; preds = %70
  %73 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH26SimShapeFilterWrapperUnion24GetSimShapeFilterWrapperEv(ptr noundef nonnull align 8 dereferenceable(40) %11)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %12) #10
  %74 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %62)
          to label %75 unwind label %124

75:                                               ; preds = %72
  %76 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %77 unwind label %124

77:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #10
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %13, ptr noundef nonnull align 16 dereferenceable(122) %62)
          to label %78 unwind label %126

78:                                               ; preds = %77
  %79 = extractvalue { double, double } %76, 1
  %80 = extractvalue { double, double } %76, 0
  %.sroa.023.0.copyload = load double, ptr %60, align 16
  %.sroa.224.0..sroa_idx = getelementptr inbounds i8, ptr %60, i64 8
  %.sroa.224.0.copyload = load double, ptr %.sroa.224.0..sroa_idx, align 8, !tbaa !5
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %12, ptr noundef %74, double %80, double %79, ptr noundef nonnull align 16 dereferenceable(64) %13, double %.sroa.023.0.copyload, double %.sroa.224.0.copyload)
          to label %81 unwind label %126

81:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %14) #10
  %82 = load float, ptr %32, align 8, !tbaa !55
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN22CCDBroadPhaseCollectorC2ERKNS4_7CCDBodyERKNS_4BodyERKNS_10RShapeCastERNS_17ShapeCastSettingsERNS_21SimShapeFilterWrapperERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(252) %14, ptr noundef nonnull align 16 dereferenceable(144) %60, ptr noundef nonnull align 16 dereferenceable(122) %62, ptr noundef nonnull align 16 dereferenceable(144) %12, ptr noundef nonnull align 16 dereferenceable(36) %6, ptr noundef nonnull align 8 dereferenceable(40) %73, ptr noundef nonnull align 8 dereferenceable(72) %10, ptr noundef nonnull align 8 dereferenceable(297) %31, ptr noundef nonnull %2, float noundef %82)
          to label %83 unwind label %128

83:                                               ; preds = %81
  %84 = load ptr, ptr %34, align 16, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %15) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %15, ptr noundef nonnull align 16 dereferenceable(32) %35, i64 32, i1 false), !tbaa.struct !61
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %36, ptr noundef nonnull align 16 dereferenceable(16) %37, i64 16, i1 false), !tbaa.struct !62
  %85 = load ptr, ptr %84, align 8, !tbaa !63
  %86 = getelementptr inbounds i8, ptr %85, i64 176
  %87 = load ptr, ptr %86, align 8
  invoke void %87(ptr noundef nonnull align 8 dereferenceable(16) %84, ptr noundef nonnull align 16 dereferenceable(48) %15, ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %88 unwind label %130

88:                                               ; preds = %83
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %15) #10
  %89 = getelementptr inbounds i8, ptr %60, i64 64
  %90 = load float, ptr %89, align 16, !tbaa !65
  %91 = fcmp olt float %90, 1.000000e+00
  br i1 %91, label %92, label %173

92:                                               ; preds = %88
  %93 = getelementptr inbounds i8, ptr %60, i64 52
  %94 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %31, ptr noundef nonnull align 4 dereferenceable(4) %93)
          to label %95 unwind label %132

95:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 2128, ptr nonnull %16) #10
  call void @_ZN3JPH15ContactManifoldC2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %16) #10
  %96 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %38)
          to label %97 unwind label %134

97:                                               ; preds = %95
  %98 = extractvalue { double, double } %96, 0
  %99 = extractvalue { double, double } %96, 1
  store double %98, ptr %16, align 16
  store double %99, ptr %.sroa.521.0..sroa_idx, align 8, !tbaa !5
  %.sroa.018.0.copyload = load double, ptr %9, align 16
  %.sroa.219.0.copyload = load double, ptr %.sroa.219.0..sroa_idx, align 8, !tbaa !5
  %.sroa.016.0.copyload = load double, ptr %39, align 16
  %.sroa.217.0.copyload = load double, ptr %.sroa.217.0..sroa_idx, align 8, !tbaa !5
  %.sroa.014.0.copyload = load double, ptr %40, align 16
  %.sroa.215.0.copyload = load double, ptr %.sroa.215.0..sroa_idx, align 8, !tbaa !5
  %100 = load float, ptr %41, align 8, !tbaa !70
  invoke void @_ZN3JPH23ManifoldBetweenTwoFacesENS_4Vec3ES0_S0_fRKNS_11StaticArrayIS0_Lj32EEES4_RNS1_IS0_Lj64EEES6_(double %.sroa.018.0.copyload, double %.sroa.219.0.copyload, double %.sroa.016.0.copyload, double %.sroa.217.0.copyload, double %.sroa.014.0.copyload, double %.sroa.215.0.copyload, float noundef %100, ptr noundef nonnull align 16 dereferenceable(528) %42, ptr noundef nonnull align 16 dereferenceable(528) %43, ptr noundef nonnull align 16 dereferenceable(1040) %44, ptr noundef nonnull align 16 dereferenceable(1040) %45)
          to label %101 unwind label %136

101:                                              ; preds = %97
  %102 = load <2 x i32>, ptr %46, align 4, !tbaa !71
  store <2 x i32> %102, ptr %47, align 4, !tbaa !71
  %103 = load float, ptr %48, align 16, !tbaa !72
  store float %103, ptr %49, align 16, !tbaa !75
  %104 = getelementptr inbounds i8, ptr %60, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %50, ptr noundef nonnull align 16 dereferenceable(16) %104, i64 16, i1 false), !tbaa.struct !62
  %105 = getelementptr inbounds i8, ptr %60, i64 80
  invoke void @_ZN3JPH24ContactConstraintManager17OnCCDContactAddedERNS0_16ContactAllocatorERKNS_4BodyES5_RKNS_15ContactManifoldERNS_15ContactSettingsE(ptr noundef nonnull align 8 dereferenceable(248) %19, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 16 dereferenceable(122) %62, ptr noundef nonnull align 16 dereferenceable(122) %94, ptr noundef nonnull align 16 dereferenceable(2128) %16, ptr noundef nonnull align 16 dereferenceable(64) %105)
          to label %106 unwind label %136

106:                                              ; preds = %101
  %107 = getelementptr inbounds i8, ptr %60, i64 104
  %108 = load i8, ptr %107, align 8, !tbaa !78, !range !45, !noundef !46
  %109 = trunc nuw i8 %108 to i1
  br i1 %109, label %110, label %138

110:                                              ; preds = %106
  store float 1.000000e+00, ptr %89, align 16, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #10
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %111 = load i32, ptr %17, align 4, !tbaa !71
  store i32 %111, ptr %93, align 4, !tbaa !71
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #10
  br label %171

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

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

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

118:                                              ; preds = %67
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %181

120:                                              ; preds = %68
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %180

122:                                              ; preds = %70
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %179

124:                                              ; preds = %75, %72
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %178

126:                                              ; preds = %78, %77
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #10
  br label %178

128:                                              ; preds = %81
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %177

130:                                              ; preds = %83
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %15) #10
  br label %176

132:                                              ; preds = %92
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %176

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

136:                                              ; preds = %101, %97
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %172

138:                                              ; preds = %106
  %139 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %45)
  %140 = icmp ugt i32 %139, 1
  br i1 %140, label %141, label %163

141:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #10
  %142 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %143 unwind label %152

143:                                              ; preds = %141
  %144 = extractvalue { double, double } %142, 0
  store double %144, ptr %18, align 16
  %145 = extractvalue { double, double } %142, 1
  store double %145, ptr %51, align 8
  %146 = call noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE5beginEv(ptr noundef nonnull align 16 dereferenceable(1040) %45)
  %147 = call noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE3endEv(ptr noundef nonnull align 16 dereferenceable(1040) %45)
  %.not7794 = icmp eq ptr %146, %147
  br i1 %.not7794, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %143
  %148 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %45)
  %149 = uitofp i32 %148 to float
  %150 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef %149)
  %.sroa.02.0.copyload = load double, ptr %18, align 16
  %.sroa.23.0.copyload = load double, ptr %51, align 8, !tbaa !5
  %151 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %.sroa.02.0.copyload, double %.sroa.23.0.copyload)
          to label %156 unwind label %160

152:                                              ; preds = %141
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %162

.lr.ph:                                           ; preds = %143, %.lr.ph
  %.07595 = phi ptr [ %155, %.lr.ph ], [ %146, %143 ]
  %.sroa.06.0.copyload = load double, ptr %.07595, align 16
  %.sroa.27.0..sroa_idx = getelementptr inbounds i8, ptr %.07595, i64 8
  %.sroa.27.0.copyload = load double, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !5
  %154 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %.sroa.06.0.copyload, double %.sroa.27.0.copyload)
  %155 = getelementptr inbounds i8, ptr %.07595, i64 16
  %.not77 = icmp eq ptr %155, %147
  br i1 %.not77, label %._crit_edge, label %.lr.ph

156:                                              ; preds = %._crit_edge
  %157 = extractvalue { double, double } %151, 0
  %158 = extractvalue { double, double } %151, 1
  %159 = getelementptr inbounds i8, ptr %60, i64 32
  store double %157, ptr %159, align 16
  %.sroa.55.0..sroa_idx = getelementptr inbounds i8, ptr %60, i64 40
  store double %158, ptr %.sroa.55.0..sroa_idx, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  br label %171

160:                                              ; preds = %._crit_edge
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %162

162:                                              ; preds = %160, %152
  %.pn = phi { ptr, i32 } [ %161, %160 ], [ %153, %152 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  br label %172

163:                                              ; preds = %138
  %.sroa.0.0.copyload = load double, ptr %39, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.217.0..sroa_idx, align 8, !tbaa !5
  %164 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
          to label %165 unwind label %169

165:                                              ; preds = %163
  %166 = extractvalue { double, double } %164, 0
  %167 = extractvalue { double, double } %164, 1
  %168 = getelementptr inbounds i8, ptr %60, i64 32
  store double %166, ptr %168, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %60, i64 40
  store double %167, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  br label %171

169:                                              ; preds = %163
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %172

171:                                              ; preds = %156, %165, %110
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %16) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr nonnull %16) #10
  br label %173

172:                                              ; preds = %169, %162, %136, %134
  %.pn.pn = phi { ptr, i32 } [ %.pn, %162 ], [ %170, %169 ], [ %137, %136 ], [ %135, %134 ]
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %16) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr nonnull %16) #10
  br label %176

173:                                              ; preds = %88, %171
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(252) %14) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %12) #10
  call void @_ZN3JPH26SimShapeFilterWrapperUnionD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %10) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %10) #10
  call void @_ZN3JPH18CollideShapeResultD2Ev(ptr noundef nonnull align 16 dereferenceable(1125) %9) #10
  call void @llvm.lifetime.end.p0(i64 1136, ptr nonnull %9) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %8) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %7) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  %174 = call noundef i32 @_ZNSt13__atomic_baseIjEppEi(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef 0) #10
  %175 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %28) #10
  %.not = icmp ult i32 %174, %175
  br i1 %.not, label %56, label %._crit_edge99

176:                                              ; preds = %132, %172, %130
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %131, %130 ], [ %.pn.pn, %172 ], [ %133, %132 ]
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(252) %14) #10
  br label %177

177:                                              ; preds = %176, %128
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %176 ], [ %129, %128 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #10
  br label %178

178:                                              ; preds = %177, %126, %124
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %177 ], [ %127, %126 ], [ %125, %124 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %12) #10
  call void @_ZN3JPH26SimShapeFilterWrapperUnionD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  br label %179

179:                                              ; preds = %178, %122
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %178 ], [ %123, %122 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %10) #10
  br label %180

180:                                              ; preds = %179, %120
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %179 ], [ %121, %120 ]
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %10) #10
  call void @_ZN3JPH18CollideShapeResultD2Ev(ptr noundef nonnull align 16 dereferenceable(1125) %9) #10
  br label %181

181:                                              ; preds = %180, %118
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn, %180 ], [ %119, %118 ]
  call void @llvm.lifetime.end.p0(i64 1136, ptr nonnull %9) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %8) #10
  br label %182

182:                                              ; preds = %181, %116
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn, %181 ], [ %117, %116 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %7) #10
  br label %183

183:                                              ; preds = %182, %114
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %182 ], [ %115, %114 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  br label %184

._crit_edge99:                                    ; preds = %173, %21
  call void @_ZN3JPHL25sFinalizeContactAllocatorERNS_20PhysicsUpdateContext4StepERKNS_24ContactConstraintManager16ContactAllocatorE(ptr noundef nonnull align 8 dereferenceable(7344) %2, ptr noundef nonnull align 8 dereferenceable(32) %5)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #10
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #10
  ret void

184:                                              ; preds = %112, %183, %54
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %55, %54 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %183 ], [ %113, %112 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  br label %185

185:                                              ; preds = %184, %52
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %184 ], [ %53, %52 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #10
  call void @_ZN3JPH10BodyAccess5GrantD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #10
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH13PhysicsSystem31GetDefaultBroadPhaseLayerFilterEt(ptr dead_on_unwind noalias writable sret(%"class.JPH::DefaultBroadPhaseLayerFilter") align 8, ptr noundef nonnull align 16 dereferenceable(1172), i16 noundef zeroext) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH13PhysicsSystem21GetDefaultLayerFilterEt(ptr dead_on_unwind noalias writable sret(%"class.JPH::DefaultObjectLayerFilter") align 8, ptr noundef nonnull align 16 dereferenceable(1172), i16 noundef zeroext) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN23CCDNarrowPhaseCollectorC2ERKNS_11BodyManagerERNS_24ContactConstraintManagerERNS4_7CCDBodyERNS_15ShapeCastResultEf(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(297), ptr noundef nonnull align 8 dereferenceable(248), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(1125), float noundef) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN22CCDBroadPhaseCollectorC2ERKNS4_7CCDBodyERKNS_4BodyERKNS_10RShapeCastERNS_17ShapeCastSettingsERNS_21SimShapeFilterWrapperERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(252), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(297), ptr noundef, float noundef) unnamed_addr #4 align 2

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

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

declare void @_ZN3JPH23ManifoldBetweenTwoFacesENS_4Vec3ES0_S0_fRKNS_11StaticArrayIS0_Lj32EEES4_RNS1_IS0_Lj64EEES6_(double, double, double, double, double, double, float noundef, ptr noundef nonnull align 16 dereferenceable(528), ptr noundef nonnull align 16 dereferenceable(528), ptr noundef nonnull align 16 dereferenceable(1040), ptr noundef nonnull align 16 dereferenceable(1040)) local_unnamed_addr #7

declare void @_ZN3JPH24ContactConstraintManager17OnCCDContactAddedERNS0_16ContactAllocatorERKNS_4BodyES5_RKNS_15ContactManifoldERNS_15ContactSettingsE(ptr noundef nonnull align 8 dereferenceable(248), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(2128), ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #7

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

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

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

; 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 #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) local_unnamed_addr #9 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 #8 align 2

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

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

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

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

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

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

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass