; LLVM IR from zig-gamedev/zphysics :: libs/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.40 }
%union.anon.40 = 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.50", %"class.JPH::StaticArray.50" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.50" = 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.51", i8, i8, ptr, ptr, ptr, ptr, float, %"class.JPH::BodyID" }
%"class.JPH::CollisionCollector.51" = type { ptr, float, ptr }
%"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.52", ptr, ptr, [8 x i8], %"class.JPH::Vec3", %"struct.JPH::RShapeCast", ptr, ptr, ptr, ptr, float, [12 x i8] }>
%"class.JPH::CollisionCollector.52" = 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.48", %"class.JPH::StaticArray.48" }
%"class.JPH::StaticArray.48" = 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, %"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", [8 x i8], %"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 }
%"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 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: 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 } @_ZN3JPH4Vec310sReplicateEf(float noundef) #6 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 @_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(1140) %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 %"struct.JPH::RShapeCast", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Mat44", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %class.CCDBroadPhaseCollector, align 16
  %25 = alloca %"struct.JPH::AABoxCast", align 16
  %26 = alloca ptr, align 8
  %27 = alloca %"class.JPH::ContactManifold", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::BodyID", align 4
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = 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
  %43 = 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
  %44 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %43, i32 0, i32 13
  invoke void @_ZN3JPH24ContactConstraintManager19GetContactAllocatorEv(ptr dead_on_unwind writable sret(%"class.JPH::ContactConstraintManager::ContactAllocator") align 8 %8, ptr noundef nonnull align 8 dereferenceable(248) %44)
          to label %45 unwind label %69

45:                                               ; 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 %46 unwind label %73

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

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

68:                                               ; preds = %59
  store i32 2, ptr %13, align 4
  br label %378

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

73:                                               ; preds = %389, %45
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %9, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %10, align 4
  br label %392

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

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

91:                                               ; preds = %88
  invoke void @_ZNK3JPH13PhysicsSystem31GetDefaultBroadPhaseLayerFilterEt(ptr dead_on_unwind writable sret(%"class.JPH::DefaultBroadPhaseLayerFilter") align 8 %16, ptr noundef nonnull align 16 dereferenceable(1140) %43, i16 noundef zeroext %90)
          to label %92 unwind label %221

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

95:                                               ; preds = %92
  invoke void @_ZNK3JPH13PhysicsSystem21GetDefaultLayerFilterEt(ptr dead_on_unwind writable sret(%"class.JPH::DefaultObjectLayerFilter") align 8 %17, ptr noundef nonnull align 16 dereferenceable(1140) %43, i16 noundef zeroext %94)
          to label %96 unwind label %225

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

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

104:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 144, ptr %20) #10
  %105 = load ptr, ptr %15, align 8, !tbaa !5
  %106 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %105)
          to label %107 unwind label %237

107:                                              ; preds = %104
  %108 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %109 unwind label %237

109:                                              ; preds = %107
  %110 = getelementptr inbounds %"class.JPH::Vec3", ptr %21, i32 0, i32 0
  %111 = getelementptr inbounds %union.anon.13, ptr %110, i32 0, i32 0
  %112 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 0
  %113 = extractvalue { double, double } %108, 0
  store double %113, ptr %112, align 16
  %114 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 1
  %115 = extractvalue { double, double } %108, 1
  store double %115, ptr %114, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %22) #10
  %116 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %22, ptr noundef nonnull align 16 dereferenceable(122) %116)
          to label %117 unwind label %241

117:                                              ; preds = %109
  %118 = load ptr, ptr %14, align 8, !tbaa !5
  %119 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %118, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 %119, i64 16, i1 false), !tbaa.struct !64
  %120 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %121 = load double, ptr %120, align 16
  %122 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %123 = load double, ptr %122, align 8
  %124 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %125 = load double, ptr %124, align 16
  %126 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %127 = load double, ptr %126, align 8
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %20, ptr noundef %106, double %121, double %123, ptr noundef nonnull align 16 dereferenceable(64) %22, double %125, double %127)
          to label %128 unwind label %241

128:                                              ; preds = %117
  call void @llvm.lifetime.end.p0(i64 64, ptr %22) #10
  call void @llvm.lifetime.start.p0(i64 256, ptr %24) #10
  %129 = load ptr, ptr %14, align 8, !tbaa !5
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %43, i32 0, i32 2
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  %134 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %133, i32 0, i32 4
  %135 = load float, ptr %134, align 8, !tbaa !60
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN22CCDBroadPhaseCollectorC2ERKNS4_7CCDBodyERKNS_4BodyERKNS_10RShapeCastERNS_17ShapeCastSettingsERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(244) %24, ptr noundef nonnull align 16 dereferenceable(144) %129, ptr noundef nonnull align 16 dereferenceable(122) %130, ptr noundef nonnull align 16 dereferenceable(144) %20, ptr noundef nonnull align 16 dereferenceable(36) %11, ptr noundef nonnull align 8 dereferenceable(72) %19, ptr noundef nonnull align 8 dereferenceable(297) %131, ptr noundef %132, float noundef %135)
          to label %136 unwind label %245

136:                                              ; preds = %128
  %137 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %43, i32 0, i32 9
  %138 = load ptr, ptr %137, align 16, !tbaa !66
  call void @llvm.lifetime.start.p0(i64 48, ptr %25) #10
  %139 = getelementptr inbounds %"struct.JPH::AABoxCast", ptr %25, i32 0, i32 0
  %140 = getelementptr inbounds %"struct.JPH::ShapeCastT", ptr %20, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %139, ptr align 16 %140, i64 32, i1 false), !tbaa.struct !67
  %141 = getelementptr inbounds %"struct.JPH::AABoxCast", ptr %25, i32 0, i32 1
  %142 = getelementptr inbounds %"struct.JPH::ShapeCastT", ptr %20, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %141, ptr align 16 %142, i64 16, i1 false), !tbaa.struct !64
  %143 = load ptr, ptr %138, align 8, !tbaa !68
  %144 = getelementptr inbounds ptr, ptr %143, i64 22
  %145 = load ptr, ptr %144, align 8
  invoke void %145(ptr noundef nonnull align 8 dereferenceable(16) %138, ptr noundef nonnull align 16 dereferenceable(48) %25, ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %146 unwind label %249

146:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 48, ptr %25) #10
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %147, i32 0, i32 7
  %149 = load float, ptr %148, align 16, !tbaa !70
  %150 = fcmp olt float %149, 1.000000e+00
  br i1 %150, label %151, label %377

151:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %152 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %43, i32 0, i32 2
  %153 = load ptr, ptr %14, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %153, i32 0, i32 4
  %155 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %152, ptr noundef nonnull align 4 dereferenceable(4) %154)
          to label %156 unwind label %253

156:                                              ; preds = %151
  store ptr %155, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2128, ptr %27) #10
  call void @_ZN3JPH15ContactManifoldC2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %27) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #10
  %157 = getelementptr inbounds %"struct.JPH::ShapeCastT", ptr %20, i32 0, i32 2
  %158 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %157)
          to label %159 unwind label %257

159:                                              ; preds = %156
  %160 = getelementptr inbounds %"class.JPH::Vec3", ptr %28, i32 0, i32 0
  %161 = getelementptr inbounds %union.anon.13, ptr %160, i32 0, i32 0
  %162 = getelementptr inbounds { double, double }, ptr %161, i32 0, i32 0
  %163 = extractvalue { double, double } %158, 0
  store double %163, ptr %162, align 16
  %164 = getelementptr inbounds { double, double }, ptr %161, i32 0, i32 1
  %165 = extractvalue { double, double } %158, 1
  store double %165, ptr %164, align 8
  %166 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %166, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  %167 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %29, ptr align 16 %167, i64 16, i1 false), !tbaa.struct !64
  %168 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %30, ptr align 16 %168, i64 16, i1 false), !tbaa.struct !64
  %169 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %169, i64 16, i1 false), !tbaa.struct !64
  %170 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %43, i32 0, i32 11
  %171 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %170, i32 0, i32 8
  %172 = load float, ptr %171, align 16, !tbaa !75
  %173 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 7
  %174 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 8
  %175 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 6
  %176 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 7
  %177 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %178 = load double, ptr %177, align 16
  %179 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %180 = load double, ptr %179, align 8
  %181 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %182 = load double, ptr %181, align 16
  %183 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %184 = load double, ptr %183, align 8
  %185 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %186 = load double, ptr %185, align 16
  %187 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %188 = load double, ptr %187, align 8
  invoke void @_ZN3JPH23ManifoldBetweenTwoFacesENS_4Vec3ES0_S0_fRKNS_11StaticArrayIS0_Lj32EEES4_RNS1_IS0_Lj64EEES6_(double %178, double %180, double %182, double %184, double %186, double %188, float noundef %172, ptr noundef nonnull align 16 dereferenceable(528) %173, ptr noundef nonnull align 16 dereferenceable(528) %174, ptr noundef nonnull align 16 dereferenceable(1040) %175, ptr noundef nonnull align 16 dereferenceable(1040) %176)
          to label %189 unwind label %261

189:                                              ; preds = %159
  %190 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 4
  %191 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %191, ptr align 4 %190, i64 4, i1 false), !tbaa.struct !76
  %192 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 5
  %193 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %193, ptr align 8 %192, i64 4, i1 false), !tbaa.struct !76
  %194 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 3
  %195 = load float, ptr %194, align 16, !tbaa !77
  %196 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 2
  store float %195, ptr %196, align 16, !tbaa !80
  %197 = load ptr, ptr %14, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %197, i32 0, i32 1
  %199 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %199, ptr align 16 %198, i64 16, i1 false), !tbaa.struct !64
  %200 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %43, i32 0, i32 13
  %201 = load ptr, ptr %15, align 8, !tbaa !5
  %202 = load ptr, ptr %26, align 8, !tbaa !5
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %203, i32 0, i32 10
  invoke void @_ZN3JPH24ContactConstraintManager17OnCCDContactAddedERNS0_16ContactAllocatorERKNS_4BodyES5_RKNS_15ContactManifoldERNS_15ContactSettingsE(ptr noundef nonnull align 8 dereferenceable(248) %200, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 16 dereferenceable(122) %201, ptr noundef nonnull align 16 dereferenceable(122) %202, ptr noundef nonnull align 16 dereferenceable(2128) %27, ptr noundef nonnull align 16 dereferenceable(64) %204)
          to label %205 unwind label %261

205:                                              ; preds = %189
  %206 = load ptr, ptr %14, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %206, i32 0, i32 10
  %208 = getelementptr inbounds %"class.JPH::ContactSettings", ptr %207, i32 0, i32 6
  %209 = load i8, ptr %208, align 8, !tbaa !83, !range !49, !noundef !50
  %210 = trunc i8 %209 to i1
  br i1 %210, label %211, label %269

211:                                              ; preds = %205
  %212 = load ptr, ptr %14, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %212, i32 0, i32 7
  store float 1.000000e+00, ptr %213, align 16, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  invoke void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %214 unwind label %265

214:                                              ; preds = %211
  %215 = load ptr, ptr %14, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %215, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %216, ptr align 4 %32, i64 4, i1 false), !tbaa.struct !76
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %374

217:                                              ; preds = %77
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %9, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %10, align 4
  br label %388

221:                                              ; preds = %91, %88
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %9, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %10, align 4
  br label %387

225:                                              ; preds = %95, %92
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %9, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %10, align 4
  br label %386

229:                                              ; preds = %96
  %230 = landingpad { ptr, i32 }
          cleanup
  %231 = extractvalue { ptr, i32 } %230, 0
  store ptr %231, ptr %9, align 8
  %232 = extractvalue { ptr, i32 } %230, 1
  store i32 %232, ptr %10, align 4
  br label %385

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

237:                                              ; preds = %107, %104
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %9, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %10, align 4
  br label %383

241:                                              ; preds = %117, %109
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %9, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %22) #10
  br label %383

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

249:                                              ; preds = %136
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %9, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 48, ptr %25) #10
  br label %381

253:                                              ; preds = %151
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %9, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %10, align 4
  br label %376

257:                                              ; preds = %156
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %9, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  br label %375

261:                                              ; preds = %269, %189, %159
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %9, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %10, align 4
  br label %375

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

269:                                              ; preds = %205
  %270 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 7
  %271 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %270)
          to label %272 unwind label %261

272:                                              ; preds = %269
  %273 = icmp ugt i32 %271, 1
  br i1 %273, label %274, label %352

274:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #10
  %275 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %276 unwind label %295

276:                                              ; preds = %274
  %277 = getelementptr inbounds %"class.JPH::Vec3", ptr %33, i32 0, i32 0
  %278 = getelementptr inbounds %union.anon.13, ptr %277, i32 0, i32 0
  %279 = getelementptr inbounds { double, double }, ptr %278, i32 0, i32 0
  %280 = extractvalue { double, double } %275, 0
  store double %280, ptr %279, align 16
  %281 = getelementptr inbounds { double, double }, ptr %278, i32 0, i32 1
  %282 = extractvalue { double, double } %275, 1
  store double %282, ptr %281, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %283 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 7
  store ptr %283, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  %284 = load ptr, ptr %34, align 8, !tbaa !5
  %285 = invoke noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE5beginEv(ptr noundef nonnull align 16 dereferenceable(1040) %284)
          to label %286 unwind label %299

286:                                              ; preds = %276
  store ptr %285, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %287 = load ptr, ptr %34, align 8, !tbaa !5
  %288 = invoke noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE3endEv(ptr noundef nonnull align 16 dereferenceable(1040) %287)
          to label %289 unwind label %303

289:                                              ; preds = %286
  store ptr %288, ptr %36, align 8, !tbaa !5
  br label %290

290:                                              ; preds = %316, %289
  %291 = load ptr, ptr %35, align 8, !tbaa !5
  %292 = load ptr, ptr %36, align 8, !tbaa !5
  %293 = icmp ne ptr %291, %292
  br i1 %293, label %307, label %294

294:                                              ; preds = %290
  store i32 4, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %325

295:                                              ; preds = %328, %325, %274
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %9, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %10, align 4
  br label %351

299:                                              ; preds = %276
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %9, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %10, align 4
  br label %324

303:                                              ; preds = %286
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %9, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %10, align 4
  br label %323

307:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  %308 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %308, ptr %37, align 8, !tbaa !5
  %309 = load ptr, ptr %37, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %309, i64 16, i1 false), !tbaa.struct !64
  %310 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %311 = load double, ptr %310, align 16
  %312 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %313 = load double, ptr %312, align 8
  %314 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %311, double %313)
          to label %315 unwind label %319

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

316:                                              ; preds = %315
  %317 = load ptr, ptr %35, align 8, !tbaa !5
  %318 = getelementptr inbounds %"class.JPH::Vec3", ptr %317, i32 1
  store ptr %318, ptr %35, align 8, !tbaa !5
  br label %290

319:                                              ; preds = %307
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %9, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  br label %323

323:                                              ; preds = %319, %303
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %324

324:                                              ; preds = %323, %299
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %351

325:                                              ; preds = %294
  %326 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 7
  %327 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %326)
          to label %328 unwind label %295

328:                                              ; preds = %325
  %329 = uitofp i32 %327 to float
  %330 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %33, float noundef %329)
          to label %331 unwind label %295

331:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #10
  %332 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %33, i64 16, i1 false), !tbaa.struct !64
  %333 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %334 = load double, ptr %333, align 16
  %335 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %336 = load double, ptr %335, align 8
  %337 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %332, double %334, double %336)
          to label %338 unwind label %347

338:                                              ; preds = %331
  %339 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, i32 0, i32 0
  %340 = getelementptr inbounds %union.anon.13, ptr %339, i32 0, i32 0
  %341 = getelementptr inbounds { double, double }, ptr %340, i32 0, i32 0
  %342 = extractvalue { double, double } %337, 0
  store double %342, ptr %341, align 16
  %343 = getelementptr inbounds { double, double }, ptr %340, i32 0, i32 1
  %344 = extractvalue { double, double } %337, 1
  store double %344, ptr %343, align 8
  %345 = load ptr, ptr %14, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %345, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %346, ptr align 16 %39, i64 16, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #10
  br label %373

347:                                              ; preds = %331
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %9, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #10
  br label %351

351:                                              ; preds = %347, %324, %295
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #10
  br label %375

352:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #10
  %353 = getelementptr inbounds %"class.JPH::ContactManifold", ptr %27, i32 0, i32 0
  %354 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %18, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 %354, i64 16, i1 false), !tbaa.struct !64
  %355 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %356 = load double, ptr %355, align 16
  %357 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %358 = load double, ptr %357, align 8
  %359 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %353, double %356, double %358)
          to label %360 unwind label %369

360:                                              ; preds = %352
  %361 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %362 = getelementptr inbounds %union.anon.13, ptr %361, i32 0, i32 0
  %363 = getelementptr inbounds { double, double }, ptr %362, i32 0, i32 0
  %364 = extractvalue { double, double } %359, 0
  store double %364, ptr %363, align 16
  %365 = getelementptr inbounds { double, double }, ptr %362, i32 0, i32 1
  %366 = extractvalue { double, double } %359, 1
  store double %366, ptr %365, align 8
  %367 = load ptr, ptr %14, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %367, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %368, ptr align 16 %41, i64 16, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #10
  br label %373

369:                                              ; preds = %352
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %9, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #10
  br label %375

373:                                              ; preds = %360, %338
  br label %374

374:                                              ; preds = %373, %214
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %27) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %377

375:                                              ; preds = %369, %351, %265, %261, %257
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %27) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr %27) #10
  br label %376

376:                                              ; preds = %375, %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %381

377:                                              ; preds = %374, %146
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(244) %24) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 144, 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 %378

378:                                              ; preds = %377, %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  %379 = load i32, ptr %13, align 4
  switch i32 %379, label %399 [
    i32 0, label %380
    i32 2, label %389
  ]

380:                                              ; preds = %378
  br label %59, !llvm.loop !84

381:                                              ; preds = %376, %249
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(244) %24) #10
  br label %382

382:                                              ; preds = %381, %245
  call void @llvm.lifetime.end.p0(i64 256, ptr %24) #10
  br label %383

383:                                              ; preds = %382, %241, %237
  call void @llvm.lifetime.end.p0(i64 144, ptr %20) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %19) #10
  br label %384

384:                                              ; preds = %383, %233
  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 %385

385:                                              ; preds = %384, %229
  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 %386

386:                                              ; preds = %385, %225
  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 %387

387:                                              ; preds = %386, %221
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #10
  br label %388

388:                                              ; preds = %387, %217
  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 %392

389:                                              ; preds = %378
  %390 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPHL25sFinalizeContactAllocatorERNS_20PhysicsUpdateContext4StepERKNS_24ContactConstraintManager16ContactAllocatorE(ptr noundef nonnull align 8 dereferenceable(7344) %390, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %391 unwind label %73

391:                                              ; preds = %389
  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

392:                                              ; preds = %388, %73
  call void @llvm.lifetime.end.p0(i64 48, ptr %11) #10
  br label %393

393:                                              ; preds = %392, %69
  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 %394

394:                                              ; preds = %393
  %395 = load ptr, ptr %9, align 8
  %396 = load i32, ptr %10, align 4
  %397 = insertvalue { ptr, i32 } poison, ptr %395, 0
  %398 = insertvalue { ptr, i32 } %397, i32 %396, 1
  resume { ptr, i32 } %398

399:                                              ; preds = %378
  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(1140), 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(1140), 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_17ShapeCastSettingsERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(244), 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(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)) #7 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)) #8

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)) #8

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() #6 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) #6 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"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { "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 530}
!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, !40, i64 448, !41, i64 536, !44, i64 784, !46, i64 864, !47, i64 976, !28, i64 1040, !48, i64 1088, !15, i64 1120, !14, i64 1136}
!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 = !{!"_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}
!41 = !{!"_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, !42, i64 236, !6, i64 240}
!42 = !{!"_ZTSSt6atomicIjE", !43, i64 0}
!43 = !{!"_ZTSSt13__atomic_baseIjE", !27, i64 0}
!44 = !{!"_ZTSN3JPH17ConstraintManagerE", !6, i64 0, !45, i64 8, !28, i64 32}
!45 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!46 = !{!"_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}
!47 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !27, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !27, i64 32, !42, i64 36, !27, i64 40, !6, i64 48, !42, i64 56}
!48 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!49 = !{i8 0, i8 2}
!50 = !{}
!51 = !{!11, !12, i64 0}
!52 = !{!27, !27, i64 0}
!53 = !{!54, !6, i64 4568}
!54 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !6, i64 0, !17, i64 8, !17, i64 9, !55, i64 16, !27, i64 48, !42, i64 52, !7, i64 56, !42, i64 116, !7, i64 120, !42, i64 180, !7, i64 184, !42, i64 244, !7, i64 248, !42, i64 308, !7, i64 312, !42, i64 372, !7, i64 376, !56, i64 436, !27, i64 4536, !42, i64 4540, !42, i64 4544, !42, i64 4548, !42, i64 4552, !42, i64 4556, !42, i64 4560, !6, i64 4568, !27, i64 4576, !42, i64 4580, !42, i64 4584, !6, i64 4592, !27, i64 4600, !57, i64 4608, !59, i64 4616, !59, i64 4880, !59, i64 5144, !59, i64 5408, !57, i64 5672, !59, i64 5680, !57, i64 5944, !57, i64 5952, !57, i64 5960, !59, i64 5968, !57, i64 6232, !59, i64 6240, !57, i64 6504, !57, i64 6512, !59, i64 6520, !57, i64 6784, !57, i64 6792, !59, i64 6800, !59, i64 7064, !57, i64 7328, !57, i64 7336}
!55 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !7, i64 0}
!56 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !27, i64 0, !7, i64 4}
!57 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !58, i64 0}
!58 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !6, i64 0}
!59 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !27, i64 0, !7, i64 8}
!60 = !{!61, !14, i64 32}
!61 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !14, i64 32, !14, i64 36, !42, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !62, i64 72, !27, i64 104, !6, i64 112, !42, i64 120}
!62 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !63, i64 0, !26, i64 8, !26, i64 16, !6, i64 24}
!63 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !6, i64 0}
!64 = !{i64 0, i64 16, !65}
!65 = !{!7, !7, i64 0}
!66 = !{!23, !6, i64 432}
!67 = !{i64 0, i64 16, !65, i64 16, i64 16, !65}
!68 = !{!69, !69, i64 0}
!69 = !{!"vtable pointer", !8, i64 0}
!70 = !{!71, !14, i64 64}
!71 = !{!"_ZTSN3JPH20PhysicsUpdateContext4Step7CCDBodyE", !15, i64 0, !15, i64 16, !15, i64 32, !72, i64 48, !72, i64 52, !73, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !74, i64 80}
!72 = !{!"_ZTSN3JPH6BodyIDE", !27, i64 0}
!73 = !{!"_ZTSN3JPH10SubShapeIDE", !27, i64 0}
!74 = !{!"_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}
!75 = !{!23, !14, i64 480}
!76 = !{i64 0, i64 4, !52}
!77 = !{!78, !14, i64 48}
!78 = !{!"_ZTSN3JPH18CollideShapeResultE", !15, i64 0, !15, i64 16, !15, i64 32, !14, i64 48, !73, i64 52, !73, i64 56, !72, i64 60, !79, i64 64, !79, i64 592}
!79 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !27, i64 0, !7, i64 16}
!80 = !{!81, !14, i64 32}
!81 = !{!"_ZTSN3JPH15ContactManifoldE", !15, i64 0, !15, i64 16, !14, i64 32, !73, i64 36, !73, i64 40, !82, i64 48, !82, i64 1088}
!82 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj64EEE", !27, i64 0, !7, i64 16}
!83 = !{!71, !17, i64 104}
!84 = distinct !{!84, !85}
!85 = !{!"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.40 }
%union.anon.40 = 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.50", %"class.JPH::StaticArray.50" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.50" = 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.51", i8, i8, ptr, ptr, ptr, ptr, float, %"class.JPH::BodyID" }
%"class.JPH::CollisionCollector.51" = type { ptr, float, ptr }
%"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.52", ptr, ptr, [8 x i8], %"class.JPH::Vec3", %"struct.JPH::RShapeCast", ptr, ptr, ptr, ptr, float, [12 x i8] }>
%"class.JPH::CollisionCollector.52" = 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.48", %"class.JPH::StaticArray.48" }
%"class.JPH::StaticArray.48" = 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 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: 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 } @_ZN3JPH4Vec310sReplicateEf(float noundef) local_unnamed_addr #6 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 @_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(1140) %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 %"struct.JPH::RShapeCast", align 16
  %12 = alloca %"class.JPH::Mat44", align 16
  %13 = alloca %class.CCDBroadPhaseCollector, align 16
  %14 = alloca %"struct.JPH::AABoxCast", align 16
  %15 = alloca %"class.JPH::ContactManifold", align 16
  %16 = alloca %"class.JPH::BodyID", align 4
  %17 = 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
  %18 = getelementptr inbounds i8, ptr %0, i64 536
  invoke void @_ZN3JPH24ContactConstraintManager19GetContactAllocatorEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::ContactConstraintManager::ContactAllocator") align 8 %5, ptr noundef nonnull align 8 dereferenceable(248) %18)
          to label %19 unwind label %50

19:                                               ; 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 %20 unwind label %52

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

.lr.ph94:                                         ; preds = %20
  %29 = getelementptr inbounds i8, ptr %2, i64 4568
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  %31 = getelementptr inbounds i8, ptr %1, i64 32
  %32 = getelementptr inbounds i8, ptr %0, i64 432
  %33 = getelementptr inbounds i8, ptr %11, i64 112
  %34 = getelementptr inbounds i8, ptr %14, i64 32
  %35 = getelementptr inbounds i8, ptr %11, i64 96
  %36 = getelementptr inbounds i8, ptr %11, i64 32
  %.sroa.521.0..sroa_idx = getelementptr inbounds i8, ptr %15, i64 8
  %.sroa.219.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %37 = getelementptr inbounds i8, ptr %9, i64 16
  %.sroa.217.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 24
  %38 = getelementptr inbounds i8, ptr %9, i64 32
  %.sroa.215.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 40
  %39 = getelementptr inbounds i8, ptr %0, i64 480
  %40 = getelementptr inbounds i8, ptr %9, i64 64
  %41 = getelementptr inbounds i8, ptr %9, i64 592
  %42 = getelementptr inbounds i8, ptr %15, i64 48
  %43 = getelementptr inbounds i8, ptr %15, i64 1088
  %44 = getelementptr inbounds i8, ptr %9, i64 52
  %45 = getelementptr inbounds i8, ptr %15, i64 36
  %46 = getelementptr inbounds i8, ptr %9, i64 48
  %47 = getelementptr inbounds i8, ptr %15, i64 32
  %48 = getelementptr inbounds i8, ptr %15, i64 16
  %49 = getelementptr inbounds i8, ptr %17, i64 8
  br label %54

50:                                               ; preds = %3
  %51 = landingpad { ptr, i32 }
          cleanup
  br label %177

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

54:                                               ; preds = %.lr.ph94, %166
  %55 = phi i32 [ %26, %.lr.ph94 ], [ %167, %166 ]
  %56 = load ptr, ptr %29, align 8, !tbaa !46
  %57 = zext i32 %55 to i64
  %58 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step::CCDBody", ptr %56, i64 %57
  %59 = getelementptr inbounds i8, ptr %58, i64 48
  %60 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %30, ptr noundef nonnull align 4 dereferenceable(4) %59)
          to label %61 unwind label %107

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

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

65:                                               ; preds = %63
  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 %66 unwind label %113

66:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %10) #10
  %67 = load float, ptr %31, align 8, !tbaa !53
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN23CCDNarrowPhaseCollectorC2ERKNS_11BodyManagerERNS_24ContactConstraintManagerERNS4_7CCDBodyERNS_15ShapeCastResultEf(ptr noundef nonnull align 8 dereferenceable(72) %10, ptr noundef nonnull align 8 dereferenceable(297) %30, ptr noundef nonnull align 8 dereferenceable(248) %18, ptr noundef nonnull align 16 dereferenceable(144) %58, ptr noundef nonnull align 16 dereferenceable(1125) %9, float noundef %67)
          to label %68 unwind label %115

68:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %11) #10
  %69 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %60)
          to label %70 unwind label %117

70:                                               ; preds = %68
  %71 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %72 unwind label %117

72:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #10
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %12, ptr noundef nonnull align 16 dereferenceable(122) %60)
          to label %73 unwind label %119

73:                                               ; preds = %72
  %74 = extractvalue { double, double } %71, 1
  %75 = extractvalue { double, double } %71, 0
  %.sroa.023.0.copyload = load double, ptr %58, align 16
  %.sroa.224.0..sroa_idx = getelementptr inbounds i8, ptr %58, 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) %11, ptr noundef %69, double %75, double %74, ptr noundef nonnull align 16 dereferenceable(64) %12, double %.sroa.023.0.copyload, double %.sroa.224.0.copyload)
          to label %76 unwind label %119

76:                                               ; preds = %73
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %13) #10
  %77 = load float, ptr %31, align 8, !tbaa !53
  invoke void @_ZZN3JPH13PhysicsSystem18JobFindCCDContactsEPKNS_20PhysicsUpdateContextEPNS1_4StepEEN22CCDBroadPhaseCollectorC2ERKNS4_7CCDBodyERKNS_4BodyERKNS_10RShapeCastERNS_17ShapeCastSettingsERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(244) %13, ptr noundef nonnull align 16 dereferenceable(144) %58, ptr noundef nonnull align 16 dereferenceable(122) %60, ptr noundef nonnull align 16 dereferenceable(144) %11, ptr noundef nonnull align 16 dereferenceable(36) %6, ptr noundef nonnull align 8 dereferenceable(72) %10, ptr noundef nonnull align 8 dereferenceable(297) %30, ptr noundef nonnull %2, float noundef %77)
          to label %78 unwind label %121

78:                                               ; preds = %76
  %79 = load ptr, ptr %32, align 16, !tbaa !57
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %14) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %14, ptr noundef nonnull align 16 dereferenceable(32) %33, i64 32, i1 false), !tbaa.struct !58
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %34, ptr noundef nonnull align 16 dereferenceable(16) %35, i64 16, i1 false), !tbaa.struct !59
  %80 = load ptr, ptr %79, align 8, !tbaa !60
  %81 = getelementptr inbounds i8, ptr %80, i64 176
  %82 = load ptr, ptr %81, align 8
  invoke void %82(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull align 16 dereferenceable(48) %14, ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %83 unwind label %123

83:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #10
  %84 = getelementptr inbounds i8, ptr %58, i64 64
  %85 = load float, ptr %84, align 16, !tbaa !62
  %86 = fcmp olt float %85, 1.000000e+00
  br i1 %86, label %87, label %166

87:                                               ; preds = %83
  %88 = getelementptr inbounds i8, ptr %58, i64 52
  %89 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZN3JPH11BodyManager7GetBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(297) %30, ptr noundef nonnull align 4 dereferenceable(4) %88)
          to label %90 unwind label %125

90:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 2128, ptr nonnull %15) #10
  call void @_ZN3JPH15ContactManifoldC2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %15) #10
  %91 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %36)
          to label %92 unwind label %127

92:                                               ; preds = %90
  %93 = extractvalue { double, double } %91, 0
  %94 = extractvalue { double, double } %91, 1
  store double %93, ptr %15, align 16
  store double %94, 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 %37, 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 %38, align 16
  %.sroa.215.0.copyload = load double, ptr %.sroa.215.0..sroa_idx, align 8, !tbaa !5
  %95 = load float, ptr %39, align 16, !tbaa !67
  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 %95, ptr noundef nonnull align 16 dereferenceable(528) %40, ptr noundef nonnull align 16 dereferenceable(528) %41, ptr noundef nonnull align 16 dereferenceable(1040) %42, ptr noundef nonnull align 16 dereferenceable(1040) %43)
          to label %96 unwind label %129

96:                                               ; preds = %92
  %97 = load <2 x i32>, ptr %44, align 4, !tbaa !68
  store <2 x i32> %97, ptr %45, align 4, !tbaa !68
  %98 = load float, ptr %46, align 16, !tbaa !69
  store float %98, ptr %47, align 16, !tbaa !72
  %99 = getelementptr inbounds i8, ptr %58, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %48, ptr noundef nonnull align 16 dereferenceable(16) %99, i64 16, i1 false), !tbaa.struct !59
  %100 = getelementptr inbounds i8, ptr %58, i64 80
  invoke void @_ZN3JPH24ContactConstraintManager17OnCCDContactAddedERNS0_16ContactAllocatorERKNS_4BodyES5_RKNS_15ContactManifoldERNS_15ContactSettingsE(ptr noundef nonnull align 8 dereferenceable(248) %18, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 16 dereferenceable(122) %60, ptr noundef nonnull align 16 dereferenceable(122) %89, ptr noundef nonnull align 16 dereferenceable(2128) %15, ptr noundef nonnull align 16 dereferenceable(64) %100)
          to label %101 unwind label %129

101:                                              ; preds = %96
  %102 = getelementptr inbounds i8, ptr %58, i64 104
  %103 = load i8, ptr %102, align 8, !tbaa !75, !range !43, !noundef !44
  %104 = trunc nuw i8 %103 to i1
  br i1 %104, label %105, label %131

105:                                              ; preds = %101
  store float 1.000000e+00, ptr %84, align 16, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #10
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %16)
  %106 = load i32, ptr %16, align 4, !tbaa !68
  store i32 %106, ptr %88, align 4, !tbaa !68
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #10
  br label %164

107:                                              ; preds = %54
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %176

109:                                              ; preds = %61
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %175

111:                                              ; preds = %63
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %174

113:                                              ; preds = %65
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %173

115:                                              ; preds = %66
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %172

117:                                              ; preds = %70, %68
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %171

119:                                              ; preds = %73, %72
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #10
  br label %171

121:                                              ; preds = %76
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %170

123:                                              ; preds = %78
  %124 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #10
  br label %169

125:                                              ; preds = %87
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %169

127:                                              ; preds = %90
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %165

129:                                              ; preds = %96, %92
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %165

131:                                              ; preds = %101
  %132 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %43)
  %133 = icmp ugt i32 %132, 1
  br i1 %133, label %134, label %156

134:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #10
  %135 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %136 unwind label %145

136:                                              ; preds = %134
  %137 = extractvalue { double, double } %135, 0
  store double %137, ptr %17, align 16
  %138 = extractvalue { double, double } %135, 1
  store double %138, ptr %49, align 8
  %139 = call noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE5beginEv(ptr noundef nonnull align 16 dereferenceable(1040) %43)
  %140 = call noundef ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE3endEv(ptr noundef nonnull align 16 dereferenceable(1040) %43)
  %.not7490 = icmp eq ptr %139, %140
  br i1 %.not7490, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %136
  %141 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %43)
  %142 = uitofp i32 %141 to float
  %143 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef %142)
  %.sroa.02.0.copyload = load double, ptr %17, align 16
  %.sroa.23.0.copyload = load double, ptr %49, align 8, !tbaa !5
  %144 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %.sroa.02.0.copyload, double %.sroa.23.0.copyload)
          to label %149 unwind label %153

145:                                              ; preds = %134
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %155

.lr.ph:                                           ; preds = %136, %.lr.ph
  %.07291 = phi ptr [ %148, %.lr.ph ], [ %139, %136 ]
  %.sroa.06.0.copyload = load double, ptr %.07291, align 16
  %.sroa.27.0..sroa_idx = getelementptr inbounds i8, ptr %.07291, i64 8
  %.sroa.27.0.copyload = load double, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !5
  %147 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %.sroa.06.0.copyload, double %.sroa.27.0.copyload)
  %148 = getelementptr inbounds i8, ptr %.07291, i64 16
  %.not74 = icmp eq ptr %148, %140
  br i1 %.not74, label %._crit_edge, label %.lr.ph

149:                                              ; preds = %._crit_edge
  %150 = extractvalue { double, double } %144, 0
  %151 = extractvalue { double, double } %144, 1
  %152 = getelementptr inbounds i8, ptr %58, i64 32
  store double %150, ptr %152, align 16
  %.sroa.55.0..sroa_idx = getelementptr inbounds i8, ptr %58, i64 40
  store double %151, ptr %.sroa.55.0..sroa_idx, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #10
  br label %164

153:                                              ; preds = %._crit_edge
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %155

155:                                              ; preds = %153, %145
  %.pn = phi { ptr, i32 } [ %154, %153 ], [ %146, %145 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #10
  br label %165

156:                                              ; preds = %131
  %.sroa.0.0.copyload = load double, ptr %37, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.217.0..sroa_idx, align 8, !tbaa !5
  %157 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
          to label %158 unwind label %162

158:                                              ; preds = %156
  %159 = extractvalue { double, double } %157, 0
  %160 = extractvalue { double, double } %157, 1
  %161 = getelementptr inbounds i8, ptr %58, i64 32
  store double %159, ptr %161, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %58, i64 40
  store double %160, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  br label %164

162:                                              ; preds = %156
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %165

164:                                              ; preds = %149, %158, %105
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %15) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr nonnull %15) #10
  br label %166

165:                                              ; preds = %162, %155, %129, %127
  %.pn.pn = phi { ptr, i32 } [ %.pn, %155 ], [ %163, %162 ], [ %130, %129 ], [ %128, %127 ]
  call void @_ZN3JPH15ContactManifoldD2Ev(ptr noundef nonnull align 16 dereferenceable(2128) %15) #10
  call void @llvm.lifetime.end.p0(i64 2128, ptr nonnull %15) #10
  br label %169

166:                                              ; preds = %83, %164
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(244) %13) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 144, 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
  %167 = call noundef i32 @_ZNSt13__atomic_baseIjEppEi(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef 0) #10
  %168 = call noundef i32 @_ZNKSt13__atomic_baseIjEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %27) #10
  %.not = icmp ult i32 %167, %168
  br i1 %.not, label %54, label %._crit_edge95

169:                                              ; preds = %125, %165, %123
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %124, %123 ], [ %.pn.pn, %165 ], [ %126, %125 ]
  call void @_ZN3JPH18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(244) %13) #10
  br label %170

170:                                              ; preds = %169, %121
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %169 ], [ %122, %121 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %13) #10
  br label %171

171:                                              ; preds = %170, %119, %117
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %170 ], [ %120, %119 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %11) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %10) #10
  br label %172

172:                                              ; preds = %171, %115
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %171 ], [ %116, %115 ]
  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 %173

173:                                              ; preds = %172, %113
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %172 ], [ %114, %113 ]
  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 %174

174:                                              ; preds = %173, %111
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn, %173 ], [ %112, %111 ]
  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 %175

175:                                              ; preds = %174, %109
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn, %174 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  br label %176

._crit_edge95:                                    ; preds = %166, %20
  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

176:                                              ; preds = %107, %175, %52
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %53, %52 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %175 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  br label %177

177:                                              ; preds = %176, %50
  %.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, %176 ], [ %51, %50 ]
  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
}

; 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(1140), 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(1140), 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_17ShapeCastSettingsERZNS0_18JobFindCCDContactsES3_S5_E23CCDNarrowPhaseCollectorRKNS_11BodyManagerES5_f(ptr noundef nonnull align 16 dereferenceable(244), 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(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 #7 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 #8

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 #8

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() local_unnamed_addr #6 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 #6 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"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { "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 530}
!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, !34, i64 448, !35, i64 536, !38, i64 784, !40, i64 864, !41, i64 976, !21, i64 1040, !42, i64 1088, !13, i64 1120, !12, i64 1136}
!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 = !{!"_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}
!35 = !{!"_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, !36, i64 236, !16, i64 240}
!36 = !{!"_ZTSSt6atomicIjE", !37, i64 0}
!37 = !{!"_ZTSSt13__atomic_baseIjE", !20, i64 0}
!38 = !{!"_ZTSN3JPH17ConstraintManagerE", !16, i64 0, !39, i64 8, !21, i64 32}
!39 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !19, i64 0, !19, i64 8, !16, i64 16}
!40 = !{!"_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}
!41 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !20, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !20, i64 32, !36, i64 36, !20, i64 40, !16, i64 48, !36, i64 56}
!42 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !19, i64 0, !19, i64 8, !16, i64 16}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!9, !10, i64 0}
!46 = !{!47, !16, i64 4568}
!47 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !16, i64 0, !28, i64 8, !28, i64 9, !48, i64 16, !20, i64 48, !36, i64 52, !6, i64 56, !36, i64 116, !6, i64 120, !36, i64 180, !6, i64 184, !36, i64 244, !6, i64 248, !36, i64 308, !6, i64 312, !36, i64 372, !6, i64 376, !49, i64 436, !20, i64 4536, !36, i64 4540, !36, i64 4544, !36, i64 4548, !36, i64 4552, !36, i64 4556, !36, i64 4560, !16, i64 4568, !20, i64 4576, !36, i64 4580, !36, i64 4584, !16, i64 4592, !20, i64 4600, !50, i64 4608, !52, i64 4616, !52, i64 4880, !52, i64 5144, !52, i64 5408, !50, i64 5672, !52, i64 5680, !50, i64 5944, !50, i64 5952, !50, i64 5960, !52, i64 5968, !50, i64 6232, !52, i64 6240, !50, i64 6504, !50, i64 6512, !52, i64 6520, !50, i64 6784, !50, i64 6792, !52, i64 6800, !52, i64 7064, !50, i64 7328, !50, i64 7336}
!48 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !6, i64 0}
!49 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !20, i64 0, !6, i64 4}
!50 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !51, i64 0}
!51 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !16, i64 0}
!52 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !20, i64 0, !6, i64 8}
!53 = !{!54, !12, i64 32}
!54 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !12, i64 32, !12, i64 36, !36, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !55, i64 72, !20, i64 104, !16, i64 112, !36, i64 120}
!55 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !56, i64 0, !19, i64 8, !19, i64 16, !16, i64 24}
!56 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !16, i64 0}
!57 = !{!15, !16, i64 432}
!58 = !{i64 0, i64 16, !5, i64 16, i64 16, !5}
!59 = !{i64 0, i64 16, !5}
!60 = !{!61, !61, i64 0}
!61 = !{!"vtable pointer", !7, i64 0}
!62 = !{!63, !12, i64 64}
!63 = !{!"_ZTSN3JPH20PhysicsUpdateContext4Step7CCDBodyE", !13, i64 0, !13, i64 16, !13, i64 32, !64, i64 48, !64, i64 52, !65, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !66, i64 80}
!64 = !{!"_ZTSN3JPH6BodyIDE", !20, i64 0}
!65 = !{!"_ZTSN3JPH10SubShapeIDE", !20, i64 0}
!66 = !{!"_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}
!67 = !{!15, !12, i64 480}
!68 = !{!20, !20, i64 0}
!69 = !{!70, !12, i64 48}
!70 = !{!"_ZTSN3JPH18CollideShapeResultE", !13, i64 0, !13, i64 16, !13, i64 32, !12, i64 48, !65, i64 52, !65, i64 56, !64, i64 60, !71, i64 64, !71, i64 592}
!71 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !20, i64 0, !6, i64 16}
!72 = !{!73, !12, i64 32}
!73 = !{!"_ZTSN3JPH15ContactManifoldE", !13, i64 0, !13, i64 16, !12, i64 32, !65, i64 36, !65, i64 40, !74, i64 48, !74, i64 1088}
!74 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj64EEE", !20, i64 0, !6, i64 16}
!75 = !{!63, !28, i64 104}


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